Compare commits

...

10 Commits

Author SHA1 Message Date
JamesFlare1212
c53391f4b6 update memu and few more improvement 2024-03-13 04:48:32 -04:00
JamesFlare1212
6e8ecc4dbc remove comment-visitors and comment-count 2024-03-12 05:35:51 -04:00
JamesFlare1212
861f4792ed fix artalk 2024-03-12 04:58:45 -04:00
JamesFlare1212
33584d0123 add artalk 2024-03-12 04:27:11 -04:00
JamesFlare1212
4ff4a125ff add feature collection 2024-03-12 03:53:28 -04:00
JamesFlare1212
03a1cf73d6 update .gitignore 2024-03-12 03:35:11 -04:00
JamesFlare1212
4980de8456 csci-1100-hw-2 2024-03-12 03:02:21 -04:00
JamesFlare1212
70b115b8d3 csci-1100-hw-1 2024-03-12 02:40:10 -04:00
JamesFlare1212
c54ab7bea0 fix: gravatar-cloudflare-workers english title 2024-03-12 02:01:27 -04:00
JamesFlare1212
5443c93d1e gravatar-cloudflare-workers 2024-03-12 01:56:07 -04:00
37 changed files with 7618 additions and 88 deletions

3
.gitignore vendored
View File

@@ -1,3 +1,4 @@
*.lock
public/
resources/
resources/
isableFastRander/

View File

@@ -1,5 +1,9 @@
+++
title = '{{ replace .File.ContentBaseName "-" " " | title }}'
date = {{ .Date }}
draft = true
+++
---
title: {{ replace .TranslationBaseName "-" " " | title }}
subtitle:
date: {{ .Date }}
slug: {{ substr .File.UniqueID 0 7 }}
description:
keywords:
draft: true
---

37
archetypes/friends.md Normal file
View File

@@ -0,0 +1,37 @@
---
title: {{ replace .TranslationBaseName "-" " " | title }}
subtitle:
layout: friends
date: {{ .Date }}
description: "{{ .Site.Params.author.name }}'s friends"
keywords:
- 'Hugo FixIt'
- 'friends template'
- 友情链接
comment: false
---
<!-- When you set data `friends.yml` in `yourProject/data/` directory, it will be automatically loaded here. -->
---
<!-- You can define additional content below for this page. -->
## Base info
```yaml
- nickname: Lruihao
avatar: https://lruihao.cn/images/avatar.jpg
url: https://lruihao.cn
description: Lruihao's Note
```
## Friendly Reminder
{{< admonition info "Notice" true >}}
1. If you want to exchange link, please leave a comment in the above format. (personal non-commercial blogs / websites only)
2. :(fa-solid fa-exclamation-triangle): Website failure, stop maintenance and improper content may be unlinked!
3. Those websites that do not respect other people's labor achievements, reprint without source, or malicious acts, please do not come to exchange.
{{< /admonition >}}

View File

@@ -0,0 +1,45 @@
---
title: {{ replace .TranslationBaseName "-" " " | title }}
subtitle:
date: {{ .Date }}
slug: {{ substr .File.UniqueID 0 7 }}
draft: true
author:
name:
link:
email:
avatar:
description:
keywords:
license:
comment: false
weight: 0
tags:
- draft
categories:
- draft
collections:
- draft
hiddenFromHomePage: false
hiddenFromSearch: false
hiddenFromRss: false
hiddenFromRelated: false
summary:
resources:
- name: featured-image
src: featured-image.jpg
- name: featured-image-preview
src: featured-image-preview.jpg
toc: true
math: false
lightgallery: false
password:
message:
repost:
enable: true
url:
# See details front matter: https://fixit.lruihao.cn/documentation/content-management/introduction/#front-matter
---
<!--more-->

45
archetypes/posts.md Normal file
View File

@@ -0,0 +1,45 @@
---
title: {{ replace .TranslationBaseName "-" " " | title }}
subtitle:
date: {{ .Date }}
slug: {{ substr .File.UniqueID 0 7 }}
draft: true
author:
name:
link:
email:
avatar:
description:
keywords:
license:
comment: false
weight: 0
tags:
- draft
categories:
- draft
collections:
- draft
hiddenFromHomePage: false
hiddenFromSearch: false
hiddenFromRss: false
hiddenFromRelated: false
summary:
resources:
- name: featured-image
src: featured-image.jpg
- name: featured-image-preview
src: featured-image-preview.jpg
toc: true
math: false
lightgallery: false
password:
message:
repost:
enable: true
url:
# See details front matter: https://fixit.lruihao.cn/documentation/content-management/introduction/#front-matter
---
<!--more-->

View File

@@ -25,78 +25,9 @@ enableGitInfo = false
# whether to use emoji code
enableEmoji = true
# -------------------------------------------------------------------------------------
# Menu Configuration
# See: https://fixit.lruihao.cn/documentation/basics/#menu-configuration
# -------------------------------------------------------------------------------------
defaultContentLanguage = "en"
defaultContentLanguageInSubdir = true
[languages]
[languages.en]
weight = 10
disabled = false
contentDir = "content/en"
languageCode = "en"
languageName = "English"
hasCJKLanguage = false
copyright = "This work is licensed under CC BY-NC-SA-4.0."
[languages.zh-CN]
weight = 20
disabled = false
contentDir = "content/zh-cn"
languageCode = "zh-CN"
languageName = "简体中文"
hasCJKLanguage = true
copyright = "本站内容采用 CC BY-NC-SA 4.0 国际许可协议。"
[menu]
[[menu.main]]
identifier = "archives"
parent = ""
# you can add extra information before the name (HTML format is supported), such as icons
pre = ""
# you can add extra information after the name (HTML format is supported), such as icons
post = ""
name = "Archives"
url = "/archives/"
# title will be shown when you hover on this menu link
title = ""
weight = 1
# FixIt 0.2.14 | NEW add user-defined content to menu items
[menu.main.params]
# add css class to a specific menu item
class = ""
# whether set as a draft menu item whose function is similar to a draft post/page
draft = false
# FixIt 0.2.16 | NEW add fontawesome icon to a specific menu item
icon = "fa-solid fa-archive"
# FixIt 0.2.16 | NEW set menu item type, optional values: ["mobile", "desktop"]
type = ""
[[menu.main]]
identifier = "categories"
parent = ""
pre = ""
post = ""
name = "Categories"
url = "/categories/"
title = ""
weight = 2
[menu.main.params]
icon = "fa-solid fa-folder-tree"
[[menu.main]]
identifier = "tags"
parent = ""
pre = ""
post = ""
name = "Tags"
url = "/tags/"
title = ""
weight = 3
[menu.main.params]
icon = "fa-solid fa-tags"
# -------------------------------------------------------------------------------------
# Related content Configuration
# See: https://gohugo.io/content-management/related/
@@ -187,7 +118,7 @@ defaultContentLanguageInSubdir = true
# -------------------------------------------------------------------------------------
[sitemap]
changefreq = "weekly"
changefreq = "always"
filename = "sitemap.xml"
priority = 0.5
@@ -450,9 +381,9 @@ defaultContentLanguageInSubdir = true
license = '<a rel="license external nofollow noopener noreferrer" href="https://creativecommons.org/licenses/by-nc/4.0/" target="_blank">CC BY-NC 4.0</a>'
# FixIt 0.3.0 | NEW whether to show Hugo and theme info
[params.footer.powered]
enable = false
hugoLogo = true
themeLogo = true
enable = true
hugoLogo = false
themeLogo = false
# FixIt 0.2.17 | CHANGED Site creation time
[params.footer.siteTime]
enable = false
@@ -544,7 +475,7 @@ defaultContentLanguageInSubdir = true
Twitter = ""
Instagram = ""
Facebook = ""
Telegram = ""
Telegram = "ossOpration"
Medium = ""
Gitlab = ""
Youtubelegacy = ""
@@ -805,26 +736,26 @@ defaultContentLanguageInSubdir = true
Mix = false
# FixIt 0.2.15 | CHANGED Comment config
[params.page.comment]
enable = false
enable = true
# FixIt 0.2.13 | NEW Artalk comment config (https://artalk.js.org/)
[params.page.comment.artalk]
enable = false
server = "https://yourdomain"
site = "默认站点"
enable = true
server = "https://artalk.jamesflare.com"
site = "FlareBlog"
placeholder = ""
noComment = ""
sendBtn = ""
editorTravel = true
flatMode = "auto"
# FixIt 0.2.17 | CHANGED enable lightgallery support
lightgallery = false
lightgallery = true
locale = "" # FixIt 0.2.15 | NEW
# FixIt 0.2.18 | NEW
emoticons = ""
nestMax = 2
nestSort = "DATE_ASC" # ["DATE_ASC", "DATE_DESC", "VOTE_UP_DESC"]
vote = true
voteDown = false
voteDown = true
uaBadge = true
listSort = true
imgUpload = true
@@ -1080,7 +1011,7 @@ defaultContentLanguageInSubdir = true
# FixIt 0.2.18 | NEW Depends on the author's email, if the author's email is not set, the local avatar will be used
enable = false
# Gravatar host, default: "www.gravatar.com"
host = "www.gravatar.com" # ["cn.gravatar.com", "gravatar.loli.net", ...]
host = "gravatar.jamesflare.com" # ["cn.gravatar.com", "gravatar.loli.net", ...]
style = "" # ["", "mp", "identicon", "monsterid", "wavatar", "retro", "blank", "robohash"]
# FixIt 0.2.16 | NEW Back to top

View File

@@ -0,0 +1,16 @@
[en]
weight = 10
disabled = false
contentDir = "content/en"
languageCode = "en"
languageName = "English"
hasCJKLanguage = false
copyright = "This work is licensed under CC BY-NC-SA-4.0."
[zh-CN]
weight = 20
disabled = false
contentDir = "content/zh-cn"
languageCode = "zh-CN"
languageName = "简体中文"
hasCJKLanguage = true
copyright = "本站内容采用 CC BY-NC-SA 4.0 国际许可协议。"

View File

@@ -0,0 +1,81 @@
# -------------------------------------------------------------------------------------
# Menu Configuration
# See: https://fixit.lruihao.cn/documentation/basics/#menu-configuration
# -------------------------------------------------------------------------------------
[[main]]
identifier = "archives"
parent = ""
# you can add extra information before the name (HTML format is supported), such as icons
pre = ""
# you can add extra information after the name (HTML format is supported), such as icons
post = ""
name = "Archives"
url = "/archives/"
# title will be shown when you hover on this menu link
title = ""
weight = 1
# FixIt 0.2.14 | NEW add user-defined content to menu items
[main.params]
# add css class to a specific menu item
class = ""
# whether set as a draft menu item whose function is similar to a draft post/page
draft = false
# FixIt 0.2.16 | NEW add fontawesome icon to a specific menu item
icon = "fa-solid fa-archive"
# FixIt 0.2.16 | NEW set menu item type, optional values: ["mobile", "desktop"]
type = ""
[[main]]
identifier = "categories"
parent = "archives"
pre = ""
post = ""
name = "Categories"
url = "/categories/"
title = ""
weight = 2
[main.params]
icon = "fa-solid fa-folder-tree"
[[main]]
identifier = "collections"
parent = "archives"
name = "Collections"
url = "collections/"
weight = 3
[main.params]
icon = "fa-solid fa-layer-group"
[[main]]
identifier = "tags"
parent = "archives"
pre = ""
post = ""
name = "Tags"
url = "/tags/"
title = ""
weight = 4
[main.params]
icon = "fa-solid fa-tags"
[[main]]
identifier = "about"
name = "About"
url = "about/"
weight = 20
[main.params]
icon = "fa-solid fa-circle-info"
[[main]]
identifier = "friends"
parent = "about"
name = "Friends"
url = "/friends/"
weight = 5
[main.params]
icon = "fa-solid fa-link"
[[main]]
identifier = "resume"
parent = "about"
name = "My Resume"
url = "/resume/"
weight = 5
[main.params]
icon = "fa-solid fa-newspaper"

View File

@@ -0,0 +1,81 @@
# -------------------------------------------------------------------------------------
# Menu Configuration
# See: https://fixit.lruihao.cn/documentation/basics/#menu-configuration
# -------------------------------------------------------------------------------------
[[main]]
identifier = "archives"
parent = ""
# you can add extra information before the name (HTML format is supported), such as icons
pre = ""
# you can add extra information after the name (HTML format is supported), such as icons
post = ""
name = "归档"
url = "/archives/"
# title will be shown when you hover on this menu link
title = ""
weight = 1
# FixIt 0.2.14 | NEW add user-defined content to menu items
[main.params]
# add css class to a specific menu item
class = ""
# whether set as a draft menu item whose function is similar to a draft post/page
draft = false
# FixIt 0.2.16 | NEW add fontawesome icon to a specific menu item
icon = "fa-solid fa-archive"
# FixIt 0.2.16 | NEW set menu item type, optional values: ["mobile", "desktop"]
type = ""
[[main]]
identifier = "categories"
parent = "archives"
pre = ""
post = ""
name = "分类"
url = "/categories/"
title = ""
weight = 2
[main.params]
icon = "fa-solid fa-folder-tree"
[[main]]
identifier = "collections"
parent = "archives"
name = "合集"
url = "collections/"
weight = 3
[main.params]
icon = "fa-solid fa-layer-group"
[[main]]
identifier = "tags"
parent = "archives"
pre = ""
post = ""
name = "标签"
url = "/tags/"
title = ""
weight = 4
[main.params]
icon = "fa-solid fa-tags"
[[main]]
identifier = "about"
name = "关于"
url = "about/"
weight = 20
[main.params]
icon = "fa-solid fa-circle-info"
[[main]]
identifier = "friends"
parent = "about"
name = "友链"
url = "/friends/"
weight = 5
[main.params]
icon = "fa-solid fa-link"
[[main]]
identifier = "resume"
parent = "about"
name = "我的简历"
url = "/resume/"
weight = 5
[main.params]
icon = "fa-solid fa-newspaper"

View File

@@ -0,0 +1,34 @@
---
title: Friends
subtitle:
layout: friends
date: 2024-03-12T17:16:13-04:00
description: "James's friends"
keywords: ["friends"]
comment: false
---
<!-- When you set data `friends.yml` in `yourProject/data/` directory, it will be automatically loaded here. -->
---
<!-- You can define additional content below for this page. -->
## Base info
```yaml
- nickname: James
avatar: https://www.jamesflare.com/site-logo.avif
url: https://jamesflare.com/
description: FlareBlog
```
## Friendly Reminder
{{< admonition info "Notice" true >}}
1. If you want to exchange link, please leave a comment in the above format.
2. Website failure, stop maintenance and improper content may be unlinked!
3. Those websites that do not respect other people's labor achievements, reprint without source, or malicious acts, please do not come to exchange.
{{< /admonition >}}

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

View File

@@ -0,0 +1,245 @@
---
slug: "gravatar-cloudflare-workers"
title: "Using CloudFlare Workers for Reverse Proxy"
subtitle: ""
date: 2023-01-15T21:31:42+08:00
draft: false
author:
name: James
link: https://www.jamesflare.com
email:
avatar: /site-logo.avif
description: "Gravatar's avatar service is unstable in mainland China. While we can use some public mirrors, we also have the option to set up our own reverse proxy. However, setting up a self-hosted reverse proxy requires a server, which may incur additional costs. More importantly, an individual's server is typically limited to a single data center, resulting in significant speed variations across different regions, unlike Gravatar's global CDN coverage."
keywords: ["Gravatar", "CloudFlare Workers"]
license: ""
comment: true
weight: 0
tags:
- CloudFlare
- JavaScript
categories:
- Tutorials
hiddenFromHomePage: false
hiddenFromSearch: false
summary: "Gravatar's avatar service is unstable in mainland China. While we can use some public mirrors, we also have the option to set up our own reverse proxy. However, setting up a self-hosted reverse proxy requires a server, which may incur additional costs. More importantly, an individual's server is typically limited to a single data center, resulting in significant speed variations across different regions, unlike Gravatar's global CDN coverage."
resources:
- name: featured-image
src: featured-image.jpg
- name: featured-image-preview
src: featured-image-preview.jpg
toc:
enable: true
math:
enable: false
lightgallery: true
seo:
images: []
repost:
enable: true
url: ""
# See details front matter: https://fixit.lruihao.cn/theme-documentation-content/#front-matter
---
## Introduction
In mainland China, Gravatar's avatar service has always been unstable and unavailable. In addition to using some public mirror sites, we can also set up our own reverse proxy. However, if you want to set up your own reverse proxy, you need a server, which may incur additional costs. More importantly, a typical person's server can only be located in one data center, resulting in large speed differences between regions, unlike Gravatar which has a global CDN network.
I hope that users worldwide can enjoy fast loading speeds. At the very least, the proxies used by users may also be distributed globally, right?
{{< image src="network-map.svg" width="750px" caption="CloudFlare Network Map" >}}
[CloudFlare Workers](https://developers.cloudflare.com/workers/learning/how-workers-works/) can directly process requests in their nearby data centers, which is much faster than using a random server.
## Pricing
So, what is the [pricing](https://developers.cloudflare.com/workers/platform/pricing) for Workers?
| | Free Plan | Paid Plan - Bundled | Paid Plan - Unbound |
| -------- | -------------------------- | ---------------------------------- | ------------------------------------------------- |
| Requests | 100,000 / day | 10 million / month, +$0.50/million | 1 million / month, + $0.15/million |
| Duration | 10ms CPU time / invocation | 50 ms CPU time / invocation | 400,000 GB-s, + $12.50/million GB-s |
The free plan is generally sufficient for most use cases.
You get 100,000 free requests per day, which is basically inexhaustible. The 10ms CPU time per invocation is also adequate, as our code likely only takes around 1ms to execute.
Even if you do need to pay, since we don't require Workers KV, Queues, Durable Objects, or other products, and only need the number of requests, the Paid Plan - Unbound tier applies. 1 million requests cost a mere $0.15, equivalent to about one Chinese yuan, which is incredibly cheap.
### Cost Calculation
Assuming each image is around 30KB, 1 million images would consume approximately 28.6GB of traffic. Considering that VPS providers may calculate traffic in both directions, it would be about 57.2GB.
The price of 57GB per yuan is considered average in the VPS market, not particularly cheap, especially when compared to unlimited traffic plans or Russian VPS offerings. However, when taking into account the quality of the network and the global distribution of data centers, CloudFlare's offering is unbeatable.
CloudFlare's speed is not something that cheap VPS plans can match. If you were to use a premium network like CN2, the price would definitely be much higher.
## Workers JavaScript
The usage is very straightforward, essentially just JavaScript.
Let's construct a simple example:
```JavaScript
addEventListener(
"fetch", event => {
let url = new URL(event.request.url);
url.hostname = "www.gravatar.com";
url.protocol = "https";
let request = new Request(url, event.request);
event.respondWith(
fetch(request)
)
}
)
```
In essence, the logic is to return the requested URL received via HTTPS, but change the `hostname` sent at the time of the request to `www.gravatar.com`.
### Deployment
The deployment process is also very simple. Create a new Service in the CloudFlare Workers dashboard.
Copy the above code into it and click Deploy.
## Custom Domains
By default, you will be assigned a workers.dev subdomain, which is perfectly fine to use. However, I prefer to set up my own custom domain.
Go to the Service settings, then to Triggers, click Add Custom Domains, and enter your desired domain name.
For example, if I choose gravatar.jamesflare.com, I would enter `gravatar.jamesflare.com`.
## Testing
Let's test it out and see if it works. Here, I'll use my avatar URL for testing: `/avatar/75cea16f157b9c5da5435379ab6cf294?s=32&d=`.
Constructing the URL:
![](https://gravatar.jamesflare.com/avatar/75cea16f157b9c5da5435379ab6cf294?s=32&d=) https://gravatar.jamesflare.com/avatar/75cea16f157b9c5da5435379ab6cf294?s=32&d=
As you can see, it works perfectly.
## Usage in Hugo
This part is somewhat derivative. The process can be quite convoluted and may vary between different themes, so I want to focus on the thought process rather than providing a direct solution, as it may not be universally applicable.
I am using the FixIt theme, which is roughly equivalent to LoveIt.
### Locating the Template File
After some searching, I found that the template responsible for rendering the author's avatar in articles is located at `/FixIt/layouts/partials/single/post-author.html`.
The code is as follows:
```go-html-template
{{- $params := .Scratch.Get "params" -}}
{{- $author := .Site.Author | merge (dict "name" "Anonymous" "link" (echoParam $params "authorlink") "email" (echoParam $params "authoremail")) -}}
{{- $avatar := .Site.Params.home.profile.avatarURL -}}
{{- if isset $params "author" | and (ne $params.author .Site.Author.name) -}}
{{- $author = dict "name" $params.author | merge $author -}}
{{- $author = dict "link" (echoParam $params "authorlink") | merge $author -}}
{{- $author = dict "email" (echoParam $params "authoremail") | merge $author -}}
{{- $avatar = "" -}}
{{- end -}}
{{- if (not $avatar | or $params.gravatarForce) | and $author.email -}}
{{- $gravatar := .Site.Params.gravatar -}}
{{- with $gravatar -}}
{{- $avatar = printf "https://%v/avatar/%v?s=32&d=%v"
(path.Clean .Host | default "www.gravatar.com")
(md5 $author.email)
(.Style | default "")
-}}
{{- end -}}
{{- end -}}
<span class="post-author">
{{- $content := $author.name -}}
{{- $icon := dict "Class" "fa-solid fa-user-circle" -}}
{{- if $avatar -}}
{{- $content = printf "%v&nbsp;%v" (dict "Src" $avatar "Class" "avatar" "Alt" $author.name | partial "plugin/image.html") $author.name -}}
{{- $icon = "" -}}
{{- end -}}
{{- if $author.link -}}
{{- $options := dict "Class" "author" "Destination" $author.link "Title" (T "single.author") "Rel" "author" "Icon" $icon "Content" $content -}}
{{- partial "plugin/link.html" $options -}}
{{- else -}}
<span class="author">
{{- with $icon -}}
{{ . | partial "plugin/icon.html" }}
{{ end -}}
{{- $content | safeHTML -}}
</span>
{{- end -}}
</span>
{{- /* EOF */ -}}
```
### Identifying the Relevant Code Section
The following code snippet is responsible for handling the avatar:
```go-html-template
{{- if (not $avatar | or $params.gravatarForce) | and $author.email -}}
{{- $gravatar := .Site.Params.gravatar -}}
{{- with $gravatar -}}
{{- $avatar = printf "https://%v/avatar/%v?s=32&d=%v"
(path.Clean .Host | default "www.gravatar.com")
(md5 $author.email)
(.Style | default "")
-}}
{{- end -}}
{{- end -}}
```
It checks the value of the `Host` item under the `gravatar` sub-item of the `params` section in the configuration file.
If the `Host` item is empty, it defaults to `www.gravatar.com`.
There are two possible approaches: modifying the HTML template itself or modifying the value in the configuration file.
### Configuring the .toml File
I opted for the second approach.
My configuration file is in the .toml format, so I'll construct it as follows:
```toml
[params]
[params.gravatar]
host = "gravatar.jamesflare.com"
```
### Previewing in the Browser
Regenerate the site. Here, I only need to preview it:
```bash
hugo server -D -e production --disableFastRender
```
Open the browser and navigate to `http://localhost:1313/`. Check the relevant part of the HTML source code:
```html
data-src="https://gravatar.jamesflare.com/avatar/75cea16f157b9c5da5435379ab6cf294?s=32&amp;d="
data-srcset="https://gravatar.jamesflare.com/avatar/75cea16f157b9c5da5435379ab6cf294?s=32&amp;d=, https://gravatar.jamesflare.com/avatar/75cea16f157b9c5da5435379ab6cf294?s=32&amp;d= 1.5x, https://gravatar.jamesflare.com/avatar/75cea16f157b9c5da5435379ab6cf294?s=32&amp;d= 2x"
```
As you can see, the change has taken effect, which can also be verified using the Sources tab in the browser's developer tools.
### Side Note
As a side note, it turns out that the FixIt theme's configuration file already included this option, and I was the clown for not noticing it earlier, despite searching extensively online. Here's the relevant section:
```toml
[params]
[params.gravatar]
# Gravatar host, default: "www.gravatar.com"
host = "www.gravatar.com" # ["cn.gravatar.com", "gravatar.loli.net", ...]
style = "" # ["", "mp", "identicon", "monsterid", "wavatar", "retro", "blank", "robohash"]
```

View File

@@ -0,0 +1,500 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 26.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 1713 848" style="enable-background:new 0 0 1713 848;" xml:space="preserve">
<style type="text/css">
.st0{fill:#B1B1BA;}
.st1{fill:#F38020;stroke:#000000;stroke-miterlimit:10;}
.st2{fill:#F38020;stroke:#000000;stroke-width:1;stroke-miterlimit:10.0002;}
</style>
<path class="st0" d="M1669.1,756.9l-0.8,2.6l5.6-2.5l-0.5,2.6l-2.1,2.6l-4.2,2.9l-7,4.5l-4.6,2.5l-0.6,2.9l-4,0.1l-6.2,2.3l-4.7,4.1
l-8.1,6.2l-6.3,2.8l-4,1.8l-4.5-0.1l-1.5-2.1l-5.1-0.4l1.1-2.3l6.4-4.6l11.3-6.1l4.3-1.1l5.5-2.4l7-3.2l5.6-3.2l5.9-4.6l3.2-1.6
l3.4-3.4l5.8-2.9L1669.1,756.9L1669.1,756.9z M1697.9,726.4l-0.4,6.8l2.9-4.4l1.2,1.8l-2.3,4.9l2.9,2.1l3.2,0.5l4.6-2.5l2.1,0.8
l-5.1,5.7l-4.2,3.8l-3.8-0.2l-2.8,2l-1.5,2.7l-1.6,1.2l-4.5,3.4l-5.9,4.2l-5.9,2.5l0.4-1.6l-1.4-0.9l6.9-5.1l0.8-3.5l-3.7-2.5
l1.7-2.4l5.3-2.2l4.2-5l2.4-4.1l0.6-4.4l0.9-1.1l-0.9-2.7l-0.8-5.7l0.4-4.6l2.3-0.5l0.8,3.6l3.1,1.7L1697.9,726.4L1697.9,726.4z
M1577.3,583.8l0.5-2.3l0.1-3.6l-1.6-3.2l0.1-2.7l-1.3-0.8l0.1-3.9l-1.2-3.2l-2.3,2.4l-0.4,1.8l-1.5,3.5l-1.8,3.4l0.6,2.1l-1.2,1.3
l-1.5,4.8l0.1,3.7l-0.7,1.8l0.3,3.1l-2.6,5l-1.3,3.5l-1.7,2.9l-1.7,3.4l-4.1,2.1l-4.9-2.1l-0.5-2l-2.5-1.6h-1.6l-3.3-3.8l-2.5-2.2
l-3.9-2l-3.9-3.5l-0.1-1.8l2.5-3.1l2.1-3.2l-0.3-2.6l1.9-0.2l2.5-2.5l2-3.4l-2.2-3.2l-1.5,1.2l-2-0.5l-3.5,1.8l-3.2-2l-1.7,0.7
l-4.5-1.6l-2.7-2.7l-3.5-1.5l-3.1,0.9l3.9,2.1l-0.3,3.2l-4.8,1.2l-2.8-0.7l-3.6,2.2l-2.9,3.7l0.6,1.5l-2.7,1.7l-3.4,5.1l0.6,3.5
l-3.4-0.6h-3.5l-2.5-3.8l-3.7-2.9l-2.8,0.8l-2.6,0.9l-0.3,1.6l-2.4-0.7l-0.3,1.8l-3,1.1l-1.7,2.5l-3.5,3.1l-1.4,4.8l-2.3-1.3
l-2.2,3.1l1.5,3l-2.6,1.2l-1.4-5.5l-4.8,5.4l-0.8,3.5l-0.7,2.5l-3.8,3.3l-2,3.4l-3.5,2.8l-6.1,1.9l-3.1-0.2l-1.5,0.6l-1.1,1.4
l-3.5,0.7l-4.7,2.4l-1.4-0.8l-2.6,0.5l-4.6,2.3l-3.2,2.7l-4.8,2.1l-3.1,4.4l0.4-4.8l-3.1,4.6l-0.1,3.7l-1.3,3.2l-1.5,1.5l-1.3,3.7
l0.9,1.9l0.1,2l1.6,5l-0.7,3.3l-1-2.5l-2.3-1.8l0.4,5.9l-1.7-2.8l0.1,2.8l1.8,5l-0.6,5l1.7,2.5l-0.4,1.9l0.9,4.1l-1.3,3.6l-0.3,3.6
l0.7,6.5l-0.7,3.7l-2.2,4.4l-0.6,2.3l-1.5,1.5l-2.9,0.8l-1.5,3.7l2.4,1.2l4,4.1h3.6l3.8,0.3l3.3-2.1l3.4-1.8l1.4,0.3l4.5-3.4
l3.8-0.3l4.1-0.7l4.2,1.2l3.6-0.6l4.6-0.2l3-2.6l2.3-3.3l5.2-1.5l6.9-3.2l5,0.4l6.9-2.1l7.8-2.3l9.8-0.6l4,3.1l3.7,0.2l5.3,3.8
l-1.6,1.5l1.8,2.4l1.3,4.6l-1.6,3.4l2.9,2.6l4.3-5.1l4.3-2.1l6.7-5.5l-1.6,4.7l-3.4,3.2l-2.5,3.7l-4.4,3.5l5.2-1.2l4.7-4.4l-0.9,4.8
l-3.2,3.1l4.7,0.8l1.3,2.6l-0.4,3.3l-1.5,4.9l1.4,4l4,1.9l2.8,0.4l2.4,1l3.5,1.8l7.2-4.7l3.5-1.2l-2.7,3.4l2.6,1.1l2.7,2.8l4.7-2.7
l3.8-2.5l6.3-2.7l6-0.2l4.2-2.3l0.9-2l3-4.5l3.9-4.8l3.6-3.2l4.4-5.6l3.3-3.1l4.4-5l5.4-3.1l5-5.8l3.1-4.5l1.4-3.6l3.8-5.7l2.1-2.9
l2.5-5.7l-0.7-5.4l1.7-3.9l1.1-3.7V657l-2.8-5.1l-1.9-2.5l-2.9-3.9l0.7-6.7l-1.5,1l-1.6-2.8l-2.5,1.4l-0.6-6.9l-2.2-4l1-1.5
l-3.1-2.8l-3.2-3l-5.3-3.3l-0.9-4.3l1.3-3.3l-0.4-5.5l-1.3-0.7l-0.2-3.2l-0.2-5.5l1.1-2.8l-2.3-2.5l-1.4-2.7l-3.9,2.4L1577.3,583.8
L1577.3,583.8z M747.8,155.8l0.7,4.3l-3.9,5.4l-8.7,3.6l-6.7-0.9l4.2-6.4l-2.1-6.1l6.7-4.7l3.7-2.8l3.9-0.3l4.9,3.7L747.8,155.8
L747.8,155.8z M1383.4,380.5l-4.9-2l-1-5.5l2.2-2.8l5.8-1.8l3.2,0.1l1.6,2.5l-2,2.8l-0.6,3.6L1383.4,380.5L1383.4,380.5z
M1450,561.5l-7-4.4l5.3-1.3l2.8,2l1.8,1.9l-0.5,1.7L1450,561.5L1450,561.5z M1476.9,552.8l0.8-1.5l4.9-1.4l4-0.2l1.8-0.8l2,0.8
l-2.2,1.7l-6,2.8l-4.9,1.8l-4,4.8l-5,1.4l-0.6-0.8l0.7-2.1l2.8-3.9L1476.9,552.8L1476.9,552.8z M1439.6,549.5l3.5-0.6l1.2,2.8
l-6.6,1.2l-3.9,0.9l-3-0.1l2.2-3.6l3.1-0.1l1.6-2.2L1439.6,549.5L1439.6,549.5z M1465.8,547.8l-1.1,3.5l-8.6,1.8l-7.4-0.8l0.2-2.3
l4.5-1.3l3.4,1.9l3.8-0.5L1465.8,547.8L1465.8,547.8z M1397,540l1.3-2.6l10.3,3.1l1.8,4.1l8.3,1.1l6.6,3.8l-6.6,2.4l-5.9-2.5
l-5.1,0.2l-5.8-0.5l-5.2-1.2l-6.3-2.4l-4.1-0.6l-2.4,0.8l-10-2.6l-0.8-2.8l-5.1-0.4l4.1-6.1l6.8,0.4l4.4,2.4l2.3,0.5l0.7,2.3
L1397,540L1397,540z M1529.7,540.1l-0.3-4.8l1.2-2.2l1.3-2.2l1.2,1.9l-0.2,3L1529.7,540.1z M1491.9,518.3l-2.2,2.1l-3.9-1.2l-1-2.7
l5.7-0.3L1491.9,518.3L1491.9,518.3z M1511.9,520.8l-4.7-2.6l-4.6-0.5l-3.2,0.4l-3.9-0.2l1.5-3.5l6.9-0.3l6.1,1.8L1511.9,520.8
L1511.9,520.8z M1476.6,493.5l-4.3,1.3l-5.4-1.3l-9.3,0.3l-4.9,1l-0.9,4.8l5,5.6l3.1-2.9l10.5-2.1l-0.5,2.9l-2.4-0.9l-2.6,3.7
l-5,2.5l5.1,8.1l-1.1,2.2l4.7,7.4l-0.3,4.1l-3.1,1.9l-2.1-2.2l3-5.2l-5.6,2.4l-1.3-1.7l0.8-2.5l-3.9-3.7l0.7-6.2l-3.8,1.9l0.2,7.4
l-0.3,9.1l-3.6,1l-2.3-1.9l1.9-5.9l-0.6-6.1l-2.3-0.1l-1.6-4.3l2.4-4.2l0.9-5l2.9-9.6l1.2-2.6l4.7-4.8l4.4,1.9l7.1,0.9l6.5-0.3
l5.5-4.6l1,1.4L1476.6,493.5L1476.6,493.5z M1500.2,494.6l-2.9-0.6l-0.9,3.9l2.3,3.3l-1.6,0.8l-2.2-4l-1.7-8.2l1-5.1l1.8-2.3
l0.5,3.5l3.3,0.6l0.6,2.6L1500.2,494.6L1500.2,494.6z M1393.4,483.5l4.1,2.2l4.4-1.2l0.9-5.4l2.4-1.2l6.7-1.4l3.8-5l2.6-4l2.1-2.4
l4.6-3.5l4.1-4.4l2.5-5h2.3l3.1,3.2l0.4,2.8l3.8,1.7l4.8,2l-0.3,2.4l-3.8,0.4l1.2,3.1l-4,2.1l-3,5.8l4.3,6l-0.9,2.9l6.5,5.9
l-6.7,0.8l-1.8,4.3l0.2,5.8l-5.5,4.3l-0.3,6.4l-2.5,9.7l-0.8-2.3l-6.5,2.9l-2-3.9l-4-0.4l-2.8-2l-6.7,2.3l-2-3.1l-3.6,0.4l-4.6-0.8
l-0.7-8.5l-2.8-1.8l-2.6-5.4l-0.8-5.6l0.6-5.9L1393.4,483.5L1393.4,483.5z M1364.6,533.6l-4.5-5.3l-7-5.2l-2.2-3.8l-4.1-5.2
l-2.7-4.8l-4.1-8.9l-4.9-5.3l-1.7-5.5l-2.2-4.9l-5.1-4l-3.1-5.5l-4.4-3.6l-6.1-7l-0.6-3.2l3.6,0.3l8.8,1.2l5.2,6.2l4.5,4.3l3.2,2.7
l5.5,6.8l5.7,0.1l4.8,4.4l3.3,5.3l4.3,2.9l-2.3,5.2l3.2,2.2l2,0.2l0.9,4.4l1.9,3.6l4.1,0.5l2.6,4l-1.7,8l-0.7,9.8L1364.6,533.6
L1364.6,533.6z M1227.9,458.3l-2.8-5.1l-1.4-9.1l1.9-10.3l4.1,3.5l2.9,4.5l3,6.6l-0.6,6.6l-2.3,1.8L1227.9,458.3L1227.9,458.3z
M1005.4,60.1L992,59.4l-2.2-2.3l-7.9-1.4l-1.9-2.8l3.4-1.1l-1.6-2.8l5.4-4.3l-3.9-0.7l6.6-4.4l-2.5-2.2l6.8-2.7l10.1-3.1l11.7-0.9
l4.9-1.8l6.6-0.6l4.2,1.9l-1.3,1.5l-11.3,2.4l-9.8,2.4l-8.6,4.7l-2.8,5l-3.3,4.9l3.1,4.3l9.9,4.3L1005.4,60.1L1005.4,60.1z
M1487.8,185.7l-8.9-2l3.7,9l9.5,6.3l3,4.4l-6.5-3.8l0.1,4.8l-4.6-5.2l-3.8-6l-5.5-6.8l-2.4-4.6l-6.4-8.3l-7.8-6l-6.8-8.3l1.9-2.8
l-4.4-2.8l1.3-0.8l4.9,4l6.8,5.8l5.1,6l7.2,6.2L1487.8,185.7L1487.8,185.7z M834,150.2l-5.1-3.4l-0.9-2.5l6.7-2l1.7,3L834,150.2z
M758.5,133.7l4.7-0.8h5l-1.3,4.9l-4.2,5.3l4.8,0.4l0.4,0.6l4.1,7.1l3.2,1l2.9,6.9l1.3,2.3l5.8,1.2l-0.5,3.9l-2.4,1.8l1.9,3.1
l-4.3,3.3l-6.5-0.1l-8.3,1.7l-2.2-1.2l-3.3,2.9l-4.5-0.7l-3.5,2.3l-2.5-1.2l7.3-6.5l4.3-1.3l-7.5-1l-1.3-2.4l5.1-1.9l-2.6-3.3l1-4
l7.1,0.6l0.8-3.5l-3.1-3.8l-5.8-1.1l-1-1.6l1.7-2.7l-1.4-1.6l-2.6,2.8l-0.1-5.8l-2.2-3l1.9-6.1l3.7-4.8l3.6,0.4l5.5-0.5L758.5,133.7
L758.5,133.7z M827.9,238.2l-0.4,8.4l-2.4-0.4l-2,2.1l-2.1-1.7l-0.4-7.6l-1.3-3.6l2.8,0.3l2.5-1.9L827.9,238.2L827.9,238.2z
M866.7,23.9l-7.6,2l-6.7-1.1l2.2-1.2l-2.6-1.5l7.2-0.9l1.9,1.7L866.7,23.9L866.7,23.9z M853.8,18.9l-8.5,1.8l-1.2,3.4l-3,0.9
l-0.9,3.9l-4.4,0.2l-8.4-2.9l3-1.7l-5.7-1.4l-7.6-3.8l-3.2-3.5l9.3-1.6l2.2,1.5h5l1-1.5l5.1-0.2l4.8,1.6L853.8,18.9L853.8,18.9z
M872.8,14l-4.3,2.4l-10.1,0.5l-10.6-0.7l-0.9-1.3h-5.1l-4.3-2l10.4-1.2l5.3,1l3.2-1.2l9.1,1L872.8,14L872.8,14z M824.7,232.7
l-2.4-1.2l-1.4-4.2l1-2.3l3.2-2.3l1.1,5.2L824.7,232.7L824.7,232.7z M381.9,369.7l4.4,0.1l3.1,1.6l1.4-0.1l0.8,2.2l3-0.1l-0.3,1.9
l2.4,0.2l2.5,2.3l-2.3,2.6l-2.5-1.3l-2.6,0.2L390,379l-1.1,1.2l-2.2,0.4l-0.6-1.6l-2,0.9l-2.6,4.4l-1.4-1v-1.8l-3.6-1.1l-2.7,0.4
l-3.3-0.4l-2.7,1.1l-2.8-1.9l0.7-2.1l5,0.9l4.2,0.5l2.1-1.4l-2.2-2.8l0.3-2.4l-3.4-1l1.4-1.7l3.4,0.2l4.6,1L381.9,369.7L381.9,369.7
z M714.8,86.3l4.4,3.8l-6.1,4.2l-12.9,3.9l-3.9,1l-5.6-0.8L679,96.6l4.6-2.5l-8.8-2.7l7.8-1.1l0.1-1.6l-8.7-1.3l3.6-3.7l6.5-0.8
l5.9,3.8l6.9-3l5.1,1.5l7.3-2.9l6.9,0.4L714.8,86.3L714.8,86.3z M349.4,383.6l-3-1l-2.9-2.3l0.8-1.5l2.4-0.4l1.2,0.2l3.7,0.6
l2.7,1.5l0.8,1.8l-3.9,0.1L349.4,383.6L349.4,383.6z M1056.7,590.2l1.3,2.9l-0.8,3.1l-1.1,1.9l-1.6-3.8l-1.2,1.9l0.8,4.7l-0.7,2.7
l-1.6,1.5l-0.8,5.4l-2.7,7.4l-3.3,8.8l-4.3,12l-2.8,8.9l-3.1,7.4l-4.6,1.5l-5,2.7l-3-1.7l-4.2-2.3l-1.2-3.3l0.1-5.7l-1.6-5l-0.2-4.6
l1.3-4.6l2.6-1.1l0.2-2.1l2.9-4.8l0.8-4.1l-1.1-3l-0.8-4l-0.1-5.9l2.2-3.5l1-4.1l2.8-0.2l3.1-1.3l2.2-1.2h2.4l3.4-3.7l4.8-3.9
l1.8-3.2l-0.6-2.7l2.3,0.8l3.3-4.5l0.3-3.8l2-2.8l1.8,2.7l1.4,2.7l1.1,4.2L1056.7,590.2L1056.7,590.2z M341.4,353.8l5.2-0.8l1.8,1.5
l4.2,4l3,2.8h1.9l3.1,1.3l-0.6,1.7l4,0.3l3.9,2.6l-0.8,1.5l-3.8,0.8l-3.7,0.3l-3.8-0.5l-7.9,0.6l4.1-3.5l-2.1-1.7l-3.5-0.4l-1.7-1.8
l-0.8-3.6l-3.2,0.2l-4.9-1.7l-1.5-1.3l-7-1l-1.8-1.3l2.3-1.6l-5.4-0.3l-4.4,3.3l-2.3,0.1l-0.9,1.6l-2.9,0.7l-2.2-0.6l3.1-2l1.5-2.3
l2.7-1.4l3-1.3l4.2-0.6l1.4-0.7l4.7,0.5l4.3,0.1l4.9,2.1L341.4,353.8L341.4,353.8z M378.5,422.8l-3.3,0.8l1.7,2.9l-0.3,3.3l-2.7,3.7
l1.9,5l2.4-0.4l1.5-4.6l-1.6-2.2v-4.8l7.1-2.6l-0.6-3l2.1-2l1.7,4.5l3.9,0.1l3.5,3.5l0.1,2.1l5,0.1l6-0.7l3.1,2.9l4.2,0.7l3.2-1.9
l0.2-1.6l6.9-0.4l6.7-0.1l-4.8,1.9l1.8,3l4.4,0.4l4.1,3.2l0.7,5.1l2.9-0.2l2.2,1.5l3.6,2.4l3.3,4.1l0.1,3.3l2.1,0.1l2.9,3.1l2.1,2.3
l6.7,1.3l0.6-1.1l4.6-0.5l6,1.7l1.9,0.7l4.1,1.5l5.8,5.4l0.9,2.5l1.9-0.3l1.3,3.5l3,11.2l3,1l0.1,4.4l-4.2,5.2l1.7,2l9.9,1l0.3,6.3
l4.2-4.1l7.1,2.3l9.4,3.8l2.7,3.8l-0.8,3.5l6.5-2l10.9,3.4l8.4-0.3l8.4,5.3l7.3,7.1l4.3,1.9l4.8,0.2l2.1,2l2,8.1l1,3.9l-2,10.5
l-2.7,4.2l-7.7,8.8l-3.3,7.2l-3.9,5.5l-1.4,0.1l-1.4,4.7l1,11.9l-1.1,9.9l-0.3,4.1l-1.6,2.6l-0.5,8.5l-5.1,8.3l-0.6,6.5l-4.2,2.8
l-1.1,3.8h-5.9l-8.5,2.4l-3.6,2.9l-6,1.8l-6,5.1l-4.1,6.3l-0.3,4.8l1.3,3.5l-0.3,6.4l-0.8,3.1l-3.4,3.5l-4.5,11.2l-3.9,5l-3.2,3
l-1.5,6l-2.9,3.7l-2.6,4.2l-3.2,1.4l-2.4,1.3h-6.4l-8.8-2.7l-3.3-3.3l0.3,3.3l7.8,5.5l0.1,4.5l3.9,2.8l0.3,3.2l-3.3,8.3l-6.9,3.4
l-10.2,1.3l-5.8-0.6l2,3.8l0.1,4.8l1.8,3.1l-2.5,2.2l-5,0.9l-5.6-2.3l-1.5,1.6l2.5,6.2l4,1.9l2.2-2l2.5,3.2l-4.1,1.9l-2.9,3.9
l1.2,6.1l-0.2,3.3l-4.7,0.1l-2.9,3.1l0.1,4.7l6.4,4.5l5.2,1.3l0.2,5.6l-4.7,3.5l-0.5,7.2l-3.5,2.5l-0.9,2.9l4.1,6.3l4.7,3.6
l-2.2-0.4h-4.2l-1.7,1.5l-3.4,2.2l3.1,4.3l-0.2-4.1l3.3-2.5l3.7,0.7l2.3,2.8l4.3,4.6l7.7,3.6l7.3,1.5l-0.9,3l-4.3,0.3l-2.7-1.7
l-0.4,2l-3.2,1.8l-2.3-0.1l-3-0.5l-4.3-1.8l-5.3-0.9l-7.5-3.4l-6.3-3.2l-9.7-6.8l-2.9-3.5l-3.3-3.8l-0.2-3.6l-4.2-4.1l-5-10.6
l-0.2-6l3.4-4.8l-8.2-1.8l2.7-5.5l-2-10.2l-1.8-5.4l-1.5-8.8l-1.9-11.6l1.1-4.3l-3.3-6.3l-2.4-7.3l2.1-0.2l0.6-10.5l1.2-10.2
l0.1-9.5l-3.2-9.5l0.5-5.3l-2.1-7.8l1.9-7.8l-0.9-12.3v-13.2l0.1-14.2l-1.5-10.4l-2.1-9l-5.9-3.7l-0.7-2.6l-11.6-6.4l-10.7-6.9
l-4.6-3.9l-2.8-5.3l0.8-1.8l-5.4-8.4l-6.2-11.7l-6-12.7l-2.4-2.9l-2-4.7l-4.5-4.1l-4.1-2.6l1.7-2.8l-3-6.1l1.6-4.5l4.4-4l2.9-4.7
l-1.3-2.8l-2.1,2.9l-3.4-2.7l1.1-1.8l-1-5.8l1.9-1l1-3.9l2.2-4.1l-0.4-2.6l3.1-1.4l3.9-2.5l-0.8-2l2.1-0.5l-0.2-3.2l1.4-2.3l2.8-0.4
l2.5-4l2.2-3.3l-2-1.5l1.2-3.7l-1.1-5.9l1.2-1.6l-0.6-5.4l-2.2-3.4l0.9-3.1l1.8,0.5l1.1-1.9l-1.1-3.8l0.7-0.9l2.9,0.2l4.4-4.4
l2.4-0.7l0.1-2.1l1.4-5.4l3.3-3l3.6-0.1l0.5-1.3l4.3,0.5l4.6-3.2l2.3-1.4l2.9-3.1l2,0.4l1.3,1.7l-1.2,2.1L378.5,422.8L378.5,422.8z
M459.5,200.8l3.4,0.8l4.7-0.1l-3.3,2.5l-1.9,0.4l-5.6-2.6l-0.5-2.1l2.5-1.9L459.5,200.8L459.5,200.8z M473.9,184.9l-2.5,0.1
l-5.7-1.9l-3.5-2.9l1.9-0.6l5.9,1.6l4.1,2.6L473.9,184.9L473.9,184.9z M168.6,188.6l-3,0.9l-6.3-2.8v-2.2l-2.9-2.2l0.4-1.8l-4.3-1.1
l0.6-3.3l1.4-1.5l4.1,1.4l2.4,0.9l4.1,0.7l0.1,2.1l0.4,2.9l3.2,2.6L168.6,188.6L168.6,188.6z M504.7,175.1l-4.9,5.4l3.8-2l2.9,1.3
l-2.4,2.1l3.9,1.7l2.7-1.5l4.3,1.9l-2.8,4.6l3.7-1.1l-0.3,3.3l0.5,3.9l-3.5,5.5l-2.3,0.2l-3-1.2l2.5-5.1l-1.2-0.8l-7.3,5.4l-2.9-0.2
l4.4-2.9l-4.4-1.5l-5.4,0.3l-9.6-0.1l-0.2-1.9l3.8-2.2l-1.6-1.7l5.3-3.7l8.1-9.8l4.2-3.5l4.9-2.2l2.1,0.3l-1.4,1.7L504.7,175.1
L504.7,175.1z M147.9,153.9l1.6,0.8l4.9-0.5l-7.1,6.9l0.2,4.9h-1.9l-0.7-2.8l0.6-2.8l-0.9-1.9l1.4-2.6L147.9,153.9L147.9,153.9z
M428.8,106.9l-3.5,3l-1.7-0.5l-0.1-1.7l0.4-0.4l2.8-1.7l1.7,0.1L428.8,106.9L428.8,106.9z M419.2,103.7l-7.1,3.2l-3-0.2v-1.5
l4.9-2.7l6,0.1L419.2,103.7z M416.1,87.1l-0.9,2.5l2.8-0.9l1.5,1.5l3.4,1.9l3.7,1.7l-1.3,2.7l3.4-0.4l1.9,1.8l-4.9,1.8l-5.9-1.3
l-0.8-2.6l-6.2,3l-8.2,3l0.8-3.4l-6.3,0.6l5.7-2.8l3.6-4.4l5-5.2L416.1,87.1L416.1,87.1z M460.7,78.9l-4.9,0.2l0.7-2.6l3.8-3.1
l4.2-0.7l2.3,1.5l-1.4,2.3l-1,0.7L460.7,78.9z M386.9,68.2l-4.2,1.9l-4.1-1.6l-3.8,0.6l-3.5-2.4l5-1.7l4.9-2.3l3,1.5l1.6,1l0.3,1
L386.9,68.2L386.9,68.2z M333.8,47.2l-4.7,2.4l10.4-1.5l2.6,2.6l7.3-2.7l1.7,1.7l-2.2,5.1l4.3-2.1l2.8-5.3l4.2-0.8l3,0.9l2.2,2
l-2.7,5.1l-2.4,3.6l4.2,2.6l5,2.5l-2.6,2.4l-7,0.4l0.7,2.1l-3.1,1.9l-6.7-0.8l-5.7-1.5l-5,0.4l-9.4,1.8l-11.2,0.8l-7.8,0.5l0.3-2.5
l-4.1-1.5l-4.2,0.6l-0.6-4.2l3.3-0.6l7.1-0.9l5.5,0.3l6.2-1l-6.5-1.2l-9,0.4l-5.6-0.1v-1.9l11.5-2.1l-6.2,0.1l-5.4-1.4l7.8-3.9
l5.1-2l14.1-3.2L333.8,47.2L333.8,47.2z M372.9,45.7l-7,3.4l-2.2-3.6l2.1-0.7l5.4-0.2L372.9,45.7z M480.6,47.3l-0.7,1.4l-8.2-0.2
l-4.8,0.7l-0.9-0.3l-2-2.8l1.7-1.8l2.1-0.3l8.4,0.5C476.2,44.5,480.6,47.3,480.6,47.3z M441.2,47l0.3,3.2l7.1-4.1l11.6-2.1l2.3,5.3
l-3.3,3.4l9-1.5l5.2-2.1l6.8,2.6l3.6,2.5l-1.1,2.3l8.2-1.2l1.9,3.3l8.3,2.1l2.2,2.1l0.8,5l-9,2.5l7.7,3.5l5.9,1.2l3.2,5.1l6.4,0.3
l-3.3,3.9l-10.7,6.5l-4-2.4l-3.8-5.4l-5.8,0.7l-2.3,3.2l2.7,3.3l4.4,2.5l1,1.5v5.6l-3.6,4.1l-4.7-1.5l-8.5-4.6l3.5,4.9l2.8,3.5
l-0.3,2l-10.7-2.3l-7.6-3.3l-3.8-2.8l2.4-1.6l-4.7-2.9l-4.7-2.7l-0.9,1.6l-13,0.9l-2.4-1.9l5.4-4.2l8-0.1l9.2-0.7l-0.2-2l3.2-2.7
l8.6-5.4l0.4-2.4l-0.5-1.9l-4.6-2.6l-7.1-1.8l3.5-1.4l-2-3.3l-3.3-0.3l-2-1.8l-3.2,1.6l-7.9,0.6L434,63.6l-7.3-1.5l-5.9-0.8
l-1.8-1.9l6.1-2.3l-5.6-0.1l3.3-5.2l7.1-4.6l5.8-2.1l11.2-1.3L441.2,47L441.2,47z M391.2,43.6l3.5,1l7.5-0.6l-0.5,1.5l-6,2.4
l3.8,2.2l-5.1,4.7l-8.4,2l-3.4-0.5l-0.9-2l-5.8-3.9l1.7-1.7l7.4,0.7l-0.9-3.4L391.2,43.6L391.2,43.6z M413.5,49l-7.7,3.9l-4.3-0.2
l1.8-4.5l2.5-2.6l4.2-2.1l5.2-1.4l7.8,0.2l6.1,1.2l-10,4.5C419.1,48,413.5,49,413.5,49z M298.8,56.2l-13.4,2.5l0.6-2.3l-5.9-2.7
l4.3-2.2l7.4-3.8l7.6-3.3l0.3-3.1l14-0.8l4.1,1.1l9.4,0.2l1.9,1.5l1.6,2.1l-6.4,1.3l-13.8,3.6l-9.1,3.6
C301.4,53.9,298.8,56.2,298.8,56.2z M422.9,37.9l-4.1,1.9l-5.1-0.4l-3.2-1.3l4.4-2.2l6.9-1.3l1.4,1.7L422.9,37.9L422.9,37.9z
M414.2,29.3l0.2,2.3l-2.8,2.5l-5.8,3.7l-6.8,0.5l-3.2-0.8l3.4-2.9l-6.6,0.4l4.3-3.8l3.8,0.1l7.6-1.6l4.8,0.3L414.2,29.3z
M375.1,31.8l-0.7,1.8l4.3-0.8l3.7,0.2l-2.3,2.4l-5.1,2.3l-13.8,0.8L349,40.7l-5.9,0.1l1.5-1.6l10.6-2.2l-17.8,0.5l-4.1-0.8
l11.6-4.8l5.4-1.4l8.2,1.6l2.8,2.9l6.1,0.4l0.7-4.7l5.7-1.7l3.1,0.5L375.1,31.8L375.1,31.8z M430.3,27.5l2.3,1.6l7.3-0.1l1.4,1.6
l-2.8,1.9l3.1,1.1l1.2,1.1l4.8,0.3l5.1,0.4l7-1.1l8-0.4l5.8,0.3l2.3,1.9l-1,2l-3.5,1.4l-6.7,1l-4.3-0.6l-11.6,0.8l-8,0.1l-5.5-0.6
l-8.5-1.6l1.5-2.8l2.2-2.4l-1.4-2.1l-7-0.6l-2.6-1.5l3.8-2L430.3,27.5L430.3,27.5z M355.3,24.9l-5.8,3.7l-5.2,1.6l-3.8,0.3l-9.8,2.1
l-7,0.7l-3.6-1l11.6-3.7l12.1-3.1l5.5,0.1L355.3,24.9L355.3,24.9z M435.8,25.5l-1.9,0.1l-6.4-0.3l0.6-1.3l7.2,0.1l1.5,0.9
L435.8,25.5L435.8,25.5z M377.4,24.7l-8.6,1.3l-3.3-1.5l5.1-1.5l5.9-0.5l4.1,0.8L377.4,24.7z M385.2,20.5l-5.6,0.9h-6l1-0.7l5.7-1.3
l1.6,0.2L385.2,20.5z M431.6,23l-6.6,1l-1.6-1.1l0.7-1.8l2.1-1.8l4.4,0.1l1.7,0.3l2.3,1.6C434.6,21.3,431.6,23,431.6,23z
M417.9,21.8l-1.1,1.9l-5.2-0.5l-4-1.5l-7.7-0.2l5.3-1.4l-2.8-1.1l2.1-1.7l6.1,0.6l7.4,1.7L417.9,21.8L417.9,21.8z M471.6,15.7
l2.6,1.5l-6.4,1.3l-10.5,3.4l-6.8,0.4l-6.7-0.6l-1.6-1.9l2.1-1.6l4.3-1.2h-6.5l-2-1.5l0.3-1.9l4.9-1.9l4.1-1.3l3.9-0.3L453,9.2
l8.2-0.2l1.6,2.2l4.7,0.9l4.7,0.8L471.6,15.7L471.6,15.7z M550.1,1.9l8.5,0.3l6.7,0.4l5.2,1l-1.1,1.1l-9.7,1.6l-9,0.8L546.8,8h7.4
l-10.3,2.5l-6.8,1.1l-9.3,3.5l-7.9,0.8l-3.2,0.9l-11.1,0.4l4.3,0.6l-3.3,0.8l0.8,2.2l-5,1.6l-6.8,1.3l-3.6,1.9l-6.5,1.4l-0.5,1.1
l6.4-0.2l-1,1.1l-12.6,3l-8.4-1.4l-11.7,0.8l-4.9-0.6l-6.7-0.3l2-2.3l8-1.1l2-3.4l2.5-0.3l7.5,2l-1.7-3l-4.8-0.9l4.9-1.7l7.5-1.1
l2.8-1.6l-3-1.7l1.1-2.2l9.3,0.2l2.2,0.4l7.2-1.5l-7.2-0.5L474,12.1l-4.4-1.5L468.8,9l-2.5-1.2l1.1-1.3l6-0.8l4.1-0.1l7.4-0.6
l6.7-1.4l3.9,0.2l2.3,1l5-2l5.1-0.6l6.4-0.4l10.3-0.2L526,2l10.2-0.6l6.9,0.3L550.1,1.9L550.1,1.9z M687.9,0.4l19.7,2.9L701,4.7
l-12.9,0.2l-18.3,0.4l1.4,0.7l12.1-0.5l9.7,1.4l7-1.2l2.3,1.4l-4.5,2.3l9.2-1.5l16.9-1.5l10,0.8l1.6,1.7l-14.6,2.9l-2.2,1l-11.3,0.7
l8,0.2l-4.9,3.2l-3.6,2.9l-1.1,5.1l3.6,3.2l-5.8,0.1l-6.4,1.6l6.2,2.5l-0.1,4.2l-4.1,0.5l4,4.3l-8.6,0.3l4,2.1l-1.7,1.8l-5.6,0.8
h-5.4l4.1,3.4l-0.5,2.3l-7.2-2.1l-2.4,1.4l5,1.3l4.5,3.1L690,60l-7.3,1l-2.7-2.1l-4.2-3l0.5,3.6l-5.3,2.8l10.6,0.2l5.5,0.3
l-11.9,4.6l-12.1,4.3l-12.5,1.8l-4.6,0.1l-4.8,2.1l-7.4,5.7l-10.2,3.9l-3,0.2l-6.1,1.4l-6.5,1.3l-4.7,3.5l-1.4,3.9l-3.3,3.7
l-8.6,4.6l0.3,4.4l-3.5,4.8l-4.1,5.7l-6.5,0.3l-5-4.7h-8.9l-3.1-3.2l-0.8-5.6l-4.8-7.1l-0.7-3.7l1.5-5l-3.7-5.2l3.4-4l-2-2l7-6.3
l7.1-2l2.6-2.3l2.8-4.2l-5.5,1.9l-2.6,0.8l-4,0.8l-4.2-1.8l1.5-3.6l3-2.8h3.8l7.5,1.4l-5.3-3.4l-2.6-1.8l-4.4,0.8l-2.6-1.3l7-4.8
l-1.4-1.9l-1-3.6l-1.4-5.3l-3.6-1.9l1.4-2.1l-8-2.9l-7.6-0.3l-10.1,0.2l-9.4,0.3l-3-1.5l-3.8-3.1l10.9-1.5l7.5-0.2L519.2,25l-6.4-2
l2.2-1.7l15.5-2.2l14.9-2.2l2.8-1.6l-8.1-1.5l4.6-1.7l14.6-2.9l5.3-0.5l0.2-1.8l8.9-1l10.9-0.6H595l2.7,1.2l10.6-2.1l7,1.4l4.5,0.3
l6.2,1.3l-6.7-2.1l1.6-1.7l12.7-2.1l11.5,0.1l5-1.3L661.9,0L687.9,0.4L687.9,0.4z M1493,279l1.6,2.2l-1.3,3.9l-3.1-2.1l-2.1,1.5
l0.1,3.7l-4.2-1.8l-1.2-3l1.3-3.8l3.3,0.8l1.1-2.7L1493,279L1493,279z M1517.4,259.7l0.6,5.2l2.5,3.2l-0.6,4.6l-5.4,3l-9.1,0.4
l-4.4,7.3l-4.6-2.4l-2.4-4.8l-8.6,1.4l-5,3l-6.1,0.1l7.3,4.7l0.8,10.8l-2.5,2.7l-3.5-2.5l-0.9-5.7l-4.1-1.9l-4-4.3l4.3-2l1.1-4
l3.9-3.3l1.9-4.4l9.6-1.9l6.3,1.3v-11.5l5,3.1l4.5-6.5l1.7-2.5l-1-7.9l-5.1-7.1l-0.2-3.9l4.8-1.2l8.1,8.7l2.8,5.2l-1.3,6.4
L1517.4,259.7L1517.4,259.7z M1505.6,215.5l4.5,1.3l1.7-2.6l6,6.9l-6.4,1.7l-0.4,6.1l-10.8-4.2l1.6,6.8h-5.7l-4.6-6.1l-0.6-4.7
l5.2-0.4l-4.3-8.5l-1.9-4.8l10.4,6.4L1505.6,215.5L1505.6,215.5z M1485.1,442.7l0.8,4.3l0.6,3.5l-1.5,5.8l-2.5-6.4l-2.4,3.2l2.1,4.7
l-1.4,3l-6.8-3.7l-1.9-4.6l1.5-3.1l-3.8-3l-1.5,2.7l-2.7-0.3l-3.9,3.6l-1.1-1.9l1.9-5.4l3.4-1.7l2.8-2.4l2.2,2.8l4.2-1.7l0.7-2.8
l3.9-0.2l-0.8-4.9l4.8,3l0.8,3.2L1485.1,442.7L1485.1,442.7z M1470.6,430.9l-1.8,2.1l-1.4,4l-1.6,1.9l-3.8-4.4l1-1.7l1.2-1.8l0.3-4
l3-0.3l-0.5,4.2l3.6-6.1L1470.6,430.9L1470.6,430.9z M1440.5,437l-7,6l2.4-4.4l3.8-4l2.9-4.4l2.4-6.3l1.5,5.2l-3.4,3.5L1440.5,437
L1440.5,437z M1457.9,420.6l3.5,2h3.6l0.2,2.6l-2.4,2.7l-3.3,1.9l-0.5-2.9l0.1-3.3L1457.9,420.6L1457.9,420.6z M1477.9,418.9
l2.3,7.1l-4.5-1.7l0.4,2.1l1.7,4l-2.5,1.4l-0.7-4.5l-1.7-0.3l-1.2-3.9l3.3,0.5l-0.3-2.4l-4-4.8l5.4,0.1L1477.9,418.9L1477.9,418.9z
M1455,413.1l-0.8,5.5l-2.8-3.2l-3.4-4.8l4.8,0.2L1455,413.1L1455,413.1z M1448.6,378.5l3.7,1.8l1.5-1.6l0.7,1.6l-0.4,2.6l2.7,4.6
l-0.6,5.3l-3,2.1l-0.1,5.1l2,5.1l3.1,0.7l2.3-0.8l7.5,3.6l-0.1,3.4l2,1.6l-0.2,2.9l-4.8-3.1l-2.5-3.4l-1.1,2.4l-4-3.8l-5,0.9
l-2.9-1.4l-0.1-2.6l1.5-1.7l-1.8-1.4l-0.4,2.3l-3.3-3.7l-1.2-2.8l-1.2-6l2.6,2l-1.1-9.9l0.9-5.8L1448.6,378.5L1448.6,378.5z
M1651.2,539.7l-1.6,0.6l-2.2-2.5l-2.2-4l-0.9-4.8l0.8-0.7l0.5,1.9l1.6,1.5l2.5,4l2.4,2.2L1651.2,539.7L1651.2,539.7z M1630,531.1
l-3,0.5l-1,1.8l-6.2,3.1h-2.9l-4.5-1.9l-3.1-1.8l0.6-1.9l5,0.9l3.1-0.5l1-3.1l0.8-0.1l0.4,3.4l3.2-0.5l1.7-2.2l3.3-2.3l-0.4-3.7
l3.4-0.1l1.1,1l-0.4,3.5L1630,531.1L1630,531.1z M1636.9,524.9l-1.9,1.7l-0.8-3.8l-1.2-2.4l-2.4-2.1l-3.1-2.7l-3.9-1.9l1.6-1.5
l2.9,1.8l1.9,1.4l2.3,1.5l2.1,2.6l2,2.1L1636.9,524.9L1636.9,524.9z M1442.8,351.3l-1.3,5.2l-4-5.4l-1.5-4.7l1.9-6.3l3.3-4.8
l2.9,1.9l-0.1,3.9L1442.8,351.3L1442.8,351.3z M1569.3,512.8l9.6,4.4l10.2,3.6l3.7,3.3l2.9,3.2l0.6,3.7l9.1,4l1.1,3.3l-5.2,0.7
l0.9,4.3l4.7,4.1l3,6.8l3.2-0.2l-0.5,2.8l4.2,1.1l-1.8,1.2l5.6,2.7l-0.8,1.8l-3.8,0.4l-1.1-1.6l-4.8-0.7l-5.5-1l-3.9-4l-2.9-3.5
l-2.4-5.6l-7-2.8l-4.9,1.8l-3.6,2.1l0.3,4.7l-4.6,2.2l-3.1-1.1l-5.7-0.2l-4.6-5.2l-5.5-1.3l-1.6,1.8l-7.1,0.2l2.8-5.2l3.7-1.8
l-1-6.9l-2.3-5.3l-10.6-5.4l-4.6-0.5l-8.2-5.9l-1.8,3.1l-2.1,0.5l-1.2-2.3l0.1-2.8l-4.2-3.1l6.2-2.3l4,0.1l-0.4-1.6l-8.3-0.1
l-2.1-3.7l-5-1.2l-2.3-3.2l7.6-1.5l2.9-2.1l9,2.6l0.8,2.4l1.3,10.3l5.7,3.8l4.9-6.8l6.6-3.8h5l4.7,2.2l4.1,2.3L1569.3,512.8
L1569.3,512.8z M439.5,211.6l-6.3,3l-6,2.1l-5.9,1.8l-3.9,3.7l-1.4,1.3l-1.1,3.3l0.6,3.3l2.1,0.1l0.2-2.2l1.1,1.4l-1,1.7l-3.8,1
l-2.4-0.1l-4.1,1.1l-2.4,0.3l-3.1,0.3l-4.8,1.8l7.9-1.2l1.1,1.2l-7.8,1.9h-3.3l-1.7,1l-1.1,4.8l-5.2,4.9l0.1-1.6l-2.3-2l0.1,3.5
l0.9,1.1l-0.6,2.5l-2.4,2.5l-4.4,5.1l2.5-4.6l-2-2.5l1-5.3l-1.9,2.7v4.1l-3.2-1l3,2.1l-1.5,6.2l1.3,2.6l-0.9,6.5l-4.6,4.8l-6,1.9
l-4.4,3.8l-2.8,0.4l-3.3,2.3l-1.3,2.2l-6.9,4.1l-3.7,3l-3.5,3.8l-1.8,4.5l-0.1,4.4l0.7,5.4l1.5,4.5l-0.5,2.7l1.2,7.4l-0.9,4.3
l-0.7,2.5l-2,3.9l-1.7,0.8l-2.6-0.8l-0.4-2.8l-1.8-1.4l-2-5.5l-1.6-4.9l-0.4-2.5l2-4.2l-0.8-3.5l-3-5.3l-1.9-1l-6.1,2.9l-2.9-3.3
l-3-1.5l-6.2,0.8l-4.7-0.7l-4.2,0.4l-2.4,1l0.5,1.7l-0.7,2.5l0.9,1.3l-1.3,0.8l-1.7-0.9l-2.4,1.2l-3.8-0.2l-3.3-3.4l-4.9,0.8
l-3.5-1.4l-3.5,0.4l-4.9,1.5l-6.1,4.7l-6,2.7l-3.7,3.1l-1.9,2.8l-1,4.4l-0.4,3.1l0.6,2.2l-3.1,5.6l-1.8,4.5l-1.8,8.6l-1.1,3.1
l0.5,3.4l1.2,3.1l0.4,5l3,4.7l0.7,3.6l1.8,3.2l5.6,1.7l1.9,2.6l5.1-1.8l4.3-0.6l4.3-1.1l3.6-1.1l3.9-2.6l1.8-3.7l1.2-5.4l1.2-1.8
l4-1.7l6-1.5l4.8,0.2l3.4-0.5l1.2,1.3l-0.6,3.1l-3.5,3.8l-1.8,3.9l0.9,1.1l-1.2,2.7l-2,5l-1.4-0.6l-0.3,1.8l-1.3,2.7l-0.5,3.3
l-0.7,3.8l-1.3,1.7l-2.4,2.4l1.7,1.1l2.1-0.1l1.9-0.9l1.6-0.1l3.9,0.8l2.6-0.2l1.8-0.7l2.5-0.3l2.8,0.2l3.6,0.4l2.4,1.3l1.5,1.4
l1.9,1l1.3,1.8l-1,2l0.3,2.3l-1.4,2.2l-0.9,2.5l-0.4,2.8l0.2,1.7l-0.1,2.8l-1.6,3.4l0.2,1.7l-1.2,1.6l0.1,1.7l0.8,1.1l1.2,3.4l2,2.6
l2.4,2.7l1.9,2.3l-0.2,1.3l2.3,0.3l2,1.1l2.7-0.5l2.5-1.6l3.5-1.3l2-1.9l3.1,0.4l2.8,0.8l2.5,1.1l1.7,1.9l2,1.8l0.4,4.7l-1.1,1.9
l-1.8-0.5l-0.9,3.1l-1.8-1.8l-1-3.5l1.5-1.7l-2.4-2.5l-2.7-1.8l-2.5,0.4l-1.2,2.2l-2.3,1.6l-1.9,1.6l2.5,3.4l-1.5,0.9l-3.5,1.2
l-0.8-3.8l-0.8,1.1l-1.8-0.4l-1-2.5l-2.3-0.5l-1.4-0.7h-2.4l-0.3,1.4l-3.5-2.4l-1.1-1.3l0.7-1.1l-0.1-1.4l-1.5-1.5l-2.1-1.3
l-1.9-0.8l-0.3-1.9l-1.4-1.1l0.3,1.8l-1.2,1.6l-1.2-1.8l-1.7-0.6l-0.7-1.3l0.1-2l0.9-2l-1.5-0.9l1.4-1.2l-1.8-2l-2.5-2.6l-1-2.1
l-2.2-2l-2.6-2.9h1.6l-0.3-2.4l-1.7-0.6l-0.7,1.5l-3.3-0.1l-1.9-0.6l-2.2-1.3l-3.1-0.4l-1.4-1.3l-2.8-1.1l-3.4-0.1l-2.5-1.3
l-2.7-2.6l-5.5-6.9l-2.6-2.1l-4.4-1.6l-3.1,0.4l-4.8,2.4l-2.9,0.7l-3.7-1.7l-4-1.2l-4.8-2.9l-4-0.9l-5.9-3l-4.2-3l-1.2-1.7l-3-0.4
l-5.4-2l-1.9-2.9l-5.3-3.6l-2.2-4l-0.8-3.1l1.9-0.7l-0.3-1.8l1.6-1.6l0.3-2.2l-1.4-2.9v-2.5l-1.3-3.2L191,345l-4.5-4.9l-1.9-4
l-4.1-2.6l-0.7-1.5l1.8-4l-2.5-1.5l-2.4-3.1l-0.3-4.4l-2.7-0.5l-2.3-3.4l-1.7-3.1l0.4-2l-1.5-4.7l-0.4-4.9l0.9-2.4l-3.1-2.5
l-1.9,0.2l-2.4-1.7l-1.8,2.6l-0.1,3l-1,4.8l1.1,2.6l2.7,4.4l0.4,1.4l0.8,2.7l1,4l1.2,1.6l0.6,2.3l2.6,3.2l0.5,5.9l1,2.8l0.9,3
l-0.4,3.4l2.6,0.2l1.6,2.9l1.5,2.8l-0.4,1.2l-2.7,2.3l-1.7-3.9l-2.9-3.6l-3.3-3.1l-2.5-1.6l1.2-4.7l-0.1-3.4l-2.1-2l-3.1-2.9
l-1.9-0.8l-2.9-1.5l-2.3-3.7l2.7-0.2l2.7-2.3l1-2.9l-2.9-4.5l-2.6-1.8l-0.8-4l-0.7-4.1l-0.7-5.1l-0.2-5.7l0.3-3.2l-2.1-3.7l-2.2-0.7
l0.1-1.9l-2.8-0.3l-1.3-1.7l-4.6-0.7l-1-1l0.8-3.5l-2.5-6.5l-0.4-9l0.8-1.5l-1.3-2.2L133,248l1.9-5.2l-1-3.4l3.9-5.2l2.8-5.3
l1.1-4.7l5.4-5.8l8-11.2l4.2-8.3l1.8-5.4l0.4-2.9l1.4-1.2l5.8,2.1l-1.1,5.9l2.3-1.6l2.4-5.1l1.6-5.1l-6.1-6.1l-1.6-2.7l-6.9-2.5
l1.3-5.5l3.6-3.7l-4.1-2.6l3.1-4.9l-2.1-4.4l2.5-3.1l-0.6-2.2l-2.5-1.9l3.3-5.2l-1.6-4.9l2.7-5.5l-4.1-0.4l-7.1-0.2l-3.7-1.7
l-3.3-6.1l-3.2-1.1l-5.7-2l-6.7,0.5l-6-2.7l-2.6-2.5l-6.3,1.2l-3.5,4.1l-2.9,0.3l-6.5,1.3l-6.1,1.9l-6.4,1.3l3.2-3.5l8.3-5.7
l6.7-1.8l0.4-1.4l-9.2,3.2l-7.4,3.9l-11.1,4.1l0.2,2.9l-8.9,4.2l-7.6,2.5l-6.6,1.8l-3.9,2.6l-10.5,3.1l-4.5,2.8l-8.1,2.6l-2.8-0.5
l-6.1,1.7l-6.9,2l-6,2l-10,1.7l8.5-3.8l6.6-1.8l8.5-3.3l6.5-0.7l4.9-2.4l10.3-3.6l2.3-1.2l5.7-2.1l5.7-4.5l6.2-3.4l-7.2,1.8
l-5.2,1.1l0.4-3l-3.6,2.1l1.6-2.9l-7.2,2.3h-2.8l3.6-3.5l3.3-2.1l-0.4-2.1l-7.2,1.1l-0.5-2.7l-1.4-1.4l4-3.3l-0.3-2.4l5.8-3.4
l7.6-3.1l5.3-3l4.1-0.4l1.8,0.9l7-2.7l2.5,0.5l5.5-1.8l2.5-2.6l-1.1-1l5.9-2.1h-2.7l-6.1,1.2l-2.9,1.3l-1.8-1.3l-6.9,0.7l-4.5-1.4
l1.2-2.2l-1-3.3l9.1-2.3L86.7,82h3.4l-4.3,2.8l9.2-0.2l1.2-3.5L93.9,79l0.8-2.7L94,74l-3.2-1.7l6.3-2.9l7.6-0.1l8.6-2.5l4.8-2.6
l7.8-2.5l4.8-0.6l11-2.3l3.2,0.3l10.2-2.8l4.4,1.1l-0.5,2.4l3.3-1l6.3,0.3l-2,1.2l4.9,0.9l4.8-0.5l6.2,1.6l7.1,0.5l2.2,0.7l6.5-0.8
l4.1,1.6l3.5,0.7l5.9,1.3l3.3,2.6l3.7,0.5l6.2-2.3l7-1.6l5.2,0.6l8.8-2.3l8.2-1.4l0.2,2.2l4.5-1.2l3.8-2.5l2.1,0.6l1.4,4.7l9.4-3.6
l-3.9,4.1l5.9-0.9l3.3-1.6l4.5,0.3l3.8,2.3l7.5,1.9l4.7,1l4.4-0.4l2.8,2.8l-8.5,2.6l6.4,1.2l11.8-0.6l4.4-1l1.4,3.3l7-2.8l-2-2.3
l4.4-1.8l5.2-0.3l3.8-0.5l2.1,1.3l1.5,2.9l5-0.4l5.1,2.4l7.2-0.8l5.9,0.1l2.4-3.4l4.5-0.9l4.8,1.8l-4.2,5.2l6.2-4.4l3.2,0.2l6.3-5.5
l-1.6-3.3L388,63l5.5-5.8l8.1-3.8l4.5,0.8l1.9,2.3l0.4,6l-5.7,2.6l6.6,1l-4.3,5.5l8.7-4.2l2.2,3.5l-4.2,4l1.3,3.7l7.2-4l6.5-4.6
l4.6-5.9l5.5,0.4l5.4,0.8l3.5,2.6l-1.7,2.7l-5,2.9l0.8,2.9l-2.3,2.7l-10.8,3.8l-6.5,0.9l-3.2-1.7l-3.2,2.8l-7.4,4.7l-2.9,2.4
l-7.7,3.8l-6.4,0.4l-5.1,2.4l-2.9,3.7l-5.6,0.7l-8.6,4.6l-9.4,6.5l-4.9,4.6l-4.9,6.8l6,1l-1.5,5.5l-0.7,4.5l7.1-1.2l7,2.6l3.3,2.2
l1.7,2.9l4.8,1.6l3.6,2.5l7.5,0.4l4.8,0.6l-3.6,5.2l-1.7,6l0.1,6.8l4.4,5.8l4.6-1.9l5.6-6.3l2.2-9.6l-1.7-3.2l9-2.8l7.5-4.2l4.7-4.1
l1.7-4l-0.5-5l-3.1-4.5l8.8-6.1l1-5.3l3.8-9l3.9-1.3l6.6,1.6l4.2,0.5l4.5-1.5l3,2l3.6,3.3l0.1,2.2l7.7,0.5l-2.6,4.9l-2.2,7.3l3.7,1
l1.6,3.4l8.1-3.2l7.4-6.5l4.3-2.7l1,5.2l2.6,7.5l2,7.1l-3.4,3.7l4.8,3.4l2.8,3.4l6.9,1.6l2.3,1.9v5.1l3.4,0.8l1.1,2.3l-2,6.8
l-4.2,2.3l-4.2,2.1l-8.7,2.2l-7.8,5.1l-8.6,1l-10-1.3l-7.3-0.1l-5.2,0.5l-5.7,4.4l-7.2,2.7l-10.1,8.3l-7.8,5.7l4.6-1l10.9-8.2
l12.1-5.2l7.6-0.6l3.3,3.1l-6.1,4.1l-0.6,6.8l0.1,4.6l5.5,3.1l8.6-0.8l7.1-7l-1,4.5l2.6,2.2l-7.5,4.1l-12.2,3.7l-5.8,2.4l-7.1,4.5
l-3.7-0.5l1.5-5.2l10.4-5.1l-8.1,0.2l-5.9,0.8L439.5,211.6L439.5,211.6z M1443.2,229.5l0.6,3.1l0.8,4.6l-1.4,2.9l-4.7,2.7l0.9,3.8
l2.9,1l3.8,2.6l4.5,4l4.3,3.9l3,4.2l3.3,7v3.6l-4.9,1.6l-2.9,2.8h-4.6l-1.9-3.4l-0.8-4.6l-5.3-7l3-0.9l-6.1-6h-4.9l-3.6-2.1v-4.5
l-1.4-4.7l-3.7-0.6l-2.9-1.8l-6.4,2l-2.4,2.9l-4.8,1.8l1.4-3l-2.3-2.5l1.9-4.2l-4.4-3.3l-3.4,2.2l-3.6,4.4l-1.2,4.1l-5,0.3l-1.2,3
l4.7,4.4l4.7,1l1.5,2.9l4.9,1.9l3.9-4.6l5.8,2.5l3.4,0.2l2.4,3.4l-6.7,1.8l-1,3.5l-3.8,3.2l-0.9,4.6l7.1,3.5l4.6,6.3l5.4,5.8
l5.4,4.9l1.6,4.7l-2.8,1.7l2.5,3.4l3.8,2l0.8,5.1l0.1,5.1l-2.8,0.5l-2.1,6.9l-2.3,8.4l-3.3,7.6l-6.3,5.9l-6.6,5.3l-6.1,0.7l-2.8,2.9
l-2.3-2.1l-2.5,3.2l-7.2,3.2l-5.6,0.9l-0.8,6.7l-3,0.4l-2.2-4.6l0.9-2.5l-7.7-2l-2.4,1l-6.5,5.5l-3.7,6l-0.5,4.4l5.3,6.7l6.4,8.3
l5.6,4l4.1,5.1l4,11.7l0.4,11.2l-4.3,4.2l-6.1,4.1l-4.1,5.3l-6.6,5.9l-2.3-4l1.3-4.3l-4.5-3.7l-4.7-0.9l-2.6-3.3l-3.4-6.6l-5.3-2.9
l-4.7,0.1l0.3-5l-4.9,0.1l0.2,7l-2.2,9.3l-1.4,5.6l0.7,4.6l3.7,0.2l2.6,5.8l1.4,5.5l3.3,3.6l3.4,0.8l3.1,3.3l4.8,4.4l2.6,4.3
l0.5,4.3l-0.5,2.9l0.6,2.1l0.5,3.8l2.1,1.8l2.3,5.6l-0.1,2.1l-4,0.5l-5.4-4.8l-6.7-5l-0.8-3.2l-3.4-4.3l-1-5.3l-2.1-3.4l0.4-4.7
l-1.4-2.7l-2.4-2.4l-1.1-3.2l-3.2-3.5l-2.9-3.1l-0.7,3.8l-1.2-3.6l0.3-3.9l1.3-6.1l-0.9-4.8l1.3-4.8l-2.2-3.8l-0.2-6.9l-2.6-3.3
l-2.6-7.6l-2-8.1l-3.1-5.2l-3.2,3.1l-5.8,4.6l-3.2-0.6l-3.6-1.5l0.9-7.9l-1.9-5.9l-5.4-7.4l0.4-2.2l-3.4-0.9l-4.6-5.2l-1.1-5.1
l1.6-3.6l0.5,4.6l-1,4.1l-2-3.3l-0.8-3.2l-1.5-3.1l-2.8-3.7l-5.1-0.2l0.9,2.6l-1.3,3.5l-2.5-1.3l-4.5-0.1l-0.5,2.4l-3.7-0.1
l-6.6,1.3l0.9,4.8l-2.4,3.8l-7.4,4.2l-5.3,7.5l-3.7,4l-5,4.2l0.3,2.9l-2.6,1.6l-4.8,2.3l-3.7,5.2l1.9,8.2l0.7,5.3l-1.9,6.1l0.7,10.8
l-2.9,0.3l-2.2,4.8l1.8,2.1l-5,1.8l-1.7,4.4l-2.2,1.8l-5.5-6l-3.1-8.9l-2.5-6.4l-2.2-3l-3.4-6.1l-2-8l-1.3-3.9l-5.8-8.8l-3.6-12.3
l-2.5-8.1l-0.8-7.8l-1.7-5.9l-7.6,3.8l-4-0.8l-8-7.7l2.4-2.3l-1.9-2.5l-7.1-5.4l-4.2-1.6l-2.1-4.6l-4.9-4.8l-9.9,1.2l-8.9,0.1
l-7.6,0.9l-10.5-1.9l-6.1-1.5l-6.3-0.8l-3.2-7.8l-2.8-1.1l-4,1.1l-5.1,3.1l-6.9-2.1l-6.1-4.9l-5.5-1.8l-4.3-6.1l-5.1-8.4l-2.8,1
l-3.7-2.1l-1.7,2.5l-3.2-0.4l1.4,2.8l2.1,6.3l2.7,5.5l2.9,1.4l1.2,2.3l4,2.6l0.6,2.7l-0.4,2.1l1,2.1l1.7,1.8l0.9,2.1l0.2-3.1
l1.1-3.3l3.3,1.3l0.5,3.7l-0.8,3.8l1.2,2.4l5.5,0.4l4.6,0.2l3.3,0.2l3.3-4.3l3.7-4.1l3-3.9l1.3,2.2l1.3,5l2.9,4.3l3.3,2.3l4.1,0.9
l3.3,1.1l2.9,3.7l1.6,2.1l2.2,2.2l-1.6,3.8l-2.9,3.8l-1.7,4.4l-3.5,1.2l-0.6,3.2l1,4.2l-3,0.8l-3.3,2.4l-0.2,3.1l-4.6,1.3l-2.1,1.6
l0.2,2.5l-2.5,1.8l-3.1-0.6l-3.6,2.2l-6.4,2l-0.9,2.9v2.1l-5.3,2.7l-8.8,3l-4.7,4.5l-4.1-0.1l-3.1,2.7l-3.5,1.2l-4.7,0.3l-2.5,2.1
l-2.3,2.1l-2.7-0.2l-5.7,0.6l-1.6-3.8v-3.4l-2.3-6.6l-1.7-2.6l0.4-3.2l0.2-4l-0.9-2.8l-1.8-1.9l-0.6-2.5l-3-2.3l-3.2-5.3l-1.9-5.2
l-4.1-4.4l-2.5-1l-4-6.1l-0.9-4.4v-3.8l-3.6-7l-2.8-2.5l-3-1.3l-2.1-3.7l-1.5-4.7l-4.2-6.2l-3.7-5.1l-3.2-4.4h-2.7l0.6-3.5V312
l0.2-3.4l-1.3,2.5l-0.7,4.8l-1.2,3.3l-3.2-0.9l-2.7-2.9l-5.1-8.5l2.8,6.7l3.9,6.4l4.8,9.9l2.3,3.5l2,3.6l5.3,7l-0.6,5.3l6.8,5.7
l3.1,7.5v7.7l2.5,7.6l2.2,1.6l3.1,2.4l3.7,7.3l1.8,5.9l3.2,3.1l7.9,6l3.2,3.6l3.2,3.7l1.9,2.2l2.8,1.9l1.4,1.9l-0.1,2.7l-3.1,1.5
l2.5,1.7l-2,3.4l-1.1,2.3l2.2,3.5l2.1,3.1l2.2,2.2l18.5,7.6l4.8-0.1l-15.4,19.1l-7.4,0.3l-4.9,4.5l-3.6,0.1l-1.5,2l-4.8,7.2
l0.2,23.2l3.3,5.3l-4,2.5l-1.4,2.7l-3,4.9l-1.8,2.6l-1.2,4.2l-2.2,2.1l-2.8,7.9l0.3,3.6l3.5,2.3l-1.5,5.5l-0.1,5l1.8,3.9l2.2,6.3
l2,1.4l0.8,2.9l-0.4,6.3l0.4,5.6l-0.2,9.9l0.9,3.1l-1.9,4.6l-2.4,4.4l-3.7,3.9l-5.2,2.5l-6.4,3.1l-6.7,6.8l-6.3,5.7l-2.3,1.4
l-0.7,4.6l2.4,4.8l0.8,3.7l0.5,7.8l-1.1,3l0.3,3.7L969,652l-4.6,2.2l-6.8,3.4L955,660l0.3,2.6l0.7,3.8l-1.7,4.7l-1.1,5.2l-1.6,2.9
l-3.9,3.2l-3.7,4.2l-1.8,3.2l-3.4,4.6l-6.7,6.5l-4.1,3.8l-4.3,2.9l-5.8,2.5l-2.7,0.3l-4,0.8l-2.7,1.2l-5.7-1.2l-3.3,0.8l-7.8,2.2
l-4.6,1l-3.5,2.4l-4.5-2.1l-4.2-2.1l-0.4-5.5l-1.4-4.2l1.9-6l-3.2-6l-2.5-5.4l-3.5-8.2l-3.9-4.8l-1.9-4.7l-1-6.2l-1.2-4.6l-1.6-9.8
v-7.6l-0.6-3.5l-2.1-2.6l-2.7-5.2l-2.8-7.7l-1.1-4l-4.4-6.2l-0.2-4.9l-0.5-4l0.9-5.5l2-5.9l0.3-2.7l1.9-5.7l1.3-2.6l3.3-4.2l1.8-2.8
l0.7-4.8l-0.3-3.6l-1.6-2.2l-1.5-3.9l-1.3-3.8l2-3.9l-1.6-6.1l-1.1-4.3l-2.8-4l-0.3-3.2l-1.4-4.8l-4.6-6.7l-5.8-6.4l-3.7-5.3
l-3.4-6.6l0.2-2.1l1.3-2l1.3-4.6l1.1-4.8l0.9-8.1l0.8-5l-2.2-4.2l-2.6-1.1l-1.1-2.8l-1.4-2.7l-5.8,2.3l-4.3,1.1l-4.5-0.2l-3-3.9
l-1.9-4.6l-3.9-4.2h-9.2l-4.6,0.8l-4.6,1.3l-8.7,3.8l-3.2,2.1l-5,1.9l-5-1.8l-6.5-1.2l-3.6,0.1l-6.6,1.1l-3.9,1.8l-5.6,2.4l-8.3-3.2
l-5.1-4.8l-4.8-3.5l-3.7-4.1l-7.2-4.1l-2.9-9.4l-2.4-3.7l-2.1-2.5l-2.8-2.1l-0.7-2.8l-2.4-2.5l-2.9-2.6l-3.6-2.3l-1.7-2.3l-0.9-5.2
l0.2-4.5l-5.5-6.4l5.3-3.6l0.9-8.2l1.7-4.6l1.8-6.9l-1.9-7.1l1.9-4.8l-4.4-4.1V360l0.3-3l2.2-1.7l1.9-3.3l-0.3-2.2l2-4.5l3.1-4
l3.5-4.8l0.2-3.3l2.1-4l3.7-2.3l3.7-6.6l2.8-2.4l5.1-0.7l4.4-4.4l2.7-1.7l4.7-5.3l-1.1-7.9l2.1-5.4l0.9-3.4l3.5-4.3l5.4-2.9l4-2.6
l3.7-6.7l1.8-3.9h3.9l3.1,2.7l5-0.4l5.5,1.4l7.4-3.4l5.7-1.2l3.4-2.6l5-2l8.9-1.2l8.7-0.5l2.7,1l4.9-2.6h5.6l2.2,1.5l3.6-0.4
l5.6-2.6l3.7,0.7l-0.1,3.3l4.4-2.4l-2.1,4.5l0.1,3l1.9,1.6l-0.5,5.6l-3.4,3.2l1.1,3.5l2.8,0.1l1.5,3l8.4,3.2l6.7,0.5l7.2,2.8
l2.8,5.7l4.9,1.2l7.7,2.7l5.9,3.1l2.5-1.6l2.4-3l-1.5-4.8l1.5-3.1l3.7-3l3.6-0.8l7.3,1.3l2,2.8l3.8,1.1l5.4,0.8l1.5,2.1l7.1-0.2
l5.3,1.7l5.5,1.9l2.6,1l3.9-2l2.1-1.8l4.7-0.6l3.9,0.8l1.7,3.2l1.1-2.1l4.4,1.5l4.2,0.4l2.5-1.6l1-2.5l1.1-2.9l0.6-4.8l2-6.9
l2.2-4.7l-1.1-5l1-2.6l-2.3-3l1.7-2.4l-3.2,0.6l-4.6-1.5l-3.1,3.7l-8,0.7l-4.6-3.5l-5.7-0.2l-0.9,2.7l-3.6,0.8l-5.4-3.5l-5.8,0.1
l-3.7-6.4l-4.2-3.6l2-5l-3.6-3l5.1-6.1l7.9-0.2l1.6-4.8l9.9,0.8l5.6-4l5.7-1.7l8.5-0.2l9.7,4.4l7.8,2.4l5.8-1l4.5,0.6l5.5-3.2
l0.3-2.7l-2.1-4.2l-3.4-2.3l-3-0.7l-2.2-1.9l-7.4-5.1l-6.2-2.4l-5-3.6l3.4-1l3.2-5.2l-3.2-2.4l7.1-2.3l-12.6,0.9l-3.8,1.3l-3.9,2.3
l1,3.9l2.7,1.5l5.1-0.4l-0.6,2.2l-5.3,1.1l-6.3,3.6l-3-1.3l0.6-2.9l-5.8-1.8l5.2-3.3l-9.7-2.9l-0.7-2.4l-4.5,0.8l-1.3,3.4l-3.3,4.6
l-1.9,2.9l-2,6.9l-2.2,2.5l-1.3,4.4l2.1,3.5l0.9,2.4l4.7,2l-6.8,1.9l-2,1.9l-3.9,3.4l-1.9-2.9l-3.3-1.5l-2.7-0.6l-6.1,1.6l3.9,3.6
l-2.5,1h-2.9l-3-3.2v3.6l3.7,4.6l-2.1,1.8l3.3,2.5l2.7,1.8l0.4,3.7l-5-1.7l1.9,3.3l-3.3,0.7l2.4,5.7l-3.4,0.1l-4.6-2.9l-2.3-5.1
l-1.3-4.3l-2.3-3l-2.9-3.6l-1.5-2.3l-3.2-3.5l-0.7-3l0.1-4.3l-0.5-2.9l-2.7-2.5l-3.2-1.1l-4.1-2.4l-3.1-2.2l-4.8-1.8l-4.6-4.5
l-1.5-4.3l-3.6-1.8l-1.3,2.6l-1.7-2v-2.2l-2.8-1.5l-3.9,2.2l0.1,5l1.7,2.9l4.9,3.1l2.9,5.1l6,5l4-0.1v2.6l4.8,2.3l3.9,1.9l4.7,3.2
l-0.2,3.5l-3.1-3l-4.5-1l-1.9,4.1l3.9,2.3l-0.4,3.3l-4.6,6l-4.7,3.5l0.9,2l-0.9,3.3l-4.2-2.4l-2.7-0.7l-7.5-3.3l0.6-3.4l6.2,0.6
l5.2-0.7l3.3-0.4l2.4-3.5l-1.2-5l-1.8-3.2l-3.9-3.5l-3.4-1.2l-2.3-2.5l-3.9-0.4l-4.2-2.8l-4.9-4l-3.6-3.6l-1.9-6l-2.6-0.7l-4.2-2.1
L817,218l-6.6,3.9l-10-1.6l-7.4,2l-0.5,3.7l0.3,3.5l-4.8,4.2l-6.6,1.3l-0.5,2.1l-3.1,3.5l-2,5.1l2,3.7l-3,2.9l-1.2,4.2l-3.9,1.3
l-3.8,5h-6.7l-5-0.1l-3.3,2.3l-2.1,2.5l-4.5-2.8l-1.4-3.7l-4.8-1l-2.2,1.7l-2.7-0.9l-2.8,0.7l1-5.1l-0.4-4l-3.5-3l0.6-4.2l2.2-2.3
l0.4-2.5l1.3-3.8l-0.1-2.7l-0.9-2.2l-0.1-2.1l0.4-4.4l-2-2.6l7.4-4.5l6.2,1.1h6.8l5.4,1l4.2-0.3l8.2,0.2l2.7-3.7l1-12.3l-5.1-6.5
l-3.6-3.1l-7.5-2.4l-0.4-4.6l6.4-1.3l8.2,1.6l-1.4-7l4.6,2.6l11.3-4.8l1.4-5.1l4.3-1.2l3.4-1.3l6.8-10.5l6.5-2.6l-6.5,2.6l6.1-2.1
l4.3-0.3l4.8-1.6l4-1.7l-1.2-2.2l-0.4-3.4l-2.1-3.4l-0.4-6.1l1.9-3.3l4-0.4l5.1-3.3l0.1,3l-1.3,2l3.3,2.5l-1,2.3l-4.5,3.6l1.5,3
l0.2,2.3l4.9,1.4l0.1,2.1l4.7-1.1l2.5-1.7l5.5,2.4l2.4,1.9l3.1-1.7l7.1-2.8l5.7-2.1l4.8,1.1l5.1,1.5l0.7-2.6l6.3-2l-1.7-5l-0.5-4.5
l1.7-3.7l4-2.1l4.4,4.5l3.6-0.1l0.2-4.6l-0.1-3.5l-4.8-1.3l-0.9-3.4l5.4-1.6l5.5-0.9l5.1,1c3.4-1.8,5.1-3.1,7.7-4.2l-3.9-2l-8,0.5
l-7.5,2.1l-7.1,1.2l-3.1-3.1l-4.7-1.9l0.1-5.7l-2.9-5.2l1.5-3.3l3.3-3.6l8.7-6.1l2.6-1.2l-0.9-2.3l-6.4-2.6l-7,1.5l-3.4,3.9l1.2,3.5
l-6.1,4.5l-7.7,4.9l-2.1,8.1l3.6,4l4.8,3.3l-3.3,6.6l-4.6,1.3l-0.6,10l-2,5.5l-5.7-0.5l-2.2,4.7l-5.3,0.3l-2-5.7l-4.4-6.7l-4.2-8.4
l-3.3-3.6l-8.5,6.8l-6,1.4l-6.4-3l-1.9-6.3l-1.9-13.4l3.9-3.6l11.2-4.8l8.1-5.8l7.1-7.8l8.8-10.7l6.4-4l10.1-6.8l8.5-2.3l6.7,0.3
l5.1-4.4l7.3,0.3l6.9-1.1l13.6,3.9l-4.8,1.4l5.4,3.3l3.6-1.8l7.6,3.2l11.6,1.3l17.6,6.1l4,2.6l1.6,3.6l-3.7,2.9l-6.4,1.5L919.3,81
l-2.9,0.7l8,4l1,2.6l1.9,5.8l6,1.7l3.8,1.4l-0.2-2.7l-3.3-2.4l2.1-2.1l11.4,3.5l3.2-1.4l-4.2-4.1l8-5.4l4,0.3l4.6,1.9l1.1-3.8
l-4.7-3.3l0.8-3.2l-4.3-3.4l12.2,1.8l3.6,3l-5,0.7l1.2,3l4,1.9l6-1.2l-0.4-3.5l7.6-2.6l12.3-4.6l3.2,0.2l-2.5,3.3l5.3,0.6l2.1-1.9
l7.6-0.1l5-2.2l6.4,3.2l2.7-3.6L1021,66l14-0.1l6.6,1.7l18.5,6.1l1-2.8l-5.8-2.9l-6.1-1.6l-0.1-2.6l-4.7-4.1l3.1-6.4l-0.5-4.7
l13.4,0.4l2.9,2.9l-0.8,4.2l3.6,1.6l3.7,3.7l3.8,7.3l6.7,3.3l0.5,3.6l-3.5,7.8l5.3,0.8l4.2-3.4l-0.5-2.7l1.9-2.6l-4.4-3.1l-0.4-3.5
l-4.7-0.5l-2.9-2.9l-0.4-5.4l-8.1-4.2l4.6-3.5l-3.6-3.7l6,2.7l2.1,5l4.9,1l-4.5-3.8l5.1-2l7.9-0.3l9.6,3l-6.9-4.3l-4.8-5.4l5.8-1.1
l9.5,0.3l7.7-0.7l-5.5-2.6l1.2-3.3l4.2-0.2l4.9-2.4l9.2-0.7l9-1.8l4.3,1.1l5.3-2.6l6.9,0.1l-1.5-2.1l1-2l6.1-1.9l8.2,1.5l-3.4,1.2
l9.2,0.7l4.1,2.4l12.7-1.1l11.5,2.3l5.5,1.9l2.4,2.5l-2.3,1.5l-6.6,2.8l4.5,2.2l7.2,1.2l8.1,2.3l5.4-2.1l13.3,0.9l3.9,2.3l17.2,0.8
l-4.7-3.9l9.3,0.9h6.1l9.8,2.6l6,3.3l0.4,2.2l10,4.1l8.9,2.1l-3-5.5l9.3,2.4l5-1.4l9.7,1.6l8.5-0.8l-9.3-4.8l2.1-2.2l40.1,3.4l7.8,3
l16.1,4l14.7-1l9.2,0.9l6.5,2.2l5.1,3.8l7.2,1.6l3.9-1.1l7-0.2l9.2,1.1l6.8-0.6l14.2,4.8l2.5-1.8l-8.5-3.4l-1.8-2.3l15.2,1.4
l7.9-0.3l15.7,2.6l9.4,2.3l32.9,21.9l-2,2.5l-6.1-0.4l8.1,3l9.1,4.6l4.1,1.6l3.8,2.3l-8.9,0.3l-6.5,4.3l-3.1,0.7l-1.5,4l-2,3.6
l1.7,2.6l-11.4-4l-6.1,4.6l-4.7-2.2l-1.3,2.5l-7-0.8l3.1,3.9l1.1,5.6l2.9,2.4l6.7,1.4l9,8.6l-4.1,0.2l3.4,5l4.7,2.6l-5,3.1l5.4,6.9
l-5.7,1.5l4.5,6.2l-1.6,5.7l-5.7-4.3l-10.5-8.8l-16-13.4l-6.4-8.3l0.1-3.6l-2.8-2.7l5.7-1.3l-0.3-7.5l0.8-6l2.4-4.6l-6.5-8.1
l-4.7,0.5l3.2,4.7l-3.6,6.4l-12.1-7.1l-9.1,1.9v9.8l7.7,3.5l-8.4,1.6l-6.4,0.6l-4.3-4.3l-7.9-0.8l-2.5,2.8l-14.9-1l-13.1,1.8
l-3.5,11.5l-4.9,14.1l8,0.7l5.7,3.8l5.8,1.3l0.3-3l5.6,0.4l12.7,6.7l4.7,5.1l1.3,6.2l5.5,7.3l5.2,9.9l-1,9l1.3,4.3l-1.9,7.2
l-2.1,7.1l-1,3.7l-4.4,3.6l-3.2,0.1l-5.1-3l-4,4.5l-5.9-2.4l4.3,4.4L1443.2,229.5L1443.2,229.5z M1018.6,218.9v3.7l7.3,7.5l7.4,8.6
l-1.1,10.6l2.6,8.7l4.9,1l4.1,2.6l9.3,1.4l7.7-1.4l-2.2-5.6v-6.7l-4.4-3.5l-4.1-4.4v-4h5.5l3-2.8l-5.5-6.5l-4,1.1l-3.2-5.1l-6.2-1.5
l-3.3-6.1l-4.2-1.7v-1.7h4.2v-4l3.3-1.1h4.1l-2.1-9.3l-5.3,1.6l-4.2-3.1l-4.1,3.1l-6.6,1.2v4.2h-4.5l-4.4,7.4L1018.6,218.9
L1018.6,218.9z"/>
<g>
<circle class="st1" cx="1511.8" cy="716.5" r="8"/>
<circle class="st1" cx="1695.5" cy="729.8" r="8"/>
<circle class="st1" cx="970.1" cy="292" r="8"/>
<circle class="st1" cx="799.8" cy="162.8" r="8"/>
<circle class="st1" cx="387.4" cy="610.9" r="8"/>
<circle class="st1" cx="857.8" cy="118.9" r="8"/>
<circle class="st1" cx="462.4" cy="654.7" r="8"/>
<circle class="st1" cx="902.3" cy="252.2" r="8"/>
<circle class="st1" cx="327" cy="279.8" r="8"/>
<circle class="st1" cx="1053.2" cy="326.7" r="8"/>
<circle class="st1" cx="787.7" cy="230.9" r="8"/>
<circle class="st1" cx="879.5" cy="209.1" r="8"/>
<circle class="st1" cx="966" cy="278.6" r="8"/>
<circle class="st1" cx="1014.5" cy="282.1" r="8"/>
<circle class="st1" cx="1338.9" cy="406.9" r="8"/>
<circle class="st1" cx="1210.6" cy="410" r="8"/>
<circle class="st1" cx="319.7" cy="263.9" r="8"/>
<circle class="st1" cx="1609.6" cy="668.5" r="8"/>
<circle class="st1" cx="360.5" cy="464.1" r="8"/>
<circle class="st1" cx="1180.2" cy="372.4" r="8"/>
<circle class="st1" cx="413.6" cy="224.2" r="8"/>
<circle class="st1" cx="798.7" cy="171.4" r="8"/>
<circle class="st1" cx="872.6" cy="192.8" r="8"/>
<circle class="st1" cx="375.5" cy="220.8" r="8"/>
<circle class="st1" cx="1422.6" cy="462.5" r="8"/>
<circle class="st1" cx="1399" cy="345.1" r="8"/>
<circle class="st1" cx="1263.2" cy="349.8" r="8"/>
<circle class="st1" cx="789.6" cy="183.1" r="8"/>
<circle class="st1" cx="1470.9" cy="428.4" r="8"/>
<circle class="st1" cx="1375.7" cy="533.1" r="8"/>
<circle class="st1" cx="1381.7" cy="274.1" r="8"/>
<circle class="st1" cx="1282.2" cy="352.3" r="8"/>
<circle class="st1" cx="1353.2" cy="304.8" r="8"/>
<circle class="st1" cx="348.2" cy="269.7" r="8"/>
<circle class="st1" cx="1225.1" cy="448.4" r="8"/>
<circle class="st1" cx="347.4" cy="238.9" r="8"/>
<circle class="st1" cx="736.5" cy="281.5" r="8"/>
<circle class="st1" cx="836.1" cy="142.7" r="8"/>
<circle class="st1" cx="876" cy="710.3" r="8"/>
<circle class="st1" cx="1391.3" cy="314.5" r="8"/>
<circle class="st1" cx="1337.2" cy="299.3" r="8"/>
<circle class="st1" cx="391.8" cy="416.5" r="8"/>
<ellipse class="st2" cx="508.2" cy="656.6" rx="8" ry="8"/>
<circle class="st1" cx="1272.9" cy="342.2" r="8"/>
<circle class="st1" cx="996.9" cy="537.8" r="8"/>
<circle class="st1" cx="1195" cy="312.2" r="8"/>
<circle class="st1" cx="234" cy="239.9" r="8"/>
<circle class="st1" cx="258.5" cy="284.5" r="8"/>
<circle class="st1" cx="679.6" cy="400.2" r="8"/>
<circle class="st1" cx="954.4" cy="144" r="8"/>
<circle class="st1" cx="1059" cy="333.1" r="8"/>
<circle class="st1" cx="350.1" cy="225.2" r="8"/>
<circle class="st1" cx="747.3" cy="156" r="8"/>
<circle class="st1" cx="945.2" cy="682.6" r="8"/>
<circle class="st1" cx="809.7" cy="169.1" r="8"/>
<circle class="st1" cx="1079.7" cy="333.2" r="8"/>
<circle class="st1" cx="761.3" cy="140.8" r="8"/>
<circle class="st1" cx="1007" cy="238" r="8"/>
<circle class="st1" cx="393.9" cy="234.6" r="8"/>
<circle class="st1" cx="466.4" cy="715.7" r="8"/>
<circle class="st1" cx="839.9" cy="227.8" r="8"/>
<circle class="st1" cx="1430.3" cy="328.9" r="8"/>
<circle class="st1" cx="560.4" cy="518.1" r="8"/>
<circle class="st1" cx="818.8" cy="176.6" r="8"/>
<circle class="st1" cx="1399.2" cy="346.7" r="8"/>
<circle class="st1" cx="539.3" cy="639.3" r="8"/>
<circle class="st1" cx="431.8" cy="417.6" r="8"/>
<circle class="st1" cx="833.4" cy="130.6" r="8"/>
<circle class="st1" cx="521.9" cy="643.2" r="8"/>
<circle class="st1" cx="272.6" cy="401.1" r="8"/>
<circle class="st1" cx="807.6" cy="200.3" r="8"/>
<circle class="st1" cx="1035.8" cy="236.1" r="8"/>
<circle class="st1" cx="824.5" cy="154.8" r="8"/>
<circle class="st1" cx="1360.2" cy="359" r="8"/>
<circle class="st1" cx="888.8" cy="115" r="8"/>
<circle class="st1" cx="1426.8" cy="301.5" r="8"/>
<circle class="st1" cx="1403.8" cy="351.9" r="8"/>
<circle class="st1" cx="-93.3" cy="358.2" r="8"/>
<circle class="st1" cx="1389.7" cy="323.1" r="8"/>
<circle class="st1" cx="1212.2" cy="384.2" r="8"/>
<circle class="st1" cx="373.6" cy="245.7" r="8"/>
<circle class="st1" cx="262.1" cy="303.1" r="8"/>
<circle class="st1" cx="1440.2" cy="255.4" r="8"/>
<circle class="st1" cx="329" cy="240.8" r="8"/>
<circle class="st1" cx="1166.7" cy="280" r="8"/>
<circle class="st1" cx="925.6" cy="232.8" r="8"/>
<circle class="st1" cx="336.7" cy="299.9" r="8"/>
<circle class="st1" cx="1359.9" cy="483.6" r="8"/>
<ellipse transform="matrix(0.1602 -0.9871 0.9871 0.1602 440.0319 1358.1957)" class="st1" cx="1018.2" cy="420.5" rx="8" ry="8"/>
<circle class="st1" cx="931" cy="660.4" r="8"/>
<circle class="st1" cx="1266.7" cy="346.4" r="8"/>
<circle class="st1" cx="927.5" cy="174.8" r="8"/>
<circle class="st1" cx="679.3" cy="93.9" r="8"/>
<circle class="st1" cx="946.4" cy="506.5" r="8"/>
<circle class="st1" cx="1144.7" cy="335.5" r="8"/>
<circle class="st1" cx="921.1" cy="195.9" r="8"/>
<circle class="st1" cx="1495.6" cy="274.7" r="8"/>
<circle class="st1" cx="1240.8" cy="317.6" r="8"/>
<circle class="st1" cx="1348.7" cy="476.5" r="8"/>
<circle class="st1" cx="1036.6" cy="307.8" r="8"/>
<circle class="st1" cx="851.1" cy="550.4" r="8"/>
<circle class="st1" cx="169.4" cy="264.1" r="8"/>
<circle class="st1" cx="146.7" cy="277.9" r="8"/>
<circle class="st1" cx="955.4" cy="271.9" r="8"/>
<circle class="st1" cx="913.4" cy="117.9" r="8"/>
<circle class="st1" cx="1176.6" cy="293.3" r="8"/>
<circle class="st1" cx="774.8" cy="167.9" r="8"/>
<circle class="st1" cx="346.2" cy="570.6" r="8"/>
<circle class="st1" cx="729.4" cy="246.8" r="8"/>
<circle class="st1" cx="795.6" cy="452.1" r="8"/>
<circle class="st1" cx="807.4" cy="179.2" r="8"/>
<circle class="st1" cx="1373.5" cy="272.8" r="8"/>
<circle class="st1" cx="1224.4" cy="411.4" r="8"/>
<circle class="st1" cx="758.5" cy="236" r="8"/>
<circle class="st1" cx="766.2" cy="156.4" r="8"/>
<circle class="st1" cx="999.5" cy="519.7" r="8"/>
<circle class="st1" cx="284.4" cy="243.5" r="8"/>
<circle class="st1" cx="1096.9" cy="343.8" r="8"/>
<circle class="st1" cx="353.6" cy="454.7" r="8"/>
<circle class="st1" cx="1535.9" cy="734.1" r="8"/>
<circle class="st1" cx="299.9" cy="270.9" r="8"/>
<circle class="st1" cx="229.2" cy="370.2" r="8"/>
<circle class="st1" cx="241" cy="327.3" r="8"/>
<circle class="st1" cx="1401.9" cy="352.9" r="8"/>
<circle class="st1" cx="314.4" cy="288.3" r="8"/>
<circle class="st1" cx="338.6" cy="329.7" r="8"/>
<circle class="st1" cx="1190.1" cy="467.3" r="8"/>
<circle class="st1" cx="1451.2" cy="401.6" r="8"/>
<circle class="st1" cx="954.8" cy="659.1" r="8"/>
<circle class="st1" cx="803.5" cy="217.6" r="8"/>
<circle class="st1" cx="1095.4" cy="624.1" r="8"/>
<circle class="st1" cx="306.8" cy="208.7" r="8"/>
<circle class="st1" cx="835.2" cy="187.1" r="8"/>
<circle class="st1" cx="820.7" cy="204" r="8"/>
<circle class="st1" cx="1212.9" cy="359.7" r="8"/>
<circle class="st1" cx="1381" cy="240.3" r="8"/>
<circle class="st1" cx="984.7" cy="502.4" r="8"/>
<circle class="st1" cx="1433.2" cy="304.1" r="8"/>
<circle class="st1" cx="1371.7" cy="350.1" r="8"/>
<circle class="st1" cx="1691.9" cy="634.2" r="8"/>
<circle class="st1" cx="1518.9" cy="266.2" r="8"/>
<circle class="st1" cx="283.4" cy="230.9" r="8"/>
<circle class="st1" cx="326.3" cy="226.6" r="8"/>
<circle class="st1" cx="376.3" cy="258.9" r="8"/>
<circle class="st1" cx="736.1" cy="165.6" r="8"/>
<circle class="st1" cx="826.8" cy="115.7" r="8"/>
<circle class="st1" cx="908.8" cy="210.6" r="8"/>
<circle class="st1" cx="376.7" cy="375.7" r="8"/>
<circle class="st1" cx="1263.2" cy="319.4" r="8"/>
<circle class="st1" cx="467.1" cy="459.3" r="8"/>
<circle class="st1" cx="161.3" cy="204.3" r="8"/>
<circle class="st1" cx="1398.8" cy="697.3" r="8"/>
<circle class="st1" cx="386.7" cy="239.7" r="8"/>
<circle class="st1" cx="179.7" cy="281.1" r="8"/>
<circle class="st1" cx="362.1" cy="235.8" r="8"/>
<circle class="st1" cx="1363.1" cy="420.5" r="8"/>
<circle class="st1" cx="500.6" cy="685" r="8"/>
<circle class="st1" cx="846.6" cy="176.2" r="8"/>
<circle class="st1" cx="332.2" cy="436.3" r="8"/>
<circle class="st1" cx="223" cy="362.9" r="8"/>
<circle class="st1" cx="1310.7" cy="386.4" r="8"/>
<circle class="st1" cx="371.6" cy="255" r="8"/>
<circle class="st1" cx="887.7" cy="135" r="8"/>
<circle class="st1" cx="718.9" cy="454.3" r="8"/>
<circle class="st1" cx="1032.6" cy="335.1" r="8"/>
<circle class="st1" cx="1083.2" cy="627.1" r="8"/>
<circle class="st1" cx="150.3" cy="285.6" r="8"/>
<circle class="st1" cx="399.4" cy="706.7" r="8"/>
<circle class="st1" cx="170" cy="192.8" r="8"/>
<circle class="st1" cx="1373.7" cy="425.2" r="8"/>
<circle class="st1" cx="1429.4" cy="295.4" r="8"/>
<circle class="st1" cx="1410.3" cy="227.4" r="8"/>
<circle class="st1" cx="1361.7" cy="485.4" r="8"/>
<circle class="st1" cx="137.3" cy="255.9" r="8"/>
<circle class="st1" cx="305.6" cy="430.4" r="8"/>
<circle class="st1" cx="1376.3" cy="250.1" r="8"/>
<circle class="st1" cx="895.7" cy="235.7" r="8"/>
<circle class="st1" cx="199" cy="234" r="8"/>
<circle class="st1" cx="142.9" cy="247.4" r="8"/>
<circle class="st1" cx="896.6" cy="222.2" r="8"/>
<circle class="st1" cx="563" cy="576.2" r="8"/>
<circle class="st1" cx="305.8" cy="247" r="8"/>
<circle class="st1" cx="1581.8" cy="710.1" r="8"/>
<circle class="st1" cx="1425.3" cy="294.7" r="8"/>
<circle class="st1" cx="1402.7" cy="349.9" r="8"/>
<circle class="st1" cx="1411.7" cy="263" r="8"/>
<circle class="st1" cx="1007.9" cy="228.6" r="8"/>
<circle class="st1" cx="290.8" cy="404.5" r="8"/>
<circle class="st1" cx="322.2" cy="300.4" r="8"/>
<circle class="st1" cx="889" cy="120.2" r="8"/>
<circle class="st1" cx="963.9" cy="290.3" r="8"/>
<circle class="st1" cx="1393.4" cy="259.2" r="8"/>
<circle class="st1" cx="1039.8" cy="613.7" r="8"/>
<circle class="st1" cx="328.8" cy="315.9" r="8"/>
<circle class="st1" cx="1440.3" cy="334.3" r="8"/>
<circle class="st1" cx="1387.7" cy="244.6" r="8"/>
<circle class="st1" cx="840.6" cy="161.3" r="8"/>
<circle class="st1" cx="336.2" cy="494.8" r="8"/>
<circle class="st1" cx="1305.5" cy="190.2" r="8"/>
<circle class="st1" cx="858.8" cy="188.6" r="8"/>
<circle class="st1" cx="896.1" cy="148.6" r="8"/>
<circle class="st1" cx="1345.5" cy="379.5" r="8"/>
<circle class="st1" cx="877.7" cy="163.7" r="8"/>
<circle class="st1" cx="1392" cy="298" r="8"/>
<circle class="st1" cx="1423.8" cy="293.5" r="8"/>
<circle class="st1" cx="1354.9" cy="274.7" r="8"/>
<circle class="st1" cx="406.3" cy="205.1" r="8"/>
<circle class="st1" cx="172.5" cy="181.9" r="8"/>
<circle class="st1" cx="302" cy="177.5" r="8"/>
<circle class="st1" cx="264.7" cy="163.7" r="8"/>
<circle class="st1" cx="225.2" cy="170" r="8"/>
<circle class="st1" cx="372.7" cy="216.1" r="8"/>
<circle class="st1" cx="857.6" cy="203.4" r="8"/>
<circle class="st1" cx="964.6" cy="288.5" r="8"/>
<circle class="st1" cx="819.5" cy="192.7" r="8"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

View File

@@ -0,0 +1,316 @@
---
title: CSCI 1100 - Homework 1 - Calculations and Strings
subtitle:
date: 2024-03-12T02:12:11-04:00
slug: csci-1100-hw-1
draft: false
author:
name: James
link: https://www.jamesflare.com
email:
avatar: /site-logo.avif
description: This blog post provides a detailed overview of a Python programming homework assignment, which includes creating a Mad Libs game, calculating speed and pace, and generating a framed box with user-specified dimensions.
keywords: ["Python", "programming", "homework", "Mad Libs", "speed calculation", "framed box"]
license:
comment: true
weight: 0
tags:
- CSCI 1100
- Homework
- RPI
- Python
- Programming
categories:
- Programming
collections:
- CSCI 1100
hiddenFromHomePage: false
hiddenFromSearch: false
hiddenFromRss: false
hiddenFromRelated: false
summary: This blog post provides a detailed overview of a Python programming homework assignment, which includes creating a Mad Libs game, calculating speed and pace, and generating a framed box with user-specified dimensions.
resources:
- name: featured-image
src: featured-image.jpg
- name: featured-image-preview
src: featured-image-preview.jpg
toc: true
math: false
lightgallery: false
password:
message:
repost:
enable: true
url:
# See details front matter: https://fixit.lruihao.cn/documentation/content-management/introduction/#front-matter
---
<!--more-->
## Overview
This homework, worth 100 points total toward your overall homework grade, is due Thursday, September 14, 2023 at 11:59:59 pm. The three parts should each be submitted separately. All parts should be submitted by the deadline or your program will be considered late.
Please refer to the Submission Guidelines document before starting this assignment. It will give you details on what we expect and will answer some of the more common questions, including that you need to submit your program through Submitty and that Submitty will open by Monday, September 11th, 2023.
Remember that your output must match EXACTLY the format shown in example runs from the `hw01_files.zip` file. The purpose of this is to make testing easier and at the same time teach you how to be precise in your programming using the tools we gave you. We love creativity, but not in HW output formatting!
## Part 1: Mad Libs (40 pts)
In this part, you will write a Python program to construct the Mad Lib given below:
```text
Good morning <proper name>!
This will be a/an <adjective1> <noun1>! Are you <verb1> forward to it?
You will <verb2> a lot of <noun2> and feel <emotion1> when you do.
If you do not, you will <verb3> this <noun3>.
This <season> was <adjective2>. Were you <emotion2> when <team_name> won
the <noun4>?
Have a/an <adjective3> day!
```
You will ask the user of the program for the missing words | those enclosed in `< >` | using the input function. You will then take all the user-specified inputs and construct the above Mad Lib. Make sure your output looks like the above paragraph, except that the missing information is filled in with the user input.
An example of the program run is provided in file `hw1 part1 output.txt` (You will need to download file `hw01_files.zip` from the Course Materials section of Submitty and unzip it into your directory for HW 1).
We've provided reasonable inputs, but the idea of Mad Libs is to input random words and see how silly the result looks. Try it!
Of course, the program you write will only work for the specific Mad Lib we've written above. A more challenging problem, which you will be capable of solving by the end of the semester, is to write a program that reads in any Mad Lib, figures out what to ask the user, asks the user, reads the input, and generates the final Mad Lib.
Test your code well and when you are sure that it works, please submit it as a file named `hw1 part1.py` to Submitty for Part 1 of the homework.
## Part 2: Speed Calculations (40 pts)
Many exercise apps record both the time and the distance a user covers while walking, running, biking, or swimming. Some users of the apps want to know their average pace in minutes and seconds per mile, while others want to know their average speed in miles per hour. In many cases, we are interested in projected time over a specific distance. For example, if I run 6.3 miles in 53 minutes and 30 seconds, my average pace is 8 minutes and 29 seconds per mile, my average speed is 7.07 miles per hour, and my projected time for 2.7 miles is 22 minutes and 55 seconds.
Your job in Part 2 of this homework is to write a program that asks the user for the minutes, seconds, miles run, and miles to target from an exercise event and outputs both the average pace and the average speed.
An example of the program run is provided in file `hw1 part2 output.txt` (Can be found inside the `hw01_files.zip` file).
You can expect minutes and seconds to both be integers, but miles and miles to target will be floats. All minutes and seconds must be maintained as integers so please use integer division and modulo operations. For example:
```python
>>> x = 29.52
>>> y = int(x)
>>> print(y)
29
```
The output for the speed will be a float and should be printed to 2 decimal places. Notice also that our solution generates a blank line before the output of calculations.
We will test your code for the values used in our examples as well as a range of different values. Test your code well and when you are sure that it works, please submit it as a file named `hw1 part2.py` to Submitty for Part 2 of the homework.
## Part 3: Framed Box (20 pts)
Write a program that asks the user for a frame character, and then the height and width of a framed box. Then output a box of the given size, framed by the given character. Also, output the dimensions of the box centered horizontally and vertically inside the box. In case perfect vertical centering is not possible, dimensions should be output such that there is one less row above the text than below it. In case perfect horizontal centering is not possible, dimensions should be output such that there is one less space character to the left of the text than to the right.
Assume that the user inputs valid values for each input: width is a positive integer (7 or higher) and height is a positive integer (4 or higher), and a single character is given for the frame.
Two examples of the program run are provided in files `hw1 part3 output 01.txt` and `hw1 part3 output 02.txt` (Can be found inside the `hw01_files.zip` file).
You will need to put the box dimensions in a string first, and then use its length to figure out how long the line containing the dimensions should be. If you have prior programming experience you might be tempted to look for how Python implements "loops" in order to generate the full frame, but Python provides string manipulation tools (Lecture 3) that make this unnecessary. You must not use any if statements or loops in your program. We have not learned them yet, they are not needed, and they will not make your solution better or more elegant.
We will test your code for the values used in our examples as well as a range of different values. Test your code well and when you are sure that it works, please submit it as a file named `hw1 part3.py` to Submitty for Part 3 of the homework.
## Supporting Files
{{< link href="HW1.zip" content="HW1.zip" title="Download HW1.zip" download="HW1.zip" card=true >}}
***
## Solution
### hw1_part1.py
```python
#Prepare variables
proper_name = ""
adjective1 = ""
noun1 = ""
verb1 = ""
verb2 = ""
noun2 = ""
emotion1 = ""
verb3 = ""
noun3 = ""
season = ""
adjective2 = ""
emotion2 = ""
team_name = ""
noun4 = ""
adjective3 = ""
template= """
Good morning <proper name>!
This will be a/an <adjective1> <noun1>! Are you <verb1> forward to it?
You will <verb2> a lot of <noun2> and feel <emotion1> when you do.
If you do not, you will <verb3> this <noun3>.
This <season> was <adjective2>. Were you <emotion2> when <team_name> won
the <noun4>?
Have a/an <adjective3> day!"""
output = ""
#Get user's input
print("Let's play Mad Libs for Homework 1")
print("Type one word responses to the following:\n")
proper_name = input("proper_name ==> ").strip()
print(proper_name)
adjective1 = input("adjective ==> ").strip()
print(adjective1)
noun1 = input("noun ==> ").strip()
print(noun1)
verb1 = input("verb ==> ").strip()
print(verb1)
verb2 = input("verb ==> ").strip()
print(verb2)
noun2 = input("noun ==> ").strip()
print(noun2)
emotion1 = input("emotion ==> ").strip()
print(emotion1)
verb3 = input("verb ==> ").strip()
print(verb3)
noun3 = input("noun ==> ").strip()
print(noun3)
season = input("season ==> ").strip()
print(season)
adjective2 = input("adjective ==> ").strip()
print(adjective2)
emotion2 = input("emotion ==> ").strip()
print(emotion2)
team_name = input("team-name ==> ").strip()
print(team_name)
noun4 = input("noun ==> ").strip()
print(noun4)
adjective3 = input("adjective ==> ").strip()
print(adjective3)
#Construct the Mad Lib
output = template.replace("<proper name>", proper_name)
output = output.replace("<adjective1>", adjective1)
output = output.replace("<noun1>", noun1)
output = output.replace("<verb1>", verb1)
output = output.replace("<verb2>", verb2)
output = output.replace("<noun2>", noun2)
output = output.replace("<emotion1>", emotion1)
output = output.replace("<verb3>", verb3)
output = output.replace("<noun3>", noun3)
output = output.replace("<season>", season)
output = output.replace("<adjective2>", adjective2)
output = output.replace("<emotion2>", emotion2)
output = output.replace("<team_name>", team_name)
output = output.replace("<noun4>", noun4)
output = output.replace("<adjective3>", adjective3)
#Print the Mad Lib
print("\nHere is your Mad Lib...")
print(output, end="")
```
### hw1_part2.py
```python
#Perpare Variables
minutes = 00
seconds = 00
miles = 00.00
target_miles = 00.00
pace_seconds_per_mile = 00.00
pace_seconds = 00
pace_minutes = 00
speed_mph = 00.00
target_time_total_seconds = 00.00
target_time_seconds = 00
target_time_minutes = 00
#Get User Input
minutes = str(input("Minutes ==> "))
print(minutes)
seconds = str(input("Seconds ==> "))
print(seconds)
miles = str(input("Miles ==> "))
print(miles)
target_miles = str(input("Target Miles ==> "))
print(target_miles)
#Calculate Pace
pace_seconds_per_mile = (int(minutes) * 60 + int(seconds)) / float(miles)
pace_seconds = int(pace_seconds_per_mile % 60)
pace_minutes = int(pace_seconds_per_mile // 60)
#Calculate Speed
speed_mph = float(miles) / (int(minutes) / 60 + int(seconds) / 3600)
#Calculate Target Time
target_time_total_seconds = float(target_miles) * pace_seconds_per_mile
target_time_seconds = int(target_time_total_seconds % 60)
target_time_minutes = int(target_time_total_seconds // 60)
#Print Results
print("\nPace is " + str(pace_minutes) + " minutes and " + str(pace_seconds) + " seconds per mile.")
print("Speed is {0:.2f} miles per hour.".format(float(speed_mph)))
print("Time to run the target distance of {0:.2f} miles is {1} minutes and {2} seconds.".format(float(target_miles), int(target_time_minutes), int(target_time_seconds)), end="")
```
### hw1_part3.py
```python
#Prepare Variables
frame_character = ""
height = 0
width = 0
free_space = 0.0
#Get user input
frame_character = input("Enter frame character ==> ").strip()
print(frame_character)
height = int(input("Height of box ==> ").strip())
print(height)
width = int(input("Width of box ==> ").strip())
print(width, "\n")
#Calculate dimensions line
dimensions = str(width) + "x" + str(height)
free_space = width - 2 - len(dimensions)
#Calculate the left and right padding considering odd/even width
left_space = free_space // 2
right_space = free_space // 2 + (free_space % 2)
#Prepare rows
top_bottom_row = frame_character * width
empty_row = frame_character + " " * (width - 2) + frame_character
dimension_row = frame_character + " " * left_space + dimensions + " " * right_space + frame_character
#Calculate the number of rows before and after the dimensions row
before_rows = ((height - 2) // 2) - ((height - 1) % 2)
after_rows = height - 3 - before_rows
#Output box
print("Box:")
print(top_bottom_row)
print((empty_row + '\n') * before_rows, end="")
print(dimension_row)
print((empty_row + '\n') * after_rows, end="")
print(top_bottom_row)
```

Binary file not shown.

View File

@@ -0,0 +1,327 @@
---
title: CSCI 1100 - Homework 2 - Strings and Functions
subtitle:
date: 2024-03-12T02:41:25-04:00
slug: csci-1100-hw-2
draft: false
author:
name: James
link: https://www.jamesflare.com
email:
avatar: /site-logo.avif
description: This homework assignment consists of three parts, focusing on sizing a gum ball machine, implementing a simple substitution cipher, and performing basic sentiment analysis on sentences using Python functions and string manipulation.
keywords: ["Python","functions","string manipulation","sentiment analysis"]
license:
comment: true
weight: 0
tags:
- CSCI 1100
- Homework
- RPI
- Python
- Programming
categories:
- Programming
collections:
- CSCI 1100
hiddenFromHomePage: false
hiddenFromSearch: false
hiddenFromRss: false
hiddenFromRelated: false
summary: This homework assignment consists of three parts, focusing on sizing a gum ball machine, implementing a simple substitution cipher, and performing basic sentiment analysis on sentences using Python functions and string manipulation.
resources:
- name: featured-image
src: featured-image.jpg
- name: featured-image-preview
src: featured-image-preview.jpg
toc: true
math: false
lightgallery: false
password:
message:
repost:
enable: true
url:
# See details front matter: https://fixit.lruihao.cn/documentation/content-management/introduction/#front-matter
---
<!--more-->
## Overview
This homework, worth 100 points total toward your overall homework grade, is due Thursday, February 1, 2024 at 11:59:59 pm. Three parts should each be submitted separately. All parts should be submitted by the deadline or your program will be considered late.
**Note on grading**: Make sure you read the Submission Guidelines document. It applies to this and all future homework assignments and will be of increasing importance. In all parts of the homework, we will specify which functions you must provide. Make sure you write these functions, even if they are very simple. Otherwise, you will lose points. We will write more complex functions as the semester goes on. In addition, we will also look at program structure (see Lecture 4), and at the names of variables and functions in grading this homework.
You are not allowed to use any loops anywhere in this assignment.
## Fair Warning About Excess Collaboration
For all homework assignments this semester we will be using software that compares all submitted programs, looking for inappropriate similarities. This handles a wide variety of differences between programs, so that if you either (a) took someone elses program, modified it (or not), and submitted it as your own, (b) wrote a single program with one or more colleagues and submitted modified versions separately as your own work, or (c) submitted (perhaps slightly modified) software submitted in a previous year as your software, this software will mark these submissions as very similar.
All of (a), (b), and (c) are beyond what is acceptable in this course — they are violations of the academic integrity policy. Furthermore, this type of copying will prevent you from learning how to solve problems and will hurt you in the long run. The more you write your own code, the more you learn.
Please read the Collaboration Policy document for acceptable levels of collaboration and how you can protect yourself. The document can be found on the Course Materials page on Submitty. Penalties for excess collaboration can be as high as:
- 0 on the homework, and
- an additional overall 5% reduction on the semester grade.
Penalized students will also be prevented from dropping the course. More severe violations, such as stealing someone elses code, will lead to an automatic F in the course. A student caught in a second academic integrity violation will receive an automatic F.
By submitting your homework you are asserting that you both (a) understand the academic integrity policy and (b) have not violated it.
Finally, please note that this policy is in place for the small percentage of problems that will arise in this course. Students who follow the strategies outlined above and use common sense in doing so will not have any trouble with academic integrity.
## Part 1: A Penny for a Gum Ball Mickey (40 pts)
We are going to conduct an experiment in selling gum balls, but we are going to make a few assumptions. Assume that you are selling gum balls from a vending machine. The machine is a cube, and the gum balls are spheres. You check the machine once a week. The goal is to size the machine so that it is completely full at the start of the week, you never run out of gum balls before you get back to check the machine, and you do not have too many gum balls left at the end of the week to go stale. We will make the assumption that all the gum balls line up so that the number of gum balls along any dimension of the cube is simply the side length divided by the diameter of the spheres. So if the side length is 9.0 and the gum balls have a radius of 0.5 exactly 9 gum balls would fit along each dimension, or 729 gum balls in total. This is known as a cubic lattice.
Do the following:
1. First write two functions, `find_volume_sphere(radius)` and `find_volume_cube(side)` that calculate the volume of a sphere given a radius, and that calculate the volume of a cube given a side, respectively.
2. Now ask the user for the radius of the gum balls and the weekly sales.
3. Calculate the total number of gum balls that need to fit in the machine as 1.25 times the weekly sales and use this to calculate the side length of the machine in terms of an integer number of gum balls. Hint: You know the total number of gum balls and in a cubic lattice, you can fit the same number along each dimension, so if you can fit N gum balls along each dimension, then the machine holds N³ gum balls. The math module function `ceil` will always round up and may be of use here. (We wont be cutting gum balls to fit them in the machine.)
4. Calculate a few more values: how many gum balls will actually fit given the dimension you chose (remember that there must be an integer number of gum balls along each dimension of the cube); the volume of the cube; the volume of each gum ball, and the wasted space if we put in both the number of gum balls we need to hold and how many we can hold.
5. Print these values out using the `.2f` format for all floating point values.
Two examples of the program run (how it will look when you run it using Spyder IDE) are provided in files `hw2 part1 output 01.txt` and `hw2 part1 output 02.txt` (You will need to download file `hw02_files.zip` from the Course Materials section of Submitty and unzip it into your directory for HW 2).
We will test your code for the above values as well as a range of different values. Test your code well and when you are sure that it works, please submit it as a file named `hw2 part1.py` to Submitty for Part 1 of the homework.
## Part 2: Find the Hidden Message (40 pts)
Write a program to determine if a simple substitution code is reversible for a given string. The program should ask the user for a sentence using `input`. The program should then encrypt the string into a cipher, decode the cipher, and compare the result of the decode operation to the original sentence. If the decoded cipher matches the original, then the operation is reversible on the string. Otherwise, it is not reversible.
Along the way, the program should print out the cipher, the difference in length between the cipher and the original sentence, the decoded cipher, and a brief message saying whether the operation was reversible. Note that the difference in length should always be printed as a positive number.
Two examples of the program run (how it will look when you run it using Spyder IDE) are provided in files `hw2 part2 output 01.txt` and `hw2 part2 output 02.txt` (can be found inside the `hw02_files.zip` file).
The encryption rules are based on a set of string replacements, they should be applied in this order exactly:
| Original | Replacement | Note |
|:--------:|:-----------:|:-----|
| ' a' | '%4%' | Replace any 'a' after a space with '%4%' |
| 'he' | '7!' | Replace all occurrences of string 'he' with '7!' |
| 'e' | '9(*9(' | Replace any remaining 'e' with '9(*9(' |
| 'y' | '*%' | Replace all occurrences of string 'y' with '*%' |
| 'u' | '@@@' | Replace all occurrences of string 'u' with '@@@' |
| 'an' | '-?' | Replace all occurrences of string 'an' with '-?' |
| 'th' | '!@+3' | Replace all occurrences of string 'th' with '!@+3' |
| 'o' | '7654' | Replace all occurrences of string 'o' with '7654' |
| '9' | '2' | Replace all occurrences of string '9' with '2' |
| 'ck' | '%4' | Replace all occurrences of string 'ck' with '%4' |
For example the cipher for methane is `m2(*2(!@+3-?2(*2(`. Here is how we get this:
```python
>>> 'methane'.replace('e','9(*9(')
'm9(*9(than9(*9('
>>> 'm9(*9(than9(*9('.replace('an','-?')
'm9(*9(th-?9(*9('
>>> 'm9(*9(th-?9(*9('.replace('th','!@+3')
'm9(*9(!@+3-?9(*9('
>>> 'm9(*9(!@+3-?9(*9('.replace('9', '2')
'm2(*2(!@+3-?2(*2('
```
Decrypting will involve using the rules in reverse order.
Your program must use two functions:
- Write one function `encrypt(word)` that takes as an argument a string in plain English, and returns a ciphered version of it as a string.
- Write a second function `decrypt(word)` that does the reverse: takes a string in cipher and returns the plain English version of it.
Both functions will be very similar in structure, but they will use the string replacement rules in different order. You can now test whether your functions are correct by first encrypting a string, and then decrypting. The result should be identical to the original string (assuming the replacement rules are not ambiguous).
Use these functions to implement the above program. We will test your code for the above values as well as a range of different values.
Test your code well and when you are sure that it works, please submit it as a file named `hw2 part2.py` to Submitty for Part 2 of the homework.
## Part 3: How Do You Feel about Homework? (20 pts)
In this part of the homework, you will implement a very rough sentiment analysis tool. While the real tools use natural language processing, they all use word counts similar to the one we use here. Understanding the sentiment in messages is a crucial part of a lot of artificial intelligence tools.
Write a program that will ask the user for a string containing a sentence. The program will then compute the happiness and sadness level of the sentence using the two functions described below. If the happiness level is higher than sadness level, then the tone of the sentence is happy. If the sadness level is higher, then the tone of the sentence is sad. Otherwise, it is neutral. Find and print the tone of the sentence by first printing a sentiment line with a number of + equal to the number of happy words followed by the number of - equal to the number of sad words, followed by a simple statement of the analysis.
Two examples of the program run (how it will look when you run it using Spyder IDE 101) are provided in files `hw2 part3 output 01.txt` and `hw2 part3 output 02.txt` (Can be found inside the `hw02_files.zip` file).
To accomplish this you will write a function called `number_happy(sentence)` which returns the number of words in a given string called sentence that are happy. To do this, find the total count of the following 6 words: laugh happiness love excellent good smile. Here is an example run of this function:
```python
>>> number_happy("I laughed and laughed at her excellent joke.")
3
```
This is because the count of happy words is 3 (laugh is repeated twice). Your code should work even if there are upper and lower case words and extra spaces in the beginning and end of the sentence.
```python
>>> number_happy(" Happiness is the state of a student who started homework early. ")
1
```
Next, write a second function called `number_sad(sentence)` that works the same way but instead counts the number of the following 6 sad words in English: bad sad terrible horrible problem hate
```python
>>> number_sad("Dr. Horrible's Sing-Along Blog is an excellent show.")
1
>>> number_sad("Alexander and the Terrible, Horrible, No Good, Very Bad Day")
3
```
Of courses, there are more than 6 words of each category. We will see how to feed them using a file and use lists to process them in future classes.
Test your code well and when you are sure that it works, please submit it as a file named `hw2 part3.py` to Submitty for Part 3 of the homework.
## Supporting Files
{{< link href="HW2.zip" content="HW2.zip" title="Download HW2.zip" download="HW2.zip" card=true >}}
***
## Solution
### hw2_part1.py
```python
import math
#Functions
def find_volume_sphere(radius):
"""Calculates the volume of a sphere with a given radius"""
return (4/3) * math.pi * radius**3
def find_volume_cube(side):
"""Calculates the volume of a cube with a given side length"""
return side**3
#Input
radius = str(input("Enter the gum ball radius (in.) => ").strip())
print(radius)
weekly_sales = str(input("Enter the weekly sales => ").strip())
print(weekly_sales, "\n")
#Calculations
target_sales = math.ceil(float(weekly_sales) * 1.25)
edge_gumballs = math.ceil(target_sales**(1/3))
edge_length = edge_gumballs * float(radius)*2
edge_gumballs_max = edge_length / (float(radius)*2 + 0.0000000000000001)
#Aviod ZeroDivisionError by adding a small number to the radius
number_extra_gumballs = math.ceil(edge_gumballs_max**3 - target_sales)
volume_gumballs = find_volume_sphere(float(radius))
volume_cube = find_volume_cube(edge_length)
volume_wasted_target = volume_cube - volume_gumballs * target_sales
volume_wasted_full = volume_cube - volume_gumballs * (edge_gumballs_max) ** 3
#Print
print("The machine needs to hold", str(edge_gumballs), "gum balls along each edge.")
print("Total edge length is", "{:.2f}".format(edge_length), "inches.")
print("Target sales were", str(target_sales) + ", but the machine will hold", str(int(number_extra_gumballs)), "extra gum balls.")
print("Wasted space is", "{:.2f}".format(volume_wasted_target), "cubic inches with the target number of gum balls,")
print("or", "{:.2f}".format(volume_wasted_full), "cubic inches if you fill up the machine.")
```
### hw2_part2.py
```python
user_input = input("Enter a string to encode ==> ").strip()
print(user_input, "\n")
#Replacing
def encrypt(word):
word = word.replace(" a", "%4%")
word = word.replace("he", "7!")
word = word.replace("e", "9(*9(")
word = word.replace("y", "*%$")
word = word.replace("u", "@@@")
word = word.replace("an", "-?")
word = word.replace("th", "!@+3")
word = word.replace("o", "7654")
word = word.replace("9", "2")
word = word.replace("ck", "%4")
return word
#Calculation
length_difference = abs(len(user_input) - len(encrypt(user_input)))
#Decoding
def decrypt(word):
word = word.replace("%4", "ck")
word = word.replace("2", "9")
word = word.replace("7654", "o")
word = word.replace("!@+3", "th")
word = word.replace("-?", "an")
word = word.replace("@@@", "u")
word = word.replace("*%$", "y")
word = word.replace("9(*9(", "e")
word = word.replace("7!", "he")
word = word.replace("%4%", " a")
return word
#Printing
print("Encrypted as ==>", encrypt(user_input))
print("Difference in length ==>", str(length_difference))
print("Deciphered as ==>", decrypt(encrypt(user_input)))
if user_input == decrypt(encrypt(user_input)):
print("Operation is reversible on the string.")
else:
print("Operation is not reversible on the string.")
```
### hw2_part3.py
```python
def number_happy(sentence):
happy_words = ["laugh", "happiness", "love", "excellent", "good", "smile"]
sentence = sentence.lower()
#sentence = sentence.strip()
#sentence = sentence.split()
count = 0
for word in happy_words:
count += sentence.count(word)
return count
def number_sad(sentence):
sad_words = ["bad", "sad", "terrible", "horrible", "problem", "hate"]
sentence = sentence.lower()
#sentence = sentence.strip()
#sentence = sentence.split()
count = 0
for word in sad_words:
count += sentence.count(word)
return count
#Get user input
#sentence = "I laughed and laughed at her excellent joke."
sentence = input("Enter a sentence => ").strip()
#Print
#print(number_happy(sentence))
print(sentence)
print("Sentiment: " + ("+" * number_happy(sentence)) + ("-" * number_sad(sentence)))
if number_happy(sentence) > number_sad(sentence):
print("This is a happy sentence.")
elif number_happy(sentence) == number_sad(sentence):
print("This is a neutral sentence.")
else:
print("This is a sad sentence.")
```

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 197 KiB

View File

@@ -0,0 +1,126 @@
---
title: "For Yang Wenya - Wishing You Academic Success"
subtitle:
date: 2023-01-13T19:45:45+08:00
lastmod: 2024-03-10T01:36:05-05:00
slug: cards-wen-welcome-university
draft: false
author:
name: James
link: https://www.jamesflare.com
email:
avatar: /site-logo.avif
description: "A greeting card for Yang Wenya, congratulations on your university admission! I'm delighted to have known you. This page is a modern digital card, which you will likely access via a QR code scan. Unlike plain text, this is rich text, or as I like to jokingly call it, 'fat text'."
keywords:
license: ""
comment: true
weight: 0
tags:
- Cards
- Mathematics
- Epistemology
categories:
- Cards
hiddenFromHomePage: false
hiddenFromSearch: false
summary: "A greeting card for Yang Wenya, congratulations on your university admission! I'm delighted to have known you. This page is a modern digital card, which you will likely access via a QR code scan. Unlike plain text, this is rich text, or as I like to jokingly call it, 'fat text'."
resources:
- name: featured-image
src: featured-image.jpg
- name: featured-image-preview
src: featured-image-preview.jpg
toc:
enable: true
math:
enable: false
lightgallery: true
seo:
images: []
repost:
enable: true
url: ""
# See details front matter: https://fixit.lruihao.cn/theme-documentation-content/#front-matter
---
> **Change Log**
>
> - 2024/3/10
> - Refined main text grammar
> - Optimized and backed up bilibili videos
> - Corrected QR code URL
> - Embedded resource files into Adobe Illustrator project
> - Optimized card layout
## Card
{{< image src="for杨文雅.svg" caption="Greeting Card" width="600px" >}}
## Introduction
This page is a modern digital greeting card, which you will most likely access by scanning the QR code.
Unlike plain text, this is rich text, or as I personally prefer to jokingly call it, "fat text".
## Before the Story
I believe I've known you for a very long time, an unprecedentedly long time, so much so that I've forgotten when we first met. I can at least be certain it was before the fourth grade. I truly didn't expect that in the blink of an eye, it would be time for you to head off to university. The high EQ way of putting it is "time flies", while the low EQ version is "not knowing where the time has gone, waking up to find the world has changed".
Unfortunately, my academic journey has been fragmented across two cities and numerous schools. It's trendy these days for graduates to share the locations of the schools they attended from childhood to adulthood. A typical case might involve three or four locations, but I'm afraid I'd have to come up with seven. I remember a teacher once saying that she really admired those who transferred schools. At the time, I thought, "What's the big deal? Just this?" Later, I understood what she meant - when you transfer and leave, it essentially means saying goodbye to your friends, and it takes courage to start new relationships from scratch, especially for someone like me who doesn't live in the same city.
Every time I left, there was always a group of people expressing their reluctance to see me go, both teachers and students. I didn't pay much attention at the time, and I wasn't particularly satisfied with those schools anyway (otherwise, why would I leave?). Looking back now, there is indeed a tinge of sadness. However, to be fair, I am logically certain that I have no regrets, and that's how it should be. As for why I became emotional, that's just the nature of the human brain. When we reminisce about the past, we tend to selectively enhance the good parts and fade out the unhappy memories.
For instance, I later attended the graduation ceremony of my junior high school at that time. After all, we were once classmates, so it was appropriate for me to go back and show support after transferring. To be honest, I felt very happy and a bit excited before going. However, when I actually entered the classroom, it felt somewhat different from what I had imagined. That day, more than 50 people had left a mess all over the floor, with oil, Coke, water, and colored fragments of fireworks all mixed together and stuck on the ground. As a result, they all ran off, leaving me and a few unlucky souls to crawl on the floor and clean for over 3 hours until five o'clock in the afternoon. It was simply merciless.
Extended content: [How high-speed rail destroys the "sense of formality" of going home [Know something].mp4](https://minio-lv-a.jamesflare.com/public/bilibili/%E9%AB%98%E9%93%81%E6%98%AF%E6%80%8E%E6%A0%B7%E7%A0%B4%E5%9D%8F%E5%9B%9E%E5%AE%B6%E2%80%9C%E5%BD%A2%E5%BC%8F%E6%84%9F%E2%80%9D%E7%9A%84%EF%BC%9F%E3%80%90%E6%87%82%E7%82%B9%E5%84%BF%E5%95%A5%E3%80%91.mp4)
{{< bilibili id=BV1mZ4y1D7G2 >}}
While writing this post, I got a bit emotional thinking about how few classmates I've kept in touch with for more than 3 years (I can count one for now), how happy I was playing with you, Miss Yang, before, and then not knowing when we'll meet again or what we'll do when we meet.
### Embarking on Your Mathematical Journey
You've chosen mathematics as your major, so it won't be long before you start exploring the underlying logic of contemporary life. The classic example is the QR code I mentioned at the beginning, based on a paper less than five pages long from sixty years ago that has become one of the countless cornerstones of modern life today.
If you're interested, you can take a look. The paper is titled "POLYNOMIAL CODES OVER CERTAIN FINITE FIELDS". The file is as follows:
{{< link href="RS-1960.pdf" content="RS-1960.pdf" title="Download RS-1960.pdf" download="RS-1960.pdf" card=true >}}
***
The following is some extended content (main text). Have you ever pondered what mathematics truly is? I mean, what is the essence of mathematics?
According to the limited knowledge of Theory of Knowledge (ToK) that I've learned, mathematics is quite special. It differs from other disciplines, such as physics and chemistry, not in terms of content but in terms of epistemology (which can be considered from the aspects of **completeness**, **self-consistency**, and **decidability**). Mathematics is a precise language.
1. Completeness:
- Mathematics is a complete system; any mathematical proposition can be proven or disproven within its axiomatic framework.
- Physics, chemistry, and other disciplines rely on experiments and observations, and their theoretical systems may have unknown factors and limitations.
2. Self-consistency:
- Mathematics is built upon axiomatic foundations, and the entire system is self-consistent, free from internal contradictions.
- Theories in physics, chemistry, and other disciplines may be revised or overturned with new experimental results, indicating relatively weaker self-consistency.
3. Decidability:
- In mathematics, a proposition is either true or false, with no ambiguity or uncertainty (excluding undecidable propositions).
- Theories and conclusions in physics, chemistry, and other disciplines may have some degree of uncertainty and need to be described using probability and statistical methods.
I recommend a few thought-provoking videos that I've watched but don't fully comprehend. Nevertheless, they all present intriguing content that challenges the common notions mentioned above. The first one is titled "[Mathematics is not complete; mathematics has a fatal flaw.mp4](https://minio-lv-a.jamesflare.com/public/bilibili/%E6%95%B0%E5%AD%A6%E5%B9%B6%E4%B8%8D%E5%AE%8C%E5%A4%87%EF%BC%8C%E6%95%B0%E5%AD%A6%E6%9C%89%E4%B8%80%E4%B8%AA%E8%87%B4%E5%91%BD%E7%BC%BA%E9%99%B7.mp4)".
{{< bilibili id=BV1464y1k7Ya p=2 >}}
The second one is called "[Mathematical duel, the origin of imaginary numbers.mp4](https://minio-lv-a.jamesflare.com/public/bilibili/%E6%95%B0%E5%AD%A6%E5%86%B3%E6%96%97%EF%BC%8C%E8%99%9A%E6%95%B0%E7%9A%84%E6%9D%A5%E6%BA%90.mp4)".
{{< bilibili id=BV11h411x7z5 p=2 >}}
## Sources
Lastly, considering that this is the nth website I've built (having created several), if you're interested, it's best to save this page offline. Otherwise, if it disappears one day, it'll be quite a prank. Use `Ctrl + P` or `Command + P` to print the webpage as a PDF, or right-click the webpage and save it.
Here's the Adobe Illustrator project source file:
{{< link href="for杨文雅.ai" content="for杨文雅.ai" title="Download for杨文雅.ai" download="for杨文雅.ai" card=true >}}

124
content/en/resume/index.md Normal file
View File

@@ -0,0 +1,124 @@
---
title: Resume - Jinshan Zhou
subtitle:
date: 2024-03-12T17:40:26-04:00
slug: resume
description:
keywords:
draft: true
comment: false
math: false
lightgallery: false
---
## Basic Information
Address: Troy, NY, 12180, USA
Phone: +1 518-212-0109
Email: jamesflare1212@gmail.com
LinkedIn:
GitHub: [JamesFlare1212](https://github.com/JamesFlare1212)
## Summary
Hi, I'm Jinshan Zhou, a senior student majoring in Electrical Engineering at Rensselaer Polytechnic Institute. I am passionate about electrical engineering and have a strong interest in power systems and renewable energy. I am proficient in Python and LaTeX, and I am also familiar with Git repository management. I am currently seeking a full-time position in the power systems field.
## Work Experience
### [Job Title] at [Company Name]
[Start Date] - [End Date] | [Location]
- [Key responsibility or achievement]
- [Key responsibility or achievement]
- [Key responsibility or achievement]
### [Job Title] at [Company Name]
[Start Date] - [End Date] | [Location]
- [Key responsibility or achievement]
- [Key responsibility or achievement]
- [Key responsibility or achievement]
## Education
### RPI - BS in Electrical Engineering
> Bachelor of Science, Electrical Engineering at Rensselaer Polytechnic Institute
>
> 2024/8 - 2027/8 | Troy, NY
- [Relevant coursework, projects, or achievements]
- [Relevant coursework, projects, or achievements]
## Internships
### [Internship Title] at [Company Name]
[Start Date] - [End Date] | [Location]
- [Key responsibility or achievement]
- [Key responsibility or achievement]
- [Key responsibility or achievement]
## Publications
### [Publication Title]
Author 1, Author 2, Author 3, and Author 4
{{< admonition type=abstract title="Abstract" open=false >}}
A **Abstract** banner
{{< /admonition >}}
### [Publication Title]
Author 1, Author 2, Author 3, and Author 4
{{< admonition type=abstract title="Abstract" open=false >}}
A **Abstract** banner
{{< /admonition >}}
## Projects
### [Project Name]
> [Brief description of the project and your role]
- [Key achievement or contribution]
- [Key achievement or contribution]
### [Project Name]
> [Brief description of the project and your role]
- [Key achievement or contribution]
- [Key achievement or contribution]
## Certifications
- [Certification Name] by [Issuing Organization] ([Issue Date])
- [Certification Name] by [Issuing Organization] ([Issue Date])
## Languages
- Chinese: Native
- English: Second Language - TOEFL 92
## Skills
- Proficient on Git Repository Management
- Proficient in Python, LaTeX
- Proficient in Excel, Word, PPT
- [Skill 4]
- [Skill 5]
## Interests
- [Interest 1]
- [Interest 2]
- [Interest 3]

View File

@@ -0,0 +1,34 @@
---
title: 友情链接
subtitle:
layout: friends
date: 2024-03-12T17:16:13-04:00
description: "James 的小伙伴们"
keywords: ["友链"]
comment: false
---
<!-- 将 `friends.yml` 放在 `yourProject/data/` 目录下,网页会自动加载哦~ -->
---
<!-- 你还可以在下方添加此页面的其他内容 -->
## 我的信息
```yaml
- nickname: James
avatar: https://www.jamesflare.com/site-logo.avif
url: https://jamesflare.com/
description: FlareBlog
```
## 友链申请
{{< admonition info "温馨提示" true >}}
1. 想要交换友链的小伙伴,请按上方格式留言哦~
2. 如果友链失效、停止维护或出现不当内容,可能会被悄悄移除呢!
3. 希望各位小伙伴能够尊重他人的劳动成果,转载文章时注明出处,让我们一起维护一个良好的博客圈环境~对于那些恶意行为的网站,就不要来申请友链啦!
{{< /admonition >}}

View File

@@ -21,7 +21,7 @@ tags:
- LLM
- 基准测试
categories:
-
-
- 编程语言
- 大语言模型
hiddenFromHomePage: false

View File

@@ -0,0 +1,247 @@
---
slug: "gravatar-cloudflare-workers"
title: "使用 CloudFlare Workers 反向代理"
subtitle: ""
date: 2023-01-15T21:31:42+08:00
draft: false
author:
name: James
link: https://www.jamesflare.com
email:
avatar: /site-logo.avif
description: "Gravatar 的头像服务在中国大陆不稳定。除了使用一些公开镜像,我们还能自行建立反代。不过如果要自己建立反代,就需要服务器,这可能需要额外的成本,更重要的一个问题是,一般人的服务器只能在一个机房,所以地区之间的速度差异会很大,而不像 Gravatar 在全球都有 CDN。"
keywords: ["Gravatar","CloudFlare Workers"]
license: ""
comment: true
weight: 0
tags:
- CloudFlare
- JavaScript
categories:
- 教程
hiddenFromHomePage: false
hiddenFromSearch: false
summary: "Gravatar 的头像服务在中国大陆不稳定。除了使用一些公开镜像,我们还能自行建立反代。不过如果要自己建立反代,就需要服务器,这可能需要额外的成本,更重要的一个问题是,一般人的服务器只能在一个机房,所以地区之间的速度差异会很大,而不像 Gravatar 在全球都有 CDN。"
resources:
- name: featured-image
src: featured-image.jpg
- name: featured-image-preview
src: featured-image-preview.jpg
toc:
enable: true
math:
enable: false
lightgallery: true
seo:
images: []
repost:
enable: true
url: ""
# See details front matter: https://fixit.lruihao.cn/theme-documentation-content/#front-matter
---
## Introduction
在中国大陆 Gravatar 的头像服务一直处于不稳定,不可用的状态。除了使用一些公开服务,我们还能自行建立反代。
不过如果要自己建立反代,就需要服务器,这可能需要额外的成本,更重要的一个问题是,一般人的服务器只能在一个机房,所以地区之间的速度差异会很大,而不像 Gravatar 在全球都有 CDN。
我希望全球的用户加载速度都很快,退一万步说,用户挂的代理也可能遍布全球,是吧。
{{< image src="network-map.svg" width="750px" caption="CloudFlare Network Map" >}}
而 [CloudFlare Workers](https://developers.cloudflare.com/workers/learning/how-workers-works/) 直接可以在他们就近的数据中心处理,不比随便整一个服务器快多了。
## Pricing
那么Workers 的[价格](https://developers.cloudflare.com/workers/platform/pricing)如何?
| | Free plan | Paid Plan - Bundled | Paid plan - Unbound |
| -------- | -------------------------- | ---------------------------------- | ------------------------------------------------- |
| Requests | 100,000 / day | 10 million / month, +$0.50/million | 1 million / month, + $0.15/million |
| Duration | 10ms CPU time / invocation | 50 ms CPU time / invocation | 400,000 GB-s, + $12.50/million GB-s |
**答**,一般免费计划完全够用。
每天有 10 万次免费请求基本上是用不完的。10ms 的 CPU 时间,这也是足够的,我们的代码估计也就 1ms 的时间。
退一万步,就算是要付钱,由于不需要 Workers KVQueuesDurable Objects 等产品,只要单纯的请求数,也就是 Paid plan - Unbound。100 万次也就 $0.15,一元人民币的样子,巨便宜好吧。
### Calculation
图片算 30KB 一张的话100 万张也就是 28.6G 流量,算上 VPS 可能是双向计算流量的,那就是 57.2G 的样子。
57G/元的价格放到 VPS 领域,可以说是中等水平,不算便宜,毕竟还有无限流量,俄罗斯 VPS 什么的不是?但是考虑到线路的水平,和全球的数据中心,这直接杀爆了。
CloudFlare 的速度也不是什么俄罗斯小鸡可以比的,如果是 CN2 这样的高级线路,那这个价格肯定是买不到的。
## Workers JS
使用方法很简单,基本上就是 JavaScript。
我们小小构造一下,
```JavaScript
addEventListener(
"fetch", event => {
let url = new URL(event.request.url);
url.hostname = "www.gravatar.com";
url.protocol = "https";
let request = new Request(url, event.request);
event.respondWith(
fetch(request)
)
}
)
```
逻辑说白了就是返回以 https 请求收到的请求 URL不过把请求时候发的`hostname`改成`www.gravatar.com`
### Deploy
使用方法也很简单,在 CloudFlare 的 Workers 面板新建一个 Service。
把上面这个抄到里面,并且 Deploy。
## Custom Domains
默认会给你一个 workers.dev 的三级域名,如果你想用也完全没有问题,但是我希望设置一个自己的域名。
我们进入 Service到 Trigger点 Add Custom Domains输入你需要的域名。
比如我选择 gravatar.jamesflare.com那就输入`gravatar.jamesflare.com`
## Testing
那我们测试一下,看看能不能用,这里用我头像测试`/avatar/75cea16f157b9c5da5435379ab6cf294?s=32&d=`
构造一下,
![](https://gravatar.jamesflare.com/avatar/75cea16f157b9c5da5435379ab6cf294?s=32&d=) https://gravatar.jamesflare.com/avatar/75cea16f157b9c5da5435379ab6cf294?s=32&d=
可以看到,是没问题的。
## Use in Hugo
这属于衍生部分,其实过程相对曲折,而且不同主题可能还不一样,所以我希望记录一下思路而不是直接说结果,毕竟方案可能不通用。
我用的主题是 FixIt约等于 LoveIt。
### Find Template File
通过查找,发现负责文章作者头像的模板位于`/FixIt/layouts/partials/single/post-author.html`
代码如下,
```go-html-template
{{- $params := .Scratch.Get "params" -}}
{{- $author := .Site.Author | merge (dict "name" "Anonymous" "link" (echoParam $params "authorlink") "email" (echoParam $params "authoremail")) -}}
{{- $avatar := .Site.Params.home.profile.avatarURL -}}
{{- if isset $params "author" | and (ne $params.author .Site.Author.name) -}}
{{- $author = dict "name" $params.author | merge $author -}}
{{- $author = dict "link" (echoParam $params "authorlink") | merge $author -}}
{{- $author = dict "email" (echoParam $params "authoremail") | merge $author -}}
{{- $avatar = "" -}}
{{- end -}}
{{- if (not $avatar | or $params.gravatarForce) | and $author.email -}}
{{- $gravatar := .Site.Params.gravatar -}}
{{- with $gravatar -}}
{{- $avatar = printf "https://%v/avatar/%v?s=32&d=%v"
(path.Clean .Host | default "www.gravatar.com")
(md5 $author.email)
(.Style | default "")
-}}
{{- end -}}
{{- end -}}
<span class="post-author">
{{- $content := $author.name -}}
{{- $icon := dict "Class" "fa-solid fa-user-circle" -}}
{{- if $avatar -}}
{{- $content = printf "%v&nbsp;%v" (dict "Src" $avatar "Class" "avatar" "Alt" $author.name | partial "plugin/image.html") $author.name -}}
{{- $icon = "" -}}
{{- end -}}
{{- if $author.link -}}
{{- $options := dict "Class" "author" "Destination" $author.link "Title" (T "single.author") "Rel" "author" "Icon" $icon "Content" $content -}}
{{- partial "plugin/link.html" $options -}}
{{- else -}}
<span class="author">
{{- with $icon -}}
{{ . | partial "plugin/icon.html" }}
{{ end -}}
{{- $content | safeHTML -}}
</span>
{{- end -}}
</span>
{{- /* EOF */ -}}
```
### Find Code Section
如下片段是负责头像的
```go-html-template
{{- if (not $avatar | or $params.gravatarForce) | and $author.email -}}
{{- $gravatar := .Site.Params.gravatar -}}
{{- with $gravatar -}}
{{- $avatar = printf "https://%v/avatar/%v?s=32&d=%v"
(path.Clean .Host | default "www.gravatar.com")
(md5 $author.email)
(.Style | default "")
-}}
{{- end -}}
{{- end -}}
```
可以看见它判定配置文件 params 项下 gravatar 子项Host 项下的值。
如果 Host 项是空,则默认`www.gravatar.com`。
那么很简单,有两种思路,一个是修改这个 HTML 模板本身,还有一个思路是修改配置文件的值。
### Make .toml Config
我选第二种。
我的配置文件是 .toml 格式的,稍微构造一下。
```toml
[params]
[params.gravatar]
host = "gravatar.jamesflare.com"
```
### Preview in Browser
重新生成一下站点,这里我只要预览即可,
```bash
hugo server -D -e production --disableFastRender
```
打开浏览器访问`http://localhost:1313/`,查看一下 HTML 源码有关部分。
```html
data-src="https://gravatar.jamesflare.com/avatar/75cea16f157b9c5da5435379ab6cf294?s=32&amp;d="
data-srcset="https://gravatar.jamesflare.com/avatar/75cea16f157b9c5da5435379ab6cf294?s=32&amp;d=, https://gravatar.jamesflare.com/avatar/75cea16f157b9c5da5435379ab6cf294?s=32&amp;d= 1.5x, https://gravatar.jamesflare.com/avatar/75cea16f157b9c5da5435379ab6cf294?s=32&amp;d= 2x"
```
可以看到已经改过来了,通过浏览器开发工具 Sources 栏也可以验证。
### Others
小插曲FixIt 的配置文件原来已经有这项了,小丑原来是我自己,不过全网都搜不到,哭了。
```toml
[params]
[params.gravatar]
# Gravatar host, default: "www.gravatar.com"
host = "www.gravatar.com" # ["cn.gravatar.com", "gravatar.loli.net", ...]
style = "" # ["", "mp", "identicon", "monsterid", "wavatar", "retro", "blank", "robohash"]
```

View File

@@ -0,0 +1,500 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 26.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 1713 848" style="enable-background:new 0 0 1713 848;" xml:space="preserve">
<style type="text/css">
.st0{fill:#B1B1BA;}
.st1{fill:#F38020;stroke:#000000;stroke-miterlimit:10;}
.st2{fill:#F38020;stroke:#000000;stroke-width:1;stroke-miterlimit:10.0002;}
</style>
<path class="st0" d="M1669.1,756.9l-0.8,2.6l5.6-2.5l-0.5,2.6l-2.1,2.6l-4.2,2.9l-7,4.5l-4.6,2.5l-0.6,2.9l-4,0.1l-6.2,2.3l-4.7,4.1
l-8.1,6.2l-6.3,2.8l-4,1.8l-4.5-0.1l-1.5-2.1l-5.1-0.4l1.1-2.3l6.4-4.6l11.3-6.1l4.3-1.1l5.5-2.4l7-3.2l5.6-3.2l5.9-4.6l3.2-1.6
l3.4-3.4l5.8-2.9L1669.1,756.9L1669.1,756.9z M1697.9,726.4l-0.4,6.8l2.9-4.4l1.2,1.8l-2.3,4.9l2.9,2.1l3.2,0.5l4.6-2.5l2.1,0.8
l-5.1,5.7l-4.2,3.8l-3.8-0.2l-2.8,2l-1.5,2.7l-1.6,1.2l-4.5,3.4l-5.9,4.2l-5.9,2.5l0.4-1.6l-1.4-0.9l6.9-5.1l0.8-3.5l-3.7-2.5
l1.7-2.4l5.3-2.2l4.2-5l2.4-4.1l0.6-4.4l0.9-1.1l-0.9-2.7l-0.8-5.7l0.4-4.6l2.3-0.5l0.8,3.6l3.1,1.7L1697.9,726.4L1697.9,726.4z
M1577.3,583.8l0.5-2.3l0.1-3.6l-1.6-3.2l0.1-2.7l-1.3-0.8l0.1-3.9l-1.2-3.2l-2.3,2.4l-0.4,1.8l-1.5,3.5l-1.8,3.4l0.6,2.1l-1.2,1.3
l-1.5,4.8l0.1,3.7l-0.7,1.8l0.3,3.1l-2.6,5l-1.3,3.5l-1.7,2.9l-1.7,3.4l-4.1,2.1l-4.9-2.1l-0.5-2l-2.5-1.6h-1.6l-3.3-3.8l-2.5-2.2
l-3.9-2l-3.9-3.5l-0.1-1.8l2.5-3.1l2.1-3.2l-0.3-2.6l1.9-0.2l2.5-2.5l2-3.4l-2.2-3.2l-1.5,1.2l-2-0.5l-3.5,1.8l-3.2-2l-1.7,0.7
l-4.5-1.6l-2.7-2.7l-3.5-1.5l-3.1,0.9l3.9,2.1l-0.3,3.2l-4.8,1.2l-2.8-0.7l-3.6,2.2l-2.9,3.7l0.6,1.5l-2.7,1.7l-3.4,5.1l0.6,3.5
l-3.4-0.6h-3.5l-2.5-3.8l-3.7-2.9l-2.8,0.8l-2.6,0.9l-0.3,1.6l-2.4-0.7l-0.3,1.8l-3,1.1l-1.7,2.5l-3.5,3.1l-1.4,4.8l-2.3-1.3
l-2.2,3.1l1.5,3l-2.6,1.2l-1.4-5.5l-4.8,5.4l-0.8,3.5l-0.7,2.5l-3.8,3.3l-2,3.4l-3.5,2.8l-6.1,1.9l-3.1-0.2l-1.5,0.6l-1.1,1.4
l-3.5,0.7l-4.7,2.4l-1.4-0.8l-2.6,0.5l-4.6,2.3l-3.2,2.7l-4.8,2.1l-3.1,4.4l0.4-4.8l-3.1,4.6l-0.1,3.7l-1.3,3.2l-1.5,1.5l-1.3,3.7
l0.9,1.9l0.1,2l1.6,5l-0.7,3.3l-1-2.5l-2.3-1.8l0.4,5.9l-1.7-2.8l0.1,2.8l1.8,5l-0.6,5l1.7,2.5l-0.4,1.9l0.9,4.1l-1.3,3.6l-0.3,3.6
l0.7,6.5l-0.7,3.7l-2.2,4.4l-0.6,2.3l-1.5,1.5l-2.9,0.8l-1.5,3.7l2.4,1.2l4,4.1h3.6l3.8,0.3l3.3-2.1l3.4-1.8l1.4,0.3l4.5-3.4
l3.8-0.3l4.1-0.7l4.2,1.2l3.6-0.6l4.6-0.2l3-2.6l2.3-3.3l5.2-1.5l6.9-3.2l5,0.4l6.9-2.1l7.8-2.3l9.8-0.6l4,3.1l3.7,0.2l5.3,3.8
l-1.6,1.5l1.8,2.4l1.3,4.6l-1.6,3.4l2.9,2.6l4.3-5.1l4.3-2.1l6.7-5.5l-1.6,4.7l-3.4,3.2l-2.5,3.7l-4.4,3.5l5.2-1.2l4.7-4.4l-0.9,4.8
l-3.2,3.1l4.7,0.8l1.3,2.6l-0.4,3.3l-1.5,4.9l1.4,4l4,1.9l2.8,0.4l2.4,1l3.5,1.8l7.2-4.7l3.5-1.2l-2.7,3.4l2.6,1.1l2.7,2.8l4.7-2.7
l3.8-2.5l6.3-2.7l6-0.2l4.2-2.3l0.9-2l3-4.5l3.9-4.8l3.6-3.2l4.4-5.6l3.3-3.1l4.4-5l5.4-3.1l5-5.8l3.1-4.5l1.4-3.6l3.8-5.7l2.1-2.9
l2.5-5.7l-0.7-5.4l1.7-3.9l1.1-3.7V657l-2.8-5.1l-1.9-2.5l-2.9-3.9l0.7-6.7l-1.5,1l-1.6-2.8l-2.5,1.4l-0.6-6.9l-2.2-4l1-1.5
l-3.1-2.8l-3.2-3l-5.3-3.3l-0.9-4.3l1.3-3.3l-0.4-5.5l-1.3-0.7l-0.2-3.2l-0.2-5.5l1.1-2.8l-2.3-2.5l-1.4-2.7l-3.9,2.4L1577.3,583.8
L1577.3,583.8z M747.8,155.8l0.7,4.3l-3.9,5.4l-8.7,3.6l-6.7-0.9l4.2-6.4l-2.1-6.1l6.7-4.7l3.7-2.8l3.9-0.3l4.9,3.7L747.8,155.8
L747.8,155.8z M1383.4,380.5l-4.9-2l-1-5.5l2.2-2.8l5.8-1.8l3.2,0.1l1.6,2.5l-2,2.8l-0.6,3.6L1383.4,380.5L1383.4,380.5z
M1450,561.5l-7-4.4l5.3-1.3l2.8,2l1.8,1.9l-0.5,1.7L1450,561.5L1450,561.5z M1476.9,552.8l0.8-1.5l4.9-1.4l4-0.2l1.8-0.8l2,0.8
l-2.2,1.7l-6,2.8l-4.9,1.8l-4,4.8l-5,1.4l-0.6-0.8l0.7-2.1l2.8-3.9L1476.9,552.8L1476.9,552.8z M1439.6,549.5l3.5-0.6l1.2,2.8
l-6.6,1.2l-3.9,0.9l-3-0.1l2.2-3.6l3.1-0.1l1.6-2.2L1439.6,549.5L1439.6,549.5z M1465.8,547.8l-1.1,3.5l-8.6,1.8l-7.4-0.8l0.2-2.3
l4.5-1.3l3.4,1.9l3.8-0.5L1465.8,547.8L1465.8,547.8z M1397,540l1.3-2.6l10.3,3.1l1.8,4.1l8.3,1.1l6.6,3.8l-6.6,2.4l-5.9-2.5
l-5.1,0.2l-5.8-0.5l-5.2-1.2l-6.3-2.4l-4.1-0.6l-2.4,0.8l-10-2.6l-0.8-2.8l-5.1-0.4l4.1-6.1l6.8,0.4l4.4,2.4l2.3,0.5l0.7,2.3
L1397,540L1397,540z M1529.7,540.1l-0.3-4.8l1.2-2.2l1.3-2.2l1.2,1.9l-0.2,3L1529.7,540.1z M1491.9,518.3l-2.2,2.1l-3.9-1.2l-1-2.7
l5.7-0.3L1491.9,518.3L1491.9,518.3z M1511.9,520.8l-4.7-2.6l-4.6-0.5l-3.2,0.4l-3.9-0.2l1.5-3.5l6.9-0.3l6.1,1.8L1511.9,520.8
L1511.9,520.8z M1476.6,493.5l-4.3,1.3l-5.4-1.3l-9.3,0.3l-4.9,1l-0.9,4.8l5,5.6l3.1-2.9l10.5-2.1l-0.5,2.9l-2.4-0.9l-2.6,3.7
l-5,2.5l5.1,8.1l-1.1,2.2l4.7,7.4l-0.3,4.1l-3.1,1.9l-2.1-2.2l3-5.2l-5.6,2.4l-1.3-1.7l0.8-2.5l-3.9-3.7l0.7-6.2l-3.8,1.9l0.2,7.4
l-0.3,9.1l-3.6,1l-2.3-1.9l1.9-5.9l-0.6-6.1l-2.3-0.1l-1.6-4.3l2.4-4.2l0.9-5l2.9-9.6l1.2-2.6l4.7-4.8l4.4,1.9l7.1,0.9l6.5-0.3
l5.5-4.6l1,1.4L1476.6,493.5L1476.6,493.5z M1500.2,494.6l-2.9-0.6l-0.9,3.9l2.3,3.3l-1.6,0.8l-2.2-4l-1.7-8.2l1-5.1l1.8-2.3
l0.5,3.5l3.3,0.6l0.6,2.6L1500.2,494.6L1500.2,494.6z M1393.4,483.5l4.1,2.2l4.4-1.2l0.9-5.4l2.4-1.2l6.7-1.4l3.8-5l2.6-4l2.1-2.4
l4.6-3.5l4.1-4.4l2.5-5h2.3l3.1,3.2l0.4,2.8l3.8,1.7l4.8,2l-0.3,2.4l-3.8,0.4l1.2,3.1l-4,2.1l-3,5.8l4.3,6l-0.9,2.9l6.5,5.9
l-6.7,0.8l-1.8,4.3l0.2,5.8l-5.5,4.3l-0.3,6.4l-2.5,9.7l-0.8-2.3l-6.5,2.9l-2-3.9l-4-0.4l-2.8-2l-6.7,2.3l-2-3.1l-3.6,0.4l-4.6-0.8
l-0.7-8.5l-2.8-1.8l-2.6-5.4l-0.8-5.6l0.6-5.9L1393.4,483.5L1393.4,483.5z M1364.6,533.6l-4.5-5.3l-7-5.2l-2.2-3.8l-4.1-5.2
l-2.7-4.8l-4.1-8.9l-4.9-5.3l-1.7-5.5l-2.2-4.9l-5.1-4l-3.1-5.5l-4.4-3.6l-6.1-7l-0.6-3.2l3.6,0.3l8.8,1.2l5.2,6.2l4.5,4.3l3.2,2.7
l5.5,6.8l5.7,0.1l4.8,4.4l3.3,5.3l4.3,2.9l-2.3,5.2l3.2,2.2l2,0.2l0.9,4.4l1.9,3.6l4.1,0.5l2.6,4l-1.7,8l-0.7,9.8L1364.6,533.6
L1364.6,533.6z M1227.9,458.3l-2.8-5.1l-1.4-9.1l1.9-10.3l4.1,3.5l2.9,4.5l3,6.6l-0.6,6.6l-2.3,1.8L1227.9,458.3L1227.9,458.3z
M1005.4,60.1L992,59.4l-2.2-2.3l-7.9-1.4l-1.9-2.8l3.4-1.1l-1.6-2.8l5.4-4.3l-3.9-0.7l6.6-4.4l-2.5-2.2l6.8-2.7l10.1-3.1l11.7-0.9
l4.9-1.8l6.6-0.6l4.2,1.9l-1.3,1.5l-11.3,2.4l-9.8,2.4l-8.6,4.7l-2.8,5l-3.3,4.9l3.1,4.3l9.9,4.3L1005.4,60.1L1005.4,60.1z
M1487.8,185.7l-8.9-2l3.7,9l9.5,6.3l3,4.4l-6.5-3.8l0.1,4.8l-4.6-5.2l-3.8-6l-5.5-6.8l-2.4-4.6l-6.4-8.3l-7.8-6l-6.8-8.3l1.9-2.8
l-4.4-2.8l1.3-0.8l4.9,4l6.8,5.8l5.1,6l7.2,6.2L1487.8,185.7L1487.8,185.7z M834,150.2l-5.1-3.4l-0.9-2.5l6.7-2l1.7,3L834,150.2z
M758.5,133.7l4.7-0.8h5l-1.3,4.9l-4.2,5.3l4.8,0.4l0.4,0.6l4.1,7.1l3.2,1l2.9,6.9l1.3,2.3l5.8,1.2l-0.5,3.9l-2.4,1.8l1.9,3.1
l-4.3,3.3l-6.5-0.1l-8.3,1.7l-2.2-1.2l-3.3,2.9l-4.5-0.7l-3.5,2.3l-2.5-1.2l7.3-6.5l4.3-1.3l-7.5-1l-1.3-2.4l5.1-1.9l-2.6-3.3l1-4
l7.1,0.6l0.8-3.5l-3.1-3.8l-5.8-1.1l-1-1.6l1.7-2.7l-1.4-1.6l-2.6,2.8l-0.1-5.8l-2.2-3l1.9-6.1l3.7-4.8l3.6,0.4l5.5-0.5L758.5,133.7
L758.5,133.7z M827.9,238.2l-0.4,8.4l-2.4-0.4l-2,2.1l-2.1-1.7l-0.4-7.6l-1.3-3.6l2.8,0.3l2.5-1.9L827.9,238.2L827.9,238.2z
M866.7,23.9l-7.6,2l-6.7-1.1l2.2-1.2l-2.6-1.5l7.2-0.9l1.9,1.7L866.7,23.9L866.7,23.9z M853.8,18.9l-8.5,1.8l-1.2,3.4l-3,0.9
l-0.9,3.9l-4.4,0.2l-8.4-2.9l3-1.7l-5.7-1.4l-7.6-3.8l-3.2-3.5l9.3-1.6l2.2,1.5h5l1-1.5l5.1-0.2l4.8,1.6L853.8,18.9L853.8,18.9z
M872.8,14l-4.3,2.4l-10.1,0.5l-10.6-0.7l-0.9-1.3h-5.1l-4.3-2l10.4-1.2l5.3,1l3.2-1.2l9.1,1L872.8,14L872.8,14z M824.7,232.7
l-2.4-1.2l-1.4-4.2l1-2.3l3.2-2.3l1.1,5.2L824.7,232.7L824.7,232.7z M381.9,369.7l4.4,0.1l3.1,1.6l1.4-0.1l0.8,2.2l3-0.1l-0.3,1.9
l2.4,0.2l2.5,2.3l-2.3,2.6l-2.5-1.3l-2.6,0.2L390,379l-1.1,1.2l-2.2,0.4l-0.6-1.6l-2,0.9l-2.6,4.4l-1.4-1v-1.8l-3.6-1.1l-2.7,0.4
l-3.3-0.4l-2.7,1.1l-2.8-1.9l0.7-2.1l5,0.9l4.2,0.5l2.1-1.4l-2.2-2.8l0.3-2.4l-3.4-1l1.4-1.7l3.4,0.2l4.6,1L381.9,369.7L381.9,369.7
z M714.8,86.3l4.4,3.8l-6.1,4.2l-12.9,3.9l-3.9,1l-5.6-0.8L679,96.6l4.6-2.5l-8.8-2.7l7.8-1.1l0.1-1.6l-8.7-1.3l3.6-3.7l6.5-0.8
l5.9,3.8l6.9-3l5.1,1.5l7.3-2.9l6.9,0.4L714.8,86.3L714.8,86.3z M349.4,383.6l-3-1l-2.9-2.3l0.8-1.5l2.4-0.4l1.2,0.2l3.7,0.6
l2.7,1.5l0.8,1.8l-3.9,0.1L349.4,383.6L349.4,383.6z M1056.7,590.2l1.3,2.9l-0.8,3.1l-1.1,1.9l-1.6-3.8l-1.2,1.9l0.8,4.7l-0.7,2.7
l-1.6,1.5l-0.8,5.4l-2.7,7.4l-3.3,8.8l-4.3,12l-2.8,8.9l-3.1,7.4l-4.6,1.5l-5,2.7l-3-1.7l-4.2-2.3l-1.2-3.3l0.1-5.7l-1.6-5l-0.2-4.6
l1.3-4.6l2.6-1.1l0.2-2.1l2.9-4.8l0.8-4.1l-1.1-3l-0.8-4l-0.1-5.9l2.2-3.5l1-4.1l2.8-0.2l3.1-1.3l2.2-1.2h2.4l3.4-3.7l4.8-3.9
l1.8-3.2l-0.6-2.7l2.3,0.8l3.3-4.5l0.3-3.8l2-2.8l1.8,2.7l1.4,2.7l1.1,4.2L1056.7,590.2L1056.7,590.2z M341.4,353.8l5.2-0.8l1.8,1.5
l4.2,4l3,2.8h1.9l3.1,1.3l-0.6,1.7l4,0.3l3.9,2.6l-0.8,1.5l-3.8,0.8l-3.7,0.3l-3.8-0.5l-7.9,0.6l4.1-3.5l-2.1-1.7l-3.5-0.4l-1.7-1.8
l-0.8-3.6l-3.2,0.2l-4.9-1.7l-1.5-1.3l-7-1l-1.8-1.3l2.3-1.6l-5.4-0.3l-4.4,3.3l-2.3,0.1l-0.9,1.6l-2.9,0.7l-2.2-0.6l3.1-2l1.5-2.3
l2.7-1.4l3-1.3l4.2-0.6l1.4-0.7l4.7,0.5l4.3,0.1l4.9,2.1L341.4,353.8L341.4,353.8z M378.5,422.8l-3.3,0.8l1.7,2.9l-0.3,3.3l-2.7,3.7
l1.9,5l2.4-0.4l1.5-4.6l-1.6-2.2v-4.8l7.1-2.6l-0.6-3l2.1-2l1.7,4.5l3.9,0.1l3.5,3.5l0.1,2.1l5,0.1l6-0.7l3.1,2.9l4.2,0.7l3.2-1.9
l0.2-1.6l6.9-0.4l6.7-0.1l-4.8,1.9l1.8,3l4.4,0.4l4.1,3.2l0.7,5.1l2.9-0.2l2.2,1.5l3.6,2.4l3.3,4.1l0.1,3.3l2.1,0.1l2.9,3.1l2.1,2.3
l6.7,1.3l0.6-1.1l4.6-0.5l6,1.7l1.9,0.7l4.1,1.5l5.8,5.4l0.9,2.5l1.9-0.3l1.3,3.5l3,11.2l3,1l0.1,4.4l-4.2,5.2l1.7,2l9.9,1l0.3,6.3
l4.2-4.1l7.1,2.3l9.4,3.8l2.7,3.8l-0.8,3.5l6.5-2l10.9,3.4l8.4-0.3l8.4,5.3l7.3,7.1l4.3,1.9l4.8,0.2l2.1,2l2,8.1l1,3.9l-2,10.5
l-2.7,4.2l-7.7,8.8l-3.3,7.2l-3.9,5.5l-1.4,0.1l-1.4,4.7l1,11.9l-1.1,9.9l-0.3,4.1l-1.6,2.6l-0.5,8.5l-5.1,8.3l-0.6,6.5l-4.2,2.8
l-1.1,3.8h-5.9l-8.5,2.4l-3.6,2.9l-6,1.8l-6,5.1l-4.1,6.3l-0.3,4.8l1.3,3.5l-0.3,6.4l-0.8,3.1l-3.4,3.5l-4.5,11.2l-3.9,5l-3.2,3
l-1.5,6l-2.9,3.7l-2.6,4.2l-3.2,1.4l-2.4,1.3h-6.4l-8.8-2.7l-3.3-3.3l0.3,3.3l7.8,5.5l0.1,4.5l3.9,2.8l0.3,3.2l-3.3,8.3l-6.9,3.4
l-10.2,1.3l-5.8-0.6l2,3.8l0.1,4.8l1.8,3.1l-2.5,2.2l-5,0.9l-5.6-2.3l-1.5,1.6l2.5,6.2l4,1.9l2.2-2l2.5,3.2l-4.1,1.9l-2.9,3.9
l1.2,6.1l-0.2,3.3l-4.7,0.1l-2.9,3.1l0.1,4.7l6.4,4.5l5.2,1.3l0.2,5.6l-4.7,3.5l-0.5,7.2l-3.5,2.5l-0.9,2.9l4.1,6.3l4.7,3.6
l-2.2-0.4h-4.2l-1.7,1.5l-3.4,2.2l3.1,4.3l-0.2-4.1l3.3-2.5l3.7,0.7l2.3,2.8l4.3,4.6l7.7,3.6l7.3,1.5l-0.9,3l-4.3,0.3l-2.7-1.7
l-0.4,2l-3.2,1.8l-2.3-0.1l-3-0.5l-4.3-1.8l-5.3-0.9l-7.5-3.4l-6.3-3.2l-9.7-6.8l-2.9-3.5l-3.3-3.8l-0.2-3.6l-4.2-4.1l-5-10.6
l-0.2-6l3.4-4.8l-8.2-1.8l2.7-5.5l-2-10.2l-1.8-5.4l-1.5-8.8l-1.9-11.6l1.1-4.3l-3.3-6.3l-2.4-7.3l2.1-0.2l0.6-10.5l1.2-10.2
l0.1-9.5l-3.2-9.5l0.5-5.3l-2.1-7.8l1.9-7.8l-0.9-12.3v-13.2l0.1-14.2l-1.5-10.4l-2.1-9l-5.9-3.7l-0.7-2.6l-11.6-6.4l-10.7-6.9
l-4.6-3.9l-2.8-5.3l0.8-1.8l-5.4-8.4l-6.2-11.7l-6-12.7l-2.4-2.9l-2-4.7l-4.5-4.1l-4.1-2.6l1.7-2.8l-3-6.1l1.6-4.5l4.4-4l2.9-4.7
l-1.3-2.8l-2.1,2.9l-3.4-2.7l1.1-1.8l-1-5.8l1.9-1l1-3.9l2.2-4.1l-0.4-2.6l3.1-1.4l3.9-2.5l-0.8-2l2.1-0.5l-0.2-3.2l1.4-2.3l2.8-0.4
l2.5-4l2.2-3.3l-2-1.5l1.2-3.7l-1.1-5.9l1.2-1.6l-0.6-5.4l-2.2-3.4l0.9-3.1l1.8,0.5l1.1-1.9l-1.1-3.8l0.7-0.9l2.9,0.2l4.4-4.4
l2.4-0.7l0.1-2.1l1.4-5.4l3.3-3l3.6-0.1l0.5-1.3l4.3,0.5l4.6-3.2l2.3-1.4l2.9-3.1l2,0.4l1.3,1.7l-1.2,2.1L378.5,422.8L378.5,422.8z
M459.5,200.8l3.4,0.8l4.7-0.1l-3.3,2.5l-1.9,0.4l-5.6-2.6l-0.5-2.1l2.5-1.9L459.5,200.8L459.5,200.8z M473.9,184.9l-2.5,0.1
l-5.7-1.9l-3.5-2.9l1.9-0.6l5.9,1.6l4.1,2.6L473.9,184.9L473.9,184.9z M168.6,188.6l-3,0.9l-6.3-2.8v-2.2l-2.9-2.2l0.4-1.8l-4.3-1.1
l0.6-3.3l1.4-1.5l4.1,1.4l2.4,0.9l4.1,0.7l0.1,2.1l0.4,2.9l3.2,2.6L168.6,188.6L168.6,188.6z M504.7,175.1l-4.9,5.4l3.8-2l2.9,1.3
l-2.4,2.1l3.9,1.7l2.7-1.5l4.3,1.9l-2.8,4.6l3.7-1.1l-0.3,3.3l0.5,3.9l-3.5,5.5l-2.3,0.2l-3-1.2l2.5-5.1l-1.2-0.8l-7.3,5.4l-2.9-0.2
l4.4-2.9l-4.4-1.5l-5.4,0.3l-9.6-0.1l-0.2-1.9l3.8-2.2l-1.6-1.7l5.3-3.7l8.1-9.8l4.2-3.5l4.9-2.2l2.1,0.3l-1.4,1.7L504.7,175.1
L504.7,175.1z M147.9,153.9l1.6,0.8l4.9-0.5l-7.1,6.9l0.2,4.9h-1.9l-0.7-2.8l0.6-2.8l-0.9-1.9l1.4-2.6L147.9,153.9L147.9,153.9z
M428.8,106.9l-3.5,3l-1.7-0.5l-0.1-1.7l0.4-0.4l2.8-1.7l1.7,0.1L428.8,106.9L428.8,106.9z M419.2,103.7l-7.1,3.2l-3-0.2v-1.5
l4.9-2.7l6,0.1L419.2,103.7z M416.1,87.1l-0.9,2.5l2.8-0.9l1.5,1.5l3.4,1.9l3.7,1.7l-1.3,2.7l3.4-0.4l1.9,1.8l-4.9,1.8l-5.9-1.3
l-0.8-2.6l-6.2,3l-8.2,3l0.8-3.4l-6.3,0.6l5.7-2.8l3.6-4.4l5-5.2L416.1,87.1L416.1,87.1z M460.7,78.9l-4.9,0.2l0.7-2.6l3.8-3.1
l4.2-0.7l2.3,1.5l-1.4,2.3l-1,0.7L460.7,78.9z M386.9,68.2l-4.2,1.9l-4.1-1.6l-3.8,0.6l-3.5-2.4l5-1.7l4.9-2.3l3,1.5l1.6,1l0.3,1
L386.9,68.2L386.9,68.2z M333.8,47.2l-4.7,2.4l10.4-1.5l2.6,2.6l7.3-2.7l1.7,1.7l-2.2,5.1l4.3-2.1l2.8-5.3l4.2-0.8l3,0.9l2.2,2
l-2.7,5.1l-2.4,3.6l4.2,2.6l5,2.5l-2.6,2.4l-7,0.4l0.7,2.1l-3.1,1.9l-6.7-0.8l-5.7-1.5l-5,0.4l-9.4,1.8l-11.2,0.8l-7.8,0.5l0.3-2.5
l-4.1-1.5l-4.2,0.6l-0.6-4.2l3.3-0.6l7.1-0.9l5.5,0.3l6.2-1l-6.5-1.2l-9,0.4l-5.6-0.1v-1.9l11.5-2.1l-6.2,0.1l-5.4-1.4l7.8-3.9
l5.1-2l14.1-3.2L333.8,47.2L333.8,47.2z M372.9,45.7l-7,3.4l-2.2-3.6l2.1-0.7l5.4-0.2L372.9,45.7z M480.6,47.3l-0.7,1.4l-8.2-0.2
l-4.8,0.7l-0.9-0.3l-2-2.8l1.7-1.8l2.1-0.3l8.4,0.5C476.2,44.5,480.6,47.3,480.6,47.3z M441.2,47l0.3,3.2l7.1-4.1l11.6-2.1l2.3,5.3
l-3.3,3.4l9-1.5l5.2-2.1l6.8,2.6l3.6,2.5l-1.1,2.3l8.2-1.2l1.9,3.3l8.3,2.1l2.2,2.1l0.8,5l-9,2.5l7.7,3.5l5.9,1.2l3.2,5.1l6.4,0.3
l-3.3,3.9l-10.7,6.5l-4-2.4l-3.8-5.4l-5.8,0.7l-2.3,3.2l2.7,3.3l4.4,2.5l1,1.5v5.6l-3.6,4.1l-4.7-1.5l-8.5-4.6l3.5,4.9l2.8,3.5
l-0.3,2l-10.7-2.3l-7.6-3.3l-3.8-2.8l2.4-1.6l-4.7-2.9l-4.7-2.7l-0.9,1.6l-13,0.9l-2.4-1.9l5.4-4.2l8-0.1l9.2-0.7l-0.2-2l3.2-2.7
l8.6-5.4l0.4-2.4l-0.5-1.9l-4.6-2.6l-7.1-1.8l3.5-1.4l-2-3.3l-3.3-0.3l-2-1.8l-3.2,1.6l-7.9,0.6L434,63.6l-7.3-1.5l-5.9-0.8
l-1.8-1.9l6.1-2.3l-5.6-0.1l3.3-5.2l7.1-4.6l5.8-2.1l11.2-1.3L441.2,47L441.2,47z M391.2,43.6l3.5,1l7.5-0.6l-0.5,1.5l-6,2.4
l3.8,2.2l-5.1,4.7l-8.4,2l-3.4-0.5l-0.9-2l-5.8-3.9l1.7-1.7l7.4,0.7l-0.9-3.4L391.2,43.6L391.2,43.6z M413.5,49l-7.7,3.9l-4.3-0.2
l1.8-4.5l2.5-2.6l4.2-2.1l5.2-1.4l7.8,0.2l6.1,1.2l-10,4.5C419.1,48,413.5,49,413.5,49z M298.8,56.2l-13.4,2.5l0.6-2.3l-5.9-2.7
l4.3-2.2l7.4-3.8l7.6-3.3l0.3-3.1l14-0.8l4.1,1.1l9.4,0.2l1.9,1.5l1.6,2.1l-6.4,1.3l-13.8,3.6l-9.1,3.6
C301.4,53.9,298.8,56.2,298.8,56.2z M422.9,37.9l-4.1,1.9l-5.1-0.4l-3.2-1.3l4.4-2.2l6.9-1.3l1.4,1.7L422.9,37.9L422.9,37.9z
M414.2,29.3l0.2,2.3l-2.8,2.5l-5.8,3.7l-6.8,0.5l-3.2-0.8l3.4-2.9l-6.6,0.4l4.3-3.8l3.8,0.1l7.6-1.6l4.8,0.3L414.2,29.3z
M375.1,31.8l-0.7,1.8l4.3-0.8l3.7,0.2l-2.3,2.4l-5.1,2.3l-13.8,0.8L349,40.7l-5.9,0.1l1.5-1.6l10.6-2.2l-17.8,0.5l-4.1-0.8
l11.6-4.8l5.4-1.4l8.2,1.6l2.8,2.9l6.1,0.4l0.7-4.7l5.7-1.7l3.1,0.5L375.1,31.8L375.1,31.8z M430.3,27.5l2.3,1.6l7.3-0.1l1.4,1.6
l-2.8,1.9l3.1,1.1l1.2,1.1l4.8,0.3l5.1,0.4l7-1.1l8-0.4l5.8,0.3l2.3,1.9l-1,2l-3.5,1.4l-6.7,1l-4.3-0.6l-11.6,0.8l-8,0.1l-5.5-0.6
l-8.5-1.6l1.5-2.8l2.2-2.4l-1.4-2.1l-7-0.6l-2.6-1.5l3.8-2L430.3,27.5L430.3,27.5z M355.3,24.9l-5.8,3.7l-5.2,1.6l-3.8,0.3l-9.8,2.1
l-7,0.7l-3.6-1l11.6-3.7l12.1-3.1l5.5,0.1L355.3,24.9L355.3,24.9z M435.8,25.5l-1.9,0.1l-6.4-0.3l0.6-1.3l7.2,0.1l1.5,0.9
L435.8,25.5L435.8,25.5z M377.4,24.7l-8.6,1.3l-3.3-1.5l5.1-1.5l5.9-0.5l4.1,0.8L377.4,24.7z M385.2,20.5l-5.6,0.9h-6l1-0.7l5.7-1.3
l1.6,0.2L385.2,20.5z M431.6,23l-6.6,1l-1.6-1.1l0.7-1.8l2.1-1.8l4.4,0.1l1.7,0.3l2.3,1.6C434.6,21.3,431.6,23,431.6,23z
M417.9,21.8l-1.1,1.9l-5.2-0.5l-4-1.5l-7.7-0.2l5.3-1.4l-2.8-1.1l2.1-1.7l6.1,0.6l7.4,1.7L417.9,21.8L417.9,21.8z M471.6,15.7
l2.6,1.5l-6.4,1.3l-10.5,3.4l-6.8,0.4l-6.7-0.6l-1.6-1.9l2.1-1.6l4.3-1.2h-6.5l-2-1.5l0.3-1.9l4.9-1.9l4.1-1.3l3.9-0.3L453,9.2
l8.2-0.2l1.6,2.2l4.7,0.9l4.7,0.8L471.6,15.7L471.6,15.7z M550.1,1.9l8.5,0.3l6.7,0.4l5.2,1l-1.1,1.1l-9.7,1.6l-9,0.8L546.8,8h7.4
l-10.3,2.5l-6.8,1.1l-9.3,3.5l-7.9,0.8l-3.2,0.9l-11.1,0.4l4.3,0.6l-3.3,0.8l0.8,2.2l-5,1.6l-6.8,1.3l-3.6,1.9l-6.5,1.4l-0.5,1.1
l6.4-0.2l-1,1.1l-12.6,3l-8.4-1.4l-11.7,0.8l-4.9-0.6l-6.7-0.3l2-2.3l8-1.1l2-3.4l2.5-0.3l7.5,2l-1.7-3l-4.8-0.9l4.9-1.7l7.5-1.1
l2.8-1.6l-3-1.7l1.1-2.2l9.3,0.2l2.2,0.4l7.2-1.5l-7.2-0.5L474,12.1l-4.4-1.5L468.8,9l-2.5-1.2l1.1-1.3l6-0.8l4.1-0.1l7.4-0.6
l6.7-1.4l3.9,0.2l2.3,1l5-2l5.1-0.6l6.4-0.4l10.3-0.2L526,2l10.2-0.6l6.9,0.3L550.1,1.9L550.1,1.9z M687.9,0.4l19.7,2.9L701,4.7
l-12.9,0.2l-18.3,0.4l1.4,0.7l12.1-0.5l9.7,1.4l7-1.2l2.3,1.4l-4.5,2.3l9.2-1.5l16.9-1.5l10,0.8l1.6,1.7l-14.6,2.9l-2.2,1l-11.3,0.7
l8,0.2l-4.9,3.2l-3.6,2.9l-1.1,5.1l3.6,3.2l-5.8,0.1l-6.4,1.6l6.2,2.5l-0.1,4.2l-4.1,0.5l4,4.3l-8.6,0.3l4,2.1l-1.7,1.8l-5.6,0.8
h-5.4l4.1,3.4l-0.5,2.3l-7.2-2.1l-2.4,1.4l5,1.3l4.5,3.1L690,60l-7.3,1l-2.7-2.1l-4.2-3l0.5,3.6l-5.3,2.8l10.6,0.2l5.5,0.3
l-11.9,4.6l-12.1,4.3l-12.5,1.8l-4.6,0.1l-4.8,2.1l-7.4,5.7l-10.2,3.9l-3,0.2l-6.1,1.4l-6.5,1.3l-4.7,3.5l-1.4,3.9l-3.3,3.7
l-8.6,4.6l0.3,4.4l-3.5,4.8l-4.1,5.7l-6.5,0.3l-5-4.7h-8.9l-3.1-3.2l-0.8-5.6l-4.8-7.1l-0.7-3.7l1.5-5l-3.7-5.2l3.4-4l-2-2l7-6.3
l7.1-2l2.6-2.3l2.8-4.2l-5.5,1.9l-2.6,0.8l-4,0.8l-4.2-1.8l1.5-3.6l3-2.8h3.8l7.5,1.4l-5.3-3.4l-2.6-1.8l-4.4,0.8l-2.6-1.3l7-4.8
l-1.4-1.9l-1-3.6l-1.4-5.3l-3.6-1.9l1.4-2.1l-8-2.9l-7.6-0.3l-10.1,0.2l-9.4,0.3l-3-1.5l-3.8-3.1l10.9-1.5l7.5-0.2L519.2,25l-6.4-2
l2.2-1.7l15.5-2.2l14.9-2.2l2.8-1.6l-8.1-1.5l4.6-1.7l14.6-2.9l5.3-0.5l0.2-1.8l8.9-1l10.9-0.6H595l2.7,1.2l10.6-2.1l7,1.4l4.5,0.3
l6.2,1.3l-6.7-2.1l1.6-1.7l12.7-2.1l11.5,0.1l5-1.3L661.9,0L687.9,0.4L687.9,0.4z M1493,279l1.6,2.2l-1.3,3.9l-3.1-2.1l-2.1,1.5
l0.1,3.7l-4.2-1.8l-1.2-3l1.3-3.8l3.3,0.8l1.1-2.7L1493,279L1493,279z M1517.4,259.7l0.6,5.2l2.5,3.2l-0.6,4.6l-5.4,3l-9.1,0.4
l-4.4,7.3l-4.6-2.4l-2.4-4.8l-8.6,1.4l-5,3l-6.1,0.1l7.3,4.7l0.8,10.8l-2.5,2.7l-3.5-2.5l-0.9-5.7l-4.1-1.9l-4-4.3l4.3-2l1.1-4
l3.9-3.3l1.9-4.4l9.6-1.9l6.3,1.3v-11.5l5,3.1l4.5-6.5l1.7-2.5l-1-7.9l-5.1-7.1l-0.2-3.9l4.8-1.2l8.1,8.7l2.8,5.2l-1.3,6.4
L1517.4,259.7L1517.4,259.7z M1505.6,215.5l4.5,1.3l1.7-2.6l6,6.9l-6.4,1.7l-0.4,6.1l-10.8-4.2l1.6,6.8h-5.7l-4.6-6.1l-0.6-4.7
l5.2-0.4l-4.3-8.5l-1.9-4.8l10.4,6.4L1505.6,215.5L1505.6,215.5z M1485.1,442.7l0.8,4.3l0.6,3.5l-1.5,5.8l-2.5-6.4l-2.4,3.2l2.1,4.7
l-1.4,3l-6.8-3.7l-1.9-4.6l1.5-3.1l-3.8-3l-1.5,2.7l-2.7-0.3l-3.9,3.6l-1.1-1.9l1.9-5.4l3.4-1.7l2.8-2.4l2.2,2.8l4.2-1.7l0.7-2.8
l3.9-0.2l-0.8-4.9l4.8,3l0.8,3.2L1485.1,442.7L1485.1,442.7z M1470.6,430.9l-1.8,2.1l-1.4,4l-1.6,1.9l-3.8-4.4l1-1.7l1.2-1.8l0.3-4
l3-0.3l-0.5,4.2l3.6-6.1L1470.6,430.9L1470.6,430.9z M1440.5,437l-7,6l2.4-4.4l3.8-4l2.9-4.4l2.4-6.3l1.5,5.2l-3.4,3.5L1440.5,437
L1440.5,437z M1457.9,420.6l3.5,2h3.6l0.2,2.6l-2.4,2.7l-3.3,1.9l-0.5-2.9l0.1-3.3L1457.9,420.6L1457.9,420.6z M1477.9,418.9
l2.3,7.1l-4.5-1.7l0.4,2.1l1.7,4l-2.5,1.4l-0.7-4.5l-1.7-0.3l-1.2-3.9l3.3,0.5l-0.3-2.4l-4-4.8l5.4,0.1L1477.9,418.9L1477.9,418.9z
M1455,413.1l-0.8,5.5l-2.8-3.2l-3.4-4.8l4.8,0.2L1455,413.1L1455,413.1z M1448.6,378.5l3.7,1.8l1.5-1.6l0.7,1.6l-0.4,2.6l2.7,4.6
l-0.6,5.3l-3,2.1l-0.1,5.1l2,5.1l3.1,0.7l2.3-0.8l7.5,3.6l-0.1,3.4l2,1.6l-0.2,2.9l-4.8-3.1l-2.5-3.4l-1.1,2.4l-4-3.8l-5,0.9
l-2.9-1.4l-0.1-2.6l1.5-1.7l-1.8-1.4l-0.4,2.3l-3.3-3.7l-1.2-2.8l-1.2-6l2.6,2l-1.1-9.9l0.9-5.8L1448.6,378.5L1448.6,378.5z
M1651.2,539.7l-1.6,0.6l-2.2-2.5l-2.2-4l-0.9-4.8l0.8-0.7l0.5,1.9l1.6,1.5l2.5,4l2.4,2.2L1651.2,539.7L1651.2,539.7z M1630,531.1
l-3,0.5l-1,1.8l-6.2,3.1h-2.9l-4.5-1.9l-3.1-1.8l0.6-1.9l5,0.9l3.1-0.5l1-3.1l0.8-0.1l0.4,3.4l3.2-0.5l1.7-2.2l3.3-2.3l-0.4-3.7
l3.4-0.1l1.1,1l-0.4,3.5L1630,531.1L1630,531.1z M1636.9,524.9l-1.9,1.7l-0.8-3.8l-1.2-2.4l-2.4-2.1l-3.1-2.7l-3.9-1.9l1.6-1.5
l2.9,1.8l1.9,1.4l2.3,1.5l2.1,2.6l2,2.1L1636.9,524.9L1636.9,524.9z M1442.8,351.3l-1.3,5.2l-4-5.4l-1.5-4.7l1.9-6.3l3.3-4.8
l2.9,1.9l-0.1,3.9L1442.8,351.3L1442.8,351.3z M1569.3,512.8l9.6,4.4l10.2,3.6l3.7,3.3l2.9,3.2l0.6,3.7l9.1,4l1.1,3.3l-5.2,0.7
l0.9,4.3l4.7,4.1l3,6.8l3.2-0.2l-0.5,2.8l4.2,1.1l-1.8,1.2l5.6,2.7l-0.8,1.8l-3.8,0.4l-1.1-1.6l-4.8-0.7l-5.5-1l-3.9-4l-2.9-3.5
l-2.4-5.6l-7-2.8l-4.9,1.8l-3.6,2.1l0.3,4.7l-4.6,2.2l-3.1-1.1l-5.7-0.2l-4.6-5.2l-5.5-1.3l-1.6,1.8l-7.1,0.2l2.8-5.2l3.7-1.8
l-1-6.9l-2.3-5.3l-10.6-5.4l-4.6-0.5l-8.2-5.9l-1.8,3.1l-2.1,0.5l-1.2-2.3l0.1-2.8l-4.2-3.1l6.2-2.3l4,0.1l-0.4-1.6l-8.3-0.1
l-2.1-3.7l-5-1.2l-2.3-3.2l7.6-1.5l2.9-2.1l9,2.6l0.8,2.4l1.3,10.3l5.7,3.8l4.9-6.8l6.6-3.8h5l4.7,2.2l4.1,2.3L1569.3,512.8
L1569.3,512.8z M439.5,211.6l-6.3,3l-6,2.1l-5.9,1.8l-3.9,3.7l-1.4,1.3l-1.1,3.3l0.6,3.3l2.1,0.1l0.2-2.2l1.1,1.4l-1,1.7l-3.8,1
l-2.4-0.1l-4.1,1.1l-2.4,0.3l-3.1,0.3l-4.8,1.8l7.9-1.2l1.1,1.2l-7.8,1.9h-3.3l-1.7,1l-1.1,4.8l-5.2,4.9l0.1-1.6l-2.3-2l0.1,3.5
l0.9,1.1l-0.6,2.5l-2.4,2.5l-4.4,5.1l2.5-4.6l-2-2.5l1-5.3l-1.9,2.7v4.1l-3.2-1l3,2.1l-1.5,6.2l1.3,2.6l-0.9,6.5l-4.6,4.8l-6,1.9
l-4.4,3.8l-2.8,0.4l-3.3,2.3l-1.3,2.2l-6.9,4.1l-3.7,3l-3.5,3.8l-1.8,4.5l-0.1,4.4l0.7,5.4l1.5,4.5l-0.5,2.7l1.2,7.4l-0.9,4.3
l-0.7,2.5l-2,3.9l-1.7,0.8l-2.6-0.8l-0.4-2.8l-1.8-1.4l-2-5.5l-1.6-4.9l-0.4-2.5l2-4.2l-0.8-3.5l-3-5.3l-1.9-1l-6.1,2.9l-2.9-3.3
l-3-1.5l-6.2,0.8l-4.7-0.7l-4.2,0.4l-2.4,1l0.5,1.7l-0.7,2.5l0.9,1.3l-1.3,0.8l-1.7-0.9l-2.4,1.2l-3.8-0.2l-3.3-3.4l-4.9,0.8
l-3.5-1.4l-3.5,0.4l-4.9,1.5l-6.1,4.7l-6,2.7l-3.7,3.1l-1.9,2.8l-1,4.4l-0.4,3.1l0.6,2.2l-3.1,5.6l-1.8,4.5l-1.8,8.6l-1.1,3.1
l0.5,3.4l1.2,3.1l0.4,5l3,4.7l0.7,3.6l1.8,3.2l5.6,1.7l1.9,2.6l5.1-1.8l4.3-0.6l4.3-1.1l3.6-1.1l3.9-2.6l1.8-3.7l1.2-5.4l1.2-1.8
l4-1.7l6-1.5l4.8,0.2l3.4-0.5l1.2,1.3l-0.6,3.1l-3.5,3.8l-1.8,3.9l0.9,1.1l-1.2,2.7l-2,5l-1.4-0.6l-0.3,1.8l-1.3,2.7l-0.5,3.3
l-0.7,3.8l-1.3,1.7l-2.4,2.4l1.7,1.1l2.1-0.1l1.9-0.9l1.6-0.1l3.9,0.8l2.6-0.2l1.8-0.7l2.5-0.3l2.8,0.2l3.6,0.4l2.4,1.3l1.5,1.4
l1.9,1l1.3,1.8l-1,2l0.3,2.3l-1.4,2.2l-0.9,2.5l-0.4,2.8l0.2,1.7l-0.1,2.8l-1.6,3.4l0.2,1.7l-1.2,1.6l0.1,1.7l0.8,1.1l1.2,3.4l2,2.6
l2.4,2.7l1.9,2.3l-0.2,1.3l2.3,0.3l2,1.1l2.7-0.5l2.5-1.6l3.5-1.3l2-1.9l3.1,0.4l2.8,0.8l2.5,1.1l1.7,1.9l2,1.8l0.4,4.7l-1.1,1.9
l-1.8-0.5l-0.9,3.1l-1.8-1.8l-1-3.5l1.5-1.7l-2.4-2.5l-2.7-1.8l-2.5,0.4l-1.2,2.2l-2.3,1.6l-1.9,1.6l2.5,3.4l-1.5,0.9l-3.5,1.2
l-0.8-3.8l-0.8,1.1l-1.8-0.4l-1-2.5l-2.3-0.5l-1.4-0.7h-2.4l-0.3,1.4l-3.5-2.4l-1.1-1.3l0.7-1.1l-0.1-1.4l-1.5-1.5l-2.1-1.3
l-1.9-0.8l-0.3-1.9l-1.4-1.1l0.3,1.8l-1.2,1.6l-1.2-1.8l-1.7-0.6l-0.7-1.3l0.1-2l0.9-2l-1.5-0.9l1.4-1.2l-1.8-2l-2.5-2.6l-1-2.1
l-2.2-2l-2.6-2.9h1.6l-0.3-2.4l-1.7-0.6l-0.7,1.5l-3.3-0.1l-1.9-0.6l-2.2-1.3l-3.1-0.4l-1.4-1.3l-2.8-1.1l-3.4-0.1l-2.5-1.3
l-2.7-2.6l-5.5-6.9l-2.6-2.1l-4.4-1.6l-3.1,0.4l-4.8,2.4l-2.9,0.7l-3.7-1.7l-4-1.2l-4.8-2.9l-4-0.9l-5.9-3l-4.2-3l-1.2-1.7l-3-0.4
l-5.4-2l-1.9-2.9l-5.3-3.6l-2.2-4l-0.8-3.1l1.9-0.7l-0.3-1.8l1.6-1.6l0.3-2.2l-1.4-2.9v-2.5l-1.3-3.2L191,345l-4.5-4.9l-1.9-4
l-4.1-2.6l-0.7-1.5l1.8-4l-2.5-1.5l-2.4-3.1l-0.3-4.4l-2.7-0.5l-2.3-3.4l-1.7-3.1l0.4-2l-1.5-4.7l-0.4-4.9l0.9-2.4l-3.1-2.5
l-1.9,0.2l-2.4-1.7l-1.8,2.6l-0.1,3l-1,4.8l1.1,2.6l2.7,4.4l0.4,1.4l0.8,2.7l1,4l1.2,1.6l0.6,2.3l2.6,3.2l0.5,5.9l1,2.8l0.9,3
l-0.4,3.4l2.6,0.2l1.6,2.9l1.5,2.8l-0.4,1.2l-2.7,2.3l-1.7-3.9l-2.9-3.6l-3.3-3.1l-2.5-1.6l1.2-4.7l-0.1-3.4l-2.1-2l-3.1-2.9
l-1.9-0.8l-2.9-1.5l-2.3-3.7l2.7-0.2l2.7-2.3l1-2.9l-2.9-4.5l-2.6-1.8l-0.8-4l-0.7-4.1l-0.7-5.1l-0.2-5.7l0.3-3.2l-2.1-3.7l-2.2-0.7
l0.1-1.9l-2.8-0.3l-1.3-1.7l-4.6-0.7l-1-1l0.8-3.5l-2.5-6.5l-0.4-9l0.8-1.5l-1.3-2.2L133,248l1.9-5.2l-1-3.4l3.9-5.2l2.8-5.3
l1.1-4.7l5.4-5.8l8-11.2l4.2-8.3l1.8-5.4l0.4-2.9l1.4-1.2l5.8,2.1l-1.1,5.9l2.3-1.6l2.4-5.1l1.6-5.1l-6.1-6.1l-1.6-2.7l-6.9-2.5
l1.3-5.5l3.6-3.7l-4.1-2.6l3.1-4.9l-2.1-4.4l2.5-3.1l-0.6-2.2l-2.5-1.9l3.3-5.2l-1.6-4.9l2.7-5.5l-4.1-0.4l-7.1-0.2l-3.7-1.7
l-3.3-6.1l-3.2-1.1l-5.7-2l-6.7,0.5l-6-2.7l-2.6-2.5l-6.3,1.2l-3.5,4.1l-2.9,0.3l-6.5,1.3l-6.1,1.9l-6.4,1.3l3.2-3.5l8.3-5.7
l6.7-1.8l0.4-1.4l-9.2,3.2l-7.4,3.9l-11.1,4.1l0.2,2.9l-8.9,4.2l-7.6,2.5l-6.6,1.8l-3.9,2.6l-10.5,3.1l-4.5,2.8l-8.1,2.6l-2.8-0.5
l-6.1,1.7l-6.9,2l-6,2l-10,1.7l8.5-3.8l6.6-1.8l8.5-3.3l6.5-0.7l4.9-2.4l10.3-3.6l2.3-1.2l5.7-2.1l5.7-4.5l6.2-3.4l-7.2,1.8
l-5.2,1.1l0.4-3l-3.6,2.1l1.6-2.9l-7.2,2.3h-2.8l3.6-3.5l3.3-2.1l-0.4-2.1l-7.2,1.1l-0.5-2.7l-1.4-1.4l4-3.3l-0.3-2.4l5.8-3.4
l7.6-3.1l5.3-3l4.1-0.4l1.8,0.9l7-2.7l2.5,0.5l5.5-1.8l2.5-2.6l-1.1-1l5.9-2.1h-2.7l-6.1,1.2l-2.9,1.3l-1.8-1.3l-6.9,0.7l-4.5-1.4
l1.2-2.2l-1-3.3l9.1-2.3L86.7,82h3.4l-4.3,2.8l9.2-0.2l1.2-3.5L93.9,79l0.8-2.7L94,74l-3.2-1.7l6.3-2.9l7.6-0.1l8.6-2.5l4.8-2.6
l7.8-2.5l4.8-0.6l11-2.3l3.2,0.3l10.2-2.8l4.4,1.1l-0.5,2.4l3.3-1l6.3,0.3l-2,1.2l4.9,0.9l4.8-0.5l6.2,1.6l7.1,0.5l2.2,0.7l6.5-0.8
l4.1,1.6l3.5,0.7l5.9,1.3l3.3,2.6l3.7,0.5l6.2-2.3l7-1.6l5.2,0.6l8.8-2.3l8.2-1.4l0.2,2.2l4.5-1.2l3.8-2.5l2.1,0.6l1.4,4.7l9.4-3.6
l-3.9,4.1l5.9-0.9l3.3-1.6l4.5,0.3l3.8,2.3l7.5,1.9l4.7,1l4.4-0.4l2.8,2.8l-8.5,2.6l6.4,1.2l11.8-0.6l4.4-1l1.4,3.3l7-2.8l-2-2.3
l4.4-1.8l5.2-0.3l3.8-0.5l2.1,1.3l1.5,2.9l5-0.4l5.1,2.4l7.2-0.8l5.9,0.1l2.4-3.4l4.5-0.9l4.8,1.8l-4.2,5.2l6.2-4.4l3.2,0.2l6.3-5.5
l-1.6-3.3L388,63l5.5-5.8l8.1-3.8l4.5,0.8l1.9,2.3l0.4,6l-5.7,2.6l6.6,1l-4.3,5.5l8.7-4.2l2.2,3.5l-4.2,4l1.3,3.7l7.2-4l6.5-4.6
l4.6-5.9l5.5,0.4l5.4,0.8l3.5,2.6l-1.7,2.7l-5,2.9l0.8,2.9l-2.3,2.7l-10.8,3.8l-6.5,0.9l-3.2-1.7l-3.2,2.8l-7.4,4.7l-2.9,2.4
l-7.7,3.8l-6.4,0.4l-5.1,2.4l-2.9,3.7l-5.6,0.7l-8.6,4.6l-9.4,6.5l-4.9,4.6l-4.9,6.8l6,1l-1.5,5.5l-0.7,4.5l7.1-1.2l7,2.6l3.3,2.2
l1.7,2.9l4.8,1.6l3.6,2.5l7.5,0.4l4.8,0.6l-3.6,5.2l-1.7,6l0.1,6.8l4.4,5.8l4.6-1.9l5.6-6.3l2.2-9.6l-1.7-3.2l9-2.8l7.5-4.2l4.7-4.1
l1.7-4l-0.5-5l-3.1-4.5l8.8-6.1l1-5.3l3.8-9l3.9-1.3l6.6,1.6l4.2,0.5l4.5-1.5l3,2l3.6,3.3l0.1,2.2l7.7,0.5l-2.6,4.9l-2.2,7.3l3.7,1
l1.6,3.4l8.1-3.2l7.4-6.5l4.3-2.7l1,5.2l2.6,7.5l2,7.1l-3.4,3.7l4.8,3.4l2.8,3.4l6.9,1.6l2.3,1.9v5.1l3.4,0.8l1.1,2.3l-2,6.8
l-4.2,2.3l-4.2,2.1l-8.7,2.2l-7.8,5.1l-8.6,1l-10-1.3l-7.3-0.1l-5.2,0.5l-5.7,4.4l-7.2,2.7l-10.1,8.3l-7.8,5.7l4.6-1l10.9-8.2
l12.1-5.2l7.6-0.6l3.3,3.1l-6.1,4.1l-0.6,6.8l0.1,4.6l5.5,3.1l8.6-0.8l7.1-7l-1,4.5l2.6,2.2l-7.5,4.1l-12.2,3.7l-5.8,2.4l-7.1,4.5
l-3.7-0.5l1.5-5.2l10.4-5.1l-8.1,0.2l-5.9,0.8L439.5,211.6L439.5,211.6z M1443.2,229.5l0.6,3.1l0.8,4.6l-1.4,2.9l-4.7,2.7l0.9,3.8
l2.9,1l3.8,2.6l4.5,4l4.3,3.9l3,4.2l3.3,7v3.6l-4.9,1.6l-2.9,2.8h-4.6l-1.9-3.4l-0.8-4.6l-5.3-7l3-0.9l-6.1-6h-4.9l-3.6-2.1v-4.5
l-1.4-4.7l-3.7-0.6l-2.9-1.8l-6.4,2l-2.4,2.9l-4.8,1.8l1.4-3l-2.3-2.5l1.9-4.2l-4.4-3.3l-3.4,2.2l-3.6,4.4l-1.2,4.1l-5,0.3l-1.2,3
l4.7,4.4l4.7,1l1.5,2.9l4.9,1.9l3.9-4.6l5.8,2.5l3.4,0.2l2.4,3.4l-6.7,1.8l-1,3.5l-3.8,3.2l-0.9,4.6l7.1,3.5l4.6,6.3l5.4,5.8
l5.4,4.9l1.6,4.7l-2.8,1.7l2.5,3.4l3.8,2l0.8,5.1l0.1,5.1l-2.8,0.5l-2.1,6.9l-2.3,8.4l-3.3,7.6l-6.3,5.9l-6.6,5.3l-6.1,0.7l-2.8,2.9
l-2.3-2.1l-2.5,3.2l-7.2,3.2l-5.6,0.9l-0.8,6.7l-3,0.4l-2.2-4.6l0.9-2.5l-7.7-2l-2.4,1l-6.5,5.5l-3.7,6l-0.5,4.4l5.3,6.7l6.4,8.3
l5.6,4l4.1,5.1l4,11.7l0.4,11.2l-4.3,4.2l-6.1,4.1l-4.1,5.3l-6.6,5.9l-2.3-4l1.3-4.3l-4.5-3.7l-4.7-0.9l-2.6-3.3l-3.4-6.6l-5.3-2.9
l-4.7,0.1l0.3-5l-4.9,0.1l0.2,7l-2.2,9.3l-1.4,5.6l0.7,4.6l3.7,0.2l2.6,5.8l1.4,5.5l3.3,3.6l3.4,0.8l3.1,3.3l4.8,4.4l2.6,4.3
l0.5,4.3l-0.5,2.9l0.6,2.1l0.5,3.8l2.1,1.8l2.3,5.6l-0.1,2.1l-4,0.5l-5.4-4.8l-6.7-5l-0.8-3.2l-3.4-4.3l-1-5.3l-2.1-3.4l0.4-4.7
l-1.4-2.7l-2.4-2.4l-1.1-3.2l-3.2-3.5l-2.9-3.1l-0.7,3.8l-1.2-3.6l0.3-3.9l1.3-6.1l-0.9-4.8l1.3-4.8l-2.2-3.8l-0.2-6.9l-2.6-3.3
l-2.6-7.6l-2-8.1l-3.1-5.2l-3.2,3.1l-5.8,4.6l-3.2-0.6l-3.6-1.5l0.9-7.9l-1.9-5.9l-5.4-7.4l0.4-2.2l-3.4-0.9l-4.6-5.2l-1.1-5.1
l1.6-3.6l0.5,4.6l-1,4.1l-2-3.3l-0.8-3.2l-1.5-3.1l-2.8-3.7l-5.1-0.2l0.9,2.6l-1.3,3.5l-2.5-1.3l-4.5-0.1l-0.5,2.4l-3.7-0.1
l-6.6,1.3l0.9,4.8l-2.4,3.8l-7.4,4.2l-5.3,7.5l-3.7,4l-5,4.2l0.3,2.9l-2.6,1.6l-4.8,2.3l-3.7,5.2l1.9,8.2l0.7,5.3l-1.9,6.1l0.7,10.8
l-2.9,0.3l-2.2,4.8l1.8,2.1l-5,1.8l-1.7,4.4l-2.2,1.8l-5.5-6l-3.1-8.9l-2.5-6.4l-2.2-3l-3.4-6.1l-2-8l-1.3-3.9l-5.8-8.8l-3.6-12.3
l-2.5-8.1l-0.8-7.8l-1.7-5.9l-7.6,3.8l-4-0.8l-8-7.7l2.4-2.3l-1.9-2.5l-7.1-5.4l-4.2-1.6l-2.1-4.6l-4.9-4.8l-9.9,1.2l-8.9,0.1
l-7.6,0.9l-10.5-1.9l-6.1-1.5l-6.3-0.8l-3.2-7.8l-2.8-1.1l-4,1.1l-5.1,3.1l-6.9-2.1l-6.1-4.9l-5.5-1.8l-4.3-6.1l-5.1-8.4l-2.8,1
l-3.7-2.1l-1.7,2.5l-3.2-0.4l1.4,2.8l2.1,6.3l2.7,5.5l2.9,1.4l1.2,2.3l4,2.6l0.6,2.7l-0.4,2.1l1,2.1l1.7,1.8l0.9,2.1l0.2-3.1
l1.1-3.3l3.3,1.3l0.5,3.7l-0.8,3.8l1.2,2.4l5.5,0.4l4.6,0.2l3.3,0.2l3.3-4.3l3.7-4.1l3-3.9l1.3,2.2l1.3,5l2.9,4.3l3.3,2.3l4.1,0.9
l3.3,1.1l2.9,3.7l1.6,2.1l2.2,2.2l-1.6,3.8l-2.9,3.8l-1.7,4.4l-3.5,1.2l-0.6,3.2l1,4.2l-3,0.8l-3.3,2.4l-0.2,3.1l-4.6,1.3l-2.1,1.6
l0.2,2.5l-2.5,1.8l-3.1-0.6l-3.6,2.2l-6.4,2l-0.9,2.9v2.1l-5.3,2.7l-8.8,3l-4.7,4.5l-4.1-0.1l-3.1,2.7l-3.5,1.2l-4.7,0.3l-2.5,2.1
l-2.3,2.1l-2.7-0.2l-5.7,0.6l-1.6-3.8v-3.4l-2.3-6.6l-1.7-2.6l0.4-3.2l0.2-4l-0.9-2.8l-1.8-1.9l-0.6-2.5l-3-2.3l-3.2-5.3l-1.9-5.2
l-4.1-4.4l-2.5-1l-4-6.1l-0.9-4.4v-3.8l-3.6-7l-2.8-2.5l-3-1.3l-2.1-3.7l-1.5-4.7l-4.2-6.2l-3.7-5.1l-3.2-4.4h-2.7l0.6-3.5V312
l0.2-3.4l-1.3,2.5l-0.7,4.8l-1.2,3.3l-3.2-0.9l-2.7-2.9l-5.1-8.5l2.8,6.7l3.9,6.4l4.8,9.9l2.3,3.5l2,3.6l5.3,7l-0.6,5.3l6.8,5.7
l3.1,7.5v7.7l2.5,7.6l2.2,1.6l3.1,2.4l3.7,7.3l1.8,5.9l3.2,3.1l7.9,6l3.2,3.6l3.2,3.7l1.9,2.2l2.8,1.9l1.4,1.9l-0.1,2.7l-3.1,1.5
l2.5,1.7l-2,3.4l-1.1,2.3l2.2,3.5l2.1,3.1l2.2,2.2l18.5,7.6l4.8-0.1l-15.4,19.1l-7.4,0.3l-4.9,4.5l-3.6,0.1l-1.5,2l-4.8,7.2
l0.2,23.2l3.3,5.3l-4,2.5l-1.4,2.7l-3,4.9l-1.8,2.6l-1.2,4.2l-2.2,2.1l-2.8,7.9l0.3,3.6l3.5,2.3l-1.5,5.5l-0.1,5l1.8,3.9l2.2,6.3
l2,1.4l0.8,2.9l-0.4,6.3l0.4,5.6l-0.2,9.9l0.9,3.1l-1.9,4.6l-2.4,4.4l-3.7,3.9l-5.2,2.5l-6.4,3.1l-6.7,6.8l-6.3,5.7l-2.3,1.4
l-0.7,4.6l2.4,4.8l0.8,3.7l0.5,7.8l-1.1,3l0.3,3.7L969,652l-4.6,2.2l-6.8,3.4L955,660l0.3,2.6l0.7,3.8l-1.7,4.7l-1.1,5.2l-1.6,2.9
l-3.9,3.2l-3.7,4.2l-1.8,3.2l-3.4,4.6l-6.7,6.5l-4.1,3.8l-4.3,2.9l-5.8,2.5l-2.7,0.3l-4,0.8l-2.7,1.2l-5.7-1.2l-3.3,0.8l-7.8,2.2
l-4.6,1l-3.5,2.4l-4.5-2.1l-4.2-2.1l-0.4-5.5l-1.4-4.2l1.9-6l-3.2-6l-2.5-5.4l-3.5-8.2l-3.9-4.8l-1.9-4.7l-1-6.2l-1.2-4.6l-1.6-9.8
v-7.6l-0.6-3.5l-2.1-2.6l-2.7-5.2l-2.8-7.7l-1.1-4l-4.4-6.2l-0.2-4.9l-0.5-4l0.9-5.5l2-5.9l0.3-2.7l1.9-5.7l1.3-2.6l3.3-4.2l1.8-2.8
l0.7-4.8l-0.3-3.6l-1.6-2.2l-1.5-3.9l-1.3-3.8l2-3.9l-1.6-6.1l-1.1-4.3l-2.8-4l-0.3-3.2l-1.4-4.8l-4.6-6.7l-5.8-6.4l-3.7-5.3
l-3.4-6.6l0.2-2.1l1.3-2l1.3-4.6l1.1-4.8l0.9-8.1l0.8-5l-2.2-4.2l-2.6-1.1l-1.1-2.8l-1.4-2.7l-5.8,2.3l-4.3,1.1l-4.5-0.2l-3-3.9
l-1.9-4.6l-3.9-4.2h-9.2l-4.6,0.8l-4.6,1.3l-8.7,3.8l-3.2,2.1l-5,1.9l-5-1.8l-6.5-1.2l-3.6,0.1l-6.6,1.1l-3.9,1.8l-5.6,2.4l-8.3-3.2
l-5.1-4.8l-4.8-3.5l-3.7-4.1l-7.2-4.1l-2.9-9.4l-2.4-3.7l-2.1-2.5l-2.8-2.1l-0.7-2.8l-2.4-2.5l-2.9-2.6l-3.6-2.3l-1.7-2.3l-0.9-5.2
l0.2-4.5l-5.5-6.4l5.3-3.6l0.9-8.2l1.7-4.6l1.8-6.9l-1.9-7.1l1.9-4.8l-4.4-4.1V360l0.3-3l2.2-1.7l1.9-3.3l-0.3-2.2l2-4.5l3.1-4
l3.5-4.8l0.2-3.3l2.1-4l3.7-2.3l3.7-6.6l2.8-2.4l5.1-0.7l4.4-4.4l2.7-1.7l4.7-5.3l-1.1-7.9l2.1-5.4l0.9-3.4l3.5-4.3l5.4-2.9l4-2.6
l3.7-6.7l1.8-3.9h3.9l3.1,2.7l5-0.4l5.5,1.4l7.4-3.4l5.7-1.2l3.4-2.6l5-2l8.9-1.2l8.7-0.5l2.7,1l4.9-2.6h5.6l2.2,1.5l3.6-0.4
l5.6-2.6l3.7,0.7l-0.1,3.3l4.4-2.4l-2.1,4.5l0.1,3l1.9,1.6l-0.5,5.6l-3.4,3.2l1.1,3.5l2.8,0.1l1.5,3l8.4,3.2l6.7,0.5l7.2,2.8
l2.8,5.7l4.9,1.2l7.7,2.7l5.9,3.1l2.5-1.6l2.4-3l-1.5-4.8l1.5-3.1l3.7-3l3.6-0.8l7.3,1.3l2,2.8l3.8,1.1l5.4,0.8l1.5,2.1l7.1-0.2
l5.3,1.7l5.5,1.9l2.6,1l3.9-2l2.1-1.8l4.7-0.6l3.9,0.8l1.7,3.2l1.1-2.1l4.4,1.5l4.2,0.4l2.5-1.6l1-2.5l1.1-2.9l0.6-4.8l2-6.9
l2.2-4.7l-1.1-5l1-2.6l-2.3-3l1.7-2.4l-3.2,0.6l-4.6-1.5l-3.1,3.7l-8,0.7l-4.6-3.5l-5.7-0.2l-0.9,2.7l-3.6,0.8l-5.4-3.5l-5.8,0.1
l-3.7-6.4l-4.2-3.6l2-5l-3.6-3l5.1-6.1l7.9-0.2l1.6-4.8l9.9,0.8l5.6-4l5.7-1.7l8.5-0.2l9.7,4.4l7.8,2.4l5.8-1l4.5,0.6l5.5-3.2
l0.3-2.7l-2.1-4.2l-3.4-2.3l-3-0.7l-2.2-1.9l-7.4-5.1l-6.2-2.4l-5-3.6l3.4-1l3.2-5.2l-3.2-2.4l7.1-2.3l-12.6,0.9l-3.8,1.3l-3.9,2.3
l1,3.9l2.7,1.5l5.1-0.4l-0.6,2.2l-5.3,1.1l-6.3,3.6l-3-1.3l0.6-2.9l-5.8-1.8l5.2-3.3l-9.7-2.9l-0.7-2.4l-4.5,0.8l-1.3,3.4l-3.3,4.6
l-1.9,2.9l-2,6.9l-2.2,2.5l-1.3,4.4l2.1,3.5l0.9,2.4l4.7,2l-6.8,1.9l-2,1.9l-3.9,3.4l-1.9-2.9l-3.3-1.5l-2.7-0.6l-6.1,1.6l3.9,3.6
l-2.5,1h-2.9l-3-3.2v3.6l3.7,4.6l-2.1,1.8l3.3,2.5l2.7,1.8l0.4,3.7l-5-1.7l1.9,3.3l-3.3,0.7l2.4,5.7l-3.4,0.1l-4.6-2.9l-2.3-5.1
l-1.3-4.3l-2.3-3l-2.9-3.6l-1.5-2.3l-3.2-3.5l-0.7-3l0.1-4.3l-0.5-2.9l-2.7-2.5l-3.2-1.1l-4.1-2.4l-3.1-2.2l-4.8-1.8l-4.6-4.5
l-1.5-4.3l-3.6-1.8l-1.3,2.6l-1.7-2v-2.2l-2.8-1.5l-3.9,2.2l0.1,5l1.7,2.9l4.9,3.1l2.9,5.1l6,5l4-0.1v2.6l4.8,2.3l3.9,1.9l4.7,3.2
l-0.2,3.5l-3.1-3l-4.5-1l-1.9,4.1l3.9,2.3l-0.4,3.3l-4.6,6l-4.7,3.5l0.9,2l-0.9,3.3l-4.2-2.4l-2.7-0.7l-7.5-3.3l0.6-3.4l6.2,0.6
l5.2-0.7l3.3-0.4l2.4-3.5l-1.2-5l-1.8-3.2l-3.9-3.5l-3.4-1.2l-2.3-2.5l-3.9-0.4l-4.2-2.8l-4.9-4l-3.6-3.6l-1.9-6l-2.6-0.7l-4.2-2.1
L817,218l-6.6,3.9l-10-1.6l-7.4,2l-0.5,3.7l0.3,3.5l-4.8,4.2l-6.6,1.3l-0.5,2.1l-3.1,3.5l-2,5.1l2,3.7l-3,2.9l-1.2,4.2l-3.9,1.3
l-3.8,5h-6.7l-5-0.1l-3.3,2.3l-2.1,2.5l-4.5-2.8l-1.4-3.7l-4.8-1l-2.2,1.7l-2.7-0.9l-2.8,0.7l1-5.1l-0.4-4l-3.5-3l0.6-4.2l2.2-2.3
l0.4-2.5l1.3-3.8l-0.1-2.7l-0.9-2.2l-0.1-2.1l0.4-4.4l-2-2.6l7.4-4.5l6.2,1.1h6.8l5.4,1l4.2-0.3l8.2,0.2l2.7-3.7l1-12.3l-5.1-6.5
l-3.6-3.1l-7.5-2.4l-0.4-4.6l6.4-1.3l8.2,1.6l-1.4-7l4.6,2.6l11.3-4.8l1.4-5.1l4.3-1.2l3.4-1.3l6.8-10.5l6.5-2.6l-6.5,2.6l6.1-2.1
l4.3-0.3l4.8-1.6l4-1.7l-1.2-2.2l-0.4-3.4l-2.1-3.4l-0.4-6.1l1.9-3.3l4-0.4l5.1-3.3l0.1,3l-1.3,2l3.3,2.5l-1,2.3l-4.5,3.6l1.5,3
l0.2,2.3l4.9,1.4l0.1,2.1l4.7-1.1l2.5-1.7l5.5,2.4l2.4,1.9l3.1-1.7l7.1-2.8l5.7-2.1l4.8,1.1l5.1,1.5l0.7-2.6l6.3-2l-1.7-5l-0.5-4.5
l1.7-3.7l4-2.1l4.4,4.5l3.6-0.1l0.2-4.6l-0.1-3.5l-4.8-1.3l-0.9-3.4l5.4-1.6l5.5-0.9l5.1,1c3.4-1.8,5.1-3.1,7.7-4.2l-3.9-2l-8,0.5
l-7.5,2.1l-7.1,1.2l-3.1-3.1l-4.7-1.9l0.1-5.7l-2.9-5.2l1.5-3.3l3.3-3.6l8.7-6.1l2.6-1.2l-0.9-2.3l-6.4-2.6l-7,1.5l-3.4,3.9l1.2,3.5
l-6.1,4.5l-7.7,4.9l-2.1,8.1l3.6,4l4.8,3.3l-3.3,6.6l-4.6,1.3l-0.6,10l-2,5.5l-5.7-0.5l-2.2,4.7l-5.3,0.3l-2-5.7l-4.4-6.7l-4.2-8.4
l-3.3-3.6l-8.5,6.8l-6,1.4l-6.4-3l-1.9-6.3l-1.9-13.4l3.9-3.6l11.2-4.8l8.1-5.8l7.1-7.8l8.8-10.7l6.4-4l10.1-6.8l8.5-2.3l6.7,0.3
l5.1-4.4l7.3,0.3l6.9-1.1l13.6,3.9l-4.8,1.4l5.4,3.3l3.6-1.8l7.6,3.2l11.6,1.3l17.6,6.1l4,2.6l1.6,3.6l-3.7,2.9l-6.4,1.5L919.3,81
l-2.9,0.7l8,4l1,2.6l1.9,5.8l6,1.7l3.8,1.4l-0.2-2.7l-3.3-2.4l2.1-2.1l11.4,3.5l3.2-1.4l-4.2-4.1l8-5.4l4,0.3l4.6,1.9l1.1-3.8
l-4.7-3.3l0.8-3.2l-4.3-3.4l12.2,1.8l3.6,3l-5,0.7l1.2,3l4,1.9l6-1.2l-0.4-3.5l7.6-2.6l12.3-4.6l3.2,0.2l-2.5,3.3l5.3,0.6l2.1-1.9
l7.6-0.1l5-2.2l6.4,3.2l2.7-3.6L1021,66l14-0.1l6.6,1.7l18.5,6.1l1-2.8l-5.8-2.9l-6.1-1.6l-0.1-2.6l-4.7-4.1l3.1-6.4l-0.5-4.7
l13.4,0.4l2.9,2.9l-0.8,4.2l3.6,1.6l3.7,3.7l3.8,7.3l6.7,3.3l0.5,3.6l-3.5,7.8l5.3,0.8l4.2-3.4l-0.5-2.7l1.9-2.6l-4.4-3.1l-0.4-3.5
l-4.7-0.5l-2.9-2.9l-0.4-5.4l-8.1-4.2l4.6-3.5l-3.6-3.7l6,2.7l2.1,5l4.9,1l-4.5-3.8l5.1-2l7.9-0.3l9.6,3l-6.9-4.3l-4.8-5.4l5.8-1.1
l9.5,0.3l7.7-0.7l-5.5-2.6l1.2-3.3l4.2-0.2l4.9-2.4l9.2-0.7l9-1.8l4.3,1.1l5.3-2.6l6.9,0.1l-1.5-2.1l1-2l6.1-1.9l8.2,1.5l-3.4,1.2
l9.2,0.7l4.1,2.4l12.7-1.1l11.5,2.3l5.5,1.9l2.4,2.5l-2.3,1.5l-6.6,2.8l4.5,2.2l7.2,1.2l8.1,2.3l5.4-2.1l13.3,0.9l3.9,2.3l17.2,0.8
l-4.7-3.9l9.3,0.9h6.1l9.8,2.6l6,3.3l0.4,2.2l10,4.1l8.9,2.1l-3-5.5l9.3,2.4l5-1.4l9.7,1.6l8.5-0.8l-9.3-4.8l2.1-2.2l40.1,3.4l7.8,3
l16.1,4l14.7-1l9.2,0.9l6.5,2.2l5.1,3.8l7.2,1.6l3.9-1.1l7-0.2l9.2,1.1l6.8-0.6l14.2,4.8l2.5-1.8l-8.5-3.4l-1.8-2.3l15.2,1.4
l7.9-0.3l15.7,2.6l9.4,2.3l32.9,21.9l-2,2.5l-6.1-0.4l8.1,3l9.1,4.6l4.1,1.6l3.8,2.3l-8.9,0.3l-6.5,4.3l-3.1,0.7l-1.5,4l-2,3.6
l1.7,2.6l-11.4-4l-6.1,4.6l-4.7-2.2l-1.3,2.5l-7-0.8l3.1,3.9l1.1,5.6l2.9,2.4l6.7,1.4l9,8.6l-4.1,0.2l3.4,5l4.7,2.6l-5,3.1l5.4,6.9
l-5.7,1.5l4.5,6.2l-1.6,5.7l-5.7-4.3l-10.5-8.8l-16-13.4l-6.4-8.3l0.1-3.6l-2.8-2.7l5.7-1.3l-0.3-7.5l0.8-6l2.4-4.6l-6.5-8.1
l-4.7,0.5l3.2,4.7l-3.6,6.4l-12.1-7.1l-9.1,1.9v9.8l7.7,3.5l-8.4,1.6l-6.4,0.6l-4.3-4.3l-7.9-0.8l-2.5,2.8l-14.9-1l-13.1,1.8
l-3.5,11.5l-4.9,14.1l8,0.7l5.7,3.8l5.8,1.3l0.3-3l5.6,0.4l12.7,6.7l4.7,5.1l1.3,6.2l5.5,7.3l5.2,9.9l-1,9l1.3,4.3l-1.9,7.2
l-2.1,7.1l-1,3.7l-4.4,3.6l-3.2,0.1l-5.1-3l-4,4.5l-5.9-2.4l4.3,4.4L1443.2,229.5L1443.2,229.5z M1018.6,218.9v3.7l7.3,7.5l7.4,8.6
l-1.1,10.6l2.6,8.7l4.9,1l4.1,2.6l9.3,1.4l7.7-1.4l-2.2-5.6v-6.7l-4.4-3.5l-4.1-4.4v-4h5.5l3-2.8l-5.5-6.5l-4,1.1l-3.2-5.1l-6.2-1.5
l-3.3-6.1l-4.2-1.7v-1.7h4.2v-4l3.3-1.1h4.1l-2.1-9.3l-5.3,1.6l-4.2-3.1l-4.1,3.1l-6.6,1.2v4.2h-4.5l-4.4,7.4L1018.6,218.9
L1018.6,218.9z"/>
<g>
<circle class="st1" cx="1511.8" cy="716.5" r="8"/>
<circle class="st1" cx="1695.5" cy="729.8" r="8"/>
<circle class="st1" cx="970.1" cy="292" r="8"/>
<circle class="st1" cx="799.8" cy="162.8" r="8"/>
<circle class="st1" cx="387.4" cy="610.9" r="8"/>
<circle class="st1" cx="857.8" cy="118.9" r="8"/>
<circle class="st1" cx="462.4" cy="654.7" r="8"/>
<circle class="st1" cx="902.3" cy="252.2" r="8"/>
<circle class="st1" cx="327" cy="279.8" r="8"/>
<circle class="st1" cx="1053.2" cy="326.7" r="8"/>
<circle class="st1" cx="787.7" cy="230.9" r="8"/>
<circle class="st1" cx="879.5" cy="209.1" r="8"/>
<circle class="st1" cx="966" cy="278.6" r="8"/>
<circle class="st1" cx="1014.5" cy="282.1" r="8"/>
<circle class="st1" cx="1338.9" cy="406.9" r="8"/>
<circle class="st1" cx="1210.6" cy="410" r="8"/>
<circle class="st1" cx="319.7" cy="263.9" r="8"/>
<circle class="st1" cx="1609.6" cy="668.5" r="8"/>
<circle class="st1" cx="360.5" cy="464.1" r="8"/>
<circle class="st1" cx="1180.2" cy="372.4" r="8"/>
<circle class="st1" cx="413.6" cy="224.2" r="8"/>
<circle class="st1" cx="798.7" cy="171.4" r="8"/>
<circle class="st1" cx="872.6" cy="192.8" r="8"/>
<circle class="st1" cx="375.5" cy="220.8" r="8"/>
<circle class="st1" cx="1422.6" cy="462.5" r="8"/>
<circle class="st1" cx="1399" cy="345.1" r="8"/>
<circle class="st1" cx="1263.2" cy="349.8" r="8"/>
<circle class="st1" cx="789.6" cy="183.1" r="8"/>
<circle class="st1" cx="1470.9" cy="428.4" r="8"/>
<circle class="st1" cx="1375.7" cy="533.1" r="8"/>
<circle class="st1" cx="1381.7" cy="274.1" r="8"/>
<circle class="st1" cx="1282.2" cy="352.3" r="8"/>
<circle class="st1" cx="1353.2" cy="304.8" r="8"/>
<circle class="st1" cx="348.2" cy="269.7" r="8"/>
<circle class="st1" cx="1225.1" cy="448.4" r="8"/>
<circle class="st1" cx="347.4" cy="238.9" r="8"/>
<circle class="st1" cx="736.5" cy="281.5" r="8"/>
<circle class="st1" cx="836.1" cy="142.7" r="8"/>
<circle class="st1" cx="876" cy="710.3" r="8"/>
<circle class="st1" cx="1391.3" cy="314.5" r="8"/>
<circle class="st1" cx="1337.2" cy="299.3" r="8"/>
<circle class="st1" cx="391.8" cy="416.5" r="8"/>
<ellipse class="st2" cx="508.2" cy="656.6" rx="8" ry="8"/>
<circle class="st1" cx="1272.9" cy="342.2" r="8"/>
<circle class="st1" cx="996.9" cy="537.8" r="8"/>
<circle class="st1" cx="1195" cy="312.2" r="8"/>
<circle class="st1" cx="234" cy="239.9" r="8"/>
<circle class="st1" cx="258.5" cy="284.5" r="8"/>
<circle class="st1" cx="679.6" cy="400.2" r="8"/>
<circle class="st1" cx="954.4" cy="144" r="8"/>
<circle class="st1" cx="1059" cy="333.1" r="8"/>
<circle class="st1" cx="350.1" cy="225.2" r="8"/>
<circle class="st1" cx="747.3" cy="156" r="8"/>
<circle class="st1" cx="945.2" cy="682.6" r="8"/>
<circle class="st1" cx="809.7" cy="169.1" r="8"/>
<circle class="st1" cx="1079.7" cy="333.2" r="8"/>
<circle class="st1" cx="761.3" cy="140.8" r="8"/>
<circle class="st1" cx="1007" cy="238" r="8"/>
<circle class="st1" cx="393.9" cy="234.6" r="8"/>
<circle class="st1" cx="466.4" cy="715.7" r="8"/>
<circle class="st1" cx="839.9" cy="227.8" r="8"/>
<circle class="st1" cx="1430.3" cy="328.9" r="8"/>
<circle class="st1" cx="560.4" cy="518.1" r="8"/>
<circle class="st1" cx="818.8" cy="176.6" r="8"/>
<circle class="st1" cx="1399.2" cy="346.7" r="8"/>
<circle class="st1" cx="539.3" cy="639.3" r="8"/>
<circle class="st1" cx="431.8" cy="417.6" r="8"/>
<circle class="st1" cx="833.4" cy="130.6" r="8"/>
<circle class="st1" cx="521.9" cy="643.2" r="8"/>
<circle class="st1" cx="272.6" cy="401.1" r="8"/>
<circle class="st1" cx="807.6" cy="200.3" r="8"/>
<circle class="st1" cx="1035.8" cy="236.1" r="8"/>
<circle class="st1" cx="824.5" cy="154.8" r="8"/>
<circle class="st1" cx="1360.2" cy="359" r="8"/>
<circle class="st1" cx="888.8" cy="115" r="8"/>
<circle class="st1" cx="1426.8" cy="301.5" r="8"/>
<circle class="st1" cx="1403.8" cy="351.9" r="8"/>
<circle class="st1" cx="-93.3" cy="358.2" r="8"/>
<circle class="st1" cx="1389.7" cy="323.1" r="8"/>
<circle class="st1" cx="1212.2" cy="384.2" r="8"/>
<circle class="st1" cx="373.6" cy="245.7" r="8"/>
<circle class="st1" cx="262.1" cy="303.1" r="8"/>
<circle class="st1" cx="1440.2" cy="255.4" r="8"/>
<circle class="st1" cx="329" cy="240.8" r="8"/>
<circle class="st1" cx="1166.7" cy="280" r="8"/>
<circle class="st1" cx="925.6" cy="232.8" r="8"/>
<circle class="st1" cx="336.7" cy="299.9" r="8"/>
<circle class="st1" cx="1359.9" cy="483.6" r="8"/>
<ellipse transform="matrix(0.1602 -0.9871 0.9871 0.1602 440.0319 1358.1957)" class="st1" cx="1018.2" cy="420.5" rx="8" ry="8"/>
<circle class="st1" cx="931" cy="660.4" r="8"/>
<circle class="st1" cx="1266.7" cy="346.4" r="8"/>
<circle class="st1" cx="927.5" cy="174.8" r="8"/>
<circle class="st1" cx="679.3" cy="93.9" r="8"/>
<circle class="st1" cx="946.4" cy="506.5" r="8"/>
<circle class="st1" cx="1144.7" cy="335.5" r="8"/>
<circle class="st1" cx="921.1" cy="195.9" r="8"/>
<circle class="st1" cx="1495.6" cy="274.7" r="8"/>
<circle class="st1" cx="1240.8" cy="317.6" r="8"/>
<circle class="st1" cx="1348.7" cy="476.5" r="8"/>
<circle class="st1" cx="1036.6" cy="307.8" r="8"/>
<circle class="st1" cx="851.1" cy="550.4" r="8"/>
<circle class="st1" cx="169.4" cy="264.1" r="8"/>
<circle class="st1" cx="146.7" cy="277.9" r="8"/>
<circle class="st1" cx="955.4" cy="271.9" r="8"/>
<circle class="st1" cx="913.4" cy="117.9" r="8"/>
<circle class="st1" cx="1176.6" cy="293.3" r="8"/>
<circle class="st1" cx="774.8" cy="167.9" r="8"/>
<circle class="st1" cx="346.2" cy="570.6" r="8"/>
<circle class="st1" cx="729.4" cy="246.8" r="8"/>
<circle class="st1" cx="795.6" cy="452.1" r="8"/>
<circle class="st1" cx="807.4" cy="179.2" r="8"/>
<circle class="st1" cx="1373.5" cy="272.8" r="8"/>
<circle class="st1" cx="1224.4" cy="411.4" r="8"/>
<circle class="st1" cx="758.5" cy="236" r="8"/>
<circle class="st1" cx="766.2" cy="156.4" r="8"/>
<circle class="st1" cx="999.5" cy="519.7" r="8"/>
<circle class="st1" cx="284.4" cy="243.5" r="8"/>
<circle class="st1" cx="1096.9" cy="343.8" r="8"/>
<circle class="st1" cx="353.6" cy="454.7" r="8"/>
<circle class="st1" cx="1535.9" cy="734.1" r="8"/>
<circle class="st1" cx="299.9" cy="270.9" r="8"/>
<circle class="st1" cx="229.2" cy="370.2" r="8"/>
<circle class="st1" cx="241" cy="327.3" r="8"/>
<circle class="st1" cx="1401.9" cy="352.9" r="8"/>
<circle class="st1" cx="314.4" cy="288.3" r="8"/>
<circle class="st1" cx="338.6" cy="329.7" r="8"/>
<circle class="st1" cx="1190.1" cy="467.3" r="8"/>
<circle class="st1" cx="1451.2" cy="401.6" r="8"/>
<circle class="st1" cx="954.8" cy="659.1" r="8"/>
<circle class="st1" cx="803.5" cy="217.6" r="8"/>
<circle class="st1" cx="1095.4" cy="624.1" r="8"/>
<circle class="st1" cx="306.8" cy="208.7" r="8"/>
<circle class="st1" cx="835.2" cy="187.1" r="8"/>
<circle class="st1" cx="820.7" cy="204" r="8"/>
<circle class="st1" cx="1212.9" cy="359.7" r="8"/>
<circle class="st1" cx="1381" cy="240.3" r="8"/>
<circle class="st1" cx="984.7" cy="502.4" r="8"/>
<circle class="st1" cx="1433.2" cy="304.1" r="8"/>
<circle class="st1" cx="1371.7" cy="350.1" r="8"/>
<circle class="st1" cx="1691.9" cy="634.2" r="8"/>
<circle class="st1" cx="1518.9" cy="266.2" r="8"/>
<circle class="st1" cx="283.4" cy="230.9" r="8"/>
<circle class="st1" cx="326.3" cy="226.6" r="8"/>
<circle class="st1" cx="376.3" cy="258.9" r="8"/>
<circle class="st1" cx="736.1" cy="165.6" r="8"/>
<circle class="st1" cx="826.8" cy="115.7" r="8"/>
<circle class="st1" cx="908.8" cy="210.6" r="8"/>
<circle class="st1" cx="376.7" cy="375.7" r="8"/>
<circle class="st1" cx="1263.2" cy="319.4" r="8"/>
<circle class="st1" cx="467.1" cy="459.3" r="8"/>
<circle class="st1" cx="161.3" cy="204.3" r="8"/>
<circle class="st1" cx="1398.8" cy="697.3" r="8"/>
<circle class="st1" cx="386.7" cy="239.7" r="8"/>
<circle class="st1" cx="179.7" cy="281.1" r="8"/>
<circle class="st1" cx="362.1" cy="235.8" r="8"/>
<circle class="st1" cx="1363.1" cy="420.5" r="8"/>
<circle class="st1" cx="500.6" cy="685" r="8"/>
<circle class="st1" cx="846.6" cy="176.2" r="8"/>
<circle class="st1" cx="332.2" cy="436.3" r="8"/>
<circle class="st1" cx="223" cy="362.9" r="8"/>
<circle class="st1" cx="1310.7" cy="386.4" r="8"/>
<circle class="st1" cx="371.6" cy="255" r="8"/>
<circle class="st1" cx="887.7" cy="135" r="8"/>
<circle class="st1" cx="718.9" cy="454.3" r="8"/>
<circle class="st1" cx="1032.6" cy="335.1" r="8"/>
<circle class="st1" cx="1083.2" cy="627.1" r="8"/>
<circle class="st1" cx="150.3" cy="285.6" r="8"/>
<circle class="st1" cx="399.4" cy="706.7" r="8"/>
<circle class="st1" cx="170" cy="192.8" r="8"/>
<circle class="st1" cx="1373.7" cy="425.2" r="8"/>
<circle class="st1" cx="1429.4" cy="295.4" r="8"/>
<circle class="st1" cx="1410.3" cy="227.4" r="8"/>
<circle class="st1" cx="1361.7" cy="485.4" r="8"/>
<circle class="st1" cx="137.3" cy="255.9" r="8"/>
<circle class="st1" cx="305.6" cy="430.4" r="8"/>
<circle class="st1" cx="1376.3" cy="250.1" r="8"/>
<circle class="st1" cx="895.7" cy="235.7" r="8"/>
<circle class="st1" cx="199" cy="234" r="8"/>
<circle class="st1" cx="142.9" cy="247.4" r="8"/>
<circle class="st1" cx="896.6" cy="222.2" r="8"/>
<circle class="st1" cx="563" cy="576.2" r="8"/>
<circle class="st1" cx="305.8" cy="247" r="8"/>
<circle class="st1" cx="1581.8" cy="710.1" r="8"/>
<circle class="st1" cx="1425.3" cy="294.7" r="8"/>
<circle class="st1" cx="1402.7" cy="349.9" r="8"/>
<circle class="st1" cx="1411.7" cy="263" r="8"/>
<circle class="st1" cx="1007.9" cy="228.6" r="8"/>
<circle class="st1" cx="290.8" cy="404.5" r="8"/>
<circle class="st1" cx="322.2" cy="300.4" r="8"/>
<circle class="st1" cx="889" cy="120.2" r="8"/>
<circle class="st1" cx="963.9" cy="290.3" r="8"/>
<circle class="st1" cx="1393.4" cy="259.2" r="8"/>
<circle class="st1" cx="1039.8" cy="613.7" r="8"/>
<circle class="st1" cx="328.8" cy="315.9" r="8"/>
<circle class="st1" cx="1440.3" cy="334.3" r="8"/>
<circle class="st1" cx="1387.7" cy="244.6" r="8"/>
<circle class="st1" cx="840.6" cy="161.3" r="8"/>
<circle class="st1" cx="336.2" cy="494.8" r="8"/>
<circle class="st1" cx="1305.5" cy="190.2" r="8"/>
<circle class="st1" cx="858.8" cy="188.6" r="8"/>
<circle class="st1" cx="896.1" cy="148.6" r="8"/>
<circle class="st1" cx="1345.5" cy="379.5" r="8"/>
<circle class="st1" cx="877.7" cy="163.7" r="8"/>
<circle class="st1" cx="1392" cy="298" r="8"/>
<circle class="st1" cx="1423.8" cy="293.5" r="8"/>
<circle class="st1" cx="1354.9" cy="274.7" r="8"/>
<circle class="st1" cx="406.3" cy="205.1" r="8"/>
<circle class="st1" cx="172.5" cy="181.9" r="8"/>
<circle class="st1" cx="302" cy="177.5" r="8"/>
<circle class="st1" cx="264.7" cy="163.7" r="8"/>
<circle class="st1" cx="225.2" cy="170" r="8"/>
<circle class="st1" cx="372.7" cy="216.1" r="8"/>
<circle class="st1" cx="857.6" cy="203.4" r="8"/>
<circle class="st1" cx="964.6" cy="288.5" r="8"/>
<circle class="st1" cx="819.5" cy="192.7" r="8"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

View File

@@ -0,0 +1,316 @@
---
title: CSCI 1100 - 作业 1 - 计算与字符串处理
subtitle:
date: 2024-03-12T02:12:11-04:00
slug: csci-1100-hw-1
draft: false
author:
name: James
link: https://www.jamesflare.com
email:
avatar: /site-logo.avif
description: 这篇博客详细介绍了一项 Python 编程作业,包括创建一个 Mad Libs 文字游戏,计算速度和配速,以及生成一个用户指定尺寸的带框文本框。
keywords: ["Python", "编程", "作业", "Mad Libs", "速度计算", "带框文本框"]
license:
comment: true
weight: 0
tags:
- CSCI 1100
- 作业
- RPI
- Python
- 编程
categories:
- 编程语言
collections:
- CSCI 1100
hiddenFromHomePage: false
hiddenFromSearch: false
hiddenFromRss: false
hiddenFromRelated: false
summary: 这篇博客详细介绍了一项 Python 编程作业,包括创建一个 Mad Libs 文字游戏,计算速度和配速,以及生成一个用户指定尺寸的带框文本框。
resources:
- name: featured-image
src: featured-image.jpg
- name: featured-image-preview
src: featured-image-preview.jpg
toc: true
math: false
lightgallery: false
password:
message:
repost:
enable: true
url:
# 查看详细的 front matter 设置: https://fixit.lruihao.cn/documentation/content-management/introduction/#front-matter
---
<!--more-->
## 概述
本次作业总分为100分将计入你的总作业成绩截止日期为2023年9月14日 ( 星期四 ) 晚上11:59:59。三个部分需分别提交。所有部分必须在截止日期前提交否则你的程序将被视为迟交。
在开始本次作业之前,请仔细阅读提交指南文档。它将详细说明我们的期望,并回答一些常见问题,包括你需要通过 Submitty 提交程序,以及 Submitty 将在2023年9月11日 ( 星期一 ) 之前开放。
请记住,你的输出格式必须与 `hw01_files.zip` 文件中的示例运行结果完全一致。这样做的目的是简化测试过程,同时教会你如何使用我们提供的工具进行精确编程。我们欣赏创造力,但不要体现在作业的输出格式上!
## 第1部分Mad Libs 文字游戏 ( 40分 )
在这一部分,你将编写一个 Python 程序来构建下面的 Mad Libs 文字游戏:
```text
Good morning <proper name>!
This will be a/an <adjective1> <noun1>! Are you <verb1> forward to it?
You will <verb2> a lot of <noun2> and feel <emotion1> when you do.
If you do not, you will <verb3> this <noun3>.
This <season> was <adjective2>. Were you <emotion2> when <team_name> won
the <noun4>?
Have a/an <adjective3> day!
```
你需要使用 `input` 函数请求程序用户提供缺失的单词,即那些用 `< >` 括起来的单词。然后,你将获取所有用户指定的输入,并构建上面的 Mad Libs 文字游戏。确保你的输出看起来像上面的段落,只是缺失的信息被用户输入所填充。
文件 `hw1 part1 output.txt` 中提供了程序运行的示例 ( 你需要从 Submitty 的课程材料部分下载 `hw01_files.zip` 文件并将其解压到你的作业1目录中 )。
我们提供了合理的输入示例,但 Mad Libs 的乐趣在于输入随机的词,看看结果有多搞笑。不妨试试看!
当然,你编写的程序只适用于我们上面提供的特定 Mad Libs 文本。一个更具挑战性的问题是,编写一个程序来读取任意的 Mad Libs 文本,弄清楚要问用户什么,询问用户并读取输入,最后生成完整的 Mad Libs。不过这需要我们学完整个学期的内容你才能解决。
请充分测试你的代码,确保其正常工作后,将其作为 `hw1_part1.py` 文件提交到 Submitty作为作业的第1部分。
## 第2部分速度计算 ( 40分 )
许多运动类 App 会记录用户在步行、跑步、骑自行车或游泳时的时间和距离。有些用户想知道他们每英里的平均配速 ( 以分钟和秒为单位 ),而另一些人想知道他们每小时的平均速度 ( 以英里为单位 )。在很多情况下我们还想知道特定距离的预计时间。例如如果我用53分30秒跑了6.3英里我的平均配速是每英里8分29秒平均速度是每小时7.07英里而跑2.7英里的预计时间是22分55秒。
在本次作业的第2部分你需要编写一个程序要求用户输入一次锻炼的时间 ( 分钟和秒 )、跑过的距离 ( 英里 ) 和目标距离 ( 英里 ),并计算平均配速和平均速度。
文件 `hw1 part2 output.txt` 中提供了程序运行的示例 ( 可以在 `hw01_files.zip` 文件中找到 )。
你可以假设分钟和秒都是整数,但跑过的距离和目标距离是浮点数。所有的分钟和秒必须保持整数形式,因此请使用整数除法和取模运算。例如:
```python
>>> x = 29.52
>>> y = int(x)
>>> print(y)
29
```
速度的输出应为浮点数保留2位小数。另外请注意我们的参考答案在输出计算结果之前会先输出一个空行。
我们将用示例中的值以及各种不同的值来测试你的代码。请充分测试你的代码,确保其正常工作后,将其作为 `hw1_part2.py` 文件提交到 Submitty作为作业的第2部分。
## 第3部分带框文本框 ( 20分 )
编写一个程序,要求用户输入一个作为边框的字符,以及文本框的高度和宽度,然后输出一个指定大小的文本框,并用指定的字符作为边框。此外,在文本框内水平垂直居中输出文本框的尺寸。如果无法完美垂直居中,尺寸文本应输出在靠上的位置,即上方留白行数比下方少一行。如果无法完美水平居中,尺寸文本的左侧空格应比右侧少一个。
你可以假设用户输入的值都是有效的:宽度是一个正整数 ( 7或更大 ),高度是一个正整数 ( 4或更大 ),边框字符是一个单个字符。
文件 `hw1 part3 output 01.txt` 和 `hw1 part3 output 02.txt` 中提供了程序运行的两个示例 ( 可以在 `hw01_files.zip` 文件中找到 )。
你需要先将文本框尺寸放入一个字符串中,然后利用字符串的长度来确定尺寸文本所在行的长度。如果你有编程经验,可能会想用循环来生成完整的边框,但 Python 提供的字符串操作功能 ( 第3课内容 ) 使得这没有必要。你不能在程序中使用任何 `if` 语句或循环。我们还没学过它们,而且本题并不需要,使用它们也不会让你的解决方案更优雅。
我们将用示例中的值以及各种不同的值来测试你的代码。请充分测试你的代码,确保其正常工作后,将其作为 `hw1_part3.py` 文件提交到 Submitty作为作业的第3部分。
## 支持文件
{{< link href="HW1.zip" content="HW1.zip" title="下载 HW1.zip" download="HW1.zip" card=true >}}
***
## 参考答案
### hw1_part1.py
```python
#Prepare variables
proper_name = ""
adjective1 = ""
noun1 = ""
verb1 = ""
verb2 = ""
noun2 = ""
emotion1 = ""
verb3 = ""
noun3 = ""
season = ""
adjective2 = ""
emotion2 = ""
team_name = ""
noun4 = ""
adjective3 = ""
template= """
Good morning <proper name>!
This will be a/an <adjective1> <noun1>! Are you <verb1> forward to it?
You will <verb2> a lot of <noun2> and feel <emotion1> when you do.
If you do not, you will <verb3> this <noun3>.
This <season> was <adjective2>. Were you <emotion2> when <team_name> won
the <noun4>?
Have a/an <adjective3> day!"""
output = ""
#Get user's input
print("Let's play Mad Libs for Homework 1")
print("Type one word responses to the following:\n")
proper_name = input("proper_name ==> ").strip()
print(proper_name)
adjective1 = input("adjective ==> ").strip()
print(adjective1)
noun1 = input("noun ==> ").strip()
print(noun1)
verb1 = input("verb ==> ").strip()
print(verb1)
verb2 = input("verb ==> ").strip()
print(verb2)
noun2 = input("noun ==> ").strip()
print(noun2)
emotion1 = input("emotion ==> ").strip()
print(emotion1)
verb3 = input("verb ==> ").strip()
print(verb3)
noun3 = input("noun ==> ").strip()
print(noun3)
season = input("season ==> ").strip()
print(season)
adjective2 = input("adjective ==> ").strip()
print(adjective2)
emotion2 = input("emotion ==> ").strip()
print(emotion2)
team_name = input("team-name ==> ").strip()
print(team_name)
noun4 = input("noun ==> ").strip()
print(noun4)
adjective3 = input("adjective ==> ").strip()
print(adjective3)
#Construct the Mad Lib
output = template.replace("<proper name>", proper_name)
output = output.replace("<adjective1>", adjective1)
output = output.replace("<noun1>", noun1)
output = output.replace("<verb1>", verb1)
output = output.replace("<verb2>", verb2)
output = output.replace("<noun2>", noun2)
output = output.replace("<emotion1>", emotion1)
output = output.replace("<verb3>", verb3)
output = output.replace("<noun3>", noun3)
output = output.replace("<season>", season)
output = output.replace("<adjective2>", adjective2)
output = output.replace("<emotion2>", emotion2)
output = output.replace("<team_name>", team_name)
output = output.replace("<noun4>", noun4)
output = output.replace("<adjective3>", adjective3)
#Print the Mad Lib
print("\nHere is your Mad Lib...")
print(output, end="")
```
### hw1_part2.py
```python
#Perpare Variables
minutes = 00
seconds = 00
miles = 00.00
target_miles = 00.00
pace_seconds_per_mile = 00.00
pace_seconds = 00
pace_minutes = 00
speed_mph = 00.00
target_time_total_seconds = 00.00
target_time_seconds = 00
target_time_minutes = 00
#Get User Input
minutes = str(input("Minutes ==> "))
print(minutes)
seconds = str(input("Seconds ==> "))
print(seconds)
miles = str(input("Miles ==> "))
print(miles)
target_miles = str(input("Target Miles ==> "))
print(target_miles)
#Calculate Pace
pace_seconds_per_mile = (int(minutes) * 60 + int(seconds)) / float(miles)
pace_seconds = int(pace_seconds_per_mile % 60)
pace_minutes = int(pace_seconds_per_mile // 60)
#Calculate Speed
speed_mph = float(miles) / (int(minutes) / 60 + int(seconds) / 3600)
#Calculate Target Time
target_time_total_seconds = float(target_miles) * pace_seconds_per_mile
target_time_seconds = int(target_time_total_seconds % 60)
target_time_minutes = int(target_time_total_seconds // 60)
#Print Results
print("\nPace is " + str(pace_minutes) + " minutes and " + str(pace_seconds) + " seconds per mile.")
print("Speed is {0:.2f} miles per hour.".format(float(speed_mph)))
print("Time to run the target distance of {0:.2f} miles is {1} minutes and {2} seconds.".format(float(target_miles), int(target_time_minutes), int(target_time_seconds)), end="")
```
### hw1_part3.py
```python
#Prepare Variables
frame_character = ""
height = 0
width = 0
free_space = 0.0
#Get user input
frame_character = input("Enter frame character ==> ").strip()
print(frame_character)
height = int(input("Height of box ==> ").strip())
print(height)
width = int(input("Width of box ==> ").strip())
print(width, "\n")
#Calculate dimensions line
dimensions = str(width) + "x" + str(height)
free_space = width - 2 - len(dimensions)
#Calculate the left and right padding considering odd/even width
left_space = free_space // 2
right_space = free_space // 2 + (free_space % 2)
#Prepare rows
top_bottom_row = frame_character * width
empty_row = frame_character + " " * (width - 2) + frame_character
dimension_row = frame_character + " " * left_space + dimensions + " " * right_space + frame_character
#Calculate the number of rows before and after the dimensions row
before_rows = ((height - 2) // 2) - ((height - 1) % 2)
after_rows = height - 3 - before_rows
#Output box
print("Box:")
print(top_bottom_row)
print((empty_row + '\n') * before_rows, end="")
print(dimension_row)
print((empty_row + '\n') * after_rows, end="")
print(top_bottom_row)
```

Binary file not shown.

View File

@@ -0,0 +1,327 @@
---
title: CSCI 1100 - 作业2 - 字符串和函数
subtitle:
date: 2024-03-12T02:41:25-04:00
slug: csci-1100-hw-2
draft: false
author:
name: James
link: https://www.jamesflare.com
email:
avatar: /site-logo.avif
description: 本次家庭作业共分为三部分,重点是使用 Python 函数和字符串操作来设计口香糖机的大小,实现一个简单的替换密码,以及对句子进行基本的情感分析。
keywords: ["Python","函数","字符串操作","情感分析"]
license:
comment: true
weight: 0
tags:
- CSCI 1100
- 作业
- RPI
- Python
- 编程
categories:
- 编程语言
collections:
- CSCI 1100
hiddenFromHomePage: false
hiddenFromSearch: false
hiddenFromRss: false
hiddenFromRelated: false
summary: 本次家庭作业共分为三部分,重点是使用 Python 函数和字符串操作来设计口香糖机的大小,实现一个简单的替换密码,以及对句子进行基本的情感分析。
resources:
- name: featured-image
src: featured-image.jpg
- name: featured-image-preview
src: featured-image-preview.jpg
toc: true
math: false
lightgallery: false
password:
message:
repost:
enable: true
url:
# See details front matter: https://fixit.lruihao.cn/documentation/content-management/introduction/#front-matter
---
<!--more-->
## 概述
本次家庭作业总分100分将计入你的总体家庭作业成绩截止日期为2024年2月1日星期四晚上11:59:59。三个部分应分别提交。所有部分都必须在截止日期前提交否则你的程序将被视为迟交。
**关于评分的注意事项**请务必仔细阅读提交指南文档。它适用于本次和以后所有的家庭作业并且将变得越来越重要。在家庭作业的所有部分中我们会指定你必须提供哪些函数。即使这些函数非常简单也请务必编写它们。否则你将失去分数。随着学期的进展我们将编写更复杂的函数。此外在评分本次家庭作业时我们还会检查程序结构参见第4讲以及变量和函数的命名。
在本次作业中的任何地方都不允许使用任何循环。
## 关于过度合作的严正警告
对于本学期的所有家庭作业,我们将使用软件来比较所有提交的程序,以发现不当的相似之处。该软件可以处理程序之间的各种差异,因此如果你 (a) 拿了别人的程序,修改了(或没有修改)并作为自己的程序提交,(b) 与一个或多个同学一起编写了一个程序,并分别提交修改后的版本作为自己的作品,或者 (c) 提交(可能经过轻微修改)以前某一年提交的软件作为你的软件,这个软件都会将这些提交标记为非常相似。
(a)、(b) 和 (c) 都超出了本课程可接受的范围——它们违反了学术诚信政策。此外,这种抄袭行为会阻碍你学习如何解决问题,从长远来看会对你不利。你编写自己的代码越多,学到的东西就越多。
请阅读合作政策文档,了解可接受的合作水平以及如何保护自己。该文档可以在 Submitty 的课程材料页面上找到。过度合作的处罚可高达:
- 家庭作业得0分并且
- 学期成绩再额外降低5%。
受到处罚的学生也将被禁止退出该课程。更严重的违规行为如盗用他人代码将导致该课程自动得F。第二次被发现学术诚信违规的学生将自动得到F。
通过提交你的家庭作业,你断言你 (a) 理解学术诚信政策,并且 (b) 没有违反它。
最后请注意,制定这项政策是为了应对本课程中可能出现的小部分问题。遵循上述策略并在执行过程中运用常识的学生不会在学术诚信方面遇到任何麻烦。
## 第1部分一分钱一个口香糖米奇40分
我们将进行一个销售口香糖的实验但需要做一些假设。假设你从自动售货机出售口香糖。售货机是立方体形状口香糖是球形。你每周检查一次售货机。目标是调整售货机的大小使其在每周开始时完全装满在你回来检查之前不会卖完口香糖并且在一周结束时不会留下太多变质的口香糖。我们假设所有的口香糖都整齐地排列因此沿立方体任何一个维度的口香糖数量就等于该维度的边长除以口香糖直径。例如如果边长是9.0口香糖的半径正好是0.5那么每个维度正好可以容纳9个口香糖整个售货机总共可容纳729个口香糖。这被称为立方晶格。
请完成以下任务:
1. 首先编写两个函数,`find_volume_sphere(radius)``find_volume_cube(side)`,分别用于计算给定半径的球体体积和给定边长的立方体体积。
2. 然后询问用户口香糖的半径和每周的销售量。
3. 计算售货机需要容纳的口香糖总数为每周销售量的1.25倍,并利用这个数据计算以口香糖个数为单位的售货机边长。提示:你知道口香糖的总数,在立方晶格中,每个维度可以容纳相同数量的口香糖,所以如果每个维度可以容纳 N 个口香糖,那么整个售货机可以容纳 N³ 个口香糖。数学模块的 `ceil` 函数总是向上取整,可能会有用。(我们不会切割口香糖来使它们适合售货机。)
4. 再计算几个值:考虑到你选择的尺寸,实际可以容纳多少个口香糖(记住,沿立方体的每个维度必须容纳整数个口香糖);立方体的体积;每个口香糖的体积;如果我们放入需要容纳的口香糖数量和实际可以容纳的数量,浪费的空间大小。
5. 使用 `.2f` 格式打印这些值所有浮点数保留2位小数。
在文件 `hw2 part1 output 01.txt``hw2 part1 output 02.txt`(需要从 Submitty 的课程材料部分下载 `hw02_files.zip` 文件,并将其解压缩到你的 HW 2 目录中)中提供了程序运行的两个示例(使用 Spyder IDE 运行时的样子)。
我们将测试你的代码是否符合上述值以及一系列不同的值。请充分测试你的代码,确保它能正常工作后,将其作为 `hw2 part1.py` 文件提交到 Submitty 作为家庭作业的第1部分。
## 第2部分找到隐藏的信息40分
编写一个程序,判断对于给定的字符串,简单的替换密码是否可逆。该程序应使用 `input` 要求用户输入一个包含句子的字符串。然后,程序应将字符串加密成密文,再解密密文,并将解密结果与原始句子进行比较。如果解密后的密文与原始句子匹配,则该操作在该字符串上是可逆的。否则,它是不可逆的。
在此过程中,程序应打印出密文、密文与原始句子之间的长度差(始终打印为正数)、解密后的密文以及一条简短消息,说明该操作是否可逆。
在文件 `hw2 part2 output 01.txt``hw2 part2 output 02.txt`(可以在 `hw02_files.zip` 文件中找到)中提供了程序运行的两个示例(使用 Spyder IDE 运行时的样子)。
加密规则基于一组字符串替换,它们应该按照以下确切顺序应用:
| 原始 | 替换 | 注释 |
|:----:|:----:|:-----|
| ' a' | '%4%' | 将空格后的任何'a'替换为'%4%' |
| 'he' | '7!' | 将所有出现的'he'替换为'7!' |
| 'e' | '9(*9(' | 将任何剩余的'e'替换为'9(*9(' |
| 'y' | '*%' | 将所有出现的'y'替换为'*%' |
| 'u' | '@@@' | 将所有出现的'u'替换为'@@@' |
| 'an' | '-?' | 将所有出现的'an'替换为'-?' |
| 'th' | '!@+3' | 将所有出现的'th'替换为'!@+3' |
| 'o' | '7654' | 将所有出现的'o'替换为'7654' |
| '9' | '2' | 将所有出现的'9'替换为'2' |
| 'ck' | '%4' | 将所有出现的'ck'替换为'%4' |
例如,"methane"的密文是 `m2(*2(!@+3-?2(*2(`。以下是加密过程:
```python
>>> 'methane'.replace('e','9(*9(')
'm9(*9(than9(*9('
>>> 'm9(*9(than9(*9('.replace('an','-?')
'm9(*9(th-?9(*9('
>>> 'm9(*9(th-?9(*9('.replace('th','!@+3')
'm9(*9(!@+3-?9(*9('
>>> 'm9(*9(!@+3-?9(*9('.replace('9', '2')
'm2(*2(!@+3-?2(*2('
```
解密将按相反顺序使用这些规则。
你的程序必须使用两个函数:
- 编写一个函数 `encrypt(word)`,它接受一个普通英语字符串作为参数,并返回它的密文版本(也是字符串)。
- 编写第二个函数 `decrypt(word)`,它执行相反的操作:接受密文字符串并返回它的普通英语版本。
这两个函数在结构上会非常相似,但它们使用字符串替换规则的顺序不同。现在,你可以通过先加密一个字符串,然后再解密来测试你的函数是否正确。如果替换规则没有歧义,结果应该与原始字符串相同。
使用这些函数来实现上述程序。我们将测试你的代码是否符合上述值以及一系列不同的值。
请充分测试你的代码,确保它能正常工作后,将其作为 `hw2 part2.py` 文件提交到 Submitty 作为家庭作业的第2部分。
## 第3部分你对家庭作业有何感想20分
在本部分作业中,你将实现一个非常简单的情感分析工具。虽然真正的工具使用自然语言处理,但它们都使用类似于我们在这里使用的词频统计。理解消息中的情感是许多人工智能工具的关键部分。
编写一个程序,要求用户输入一个包含句子的字符串。然后,程序将使用下面描述的两个函数计算句子的快乐程度和悲伤程度。如果快乐程度高于悲伤程度,那么句子的语气是快乐的。如果悲伤程度更高,那么句子的语气是悲伤的。否则,它是中性的。首先打印一行情感分析结果,其中 + 号的数量等于快乐词的数量,- 号的数量等于悲伤词的数量,然后给出一个简单的分析结论,找出并打印句子的语气。
在文件 `hw2 part3 output 01.txt``hw2 part3 output 02.txt`(可以在 `hw02_files.zip` 文件中找到)中提供了程序运行的两个示例(使用 Spyder IDE 101 运行时的样子)。
为了实现这一点,你将编写一个名为 `number_happy(sentence)` 的函数它返回给定字符串中称为句子的快乐词的数量。为此统计以下6个词的出现次数laugh、happiness、love、excellent、good、smile。下面是此函数的一个示例运行
```python
>>> number_happy("I laughed and laughed at her excellent joke.")
3
```
这是因为快乐词的数量是3laugh 出现了两次)。即使句子中有大小写词和句子开头及结尾有额外的空格,你的代码也应该能正常工作。
```python
>>> number_happy(" Happiness is the state of a student who started homework early. ")
1
```
接下来,编写第二个函数 `number_sad(sentence)`它的工作方式相同但统计句子中以下6个悲伤词的数量bad、sad、terrible、horrible、problem、hate。
```python
>>> number_sad("Dr. Horrible's Sing-Along Blog is an excellent show.")
1
>>> number_sad("Alexander and the Terrible, Horrible, No Good, Very Bad Day")
3
```
当然每个类别的词语远不止6个。在未来的课程中我们将学习如何使用文件来读取词语并用列表来处理它们。
请充分测试你的代码,确保它能正常工作后,将其作为 `hw2 part3.py` 文件提交到 Submitty 作为家庭作业的第3部分。
## 支持文件
{{< link href="HW2.zip" content="HW2.zip" title="下载 HW2.zip" download="HW2.zip" card=true >}}
***
## 参考答案
### hw2_part1.py
```python
import math
#Functions
def find_volume_sphere(radius):
"""Calculates the volume of a sphere with a given radius"""
return (4/3) * math.pi * radius**3
def find_volume_cube(side):
"""Calculates the volume of a cube with a given side length"""
return side**3
#Input
radius = str(input("Enter the gum ball radius (in.) => ").strip())
print(radius)
weekly_sales = str(input("Enter the weekly sales => ").strip())
print(weekly_sales, "\n")
#Calculations
target_sales = math.ceil(float(weekly_sales) * 1.25)
edge_gumballs = math.ceil(target_sales**(1/3))
edge_length = edge_gumballs * float(radius)*2
edge_gumballs_max = edge_length / (float(radius)*2 + 0.0000000000000001)
#Aviod ZeroDivisionError by adding a small number to the radius
number_extra_gumballs = math.ceil(edge_gumballs_max**3 - target_sales)
volume_gumballs = find_volume_sphere(float(radius))
volume_cube = find_volume_cube(edge_length)
volume_wasted_target = volume_cube - volume_gumballs * target_sales
volume_wasted_full = volume_cube - volume_gumballs * (edge_gumballs_max) ** 3
#Print
print("The machine needs to hold", str(edge_gumballs), "gum balls along each edge.")
print("Total edge length is", "{:.2f}".format(edge_length), "inches.")
print("Target sales were", str(target_sales) + ", but the machine will hold", str(int(number_extra_gumballs)), "extra gum balls.")
print("Wasted space is", "{:.2f}".format(volume_wasted_target), "cubic inches with the target number of gum balls,")
print("or", "{:.2f}".format(volume_wasted_full), "cubic inches if you fill up the machine.")
```
### hw2_part2.py
```python
user_input = input("Enter a string to encode ==> ").strip()
print(user_input, "\n")
#Replacing
def encrypt(word):
word = word.replace(" a", "%4%")
word = word.replace("he", "7!")
word = word.replace("e", "9(*9(")
word = word.replace("y", "*%$")
word = word.replace("u", "@@@")
word = word.replace("an", "-?")
word = word.replace("th", "!@+3")
word = word.replace("o", "7654")
word = word.replace("9", "2")
word = word.replace("ck", "%4")
return word
#Calculation
length_difference = abs(len(user_input) - len(encrypt(user_input)))
#Decoding
def decrypt(word):
word = word.replace("%4", "ck")
word = word.replace("2", "9")
word = word.replace("7654", "o")
word = word.replace("!@+3", "th")
word = word.replace("-?", "an")
word = word.replace("@@@", "u")
word = word.replace("*%$", "y")
word = word.replace("9(*9(", "e")
word = word.replace("7!", "he")
word = word.replace("%4%", " a")
return word
#Printing
print("Encrypted as ==>", encrypt(user_input))
print("Difference in length ==>", str(length_difference))
print("Deciphered as ==>", decrypt(encrypt(user_input)))
if user_input == decrypt(encrypt(user_input)):
print("Operation is reversible on the string.")
else:
print("Operation is not reversible on the string.")
```
### hw2_part3.py
```python
def number_happy(sentence):
happy_words = ["laugh", "happiness", "love", "excellent", "good", "smile"]
sentence = sentence.lower()
#sentence = sentence.strip()
#sentence = sentence.split()
count = 0
for word in happy_words:
count += sentence.count(word)
return count
def number_sad(sentence):
sad_words = ["bad", "sad", "terrible", "horrible", "problem", "hate"]
sentence = sentence.lower()
#sentence = sentence.strip()
#sentence = sentence.split()
count = 0
for word in sad_words:
count += sentence.count(word)
return count
#Get user input
#sentence = "I laughed and laughed at her excellent joke."
sentence = input("Enter a sentence => ").strip()
#Print
#print(number_happy(sentence))
print(sentence)
print("Sentiment: " + ("+" * number_happy(sentence)) + ("-" * number_sad(sentence)))
if number_happy(sentence) > number_sad(sentence):
print("This is a happy sentence.")
elif number_happy(sentence) == number_sad(sentence):
print("This is a neutral sentence.")
else:
print("This is a sad sentence.")
```

View File

@@ -20,6 +20,8 @@ tags:
categories:
- Stable Diffusion
- 资源分享
collections:
- 元素法典
hiddenFromHomePage: false
hiddenFromSearch: false
hiddenFromRss: false

View File

@@ -20,6 +20,8 @@ tags:
categories:
- Stable Diffusion
- 资源分享
collections:
- 元素法典
hiddenFromHomePage: false
hiddenFromSearch: false
hiddenFromRss: false

View File

@@ -20,6 +20,8 @@ tags:
categories:
- Stable Diffusion
- 资源分享
collections:
- 元素法典
hiddenFromHomePage: false
hiddenFromSearch: false
hiddenFromRss: false

View File

@@ -0,0 +1,14 @@
---
title: 简历 - 周锦山
subtitle:
date: 2024-03-12T17:40:26-04:00
slug: resume
description:
keywords:
draft: true
comment: false
math: false
lightgallery: false
---

4
data/friends.yml Normal file
View File

@@ -0,0 +1,4 @@
- nickname: KnowsCount
avatar: knowscount-logo.webp
url: https://github.com/KnowsCount
description: I make computers beep-boop.

View File

@@ -0,0 +1,351 @@
{{- $cdn := .Scratch.Get "cdn" | default dict -}}
{{- $fingerprint := .Scratch.Get "fingerprint" -}}
{{- $comment := .Scratch.Get "comment" | default dict -}}
{{- $commentConfig := dict "enable" false -}}
{{- if $comment.enable -}}
{{- $commentConfig = dict "enable" true "expired" (.Scratch.Get "commentExpired" | default false) -}}
<div id="comments">
{{- /* Artalk Comment System */ -}}
{{/*
TODO next version to support new config for Artalk
https://artalk.js.org/guide/frontend/config.html#评论分页
https://artalk.js.org/guide/frontend/config.html#内容限高
*/}}
{{- $artalk := $comment.artalk | default dict -}}
{{- if $artalk.enable -}}
<div id="artalk" class="comment"></div>
{{- $source := $cdn.artalkCSS | default "https://artalk.jamesflare.com/dist/Artalk.css" -}}
{{- dict "Source" $source "Minify" true "Fingerprint" $fingerprint | dict "Scratch" .Scratch "Data" | partial "scratch/style.html" -}}
{{- $source := $cdn.artalkJS | default "https://artalk.jamesflare.com/dist/Artalk.js" -}}
{{- dict "Source" $source "Fingerprint" $fingerprint | dict "Scratch" .Scratch "Data" | partial "scratch/script.html" -}}
{{- $commentConfig = dict "el" "#artalk" "pageKey" .Permalink "pageTitle" .Title "pvEl" "artalk-visitor-count" "countEl" "artalk-comment-count" | dict "artalk" | merge $commentConfig -}}
{{- if (eq $artalk.locale "") | and (eq $.Site.LanguageCode "en") -}}
{{- $artalk = dict "locale" "en-US" | merge $artalk -}}
{{- end -}}
{{- $commentConfig = dict "locale" ($artalk.locale | default $.Site.LanguageCode | default "auto") | dict "artalk" | merge $commentConfig -}}
{{- with .Site.Params.gravatar -}}
{{/* See https://artalk.js.org/guide/frontend/config.html#gravatar-params */}}
{{- $commentConfig = dict "mirror" .Host "params" (printf "d=%v&s=240" .Style) | dict "gravatar" | dict "artalk" | merge $commentConfig -}}
{{- end -}}
{{- with $artalk.server -}}
{{- $commentConfig = dict "server" . | dict "artalk" | merge $commentConfig -}}
{{- end -}}
{{- with $artalk.site -}}
{{- $commentConfig = dict "site" . | dict "artalk" | merge $commentConfig -}}
{{- end -}}
{{- with $artalk.placeholder -}}
{{- $commentConfig = dict "placeholder" . | dict "artalk" | merge $commentConfig -}}
{{- end -}}
{{- with $artalk.nocomment -}}
{{- $commentConfig = dict "noComment" . | dict "artalk" | merge $commentConfig -}}
{{- end -}}
{{- with $artalk.sendbtn -}}
{{- $commentConfig = dict "sendBtn" . | dict "artalk" | merge $commentConfig -}}
{{- end -}}
{{- with $artalk.editortravel -}}
{{- $commentConfig = dict "editorTravel" . | dict "artalk" | merge $commentConfig -}}
{{- end -}}
{{- if ne $artalk.flatmode nil -}}
{{- $commentConfig = dict "flatMode" $artalk.flatmode | dict "artalk" | merge $commentConfig -}}
{{- end -}}
{{- with $artalk.nestmax -}}
{{- $commentConfig = dict "nestMax" . | dict "artalk" | merge $commentConfig -}}
{{- end -}}
{{- with $artalk.nestsort -}}
{{- $commentConfig = dict "nestSort" . | dict "artalk" | merge $commentConfig -}}
{{- end -}}
{{- with $artalk.lightgallery -}}
{{- $commentConfig = dict "lightgallery" . | dict "artalk" | merge $commentConfig -}}
{{- end -}}
{{- if eq $artalk.vote false -}}
{{- $commentConfig = dict "vote" false | dict "artalk" | merge $commentConfig -}}
{{- end -}}
{{- with $artalk.votedown -}}
{{- $commentConfig = dict "voteDown" . | dict "artalk" | merge $commentConfig -}}
{{- end -}}
{{- if eq $artalk.uabadge false -}}
{{- $commentConfig = dict "uaBadge" false | dict "artalk" | merge $commentConfig -}}
{{- end -}}
{{- if eq $artalk.listsort false -}}
{{- $commentConfig = dict "listSort" false | dict "artalk" | merge $commentConfig -}}
{{- end -}}
{{- if eq $artalk.imgupload false -}}
{{- $commentConfig = dict "imgUpload" false | dict "artalk" | merge $commentConfig -}}
{{- end -}}
{{- if eq $artalk.preview false -}}
{{- $commentConfig = dict "preview" false | dict "artalk" | merge $commentConfig -}}
{{- end -}}
{{- if eq $artalk.versioncheck false -}}
{{- $commentConfig = dict "versionCheck" false | dict "artalk" | merge $commentConfig -}}
{{- end -}}
<noscript>
Please enable JavaScript to view the comments powered by <a href="https://github.com/ArtalkJS/Artalk" rel="external nofollow noopener noreferrer">Artalk</a>.
</noscript>
{{- end -}}
{{- /* Disqus Comment System */ -}}
{{- $disqus := $comment.disqus | default dict -}}
{{- if $disqus.enable -}}
<div id="disqus_thread" class="comment"></div>
{{- $source := printf "https://%v.disqus.com/embed.js" $disqus.shortname -}}
{{- dict "Source" $source "Defer" true | dict "Scratch" .Scratch "Data" | partial "scratch/script.html" -}}
<noscript>
Please enable JavaScript to view the comments powered by <a href="https://disqus.com/?ref_noscript" rel="external nofollow noopener noreferrer">Disqus</a>.
</noscript>
{{- end -}}
{{- /* Gitalk Comment System */ -}}
{{- $gitalk := $comment.gitalk | default dict -}}
{{- if $gitalk.enable -}}
<div id="gitalk" class="comment"></div>
{{- $source := $cdn.gitalkCSS | default "lib/gitalk/gitalk.css" -}}
{{- dict "Source" $source "Minify" true "Fingerprint" $fingerprint | dict "Scratch" .Scratch "Data" | partial "scratch/style.html" -}}
{{- $source := $cdn.gitalkJS | default "lib/gitalk/gitalk.min.js" -}}
{{- dict "Source" $source "Fingerprint" $fingerprint | dict "Scratch" .Scratch "Data" | partial "scratch/script.html" -}}
{{- $commentConfig = dict "id" .Date "title" .Title "clientID" $gitalk.clientId "clientSecret" $gitalk.clientSecret "repo" $gitalk.repo "owner" $gitalk.owner "admin" (slice $gitalk.owner) | dict "gitalk" | merge $commentConfig -}}
<noscript>
Please enable JavaScript to view the comments powered by <a href="https://github.com/gitalk/gitalk" rel="external nofollow noopener noreferrer">Gitalk</a>.
</noscript>
{{- end -}}
{{- /* Valine Comment System */ -}}
{{- $valine := $comment.valine | default dict -}}
{{- if $valine.enable -}}
<div id="valine" class="comment"></div>
{{- $options := dict "targetPath" "lib/valine/valine.min.css" -}}
{{- dict "Source" "lib/valine/valine.scss" "ToCSS" $options | dict "Scratch" .Scratch "Data" | partial "scratch/style.html" -}}
{{- $source := $cdn.valineJS | default "lib/valine/Valine.min.js" -}}
{{- dict "Source" $source "Fingerprint" $fingerprint | dict "Scratch" .Scratch "Data" | partial "scratch/script.html" -}}
{{- $commentConfig = dict "el" "#valine" "appId" $valine.appId "appKey" $valine.appKey "lang" ($valine.lang | default (T "valineLang")) "visitor" $valine.visitor "recordIP" $valine.recordIP "placeholder" ($valine.placeholder | default (T "comment.valinePlaceholder")) "highlight" (ne $valine.highlight false) "enableQQ" $valine.enableQQ | dict "valine" | merge $commentConfig -}}
{{- with $valine.avatar -}}
{{- $commentConfig = dict "avatar" . | dict "valine" | merge $commentConfig -}}
{{- end -}}
{{- with $valine.meta -}}
{{- $commentConfig = dict "meta" . | dict "valine" | merge $commentConfig -}}
{{- end -}}
{{- with $valine.requiredFields -}}
{{- $commentConfig = dict "requiredFields" . | dict "valine" | merge $commentConfig -}}
{{- end -}}
{{- with $valine.pageSize -}}
{{- $commentConfig = dict "pageSize" . | dict "valine" | merge $commentConfig -}}
{{- end -}}
{{- with $valine.serverURLs -}}
{{- $commentConfig = dict "serverURLs" . | dict "valine" | merge $commentConfig -}}
{{- end -}}
{{- $commentConfig = $valine.emoji | default "google.yml" | printf "lib/valine/emoji/%v" | resources.Get | transform.Unmarshal | dict "valine" | merge $commentConfig -}}
<noscript>
Please enable JavaScript to view the comments powered by <a href="https://valine.js.org/" rel="external nofollow noopener noreferrer">Valine</a>.
</noscript>
{{- end -}}
{{- /* Waline Comment System */ -}}
{{- /* see https://waline.js.org/reference/component.html */ -}}
{{- /* TODO adapted to Waline 2.15.8 */ -}}
{{- $waline := $comment.waline | default dict -}}
{{- if $waline.enable -}}
<div id="waline" class="comment"></div>
{{- $source := $cdn.walineCSS | default "lib/waline/waline.css" -}}
{{- dict "Source" $source "Fingerprint" $fingerprint | dict "Scratch" .Scratch "Data" | partial "scratch/style.html" -}}
{{- $source := $cdn.walineJS | default "lib/waline/waline.js" -}}
{{- dict "Source" $source "Fingerprint" $fingerprint "Defer" true | dict "Scratch" .Scratch "Data" | partial "scratch/script.html" -}}
{{- $commentConfig = dict "el" "#waline" "serverURL" $waline.serverURL "lang" .Lang "dark" "body[data-theme='dark']" | dict "waline" | merge $commentConfig -}}
{{- $commentConfig = dict "copyright" true "imageUploader" false "highlighter" false "texRenderer" false "search" false | dict "waline" | merge $commentConfig -}}
{{- with $waline.pageview -}}
{{- $commentConfig = dict "pageview" . | dict "waline" | merge $commentConfig -}}
{{- end -}}
{{- with $waline.emoji -}}
{{- $commentConfig = dict "emoji" . | dict "waline" | merge $commentConfig -}}
{{- end -}}
{{- with $waline.meta -}}
{{- $commentConfig = dict "meta" . | dict "waline" | merge $commentConfig -}}
{{- end -}}
{{- with $waline.requiredMeta -}}
{{- $commentConfig = dict "requiredMeta" . | dict "waline" | merge $commentConfig -}}
{{- end -}}
{{- with $waline.login -}}
{{- $commentConfig = dict "login" . | dict "waline" | merge $commentConfig -}}
{{- end -}}
{{- with $waline.wordLimit -}}
{{- $commentConfig = dict "wordLimit" . | dict "waline" | merge $commentConfig -}}
{{- end -}}
{{- with $waline.pageSize -}}
{{- $commentConfig = dict "pageSize" . | dict "waline" | merge $commentConfig -}}
{{- end -}}
{{- with $waline.imageUploader -}}
{{- $commentConfig = dict "imageUploader" . | dict "waline" | merge $commentConfig -}}
{{- end -}}
{{- with $waline.highlighter -}}
{{- $commentConfig = dict "highlighter" . | dict "waline" | merge $commentConfig -}}
{{- end -}}
{{- with $waline.comment -}}
{{- $commentConfig = dict "comment" . | dict "waline" | merge $commentConfig -}}
{{- end -}}
{{- with $waline.texRenderer -}}
{{- $commentConfig = dict "texRenderer" . | dict "waline" | merge $commentConfig -}}
{{- end -}}
{{- with $waline.search -}}
{{- $commentConfig = dict "search" . | dict "waline" | merge $commentConfig -}}
{{- end -}}
{{- with $waline.recaptchaV3Key -}}
{{- $commentConfig = dict "recaptchaV3Key" . | dict "waline" | merge $commentConfig -}}
{{- end -}}
{{- with $waline.reaction -}}
{{- $commentConfig = dict "reaction" . | dict "waline" | merge $commentConfig -}}
{{- end -}}
<noscript>
Please enable JavaScript to view the comments powered by <a href="https://waline.js.org/" rel="external nofollow noopener noreferrer">Waline</a>.
</noscript>
{{- end -}}
{{- /* Facebook Comment System */ -}}
{{- $facebook := $comment.facebook | default dict -}}
{{- if $facebook.enable -}}
<div id="fb-root" class="comment"></div>
<div
class="fb-comments"
data-href="{{ .Permalink }}"
data-width="{{ $facebook.width }}"
data-numposts="{{ $facebook.numPosts }}"
></div>
{{- $source := printf "https://connect.facebook.net/%v/sdk.js#xfbml=1&version=v5.0&appId=%v&autoLogAppEvents=1" ($facebook.languageCode | default (T "comment.facebookLanguageCode")) $facebook.appId -}}
{{- dict "Source" $source "Defer" true | dict "Scratch" .Scratch "Data" | partial "scratch/script.html" -}}
<noscript>
Please enable JavaScript to view the comments powered by <a href="https://developers.facebook.com/docs/plugins/comments/" rel="external nofollow noopener noreferrer">Facebook</a>.
</noscript>
{{- end -}}
{{- /* Telegram Comments System */ -}}
{{- $telegram := $comment.telegram | default dict -}}
{{- if $telegram.enable -}}
<div id="telegram-comments" class="comment"></div>
{{- $attr := printf `data-comments-app-website="%v"` $telegram.siteID -}}
{{- $attr = printf `%v data-limit="%v"` $attr ($telegram.limit | default 5) -}}
{{- with $telegram.height -}}
{{- $attr = printf `%v data-height="%v"` $attr . -}}
{{- end -}}
{{- with $telegram.color -}}
{{- $attr = printf `%v data-color="%v"` $attr . -}}
{{- end -}}
{{- if $telegram.colorful -}}
{{- $attr = printf `%v data-colorful="1"` $attr -}}
{{- end -}}
{{- if $telegram.dislikes -}}
{{- $attr = printf `%v data-dislikes="1"` $attr -}}
{{- end -}}
{{- if $telegram.outlined -}}
{{- $attr = printf `%v data-outlined="1"` $attr -}}
{{- end -}}
{{- dict "Source" "https://comments.app/js/widget.js?2" "Defer" true "Attr" $attr | dict "Scratch" .Scratch "Data" | partial "scratch/script.html" -}}
<noscript>
Please enable JavaScript to view the comments powered by <a href="https://comments.app/" rel="external nofollow noopener noreferrer">Telegram Comments</a>.
</noscript>
{{- end -}}
{{- /* Commento Comment System */ -}}
{{- $commento := $comment.commento | default dict -}}
{{- if $commento.enable -}}
<div id="commento" class="comment"></div>
{{- dict "Source" "https://cdn.commento.io/js/commento.js" "Defer" true | dict "Scratch" .Scratch "Data" | partial "scratch/script.html" -}}
<noscript>
Please enable JavaScript to view the comments powered by <a href="https://commento.io/" rel="external nofollow noopener noreferrer">Commento</a>.
</noscript>
{{- end -}}
{{- /* Utterances Comment System */ -}}
{{- $utterances := $comment.utterances | default dict -}}
{{- if $utterances.enable -}}
<div id="utterances" class="comment"></div>
{{- $commentConfig = dict "repo" $utterances.repo | dict "utterances" | merge $commentConfig -}}
{{- $commentConfig = $utterances.issueTerm | default "pathname" | dict "issueTerm" | dict "utterances" | merge $commentConfig -}}
{{- $commentConfig = dict "label" $utterances.label | dict "utterances" | merge $commentConfig -}}
{{- $commentConfig = $utterances.lightTheme | default "github-light" | dict "lightTheme" | dict "utterances" | merge $commentConfig -}}
{{- $commentConfig = $utterances.darkTheme | default "github-dark" | dict "darkTheme" | dict "utterances" | merge $commentConfig -}}
<noscript>
Please enable JavaScript to view the comments powered by <a href="https://utteranc.es/" rel="external nofollow noopener noreferrer">Utterances</a>.
</noscript>
{{- end -}}
{{- /* Twikoo Comment System */ -}}
{{- /* TODO review lang config https://github.com/twikoojs/twikoo/blob/main/src/client/utils/i18n/index.js */ -}}
{{- $twikoo := $comment.twikoo | default dict -}}
{{- if $twikoo.enable -}}
<div id="twikoo"></div>
{{- $source := $cdn.twikooJS | default "lib/twikoo/twikoo.all.min.js" -}}
{{- dict "Source" $source "Fingerprint" $fingerprint "Defer" true | dict "Scratch" .Scratch "Data" | partial "scratch/script.html" -}}
{{- $commentConfig = dict "el" "#twikoo" "envId" $twikoo.envId "lang" .Lang | dict "twikoo" | merge $commentConfig -}}
{{- with $twikoo.region -}}
{{- $commentConfig = dict "region" . | dict "twikoo" | merge $commentConfig -}}
{{- end -}}
{{- with $twikoo.path -}}
{{- $commentConfig = dict "path" . | dict "twikoo" | merge $commentConfig -}}
{{- end -}}
{{- with $twikoo.commentCount -}}
{{- $commentConfig = dict "commentCount" . | dict "twikoo" | merge $commentConfig -}}
{{- end -}}
{{- with $twikoo.lightgallery -}}
{{- $commentConfig = dict "lightgallery" . | dict "twikoo" | merge $commentConfig -}}
{{- end -}}
<noscript>
Please enable JavaScript to view the comments powered by <a href="https://twikoo.js.org/" rel="external nofollow noopener noreferrer">Twikoo</a>.
</noscript>
{{- end -}}
{{- /* Giscus Comment System */ -}}
{{- $giscus := $comment.giscus | default dict -}}
{{- if $giscus.enable -}}
{{- with $giscus -}}
{{- $commentConfig = .lightTheme | default "light" | dict "lightTheme" | dict "giscus" | merge $commentConfig -}}
{{- $commentConfig = .darkTheme | default "dark" | dict "darkTheme" | dict "giscus" | merge $commentConfig -}}
<div id="giscus">
<script
src="https://giscus.app/client.js"
data-repo="{{ .Repo }}"
data-repo-id="{{ .RepoId }}"
data-category="{{ .Category }}"
data-category-id="{{ .CategoryId }}"
data-mapping="{{ .Mapping }}"
data-strict="{{ .Strict }}"
{{ if .Term }}data-term="{{ .Term }}"{{ end }}
data-theme="preferred_color_scheme"
data-reactions-enabled="{{ .ReactionsEnabled }}"
data-emit-metadata="{{ .EmitMetadata }}"
data-input-position="{{ .InputPosition }}"
data-lang="{{ $.Site.LanguageCode }}"
{{ if ne .LazyLoad false }}data-loading="lazy"{{ end }}
crossorigin="anonymous"
async
defer
></script>
</div>
<noscript>
Please enable JavaScript to view the comments powered by <a href="https://giscus.app/" rel="external nofollow noopener noreferrer">giscus</a>.
</noscript>
{{- end -}}
{{- end -}}
</div>
{{- /* lightgallery for Artalk and Twikoo */ -}}
{{- $params := .Scratch.Get "params" -}}
{{- if not $params.lightgallery | and (($artalk.enable | and $artalk.lightgallery) | or ($twikoo.enable | and $twikoo.lightgallery)) -}}
{{- $source := $cdn.lightgalleryCSS | default "lib/lightgallery/css/lightgallery-bundle.min.css" -}}
{{- dict "Source" $source "Fingerprint" $fingerprint | dict "Scratch" .Scratch "Data" | partial "scratch/style.html" -}}
{{- $source := $cdn.lightgalleryJS | default "lib/lightgallery/lightgallery.min.js" -}}
{{- dict "Source" $source "Fingerprint" $fingerprint "Defer" true | dict "Scratch" .Scratch "Data" | partial "scratch/script.html" -}}
{{- $source := $cdn.lightgalleryThumbnailJS | default "lib/lightgallery/plugins/thumbnail/lg-thumbnail.min.js" -}}
{{- dict "Source" $source "Fingerprint" $fingerprint "Defer" true | dict "Scratch" .Scratch "Data" | partial "scratch/script.html" -}}
{{- $source := $cdn.lightgalleryZoomJS | default "lib/lightgallery/plugins/zoom/lg-zoom.min.js" -}}
{{- dict "Source" $source "Fingerprint" $fingerprint "Defer" true | dict "Scratch" .Scratch "Data" | partial "scratch/script.html" -}}
{{- end -}}
{{- /* KaTeX for Twikoo */ -}}
{{- $math := .Scratch.Get "math" -}}
{{- if not $math.enable | and $twikoo.enable | and $twikoo.katex -}}
{{- $source := $cdn.katexCSS | default "lib/katex/katex.min.css" -}}
{{- dict "Source" $source "Fingerprint" $fingerprint | dict "Scratch" .Scratch "Data" | partial "scratch/style.html" -}}
{{- $source := $cdn.katexJS | default "lib/katex/katex.min.js" -}}
{{- dict "Source" $source "Fingerprint" $fingerprint "Defer" true | dict "Scratch" .Scratch "Data" | partial "scratch/script.html" -}}
{{- $source := $cdn.katexAutoRenderJS | default "lib/katex/auto-render.min.js" -}}
{{- dict "Source" $source "Fingerprint" $fingerprint "Defer" true | dict "Scratch" .Scratch "Data" | partial "scratch/script.html" -}}
{{- end -}}
{{- end -}}
{{- dict "comment" $commentConfig | dict "config" | merge (.Scratch.Get "this") | .Scratch.Set "this" -}}

223
layouts/posts/single.html Normal file
View File

@@ -0,0 +1,223 @@
{{- define "title" -}}
{{- .Title -}}
{{- if .Site.Params.withSiteTitle }} {{ .Site.Params.titleDelimiter }} {{ .Site.Title }}{{- end -}}
{{- end -}}
{{- define "content" -}}
{{- $params := .Scratch.Get "params" -}}
{{- $toc := .Scratch.Get "toc" -}}
{{- $tocEmpty := eq .TableOfContents `<nav id="TableOfContents"></nav>` -}}
<aside class="aside-collection animate__animated animate__fadeIn animate__faster" aria-label="{{ T "collections" }}">
{{- /* Collection List */ -}}
{{- partial "single/collection-list.html" . -}}
{{- /* Custom part for aside */ -}}
{{- partial (.Scratch.Get "customFilePath").aside . -}}
</aside>
<article class="page single">
<div class="header">
{{- /* Title */ -}}
<h1 class="single-title animate__animated animate__flipInX">
{{- $repost := $params.repost | default dict -}}
{{- with $repost -}}
{{- if eq .Enable true -}}
{{- $icon := dict "Class" "fa-solid fa-share fa-fw" -}}
{{- $title := cond (hasPrefix .Url "http") (printf "%v -> %v" (T "single.repost") .Url ) (T "single.repost") -}}
{{- if hasPrefix .Url "http" -}}
{{ dict "Destination" .Url "Icon" $icon "Class" "icon-repost" "Title" $title | partial "plugin/link.html" -}}
{{- else -}}
<span title="{{ $title }}" class="icon-repost">{{- $icon | partial "plugin/icon.html" -}}</span>
{{- end -}}
{{- end -}}
{{- end -}}
<span>{{- .Title -}}</span>
</h1>
{{- /* Subtitle */ -}}
{{- with $params.subtitle -}}<p class="single-subtitle animate__animated animate__fadeIn">{{ . }}</p>{{- end -}}
</div>
{{- /* Meta */ -}}
<div class="post-meta">
<div class="post-meta-line">
{{- partial "single/post-author.html" . -}}
{{- partial "single/post-included-in.html" . -}}
</div>
{{- /* TODO add disclaimer or space between meta and content */ -}}
<div class="post-meta-line">
{{- with .PublishDate | dateFormat (.Site.Params.dateformat | default "2006-01-02") -}}
<span title="{{ dict "Date" ("2006-01-02 15:04:05" | $.PublishDate.Format) | T "single.publishedOnDate" }}">
{{- dict "Class" "fa-solid fa-calendar-days fa-fw me-1" | partial "plugin/icon.html" -}}
{{- printf `<time datetime="%v">%v</time>` . . | safeHTML -}}
</span>&nbsp;
{{- end -}}
{{- if ne .Lastmod.Unix .PublishDate.Unix }}
{{- with .Lastmod | dateFormat (.Site.Params.dateformat | default "2006-01-02") -}}
<span title="{{ dict "Date" ("2006-01-02 15:04:05" | $.Lastmod.Format) | T "single.updatedOnDate" }}">
{{- dict "Class" "fa-regular fa-calendar-check fa-fw me-1" | partial "plugin/icon.html" -}}
{{- printf `<time datetime="%v">%v</time>` . . | safeHTML -}}
</span>&nbsp;
{{- end -}}
{{- end -}}
{{- if $params.wordCount -}}
<span title="{{ T "single.wordCount" .WordCount }}">
{{- dict "Class" "fa-solid fa-pencil-alt fa-fw me-1" | partial "plugin/icon.html" -}}
{{- T "single.fuzzyWordCount" .FuzzyWordCount -}}
</span>&nbsp;
{{- end -}}
{{- if $params.readingTime -}}
<span>
{{- dict "Class" "fa-regular fa-clock fa-fw me-1" | partial "plugin/icon.html" -}}
{{- T "single.readingTime" .ReadingTime -}}
</span>&nbsp;
{{- end -}}
{{- /* If the article expires, close the comment or not */ -}}
{{- $expirationReminder := $params.expirationReminder | default dict -}}
{{- if
$expirationReminder.enable
| and (gt (div (sub now.Unix .Lastmod.Unix) 86400) ($expirationReminder.warning | default 180))
| and $expirationReminder.closeComment -}}
{{- .Scratch.Set "commentExpired" true -}}
{{- end -}}
<!--{{- $comment := .Scratch.Get "comment" | default dict -}}
{{- $visitorIcon := dict "Class" "fa-regular fa-eye fa-fw me-1" | partial "plugin/icon.html" -}}
{{- $commentIcon := dict "Class" "fa-regular fa-comments fa-fw me-1" | partial "plugin/icon.html" -}}
{{- /* Visitor Count */ -}}
{{- if $comment.enable -}}
{{- if $comment.artalk.enable -}}
<span class="comment-visitors" data-flag-title="{{ .Title }}">
{{ $visitorIcon }}<span class="artalk-visitor-count" data-page-key="{{ .RelPermalink }}">-</span>&nbsp;{{ T "single.views" }}
</span>&nbsp;
{{- else if ($comment.valine.enable | and $comment.valine.visitor) -}}
<span id="{{ .RelPermalink }}" class="leancloud_visitors comment-visitors" data-flag-title="{{ .Title }}">
{{ $visitorIcon }}<span class="leancloud-visitors-count">-</span>&nbsp;{{ T "single.views" }}
</span>&nbsp;
{{- else if $comment.waline.enable | and $comment.waline.pageview -}}
<span class="comment-visitors" data-flag-title="{{ .Title }}">
{{ $visitorIcon }}<span data-path="{{ .RelPermalink }}" class="waline-pageview-count">-</span>&nbsp;{{ T "single.views" }}
</span>&nbsp;
{{- else if $comment.twikoo.enable | and $comment.twikoo.visitor -}}
<span id="{{ .RelPermalink }}" class="comment-visitors" data-flag-title="{{ .Title }}">
{{ $visitorIcon }}<span id="twikoo_visitors">-</span>&nbsp;{{ T "single.views" }}
</span>&nbsp;
{{- else if .Site.Params.ibruce.enable | and .Site.Params.ibruce.enablePost -}}
<span id="busuanzi_container_page_pv" class="busuanzi_visitors comment-visitors" data-flag-title="{{ .Title }}">
{{ $visitorIcon }}<span id="busuanzi_value_page_pv">-</span>&nbsp;{{ T "single.views" }}
</span>&nbsp;
{{- end -}}
{{- else if .Site.Params.ibruce.enable | and .Site.Params.ibruce.enablePost -}}
<span id="busuanzi_container_page_pv" class="busuanzi_visitors comment-visitors" data-flag-title="{{ .Title }}">
{{ $visitorIcon }}<span id="busuanzi_value_page_pv">-</span>&nbsp;{{ T "single.views" }}
</span>&nbsp;
{{- end -}}
{{- /* Comment Count */ -}}
{{- if $comment.enable -}}
{{- if $comment.artalk.enable -}}
<span class="comment-count" data-flag-title="{{ .Title }}">
{{ $commentIcon }}<span class="artalk-comment-count" data-page-key="{{ .RelPermalink }}">-</span>&nbsp;{{ T "single.comments" }}
</span>&nbsp;
{{- else if $comment.valine.enable | and $comment.valine.commentCount -}}
<span class="comment-count" data-flag-title="{{ .Title }}">
{{ $commentIcon }}<span data-xid="{{ .RelPermalink }}" class="valine-comment-count">-</span>&nbsp;{{ T "single.comments" }}
</span>&nbsp;
{{- else if $comment.waline.enable | and $comment.waline.comment -}}
<span class="comment-count" data-flag-title="{{ .Title }}">
{{ $commentIcon }}<span data-path="{{ .RelPermalink }}" class="waline-comment-count">-</span>&nbsp;{{ T "single.comments" }}
</span>&nbsp;
{{- else if $comment.twikoo.enable | and $comment.twikoo.commentCount -}}
<span id="{{ .RelPermalink }}" class="comment-count" data-flag-title="{{ .Title }}">
{{ $commentIcon }}<span id="twikoo-comment-count">-</span>&nbsp;{{ T "single.comments" }}
</span>&nbsp;
{{- end -}}
{{- end -}}-->
</div>
</div>
{{- /* Featured image */ -}}
{{- $image := $params.featuredimage -}}
{{- with .Resources.GetMatch "featured-image" -}}
{{- $image = .RelPermalink -}}
{{- end -}}
{{- with $image -}}
<div class="featured-image">
{{- dict "Src" . "Title" $.Description | partial "plugin/image.html" -}}
</div>
{{- end -}}
{{- /* Static TOC */ -}}
{{- if (ne $toc.enable false) | and (ne $tocEmpty true) -}}
<div class="details toc{{ with $params.password }} encrypted-hidden{{ end }}" id="toc-static" data-kept="{{ if $toc.keepStatic }}true{{ else }}false{{ end }}">
<div class="details-summary toc-title">
<span>{{ T "single.contents" }}</span>
<span>{{ dict "Class" "details-icon fa-solid fa-angle-right" | partial "plugin/icon.html" }}</span>
</div>
<div class="details-content toc-content" id="toc-content-static">
{{- dict "Content" .TableOfContents "Ruby" $params.ruby "Fraction" $params.fraction "Fontawesome" $params.fontawesome | partial "function/content.html" | safeHTML -}}
</div>
</div>
{{- end -}}
{{- /* Content */ -}}
{{- $content := dict "Content" .Content "Ruby" $params.ruby "Fraction" $params.fraction "Fontawesome" $params.fontawesome | partial "function/content.html" | safeHTML -}}
{{- if $params.password -}}
{{- $saltLen := strings.RuneCount (trim $params.password "") -}}
{{- $saltLen = cond (eq (mod $saltLen 2) 0) (add $saltLen 1) $saltLen -}}
{{- $base64EncodeContent := $content | base64Encode -}}
{{- $content = printf "%v%v%v"
(substr $base64EncodeContent 0 $saltLen)
(substr (sha256 $params.password) $saltLen)
(substr $base64EncodeContent $saltLen)
-}}
{{- end -}}
<div class="content" id="content"
{{- with $params.endFlag }} data-end-flag="{{ . }}"{{- end -}}
{{- with $params.password }} data-password="{{ md5 . }}"{{- end -}}
{{- with $params.password }} data-content="{{ $content }}"{{- end -}}
>
{{- if not $params.password -}}
{{- /* Expiration Reminder */ -}}
{{- partial "single/expiration-reminder.html" . -}}
{{- $content -}}
{{- end -}}
</div>
{{- /* Related Content */ -}}
{{- partial "single/related.html" . -}}
{{- /* Reward before Footer */ -}}
{{- $reward := .Scratch.Get "reward" -}}
{{- if eq $reward.position "before" -}}
{{- partial "single/reward.html" . -}}
{{- end -}}
{{- /* Collection Navigation */ -}}
{{- partial "single/collection-nav.html" . -}}
{{- /* FixIt Decryptor */ -}}
{{- partial "single/fixit-decryptor.html" . -}}
{{- /* Footer */ -}}
{{- partial "single/footer.html" . -}}
{{- /* Reward after Footer */ -}}
{{- if eq $reward.position "after" -}}
{{- partial "single/reward.html" . -}}
{{- end -}}
{{- /* Comment */ -}}
{{- partial "single/comment.html" . -}}
</article>
<aside class="toc" id="toc-auto" aria-label="{{ T "single.contents" }}">
{{- /* Auto TOC */ -}}
{{- if (ne $toc.enable false) | and (ne $tocEmpty true) -}}
<h2 class="toc-title{{ with $params.password }} encrypted-hidden{{ end }}">
{{- T "single.contents" -}}&nbsp;
{{- dict "Class" "toc-icon fa-solid fa-angle-down fa-fw" | partial "plugin/icon.html" -}}
</h2>
<div class="toc-content{{ if eq $toc.auto false }} always-active{{ end }}{{ with $params.password }} encrypted-hidden{{ end }}" id="toc-content-auto"></div>
{{- end -}}
</aside>
{{- end -}}