pacman-contribution-graph 5.0.0 → 5.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +53 -29
- package/action.yml +1 -1
- package/cli/cli.js +20 -6
- package/dist/pacman-contribution-graph.min.js +1 -1
- package/package.json +4 -1
package/README.md
CHANGED
|
@@ -11,54 +11,61 @@ Transform your GitHub or GitLab contribution graph into arcade games! This JavaS
|
|
|
11
11
|
|
|
12
12
|
## 🕹️ Available Games
|
|
13
13
|
|
|
14
|
-
| Game | Description |
|
|
15
|
-
| -------------------- | -------------------------------------------------------------------- |
|
|
16
|
-
| 👻 **Pac-Man** | Pac-Man eats your contributions while ghosts give chase |
|
|
17
|
-
| 🧱 **Breakout** | A ball bounces around breaking your contribution bricks |
|
|
18
|
-
| 🚀 **Galaga** | A fighter ship shoots lasers at your contribution grid |
|
|
19
|
-
| 🫧 **Puzzle Bobble** | A cannon fires colored bubbles to pop matching contribution clusters |
|
|
20
|
-
| 💣 **Bomberman** | Two bombers blast contribution cells across the graph |
|
|
14
|
+
| Game | Game Name | Description |
|
|
15
|
+
| -------------------- | ------------- | -------------------------------------------------------------------- |
|
|
16
|
+
| 👻 **Pac-Man** | pacman | Pac-Man eats your contributions while ghosts give chase |
|
|
17
|
+
| 🧱 **Breakout** | breakout | A ball bounces around breaking your contribution bricks |
|
|
18
|
+
| 🚀 **Galaga** | galaga | A fighter ship shoots lasers at your contribution grid |
|
|
19
|
+
| 🫧 **Puzzle Bobble** | puzzle-bobble | A cannon fires colored bubbles to pop matching contribution clusters |
|
|
20
|
+
| 💣 **Bomberman** | bomberman | Two bombers blast contribution cells across the graph |
|
|
21
|
+
| 💠 **Minesweeper** | minesweeper | A solver clears cells, flags guaranteed mines, and survives guesses |
|
|
21
22
|
|
|
22
23
|
More games coming soon!
|
|
23
24
|
|
|
24
25
|
### Pac-Man preview
|
|
25
26
|
|
|
26
27
|
<picture>
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
28
|
+
<source media="(prefers-color-scheme: dark)" srcset="assets/demo/pacman-dark.svg">
|
|
29
|
+
<source media="(prefers-color-scheme: light)" srcset="assets/demo/pacman.svg">
|
|
30
|
+
<img alt="pacman contribution graph" src="assets/demo/pacman.svg">
|
|
30
31
|
</picture>
|
|
31
32
|
|
|
32
33
|
### Breakout preview
|
|
33
34
|
|
|
34
35
|
<picture>
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
36
|
+
<source media="(prefers-color-scheme: dark)" srcset="assets/demo/breakout-dark.svg">
|
|
37
|
+
<source media="(prefers-color-scheme: light)" srcset="assets/demo/breakout.svg">
|
|
38
|
+
<img alt="breakout contribution graph" src="assets/demo/breakout.svg">
|
|
38
39
|
</picture>
|
|
39
40
|
|
|
40
41
|
### Galaga preview
|
|
41
42
|
|
|
42
43
|
<picture>
|
|
43
|
-
|
|
44
|
-
<source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/abozanona/abozanona/output/galaga-contribution-graph.svg">
|
|
45
|
-
<img alt="galaga contribution graph" src="https://raw.githubusercontent.com/abozanona/abozanona/output/galaga-contribution-graph.svg">
|
|
44
|
+
<img alt="galaga contribution graph" src="assets/demo/galaga.svg">
|
|
46
45
|
</picture>
|
|
47
46
|
|
|
48
47
|
### Puzzle Bobble preview
|
|
49
48
|
|
|
50
49
|
<picture>
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
50
|
+
<source media="(prefers-color-scheme: dark)" srcset="assets/demo/puzzle-bobble-dark.svg">
|
|
51
|
+
<source media="(prefers-color-scheme: light)" srcset="assets/demo/puzzle-bobble.svg">
|
|
52
|
+
<img alt="puzzle bobble contribution graph" src="assets/demo/puzzle-bobble.svg">
|
|
54
53
|
</picture>
|
|
55
54
|
|
|
56
55
|
### Bomberman preview
|
|
57
56
|
|
|
58
57
|
<picture>
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
58
|
+
<source media="(prefers-color-scheme: dark)" srcset="assets/demo/bomberman-dark.svg">
|
|
59
|
+
<source media="(prefers-color-scheme: light)" srcset="assets/demo/bomberman.svg">
|
|
60
|
+
<img alt="bomberman contribution graph" src="assets/demo/bomberman.svg">
|
|
61
|
+
</picture>
|
|
62
|
+
|
|
63
|
+
### Minesweeper preview
|
|
64
|
+
|
|
65
|
+
<picture>
|
|
66
|
+
<source media="(prefers-color-scheme: dark)" srcset="assets/demo/minesweeper-dark.svg">
|
|
67
|
+
<source media="(prefers-color-scheme: light)" srcset="assets/demo/minesweeper.svg">
|
|
68
|
+
<img alt="bomberman contribution graph" src="assets/demo/minesweeper.svg">
|
|
62
69
|
</picture>
|
|
63
70
|
|
|
64
71
|
## 🎮 Features
|
|
@@ -66,7 +73,7 @@ More games coming soon!
|
|
|
66
73
|
Elevate your GitHub profile with the Pac-Man Contribution Graph Game and add a playful touch to your coding journey!
|
|
67
74
|
|
|
68
75
|
- **Contribution Visualization**: Converts your GitHub or GitLab contribution data into a colorful grid.
|
|
69
|
-
- **Multiple Games**: Classic Pac-Man, Breakout, Galaga, Puzzle Bobble, and
|
|
76
|
+
- **Multiple Games**: Classic Pac-Man, Breakout, Galaga, Puzzle Bobble, Bomberman, and Minesweeper, with more planned
|
|
70
77
|
- **Multiple Themes**: Choose between different themes, such as GitHub Dark and GitLab Dark.
|
|
71
78
|
- **Customizable Settings**: Adjust game settings.
|
|
72
79
|
- **GitHub Integration**: Automatically fetches your contribution data via GraphQL API
|
|
@@ -123,10 +130,11 @@ Here's how to set up and run the games:
|
|
|
123
130
|
```
|
|
124
131
|
|
|
125
132
|
3. **Customize Settings**: Adjust the parameters as needed:
|
|
126
|
-
- `game`: The arcade game to generate
|
|
133
|
+
- `game`: The arcade game name to generate. For valid names, see table above.
|
|
127
134
|
- `username`: Your GitHub or GitLab username.
|
|
128
|
-
- `platform`: Specify `'github'` or `'
|
|
135
|
+
- `platform`: Specify `'github'`, `'gitlab'` or `'scenario'`.
|
|
129
136
|
- `gameTheme`: Choose between `'github'`, `'github-dark'`, `'gitlab'`, or `'gitlab-dark'`.
|
|
137
|
+
- `scenario`: Use a predefined contribution scenario instead of fetching platform contributions. Available scenarios: `full`, `empty`, `random`, `checkerboard`, `gradient`, `streaks`. This option is only active when `platform` is set to `'scenario'`; with `platform: 'github'` or `platform: 'gitlab'`, real platform contributions are fetched and the scenario value is ignored.
|
|
130
138
|
- `playerStyle` _(Pac-Man only)_: `PlayerStyle.OPPORTUNISTIC` (default), `PlayerStyle.CONSERVATIVE`, or `PlayerStyle.AGGRESSIVE`.
|
|
131
139
|
- `svgCallback`: Called with the finished SVG string once generation is complete.
|
|
132
140
|
- `gameOverCallback`: Called when the game finishes.
|
|
@@ -134,6 +142,24 @@ Here's how to set up and run the games:
|
|
|
134
142
|
- `gameStatsCallback`: Called at the end with `{ totalScore, steps, ghostsEaten }`.
|
|
135
143
|
- `githubSettings`: `{ accessToken: 'your_token' }` for private contribution data.
|
|
136
144
|
|
|
145
|
+
### CLI
|
|
146
|
+
|
|
147
|
+
#### Basic
|
|
148
|
+
|
|
149
|
+
```bash
|
|
150
|
+
pacman-contribution-graph --game pacman --username demo --platform github --gameTheme github --output pacman-contribution-graph.svg
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
Use this mode for real contribution data from GitHub or GitLab. `--platform` and `--username` are required; `--game`, `--gameTheme`, and `--output` are optional.
|
|
154
|
+
|
|
155
|
+
#### Scenario
|
|
156
|
+
|
|
157
|
+
```bash
|
|
158
|
+
pacman-contribution-graph --game pacman --username demo --platform scenario --gameTheme github --scenario checkerboard --output pacman-scenario.svg
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
Use this mode for predefined contribution data, for example demos, screenshots, or local testing. `--scenario` only works with `--platform scenario`; if omitted, the CLI uses `random`. `--username` is still required by the CLI, but in scenario mode it can be any placeholder value because no user data is fetched.
|
|
162
|
+
|
|
137
163
|
## Integrate into Your GitHub Profile
|
|
138
164
|
|
|
139
165
|
To showcase the Pac-Man game on your GitHub profile, follow these steps:
|
|
@@ -171,10 +197,8 @@ To showcase the Pac-Man game on your GitHub profile, follow these steps:
|
|
|
171
197
|
uses: abozanona/pacman-contribution-graph@main
|
|
172
198
|
with:
|
|
173
199
|
github_user_name: ${{ github.repository_owner }}
|
|
174
|
-
# Comma-separated list of
|
|
175
|
-
|
|
176
|
-
# Default: pacman
|
|
177
|
-
games: 'pacman,breakout,galaga,puzzle-bobble,bomberman'
|
|
200
|
+
# Comma-separated list of game names to generate. Default: pacman
|
|
201
|
+
games: 'pacman,breakout'
|
|
178
202
|
|
|
179
203
|
# Push the generated SVGs to the output branch
|
|
180
204
|
- name: push SVGs to the output branch
|
package/action.yml
CHANGED
|
@@ -15,7 +15,7 @@ inputs:
|
|
|
15
15
|
required: false
|
|
16
16
|
default: ${{ github.token }}
|
|
17
17
|
games:
|
|
18
|
-
description: 'Comma-separated list of games to generate.
|
|
18
|
+
description: 'Comma-separated list of games to generate. Example: "pacman,galaga"'
|
|
19
19
|
required: false
|
|
20
20
|
default: 'pacman'
|
|
21
21
|
player_style:
|
package/cli/cli.js
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
import fs from 'fs';
|
|
5
5
|
import { hideBin } from 'yargs/helpers';
|
|
6
6
|
import yargs from 'yargs/yargs';
|
|
7
|
-
import { ARCADE_GAMES, ArcadeRenderer } from '../dist/pacman-contribution-graph.min.js';
|
|
7
|
+
import { ARCADE_GAMES, ArcadeRenderer, PLATFORMS, SCENARIOS } from '../dist/pacman-contribution-graph.min.js';
|
|
8
8
|
|
|
9
9
|
const argv = yargs(hideBin(process.argv))
|
|
10
10
|
.option('game', {
|
|
@@ -16,8 +16,8 @@ const argv = yargs(hideBin(process.argv))
|
|
|
16
16
|
})
|
|
17
17
|
.option('platform', {
|
|
18
18
|
alias: 'pl',
|
|
19
|
-
describe:
|
|
20
|
-
choices:
|
|
19
|
+
describe: `Platform: ${PLATFORMS.join(', ')}`,
|
|
20
|
+
choices: PLATFORMS,
|
|
21
21
|
demandOption: true,
|
|
22
22
|
type: 'string'
|
|
23
23
|
})
|
|
@@ -25,7 +25,6 @@ const argv = yargs(hideBin(process.argv))
|
|
|
25
25
|
alias: 'gt',
|
|
26
26
|
describe: 'Game theme: github, github-dark, gitlab, gitlab-dark',
|
|
27
27
|
choices: ['github', 'github-dark', 'gitlab', 'gitlab-dark'],
|
|
28
|
-
demandOption: true,
|
|
29
28
|
type: 'string'
|
|
30
29
|
})
|
|
31
30
|
.option('username', {
|
|
@@ -34,22 +33,37 @@ const argv = yargs(hideBin(process.argv))
|
|
|
34
33
|
demandOption: true,
|
|
35
34
|
type: 'string'
|
|
36
35
|
})
|
|
36
|
+
.option('scenario', {
|
|
37
|
+
alias: 's',
|
|
38
|
+
describe: `Use a predefined contribution scenario instead of fetching user contributions: ${SCENARIOS.join(', ')}. Without a value, random is used.`,
|
|
39
|
+
choices: SCENARIOS,
|
|
40
|
+
default: 'random',
|
|
41
|
+
type: 'string'
|
|
42
|
+
})
|
|
37
43
|
.option('output', {
|
|
38
44
|
alias: 'o',
|
|
39
45
|
describe: 'Output file (SVG)',
|
|
40
46
|
default: 'contribution-graph.svg',
|
|
41
47
|
type: 'string'
|
|
42
48
|
})
|
|
49
|
+
|
|
43
50
|
.help().argv;
|
|
44
51
|
|
|
45
52
|
const renderer = new ArcadeRenderer({
|
|
46
53
|
game: argv.game,
|
|
47
54
|
platform: argv.platform,
|
|
48
55
|
username: argv.username,
|
|
49
|
-
gameTheme: argv.gameTheme,
|
|
56
|
+
gameTheme: argv.gameTheme ?? (argv.platform === 'gitlab' ? 'gitlab' : 'github'),
|
|
57
|
+
scenario: argv.scenario,
|
|
50
58
|
svgCallback: (svg) => {
|
|
51
59
|
fs.writeFileSync(argv.output, svg);
|
|
52
60
|
console.log(`SVG saved to ${argv.output}`);
|
|
53
61
|
}
|
|
54
62
|
});
|
|
55
|
-
|
|
63
|
+
|
|
64
|
+
try {
|
|
65
|
+
await renderer.start();
|
|
66
|
+
} catch (error) {
|
|
67
|
+
console.error(error instanceof Error ? error.message : String(error));
|
|
68
|
+
process.exit(1);
|
|
69
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
var t={d:(e,n)=>{for(var i in n)t.o(n,i)&&!t.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:n[i]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e)},e={};t.d(e,{rd:()=>yn,_B:()=>pn,Hr:()=>St,Lc:()=>jt,jg:()=>fn,b9:()=>ae,Cf:()=>Xe,rn:()=>Ue,OJ:()=>mn});const n=53,i=200,a={github:{textColor:"#57606a",gridBackground:"#ffffff",wallColor:"#000000",intensityColors:["#ebedf0","#9be9a8","#40c463","#30a14e","#216e39"]},"github-dark":{textColor:"#8b949e",gridBackground:"#0d1117",wallColor:"#ffffff",intensityColors:["#161b22","#0e4429","#006d32","#26a641","#39d353"]},gitlab:{textColor:"#626167",gridBackground:"#ffffff",wallColor:"#000000",intensityColors:["#ececef","#d2dcff","#7992f5","#4e65cd","#303470"]},"gitlab-dark":{textColor:"#999999",gridBackground:"#1f1f1f",wallColor:"#ffffff",intensityColors:["#2a2a3d","#4a5bdc","#2e3dbf","#1b2e8a","#0f1a4e"]}},o=(t,e)=>Math.floor((e.getTime()-t.getTime())/6048e5),r=t=>new Date(Date.UTC(t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate())),s=t=>{var e;return null!==(e=a[t.config.gameTheme])&&void 0!==e?e:a.github},A=t=>{switch(t){case"NONE":default:return 0;case"FIRST_QUARTILE":return 1;case"SECOND_QUARTILE":return 2;case"THIRD_QUARTILE":return 3;case"FOURTH_QUARTILE":return 4}},l=(t,e)=>{const n=e/4;return 0===t?"NONE":t<n?"FIRST_QUARTILE":t<2*n?"SECOND_QUARTILE":t<3*n?"THIRD_QUARTILE":"FOURTH_QUARTILE"},c=t=>{const e=r(new Date),n=new Date(e);n.setUTCDate(e.getUTCDate()-365),n.setUTCDate(n.getUTCDate()-n.getUTCDay());const i=Array.from({length:53},(()=>Array.from({length:7},(()=>({commitsCount:0,color:s(t).intensityColors[0],level:"NONE"})))));t.contributions.forEach((a=>{const l=r(new Date(a.date));if(l<n||l>e)return;const c=l.getUTCDay(),d=o(n,l);if(d>=0&&d<53){const e=s(t);i[d][c]={commitsCount:a.count,color:e.intensityColors[A(a.level)],level:a.level}}})),t.grid=i},d=s,g=c,u=t=>{const e=r(new Date),i=new Date(e);i.setUTCDate(e.getUTCDate()-365),i.setUTCDate(i.getUTCDate()-i.getUTCDay());const a=o(i,e)+1,s=Array(a).fill("");let A="";for(let t=0;t<a;t++){const e=new Date(i);e.setUTCDate(e.getUTCDate()+7*t);const n=e.toLocaleString("default",{month:"short"});n!==A&&(s[t]=n,A=n)}t.monthLabels=a>n?s.slice(a-n):s},h=t=>(c(t),t.grid);var m=function(t,e,n,i){return new(n||(n=Promise))((function(a,o){function r(t){try{A(i.next(t))}catch(t){o(t)}}function s(t){try{A(i.throw(t))}catch(t){o(t)}}function A(t){var e;t.done?a(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(r,s)}A((i=i.apply(t,e||[])).next())}))};const f=t=>m(void 0,void 0,void 0,(function*(){var e;return(null===(e=t.config.githubSettings)||void 0===e?void 0:e.accessToken)?yield(t=>m(void 0,void 0,void 0,(function*(){var e;const n=yield fetch("https://api.github.com/graphql",{method:"POST",headers:{Authorization:`Bearer ${null===(e=t.config.githubSettings)||void 0===e?void 0:e.accessToken}`,"Content-Type":"application/json"},body:JSON.stringify({query:"\n\t\tquery ($login: String!) {\n\t\t\tuser(login: $login) {\n\t\t\t\tcontributionsCollection {\n\t\t\t\t\tcontributionCalendar {\n\t\t\t\t\t\tweeks {\n\t\t\t\t\t\t\tcontributionDays {\n\t\t\t\t\t\t\t\tdate\n\t\t\t\t\t\t\t\tcontributionCount\n\t\t\t\t\t\t\t\tcolor\n\t\t\t\t\t\t\t\tcontributionLevel\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t",variables:{login:t.config.username}})});if(!n.ok)throw new Error(`GitHub GraphQL request failed: ${n.status} ${n.statusText}`);return(yield n.json()).data.user.contributionsCollection.contributionCalendar.weeks.map((t=>t.contributionDays)).reduce(((t,e)=>t.concat(e)),[]).map((e=>{const n=e.contributionLevel,i=s(t);return{date:new Date(e.date),count:e.contributionCount,color:i.intensityColors[A(n)],level:n}}))})))(t):yield(t=>m(void 0,void 0,void 0,(function*(){var e,n;const i=[];let a=!1,o=1;do{try{const r={};(null===(e=t.config.githubSettings)||void 0===e?void 0:e.accessToken)&&(r.Authorization="Bearer "+t.config.githubSettings.accessToken);const s=yield fetch(`https://api.github.com/search/commits?q=author:${t.config.username}&sort=author-date&order=desc&page=${o}&per_page=100`,{headers:r}),A=yield s.json();a=!A.items||0===A.items.length,i.push(...null!==(n=A.items)&&void 0!==n?n:[]),o++}catch(t){a=!0}}while(!a);const r=Array.from(i.reduce(((t,e)=>{var n,i,a,o;const r=null===(i=null===(n=e.commit.author)||void 0===n?void 0:n.date)||void 0===i?void 0:i.split("T")[0],s=(null===(o=null===(a=e.commit.committer)||void 0===a?void 0:a.date)||void 0===o?void 0:o.split("T")[0])||r,A=(t.get(s)||{count:0}).count+1;return t.set(s,{date:new Date(s),count:A,color:"",level:"NONE"})}),new Map).values()),c=Math.max(...r.map((t=>t.count)).filter((t=>t>0)));return r.map((e=>{const n=l(e.count,c),i=s(t);return{date:new Date(e.date),count:e.count,color:i.intensityColors[A(n)],level:n}}))})))(t)})),y=t=>{return e=void 0,n=void 0,a=function*(){const e=yield fetch(`https://v0-new-project-q1hhrdodoye-abozanona-gmailcoms-projects.vercel.app/api/contributions?username=${t.config.username}`),n=yield e.json(),i=Object.entries(n).map((([t,e])=>({date:new Date(t),count:Number(e),color:"",level:"NONE"}))),a=Math.max(...i.map((t=>t.count)).filter((t=>t>0)));return i.map((e=>{const n=l(e.count,a),i=s(t);return{date:new Date(e.date),count:e.count,color:i.intensityColors[A(n)],level:n}}))},new((i=void 0)||(i=Promise))((function(t,o){function r(t){try{A(a.next(t))}catch(t){o(t)}}function s(t){try{A(a.throw(t))}catch(t){o(t)}}function A(e){var n;e.done?t(e.value):(n=e.value,n instanceof i?n:new i((function(t){t(n)}))).then(r,s)}A((a=a.apply(e,n||[])).next())}));var e,n,i,a},p={player:{idleDown:{x:305,y:5,width:16,height:21,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAVCAYAAABPPm7SAAABgklEQVR42o1UIW/CQBh91yAmJ7v+g5OcY8kMsssExUFCliCxzTKBRCykFjWGIEECgjCBaEKWtO6Q9w/YSZKZuU5AL71y7folJ+679959330vR2CIuk0TU/4gBUFZ1G2a1G2aTHfLJPn51tZ0t0zS80Jyh22viPnVYVtNxErJ1Amw2DP8F4s9A3UC1aaVHjTfflE1stha/lA+eKVk+2ul7Wt5sv1+B/YkwDdUA6Y5+eABYx/aGwDApDes3EIWqwSoE1QWyGJJdoyD+QiPL+VC27GPSW+oTEXyXqBOoF6537gHAHzEEQAgfL2BOPqaI0kVC5dZ2sqS+YZiMB+pPrvtCN12pHoezEfgGwqjE3nLA2YU/TUvvLm/5sCMgrc8JaJ8IOMQdqMJGYcAAHH0sXg+e4EthRGjteDKE2QcwpWnwgpMGKLKB8DWK23O7DIFfpmCOJ4dmMVb2Rs+7VsdGEdX5BSjVZBPFrVhwtUOUhAX1yL57yvvEVeecJCCEBOg6O8zYf4AxGvpYTg/OGAAAAAASUVORK5CYII="},walkDown0:{x:9,y:8,width:14,height:24,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAYCAYAAADKx8xXAAABiUlEQVR42p1Uv2vCQBT+LmTo2PGa/+CNuS2CFBxbHIybAZeOrqFTR4ci6dipKkVwtIvYwaFQCrol4/0HNpuFLm7XQS8mMU2tDw7C996X9+N7dww5szkpFFgUS1aEw+akbE6qP58o9f2ZOf35RGn/AaklZgeE/GmJWUJmNidFVoDxu8Ax5l2GkCsfBgDU7jc41nSsmQbjqltK4h8vybeZJvGnC4i6RDilDEFjcdUFej4AbEs9xU4mMi1HZ9TF9W1QGjzr+Xhs3yGKJWNpLTujbilRk5KMZav22+pletTTJCuA11zAay5AVpDxZeSwOalwShisPZB1BuFU9lI4FWAZYLDeIJyOIepQUSyZme8BAORkn0HU5RZrAzeprIbNSYUNFxjS3w0OCWHDhc1JmXkfWQGEU8HD826pm0C4XECu/GIdi8hAMSmjY3pIuq/0tEVdZl4BI6/jYO0dtKaxdGVJqa/8HNypbW/K8g1X8RcAoAiPYskM/RftLL2Puxibk2L/WbfS4RyzpwDwA3eo2etvVgkzAAAAAElFTkSuQmCC"},walkDown1:{x:75,y:8,width:14,height:24,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAYCAYAAADKx8xXAAABkElEQVR42p2UsUvDQBTGf1c6OHY88x/cmGwVRHBUOthuDbg4ugZxcHSQEsdOtiKCY3Uo7eAgiNBuccx/ULNVcHE7h/bSXBrb6oOD8N378t5977sT5MKVSlMQ70ksinBcqbQrle4897T++rBW57mnzf4SqekNlgj51fQGKVm4UmnlhDy8emwS/l5EPAkoAexffbNpmNxyFkx26ytJ8u0x/S5nSfJmG68WE/WVRTBYsluHVgAwa/U/UQJ4Od/amGByhRnH6f0lh2fhStKgFdA+vuA9iYXIzlI5YaraSXUHgO54lFaKJ0HqILHOar9ZzxLHqKmcEL8xwm+MUE5o7VniuFLpqK/oTn2UE+LN2wTwqjszbD4S05llgPbxBQBxb1HBq8XF43Cl0kNZgVu1/oC3iuiojiuVLuf3TKvXd3NTNyAaj4gngZUnihQ1gpjIk6w5ZkXKn8tg2VeglJ9jd+ovHa0IS1sdygqyuj+7KeMXDpJPALK49/S4aNVUio7su2iShrJi4eaH4i92WynOJj4F+AFlodcPvNujWwAAAABJRU5ErkJggg=="},walkDown2:{x:108,y:8,width:14,height:24,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAYCAYAAADKx8xXAAABf0lEQVR42qVUMU8CMRT+ShgcGev9g47X7UiICSPEgWPjEjf/wcU4ODoYU0Ymwbg4IgOBgYHE5diOsf8Au0Hi4mQdzh70OOHUlzRpXt/X9/q9rw/IMZcy7VKmccBIHigvcKkkwaEs/dlQ6/c3a/VnQ51bhUuZ7vDJHiC7OnySgolLmWaOwPMrRxELzmLIVYgSANTvPlDUTGwJf7Ry1qFq/mHEfbgPVDUf9OEU/FwiHjMr3vialwI9U+r8+uTXpZaWShK5CjFYRIUADbXBUklCdnvJHIHu5+1RkCW5Y9rMSs9qhyGEOQJBO0LQjsAcYZ2lbzTZ4jHDYB2AOQLcq27Z9KqJ75tVU1najsE6QO/iBgAgh9sM/FwmGVs+8AgA0lZO80r8Tznmjd2npNygDcSLCHwUWuRYrMatRG589JKSAgByFe6xWjagKa2kh1NaQWMnOG75UIs5GmpjswoA1Ksjb28upF4dU1qB9ZFNgAFkb/9xWO2CjbSOqYcUmXB5k+4LCXHPPa24MKoAAAAASUVORK5CYII="},walkDown3:{x:141,y:8,width:14,height:24,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAYCAYAAADKx8xXAAABeklEQVR42p1UIU/DQBh910wgK4/9g5Ot2xKyZHJkYpujCYagsBUIfgCiyCk2gpksCELFRJOZ1bXy/kF3jiUY3E2UK72228q+5NLm+r1+73vfuwNKYVEmLcokjoRRBgXUREBNHAOTMnBfYiI4qf2gKM6WvpTfG23Nlr6sbcGiTF7ZnxVAeXl3XzmYWJRJ1vawWNloEk4vBk/dTJz+4w+ahso1cGKcDGzVbYqL8V7AJYCpAob3Z7hZ/YHo8znsIUf8wTSQPeQIqJlRTQQnPHUxj9aNKA7EFongxFCumF4/wOnFWdXbjZ79wvI95aDGlitbzyiCVE+s7cGZrOFMMvoBNRGPxpr5jXLzAGB3uloV2ulrz8o44lE2Btvv5ooufEBEIWinDxGFugHUOVQRUDOvrpS0398wENuqc4o01PvT6xzOZA3W9iritA4pGP/OlqcuAmpqFQ8Ceerm1IvqJ4ITouQNqJlTFFGo/b32dCjOxcRjoERw8i/nFC+sHSx90I3EuUDEAAAAAElFTkSuQmCC"},walkRight0:{x:8,y:41,width:16,height:24,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAYCAYAAADzoH0MAAABZ0lEQVR42p2UPU8CMRyHnxIHRsdy36Cb53YkLIw4CZskxoTBOOtAoh/A4VYmwM2RyejAwAgbN943gG6SuLjVRbB3XMvhL2ly7eX//rSCAoVSmaLzRKcifyZsg0SnIpTKqCCm+fwNQC+qAzBezBlcP+07CqUy5u7RrM8iE0plrs7fzWg6MeZrXbhG04mxM6wA6MWMlt5gR3apF9VRQbzLupLoVLT0BmAvbZfsICd27T4j3Wjvvi+AgV3CIelGGzms0dIb5LCGHNbA52C8mFNWGQezfpVjJfIAFTGQ7wFAS29IdCqEi0LXSGf9KunqYQeTcKXmm4pNoncKKogBWL4pALqdub+JZdTtzNlD2aV09ZDZv07q3N/0/pHBi2J52T7MgasHmRJue24ODk1CBXFmhKVK2E5g25P8q1RxRd5GH392vVkJ388PeYqMmn84/z48NlAVH3m2cdE+lMqIsvi6kBbH3oP8XfgBu12xmgbSwmIAAAAASUVORK5CYII="},walkRight1:{x:74,y:41,width:16,height:24,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAYCAYAAADzoH0MAAABdklEQVR42p1UIW/CQBh9RyaQyGv/wbm1riQYZJcJihvJsqRqegiS7QdM1KKAuUk2QYZAIIuj8v4BnGwyM3cTW7truWvLXtKkvfS+733vvTsCDRzKpG49EZyU14i6IRGcOJRJZkfoP38BAEKvCwBY7GJMb59OCzmUSXn/KI+XnnQokzfuh5xvllJ+HrXPfLOUKsMWAIjdFr5IoXY2IfS6YHaUs24lghNfpABwQtsEtcmFOnvVJtEL8vcrAFN1hDqIXgA6s+CLFHRmgc4soKrAYhejKQoFtpM2zgUpB0iXgbIGAOCLFInghJhSaLJ0O2mDH8Z5mIiJWpUrahIrXWB2BADYrxgAYDSMq0VsgtEwxkmUTeCHceH7ddnFw134DwYvDPtBUJ8DnQbMjuC+v/1oMQjgXnNzDuqcYHZUsLDRCJkDOk2MDLLO+xUrUF7TTiGF2iirP1Ov/xfl30tnTTvI7o9ClMvz6lTPxKw8TOeESnuYmhRSXfgGrX26OKISwJ0AAAAASUVORK5CYII="},walkRight2:{x:108,y:42,width:15,height:23,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAXCAYAAADUUxW8AAABgElEQVR42qVULW/DMBB9jgoGC93+A7MlLJVKClsFNHBgpOovWDQN9AcMlA5MbcYG24JqBQWFDUug/0FiGGlkzAOZXTcfSqU9yVLs0927e/cUAgA2ZRIAEsGJ+i4jEZyU34hNmYynPkR0wljkYP0lRq8/AICZOwAAhNEZb4+LahGbMpndu9KmTD44X3J93Ej5ndWe9XEjzc6sRHBSZmzCzB2A9Zd6TEsFyq02wSSwcCPC6Awx9DF5Xuq3TluSGPoAgAkAuuoVj17eziyGPuiqh7HIL4kGdPLp5U63dysstTueBrpAYyfzDGKeXUxiBtUKzLWZAj1ZC/A00EapWK7JnnU2tZqCrF8wxnsG814rWBOz43HEe4bP97ASr8x8oF2MRV7bcjwtdu7stkgEJzc7rA6NgqkZnT+vx9EZPA2utOnUJRYihXA8DkRFEZ4GONAuAOixOuV5lQ0dj+skADrRxBUzdUfAhxKH6b+LCfNOyvIrRfWqdtt2wdqcVWemf9nzF67Fws06Dc9qAAAAAElFTkSuQmCC"},walkRight3:{x:142,y:42,width:15,height:23,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAXCAYAAADUUxW8AAABf0lEQVR42pWUr27CUBjFf20qkJMX3uDK1kEyg2RBgBzJDCE8wCoQyAlEJ6dgjwATyyYQldSBvG8AV5LMTO1OsHb9u3QnadJ70/Pdc77v9ALgCmlcIQ3/hOUKafaDIToK6elz5YcHraz8ngMkRNkK6C4+ARi3OwA8RzsAnu7mpqwArpDm1nszq+3amI9T6bPargvWbFdIkz6xCuN2B9kKSBewgYLUKjx+PWTWdt3O6uthoaFOHRKAWDahX5OcIVXABghnjQJRLJsFme/iKks+aGWpo084ayQzLVUyOdHT50xYnN/0+IZZAIsdNzkSwL09B/xsPPNhAZCtIBlLWWTj0608MY39q0zevb5iP7g00XvZcNDKcmJi3Iw44+ro4/XVn2MsHZU6+pSp8PqbIvmgldWj3v+cKEQap8qvbAV4P1nfRztGUwrddmK/ot1FR2GSqNH0QkpbyYck41m0u+hJfKP4ldLjsNjxQkdhUiB/QpqUnrtV5fkvFEJSp0j+DvsGRtzJVsVjbugAAAAASUVORK5CYII="},walkRight4:{x:207,y:42,width:15,height:23,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAXCAYAAADUUxW8AAABgklEQVR42qVUIW/CQBh9RyqQkwf/4BytK8myZLJLBSBJZpapySEQk4gJJhELdGLJJJsgmUBUtq6V9w/gZJOZqd1E28u1HAS2lzS5fs37vnfveykBAJsyCQCp4KQ815EKTuo1YlMmk14fIg7hiQysPcXl4zcA4MbtAgCCOMLs+mG3iU2Z3HZcue240qZMLtZLKb+2xmexXkpdGdFl371OKhNNGF4k4JsRUsFJoyyy9vQgUZz3EcSRuhIAWOVBL5qIdN7C1W0+YFbUGzgBnshA5y31vkMO4ujoZoocjps4FURfmWnH+r11+angpJKacmV6Ex3huKnWVJlcb7APesIahz4mK4ZkxfJwDKL9htVRkhyfqwANBxFsylREjbKTXm6O8/G+09DxuVLYwB9wlGGsPYXjdpEUweGbUYVsmTp/0jMAwD2AJI7w9hzA8bmqe2AyFZxYh+Q9/UzgiQyOXxj4kpuIwgvLJNcTmZqilBREEYcw/gz2rq1wv/xVGbN9quP/iucv403HnBp4/m8AAAAASUVORK5CYII="},walkRight5:{x:241,y:42,width:15,height:23,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAXCAYAAADUUxW8AAABeUlEQVR42qWUr2/CQBTHPyUIJPLGf3CyOEhmkKBgcglmQc02C2JyghDsxDIwS5AFsWwCUbOEuk72P4BKkhncTZTrrqX8yl5ySXPX9973vt/vPQBsIZUtpOLCsGwhVdDuEPkezWhz8MfvKLSye0WAyPeSDVkZ0RhsuavVAZj4S7x+CXBUXoEE9njhqvHCVepnvbfGC3fvagX9cf/2BJB0zAtZGWEWKNpCKlkZAduDSdF1hxbA0CHsZjo3BtuTzIrXK1oPI3JhnxNZNQr8IwoAz93HZGPiL/chf82Ieuv9ZK1drOVfgWyRj6HDpyinHWZqbZokG16/RLhyUo6zsmY5dU/dvRlt8gkL3mWyAG5vlvkPw+watDsAVOezlKuqO9dN3XoKdvEUzHDlELoxmqmbfmGpZLPjsbCFVCnCbCGVSYYJN9jJFq6cFGFHYeuk6cskfiC9MqLWiA/ns5gwUyKzclYinainjnXu7NJK6MTkzpcOP832RQ7LzrBfnle9zbyp77EAAAAASUVORK5CYII="},walkUp0:{x:9,y:74,width:14,height:24,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAYCAYAAADKx8xXAAABj0lEQVR42sWUoU/DQBTGf7dMTCIv/Q9Otm7ISZKJDceSmSmCRSwBiUDU4iiCBDm1gEBUtq6TJ/CsbiQzcw8BV67dYKD41PW9e+++970vVTQQaiPswKK0yv9u+QWhNnJ2fwVAMRhSDIYAnN1fVfmtV26fZyLrpch6KaE2IqcXIqcXH+fP+O3z7Ks41EZOoscq6V9oNpT1Uk6iRwm1kTZA73pTYzDpHjJ5SXeNSu96gx17M/4V/1SYTjskebb3cpJnpNMOAMop6/bnxGkWONyML1mUVil/lyaItxR2SKcd7Ot55SC1z2rfWa8mTjE3AJggZnScMTrOMEFcyzm03WvF3JCsRpigQ+TNGHUPIY9JVhuK+QNRH1mUVrX9LjfjSwDsbJuiHcPEe7UVaiPFYAh3Zv+Ad4ZiMKTyqg8TxDWqAEWeYV/PazG1S1EnSEWzUVTboy9S1Lc01Y76tvYXaDX3mKxG21b7jPnMKqpP+gDd7QFQ5ilH5RsAu+KL0qqW6+KSvzmH2oj6i91+FOc3PgV4B9TS3qWPX7w1AAAAAElFTkSuQmCC"},walkUp1:{x:75,y:74,width:14,height:24,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAYCAYAAADKx8xXAAABgklEQVR42qWUr2/CQBzFP0cQSOSF/+Bk60AilyAARxMMEotATCIQ2DlA4NkEAYGoLO6QJ/AMtyUzuJvY2l1bNiD7JhX9/uh7976vJ8iEJ5XlQuxPRrjvBXfAk8r2FyMAdLOFbrYA6C9GST016Ellg3aEPoT0qrUcWq9aQx9Cgnb0w8iTynb8tbUfr8kz3S5tjDDdLlO1jr+2nlS2CFAfn3MIvUN46ajUx2dM1znjvfH/wdkuutrs9hQBwmGJ+vicFLLKugPhsASAiJWN93ctnrqP7E9GCNcAqjLJKewimeMgcZC4ZrXfrJdSVa8UAKoyIWhHBO0IVZmkajnL6ZXCbxhUZYLviONXa1+5hkGvVMKsmKVijgPM8oY9elLZjSzDXF3vnit0s0XiVTeyVAH0LsIcB6mcuKRoLIhLP6usyP79sUhZtf2GSd0CheweZ29B3qMXcgnVjSwjq3UATruQh9M7AG7ef3n+oRojxfdLsr/vpo0sp/LxB8U9dvtTnFt8CvAJx6DEoCOKVjcAAAAASUVORK5CYII="},walkUp2:{x:108,y:74,width:14,height:24,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAYCAYAAADKx8xXAAABeUlEQVR42qVULW/DMBS8TAGFhVb+gWHMUjIpsNJAW9ZKJVPRaEBB4UBBaNlKJg12A1ULBiKNJMyFBuNJ4KSSMg9MTu3E/dh2KLLfPd87nwNY4BMqfUIlzsCxkXivDwBgb6/V+q4URq2rE2yd+WeCZZZiMZ7JRgOfUDlkGyn3hZT7QiqpT++rak3uCzlkm2oExydUUi/GywerGi2zFABwH3QaCka3HCKPfqSG84OxaSMohPMDxBi4wR/xf6Ka6xz0GhcAkmkL4fxw0hSdkExbxwD4hMqH58erJC7GM+xK4Tj6XVIvbjisnyTyqAqAcyk5dSii4SpfUwAA9WKMBilGgxTUi409w1WfUMnXFOxOgHoxmGYOCzoGWSlz61JEHkGsmhLLSdt+j+Wk+FUArObU5fIshcgjwxxD6vEBR0AWG/LrcNVpW3KcYUva6GrFvNdHmSXoll/NGUkQwvatGpIgxJa0YTxkVaAI9e4nzdHJAC6SjKxeEzv9R/UNBfy0USHon8MAAAAASUVORK5CYII="},walkUp3:{x:141,y:74,width:14,height:24,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAYCAYAAADKx8xXAAABTklEQVR42r2Ur27DMBDGP0cDgYFW3sAwZR2ZVFhpoB0snIZKA/IAAwV5hIxMGgyqFBAQaSRlDvQbpGarVDLmgcyRnT9NNLBPOsWK75c7350DdBRQpgLKFCbkdCG+2YJvtpiC725tmnAlBRl1Mi3JU6WuZ6WuZ5XkqRo8gumY5KkFmRbvv1qYBJQp5sf4+FxgjnYPHKIOm+KsDt+YK+3r4I/6H/DtVNp9LCIXOJR4Xt5PAkXkAgCIbsf+/XUyYhG5EHWISgpCzF4yPx6ssAbMCSJjIzYmDTrWgB8ZAID5MXZPZWsAoPcGq7p4FM1zpEj8yNqsrNvBN9sGTPugfDn3IwaUqYx67UtzrbWWF6zlpZ8qXa7QXeszMj/uFefmRea/jRd1iIx6VsSboO6dmXpAmaqkIERXKaNem6I8FdbXB4dc52w6TkHWyM2ZHPOH9QOrJroE5w6VZAAAAABJRU5ErkJggg=="},death0:{x:206,y:202,width:16,height:21,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAVCAYAAABPPm7SAAABgElEQVR42pWUoW/CQBTGvyMVk8gb/8HJ1ixgliBLEBuSZG4KS8jEJGJZaqfGDAkSEGQIRJOZNjOtvP+AnSSZmTsEveNKr4W9pObye6/93vf1gIpyKZMuZbKKIWWNALCmdQCAL3YAgFTwAu/YGgfTMQCANlsAgEEcAQDeHp5l2SC4lMnJZi7l70/lM9nMc7KIamaNALMvD5dU/zYB3w6RCk5q6rD98odLy2RzO/iII3RGQWXz5+uwfImdUQD6fg2vy5GsWA5UZ53HIDdESwifri6WYLLO0ZahROb7uVILLATJpUyuzwzxxS6XA8cG/Kdq5tuTFdMpZI0A/V6Efi8CaxycGUzHSFYM1iAld/fHoHy34GUxVpXEEWY30dGV5QKp4ERLEHEI2mxDxCG4WIDPoa30ujxj6prJSUgFJ77YQcRh5Q5MRrtgfr63XGj9ALSMJPsb+fYQIJOvmW9QFmowjgrNpzYTm/dlMmyckwpOfBSHnF4ap1eb2gOxAdYbp4TZA9mI4jenPoeaAAAAAElFTkSuQmCC"},death1:{x:8,y:206,width:16,height:24,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAYCAYAAADzoH0MAAABVElEQVR42qVUMW7CMBR9RhyA8ZcbeEy2VOrCGIkBDtALsGbsyJi1U5nYgQGJgYGlEtnC6BukHiP1AO5kk3w7Lmq/FMX5/u/5++XZAoFISJpQ/qaVQCwSkiYhaTbnnTHfX71nc94ZOz8IDgGHiP4EDpGM8M8Y84R+WUYB9LnvfY84ONct6OPJvbvjXLfeAt4W6qNEOleojzKaGySwhelcRXM2BDfOiSZRDXLd9owlEpLmRBNQNoOuLsh1i9V2HQS/v76B14qEpKkXd2HSwz7aAa8dA4CuLo4VAOS0RJo994HVFaopvFpPAzktoZrCqW9F5HNOg9gJ5AShk+kRhNrn2+gSeD5QTYG6ukbBQR9wdbudWDCvuWkl3GGyqlI2c52gKu9jVjdoZRur7RqqKaCaYtBYnojWxpTNPEPVi6VbPddtX8TBe+6X+zP4Gx8NzwePEvGr/QduTytbQVkpAwAAAABJRU5ErkJggg=="},death2:{x:41,y:206,width:16,height:24,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAYCAYAAADzoH0MAAABeUlEQVR42qVUsW7CMBB9sfiAjFf+wBvJlkpdGCN1gJF+BhkZGeELyi8AA8IDA0sH1CWM+QPwGKk77kDt2sEOqD0psuO79+w7P18EjyXElW/9KKsIbZYQVwlxtdgtlfo6O99it1TaHwT7gCGiP4F9JJ3mSeTLsDVN+lg5/6wJzmUNen8yoz3PZX2zAWvuUG440tcK5Ya3rgUJbIC2EBgAoua9C4pba5DL2tFFlBBXgmJQ1oc87J0AnzVjOwBAWR9mXF+rzLszB1idCvhiGQDIw/6a63oF3p1BUIzqVGB+mWJ+maI6FRAUg3dnSH820BhHwqN0q869zIjElm5CXJ17mRqlW7+kNUFQ64EYhn8a81XZdwp9W3cJcll73/1RVpHvim+EVA6GptKaSPttn/azpgLfPp+dVOyj2z5vCuVgaAQzZhMIiiEoxphNjJjKgfsanX4gD3sTkK4L5MbzC3QEZBPksoag+CbAJvc9qOheJw6ZLnD0aEsPtfZvVKwyTDYVt1sAAAAASUVORK5CYII="},death3:{x:74,y:206,width:16,height:24,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAYCAYAAADzoH0MAAABpklEQVR42o1UoW7DMBB9jvYBgV7+wGwJmVqpZDBSQTu2SiODgy0sLEzh0DoyqbAJqBZQUDKp0UgL8wetYaTxZmA6106cbJaiWHfvznfP78xgWT4Xpc1+kDlD2/K5KH0uysVmVZbfJ+NbbFYl+RuDbYFNiSiOUfDz+wxPnS5kb9haJf+M8Zbt8PI4xUHmzNGdsjdEKAvw12v11/ehLGoHONUT9muBoJ9jvxattsYEBAz6eautxgEZUu62chDKwrhW5nNRptwF79xBZluEssDofoflqmsEkq2KZT4X5X5wISZIYgCA8CIjQX6c/PJRwToAILOtMggvUm3MzzPMzzPVmvAidQDFGBwILzJOIrC+1zFK2iTR001HqUwnVrcRhmyqAup5ebtDkMS1wSGuRl9dxUlNiflxYg2mcoMkVuVbhUQE2iaOrrt6OwbgIfhoHtcGTE2JOuPUCvl1H/mdqoSJJGqFSq/6rBzsB0NF0tiZIuUuUu5i7EwVyboSAeDKeA+yrQIEyQSh8lwCSYG1BKEskHK3BtCT2yaS/fUSNy0imP33SW962n8AdCQ0/3wR/FEAAAAASUVORK5CYII="},death4:{x:106,y:206,width:18,height:24,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAAYCAYAAAD3Va0xAAABYklEQVR42p1VrW7DMBA++wkCrb6BWRyWV8g0MliwFxhsNBRYNHVwrGi8qEpAX2FSA/0GtWGk8d3QWefKzZ+lKInj73zffd85Ah4MozSm5ntvBcwZRmk0SuPxckL8ddF1vJyQvt/jxH2Qt+89PL0fRjdrP2r4em3S2VEWLi/RKI348xLu/NkojS4vQ3aEl6kdr2cNxbOF61mPzo1SgwWDUxOPguhNuk72VieDCQrSqQwqP0QBPv/2UPkBAAA6lcFONlFAwvTeCqDiGaVxW7To8nKSnstL3BYtcqwgSnpzCGlPmS6FkRzUqWx2ofnaQI0oLVGNaBHF4CMq6pLBMZLL3alslpdIZa6w5HIGKWcYsfJD5Cm5ptApTAi0k81iatygkQJrVCNMZEjeEilj8o0oo2BImrS3OqRKinCgURpJWSoF9VvIiF7WNC3hou7nJps6Rvj63lsh1h5qyfNo7q9o7Jf0D3HLEgh0oL3lAAAAAElFTkSuQmCC"}},plunderBomber:{idleDown:{x:305,y:5,width:16,height:21,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAVCAYAAABPPm7SAAABoElEQVR42qWUoW7DMBCGf3eZFLBJhSkYCBgwdFjLFimgAQPtY3SopQEDHS1aH2AP0MIEVNpYy2YYMBCwSQksNKiUge4SJ3U3sCO2zvf9dz6dzWAw4fDS5JdFyto+ywQO4MJoDsq2kKXDBAohzAKyFiIRS4fPgpSEzmUt0sE/rdED33mq9u60GZgt9JuE1f6kgnHC4U6PgBdweAFHtjgKjhN+UkElsEXWyKZXQIKm2OoKc7sHV3EA6TFTUgNeUGd21Qhze49I5QAAJhxeroYp0jcfABD2u4h3e2PD9DN+94pxwusKIpVjbvcQ7/YI+12jAMGRyrH68bH26M7tXiOjDhKsj/YFDdG98HFZKLwcPuFb140qbm9sfHwpRCqHHnu4sh47+oTRGqm8kTXe1U1rx3YAQMrjkNM6gFuJEEzvpB3Lfnu+f5ksUsaEw8uJGAEAlnKN902KhyA8eVhSSjxvYngBhx7fGOWJGMELOGbDuCqR4NmwCZMx0z+wlGtjyQST+BYZLFmkDA7KAVxIKSuR9vdFfdJhWaSMnfsHzwm0z78BuJnMLUIpRL0AAAAASUVORK5CYII="},walkDown0:{x:9,y:8,width:14,height:24,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAYCAYAAADKx8xXAAABTklEQVR42p2UoZLCMBCGv3QQSGRPIiOD49wxg6ASHgOHrryzuHsMToLAg2NlZGUrkXU90UknKaHD3apk83+b3WwSRc9MqhsiJpVV/nzUB96ZYowJIRFIafwAykEx4GFXES4USGXV6FUIaDUCpDQJ/7SuxkX6xXQ3LC72IGQhCDBbag4ry+akA8D5Divb+RKAC0UgvJ1tdOxrlUl18zl+AyCvy8FUfV2Q6u1Dc7zeo1A2nwRryjXeRcvmkyjoIJdV4op3juP1HkT253lddgcU9NHB/q5u3K8/kcoqd/xbsyavy4cd87pka9YAbE4aqaxSJtXNYWWZ7to+bs0aESEb1y1YjzHG8C0/3M6WYt/Cyt3VWD/75utGscXYs+oHVbHH68MxSCqr1CuvP/YLJEOi/nfxNFV3oWdLHb30zt+1Y6iuZ/4k+Bb+MFavHEqs/l8uArn/P6LtpgAAAABJRU5ErkJggg=="},walkDown1:{x:75,y:8,width:14,height:24,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAYCAYAAADKx8xXAAABSUlEQVR42p2UL3PCQBDFf5eJiEQGiTx5OJCdiSCyfIy6aiS1df0YVIKoT1xXRkaCRMalgl64ux6ZTFddLu/t7ts/pwjM5LonYnJplPudhoQ1C4wxPkkEcnrXgbKkGOFPVBEqWuTSqHQqCbhhBMjpE/5pg8an/I3F6zi4fQeh9IkAy0Jz2DRsT9oj2LvDphnuEoCK1gN+fzXRs4tVJtf9PpsDsOvOo6m6uCHVcjWDelxjuZpxrK93jbvuDPUvecSO9XXIKr2Lx4tondgINoAtlNdH682NbM+hfhXOaUXLPpt7EXfdefhn51WZXPe25MtC82KeERHKrLsRuwxjDB/yOfRxe9K3dqxZEOtnaC4uHYYXqKR9uFahUxVbXpccI8mlUWrK9sdegWQMFD4XD1N1qxYb+mWh/Xa4FQu34JHeZNJzETmrKUWJ6f8B6XaqqsKyGRAAAAAASUVORK5CYII="},walkDown2:{x:108,y:8,width:14,height:24,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAYCAYAAADKx8xXAAABVUlEQVR42p2ULXPCQBBA32UikJWJREYerriKCirhZ+BaWSS6jp8BMojOtA4cKyMjiUTiUkH3uBzXDNOdydzmbt/cftyu4Q6xWdGqLk1lANI+I18OTwXl/sQio5WmMmkIjBlire1AIsLou+rsGYViQCgiwo4aaSqT3gsBFxsBMtqEf0oK8DYpgZLha9yo/risX817FwSYbQvWVMy2RQdaTy5760k3OTeuHj6rqO4nB8DYrGiXg5zF+dgb03KQO31xPl5d9Q9CeXl8AKDcn6511MIvB7kziIlC6lkSO/T/9VNIk5Ro5mIx+h6E5wnQqZ9/q3/TmKErm3vko+fCGWiSQmhH7WAyWmOzop3bKQAr2fSWRMEd9W0/hg/eL7qu0lTGxJpXYYVCjxzY1/1zO0VEXFutZHNNjgJaI/+hKxTqxh8Zvmg8f+2bvgEVy+bdMXba6nc0AvwAu7+3SNwDlHEAAAAASUVORK5CYII="},walkDown3:{x:140,y:9,width:15,height:23,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAXCAYAAADUUxW8AAABSElEQVR42qWUIXPCQBCFv2MikMggIyOvDv4BSPgZOCqLRNflZwQJojOtA9eTkZFEVuJSkdlwt0k6MH0quby3uX377uBJ2DitbZzWANEQYUi8H09Zzia8fFFHfaI5CdbaQOSc40zJ7naFS7NmfGGfSEOKuKow0TNCoOE4IKYe8Q+0Pb8ujiTbY4dQvofvn9VbV7w+peQUrE9pQM4X97V8UQTfgm0n25Dw/VEMGta6beO03o+nzRj+mK+P3e0ahkQTfCxnEwCOl5/2J8YPh4iFqOELB+OpBRpiotE57vu7FNCejCTLG7tiTtIhyFZ3tytzEoTfiiWWOp66RxmRwPi59meosbErADJ3aOZdFcb0nV//kGTu0AoFmTvcT5WriqDImbI5OSpZurWo7/ZoRtEV6ufOtsVJv3dZ08aZR+6tvqKtYY9efr4/AL+K1aQg8bD1tAAAAABJRU5ErkJggg=="},walkRight0:{x:8,y:41,width:16,height:24,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAYCAYAAADzoH0MAAABgElEQVR42qVUr3PCMBh94SImkZ1ERga3ObirADn+jDl05GZx/BkgQXC3Oer4ZGRlK5F1nei+kKQp425Ptbm8l/f9FEhAZ6pNnVNtRXwmfQLVVuhMta+Y3MS07shEQIY2FhI6U+1lpnAorjBNBSYzseeCCGeUTkQC6JHvQWsNEIAMLdVWSKqtML/WYtuPQPqxn1F2AugLzLNPAMBk3f1PcxUm8XKyAIByA6yOe7zrt4C8OipcTtYRGSN2MM0Vyk33wm5hsaU9iKjLvgd+yFWBHXw8PQMA1OwLk/XNIp8DgGmqXl9Itl9uLOz3PLjgk5cvYywxdv+H4gqToZUc9184FNdALKjCENgyO/GJQRK5NDG4sUxTwTRV4MIJcAXi+FNifhJNU4FqK1wZTVO5CnBOuLH879jFQCOFzcJNtaV956JItPI0v+0Af6x9F7F910iDk5dYLPFSGd0TiC+nNpJ4dJ0NicgUcbewbh78qUyttVHqVb+UQ4uGOeJR60Oh/DsHPyw/15lZ2SzeAAAAAElFTkSuQmCC"},walkRight1:{x:74,y:41,width:15,height:24,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAYCAYAAAAlBadpAAABoklEQVR42o2UL3PjMBDFf8oYHCz0QUPBDWuYMxPgzhy5fILiY8WGVxp2H8MHE5CZwphZ4IBYDWMYGKYDrhQ7Vpq+GY+lHb23f6RdRQSSahezm86q4T4ZHjadVZJqtyC7CIn0RGMgxQ1FlKTaNblmW58oz0c80ZMm3o3hQIvprEqACfEziAgYIMUlprOq/AjnOtR7ULEi/ZKfo0PL9DWss5f+P1/pniypds3eAtBuYL3TQWCZvrLeaarCst7pkejML7Y/lrSbXrkqLH/M377CA49VYadhS6rd72/fAdD5G9lLHxaAtwOU5+PYsw9Z52+TggyJT48PNLmmyXWwz/gitvWJbX2K5xxDeT6OQn16fGDyPO8hCNRjgcR0Vs1Xl4LdwoKM8txCfSNsX+l20++rwtLsLVVhOdB+CBynV3X9SLw3EQnNsCDjQBvaM/GL+eryPP0h/8ZFhINpJ32tPhsG156vB4K62XqRaXI9SaIk/70/49w/3PszwXa3JYd534LprFIxYrO3zFc65BxmGIwEZ7Fc/D0PJ4qIjPbB81fGbqxo/wGMrdCob5yBZgAAAABJRU5ErkJggg=="},walkRight4:{x:173,y:41,width:15,height:24,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAYCAYAAAAlBadpAAABnElEQVR42p2UK5PjMBCEP6UMDi7UQUPBCdswpyrAW3Xk8jOOLTbcpWH7M3wwAalaGDMLChrGMDDMBxwpcuzs44boUeqeVmtGiokQbbqpfds6Fa+T+LBtnRJtugXplUikB1oLmi4mUaJNV2eGbXWiOB/xQA8aZbeWAw22dSoBRsCPQkTAApousa1TxUXOrdTPQk2Z9Ed+Dw4t9WuYp8/9OF+ZHizadPXeAdBsYL0zgWCpX1nvDGXuWO/MgHTmJ9tfS5pNz1zmjjf7t3c4yljmbixbtOlefvwEwGTvpM+9LAC/D1Ccj8PMXrLJ3keGxMCnxwfqzFBnJuzP+GJsqxPb6jR956kozseB1KfHB0bl+VkEgmpIkNjWqfnqati9WJBSnBuo7sj2Tjebfl3mjnrvKHPHgeZCcBw/1W2R+GwiEpphQcqBJrRn4ifz1bU8/SFf4yLCwTajvk4mG933rbUhMxCyjhrjf36T2RRItOlis77VkveeKpZuW6dUDKz3jvnKBJfD33UBxW4H2f4e/n3jn0REwjoGhsxflX5r2D+I3dBkXCAzPQAAAABJRU5ErkJggg=="},walkRight2:{x:107,y:42,width:16,height:23,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAXCAYAAAAC9s/ZAAABj0lEQVR42o1UoXKDQBB9xyAqI6lEnlxccGSmgsjkM+KiK1sb18+gshHMBJe6O7kSWWRlHRXMXg64hq67W97bt++WVQgEJboP3duO1fQu9gG2Y0WJ7nOkNzKiAWwtkKCfEilKdG8KDQDIGoaABThTYS2uaB1JLImPz2/8J4gIsAAS9LZjFduOVdYM0paqhyL2e7+iHQgwJ9gkrwCA9Dics6eh7UhMrEqGqRlVyXiz7zPw/qwdUMAAEAmYmw3a01BBSKy1IyLJ+aFEwcvDIwBAFxekR4yqSO7552s2FxElujc1QxeXUVIqCRgATKFhCj26i3x5SxF66mgJJLK36xW269XfBO3pPknWcDA3M9E3qip5ZqgpNLKG3Si7ZxRwjhQH2iFHiv1ZO2UypVMlavr7HmjnkjJQcjf9kRyBvwdypCAi9/HSXlD3lomQiZoD7Zwq58EUXJW3neC3YuphvMUjKaSmlX2wtFCVjP1ZzxQFTfRJfA98sO9PFFqWV7QjsKnZnX2w7Vip/2xkmRPZCX7RX/h93PRAPh11AAAAAElFTkSuQmCC"},walkRight3:{x:140,y:43,width:16,height:22,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAWCAYAAADJqhx8AAABj0lEQVR42pWUoXPCMBjFf+EQyMkiKyNTN1y5Q7C7GfgTJnHMIplkjj+DSRDcDTdcIyMrqUTiOlES2jTHxnfXuzbte3l97/siCJSKZBla14UR/lo3BBoQ38iUqsBaQ0TpEwkLzlIJQHIwDIgdsKVCa37IHUmXB0spBRqIKHVhRNdKSg6VvHu7h6ql4IccRZhgGH0A8LaHZFT9csd5sDdke8NmbFjrryB4urv6dAUDdFQky83YsH0dkn9CPMeRaK1bRPZ9MIXt8YxMv4nnzV2WvT4Ai8up1RcdKz/vNWXbXSwYIEslWSoba526NJl+Yw5D9+zX9nj+OwXfJCt72evz8vzU+tYpyD9hupMsLic24yqRei0up7ACXRiRjGSjiVY7zTtb/NlYXHI4VmS2lV2M9cFRSrnM/c70kxD1SbQf24Hxwf4gOYJ7Z8C90oURrpXr3WVrpibuApyxA2JmaoKKZOlSWO1eGgdJ/X6tv9iMDclINn4z6IGdyFD5Hj3kQba/KbBgXRgh/nugWo9svDaJX3TfzZjLJgbWAAAAAElFTkSuQmCC"},walkRight5:{x:239,y:43,width:16,height:22,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAWCAYAAADJqhx8AAABh0lEQVR42pWUoZLCMBCGv3QQyJOprIwM7nAwg4CZM8djnOMsEuTxJmepYAYcOCIjK0EicT1RElKawtzOdJrsZnf/3X8TQUS0VGVMb85WPOo6Mac+2T2Y1pWzMSApHwOJNmfn2EBhDHsKH6QTGsPMbaK1BgNISnO2IonV1pY9JjUEe4oGiqFc+nU2u+t7I3UPoKUqjxt7MwCmQjGUS6a54ndsmeYK8iYCX0JvpChWcNzYqknG1DL/jm17CVqqctFNsbuUbLYFYNK9Ms0Vi27K+iO9HT/FEQCowbZhXHRTv568v3EcKI4DVdMnYf0Axar6z68n5td7xvXhwvpwec5CTMIgAPNdfZ+4Bj4T18A+GV/6s0a174HdDWmbSse/G7Bw0DyN8+up0UiXzSF01IYU1y6TG5g+WS2Lu0Cxqy0cC8WKatr+KYmjzjk/Nsx9fTJvCxuZAPzkE6+c5qoxzsYYvsdrX14oQktVhjXH6o0x4850zNkKJCWm/mC0BQmdzdkK8eohffW4/gGdV7r5dAGLnwAAAABJRU5ErkJggg=="},walkUp0:{x:9,y:74,width:14,height:24,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAYCAYAAADKx8xXAAABkklEQVR42pWUoVLDQBCGv8v0AZCRnDx5dY1rZxBlBtM+QTUuogaegTfgEYqDutYFx4mKcz1JZCXuEOmll0sYYFXy3327m83uChLTufIMmKmtiN9HKVAgqXB8TBUA472lQEKOjx1kASqQ3OtF6/Ht/dSJeK8XFMg2gAiQ1vqSljFUOEIG4cwYA0CFu6Ta+U6t0ehBPcA9MI4WLM2oA8bAZm6RZaO7J1huoTKuKVIKVrgeACBL+Cht6yDAoxRyT2D3M24nV011706o6Q5ZwgbLchtFHILC77idXPG2nwExrPrFCZCa7pqIZ0cuuZelYAwBqOmu1wwAmamtWG5V70CWtIWKbblVmNqKNuL4RvGbde7oXPnjCu8PeJ0rr3PlX69n/rjCH1f41+tZq/tDo+lc+RHArn6ANcALBZLHLwdt+p/txDyvH87ay3Cvxh3yk4mh4U3BtHdNbYX4y/QPbYHsJ8jUVqTrIr7T2QCh/cKkB30zt5fxOsNZeAjzNvTTgxbu6Fz5XnE286aJY0u1XnH+sx6/Ad95zsZS3ogEAAAAAElFTkSuQmCC"},walkUp1:{x:75,y:74,width:14,height:24,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAYCAYAAADKx8xXAAABeElEQVR42qWUsW7CMBCGP0d5AMaMzejRbLAlUocidSFPwMzGg7DxGLABQyXY0g0PDN7wmpE3cIfUqUmsFqk3Oef77s5/zhb0TGXSETHdGBF+p31gSk6N5VJIAMZnw5QcMlyYIPXQlBylFFprAA6f94eKSzVv9zKcbowQIdS1pTU1Ft9BbC+NnUcphULxmw3AsJq3ftUBuNE7ALZvhnzV+uwaqiPU2rJU8y62O2ONHQBAL4HsVE+BB8iuwZxLZpNRq+77HVmcyFewxVAdg1ZjkP8ds8mIw7kEQlgOxfGQLE5txe9EtheX9MEQApDFaTAMAIlujKiOcrCRr36ECa06SnRjRFdx/Cr5yx5iVCbdbYFzV5zKpFOZdPuX0t0WuNsCt38pO7+7tj6VSSdUJp0f4HogAdEJ2ujdUNXYeMWSitjlDeEYpBsjxDO3P/YKJM9C/ZgkfAH8+Pm1b/vyYbpXwMNJmCUEYqKFlRPfd43tRAjFCH3+vv5LnC/VmdRLkE3HiAAAAABJRU5ErkJggg=="},walkUp2:{x:108,y:75,width:14,height:23,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAXCAYAAAA7kX6CAAABcUlEQVR42o2UrZLCMBDH/+n0AU7WRkYGd3XtDAJmzpTHwJVnuHOH4zFAUsEMOHCsjKytRJ7ric6mm7Zwt6bTzf72O1EYiE1Miwmhxin5H08B98wAAGYXhxS6UyZopYOYoRQa1lrs6IDj7dFnYG33hQURAQlaapxSEmLZ0QEAsLZFmC4RAOCKuk9VyhCQ0RkegUSEK2r/zzXKjAKQgf3CYSMMVhUbYBpkSJehwb10XYfnfXQAUDwGCR0/cm9gsrPXz+YGKTSuqBFJqN4C+Aobo38K7+h+cr7+aGR0e8BkZ5js3EW/PbB8f+ucCglAhmSarB9KNDUvXWLUpOHeRtQ4taoMXgk3aDbv7SKbmHZtC690lxz1tmuUu+QBNBoHrxjv6CvhccRyeflguPD7hcOwnJgap/iu8QaBwt3UJYCqP6fGKfXX7V/bAnnyie9q6e+rBxlIobFZHIO0ZENkxEhCz4yn3iX16oEaOuI9/VeNz166XyietEPwUZThAAAAAElFTkSuQmCC"},walkUp3:{x:140,y:76,width:15,height:22,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAWCAYAAAAfD8YZAAABcElEQVR42pWULXfCMBSGn3AqJpGdjKwMjrpyDqLI8jOYqp6cntp+BkgQOwdccURG1lbyD5iApJeWj+11afJ+9N6bKDowcXLiDmzjlFxHt4iHLAFgtHMApOjzgZiTFIkkMUVTUbPeH4PgwhStOAZrLcScbONUJInGGAyGd7vqESVSNMScolub90gAxlzcu/8MYK2lou47XYh3C/ZtVyxzx1fZfqs/Yb7xytdGSlZ5mTt0eSZ46FKKJCFFRd2SJdHtJgAk2bYnMpqeBSpqBjKGJM7GQ9xuEtY+zeHHhZoMuspJtiXJtqz3R2bjYRCRAh6BPJomQUSXBIFHGPgBSdHMN0nvwCOBSPavsnWI5qNK6LJNCKDkaMoB+Xh5DTXoJvLVVs+uoccyd0HkqlW2cUre1RTNwhRhxhemCN1YmIKKGts4NbjlUlGH4fd4m87aey3H81n0LunKWRJTNMvc9Qi3nqs/OUt33w3bOKX+8wB2H8FfO7ur+BAfa5QAAAAASUVORK5CYII="},death0:{x:239,y:175,width:16,height:22,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAWCAYAAADJqhx8AAABfUlEQVR42oWULXfCMBiFn3AqJic7GRkZ3OrgHMQ4ZwZ+BlPVyGnU/gYWxM4B1zkiIyOpROI6AQkpTeGq5uPe9+b9qADQuWq4wtRWxOsY92emtiLTuWoKJAAVDr+ucBxGCoDh3lIgIacB8PfJaQZercJRIFnoWYi4+Tux+TuF9ULP8OIewVKBRGt9s2tMuPjoLKMHWms0mmfIUkmLI3jcuwhJ7COuPyyyvOy7Fcy3UBl3S6B3EC8qXIcIIEs4lDYIxSJZiuxWYPdjpu+vl2p8nlCjHbKENZb5NuEgRfYlnL6/stmPgVhE9VfBk9Vod3FwFXSJu4OUQEwGUKNdq6E6Aqa2wluKIUtCQmPMtwpTW9FyYGorhhP1tHGGkxsZQLS6L2qo75e38Ay7H7M8H0Og3j6Iu255dhCedewMUSeJOleNn8Sf302YygLZIt+3fZaK/jWR+LavksXrKaMxJvndmdTIxSBlK+Vq/WFbM+A54n4j/r09gq+GeGTvEdHjH7yMv10HhrOYAAAAAElFTkSuQmCC"},death1:{x:470,y:175,width:16,height:22,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAWCAYAAADJqhx8AAABjUlEQVR42p2ULW/DMBCGn0QBhYUda6ChxxbWSAPLNNKgweEOFe837J8UtgGTWpayGgyY1WMrHCzzQObWSVxt2klRTme/9/X6LiIgciRsyK4OOurakhAwI6XGsJsIAK43mowURtiuo8QHZ6RIKVFKAbDafrWizeS0ORthnZN2BlKe/wpejgaXkX9WK9MuwUXvOpPIUCtO5aiDjpJgs5SixvRALouLTfSBiztNOm/s5hXKCmpl6GYaASzHuV0dB9SYHhDoOBJkpBSDI/cf63MJPti8gt7kFDfDho2HL8RkTTqHBZqygoKrNv/7J6x9x+6fsMtxbu3j1C7HeUv377g3k5wZ0CeHxc2Q1baJCrD6ycYEmIhDLPhgADFZ9x6Vk9hxXlaid5jOzw30pazEidJWBte3gt+keycKTd/iTqM3+amMshLs3nQPrA46ip3iPgeAhsqyEszktDVQ/kQmoZmXI2Ffjp8t+/NtQXapib8tEzfeXb23D/iHxP8FO0x8adf54o+20x0m+utCvbRYvwEe6M6uyA/L8wAAAABJRU5ErkJggg=="},death2:{x:536,y:176,width:16,height:21,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAVCAYAAABPPm7SAAABb0lEQVR42o2UIZPCMBCFv3QQSCTIyMjgwJUZBMxg2p9R17Mn0bj7GZxhhjpwPUdkZeQhkec4UVLSEo57qrOb97LdvF1BAHqorqG4OVeiG4u6RD1U1ykSgHV/xClWAEyRTT4o4IiZTlo37L8uzXemk0bIxYRP1lrfyzWGEnu/PZAz50r0eAKtNRrNKwQF/NsdulUEBXzidlEh8zpuN5AWUBqLa3BQoMQ+EAFkDqe8aoR8kV6IbDdQHWcsJ4P6JVYXVHxA5rClIi0CFYTI7gmXkwH74wzwRdTzJjqyig91BTdBGzgbhWzrkwFUfGgZyjdf5BzmSvIhc5qG+kgL1Tg28m06nquXxhnPVcvu4tn0rfsjlrtbD1Yz3n++g9Mpuv/k1D/MZ+uwH/fHWnSnscQGbetc6s44kQcnArwt9qRF+9G2i4qyUA8zEvk9yHRCphNk3rbrFInM73mfE3VXlTGmmQEfdlPnuutN/GcX/rUbfwEjELpZrMKARgAAAABJRU5ErkJggg=="},death3:{x:105,y:206,width:20,height:23,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAXCAYAAAALHW+jAAABpElEQVR42q2Vr1rDMBTFf9lXUYkscnLy4tgjTO4VkPUYJsEgcJO8wiQWV+QViMrKVSLrgtgSbrJu419M2iT3fPeee07iODKkmnlODO1bN7ZeHAOaM0VEuHl8SPafb+9QVajwp4ATwLpaeP+Ol2oWZ/vt3/F1tfBjVRQ52Jwpi3KIa90To9+LcoBhChXeZulywPvyktWwBeC+vNwFX1/w8vYBEPfC/mrYJmVP8pRtwMtQJv+rYcuc6ejZg5Klmvlalqx1E4NEBEG4et0AUMty3+Ld1NCxj4llTyx3AUxEaOgAWOsG7VunfevWuolAIkISs2+Qy6USgLRvnVQzn8sirB2LiRyGzGJZRzRm12pZxkwPmiIiSYmcGZaCEAtQBP7+OubsNJnI5rvZjWUZhZ3b5yeAY5dIYRuyz9J/FzRoF0BVaeiYaN+60PbYuTNXVw4WtJnIRlV/3eUQm1ivoQMlWukUn6GCWpax1APAqHj98mwObIEsb9YtRSJs/crUuiYAJy4yYCJCo116HwaS7cHcBZYvC2Z5d+ceptxFlq8x7br/fvU+Af65JJ4LToNfAAAAAElFTkSuQmCC"}},explosions:{bombs:{fuse0:{x:0,y:0,width:16,height:16,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABSUlEQVR42qWTLU/DQBjH/y0VfIEm9wVIOMdhIHWbrEMRJqmYaLIEvWUJScMHIAyHxdWQgCzuMkwrIDkxUdmGIOpGgjjEdtfXEQY/dS/P/3n+9/IY6IARJrvWkzwxqjHhyS6MTiFxQCkFAAghVps5ryWbTV3Q/Qg7NTFx4J4PceoN8flVoHgvYNs2Pt4e4I4C7B31sXiJMJu6yBYFvMu0FLMDX46vHmWWxTLLYhlGSzk4u5GMML3OCJP8dizDC18qt5ZyoCwr4nmkx4fHfXABTO45/IFTizOVdQUXFFxQpK9pK1k8j+COAtCep51b1eorUVSrQHsenq4nAAIdI57vAOIAOS+PoKhW1hBnnaScKyz1VM07UOhnJE7nvtkK7BL/gLWtoOUgyROj+ct+Rc6R5Ilh4p+Yukm2cbGuDmBzM20SNrvS+Gs7K74B0DebyxOmawAAAAAASUVORK5CYII="},fuse1:{x:17,y:0,width:15,height:16,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAQCAYAAADJViUEAAABMElEQVR42qWToVMCQRTGf3vDH6DtjMZrLglpEK9rsDlEHGbMx5gY/gBGbY7NRoSIbSGxwbDBQGQjzfgMcMfCMaPiV3b37X7ve/O9fXAE5rVLAVCHLnWsJTxbb1VIPNGwslA5SIrr26A3pWSnV2uy2iHGdZIkAcA5B96QdnoAjAddnh5Slp8rzqdzqrOpKoj6oi1ZfyTDyZdk/ZHoWEvWH8lyORcdazHPmQzv2xJWUZSdXqfc3Z4BDmgyHkC11sQ46L4Z2jf1kjeRjrUkjdaum7NJaU07PfJ3uXqhvPhY8Pi63SeNFuNBF+gVMff+sjbTGwDUvlEhctMK5F3wBuutqoQPwwTOOUpt20OlpPQHRNZbtVPaT9iUDBDxD0TF3/2NeqBaGoyDf3tD2h+Qo6YqxDeExZNgQsVqAgAAAABJRU5ErkJggg=="},fuse2:{x:33,y:0,width:14,height:16,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAQCAYAAAAmlE46AAABJ0lEQVR42p2SoU/DQBjFf236D+BO4yoQh2J1m5xHMDtFmixBb0Et+wOWAYI0OAxpUJvsXEGtAnGCZJOtxIH7EF27NXQs22fuu8u997539+DAWl43BMA5FHRyCUsaUgvUSkvRJ1li1d1xagHKyw+yuEKSnbXgJeL04c1ytkFus1uSmHlAuzcEYDYecHfbJv38wn/9qSp1ribSH00ljL5FKy390VTSdCFaaYnv+xLe+LKtXhn1/KKF55qyjw0MnmP8jvfHo62VltITMHlKAVi8R+Xa7g0pbBSqFcXwMQDAbXaZjQdA7nH1scLMg/zRsrg6qjEG13U3LMpbgzf7nd9hjKkaUd7OMNhJlliF/N7K4jIQNkeWXcZqn+qWGoD1b+TWgLrMWseG/BdvqH5WjjsArAAAAABJRU5ErkJggg=="},blastCenter:{x:48,y:0,width:16,height:16,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABX0lEQVR42o2TIXODQBCFPzIRF9e4q2skouIsLvwDJhOD6zBV6S/oZKL6CzJFMnWYDFOHJC5TVUQEkkpcLI4KOCBNyPSpY3ff27d3i6GkqmiQFqkBoGNJKDjtYPFZXs0DjADiNCAJBUqqSicjR1CaPtMlBA8CTVRSVUkoiNOgExDZCtstQVqYcw+A6ZIWd6o5SAukhe2WiGwFQGdJWpimyexxBkC8XZ+PIC3OUBxIi9QY629Nfnm6byJv2O666zyAse5+DebcI8uy60xpoaAa92P5Mef9ozv/ByN90J3yY96SB7s3IwOcOcj2wc159eX1a0b9ROSIuuAGWddk+2YP0iI1dGKy8UnCAZHiQBLWNZEj2s1sHUw2PiJbcdoNGzjt6qWbbPw2ZujVzF/B+ylvv3vjLHIE0yXYblkL9N/21o0vnj2+vxLi7bpz0C9sxRohTeyvd/+vvBC4EPqDPlHjF21il6TcejMoAAAAAElFTkSuQmCC"},lit0:{x:0,y:18,width:16,height:18,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAASCAYAAABSO15qAAABPElEQVR42qWTIW/DMBCFv1QDgRsLTKHBgIuqsBSWViOl5v0BU2C0HzAeWjJNZYMr84YaMBDYwfyEsA60tnKJV9Inmdzde+d79sGNiEJBnehTKF639ah+MiTqRJ+WmxKAKo2p0hiA5ab0+aCAS6jcMJsvALjX5wMwmy9QuRndcOICrtP0cQpAsbWsdh2rXUextSJXpbEXiYRikkFrPSFTDQC2UQCU68zXOE8inegTSSadaS3LTelHOXx/8vFaEKoTAkopmn1FlcaY307UupjKDU3TeIG74bOo3GD2FcXWihHMOvMmin/gDDTdDKWUMKs/AsDx5wgwvsH0Bd7fDqy+zmO4QpDEECYAx2d4eEKqX4hDcj8vntEb1zN0CEFuLXVbR97EPjnU6eoIoSW5ikv30TaKH/kPcdjw5nW+GX8GK5onNZQU+wAAAABJRU5ErkJggg=="},lit1:{x:16,y:18,width:16,height:18,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAASCAYAAABSO15qAAABKUlEQVR42sWToXLDMAyGP+cKAgcDU2gw4KJeWApDy0rN8wSBeYLx0NCywZb5ihYwENjBPEJYBrb4bCdbwcD+OwNLv35LsiRYgUrUtGbvhk6EtigMVImairIGoEljmjQGoChr618VmB0y1+z2BwCe1NcB2O0PyFwvMoxmw/zS9nkLQNUajueR43mkao3na9LYighPMclgMDYgkz0AppcA1KfMcuaeCJWoiSTzOzMYirK2pbzdLry+VKzxPAEpJf21oUlj9MfocWebzDV931uBTfgtMtfoa0PVGq8EfcpsE10sMnCb5ZYAcH+/A/yegUuES3Bfwhskq+wIhcEhJ+qGTszfskb4MXgwdEMnNg+JDxDZJXGyeIjv1+0kLrYwHBgnMNxK8dd1/n98As/PkpwJ3lD2AAAAAElFTkSuQmCC"},lit2:{x:32,y:18,width:16,height:18,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAASCAYAAABSO15qAAABRElEQVR42qWTrW7DMBSFv1QDgSsLTKHBgIu6sBSWViWl5n2AKTBPMG5aNpUNtswaasCAYQvzCGEdqGzFrsGkXsnA9+f4nutz4UnLUk5ZyFvK3/XdQ/4kLpSFvK12LQC6zNFlDsBq1/p4EsAFRK2YL5YAvMr7AZgvlohaPXQ4cQ730uxtBkCzN6wPA+vDQLM3QUyXuQfJAsSigt74gkpYAIwVALTbyue4mWSykDeKKpxMb1jtWk/l/HPk+7MhlRcACCGwJ40uc9R1CHKdT9QKa60HeIm/RdQKddI0exNQUNvKDzHQQdzBeFhjCgCX3wsA1lp0fkZdh8cOxolwjO734q/3M9MNsI2E5LmNgOJigOkGLh8jKcc/4agkwXvjB9r1XZakEHcSWFGhriaUctd3mRPHf80tVpbcwlgwI+HEW/n0Oj9tfwQvmoxZnLupAAAAAElFTkSuQmCC"},lit3:{x:48,y:18,width:16,height:18,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAASCAYAAABSO15qAAABSklEQVR42sWTr1PDMBTHP+UQlZO1lRETQXF1q8TOVTLPH8BNTiO4Qw5ZwzEJrrgcahGIyNk6KuuKyCU0WTck7y53yTff9837kQf/bckUKDM5LPs0wF7THt3q5KyAzOQAsOxTxAzKZ4s3t2A6KwIEQhexs1isvOD3i13O3J3jegGZyaGpbcj5PEfsGkwH+t0u04HYNeTz3EZUp14kCRSzAlrFulYAFMIAoIwAYFMVnuNSSWQmB7IirEyruLnbcHVdArD/bHh7XDPFCwSEEJiPLU2dUlZ9wHWYWKwwxniBy7gtYrGirLasaxWkUFZFUGDfxjgCV0ggSAHg8HUAOB/BmAhNdD62i/HBK4+EYueY89vGqMIunVOOtArd6mQyBVrF08M+gMqqP24j2BroVicSgigO9zCTdt9pJl8/OUzj3+Yt+oF/jvMUPjXOP567nnBaLj2vAAAAAElFTkSuQmCC"}},crosses:{thinLeft:{x:3,y:43,width:73,height:73,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAADCklEQVR42u1cO3KDMBBdMRQuXULnNjdw60twCZ8nkzv4ErQ+RjooKd05RSwiLbsSv4zWo2UmYxuMhB5vn5anjQ0I2rrz4QkAUF2O0LcDAADU94dJfV2FRIDcV7vfvmYNkseYpv79447nCpLLHu5ztiBNwgkxSEFaGEapdKkAwZud4Sw4qXSplAZK5Yq3hltkdhMys4kBydOaAIOy1qT6/jAUADgFSMWoQhKLRlBunRgWyUwBbh0Zcil1qZSiSdXl6INz68YUQDNuLoxegGXvAnTnw9MDgdCi1HqUHKTJrEZo0QTInEAi2eEy6fWeSw+yAAmzwxNpFHbZZ9wkACjsstakuYPPmknu4KW4kPL9JIGupOhwk5Jtiwo3iVokLtz6dtCMOzRwjjGpvW1xySREDDe1b61VInQrxfrbTQ0VAHQwPLNd5l6jN9ktBFhwggNvak+b/tMRCLVbzFqfDzQS+k5sQLjcZg3z1vRPnRNq11DmFj7RHqNeQ2YaPp+68BEgq0c2V0J+N87Ct/Q/i8XO+M0eMe8yYcnjBAsQJeTOMdzH2v45FuObYdi1L+KEYFg0NZsx47aqr48paygGAUDM/17TPzkW3K/D3pK9q3Z/6Gkdr5HhC421hS/Mfj5dAb4/4w7Blv5jjoPTlvHEcy+rgllgZI+5+07Xv/0WqFB7e/TPMNYyr/QEkBtAjNqUdjDU79sBqj1uxpb+KQl4RRLWtIkmuV/kTpozZcfEc2Ste1Mwm9xws8diurSjF+WmBLOmc5wGrF1Xw1OvB/YCwZ4LQqx/Kl2gNkMtBHIncce3PmJwk0Zo2t/aPxALn9y4za7L1CtWXEkHAOVNOG/Zs/85mxFbVYIqS7J2AXZ7GM7RmaTqk7QcUOuTtD5J65O0Pknrk7Q+SeuTtD4JtPQGtD5J65O0Pgm0Pknrk7Q+SeuTdHYjbdu+HVS45zy8phbst/iFCWWSIKa8VzIp7L+4ZSaTAl1J2QsBqklTILSOGxZaJU4Nt4Yb94CLBFztW6w9kSKJFJsBYT+hKFG4fwC/z62Ejpy1NAAAAABJRU5ErkJggg=="},thinRight:{x:83,y:44,width:73,height:72,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABICAYAAAC6L9h5AAADs0lEQVR42u1crY4bMRAebwMCWqkwUckVFx0L7UvkJY5XqlRYVB7WJ8hLhB47dCoN27AGBIRtwcaXudkZ2+uk57nzrLTK/sQeezI/n8ef4kDJ0S6mHQDA7OtHAADYbfYAADC/P7rSY2u0KAcrCF/j9/j6JQ+nzoqW8/OLdavCohot7oatCG7u+Oc1Kgm7j7cYTlFSm5c6JiWVJLrQdsUqZ35/dCXcTo274TgE67a3JByfas5urEUxyqk6cA9izHIuxqNSManRYEXsxLer3u0UWFSjyor88esHcFmvFJhs1GW3dXuOSSQ2lYpLTkNMegKMOB4hdyuNup2qdRuX8k9LkyqzmweHA1dThraLKonNaoH0zyr1LSsp2SIQBBChwltVUtQiFGEkXRCABm0miFcXk6SKJGxX57ikBCdNNFjRbrOHmb/59lNdYUJXqURJaUSlu6VktyqV5N3tye0EKyqNtnXWk8zdEjETqnFXv1vCxh+8CXBywdLWps/d/CaAuVvg8DiJKKqkNTXXtIQxE2kX046SJHKCfI78WD/0vsnJOP49/qTPYoLFwLxdnc+IcnPl42QhPfP37WLauVDNBnfg34UmisusVBC+HigohLRJCRcCPIKx8lOzr8vxezooag2xCe02++dtvJJowPbWJCDvq8ln+sN9sBYSjRHL+XDgfqLSUkKyFrw7QhWFXc73K8kZI5/KpO3Q/HabPTiOZTboMGfxybXDOyHcwaV+bE1jxpAjX9iEcOy2jjRw3zkVJrlJoKgf7FOypth4xshPaXtS0oQ1SWkgN3fn+xQh0uBivyhVVO4kQ317y+S+T5KFE6l4sYnEzB+/TzFzyTr9pGjbS+VH4hLOlM/djXO1SIaRNhST3odcm/7y0jgukR/ImBhKOJHYSTrCjUPpM5Yh2fQbym4pP9RI+VyaD1UnBhAg1jinDILhBZWVnDkTQOVY+Rzw5EB1EExSxEo/uQHkktvHou5L5UsrjGAfOYvHS57hNVf3fdZ1D7f9+fd3fz7c9s9PJ16fXUs+aGaVUEscQ70pwQnQuc39n9oaP8n4ScZPMn6S8ZOMn2T8JOMngfGTjJ9k/CTjJxk/yfhJxk8C4ycZP+lNZbd12+MkVPivOnCP2RCo2t2CazdSATB3MwiQUS5hkPar5kxeHQIwrleyKgkA8E5D+n//edo/eDwAfPrTX3/5APB4gMP2WPeyxE/+WtvqdZVKFHG49a3d8NJEUfB2GvbdJNK7ln8IdKDsLxQlZF5SUf8AnXRX3gaekrMAAAAASUVORK5CYII="},fullLeft:{x:0,y:121,width:78,height:77,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAE4AAABNCAYAAAAIPlKzAAAEcElEQVR42u1cvW7bQAymBA0ePcqbHiHt5DUv4RfIVGQvEKBP0N1b/QJ5iayZ0m5dvclbNWa7DjZtiuL96JxYNMwDBEuyJEqfyPtIHnUAilq7nDlpXdqeuhWgrIUAWry+F+1y5hav7wUei+s3CxwFrL6f71dWC4Dn9vi7e+lgKqB4K7UAh4D0QBN+EeCpTbdUaZ4IVvN4WgioU5qoKuBEEJpHgPnDflHYSrWkQAHD9dWip3UGHGm7l25PCN1mqIExLb15csA+LtNtuUSr1Jrqdg3QgNpWqryr53a/bNfjCOWWTbXnkty9BZl1SnPVqXGrxYAMjpqoROvKa4hRodsEzdZMVQLsz9c9aEzbpjZVVUH+MU6l5or9G2rdIdg3U/X1cTx6UNaqqyEGGllYHxdoXNsO5NAzZ9M4D5My0ChB3LwDHGXGgBsyJatWKt0QdD94f7daq9G6SpMf10Lnas6s2N/xNJORg8CaNHXOSELLgI3ekCvgkmgYY1XHqvX9fKhpysxUf6zqYVcNpqo3Axzx4ww4Vt7g9d0IaBrGVSst2jYAgpLDdn1iWmPVBCc4gWHVAJdD9aHyrNH5OIwWPGDV93NolzPnk3kpV6UMvf1YjRq/YV6ClUoEufHqR8lPrc2j+wtff4MH+WrS+HGY7pHyZb2On7ycQWkXjRgiJMHlnCt/bJdS+ADLclwzEo+Dsq5Qfya4JXj9s+V7zuUvBMErJJWkD7P79jctecjLFsb4XBw0nsSUfDouI1c+npdwLQpez+TEt89vVKrrkLSEagc9hx/780cwqI+Cd658ib0xG8PlkKrQamCe/CEarON4BPgu3By9EfrQDfG/JE1CIPD/2LgpHe3C4zkIOfJ9wM8fAGDd729XC6gBoIXO9RjJPdXO/f7i3L9frtf4Nu6T9o9p9Bp8PXaOdJ+58ul1pHUq86l27XLmyigZ4JvJyVCknJNimlILmfUY+ZKmd5v+uYKcSmRSXmKFZsH7Gb5PGplqIGwmfLvbnPoY3J8Kbq78YNQiA1z42DRIBj4NGBsy8X4KtyWgfA+LcnLlA/gTCgF2LYJlCDGaDwHsE86P4f/7yAaB8znFufI9ft/gWwuWuo86wBRI6kzGfLvUEXexdDWmIQk+2meO+PeAk1I8HxEw+z4fEkO2EIDMn0wFJibfF0ZKGETTWSmA0cCXB8HSvlAwPXCH+ELdAeIS0OUc+Z+V8RmVJTknmeme6v7CfTsG3CVTSVxGmZNojG3DZ5Z6CWZ6iYwwl2H1cWD1cVYfZ/VxYPVxVh9n9XFWH2fkYPVxVh8HVh9n9XFWH2f1cVYfZ/VxVh931e7IMYBHs+Tf4x/2a3BH9M6t5BvtUsKq+kw1dRzXgIO0FJMiV0RnPg6zIsJMN1qyv+o0bgCMsikzrmeKoOdWnALNTDVQ4NwjCYWap3uKoLs30QHWME9meRXTA3ncl5tPnVMAdi8d1Di+0Og1VZUTKA8KHIXSB8uOsAwJDtoAANQKJ9xTq3Ghfo9/KjXl/f0HEAbTOzGUl5IAAAAASUVORK5CYII="},fullRight:{x:80,y:120,width:80,height:80,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAFRklEQVR42u1cP2vbUBA/OR48pKBRpos7li6ph9DVX8JfIEuD90CgQ+fuJkvzBbx3radCIJBkKVm92UOhGkLxEFAH6Umn0917shWaK7kHgUh+eu/p9O7f735SBMra+sMgc/8nk7j222aZAgDA8GobaVlvpEFgw6tt5ASXTGKA6ZDvvFiXQtQiyN5zLwALoSa80Qzg6Cb/G83yc9NhuSu17MK+NrUthRefiP2TSQxrSDMNguxpEGApBE5100uA1bw6Rn007MJIndOYDiuVpW01B1isVTkUNTawZv9W82rXxSeiOmvYgSpsYKNJNrDYfZpaT5UDkQTk7GCxQzfLVI0XVhXG1Gzd3TgXHHUitgM9DXth7EhGs4ZjaYQ+JkBoCo86EKTipsIhG0idCLKBySS2HUgzi1rjPDBK58wGtrGBnEClANviQCK8uzHvTBQ2PQJcrOtIDKfK6WWFygDAGtLsuZ2JCgFulmnTDmKBOSeisEVa4KxSgJwdxGrsBFmAqy8eTGiEI4t1Fc44UJWqMkGmzQtzDoUCCh6A1XLhkPAYPNBqIm13HudQbAcGGhUWPkZORkM6F2mqB3shfRTGbE7v1ajwgaaq3OGbAcDPB4Af3wFe3wPEx8iJHAOk1wAA8PDtl5U1vYACjgWxPRzlOzGZxABXG0vlgoCqJ3RxjAZzIoUtqwXGnA1UCu3r8sI4C8G7j3hlTUWlvsosRIr7RjOAL59UqXBfHZjgS90UBtMRfZL4uM1Tpv13TbOy8yTzVuSkeBABCl3m5wJyev8+mURtInoq4La1Dcrl424wO0+yBpAaEh4qQOE59pm/xktkrqNyoEKNuAGkRYhFILx7nBNw5xi2Qe2mL942hSeFL06F0S7sPL/vXsj1HLkzqqVQ7kaYJ926Gkav5yB7Oq4E4fsarpt0md8H4krjoEigXxuAsgHcAPR3PDDud3RTnJw3xzvja7x7CU9CqbvO7x4KlQNuZ0U2VNRk8h148bZ5I1hdpOReUru7sT+TcL+HvC5VX6nI1GV+7jp3Hs9J/1/NYXN6T8IYigCnl/JCRp6bD6Rh4iJ9zde3y/y+69qsKztPsuz312yvtu91XcbDfZ56/l3mvX2fZedJ1tspSFWKCsO/AHiFPLznrW45fh5Vo9Bkvj7096d+KLvOj887TuIO1/aSSVxxkumNOalzxlpaBHcN54A4Ie7jSJ5yfnoceLibZQoHHx8fPx/+eQR49ypHfbe3+V+5kOv8/GDMB7SDvnyNO++uxTfoxtze5se4n9S4Nbg59p3fnUuv8xjPIeFuvEG/PiaqDj6stlBlIi4jCPFVdqFa0LhRCl53jQXbYoNt56fZCs5iuCAbBdPNfHA6DEfpIca8sDgxhaKFpJAgXcArrWHX+T35b6hvJKEp0gBtKBWhtyzxAyuJRb4XbCi4yrxw02V+DoEJgSdlLiy9OSkNIgk71N8HI7HEIk6tPcLbd/42sJcbj+sbqWRm+fiBythZxg80fqDxA40fCMYPBOMHGj/QBAjGDzR+oPEDjR9o/EDjBxo/EIwfaPxA4wf+J8G0GhUubWAoE0FfcDMBSjmttNNILmw20EeiHOkXnrpUjq2PCOVULemcqh1YE17J9SOqLREfX7INrKEqDkzw2UHDAwNOxHF1JLKPIluo8/uBXGmT1IRNhSUscLGWhQf24R3R/m2WKSQUkeHUF3F3NKRzfQ32LwjNxydVXLiaq/qiuU5AlXt1oQ071nLhohWISy2IJnbQPsAohTGU1Ei/o4q8sFXl2lLdmFeszAtLr8wW38hPWr74+NztL787JmcVH37GAAAAAElFTkSuQmCC"}}}},x=t=>{const e=t.length;if(e<=1)return null;const n=[],i=[];let a=null;return t.forEach(((t,o)=>{t!==a&&(v(n,i,w(o,e),t),a=t)})),0===n.length?null:(C(n,i),i.length<=1||i.every((t=>t===i[0]))?null:{keyTimes:n.join(";"),values:i.join(";")})},b=t=>{const e=t.length;if(e<=1)return null;const n=[],i=[];let a=null,o=null;return t.forEach(((t,r)=>{t!==a&&(null!==a&&null!==o&&r-1!==o&&v(n,i,w(r-1,e),a),v(n,i,w(r,e),t),a=t,o=r)})),C(n,i),i.length<=1||i.every((t=>t===i[0]))?null:{keyTimes:n.join(";"),values:i.join(";")}},v=(t,e,n,i)=>{n!==t[t.length-1]?(t.push(n),e.push(i)):e[e.length-1]=i},C=(t,e)=>{1!==t[t.length-1]&&(t.push(1),e.push(e[e.length-1]))},w=(t,e)=>Number((Math.min(t,Math.max(e-1,1))/Math.max(e-1,1)).toFixed(4)),B={1:{down:[{id:"bm-player-1-down-0",frame:p.player.walkDown0},{id:"bm-player-1-down-1",frame:p.player.walkDown1},{id:"bm-player-1-down-2",frame:p.player.walkDown2},{id:"bm-player-1-down-3",frame:p.player.walkDown3}],up:[{id:"bm-player-1-up-0",frame:p.player.walkUp0},{id:"bm-player-1-up-1",frame:p.player.walkUp1},{id:"bm-player-1-up-2",frame:p.player.walkUp2},{id:"bm-player-1-up-3",frame:p.player.walkUp3}],left:[{id:"bm-player-1-left-0",frame:p.player.walkRight0,flipX:!0},{id:"bm-player-1-left-1",frame:p.player.walkRight1,flipX:!0},{id:"bm-player-1-left-2",frame:p.player.walkRight2,flipX:!0},{id:"bm-player-1-left-3",frame:p.player.walkRight3,flipX:!0},{id:"bm-player-1-left-4",frame:p.player.walkRight4,flipX:!0},{id:"bm-player-1-left-5",frame:p.player.walkRight5,flipX:!0}],right:[{id:"bm-player-1-right-0",frame:p.player.walkRight0},{id:"bm-player-1-right-1",frame:p.player.walkRight1},{id:"bm-player-1-right-2",frame:p.player.walkRight2},{id:"bm-player-1-right-3",frame:p.player.walkRight3},{id:"bm-player-1-right-4",frame:p.player.walkRight4},{id:"bm-player-1-right-5",frame:p.player.walkRight5}]},2:{down:[{id:"bm-player-2-down-0",frame:p.plunderBomber.walkDown0},{id:"bm-player-2-down-1",frame:p.plunderBomber.walkDown1},{id:"bm-player-2-down-2",frame:p.plunderBomber.walkDown2},{id:"bm-player-2-down-3",frame:p.plunderBomber.walkDown3}],up:[{id:"bm-player-2-up-0",frame:p.plunderBomber.walkUp0},{id:"bm-player-2-up-1",frame:p.plunderBomber.walkUp1},{id:"bm-player-2-up-2",frame:p.plunderBomber.walkUp2},{id:"bm-player-2-up-3",frame:p.plunderBomber.walkUp3}],left:[{id:"bm-player-2-left-0",frame:p.plunderBomber.walkRight0,flipX:!0},{id:"bm-player-2-left-1",frame:p.plunderBomber.walkRight1,flipX:!0},{id:"bm-player-2-left-2",frame:p.plunderBomber.walkRight2,flipX:!0},{id:"bm-player-2-left-3",frame:p.plunderBomber.walkRight3,flipX:!0},{id:"bm-player-2-left-4",frame:p.plunderBomber.walkRight4,flipX:!0},{id:"bm-player-2-left-5",frame:p.plunderBomber.walkRight5,flipX:!0}],right:[{id:"bm-player-2-right-0",frame:p.plunderBomber.walkRight0},{id:"bm-player-2-right-1",frame:p.plunderBomber.walkRight1},{id:"bm-player-2-right-2",frame:p.plunderBomber.walkRight2},{id:"bm-player-2-right-3",frame:p.plunderBomber.walkRight3},{id:"bm-player-2-right-4",frame:p.plunderBomber.walkRight4},{id:"bm-player-2-right-5",frame:p.plunderBomber.walkRight5}]}},E={1:[{id:"bm-player-1-death-0",frame:p.player.death0},{id:"bm-player-1-death-1",frame:p.player.death1},{id:"bm-player-1-death-2",frame:p.player.death2},{id:"bm-player-1-death-3",frame:p.player.death3},{id:"bm-player-1-death-4",frame:p.player.death4}],2:[{id:"bm-player-2-death-0",frame:p.plunderBomber.death0},{id:"bm-player-2-death-1",frame:p.plunderBomber.death1},{id:"bm-player-2-death-2",frame:p.plunderBomber.death2},{id:"bm-player-2-death-3",frame:p.plunderBomber.death3}]},k={id:"bm-bomb",frame:p.explosions.bombs.fuse0},U=[{id:"bm-explosion-thin-left",frame:p.explosions.crosses.thinLeft},{id:"bm-explosion-full-left",frame:p.explosions.crosses.fullLeft},{id:"bm-explosion-full-right",frame:p.explosions.crosses.fullRight},{id:"bm-explosion-thin-right",frame:p.explosions.crosses.thinRight}],S=t=>22*t,R=t=>22*t+15,M=(t,e,n,i)=>{var a,o;const r=t.gameHistory.length,s=null!==(o=null===(a=t.initialColors[e])||void 0===a?void 0:a[n])&&void 0!==o?o:d(t).intensityColors[0],A=i.get(F(e,n));if(!A||0===A.length)return null;const l=[0],c=[s];for(const t of A){const e=w(t.frameIndex,r);e!==l[l.length-1]?(l.push(e),c.push(t.color)):c[c.length-1]=t.color}return 1!==l[l.length-1]&&(l.push(1),c.push(c[c.length-1])),c.length<=1||c.every((t=>t===c[0]))?null:{keyTimes:l.join(";"),values:c.join(";")}},I=(t,e)=>t.gameHistory.map((t=>{const n=t.players.find((t=>t.id===e));return n?V(n.x,n.y):"0 0"})),O=(t,e)=>t.gameHistory.map(((n,i)=>{const a=n.players.find((t=>t.id===e));if(!a)return Y(e);if(!a.alive){const n=T(t,e);if(null!==n){const t=E[e],a=Math.min(Math.max(i-n,0),t.length-1);return K(t[a])}}const o=i>0?t.gameHistory[i-1].players.find((t=>t.id===e)):void 0,r=Boolean(o&&(o.x!==a.x||o.y!==a.y)),s=B[e][a.direction],A=r?Math.floor(i/2)%s.length:0;return K(s[A])})),D=(t,e)=>t.gameHistory.map(((n,i)=>{const a=n.players.find((t=>t.id===e));if(!a)return"0";if(a.alive)return"1";const o=T(t,e);if(null===o)return"0";const r=i-o;return r>=0&&r<E[e].length?"1":"0"})),T=(t,e)=>{for(let n=1;n<t.gameHistory.length;n++){const i=t.gameHistory[n-1].players.find((t=>t.id===e)),a=t.gameHistory[n].players.find((t=>t.id===e));if((null==i?void 0:i.alive)&&a&&!a.alive)return n}return null},V=(t,e)=>`${S(t)+10} ${R(e)+10}`,N=(t,e)=>{const n=t.gameHistory.length,i=[0],a=[G()],o=Math.max(e.remainingFrames,1);for(let t=0;t<o;t++){const o=e.frameIndex+t,r=w(o,n),s=Math.min(t,U.length-1);v(i,a,r,K(U[s]))}return C(i,a),a.length<=1||a.every((t=>t===a[0]))?null:{keyTimes:i.join(";"),values:a.join(";")}},Q=(t,e)=>{const n=t.gameHistory.length,i=w(e.frameIndex,n),a=w(e.frameIndex+e.remainingFrames,n);return{keyTimes:`0;${i};${i};${a};${a};1`,values:"0;0;0.9;0.9;0;0"}},H=(t,e,n)=>{if(t<=1||0===e&&n>=t)return null;const i=w(e,t),a=w(n,t);return{keyTimes:`0;${i};${i};${a};${a};1`,values:"0;0;1;1;0;0"}},F=(t,e)=>`${t}:${e}`,K=t=>`#${t.id}`,Y=t=>K(B[t].down[0]),G=()=>K(U[0]),J=t=>{var e,a,o,r,s;const A=t.gameHistory.length,l=Math.max(A*i/2,1e3),c=d(t),g=(t=>{const e=new Map;for(const n of t){const t=F(n.x,n.y),i=e.get(t);i?i.push(n):e.set(t,[n])}return e})(t.cellEvents);let u='<svg width="1166" height="169" xmlns="http://www.w3.org/2000/svg" shape-rendering="crispEdges" color-interpolation="sRGB">';u+="<style>image { image-rendering: pixelated; image-rendering: -moz-crisp-edges; }</style>",u+=(()=>{const t=new Map;for(const e of Object.values(B))for(const n of Object.values(e))for(const e of n)t.set(e.id,e);for(const e of Object.values(E))for(const n of e)t.set(n.id,n);t.set(k.id,k);for(const e of U)t.set(e.id,e);return`<defs>${Array.from(t.entries()).map((([t,e])=>`<symbol id="${t}" viewBox="0 0 ${e.frame.width} ${e.frame.height}" overflow="visible">\n\t\t\t\t<image width="${e.frame.width}" height="${e.frame.height}" href="${e.frame.data}" preserveAspectRatio="xMidYMid meet" style="image-rendering: pixelated;"${e.flipX?` transform="translate(${e.frame.width} 0) scale(-1 1)"`:""}/>\n\t\t\t</symbol>`)).join("")}</defs>`})(),u+=`<rect width="100%" height="100%" fill="${c.gridBackground}"/>`;let h="";for(let e=0;e<n;e++)t.monthLabels[e]!==h&&(u+=`<text x="${22*e+10}" y="10" text-anchor="middle" font-size="10" fill="${c.textColor}">${t.monthLabels[e]}</text>`,h=t.monthLabels[e]);for(let i=0;i<n;i++)for(let n=0;n<7;n++){const o=M(t,i,n,g);u+=`<rect id="c-${i}-${n}" x="${S(i)}" y="${R(n)}" width="20" height="20" rx="3" fill="${null!==(a=null===(e=t.initialColors[i])||void 0===e?void 0:e[n])&&void 0!==a?a:c.intensityColors[0]}">`,o&&(u+=`<animate attributeName="fill" calcMode="discrete" dur="${l}ms" repeatCount="indefinite"\n\t\t\t\t\tvalues="${o.values}" keyTimes="${o.keyTimes}"/>`),u+="</rect>"}for(const e of(t=>{const e=new Map;for(let n=0;n<t.gameHistory.length;n++){const i=t.gameHistory[n];for(const t of i.bombs){const i=e.get(t.id);i?i.endFrameExclusive=n+1:e.set(t.id,{bomb:t,startFrame:n,endFrameExclusive:n+1})}}return Array.from(e.values())})(t)){const t=H(A,e.startFrame,e.endFrameExclusive),n=0===e.startFrame?"1":"0";u+=`<g id="bomb-${e.bomb.id}" opacity="${n}" transform="translate(${V(e.bomb.x,e.bomb.y)})" style="will-change: opacity;">`,t&&(u+=`<animate attributeName="opacity" calcMode="discrete" dur="${l}ms" repeatCount="indefinite"\n\t\t\t\tkeyTimes="${t.keyTimes}" values="${t.values}"/>`),u+=`<use x="-8" y="-9" width="16" height="18" href="${K(k)}" style="will-change: transform;">\n\t\t\t<animateTransform attributeName="transform" type="scale" calcMode="linear" dur="500ms" repeatCount="indefinite"\n\t\t\t\tkeyTimes="0;0.5;1" values="1;1.1;1"/>\n\t\t</use></g>`}for(const e of t.explosionEvents){const n=Q(t,e),i=N(t,e);u+=`<use x="${S(e.x)+10-32}" y="${R(e.y)+10-32}" width="64" height="64" href="${G()}" opacity="0" style="will-change: opacity;">`,i&&(u+=`<animate attributeName="href" calcMode="discrete" dur="${l}ms" repeatCount="indefinite"\n\t\t\t\tkeyTimes="${i.keyTimes}" values="${i.values}"/>`),n&&(u+=`<animate attributeName="opacity" calcMode="discrete" dur="${l}ms" repeatCount="indefinite"\n\t\t\t\tkeyTimes="${n.keyTimes}" values="${n.values}"/>`),u+="</use>"}for(const e of t.players){const n=I(t,e.id),i=D(t,e.id),a=O(t,e.id),A=b(n),c=x(i),d=x(a);u+=`<use id="player-${e.id}" x="-11" y="-18" width="22" height="28" href="${null!==(o=a[0])&&void 0!==o?o:Y(e.id)}" opacity="${null!==(r=i[0])&&void 0!==r?r:"0"}" transform="translate(${null!==(s=n[0])&&void 0!==s?s:"0 0"})" style="will-change: transform, opacity;">`,d&&(u+=`<animate attributeName="href" calcMode="discrete" dur="${l}ms" repeatCount="indefinite"\n\t\t\t\tkeyTimes="${d.keyTimes}" values="${d.values}"/>`),c&&(u+=`<animate attributeName="opacity" calcMode="discrete" dur="${l}ms" repeatCount="indefinite"\n\t\t\t\tkeyTimes="${c.keyTimes}" values="${c.values}"/>`),A&&(u+=`<animateTransform attributeName="transform" type="translate" calcMode="linear" dur="${l}ms" repeatCount="indefinite"\n\t\t\t\tkeyTimes="${A.keyTimes}" values="${A.values}"/>`),u+="</use>"}return u+="</svg>",u},L=[{x:0,y:-1,direction:"up"},{x:0,y:1,direction:"down"},{x:-1,y:0,direction:"left"},{x:1,y:0,direction:"right"}],j=({x:t,y:e})=>`${t}:${e}`,z=(t,e)=>t.x===e.x&&t.y===e.y,P=(t,e)=>Math.abs(t.x-e.x)+Math.abs(t.y-e.y),X=({x:t,y:e})=>t>=0&&t<n&&e>=0&&e<7,W=(t,{x:e,y:n})=>X({x:e,y:n})&&t.grid[e][n].commitsCount>0,q=(t,{x:e,y:n})=>X({x:e,y:n})&&0===t.grid[e][n].commitsCount,Z=(t,{x:e,y:n})=>t.bombs.find((t=>!t.exploded&&t.x===e&&t.y===n)),$=(t,e)=>q(t,e)&&!Z(t,e),_=t=>[t,...L.map((e=>({x:t.x+1*e.x,y:t.y+1*e.y}))).filter(X)],tt=(t,e,n)=>t.activeExplosions.some((t=>(void 0===n||t.ownerId===n)&&t.affectedCells.some((t=>z(t,e))))),et=(t,e,n)=>t.bombs.filter((t=>!t.exploded&&(void 0===n||t.ownerId===n)&&_(t).some((t=>z(t,e))))),nt=(t,e,n)=>et(t,n,e.id).length>0,it=(t,e,n)=>q(t,n)&&!Z(t,n)&&!tt(t,n,e.id)&&!nt(t,e,n),at=({x:t,y:e})=>L.map((n=>({x:t+n.x,y:e+n.y,direction:n.direction}))).filter(X),ot=t=>t.grid.reduce(((t,e)=>t+e.filter((t=>t.commitsCount>0)).length),0),rt=(t,e,i=new Set)=>{let a=null,o=Number.POSITIVE_INFINITY;for(let r=0;r<n;r++)for(let n=0;n<7;n++){const s={x:r,y:n};if(!q(t,s)||i.has(j(s)))continue;const A=Math.abs(e.x-r)+Math.abs(e.y-n);A<o&&(a=s,o=A)}return null!=a?a:e},st=(t,e)=>e.alive&&q(t,e)&&!Z(t,e)&&!t.bombs.some((t=>!t.exploded&&t.ownerId===e.id)),At=(t,e)=>{const n=t.players.find((t=>t.id!==e.id&&t.alive));return Boolean(n&&_(e).some((t=>z(t,n))))},lt=(t,e)=>{st(t,e)&&(t.bombs.push({id:t.nextBombId++,ownerId:e.id,x:e.x,y:e.y,timer:8,exploded:!1,sprite:p.explosions.bombs.fuse0.data}),e.bombsPlaced++)},ct=(t,e,n)=>{if(!W(t,e))return!1;const i=d(t);t.grid[e.x][e.y]={commitsCount:0,level:"NONE",color:i.intensityColors[0]};const a=t.players.find((t=>t.id===n));return a&&a.cellsDestroyed++,t.cellEvents.push({frameIndex:t.gameHistory.length,x:e.x,y:e.y,color:i.intensityColors[0]}),t.config.pointsIncreasedCallback(t.cellEvents.length),!0},dt=(t,e)=>{if(e.exploded)return;e.exploded=!0;const n=[{x:e.x,y:e.y}],i=[];for(const i of L){const a={x:e.x+1*i.x,y:e.y+1*i.y};if(!X(a))continue;n.push(a),ct(t,a,e.ownerId);const o=Z(t,a);o&&dt(t,o)}for(const e of t.players)e.alive&&n.some((t=>t.x===e.x&&t.y===e.y))&&(e.alive=!1,i.push(e.id));const a={bombId:e.id,ownerId:e.ownerId,x:e.x,y:e.y,remainingFrames:4,affectedCells:n,hitPlayerIds:i,sprite:p.explosions.bombs.blastCenter.data};t.activeExplosions.push(a),t.explosionEvents.push(Object.assign({frameIndex:t.gameHistory.length},a))},gt=t=>{for(const e of t.activeExplosions)e.remainingFrames--;t.activeExplosions=t.activeExplosions.filter((t=>t.remainingFrames>0))},ut=(t,e)=>{const n=t.gameHistory[t.gameHistory.length-2],i=null==n?void 0:n.players.find((t=>t.id===e));return i?{x:i.x,y:i.y}:null},ht=(t,e,n)=>{const i=ut(t,e.id);return Boolean(i&&z(i,n))},mt=(t,e)=>t.sort(((t,n)=>{const i=e.avoidFirstStep&&z(t,e.avoidFirstStep)?1:0,a=e.avoidFirstStep&&z(n,e.avoidFirstStep)?1:0;return i!==a?i-a:e.target?P(t,e.target)-P(n,e.target):0})),ft=(t,e,n,i=new Set)=>{var a;const o=[{position:e,firstStep:null,distance:0,cost:0,blastedCells:0}],r=new Map([[j(e),0]]);for(;o.length>0;){o.sort(((t,e)=>t.cost-e.cost||P(t.position,n)-P(e.position,n)));const e=o.shift();if(!e)break;if(e.firstStep&&z(e.position,n))return{firstStep:e.firstStep,distance:e.distance,cost:e.cost,blastedCells:e.blastedCells};for(const s of at(e.position)){if(Z(t,s)||tt(t,s))continue;const A=j(s),l=i.has(A),c=W(t,s)&&!l;if(!(q(t,s)||l||c||z(s,n)))continue;const d=c?10:1,g=e.cost+d,u=r.get(A);void 0!==u&&u<=g||(r.set(A,g),o.push({position:{x:s.x,y:s.y},firstStep:null!==(a=e.firstStep)&&void 0!==a?a:{x:s.x,y:s.y},distance:e.distance+1,cost:g,blastedCells:e.blastedCells+(c?1:0)}))}}return null},yt=(t,e)=>{var n;const i=Math.max(8,4),a=[{position:e,firstStep:null,depth:0}],o=new Set([j(e)]);for(;a.length>0;){const r=a.shift();if(!r)break;if(r.firstStep&&it(t,e,r.position))return r.firstStep;if(r.depth>=i)continue;const s=at(r.position).sort(((n,i)=>et(t,n,e.id).length-et(t,i,e.id).length));for(const i of s){const s=j(i);if(o.has(s)||!q(t,i)||Z(t,i)||tt(t,i,e.id))continue;const A=r.depth+1;et(t,i,e.id).some((t=>t.timer<=A))||(o.add(s),a.push({position:i,firstStep:null!==(n=r.firstStep)&&void 0!==n?n:{x:i.x,y:i.y},depth:A}))}}return null},pt=(t,e,n)=>{if(!q(t,n)||Z(t,n))return!1;const i={id:-1,ownerId:e.id,x:n.x,y:n.y,timer:8,exploded:!1,sprite:""},a=Object.assign(Object.assign({},e),{x:n.x,y:n.y});t.bombs.push(i);try{return Boolean(yt(t,a))}finally{t.bombs.pop()}},xt=(t,e,n)=>{const i=ft(t,e,n),a=[],o=((t,e)=>{var n;const i=new Set([j(e)]),a=[{position:e,firstStep:null,distance:0}],o=[],r=ut(t,e.id);for(;a.length>0;){const s=a.shift();if(!s)break;o.push(s);const A=mt(at(s.position),s.firstStep?{target:e}:{avoidFirstStep:r,target:e});for(const o of A){const r=j(o);i.has(r)||!$(t,o)||tt(t,o,e.id)||nt(t,e,o)||(i.add(r),a.push({position:{x:o.x,y:o.y},firstStep:null!==(n=s.firstStep)&&void 0!==n?n:{x:o.x,y:o.y},distance:s.distance+1}))}}return o})(t,e);for(const r of o){if(!pt(t,e,r.position))continue;const o=_(r.position).filter((e=>W(t,e)));if(0===o.length)continue;const s=new Set(o.map(j)),A=ft(t,r.position,n,s);if(!A)continue;const l=o.sort(((t,e)=>P(t,n)-P(e,n)))[0],c=i?i.cost-A.cost:10;if(c<=0)continue;const d=r.firstStep&&ht(t,e,r.firstStep)?6:0,g=10*A.blastedCells*3+2*r.distance+A.distance+.1*P(r.position,n)+d-.25*o.length-.5*c;a.push({position:r.position,firstStep:r.firstStep,contribution:l,score:g})}return 0===a.length?null:(a.sort(((t,e)=>t.score-e.score||t.position.x-e.position.x||t.position.y-e.position.y)),a[0])},bt=(t,e)=>{if(!((t,e)=>pt(t,e,e))(t,e))return!1;if(At(t,e))return!0;const n=t.players.find((t=>t.id!==e.id&&t.alive));if(!n)return!1;const i=xt(t,e,n);return Boolean(i&&z(i.position,e)&&((t,e)=>((t,e)=>_(e).some((e=>W(t,e))))(t,e)||At(t,e))(t,e))},vt=(t,e)=>{const n=yt(t,e);if(Boolean(Z(t,e))||tt(t,e,e.id)||nt(t,e,e))return void(n&&Ct(e,n));const i=t.players.find((t=>t.id!==e.id&&t.alive));if(!i)return;const a=ut(t,e.id),o=((t,e,n,i={})=>{var a;const o=new Set([j(e)]),r=[{position:e,firstStep:null,distance:0}];for(;r.length>0;){const e=r.shift();if(!e)break;if(e.firstStep&&n(e.position))return{firstStep:e.firstStep,distance:e.distance};const s=mt(at(e.position),e.firstStep?{target:i.target}:i);for(const n of s){const i=j(n);!o.has(i)&&$(t,n)&&(o.add(i),r.push({position:n,firstStep:null!==(a=e.firstStep)&&void 0!==a?a:{x:n.x,y:n.y},distance:e.distance+1}))}}return null})(t,e,(t=>z(t,i)),{avoidFirstStep:a,target:i}),r=(null==o?void 0:o.firstStep)&&$(t,o.firstStep)&&!tt(t,o.firstStep,e.id)&&!nt(t,e,o.firstStep)?o.firstStep:null;if(r)return void Ct(e,r);if(t.bombs.some((t=>!t.exploded&&t.ownerId===e.id)))return;const s=xt(t,e,i),A=null==s?void 0:s.firstStep;A&&$(t,A)&&!tt(t,A,e.id)&&!nt(t,e,A)&&Ct(e,A)},Ct=(t,e)=>{var n,i;const a=null!==(i=null===(n=L.find((n=>t.x+n.x===e.x&&t.y+n.y===e.y)))||void 0===n?void 0:n.direction)&&void 0!==i?i:e.direction;a&&(t.direction=a),t.x=e.x,t.y=e.y};var wt=function(t,e,n,i){return new(n||(n=Promise))((function(a,o){function r(t){try{A(i.next(t))}catch(t){o(t)}}function s(t){try{A(i.throw(t))}catch(t){o(t)}}function A(t){var e;t.done?a(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(r,s)}A((i=i.apply(t,e||[])).next())}))};const Bt=(t,e,n,i,a)=>Object.assign(Object.assign({id:t,name:e},n),{alive:!0,direction:i,bombsPlaced:0,cellsDestroyed:0,sprite:a}),Et=t=>{t.gameHistory.push({players:t.players.map((t=>Object.assign({},t))),bombs:t.bombs.map((t=>Object.assign({},t))),explosions:t.activeExplosions.map((t=>Object.assign(Object.assign({},t),{affectedCells:t.affectedCells.map((t=>Object.assign({},t))),hitPlayerIds:[...t.hitPlayerIds]})))})},kt=t=>{t.frameCount++,gt(t),(t=>{for(const e of t.bombs)e.exploded||e.timer--;for(const e of[...t.bombs])!e.exploded&&e.timer<=0&&dt(t,e);t.bombs=t.bombs.filter((t=>!t.exploded))})(t);for(const e of t.players)e.alive&&(st(t,e)&&bt(t,e)&<(t,e),vt(t,e));Et(t)},Ut={frameCount:0,contributions:[],grid:[],monthLabels:[],gameInterval:0,nextBombId:0,players:[],bombs:[],activeExplosions:[],gameHistory:[],initialColors:[],cellEvents:[],explosionEvents:[],config:void 0};class St{constructor(t){this.conf=Object.assign({},t)}start(){return t=this,e=void 0,i=function*(){switch(this.store=JSON.parse(JSON.stringify(Ut)),this.store.config=Object.assign(Object.assign({},{platform:"github",username:"",svgCallback:t=>{},gameOverCallback:()=>{},gameTheme:"github",pointsIncreasedCallback:t=>{},githubSettings:{accessToken:""}}),this.conf),this.store.config.platform){case"gitlab":this.store.contributions=yield y(this.store);break;case"github":this.store.contributions=yield f(this.store);break;default:throw new Error(`Unsupported platform: ${this.store.config.platform}`)}return g(this.store),u(this.store),yield(t=this.store,wt(void 0,void 0,void 0,(function*(){for((t=>{t.frameCount=0,t.nextBombId=0,t.players=[],t.bombs=[],t.activeExplosions=[],t.gameHistory=[],t.cellEvents=[],t.explosionEvents=[]})(t),t.grid=h(t),t.initialColors=t.grid.map((t=>t.map((t=>t.color)))),(t=>{const e=rt(t,{x:0,y:0}),n=rt(t,{x:52,y:6},new Set([j(e)]));t.players=[Bt(1,"Bomberman",e,"right",p.player.idleDown.data),Bt(2,"Plunder Bomber",n,"left",p.plunderBomber.idleDown.data)]})(t),Et(t);ot(t)>0&&t.players.filter((t=>t.alive)).length>1&&t.frameCount<1200;)kt(t);(t=>{if(!t.players.every((t=>t.alive)))for(let e=1;e<8;e++)gt(t),Et(t)})(t);const e=J(t);t.config.svgCallback(e),t.config.gameStatsCallback&&t.config.gameStatsCallback({totalScore:t.cellEvents.length,steps:t.frameCount,ghostsEaten:0}),t.config.gameOverCallback()}))),this.store;var t},new((n=void 0)||(n=Promise))((function(a,o){function r(t){try{A(i.next(t))}catch(t){o(t)}}function s(t){try{A(i.throw(t))}catch(t){o(t)}}function A(t){var e;t.done?a(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(r,s)}A((i=i.apply(t,e||[])).next())}));var t,e,n,i}stop(){var t;t=this.store,wt(void 0,void 0,void 0,(function*(){clearInterval(t.gameInterval)}))}}const Rt=.21,Mt=7.4,It=t=>22*t,Ot=t=>22*t+15,Dt=(t,e,n)=>{var i,a;const o=t.gameHistory.length,r=null!==(a=null===(i=t.initialColors[e])||void 0===i?void 0:i[n])&&void 0!==a?a:"#ebedf0",s=t.brickEvents.filter((t=>t.x===e&&t.y===n));if(0===s.length)return{keyTimes:"0;1",values:`${r};${r}`};const A=[0],l=[r];for(const t of s){const e=Number((t.frameIndex/Math.max(o-1,1)).toFixed(4));e!==A[A.length-1]?(A.push(e),l.push(t.color)):l[l.length-1]=t.color}return 1!==A[A.length-1]&&(A.push(1),l.push(l[l.length-1])),{keyTimes:A.join(";"),values:l.join(";")}},Tt=(t,e)=>{var n,i,a,o;const r=t.gameHistory.length;if(0===r){const t=null!==(n=e[0])&&void 0!==n?n:"0,0";return{keyTimes:"0;1",values:`${t};${t}`}}const s=[],A=[];let l=null,c=null;return e.forEach(((t,e)=>{t!==l&&(null!==l&&null!==c&&e-1!==c&&(s.push(Number(((e-1)/(r-1)).toFixed(4))),A.push(l)),s.push(Number((e/(r-1)).toFixed(4))),A.push(t),l=t,c=e)})),0!==s.length&&1===s[s.length-1]||(0===s.length?(s.push(0,1),A.push(null!==(i=e[0])&&void 0!==i?i:"0,0",null!==(a=e[e.length-1])&&void 0!==a?a:"0,0")):(s.push(1),A.push(null!==(o=null!=l?l:e[e.length-1])&&void 0!==o?o:"0,0"))),{keyTimes:s.join(";"),values:A.join(";")}},Vt=t=>{const e=t.gameHistory.length*i/2,a=d(t);let o='<svg width="1166" height="209" xmlns="http://www.w3.org/2000/svg">';o+=`<desc>Generated with breakout-contribution-graph on ${new Date}</desc>`,o+=`<metadata>\n\t\t<info>\n\t\t\t<frames>${t.gameHistory.length}</frames>\n\t\t\t<frameRate>5</frameRate>\n\t\t\t<durationMs>${e}</durationMs>\n\t\t\t<generatedOn>${(new Date).toISOString()}</generatedOn>\n\t\t</info>\n\t</metadata>`,o+=`<rect width="100%" height="100%" fill="${a.gridBackground}"/>`;let r="";for(let e=0;e<n;e++)t.monthLabels[e]!==r&&(o+=`<text x="${22*e+10}" y="10" text-anchor="middle" font-size="10" fill="${a.textColor}">${t.monthLabels[e]}</text>`,r=t.monthLabels[e]);for(let i=0;i<n;i++)for(let n=0;n<7;n++){const r=It(i),s=Ot(n),A=Dt(t,i,n);o+=`<rect id="c-${i}-${n}" x="${r}" y="${s}" width="20" height="20" rx="3" fill="${a.intensityColors[0]}">\n\t\t\t\t<animate attributeName="fill" calcMode="discrete" dur="${e}ms" repeatCount="indefinite"\n\t\t\t\t\tvalues="${A.values}" keyTimes="${A.keyTimes}"/>\n\t\t\t</rect>`}const s=Math.round(4.62),A=Tt(t,(t=>t.gameHistory.map((t=>`${It(t.ball.x)},${Ot(t.ball.y)}`)))(t));o+=`<circle id="ball" cx="0" cy="0" r="${s}" fill="${a.wallColor}" stroke="#aaaaaa" stroke-width="1">\n\t\t<animateTransform attributeName="transform" type="translate"\n\t\t\tcalcMode="linear"\n\t\t\tdur="${e}ms" repeatCount="indefinite"\n\t\t\tkeyTimes="${A.keyTimes}"\n\t\t\tvalues="${A.values}"/>\n\t</circle>`;const l=Ot(Mt),c=Math.round(152),g=Math.round(11),u=Tt(t,(t=>t.gameHistory.map((t=>`${It(t.paddle.x)},0`)))(t));return o+=`<rect id="paddle" x="0" y="${l}" width="${c}" height="${g}" rx="3" fill="${a.wallColor}">\n\t\t<animateTransform attributeName="transform" type="translate"\n\t\t\tcalcMode="linear"\n\t\t\tdur="${e}ms" repeatCount="indefinite"\n\t\t\tkeyTimes="${u.keyTimes}"\n\t\t\tvalues="${u.values}"/>\n\t</rect>`,o+="</svg>",o};const Nt=20/22,Qt=["NONE","FIRST_QUARTILE","SECOND_QUARTILE","THIRD_QUARTILE","FOURTH_QUARTILE"],Ht=t=>{const e=Qt.indexOf(t);return Qt[Math.max(0,e-1)]},Ft=t=>{var e,i;t.frameCount++;const{ball:a,paddle:o,grid:r}=t,s=Math.hypot(a.dx,a.dy),A=Math.ceil(s/Rt),l=1/A;for(let s=0;s<A;s++){a.x+=a.dx*l,a.y+=a.dy*l,a.x-Rt<=0&&(a.x=Rt,a.dx=Math.abs(a.dx)),a.x+Rt>=n&&(a.x=52.79,a.dx=-Math.abs(a.dx)),a.y-Rt<=0&&(a.y=Rt,a.dy=Math.abs(a.dy));const s=o.x,A=o.x+7;if(a.dy>0&&a.y+Rt>=Mt&&a.y-Rt<7.9&&a.x>=s-Rt&&a.x<=A+Rt){a.y=7.19;const e=s+3.5,n=Math.max(-1,Math.min(1,(a.x-e)/3.5)),i=Math.hypot(a.dx,a.dy),o=65*n*(Math.PI/180);a.dx=i*Math.sin(o),a.dy=-i*Math.cos(o),t.bouncesSinceTargetSet++,t.bouncesSinceTargetSet>=5&&(t.targetBrick=Gt(t),t.bouncesSinceTargetSet=0)}a.y>8.4&&(a.x=26.5,a.y=5.9,a.dy=-Math.abs(a.dy));const c=Math.max(0,Math.floor(a.x-Rt)),g=Math.min(52,Math.floor(a.x+Rt)),u=Math.max(0,Math.floor(a.y-Rt)),h=Math.min(6,Math.floor(a.y+Rt));let m=!1,f=!1;const y=d(t);for(let n=c;n<=g;n++)for(let o=u;o<=h;o++){if(0===r[n][o].commitsCount)continue;const s=Math.max(n,Math.min(n+Nt,a.x)),A=Math.max(o,Math.min(o+Nt,a.y));if(Math.pow(a.x-s,2)+Math.pow(a.y-A,2)>=.04409999999999999)continue;const l=r[n][o].level,c=Ht(l);if(r[n][o].level=c,"NONE"===c)r[n][o].commitsCount=0,r[n][o].color=y.intensityColors[0],(null===(e=t.targetBrick)||void 0===e?void 0:e.cx)===n&&(null===(i=t.targetBrick)||void 0===i?void 0:i.cy)===o&&(t.targetBrick=Gt(t),t.bouncesSinceTargetSet=0);else{const t=Qt.indexOf(c);r[n][o].color=y.intensityColors[t]}t.brickEvents.push({frameIndex:t.gameHistory.length,x:n,y:o,color:r[n][o].color});const d=Rt-Math.abs(a.x-s),g=Rt-Math.abs(a.y-A);d<=g?(a.x+=a.dx<0?d:-d,m=!0):(a.y+=a.dy<0?g:-g,f=!0),t.framesSinceLastBrickHit=0,t.config.pointsIncreasedCallback(Yt(t))}m&&(a.dx=-a.dx),f&&(a.dy=-a.dy)}if(a.dy>0&&t.targetBrick){const e=t.targetBrick,i=(Mt-a.y)/a.dy;let r=a.x+a.dx*i;r=Math.abs((r%106+106)%106),r>n&&(r=106-r);const s=e.cx+.5,A=e.cy+.5,l=Mt-A,c=s-r,d=Math.atan2(c,Math.max(l,.5))*(180/Math.PI),g=r-Math.max(-65,Math.min(65,d))/65*3.5,u=Math.max(0,Math.min(46,g-3.5));o.x<u-2?o.x+=2:o.x>u+2?o.x-=2:o.x=u}else if(a.dy>0){const t=o.x+3.5;t<a.x-.5?o.x=Math.min(o.x+2,46):t>a.x+.5&&(o.x=Math.max(o.x-2,0))}Kt(t)},Kt=t=>{t.gameHistory.push({ball:Object.assign({},t.ball),paddle:Object.assign({},t.paddle)})},Yt=t=>{let e=0;return t.grid.forEach((t=>t.forEach((t=>{0===t.commitsCount&&e++})))),e},Gt=t=>{var e,i;const a=[];for(let o=0;o<n;o++)for(let n=0;n<7;n++)(null===(i=null===(e=t.grid[o])||void 0===e?void 0:e[n])||void 0===i?void 0:i.commitsCount)>0&&a.push({cx:o,cy:n});return 0===a.length?null:a[Math.floor(Math.random()*a.length)]},Jt=t=>{return e=void 0,n=void 0,a=function*(){if(t.frameCount=0,t.framesSinceLastBrickHit=0,t.gameHistory=[],t.brickEvents=[],t.grid=h(t),t.initialColors=t.grid.map((t=>t.map((t=>t.color)))),0===t.grid.reduce(((t,e)=>t+e.filter((t=>t.commitsCount>0)).length),0)){const e=Vt(t);return t.config.svgCallback(e),void t.config.gameOverCallback()}for((t=>{t.ball={x:26.5,y:5.9,dx:.75,dy:-.95}})(t),(t=>{t.paddle={x:23,width:7}})(t),t.targetBrick=Gt(t),t.bouncesSinceTargetSet=0;t.grid.some((t=>t.some((t=>t.commitsCount>0))))&&t.frameCount<3e3;)Ft(t),t.frameCount%200==0&&t.grid.reduce(((t,e)=>t+e.filter((t=>t.commitsCount>0)).length),0);const e=Vt(t);t.config.svgCallback(e),t.config.gameStatsCallback&&t.config.gameStatsCallback({totalScore:Yt(t),steps:t.frameCount,ghostsEaten:0}),t.config.gameOverCallback()},new((i=void 0)||(i=Promise))((function(t,o){function r(t){try{A(a.next(t))}catch(t){o(t)}}function s(t){try{A(a.throw(t))}catch(t){o(t)}}function A(e){var n;e.done?t(e.value):(n=e.value,n instanceof i?n:new i((function(t){t(n)}))).then(r,s)}A((a=a.apply(e,n||[])).next())}));var e,n,i,a},Lt={frameCount:0,contributions:[],ball:{x:0,y:0,dx:0,dy:0},paddle:{x:0,width:7},grid:[],monthLabels:[],framesSinceLastBrickHit:0,targetBrick:null,bouncesSinceTargetSet:0,gameHistory:[],initialColors:[],brickEvents:[],config:void 0};class jt{constructor(t){this.conf=Object.assign({},t)}start(){return t=this,e=void 0,i=function*(){switch(this.store=JSON.parse(JSON.stringify(Lt)),this.store.config=Object.assign(Object.assign({},{platform:"github",username:"",svgCallback:t=>{},gameOverCallback:()=>{},gameTheme:"github",pointsIncreasedCallback:t=>{},githubSettings:{accessToken:""}}),this.conf),this.store.config.platform){case"gitlab":this.store.contributions=yield y(this.store);break;case"github":this.store.contributions=yield f(this.store);break;default:throw new Error(`Unsupported platform: ${this.store.config.platform}`)}return g(this.store),u(this.store),yield Jt(this.store),this.store},new((n=void 0)||(n=Promise))((function(a,o){function r(t){try{A(i.next(t))}catch(t){o(t)}}function s(t){try{A(i.throw(t))}catch(t){o(t)}}function A(t){var e;t.done?a(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(r,s)}A((i=i.apply(t,e||[])).next())}));var t,e,n,i}stop(){this.store}}const zt=t=>22*t,Pt=t=>22*t+15,Xt=(t,e,n)=>{var i,a;const o=t.gameHistory.length,r=null!==(a=null===(i=t.initialColors[e])||void 0===i?void 0:i[n])&&void 0!==a?a:"#ebedf0",s=t.cellEvents.filter((t=>t.x===e&&t.y===n));if(0===s.length)return{keyTimes:"0;1",values:`${r};${r}`};const A=[0],l=[r];for(const t of s){const e=Number((t.frameIndex/Math.max(o-1,1)).toFixed(4));e!==A[A.length-1]?(A.push(e),l.push(t.color)):l[l.length-1]=t.color}return 1!==A[A.length-1]&&(A.push(1),l.push(l[l.length-1])),{keyTimes:A.join(";"),values:l.join(";")}},Wt=t=>{const e=t.gameHistory.length,a=Math.max(e*i/2,1e3),o=d(t),r=Pt(10.5);let s='<svg width="1166" height="259" xmlns="http://www.w3.org/2000/svg">';s+=`<desc>Generated with galaga-contribution-graph on ${new Date}</desc>`,s+='<rect width="100%" height="100%" fill="#000000"/>';{let t=12345;const e=()=>(t=1664525*t+1013904223>>>0,t/4294967295);for(let t=0;t<120;t++){const t=(1166*e()).toFixed(1),n=(.4+1.6*e()).toFixed(1),i=(.3+.7*e()).toFixed(2),a=Math.floor(2500+5500*e());s+=`<circle cx="${t}" cy="0" r="${n}" fill="white" opacity="${i}"><animate attributeName="cy" from="-2" to="261" dur="${a}ms" begin="-${Math.floor(e()*a)}ms" repeatCount="indefinite"/></circle>`}}let A="";for(let e=0;e<n;e++)t.monthLabels[e]!==A&&(s+=`<text x="${22*e+10}" y="10" text-anchor="middle" font-size="10" fill="#aaaaaa">${t.monthLabels[e]}</text>`,A=t.monthLabels[e]);const l=o.intensityColors[0];for(let e=0;e<n;e++)for(let n=0;n<7;n++){const i=zt(e),o=Pt(n),r=Xt(t,e,n);s+=`<rect x="${i}" y="${o}" width="20" height="20" rx="3" fill="transparent">\n\t\t\t\t<animate attributeName="fill" calcMode="discrete" dur="${a}ms" repeatCount="indefinite"\n\t\t\t\t\tvalues="${r.values.split(";").map((t=>t===l?"transparent":t)).join(";")}" keyTimes="${r.keyTimes}"/>\n\t\t\t</rect>`}if(e>=2){const n=(t=>{const e=[],n=new Map;for(let i=0;i<t.gameHistory.length;i++){const a=t.gameHistory[i].bullets.filter((t=>t.active)),o=new Set(a.map((t=>t.id)));for(const[t,a]of n)o.has(t)||(e.push({id:t,x:a.x,startFrame:a.startFrame,endFrame:i-1,yPositions:a.yPositions}),n.delete(t));for(const t of a)n.has(t.id)?n.get(t.id).yPositions.push(t.y):n.set(t.id,{x:t.x,startFrame:i,yPositions:[t.y]})}for(const[i,a]of n)e.push({id:i,x:a.x,startFrame:a.startFrame,endFrame:t.gameHistory.length-1,yPositions:a.yPositions});return e})(t);for(const t of n){const n=zt(t.x),i=Number((t.startFrame/(e-1)).toFixed(4)),o=Number((Math.min(t.endFrame+1,e-1)/(e-1)).toFixed(4));let r,A;i<=0&&o>=1?(r="0;1",A="1;1"):i<=0?(r=`0;${o};${o};1`,A="1;1;0;0"):o>=1?(r=`0;${i};${i};1`,A="0;0;1;1"):(r=`0;${i};${i};${o};${o};1`,A="0;0;1;1;0;0");const l=[],c=[],d=Pt(t.yPositions[0]).toFixed(1),g=Pt(t.yPositions[t.yPositions.length-1]).toFixed(1);t.startFrame>0&&(l.push(0),c.push(`${n.toFixed(1)},${d}`));for(let i=0;i<t.yPositions.length;i++){const a=t.startFrame+i,o=Number((a/(e-1)).toFixed(4)),r=Pt(t.yPositions[i]).toFixed(1);0!==l.length&&o===l[l.length-1]||(l.push(o),c.push(`${n.toFixed(1)},${r}`))}1!==l[l.length-1]&&(l.push(1),c.push(`${n.toFixed(1)},${g}`)),s+=`<image x="-5" y="-13" width="10" height="13" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAACACAMAAACMX59YAAAAIGNIUk0AAHomAACAhAAA+gAAAIDoAAB1MAAA6mAAADqYAAAXcJy6UTwAAAByUExURQAAAP////7+/gBE/wBE/wBE/wBE/wBE/wBE/gBE/gBE/wBE/wBE/gBE/wBE/wBE/gBE/gBE/+cgMfUeJf8AAP8AAP4AAP4AAABE/wBE/hhW/y9m/y9n/yNd/4Sl/73O/7zO//8cHP4cHP8AAP4AAP///6QdcYAAAAAYdFJOUwAAAGbHk4W9hb1genq/3RYcHJPFhb2FvbKPFBsAAAABYktHRAH/Ai3eAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAB3RJTUUH6gUIFjcZmpji7QAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyNi0wNS0wOFQyMjo1NToyNSswMDowMDWlEL0AAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjYtMDUtMDhUMjI6NTU6MjUrMDA6MDBE+KgBAAAAKHRFWHRkYXRlOnRpbWVzdGFtcAAyMDI2LTA1LTA4VDIyOjU1OjI1KzAwOjAwE+2J3gAAAk5JREFUaN7tVotWwyAMnahzvp2PSXxMZ/P/3+ggECija1N2ZDvuWmm17W1y82IyyeH0LIPzyXBMdQYXR4IjwZFATDAD0NoeYE/mT30pITBfNK/ZNx2TyAX3acvjL4QE2r/HFxIXptGHmUEkIkkXx0CmwczIl6KD4OqaccPnWx8BXtc/d9GDN/Twepmc6S5A7x1z3iCgDKJfoFxI7kEI7nrdYkGfWXQZE3DW5e2HrGM5C0Anj3aoATmCyH8XAr5B/05oxRpsYGcEvQ5vJwiFxzUAkDAlBUrpndWAshg09NsCO9TgPxEIamE8wZ5rMIzg7b2FD7t+CgiWJxl8lRJ8DyFwJbdUJ0rFLysm6AsjFFowVgMYQlBswX4TtLcSYAiUD59qhzEJGGwSmF5r80CFFAgW+JZND3ZO5zINYDgBbBFRjbdAV63GLQSqjwAghJMJXB4os7bL2e9C9iWVewlUN8H9g8OcYC8fVxY/qxhPc3rOH4T8Bvq5CUC/vgh26zEBYxQBugOrWVCNYOEVwKAE1nAB2YYxBBh/HQ8uCvUJFi7+VARIVwfmAqcBhmQWWoB1XdhFGNGFcb0cZBjjrszRLLWgkgbovJB2JJfKXIljUjlSEev0RJuArIF0vC84/AYNLX/sQtRIxoRxj4qpXkfiaeIm/J+HcbEDDSiRMRoQNV3AA8yDcgJM/G+EPdE3VUpFd5INV9+JXFMykLmAfjIjmyK0wLUj5NYkJKBx0sKrWIMEchGxsgVNsQVNCYEfLGEySrd5xSK6LArjdUwtDIrCL/JGvSI+ReIgAAAAAElFTkSuQmCC" opacity="0" preserveAspectRatio="xMidYMid meet">\n\t\t\t\t<animate attributeName="opacity" calcMode="discrete" dur="${a}ms" repeatCount="indefinite"\n\t\t\t\t\tkeyTimes="${r}" values="${A}"/>\n\t\t\t\t<animateTransform attributeName="transform" type="translate" calcMode="linear"\n\t\t\t\t\tdur="${a}ms" repeatCount="indefinite"\n\t\t\t\t\tkeyTimes="${l.join(";")}" values="${c.join(";")}"/>\n\t\t\t</image>`}}if(e>=2)for(const n of t.explosionEvents){const t=(zt(n.x)+10).toFixed(1),i=(Pt(n.y)+10).toFixed(1),o=Number((n.frameIndex/(e-1)).toFixed(4)),r=Number((Math.min(n.frameIndex+7,e-1)/(e-1)).toFixed(4));if(r<=o)continue;const A=`0;${o};${o};${r};1`,l="0;0;1;0;0",c=`${a}ms`;s+=`<circle cx="${t}" cy="${i}" r="2" fill="none" stroke="${n.color}" stroke-width="3" opacity="0">\n\t\t\t\t<animate attributeName="r" calcMode="linear" dur="${c}" repeatCount="indefinite" keyTimes="${A}" values="2;2;2;20;20"/>\n\t\t\t\t<animate attributeName="stroke-width" calcMode="linear" dur="${c}" repeatCount="indefinite" keyTimes="${A}" values="3;3;3;0;0"/>\n\t\t\t\t<animate attributeName="opacity" calcMode="linear" dur="${c}" repeatCount="indefinite" keyTimes="${A}" values="${l}"/>\n\t\t\t</circle>`;const d=[{dx:0,dy:-11},{dx:0,dy:11},{dx:-11,dy:0},{dx:11,dy:0}];for(const{dx:e,dy:a}of d){const o=(Number(t)+e).toFixed(1),r=(Number(i)+a).toFixed(1);s+=`<circle cx="${t}" cy="${i}" r="2.5" fill="${n.color}" opacity="0">\n\t\t\t\t\t<animate attributeName="cx" calcMode="linear" dur="${c}" repeatCount="indefinite" keyTimes="${A}" values="${t};${t};${t};${o};${o}"/>\n\t\t\t\t\t<animate attributeName="cy" calcMode="linear" dur="${c}" repeatCount="indefinite" keyTimes="${A}" values="${i};${i};${i};${r};${r}"/>\n\t\t\t\t\t<animate attributeName="r" calcMode="linear" dur="${c}" repeatCount="indefinite" keyTimes="${A}" values="2.5;2.5;2.5;0;0"/>\n\t\t\t\t\t<animate attributeName="opacity" calcMode="linear" dur="${c}" repeatCount="indefinite" keyTimes="${A}" values="${l}"/>\n\t\t\t\t</circle>`}}const c=t.gameHistory.map((t=>`${zt(t.ship.x).toFixed(1)},${r.toFixed(1)}`)),g=((t,e)=>{var n,i,a,o;const r=t.gameHistory.length;if(0===r){const t=null!==(n=e[0])&&void 0!==n?n:"0,0";return{keyTimes:"0;1",values:`${t};${t}`}}const s=[],A=[];let l=null,c=null;return e.forEach(((t,e)=>{t!==l&&(null!==l&&null!==c&&e-1!==c&&(s.push(Number(((e-1)/(r-1)).toFixed(4))),A.push(l)),s.push(Number((e/(r-1)).toFixed(4))),A.push(t),l=t,c=e)})),0!==s.length&&1===s[s.length-1]||(0===s.length?(s.push(0,1),A.push(null!==(i=e[0])&&void 0!==i?i:"0,0",null!==(a=e[e.length-1])&&void 0!==a?a:"0,0")):(s.push(1),A.push(null!==(o=null!=l?l:e[e.length-1])&&void 0!==o?o:"0,0"))),{keyTimes:s.join(";"),values:A.join(";")}})(t,c);return s+=`<image x="-16" y="-35" width="32" height="35" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABGCAYAAAB8MJLDAAAAIGNIUk0AAHomAACAhAAA+gAAAIDoAAB1MAAA6mAAADqYAAAXcJy6UTwAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAHdElNRQfqBQgWJQn/24JaAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDI2LTA1LTA4VDIyOjM1OjQ2KzAwOjAwKpfJ5AAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyNi0wNS0wOFQyMjozNTo0NiswMDowMFvKcVgAAAAodEVYdGRhdGU6dGltZXN0YW1wADIwMjYtMDUtMDhUMjI6Mzc6MDkrMDA6MDB6KP6pAAANdklEQVR42u2cW6wdVRnH/2vNfc++HYFKe7S0FQEDaEKjlEhaHyRi0xJJrCKpDyZo0EQu8kBTSwhJjSca0fhQNVFiYiMJiQqxtEAoD4fQRHIk1YJFsWAqtJyc0rP3zJ7Zc1uzfNhnrTN7z+zL2WdTovglO/md6VzWrPn+6/vWreCcw/d9nD9/HoIXFxdz7HkeGo1GjlutVhc3m80cu64Lx3Fy7DhOF7uum+Nms4lWq5XjRqPRxZ7n5XhxcRG+7+f4/Pnzkonv+yCEAEDnwPuMaRAEAADDMDCICSHQdT3HlFJomjaQFUWBqqo5VlW1ixVFybGmaaCUDmRd10EIybFhGAAwkAnnHO12G0EQYGpqCu12G2EYol6vd7Hv+4jjGLVarYs9z0OSJJIZY6hWq10sXLVSqUg2dR1xFAEAVF1HGEUghKBcLsN1XcmO40BRFNi23cXNZhOqqkrWNA2lUqmLG40GDMOAZVldvLi4CNM0YVnWhZXAfffdxw8dOgQA2LtnD766ezcBgN8//jj/7r59AIDbbrsNDz30ELlgEgjDULp6Eeu6jjAMpdv3snD1QSzcfn5+HqdPn8bp06fhOA6Eea2WPL6wsCAlEIahdPVBLNy+iAEgDEPp9r1M6/W6bD0FN5tNyY7joF6vgzEG13VzHMcxWq2WZM/zchyGIdrttizQINN1vUt6nuchjuMct1otya7rgjGWYxFh6vW6jEj1el1GrXq9DrXdboMQAsuyINg0zRxTSmEYRo4VRYGiKANZVVUAAGNsaAUwxqBpGgB0VVovi684iE3TLGTLsiSPLQHh3lnulYCqql0SGLUCshJQVbWvBISrZ/mCSUC4fZIkfSXg+/6qJSAiTpEEkiSR/D8jgSRJ3nsJCFeflAQEj1IBaZp2uf2kJNBPDoUSEG4/KQlEUbRiCURRNFEJZLlLAr7vg1KKUqkEwZZlSTZNU7JhGDkWrt6PH374YX7ixAkAwIsvvji0AmZnZ3HXXXdxANi8eTPuuOMOAgC+78sK9H1ffsVBLNze931YliU7eKVSSbIaRRFM04SmaVIrWdZ1HY7jwLIsqKoK13X7cqlUAqUUrVZL8uHDh3H06NGhLy7s5MmTOHnyJADg3LlzuPPOO5GmKYIgQLlcllypVJAkCaIo6svVahVRFA1kVeT8zWZT9gWE22fZ930EQZBjz/O62PM8hGHI5+fnwRgD51y+3Lp162AtfZVarSaPVyoVbNy0CQAQRRHeevNNAICmadKbhBsLFn0BwZqm5Vjk/70s+gL1eh3E8zxQSkEIAWNs1fzGG2/w/fv3w/d9pGmKZ599Fr7vAwAOHzqEbVu3kt6vzjgQLVXUKy+/zLfd+GkAwM6dO/HYY48R0ThSSmVDqSgKOOerZjWOYxiGIbuu/dg0Tdl17ceWZUHXdTz33HN4++23R3b7fsY5h6qqSNMUYRjCtm3JhmEgSRKI8hexaZqIomgg01qtJpMfwY7j5Fi0/L0sokCtVpP9AtHbWq0JCRR1w0UUEMwYy7Fo+XtZJEW1Wm14FOgXEQSLNFfw+vXrSbVa5WfPns29UMQ5gpTnjvM+FZAkCQzDkC12lk3THMrZlr9fFKBxHMvaLmJVVRHHMQghfVlRlI47UYpKpYLZ2VmysLBA3nnnHbJt27bcy/b+BklAURRQShHHcY4JIYjjGKqq9mUAiONYZpe9PFQCrusOlYDneVICvu9jzZo1MjyKWDxpCWRHovpJQAysTkwCqqri0Ucf5WmaAgAopSjiLVu2YHp6moya/vazrAReeeUVfvz48YHPpZTi1ltvlYnTKBIojAKiVc+yaDlvv/32oQV/8MEHsXfvXlBKu/KAlZqQQJqmmJmZwcGDB4deIzpx4r3iOM7x0Cgg3L5XAq7rjvQ2pmlKOQgdjmNZCQjdDrN+EshylwQ8z5MjrYItyyrkUqlEsNRu3QQTN6PTrfTB8T00ESw1aaKRmqQEkiSRx0sg2IMabHTC7SxCPIFOsmVZFiil8DxPun0vi3zC8zyoSZLk+vH9xvAVRZGF2AID30FV/v0zuDiDzstmM8TVSkDIqCulhoIHsJxKK3BkBYjokCSJ9MQiTtMUSZIsS6Co5V+tBLKDIeOY6JRNWgLZiEA9zwMhREqAEIJSqZTjpUgxUooXRREURYFhGBORgKIoXRIYZFkJlEolEEJybNu2ZCoKqCgKRuFRTLjuJKLASu8jysgYG4lptVqVEhDsum6O0zQdWQIi5LxXEkjTFNVqVbp9LwsJVKvV5Sig6zrOnj0ra7yIs27IP1BHetEGAABhKfCvM0Da8RQhgXcrCnBKwTesB1c63WPeeAtYWBTP5owxIsYLwjBEo9Ho4lqtJiWgCpc4cuQI37Vr1+iFu+PLCPbtk20Cv/JKjqUOkJh/m5QE0jTtug/f8CG0jz8pnx0fOMCxZw8AYHp6GhjcxcDTTz+NrVu3ki4JtNvtsQvaa6JPPikJZIfKJ2FicUSXBMRg4iQsiiI59z8JCQielJmmmZeAGG6qgGAeH5Yn/xMJPo4zK3rA/v37MTMzw0VljGuHDx/G1NTU2Pd5DdOYxnLkuhxv4QyYfFfGGNRqtYp2u52RAIGF5XBvYuWjO6LTsVpjjK1KmlbPuwjKSoCKIazV9Nv/20xIoNVqQRV96UmN433w0ktx6MgREEJz//bhtZcSg+afwzhHstRuf/SKK8jc8b/kWnGepvjyri/i9VOnVl3G7OhygQRWZ4auY+PGTYW1aRACWnCcQ3Yyoes6NmzYUHi9ZVnjx9SMve8lYFnWsgREgiElYOiIHrpfnhyTBLj/rrEfpmWklVWZ8sejXHlhDgCQbL4W/IvbC796vIpEKvrJA4iCTBj+/l6g2ehaJKVWKpUuCXBNRfKt3bIw7NQpjvtX9uCsqX2aFuWFOagHloa4dn8B6a7thefFq3B6dvM2JOvWLWerP93P0WxICVQqlf9LIC+BMez1xYinN+9FNQhQvqjS9zzl6AuczJ/rPO/V1+Vx+vppqL99ggMAr9fAtn+msDD2zfeieu15BHYJr54L+VUXG2MVeqAExrFT50OwDZ+CDkCr9s/Z1R8/AmU2v0aAHnsJ+rGXAADpNVeAbf9M4fXaxs3QKyEiAH9bCHDVxeOl7/+XQJEEVmrnfIaTCyEHgEaQ4mOXdL7GGnu0Xhtfuwb8oikAAFlsgrw1fDZ505QOkUd5USqfP++N11HqkoBYHT6q/fbEIh4/2NHxTR+p4KndneSHA4UToL0W3/01GW3Ug49z/VsPDL3mwI4Pyfzy3qfO8H3PdSqtPffOisrebreXJSBWZr8fJeC6LlY0WnHtNddg544dAIDj2lX485I/0lHbYoUC6lL3NHsRIcvHRxx4pQRQlu5x/Sc/iS2f6IwIHXrySfx1aVHWKLYiCXx3717s3LGjs2SFAywVIXS0h4W/+zkBT3MvmnxlJ0m+JBKh0W72g5vWkpnPru1UBr0SCul8mBtvvJFvX/pI/SwrAdV1XWiaNpIEsrkCJQBVVhiGVQVAwRemtPNbgSmUYDRfyVuXBIYlQNVaDd/4+tcBABsuu2zMR144m163TpbXtu2B5xJCoJbL5YESuOTii8mPf/SjkQtA317gtdvvln9Hh35FULLGe5uEofb5r3GwTpiLfzkDvmn9wC92+eWXDy2vkEC5XF6WgFhAvGqLIqhzy41QnDCM3Z/hHOpLJ4C4UwGJH4x/r4yJaTLXdUGzefH7xbL9n5wEwjDE3ffcs6La+Dh0fBNLnaCW964VXPvhL8Cn6hwAfo0W/oRwRdc3Gw0AQyQQxzF++cgjK7rxLSjh27jkXXtxYcofnpE8i3P4Dcar7KwEZBSo1+u44YYbkKapXLMvpqTEOp0sp2mKubm591w6qqriuuuuk1NxjLFCTpJEznVWKh1v7ZLA5s2bybFjx0beOBkEAdauXcuHTVg8ffBR/m8zH7G3XH89rr76agIA/3jtNf7888/nztmYUuxYGrXuZ9VqFc888wxZ6cZJIQE0m005BT0qB0EgtqlyAPwWlDjHZYW/z8EqWhvJfzAzwz3Hgec4+PmBA4Xn3Drgvl+FzQHwqakpHkURgiBAs9mU0/KjsirGyMVMLJBfmd3LvWt2BtlqBDLqtaI8g9YPZlmUnVK6LIFWqyX3C4itLln2fR9hGHZJQFgDKV7s0yL/HeNPkc0h7Hvfc1ie0Gm329A0DeVyWUqgXC5Lt+9lsV+gXC5DdRwHuq7LlRO6rstNy70sNjAbhtGVZs4iwPVY/fL4XnsTbOh9OeewbRuMMTiOA9u2kSQJHMdBuVwu5Gq1ijiO4TgO1KK1M2JTQT8WLlcul8ee/dUyG6hUVe00SGOY2EaTjVAABnJ2zdN7tn3e0HUkYvu8piFcWnl+wbfPN5tN6LoOTdPgeV6OxV6ALIula0VMKZUbGAWL2dgiBiB3m3DOC1nsEslyqVQCY6yQxaapLNu2jTiOc6wOW0rWTwJZFucP2p8jXLSXh7lrv2RMbMgqOmeY22eZ2rbdtYZWLCPv5TRN0W63c8wYQxAEksXeniwX1bxt23LrmuA4jnMchiEYYzkOgkByu91GmqY5FuP/vSz+kxXbtvEfwITwAX3FN6kAAAAASUVORK5CYII=" preserveAspectRatio="xMidYMid meet">\n\t\t<animateTransform attributeName="transform" type="translate" calcMode="linear"\n\t\t\tdur="${a}ms" repeatCount="indefinite"\n\t\t\tkeyTimes="${g.keyTimes}"\n\t\t\tvalues="${g.values}"/>\n\t</image>`,s+="</svg>",s};const qt=["NONE","FIRST_QUARTILE","SECOND_QUARTILE","THIRD_QUARTILE","FOURTH_QUARTILE"],Zt=t=>{const e=qt.indexOf(t);return qt[Math.max(0,e-1)]},$t=()=>Math.floor(5*Math.random())+4,_t=t=>t.grid.some((t=>t.some((t=>t.commitsCount>0)))),te=(t,e=-1)=>{const i=Math.round(t.ship.x-.5),a=e=>t.grid[e].reduce(((t,e)=>{var n;return t+(null!==(n={NONE:0,FIRST_QUARTILE:1,SECOND_QUARTILE:2,THIRD_QUARTILE:3,FOURTH_QUARTILE:4}[e.level])&&void 0!==n?n:0)}),0);for(let t=3;t<=n;t++){let o=-1,r=0;for(let s=-t;s<=t;s++){const t=i+s;if(t<0||t>=n)continue;if(t===e)continue;const A=a(t);A>r&&(r=A,o=t)}if(-1!==o)return o}for(let i=0;i<n;i++)if(i!==e&&t.grid[i].some((t=>t.commitsCount>0)))return i;return Math.floor(26.5)},ee=t=>{var e;t.frameCount++;const{grid:i,ship:a}=t,o=d(t);for(const e of t.bullets){if(!e.active)continue;if(e.y-=.6,e.y<-1){e.active=!1;continue}const a=Math.round(e.x-.5),r=Math.floor(e.y);if(a>=0&&a<n&&r>=0&&r<7&&i[a][r].commitsCount>0){const n=i[a][r].color,s=Zt(i[a][r].level);i[a][r].level=s,i[a][r].color=o.intensityColors[qt.indexOf(s)],"NONE"===s&&(i[a][r].commitsCount=0,t.explosionEvents.push({frameIndex:t.gameHistory.length,x:a,y:r,color:n})),t.cellEvents.push({frameIndex:t.gameHistory.length,x:a,y:r,color:i[a][r].color}),t.config.pointsIncreasedCallback(t.cellEvents.length),e.active=!1}}t.bullets=t.bullets.filter((t=>t.active)),(null===(e=i[t.currentTargetCol])||void 0===e?void 0:e.some((t=>t.commitsCount>0)))||(t.currentTargetCol=te(t),t.framesShootingAtTarget=0);const r=t.currentTargetCol,s=r+.5,A=s-a.x;Math.abs(A)>.4?a.x+=.4*Math.sign(A):a.x=s,a.x=Math.max(.8,Math.min(52.2,a.x));const l=Math.abs(a.x-s)<.5,c=i[r].some((t=>t.commitsCount>0));l&&c&&(t.framesShootingAtTarget>=t.framesAllowedForTarget?(t.currentTargetCol=te(t,r),t.framesShootingAtTarget=0,t.framesAllowedForTarget=$t()):(t.frameCount%2==0&&t.bullets.length<10&&t.bullets.push({id:t.nextBulletId++,x:s,y:9.5,active:!0}),t.framesShootingAtTarget++)),(t=>{t.gameHistory.push({ship:{x:t.ship.x},bullets:t.bullets.map((t=>Object.assign({},t)))})})(t)},ne=t=>{return e=void 0,n=void 0,a=function*(){if(t.frameCount=0,t.nextBulletId=0,t.gameHistory=[],t.cellEvents=[],t.explosionEvents=[],t.bullets=[],t.grid=h(t),t.initialColors=t.grid.map((t=>t.map((t=>t.color)))),!_t(t)){const e=Wt(t);return t.config.svgCallback(e),void t.config.gameOverCallback()}for(t.ship={x:26.5},t.currentTargetCol=te(t),t.framesShootingAtTarget=0,t.framesAllowedForTarget=$t();_t(t)&&t.frameCount<3e3;)ee(t);const e=Wt(t);t.config.svgCallback(e),t.config.gameStatsCallback&&t.config.gameStatsCallback({totalScore:t.cellEvents.length,steps:t.frameCount,ghostsEaten:0}),t.config.gameOverCallback()},new((i=void 0)||(i=Promise))((function(t,o){function r(t){try{A(a.next(t))}catch(t){o(t)}}function s(t){try{A(a.throw(t))}catch(t){o(t)}}function A(e){var n;e.done?t(e.value):(n=e.value,n instanceof i?n:new i((function(t){t(n)}))).then(r,s)}A((a=a.apply(e,n||[])).next())}));var e,n,i,a},ie={frameCount:0,nextBulletId:0,contributions:[],ship:{x:0},bullets:[],grid:[],monthLabels:[],gameHistory:[],initialColors:[],cellEvents:[],explosionEvents:[],currentTargetCol:-1,framesShootingAtTarget:0,framesAllowedForTarget:4,config:void 0};class ae{constructor(t){this.conf=Object.assign({},t)}start(){return t=this,e=void 0,i=function*(){switch(this.store=JSON.parse(JSON.stringify(ie)),this.store.config=Object.assign(Object.assign({},{platform:"github",username:"",svgCallback:t=>{},gameOverCallback:()=>{},gameTheme:"github",pointsIncreasedCallback:t=>{},githubSettings:{accessToken:""}}),this.conf),this.store.config.platform){case"gitlab":this.store.contributions=yield y(this.store);break;case"github":this.store.contributions=yield f(this.store);break;default:throw new Error(`Unsupported platform: ${this.store.config.platform}`)}return g(this.store),u(this.store),yield ne(this.store),this.store},new((n=void 0)||(n=Promise))((function(a,o){function r(t){try{A(i.next(t))}catch(t){o(t)}}function s(t){try{A(i.throw(t))}catch(t){o(t)}}function A(t){var e;t.done?a(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(r,s)}A((i=i.apply(t,e||[])).next())}));var t,e,n,i}stop(){this.store}}const oe="yellow",re={blinky:{up:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABiklEQVR4nIXSO2sVURQF4G8mMwa8QU2KxFcjCoIgacR/oCBYCP4fsTEIBkWwEK21UAQLIdjYaKEiJIXBXhNBCFaSeDP3zLa4mdyj5rHgwNmPtffZ62z+Q4miKHlWs3yALwUvKYphbC8UjDN3nIUB/SCCSDRnWKiZVxTFrvxp5kMRHbEltaTODuIED3YkT3FnUy+uS815qQkzMSJOxAWpuSo1A72Y4f5f5DFuBpE+vmsmZ9ukF9Eu/xwV+Pw1TEYcOtum9GmxCaLmdl7jeRDp968mcnQFMqS02bSkMV5tS36UBL6t7ixO6o/uK6sKymM0Q9l5NKC/Ldb3lWGrqenRCw73hr61H9viDujjKbztnLnae50uF4sl1nf91/2xvt9q7YuyEwKCNg+2DFoGue/fnHLoGwbyZQ/akqqkykkFZW6XmNy6VJdYyhPP8eE07/PCl1kqqbbMI3BrjY1rvMH4SW4kmou86Eac5UmiOcUcxq/wep2NirugYh4TXfOah6izUauax5leB2vuwR+e2vAshd8i9AAAAABJRU5ErkJggg==",down:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABmUlEQVR4nHXTT0tUYRQG8N97/TOloSYpYv/BNlLYqqJli1Z9gz5SOwkKgpDaRBS5CKJ2fYFWrsyNZWKSOYliw8y9p8XMHa+Tc+ByOec8z/M+7z3nJidHwhtc7ORreIjog29H1iYunmc5iPIpyGd5h0cd8ZNPvcLzXmJBXq1N8/g/kSSlyywFkdPMaVZJvfVZnkhHImmSZyWol9jrqMSMsti5tmhwJyhSO+8bZT8ogrulQDbDQZe8/ZPt38eZA9jbZ2OjKzTFPpJxPrdoBFFsruVRxq+tI/v1nW45vn2NIFo0TvMxTdLcYRBt+DHPne/Up36GvaygDn+p17+srp+d59S1KHyvXOPHgaFLTC9gfUtQdDp/TLAbRJPDQ2O7cyIuiAgzlQlcjSkR8yLCWJS7McJGV6Df2HoXqZqPsJmVdk56J7JEVrGsmida2TATZeM+q+U4E9kcKzdYqe7Hg+OYcdN8atG41f5Zagu8KMhv8rbck9u8L8iv8xS1e3xo0TjHMgyM8BJDnUMGa7xWjrYdQ8O8cuSkNsoSsn/EzgO2a6zxyAAAAABJRU5ErkJggg==",left:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABzklEQVR4nIWSy2tTURCHvzNnzk0TS21sQluhq4Kb+sAH4qrgyoV/oNuCUIogEUGKf4DoolBFfCC4sYKgDVXig/Tec8ZF7k1uo9GBWczvnN8H84DpcM6h6ruw14VBBwZdeIX3inPuj//18FkmS/jtDdgvYGhgBhYhvwwv2khPs8z/3R2CnIcHlWlWXsXvMleDOEBVZaM0R8gTxGljghghN7BLyK4PwY/6UeUsbNuZlsVvn3JLyWz+1MTc8mbHP8x+HpmpWgVZhh5OKsbc0/6bgxhjzM3MbDicAN4f2jj6fUsQE8R52McBrcz7VbpPaJmxWALMxoBOMPMrE0bV3hXYC42grMCziOY3SJG18lf+fQxYx6y1XupfP1t9M6vwkjZ8GQ3JR3t3YHY8MGvWZsBpsw99s8GhmZwcbBd+sQQf/7e6WdmBIynKdRqkf17ZjBCrFdMQg5SgmNbqNySuFAySGwFP1AI6rVW1g0KANoCA3oK3DqR8lIvw/Bzs17Xb8LqqBTosI70ChjfhEVnWuIC/EyHfhIc4L2jmrqH3IuTX0S2azcYmcr+A4RrymCwEafuwJaoNAB+CLKjuiGoY9+q9XxDdcSF4AFEJiyJ3QwjyGx0DPZpbZTAYAAAAAElFTkSuQmCC",right:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABp0lEQVR4nI3TO2tUQRQH8N+9e9eg0YBBlwR8gNHKRqz8Amph4zcSBCWgEBALQbAU0U4EUewsfDQJNuIDiaAkSNhCY3Rz79xjsdndaxKDB6aYM//HzDln2DayrMXDgrct3hXcR7Y9dhMT14/wNFEGEURFb5onuLKjzDQ3B6QgalJNauamuLYt+SA3gkiUTffBauYPbBbJmB2AalJ8+Ryx2o1oN0Qm9kSdeim9Xyh/FFm0uNzUeFSTEmUsfoxhLC6NBNbXIyIipVR+fTGf8AAKZB2qjDyoHZ0B+04wvjJleWDRbisTuzponcon5Om7OoN7Fb1hsVY+RUTE2PGIw2J0g6jjd0TYG3FBnSp6uAPzg4oPwd1vEUvdCJ2RwNRk/1mvPwyxeF5gbUtLJjtb27TcJdsyBGs58n+Mxf9E6y9yUDf3NVVNtQOmzm0Agjpr3Cb6h0VO0SQNu9WPlGNS/x3FWRaawBlenuRVU/g8b/J++2G/grlVfp3jMcaOMZsoT3O3ryM/w4OK3iEuYewiz9b4iasDtznsHpi3uG3kAu2CW0Zfery98R/+AA8N/U/uOBf2AAAAAElFTkSuQmCC"},pinky:{up:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACkElEQVR4nG2TT2hcVRTGf/fc+2bey4xJk9hoXGlMES0uCoVoF4IWW1BEkWBB6lKwEPBPLXUlhYIYEiouRDdSsGDalJYmrtIuhECLC0MQIaWmgo2RJo0WMmn+zMy997h4aScTenbn+8453+E798L2EECMFHDjCWbRwoLDTmBEcrI5TFNiDWVjhtJgX549fGV3W+nplKisV+dqu344+NuKrP1SMeZDfNSHDsgonprq//njZ7v2QpJAYZOoAhswW5lm37mXvvlX7w00rZEkiSlRHLz5/mXd1xbqEOr6kaoeq6l+qqqfqEKoP1/21bkPJrWMG7bW5uLGGIDj1/svqq/4as+LqjjVym1V/TKqnlBdW1ClRfWJPap+xVf/endcgc+NMThVBejY6UrQAn9e27JazUCA7DHQ1RwKAbq0FaBTVRFxTtpNKU1dEe5us7gG1IGwBVuGLEnoIMuMtWKAL268ef5Y73NvI8E7jhagCxhSmN/0uLsOx5Nc4NQaUVN/64+f6Lnw1rcOKJVc0WHwrCYwCFiFumncaDGBzzxEB7UClKHVpA4oOSCEGPNCFyFY8Kb5wApsuM3D50RdPECQBgSEmDc2gIYBFhAFzcVMFADbeJsKMbVeVSOqoEpIqYUitTwPqBJjwXoCaN4aBfAh+BjT6OXO786YuqgQY6rezk0VZP7XQiyqRyxGosidaRez6GMIEfACdO7IOsUt/Zc+dfbA2MTMdzVTNrJy+6orjPSdcT++cHr5n0lHBpMz3/snR1+95Jb+TtvTRwR4FOCNM6+cXOorPTMKOIF3xl77er3btn8FgMDjbufQ+OvDVYH3ALen3Ds6sv/EMtB/34FDQEtusgE4wpa/K4IAAyIPoIx8GP8DW7gOkh3Y7ZsAAAAASUVORK5CYII=",down:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACZ0lEQVR4nHWRy4vNYRjHP8/ze885c+GIuTSZxriMS6KkKeQSK0lRDAsbthaTzSyUqYlhxYIsJkTNiGYh+RMYKRFTM5Fxq8ll3BriMOac3+95LM45GYOn3sX79n2/l+cL/58e4CkwAtwFwr9A8tfNOQJsernr2toFtauyFPIgORp7tw68TT6PAgcA+zcBdD7be6O7pXYDVNbgkVsRJEruPR6/puH85hsfyO0uk0gJgOOdT3b1d7csbctLQVRjDXhZxrHgMQH041Cov7jx+kdye0TERERw90PDOy6fXr5yXyxfRcVRomnmzADHqiTWT4Mhc7H1ch72q7sDNC+qnI/FFkslyhwB8d+f3SBL8RTAq5otDysA11IMicSQClE6BI4CS7yYUoB6h2MKxyOYC1JItEGyeSAC6B7c2Tdhhy3xN/7nnHD3jrz7xJQ3c7cuS5L99wsKdxRoakrXVzhu1JTilt1nAI+gYlrVATQ1NxgsUyA/GSfgwBdYvB4ihVfPgRQgCuOgjSDV4O9AIlFsEmBCAfEIUOBsQsNIUajpFPCmALHDSWgag+wPkFPANyAogAbABcDBc2q396HFtYJZFBMc/S5htL0UL7ZYEBUxBUyBxA085Sb510rKIICn3fTHWNBvo4FM0aFn3PTnWPCUW0k2VmDWjFSGKCHdemXL0IMXvUYFyM9Xurh39aCcWziQez8AlWDjD3VZ3+pBHX8USGcB6gDab23r+by9dt09oErg4HDb1ck1M5feLK2RaqIzI3v7JxeEuj4gPU9nX3rc1j+RRq6Wy+kCaqeUdQaYMa28C2XCYpH0iKC/AKR7DJ4ZSbreAAAAAElFTkSuQmCC",left:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACnklEQVR4nG2TTYiVZRTHf+c8z/vee+emNVycYBocHAqGEN3IgEgg7bIZBir72CW2aNEERZiK6Ci4sNrooi9q02KaZhYubNGuhVEkLcqmLkhpwgwqRGBzZ+6d+77POS7uxUw8yz+HP/+Pc+C+EREIIsAc8AdwBVhEEOT+bf4PxTySinQid9+z8vKFpxoDT1RB+KdzrTM69+zFDuknsni0LMoHEAhkzuzV/V+fGNmyC2qP4sENQLqirK9wa+0XHv9q+kzL7DBm9xCoImbHf33x/Mnx8amurIlqVyOSIAnUFcus9MLtxl/f5FsXJk+6yCzufc/wxqVXvvC0lgozS3624z6T3Gfc/T1zd3dvuduxjVQeKjeaz8078I6IoO4OMMaBHXjFTUSUNyswBNQcXu27rIO8nSsK45VRgG3ujoYsyAC5TDyzkxhh5UY/k0zgtlAZhXxrHxsEHNCe/xijaCrS4e9e+Pz1fQ+7Qcgl7y+XBgapfU9N6xDakvtju+3n5+deK8vytAIjw9aoXjjo5k0YbgAfJripUIXyXeg2gQ7wfgHJ8MxtRBs5MBKBdpE2oArMlUCA1dDrR7yn5IMAXevhwcGgSwGwHgHtSQb+TSCxh4iDOxQKfwOiEB3KBATUBSBEQFx64XiWmxgKBg6WU4KjySMGJMFDNMzvxqJAwhzP3WT9poJDVDyKaet61Nb16CoGCkGQ9rJ65ma9I00K1DfHOqFb5hOLey83l+eNKsja7zr82Y4ft3z65PfSWlIG4M/lBXYuPH05dDv55vwhgE0AB7+d+vj29NDEJaD2SNj01tJLX7a317adBxRBx+tji7/tX9gYjLUjQG3f0MQPFyc/WQVmCCGg6DGgAaBRBfQcSOU/n5oBH/XfHGBQ4JRq5A5IWx73SeLhogAAAABJRU5ErkJggg==",right:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACmUlEQVR4nGWTT4iWVRTGf+fce9/vj6Nf4/hnRlEERVcuAsFw0SKRRAhSiBJXgiQiqNRCwc1AC6FsihYVtrKYWShRkkSudBNFCPkVrSSmwj/ziVoa8c3Me99zXLzfTJTP6p57D8957nnOgf9DAUECXCxgJsGdAvmWIAF9Khv5TxAChcWJpsuO6QOXtw4v29wmOzZ3P2+Y3Nm9XT3qWvRDZPxpAkWWWXp/ev/lY8uXbwfpQGvw5sDsn/jjXxn7dOf5Ho8PDm5rgpSSpOzvTL/21Zsja3bNS1tURSL3ARWIjuGZlfD37e/jxg93n38U+wdzzo6IAJz+7dVLnk/mOR8391mvcc7dT7j78dL93Xl3d6+qqnxw6ppH+EBVUXcHWDXGSN3A4wINyEB/HzAELBV4IwFQAX+8vMUyjJkZKkG0Q7MoUgIDnqm/3VoN7RXAPaAIAPT79fHZ50Z1tFiXUiCoV/7e9b2Th2zdthz6FMzUBBs2wfBCyVwBEFvAKo27Om4/7596qaz4XIHO0tCICLWCCaAHN6/Cw3FqJ/5SOFOSSvAuXDkCK6qmAsMRKDNWmxIc5oG3HaJBqRCkNquX4HQeWB4G0igVcF0YB/fa2EpgNoDZQmKNuQh9Bwev3bN/h9PAipDd3RBAK6whuWowj/giubVCxsEGRRWwbJVZy7Le60aRSgGskKx3f4x+64fCE4YKBNBeN1rLsrlZrR5WjjQ7Gh/2musv7P7ym18+nqUNVe+7OPTZ9qk0teOTmd+vKEvgxs1J1k4+fzHc+alIjSEFRgH2Tr3w1oNtnU0XgAi8cmnPRH99Y/VHSK1ziDj+9YtnyzbFUSBsbKw998Wes/8Ahxc6cABZXB2AIyISFvdMVYATMcZBTAJeB3gCWn4PpFt1S94AAAAASUVORK5CYII="},inky:{up:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABzklEQVR4nJWTzWtTURDFf3fyXtqSCKa1GsWPTRG6UdSVa/8pV+JK6kYh4EoIIrgRuhAMgitdWGqhdtFWq0IoIsVqQUSSZ/Jy73HxkvBin6ADA3fOnXOGmbkXCqwEBrSATWAbeGhFiYeIpdgBDY7OtfiUpHgJSbz7kjBVfQrciO3vUo7aqQe0BxlJEiF4QvDZWeLNZzF15JYrJB+bb7KZiMuDHhd8OhYZ+Vmfcs2nbOyK8vRt54YyBlCqNPja1bL3KRY8Jj3JkVu/JJCO14N/5H3K1q6Amy4rDWCvCMH/8D4NA6kfJJ8TkKQkSApS2/uUrgQsA1jknDFbH+CcfQRcCWIHO7n+vgHTLqu2A+CBciWNsz7Kz9nv90bDakv68Gf/kg4kreSH+3YvAe4Dtj8GC4iFHoLnpwSsGdD5lzdyyPoC6NpoEf9v2Q5stAcAQhhM5IQwKMRyZhACAFLALEKajPMYMI6VZRnY/PAmYuHiaw76WUvfMWZmX3LizApyGba9B4tX1jGLqABQg3K1yepWh3MLTYOIk6fvst7uMVe/5xj+zPOLj1l7n1CtXY8h5tLVZ7zY6ABLWGQOuOMgAnDOGdBgcrjxEBsNbAZYMov4DRt5NkCBfZ1GAAAAAElFTkSuQmCC",down:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAB10lEQVR4nIWT3WsTURDFfzP37hrTD1QM9hPTYlP7ov6hvgcsvhSUUpD+EfUpRKEi+CRUkYgFrTakabK5d3zYTbLRiAcG7s6eM3vmsBfmQMCRpi1uLFyQVi+oVE8UdB53Bk5EcZWXrNbbXIUMM8PMuBwNqN1/C5XnDmSu2IOyvnXMsBDNq64ZtbUjnRkigogoK5u5OISMGMNf4hAyQuFqe+/QqU6GCEn1BYOC9K+vlwf1zPDJviMPxsiudkks/jekMW5aZJQ9jIA65xwbOxERRUR/AudzNFZUsbay3YhevYPqcpss37ljU8SS7R+l/kczI8ZAP2SIPxFIuthwEeDaLOpodO2cS1XVj1OKZjGEMDSzOPS+sjh2IXKuOOmOnb0GFm6DW4J3JfttIEkt1moWW2b5ugFAekDybSblTTM25qS/YsZucY4xMDIDd+Yp/6Jmkc8yfY5xBICq52uJM4UqECcvRHRCMIuoelT9jKjMyRvpILdlRuPJKd8Lmz0zlm61uHOvRVb0OmbsPD6drAW/YGH5Fe1PPbYaBykkrNWbvO8MWK8fOBABpb53yIfLPndXnzpIePDomDdf+qSLR4hzCtJU8OSBKOizP66vR/y+Ux33EnBN71P5DQllVXyQma9lAAAAAElFTkSuQmCC",left:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAB4ElEQVR4nH2SvWtUURDFf3Pf24+siYkYFLRRizSaSiVi7V9g7b9hpSgogmIhipVbC0IwQrTQRgQ/CiMxCbsgxi9iIMHGENndrG/vPRZv3+atbDIwMHM4Z+65946xc1SByW791cwuSNIufIiiCOASFB8z/71FU2JTor7miSpPgKtdzgAxgCtdZ2lVSGmG4AnB9/r6uijsuRlh/WLnHLjyFea+CO8TOp12T5Rlp9PG+4TlX6JYuuGcS8VmBnCRd3VNe5/U8id284Okl5kj7xNq6wIu501Mz/xck/c+kaRaTvxc2/FUSh2G4IFnABQKDtzehzYksc8nG5spuefgqDRyJMUa2YBEwsrTUeqeO7z/1uBk8CBtbXSJWQ5LVNIBH/OPu7jSAB4AvOZ3Cs5sSZv/P56kuSDV81gInqYEzMdAky0Po47zpcFffNoGgH8BaDnAMLfDau0S6m5ArwSQQj9JYSCWC9ebJgUsZyXrzVyfqL/vOGCUYQPnYianPrP8J2M6Dh5eYv+BBXx38GoTTkx9wrmYIQDGAG7zttbgzLlXDsqMjV9j4UebieOzBpGBcWziEYsrLcYP3SpCiVNnX/BmqQHcJ45jKJTvAiMAzswwqwLF7XtaDK5q2ZWhgovvRVHMP7z+WsD4PpRYAAAAAElFTkSuQmCC",right:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAB1klEQVR4nI2Tu4tTURDGf2fOvUlMcAXjigpZFfGBlaAI+h/4T9nYCClslFiJLlhZbJXCJmyxrs91bdyXYLFE8UGURaImN3PG4t6blxH8YIr5+OabOXPOcUzBpeECPAAuZnRb4FqAMK2fgPce4Aa+2GTjY5dgRt+M9m9lbv4xcDuOvZtdDEixXOf9F8MsjRCUEHSYf1KjWrvv00GnEJdusvPNUE1QTYZFeagmDAY92j+NucP3GJo4l4799msqCkFbZrY7bWBmr0LQF6oJux3Dx3dlrP8SGhTVpGkjPBsrXs84VU2e7CUKPAVAxDl86RH9dMxOJtx/0ozKyCAHhzQBM/yJ5ShCABbZ+NDLl7WcCavHzCiNDLYzXiIzjgdlM+lRLLYAXrOXbTwTr5rZ1owd7JjZio1pkU4EdOlPXsjVf7yTM9OEoyuAzLrV/4KJyAQRwuCvfBY3BgECBpgFRKKRe5aLRJiFCS7P0YEAB6kAIhHnLq+z+TkzcMKR2nP2lVf47tJJOwPh7IU1yBtZFaBO680PLl1pFqBA5cB1Xm73OH1+qQBeAOaPNlh794vawp0CxCycWmR1q0up8pBsDXVwZUi/MtAACvlpXHrUhkTiMyoCbvk4dn8AgDJfwO8SCRMAAAAASUVORK5CYII="},clyde:{up:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACj0lEQVR4nG2TT2hUVxSHv3PunZfJm5CMiSGSaigxUDSIFv9sutBNQSiuCl1YpO2iUdAiFURKRSUBiyC6EFEsLrJQEHHdlXShiwYpVVBQpJuaVkZDdDI248x7954u5llH8MCFy3fO+fG799wrvCfUJxLz9mXgwwL97rw/HPL8feVvw3sPcLwPrv8z1W92ELPvscdfpS2Fq8BBEXmnR7q3vdjJh1OjP4wNLmMjLyOlItNGWRjk7t8pH8/OHxKRs2bWZVk9Kcw8+Ha97RgN2eRA3rKZCbPTmJ3B7Og2+6Anb32+NmR3vh4JwHfOuUJdBAc//rV/2MLS7YxqDGBmTx+anfdms8O28OcTA7OBiRhC45fszu4+A/aKCN7MCLB1zaARKxt4VRPVAPR+BNEgKzM0vpqXDXAV0RjWtTetaHpg0szwmnjSdv6aDOAplaS/ONhzMMCaQGCgr2M5SE1DVJQQxDk0tvOLj6Yqu2xkIerspx5qQBOubIdmgPoCXPuko5k/wl3amZTWZfHu7upUCOGYBzaMVpZTKxGpPYEL46AlqNc7MwrA/Bz8XIXMYGkJW0EcqzRSYNwD/xIUYgAFGssd69o16AgsFoIFb0UFQlMB/3/CigZfNFuxKNgbMQMRA3CFnoMAMaHzVouiWCaPZXKsYHTVFFYUyLCA9RB1UTyuQ80Ttea8PhdvJSLa4foCHxPymLsIZAoMURa0lvrJs/63xccJpCDzFU1PhptjP9ltedarpPDgj0q+5Vwy5+tpub/8WoEqwIm5L4cbmwfcDSAZ8kzf/2ZVa1S5WNyi29jvbtzbs7qZIgeA8merSrd+/WJlHdiHcw6PnwZ6O/9CRXFnQN/MARHpcXCqC1UVPSIi/AeSmwjoBKJbfAAAAABJRU5ErkJggg==",down:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACbElEQVR4nHWSu2tUYRDFfzP37t27DzbZyOrGRyISBIPaaKNNChsbKxEEKx9EEEUUUkgKEaKCRAVfUUNasU7tH5BCQaIiEl/EmEgIebnZzd29+41FEl2DDkwz35wz35wzwv/jOrAHqAHTwDnABLCGJr8RIQJmXAJ2vz2ROt65YTmNMyajLDsGS5kqfAKu/YVZN/XK2KncjY6NFWit4ZLEABKj8l31x3yK7QNLdyO4/C+C3s+n833t++diczivTICtdgjUU1QRiN7kgpaBxXsRXGwk6Jk41XSrdd9CLCVUQPHW/c2BGc4yuPKHrJ+7X+o36FnToGvzlrIzAUl6itZXpFtTS4BQEUMtdi5TjB1wCEBX30tSFSURwtmXcGEaCh3gVsG5FrjwaSWbNyHVuqZhcW2DxxPdmSX3IFG3yoj9iWmzJ3mze56ZfWioj5l7lKtXzjdVgGEFDmxpKqcJahB2NixdgIQPosDOhnoHBEbYshACXQosEgs4hegLbXtBUlCerYBfBa8O5Sn8Ngi2AqVxRGOlqgA/FfBRD5yDwaMkPwPLkH5yBOYWIHIweJjMNwi/A0+PQVQBLwBQ/7fKMdjyRzfWW1AsC/IVBzEKWhv1F/raQWLMTToikBUDnA/EmMNCnM4GPvkZYAYDp3PqYx7WVHOSHVc8kPlAXbYaC3UViBVoIanofMbfd9tGZ95nIQCZzWt7n3vVfK02IlN5JQC+ZOm8yWudSvqEYFAAuPPuZHHpYDMvgDAHV8e7i9GuFMOAB0hRGJo4U6xtUx4DQUeCZ+9PFys+PF/zph/INNzdABA0eKfA0CohQAJ4CMgv7wr9rCokR+cAAAAASUVORK5CYII=",left:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACk0lEQVR4nGWTT4jVVRTHP+fcM783b97TpzNqjDMaZTCFZBJCbqRN62jbRhGrhWW4axM0BrNIEJpwCoUGghZtbOWmbWoUEU0Jok8xCMU/U6O+p7557917T4vf82V54HsvF77nfr/33HPg/yECqgp8BzQHWEQVEXmCbv85mEmM8dhG9x3XDjVeLcbuGaos/92YnD55Z6qPnDOzj2OM/+o9rt1Qjt9+t3Kw2NCFBriQEZAeShv+vLme50+0jnTUZ8kZAH20roP5y4emDtqLxLyWSA+ki8oqSmHkp0Kc3n4nNg/UPgpZPhw+R0QQmLv+wYyn9Fs/5+XkX25zP0qJb15w97Z793fPx4uUFuhf3DfuwOHHa3Lq6vmfU0qp7+7uvuy+YO6fr3Hv3PJh3P3B+1/Q8fdxYB5ArQhSlyrP7tylYS087AJsgELhxiTS2MTGmYFMYxsSUVxQEDMTjb301aV31r++o+aZh2rBAFqQUpnUg/TIafcaoUPhz3n+dd/42zHGIwo8s3n0pi3NzpBuXaUS2vD1bmglqDfxT/ewcqENqQmLr4GDV8hbK3dHga0GdHCgehn9djskg/v3y/8RQM7C4iT0EjxYLZ1k6PcN6HUMUEShl0tCoIQPsAqsPhhcBqRyF8kAQQFFHQTyGHGYDOQKMVeIQzeAG2UHBYaNFMmOF2RdKUuIlkS9LaYrZj5CxgbKbdQD2aMDJAXWURj6V2EvzY/80vqjBjWQ63VdM8f3W47qT7JSU6pw6UI9v7IwuhRa1aJWcYA6wNzS3on27gk5DVSmRmTuylubO09XWQQVsPDyhJxu7p/o1k0Og1bfmLYfz7y5qQ28h5kRkE9AxgBCCAosgIbhlAmjAp+VUw6g4wKzqso/UZISjmIm/qIAAAAASUVORK5CYII=",right:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACkUlEQVR4nG2Sz4uVZRTHP+c8z33vfe+90zg/dEaZULlUEgQa1NZ/wIXQtl8bN2HRJlq4CwRhxDEZBYtpF9QiaSHtWgiioBthwCjMizk23hrTxmruve/7nNPivd7IOnB4OHCew/mezxeeDhEQkRpczODnGqzV4RohBET+2/6vQlXqxnIT27/23tT+fPL3Jm54f8L2Lv157W6yLrXa61YU9j8DVKZFz99/d/JIbfYR5Anq4I6Jo2xmsAm7Tw2//sl4DTAABYgxyjR2vnc0PxI6D0qboySfgj7IAGUI1h6Wtk/LO8f2HH4WLsQQVMaaYal/dNrTMoV/Muvut9y97/7lPvdF3E/ivtJx94ee0kaRFg/4BHyO6nj/r+xDUjpL4eX3Po4/NtzPTbkvB3fvubt7SqnodbsJ9GolPIjOoCqeKSiEDgCNXSDtGbg/A5kDOwAI22Bu7x6dknmyKFE9+YU77zxzyHcNTYcWsZsAtCchA3CHZMA9HCDX2Mlg7f1tr2alX1dgodV8FAlACXx6EMrv2Fh9wODMy9D+ER4DK68g3MW7t7m1+BzN/KYOYCECA0wABwc2H8K5lyBTsGLECfhtHc52KvJhCASMNIgVSq+afAR2kKCf/nHKk/yrgBI8x4SKQTXfq8cyyvEnBWtQWp1ybDcBa45qDzwxkgF4humvWt1CwCOmPaKuS/SAEcADpr+ESI3RwTAFZmmArtfji6fl8r3VFrRAehO64wTfZif8G++2lTps3Z7Q50/rJek2lNxIsB3g+JU35h8fmA4XQbM2fLD65sLWC634BQQFYQ7O/PDWzmJnXZZA4+4GKzfent9qwWeoKlD7CDSvRCkCp5Rq0crtQSK1jzWOvKsaFT0ZY5S/AWqkD0QparkoAAAAAElFTkSuQmCC"},eyes:{up:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAj0lEQVR4nO2RsQ7CMAxE79K6aQCJbuztb8Af8P8rX8HaYzCChgbanZ5kyYqezjkb2MR3K02eOUdzJiBwhBCsgPWE7RcmD9YfBsCgp9zdS5Kul/Mpn50z95tzdSkAAKSYZp/7ZDzKF6XYxIUUvw12bbvKAF1VMQCvXUhSydXIjDk2kcDkjL4kF1k+4xrmH/UA3stP0Iur7f8AAAAASUVORK5CYII=",down:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAm0lEQVR4nO2Ryw3CQAxE35jdEBFRAycEpUAJ9A81EBIlcMjPgazEHUbyxX47I3vhLwBiDDydUpxnQt8zgG2+kQeD1A2cTJo3JIqVzV29jod9NrCX82m3xLRt27wHTYlmY+SjquslRpJ9ZVAmDKC/wf0K0lQAuFtWddn0a88ZgAwoKKx7MdRnShxdF5hAHIc5t+Q3rp2BoRT2c3oBFX9xUA7hwq8AAAAASUVORK5CYII=",left:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAuUlEQVR4nO2PvRIBQRCEu+fOIaD8RkoRKCGZwNt4fwKFcutnW2LP1tWdF6CjmdmveruBvxgGSSqOJKvgmEnM6CWYxS7hkYSVbuWdABIC9pTkI2cAeHiv3WazDPsiazWeFczDS0buQQLl0CfnrmHOb10LDHkoJxtV1cXZubyohCyyH36tVuji8vvHwJI6DltMhzNM2jqpUJqmaEdMD8YV5h3l0vHNrAf9zrjV/ARQpLrPYmYBZrWpfkwv2KllZq2VZYMAAAAASUVORK5CYII=",right:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAArklEQVR4nO2RsQrCMBCGv0vaUq2gIlJxEBEX6eLi5jv4/g8h0qViIpxT27S0i3M/COTCx5/cBSYAiIxBA8a8IcfEIhiRjmh7tQHi3pkAVnqpIfs4sbX8KIrdmGc6qfJCBETA+XlzZeWc73r1etIJgHXw7KjZV957Btn0A8K+26bf7vMd88izmbnl+UpVtVRVrVSvnJeLICAFkiRu51WqHjlkd05bAC7Gpv9+4wT8AASmiluJhbS5AAAAAElFTkSuQmCC"},scared:{imgDate:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAADCklEQVR4nFWSX2hbZRjGf993vnN60qSNXWva6JpR7f5km7qrWrVUXYt2HdOCk2FBoQiDsivxRmU3XggiKIIIuxgOpxeyKsL8A8IoaJVNrMy4Mant2qZbMxKX5k/TmJ6cfJ8Xyao+8PK8F89z8bzPK7gDIcHo+t42GGbwmzk8vwJCIi2HH4d7KfxcAgFCbGkFANIB7cH2l3exc+IVCHfRtn8Mzb/IJ6YQpSxzp94h9enSHY9CyLq5Z3If8ddO0xrrpwr4/B/tDz2PDbj37EW5x1k5PYeQSIyBHcfjxN84QzDWz0a1jNY+1n/MFqC1z0a1TKhnkH0nP2L7xE6MQSAkPH7lPJG9R6j4FXzlstkwBQADlBscAKiWabGbWZ39hJm+lxRGg59PgdFUpdrWDf1xWCvBpV8AG548CIEAXEiAl5aKmtF42RsYgyK4x8EKtSOFZMPo8SfggxfqJ7CPgAjA9Ov1JIffh2/PC0lYSJy2KKHdjmLw0gJN4W48o1FS3S7UxVfSdTYa0lXotKFQAiyp8IxmW98EAz88LBgtpnBaovU6G9kdoAZ4jaKdBnuAbgxAJTuvMEajgHXts1nzcJWLKyQ1YN2vANCqXCRQ1j5ezaNJKlosB6NrEltIbsKJ5zLXrp8rrr44ml1gyWiaSunfPs4tz54p3MAq32bZ6MljxdXr59ZvTR7NJ0kBtrQEQ7nlN09IVS7mkn/mOnp778olH3nw7t1/ZQs3f5q3bNuynIE4tIbc8MU/iqnFW8GOAztKmU3jht869XdOIYRMZyuFzy/H+jO/Ctl1wN+MdRZTiRU7cPbLth4UNDnF1T1dpczZ75vbM4lgZPaxYGSkN30VI6TgUH4FK9xNevpd2iL307J/jIzRmHySyldvo4HmZ08iWu8lIiTFxBS57ArRg6/ip6/C4VKapy9/Rug+m8gzXYzOX2DcGIYSU1uvPHTta8aN4dDcd3Q81U5wl8PI718wkl2A4eRFQg+4W+LosRhH1xZ5dPo9hAJhw8DMh4ytLdI5Ft3ShfuCDC/N/AMdtzXsl7IlxgAAAABJRU5ErkJggg=="}},se={horizontal:Array(54).fill(null).map((()=>Array(8).fill({active:!1,id:""}))),vertical:Array(54).fill(null).map((()=>Array(8).fill({active:!1,id:""})))},Ae=(t,e,n,i,a)=>{"horizontal"===n?t>=0&&t<se.horizontal.length&&e>=0&&e<se.horizontal[0].length&&(se.horizontal[t][e]={active:!0,id:i,color:a}):t>=0&&t<se.vertical.length&&e>=0&&e<se.vertical[0].length&&(se.vertical[t][e]={active:!0,id:i,color:a})},le=(t,e)=>[[-1,0],[1,0],[0,-1],[0,1]].filter((([i,a])=>{const o=t+i,r=e+a;return!(o<0||o>=n||r<0||r>=7||(-1===i?se.vertical[t][e].active:1===i?se.vertical[t+1][e].active:-1===a?se.horizontal[t][e].active:1===a&&se.horizontal[t][e+1].active))})),ce={getValidMoves:le,calculateDistance:(t,e,n,i)=>Math.sqrt(Math.pow(n-t,2)+Math.pow(i-e,2)),findNextStepDijkstra(t,e){if(t.x===e.x&&t.y===e.y)return null;const n=[Object.assign(Object.assign({},t),{cost:0,path:[]})],i=new Set([`${t.x},${t.y}`]);for(;n.length;){n.sort(((t,e)=>t.cost-e.cost));const{x:t,y:a,cost:o,path:r}=n.shift();for(const[s,A]of le(t,a)){const l=t+s,c=a+A,d=`${l},${c}`;if(i.has(d))continue;i.add(d);const g=[...r,{x:l,y:c}];if(l===e.x&&c===e.y)return g.length>0?g[0]:null;n.push({x:l,y:c,cost:o+1,path:g})}}return null}},de={blinky:{x:50,y:0},pinky:{x:0,y:0},inky:{x:50,y:6},clyde:{x:0,y:6}};let ge="scatter",ue=0,he=0;const me=t=>{switch(t.direction){case"up":t.direction="down";break;case"down":t.direction="up";break;case"left":t.direction="right";break;case"right":t.direction="left"}},fe=(t,e)=>{if(!t.justReleasedFromHouse)return t.respawnCounter&&t.respawnCounter>0?(t.respawnCounter--,void(0===t.respawnCounter&&t.originalName&&(t.name=t.originalName,t.inHouse=!1,t.scared=e.pacman.powerupRemainingDuration>0))):("up"===t.direction&&t.y<=3?(t.direction="down",t.y=3):"down"===t.direction&&t.y>=3&&(t.direction="up",t.y=3),"up"===t.direction?t.y-=1:t.y+=1,void((t.y<3||t.y>=4)&&(t.y=(t.direction,3),t.direction="up"===t.direction?"down":"up")));26===t.x?(t.y=2,t.direction="up",t.inHouse=!1,t.justReleasedFromHouse=!1):t.x<26?(t.x+=1,t.direction="right"):t.x>26&&(t.x-=1,t.direction="left")},ye=(t,e)=>{const n=de[t.name]||de.blinky;if(t.target=n,t.x===n.x&&t.y===n.y){const e=ce.getValidMoves(t.x,t.y);if(e.length>0){const[n,i]=e[0];t.x+=n,t.y+=i,n>0?t.direction="right":n<0?t.direction="left":i>0?t.direction="down":i<0&&(t.direction="up")}return}const i=Ce(t.x,t.y,n.x,n.y,t.direction);i&&(t.x=i.x,t.y=i.y,i.direction&&(t.direction=i.direction))},pe=(t,e)=>{var n,i,a,o,r,s,A,l;const c=.5,d=null!==(n=t.subX)&&void 0!==n?n:0,g=null!==(i=t.subY)&&void 0!==i?i:0;if(0!==d||0!==g){const n=d>0?1:d<0?-1:0,i=g>0?1:g<0?-1:0;return t.subX=d+n*c,t.subY=g+i*c,(null!==(a=t.subX)&&void 0!==a?a:0)>=1?(t.x+=1,t.subX=0):(null!==(o=t.subX)&&void 0!==o?o:0)<=-1&&(t.x-=1,t.subX=0),(null!==(r=t.subY)&&void 0!==r?r:0)>=1?(t.y+=1,t.subY=0):(null!==(s=t.subY)&&void 0!==s?s:0)<=-1&&(t.y-=1,t.subY=0),void(0===(null!==(A=t.subX)&&void 0!==A?A:0)&&0===(null!==(l=t.subY)&&void 0!==l?l:0)&&0===e.pacman.powerupRemainingDuration&&(t.scared=!1))}if(0===e.pacman.powerupRemainingDuration)return void(t.scared=!1);(!t.target||t.x===t.target.x&&t.y===t.target.y)&&(t.target=Ee(t.x,t.y));const u=xe(t);if(0===u.length)return;const h=t.target.x-t.x,m=t.target.y-t.y;let f=u;if(Math.random()<.5);else{const t=u.filter((t=>{const e=t[0],n=t[1];return h>0&&e>0||h<0&&e<0||m>0&&n>0||m<0&&n<0}));t.length>0&&(f=t)}const[y,p]=f[Math.floor(Math.random()*f.length)];y>0?t.direction="right":y<0?t.direction="left":p>0?t.direction="down":p<0&&(t.direction="up"),t.subX=y*c,t.subY=p*c},xe=t=>ce.getValidMoves(t.x,t.y).filter((e=>{const[n,i]=e;return!("right"===t.direction&&n<0||"left"===t.direction&&n>0||"up"===t.direction&&i>0||"down"===t.direction&&i<0)})),be=(t,e)=>{const n={x:26,y:3};if(Math.abs(t.x-n.x)<=1&&Math.abs(t.y-n.y)<=1)return t.x=n.x,t.y=n.y,t.inHouse=!0,void(t.respawnCounter=1);const i=ce.findNextStepDijkstra({x:t.x,y:t.y},n);if(i){const e=i.x-t.x,n=i.y-t.y;e>0?t.direction="right":e<0?t.direction="left":n>0?t.direction="down":n<0&&(t.direction="up"),t.x=i.x,t.y=i.y}else{const e=Ce(t.x,t.y,n.x,n.y,t.direction);e&&(t.x=e.x,t.y=e.y,e.direction&&(t.direction=e.direction))}},ve=(t,e)=>{if("eyes"===t.name)return void be(t);const n=we(t,e);t.target=n;const i=Ce(t.x,t.y,n.x,n.y,t.direction);i&&(t.x=i.x,t.y=i.y,i.direction&&(t.direction=i.direction))},Ce=(t,e,n,i,a)=>{if(t===n&&e===i)return null;const o=[{x:t,y:e,path:[],direction:a||"right"}],r=new Set;for(r.add(`${t},${e}`);o.length>0;){const t=o.shift(),{x:e,y:a,path:s,direction:A}=t,l=ce.getValidMoves(e,a),c=l.filter((t=>{const[e,n]=t;return!A||!("right"===A&&e<0||"left"===A&&e>0||"up"===A&&n>0||"down"===A&&n<0)||1===l.length}));for(const[t,l]of c){const c=e+t,d=a+l,g=`${c},${d}`;if(r.has(g))continue;let u;r.add(g),u=t>0?"right":t<0?"left":l>0?"down":l<0?"up":A;const h=[...s,{x:c,y:d,pathDirection:u}];if(c===n&&d===i)return h.length>0?{x:h[0].x,y:h[0].y,direction:h[0].pathDirection}:null;o.push({x:c,y:d,path:h,direction:u})}}const s=ce.getValidMoves(t,e);if(s.length>0){const[n,i]=s[Math.floor(Math.random()*s.length)];let o=a;return n>0?o="right":n<0?o="left":i>0?o="down":i<0&&(o="up"),{x:t+n,y:e+i,direction:o}}return null},we=(t,e)=>{const{pacman:n}=e;let i=Be(e),a=1;if("blinky"===t.name){const t=371,e=(t-he)/t;if(e>.7&&(a=1.2),e>.9&&(a=1.4),Math.random()<.8*a)return{x:n.x,y:n.y}}switch(t.name){case"blinky":default:return{x:n.x,y:n.y};case"pinky":const a=4;let o=n.x,r=n.y;return"up"===n.direction?(o=n.x-4,r=n.y-4):(o=n.x+i[0]*a,r=n.y+i[1]*a),o=Math.min(Math.max(o,0),52),r=Math.min(Math.max(r,0),6),{x:o,y:r};case"inky":const s=e.ghosts.find((t=>"blinky"===t.name));let A={x:n.x+2*i[0],y:n.y+2*i[1]};if("up"===n.direction&&(A.x=n.x-2,A.y=n.y-2),s){const t=A.x-s.x,e=A.y-s.y;A={x:A.x+t,y:A.y+e}}return A.x=Math.min(Math.max(A.x,0),52),A.y=Math.min(Math.max(A.y,0),6),A;case"clyde":return ce.calculateDistance(t.x,t.y,n.x,n.y)<8?de.clyde:{x:n.x,y:n.y}}},Be=t=>{switch(t.pacman.direction){case"right":return[1,0];case"left":return[-1,0];case"up":return[0,-1];case"down":return[0,1];default:return[0,0]}},Ee=(t,e)=>{const n=t+Math.floor(17*Math.random())-8,i=e+Math.floor(17*Math.random())-8;return{x:Math.max(0,Math.min(n,52)),y:Math.max(0,Math.min(i,6))}},ke=t=>{he=(t=>{let e=0;for(let i=0;i<n;i++)for(let n=0;n<7;n++)"NONE"!==t.grid[i][n].level&&e++;return e})(t),(t=>{t.pacman.powerupRemainingDuration>0||(ue++,ue>=5*("scatter"===ge?7:20)&&(ge="scatter"===ge?"chase":"scatter",ue=0,t.ghosts.forEach((t=>{t.inHouse||"eyes"===t.name||t.scared||me(t)}))))})(t);for(const e of t.ghosts)e.inHouse?fe(e,t):("eyes"===e.name&&(e.scared=!1),e.scared?pe(e,t):"eyes"===e.name?be(e):"scatter"===ge?ye(e):ve(e,t))};var Ue;!function(t){t.CONSERVATIVE="conservative",t.AGGRESSIVE="aggressive",t.OPPORTUNISTIC="opportunistic"}(Ue||(Ue={}));const Se=t=>{const e=[];for(let i=0;i<n;i++)for(let n=0;n<7;n++){const a=t.grid[i][n];if("NONE"!==a.level){const o=ce.calculateDistance(i,n,t.pacman.x,t.pacman.y),r=a.commitsCount/(o+1);e.push({x:i,y:n,value:r})}}return e.sort(((t,e)=>e.value-t.value)),0===e.length?{x:t.pacman.x,y:t.pacman.y,value:0}:e[0]},Re=(t,e,n,i,a)=>{var o,r;const s=`${i},${a}`,A=null!==(o=e.get(s))&&void 0!==o?o:0;return 1+A*n+((null===(r=t.pacman.recentPositions)||void 0===r?void 0:r.includes(s))?100:0)+(A>=14?1e6:0)},Me=(t,e)=>Math.abs(t.x-e.x)+Math.abs(t.y-e.y),Ie=(t,e,n)=>{let i=e,a=t.get(i);for(;void 0!==a&&a!==n;)i=a,a=t.get(i);if(void 0===a)return null;const[o,r]=i.split(",").map(Number);return{x:o,y:r}},Oe=t=>{const e=new Map,i=!!t.pacman.powerupRemainingDuration;if(t.ghosts.forEach((t=>{if(!t.scared)for(let i=-5;i<=5;i++)for(let a=-5;a<=5;a++){const o=t.x+i,r=t.y+a;if(o>=0&&o<n&&r>=0&&r<7){const t=`${o},${r}`,n=15-(Math.abs(i)+Math.abs(a));if(n>0){const i=e.get(t)||0;e.set(t,Math.max(i,n))}}}})),i)for(const[t,n]of e.entries())e.set(t,n/5);return e},De=(t,e)=>{var n;(n=t.pacman).recentPositions||(n.recentPositions=[]),t.pacman.recentPositions.push(`${e.x},${e.y}`),t.pacman.recentPositions.length>5&&t.pacman.recentPositions.shift();const i=e.x-t.pacman.x,a=e.y-t.pacman.y;t.pacman.direction=i>0?"right":i<0?"left":a>0?"down":a<0?"up":t.pacman.direction,t.pacman.x=e.x,t.pacman.y=e.y},Te=t=>{t.pacman.powerupRemainingDuration=15,t.ghosts.forEach((t=>{"eyes"!==t.name&&(t.scared=!0)}))},Ve=t=>{if(t.pacman.deadRemainingDuration)return;const e=!!t.pacman.powerupRemainingDuration,n=t.ghosts.filter((t=>t.scared));let i;try{if(e&&n.length>0){const e=(t=>{const e=t.ghosts.filter((t=>t.scared));return 0===e.length?null:e.reduce(((e,n)=>{const i=ce.calculateDistance(n.x,n.y,t.pacman.x,t.pacman.y);return i<e.distance?{x:n.x,y:n.y,distance:i}:e}),{x:t.pacman.x,y:t.pacman.y,distance:1/0})})(t);i=null!=e?e:Se(t)}else t.pacman.target?t.pacman.x===t.pacman.target.x&&t.pacman.y===t.pacman.target.y?(i=Se(t),t.pacman.target=i):i=t.pacman.target:(i=Se(t),t.pacman.target=i);i||(i={x:t.pacman.x,y:t.pacman.y});const a=((t,e)=>{var n,i;const a={x:t.pacman.x,y:t.pacman.y};if(a.x===e.x&&a.y===e.y)return null;const o=Oe(t),r=(t=>{let e=.5;switch(t.config.playerStyle){case Ue.CONSERVATIVE:e=3;break;case Ue.AGGRESSIVE:e=.3;break;case Ue.OPPORTUNISTIC:default:e=.8}let n=1/0;t.ghosts.forEach((e=>{if(!e.scared){const i=ce.calculateDistance(t.pacman.x,t.pacman.y,e.x,e.y);n=Math.min(n,i)}}));const i=t.config.playerStyle===Ue.CONSERVATIVE?5:7,a=n<i;return t.config.playerStyle===Ue.CONSERVATIVE&&a&&(e*=5),e})(t),s=`${a.x},${a.y}`,A=`${e.x},${e.y}`,l=[{x:a.x,y:a.y,g:0,f:Me(a,e)}],c=new Map([[s,0]]),d=new Map;for(;l.length>0;){let a=0;for(let t=1;t<l.length;t++)l[t].f<l[a].f&&(a=t);const g=l.splice(a,1)[0],u=`${g.x},${g.y}`;if(!(g.g>(null!==(n=c.get(u))&&void 0!==n?n:1/0))){if(u===A)return Ie(d,A,s);for(const[n,a]of ce.getValidMoves(g.x,g.y)){const s=g.x+n,A=g.y+a,h=`${s},${A}`,m=g.g+Re(t,o,r,s,A);m<(null!==(i=c.get(h))&&void 0!==i?i:1/0)&&(c.set(h,m),d.set(h,u),l.push({x:s,y:A,g:m,f:m+Me({x:s,y:A},e)}))}}}return null})(t,i);a?De(t,a):(t=>{const e=ce.getValidMoves(t.pacman.x,t.pacman.y);if(0===e.length)return;const n=e.reduce(((e,[n,i])=>{const a=t.pacman.x+n,o=t.pacman.y+i;let r=1/0;return t.ghosts.forEach((t=>{if(!t.scared){const e=ce.calculateDistance(t.x,t.y,a,o);r=Math.min(r,e)}})),r>e.distance?{dx:n,dy:i,distance:r}:e}),{dx:0,dy:0,distance:-1/0});De(t,{x:t.pacman.x+n.dx,y:t.pacman.y+n.dy})})(t),(t=>{const e=t.grid[t.pacman.x][t.pacman.y];if("NONE"!==e.level){t.pacman.totalPoints+=e.commitsCount,t.pacman.points++,t.config.pointsIncreasedCallback(t.pacman.totalPoints);const n=d(t);"FOURTH_QUARTILE"===e.level&&Te(t),e.level="NONE",e.color=n.intensityColors[0],e.commitsCount=0}})(t)}catch(t){console.error("Error in movePacman:",t)}},Ne=t=>{const e=10,n=t,i=2*Math.PI-t;return`M 10,10\n L ${e+e*Math.cos(n)},${e+e*Math.sin(n)}\n A 10,10 0 1,1 ${e+e*Math.cos(i)},${e+e*Math.sin(i)}\n Z`},Qe=(t,e,n)=>t.gameHistory.map((t=>t.grid[e][n].color)),He=(t,e)=>{if(t.gameHistory.length!==e.length)throw new Error(`The amount of values (${e.length}) does not match the size of the game history (${t.gameHistory.length})`);const n=t.gameHistory.length;if(0===n)return{keyTimes:"0;1",values:e[0]||"#000;#000"};let i=[],a=[],o=null,r=null;return e.forEach(((t,e)=>{t!==o&&(null!==o&&null!==r&&e-1!==r&&(i.push(Number(((e-1/40)/(n-1)).toFixed(4))),a.push(o)),i.push(Number((e/(n-1)).toFixed(4))),a.push(t),o=t,r=e)})),0!==i.length&&1===i[i.length-1]||(0===i.length?(i.push(0,1),a.push(e[0]||"#000",e[e.length-1]||"#000")):(i.push(1),a.push(o||e[e.length-1]||"#000"))),{keyTimes:i.join(";"),values:a.join(";")}},Fe=t=>{const e=t.gameHistory.length*i;let a='<svg width="1166" height="184" xmlns="http://www.w3.org/2000/svg">';a+=`<desc>Generated with pacman-contribution-graph on ${new Date}</desc>`,a+=`<metadata>\n\t\t<info>\n\t\t\t<frames>${t.gameHistory.length}</frames>\n\t\t\t<frameRate>5</frameRate>\n\t\t\t<durationMs>${e}</durationMs>\n\t\t\t<generatedOn>${(new Date).toISOString()}</generatedOn>\n\t\t</info>\n\t</metadata>`,a+=`<rect width="100%" height="100%" fill="${d(t).gridBackground}"/>`,a+=(()=>{let t="<defs>";return["blinky","inky","pinky","clyde"].forEach((e=>{["up","down","left","right"].forEach((n=>{const i=re[e];n in i&&(t+=`\n <symbol id="ghost-${e}-${n}" viewBox="0 0 20 20">\n <image href="${i[n]}" width="20" height="20"/>\n </symbol>\n `)}))})),t+=`\n <symbol id="ghost-scared" viewBox="0 0 20 20">\n <image href="${re.scared.imgDate}" width="20" height="20"/>\n </symbol>`,["up","down","left","right"].forEach((e=>{re.eyes&&e in re.eyes?t+=`\n <symbol id="ghost-eyes-${e}" viewBox="0 0 20 20">\n <image href="${re.eyes[e]}" width="20" height="20"/>\n </symbol>\n `:(console.warn(`Imagem para eyes-${e} não encontrada, usando placeholder`),t+=`\n <symbol id="ghost-eyes-${e}" viewBox="0 0 20 20">\n <circle cx="10" cy="10" r="${20/3}" fill="white"/>\n </symbol>\n `)})),t+="</defs>",t})();let o="";for(let e=0;e<n;e++)t.monthLabels[e]!==o&&(a+=`<text x="${22*e+10}" y="10" text-anchor="middle" font-size="10" fill="${d(t).textColor}">${t.monthLabels[e]}</text>`,o=t.monthLabels[e]);for(let i=0;i<n;i++)for(let n=0;n<7;n++){const o=22*i,r=22*n+15,s=He(t,Qe(t,i,n));a+=`<rect id="c-${i}-${n}" x="${o}" y="${r}" width="20" height="20" rx="5" fill="${d(t).intensityColors[0]}">\n\t\t\t\t<animate attributeName="fill" dur="${e}ms" repeatCount="indefinite" \n\t\t\t\t\tvalues="${s.values}" \n\t\t\t\t\tkeyTimes="${s.keyTimes}"/>\n\t\t\t</rect>`}for(let e=0;e<7;e++){let i=null;for(let o=0;o<=n;o++){let r=o<n&&se.horizontal[o][e].active;r&&null===i&&(i=o),r&&o!==n||null===i||(a+=`<rect id="wh-${i}-${e}" x="${22*i-2}" y="${22*e-2+15}" width="${22*(o-i)}" height="2" fill="${d(t).wallColor}"></rect>`,i=null)}}for(let e=0;e<n;e++){let n=null;for(let i=0;i<=7;i++){let o=i<7&&se.vertical[e][i].active;o&&null===n&&(n=i),o&&7!==i||null===n||(a+=`<rect id="wv-${e}-${n}" x="${22*e-2}" y="${22*n-2+15}" width="2" height="${22*(i-n)}" fill="${d(t).wallColor}"></rect>`,n=null)}}const r=He(t,t.gameHistory.map((t=>{return(e=t.pacman).deadRemainingDuration?"#80808064":e.powerupRemainingDuration?"red":oe;var e}))),s=He(t,(t=>t.gameHistory.map((t=>`${22*t.pacman.x},${22*t.pacman.y+15}`)))(t)),A=He(t,(t=>t.gameHistory.map(((e,n)=>{const i=Math.min(n+1,t.gameHistory.length-1);return(t=>{switch(t){case"right":default:return"0 10 10";case"left":return"180 10 10";case"up":return"270 10 10";case"down":return"90 10 10"}})(t.gameHistory[i].pacman.direction)})))(t));return a+=`<path id="pacman" d="${Ne(.55)}" fill="${oe}">\n\t\t<animate attributeName="fill" dur="${e}ms" repeatCount="indefinite"\n\t\t\tkeyTimes="${r.keyTimes}"\n\t\t\tvalues="${r.values}"/>\n\t\t<animateTransform attributeName="transform" type="translate" dur="${e}ms" repeatCount="indefinite"\n\t\t\tkeyTimes="${s.keyTimes}"\n\t\t\tvalues="${s.values}"\n\t\t\tadditive="sum"/>\n\t\t<animateTransform attributeName="transform" type="rotate" dur="${e}ms" repeatCount="indefinite"\n\t\t\tkeyTimes="${A.keyTimes}"\n\t\t\tvalues="${A.values}"\n\t\t\tcalcMode="discrete"\n\t\t\tadditive="sum"/>\n\t\t<animate attributeName="d" dur="0.5s" repeatCount="indefinite"\n\t\t\tvalues="${Ne(.55)};${Ne(.05)};${Ne(.55)}"/>\n\t</path>`,t.ghosts.forEach(((n,i)=>{const o=He(t,((t,e)=>t.gameHistory.map((t=>{var n,i;if(e>=t.ghosts.length)return"0,0";const a=t.ghosts[e];return`${22*(a.x+(null!==(n=a.subX)&&void 0!==n?n:0))},${22*(a.y+(null!==(i=a.subY)&&void 0!==i?i:0))+15}`})))(t,i));a+=`<g id="ghost${i}" transform="translate(0,0)">\n\t\t\t<animateTransform attributeName="transform" type="translate" \n\t\t\t\tdur="${e}ms" repeatCount="indefinite"\n\t\t\t\tkeyTimes="${o.keyTimes}"\n\t\t\t\tvalues="${o.values}"\n\t\t\t\tadditive="replace"/>`;const r=function(t,e){const n={};["blinky-up","blinky-down","blinky-left","blinky-right","inky-up","inky-down","inky-left","inky-right","pinky-up","pinky-down","pinky-left","pinky-right","clyde-up","clyde-down","clyde-left","clyde-right","eyes-up","eyes-down","eyes-left","eyes-right","scared"].forEach((t=>{n[t]=[{time:0,visible:!1}]}));const i=t.ghosts[e];if(!i)return n;const a=i.scared?"scared":"eyes"===i.name?`eyes-${i.direction||"right"}`:`${i.name}-${i.direction||"right"}`;n[a]=[{time:0,visible:!0}];let o=a;return t.gameHistory.forEach(((i,a)=>{if(e>=i.ghosts.length)return;const r=i.ghosts[e],s=a/(t.gameHistory.length-1),A=r.scared?"scared":"eyes"===r.name?`eyes-${r.direction||"right"}`:`${r.name}-${r.direction||"right"}`;A!==o&&(n[o].push({time:s,visible:!1}),n[A]||(n[A]=[{time:0,visible:!1}]),n[A].push({time:s,visible:!0}),o=A)})),n[o].push({time:1,visible:!0}),Object.keys(n).forEach((t=>{t!==o&&n[t].length>0&&n[t][n[t].length-1].time<1&&n[t].push({time:1,visible:!1})})),n}(t,i);for(const[t,n]of Object.entries(r)){if(0===n.length)continue;const i=`#ghost-${t}`,o=n.map((t=>t.time.toFixed(4))).join(";"),r=n.map((t=>t.visible?"visible":"hidden")).join(";"),s=n[0].visible?"visible":"hidden";a+=`<use href="${i}" width="20" height="20" visibility="${s}">\n\t\t\t\t<animate attributeName="visibility" \n\t\t\t\t\tdur="${e}ms" repeatCount="indefinite"\n\t\t\t\t\tkeyTimes="${o}"\n\t\t\t\t\tvalues="${r}" />\n\t\t\t</use>`}a+="</g>"})),a+="</svg>",a};var Ke=function(t,e,n,i){return new(n||(n=Promise))((function(a,o){function r(t){try{A(i.next(t))}catch(t){o(t)}}function s(t){try{A(i.throw(t))}catch(t){o(t)}}function A(t){var e;t.done?a(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(r,s)}A((i=i.apply(t,e||[])).next())}))};const Ye=t=>{t.ghosts=[{x:26,y:2,name:"blinky",direction:"left",scared:!1,target:void 0,inHouse:!1,respawnCounter:0,freezeCounter:0,justReleasedFromHouse:!1},{x:25,y:3,name:"inky",direction:"up",scared:!1,target:void 0,inHouse:!0,respawnCounter:0,freezeCounter:10,justReleasedFromHouse:!1},{x:26,y:3,name:"pinky",direction:"down",scared:!1,target:void 0,inHouse:!0,respawnCounter:0,freezeCounter:20,justReleasedFromHouse:!1},{x:27,y:3,name:"clyde",direction:"up",scared:!1,target:void 0,inHouse:!0,respawnCounter:0,freezeCounter:30,justReleasedFromHouse:!1}],t.ghosts.forEach((t=>{t.justReleasedFromHouse=!1,t.respawnCounter=0,t.inHouse&&("inky"===t.name?t.direction="up":"pinky"===t.name?t.direction="down":"clyde"===t.name&&(t.direction="up"))}))},Ge=t=>Ke(void 0,void 0,void 0,(function*(){var e,n;if(t.frameCount++,t.pacman.deadRemainingDuration>0&&(t.pacman.deadRemainingDuration--,0===t.pacman.deadRemainingDuration&&((t=>{t.pacman.x=27,t.pacman.y=7,t.pacman.direction="right",t.pacman.recentPositions=[]})(t),Ye(t))),t.pacman.powerupRemainingDuration>0&&(t.pacman.powerupRemainingDuration--,0===t.pacman.powerupRemainingDuration&&(t.ghosts.forEach((t=>{var e,n;"eyes"!==t.name&&0===(null!==(e=t.subX)&&void 0!==e?e:0)&&0===(null!==(n=t.subY)&&void 0!==n?n:0)&&(t.scared=!1)})),t.pacman.points=0)),t.ghosts.forEach((e=>{e.inHouse&&e.respawnCounter&&e.respawnCounter>0&&(e.respawnCounter--,0===e.respawnCounter&&(e.name=e.originalName||(t=>{const e=["blinky","inky","pinky","clyde"];return e[t%e.length]})(t.ghosts.indexOf(e)),e.inHouse=!1,e.scared=t.pacman.powerupRemainingDuration>0,e.justReleasedFromHouse=!0)),e.freezeCounter&&(e.freezeCounter--,0===e.freezeCounter&&je(t,e.name))})),!t.grid.some((t=>t.some((t=>t.commitsCount>0))))){const n=Fe(t);return t.config.svgCallback(n),t.config.gameStatsCallback&&t.config.gameStatsCallback({totalScore:t.pacman.totalPoints,steps:t.aliveSteps,ghostsEaten:null!==(e=t.pacman.ghostsEaten)&&void 0!==e?e:0}),void t.config.gameOverCallback()}Ve(t),Le(t),0===t.pacman.deadRemainingDuration&&(ke(t),Le(t)),t.pacmanMouthOpen=!t.pacmanMouthOpen,0===t.pacman.deadRemainingDuration&&t.aliveSteps++,t.config.gameStatsCallback&&t.config.gameStatsCallback({totalScore:t.pacman.totalPoints,steps:t.aliveSteps,ghostsEaten:null!==(n=t.pacman.ghostsEaten)&&void 0!==n?n:0}),Je(t)})),Je=t=>{t.gameHistory.push({pacman:Object.assign({},t.pacman),ghosts:t.ghosts.map((t=>Object.assign({},t))),grid:t.grid.map((t=>t.map((t=>Object.assign({},t)))))})},Le=t=>{t.pacman.deadRemainingDuration||t.ghosts.forEach((e=>{var n;"eyes"!==e.name&&e.x===t.pacman.x&&e.y===t.pacman.y&&(t.pacman.powerupRemainingDuration&&e.scared?(e.originalName=e.name,e.name="eyes",e.scared=!1,e.target={x:26,y:3},e.subX=0,e.subY=0,t.pacman.points+=10,t.pacman.ghostsEaten=(null!==(n=t.pacman.ghostsEaten)&&void 0!==n?n:0)+1):(t.pacman.points=0,t.pacman.powerupRemainingDuration=0,0===t.pacman.deadRemainingDuration&&(t.pacman.deadRemainingDuration=10)))}))},je=(t,e)=>{const n=t.ghosts.find((t=>t.name===e&&t.inHouse));n&&(n.justReleasedFromHouse=!0,n.y=2,n.direction="up")},ze={frameCount:0,aliveSteps:0,contributions:[],pacman:{x:0,y:0,direction:"right",points:0,totalPoints:0,deadRemainingDuration:0,powerupRemainingDuration:0,recentPositions:[],ghostsEaten:0},ghosts:[],grid:[],monthLabels:[],pacmanMouthOpen:!0,gameInterval:0,gameHistory:[],config:void 0,useGithubThemeColor:!0},Pe=(t,e,i,a,o)=>{"horizontal"==i?(Ae(t,e,"horizontal",o),"x"==a?Ae(n-t-1,e,"horizontal",o):"y"==a?Ae(t,7-e,"horizontal",o):"xy"==a&&(Ae(n-t-1,e,"horizontal",o),Ae(t,7-e,"horizontal",o),Ae(n-t-1,7-e,"horizontal",o))):(Ae(t,e,"vertical",o),"x"==a?Ae(n-t,e,"vertical",o):"y"==a?Ae(t,7-e-1,"vertical",o):"xy"==a&&(Ae(n-t,e,"vertical",o),Ae(t,7-e-1,"vertical",o),Ae(n-t,7-e-1,"vertical",o)))};class Xe{constructor(t){this.conf=Object.assign({},t)}start(){return t=this,e=void 0,i=function*(){const t={platform:"github",username:"",svgCallback:t=>{},gameOverCallback:()=>{},gameTheme:"github",pointsIncreasedCallback:t=>{},githubSettings:{accessToken:""},playerStyle:Ue.OPPORTUNISTIC};switch(this.store=JSON.parse(JSON.stringify(ze)),this.store.config=Object.assign(Object.assign({},t),this.conf),this.store.config.platform){case"gitlab":this.store.contributions=yield y(this.store);break;case"github":this.store.contributions=yield f(this.store);break;default:throw new Error(`Unsupported platform: ${this.store.config.platform}`)}return Pe(0,2,"horizontal","xy","L1"),Pe(1,2,"horizontal","xy","L1"),Pe(4,1,"vertical","x","L2"),Pe(4,2,"vertical","x","L2"),Pe(4,3,"vertical","x","L2"),Pe(4,4,"vertical","x","L2"),Pe(3,3,"horizontal","x","L3"),Pe(2,3,"horizontal","x","L3"),Pe(4,5,"horizontal","x","L4"),Pe(6,4,"vertical","x","L5"),Pe(6,3,"vertical","x","L5"),Pe(6,2,"vertical","x","L5"),Pe(6,2,"horizontal","x","L6"),Pe(7,2,"horizontal","x","L6"),Pe(8,2,"horizontal","x","L6"),Pe(9,2,"horizontal","x","L6"),Pe(13,2,"horizontal","xy","L7"),Pe(14,2,"horizontal","xy","L7"),Pe(15,2,"horizontal","xy","L7"),Pe(16,2,"horizontal","xy","L7"),Pe(17,2,"horizontal","xy","L7"),Pe(18,2,"horizontal","xy","L7"),Pe(16,2,"vertical","xy","L8"),Pe(8,1,"horizontal","x","L9"),Pe(9,1,"horizontal","x","L9"),Pe(10,1,"horizontal","x","L9"),Pe(11,1,"horizontal","x","L9"),Pe(12,1,"vertical","x","L10"),Pe(12,3,"vertical","x","L10"),Pe(11,4,"horizontal","x","L11"),Pe(10,4,"horizontal","x","L11"),Pe(9,4,"horizontal","x","L11"),Pe(8,4,"horizontal","x","L11"),Pe(8,4,"vertical","x","L12"),Pe(8,5,"vertical","x","L12"),Pe(23,1,"horizontal","x","L18"),Pe(22,1,"horizontal","x","L18"),Pe(21,1,"horizontal","x","L18"),Pe(21,1,"vertical","x","L18"),Pe(21,2,"vertical","x","L18"),Pe(21,3,"vertical","x","L18"),Pe(20,4,"horizontal","x","L18"),Pe(19,4,"horizontal","x","L18"),Pe(19,3,"vertical","x","L18"),Pe(18,3,"horizontal","x","L18"),Pe(22,5,"vertical","x","L19"),Pe(21,5,"horizontal","x","L19"),Pe(20,5,"horizontal","x","L19"),Pe(20,5,"vertical","x","L19"),Pe(1,6,"horizontal","x","L20"),Pe(2,6,"horizontal","x","L20"),Pe(3,4,"vertical","x","L20"),Pe(5,6,"horizontal","x","L21"),Pe(6,6,"horizontal","x","L21"),Ae(25,2,"horizontal","GH_TOP"),Ae(27,2,"horizontal","GH_TOP"),Ae(25,4,"horizontal","GH_BOTTOM"),Ae(26,4,"horizontal","GH_BOTTOM"),Ae(27,4,"horizontal","GH_BOTTOM"),Ae(25,3,"vertical","GH_LEFT"),Ae(28,3,"vertical","GH_RIGHT"),Ae(25,2,"vertical","GH_LEFT"),Ae(28,2,"vertical","GH_RIGHT"),g(this.store),u(this.store),yield(e=this.store,Ke(void 0,void 0,void 0,(function*(){e.frameCount=0,e.aliveSteps=0,e.gameHistory=[],e.ghosts.forEach((t=>t.scared=!1)),e.grid=h(e);const t=()=>e.grid.some((t=>t.some((t=>t.commitsCount>0))));for(t()&&((t=>{t.pacman={x:0,y:0,direction:"right",points:0,totalPoints:0,deadRemainingDuration:0,powerupRemainingDuration:0,recentPositions:[],ghostsEaten:0}})(e),Ye(e));t();)yield Ge(e);yield Ge(e)}))),this.store;var e},new((n=void 0)||(n=Promise))((function(a,o){function r(t){try{A(i.next(t))}catch(t){o(t)}}function s(t){try{A(i.throw(t))}catch(t){o(t)}}function A(t){var e;t.done?a(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(r,s)}A((i=i.apply(t,e||[])).next())}));var t,e,n,i}stop(){var t;t=this.store,Ke(void 0,void 0,void 0,(function*(){clearInterval(t.gameInterval)}))}}const We=["#e74c3c","#f1c40f","#2ecc71","#3498db","#9b59b6","#e67e22"],qe=t=>22*t+10,Ze=t=>22*t+15+10,$e=(t,e,n)=>{0===t.keyTimes.length||e!==t.keyTimes[t.keyTimes.length-1]?(t.keyTimes.push(e),t.values.push(n)):t.values[t.values.length-1]=n},_e=t=>(1!==t.keyTimes[t.keyTimes.length-1]&&(t.keyTimes.push(1),t.values.push(t.values[t.values.length-1])),{keyTimes:t.keyTimes.join(";"),values:t.values.join(";")}),tn=(t,e)=>Number((t/Math.max(e-1,1)).toFixed(4)),en=(t,e,n,i)=>{var a,o;const r=t.gameHistory.length,s=null!==(o=null===(a=t.initialColors[e])||void 0===a?void 0:a[n])&&void 0!==o?o:i,A=t.cellEvents.filter((t=>t.x===e&&t.y===n));if(0===A.length)return{keyTimes:"0;1",values:`${s};${s}`};const l={keyTimes:[0],values:[s]};for(const t of A){const e=tn(t.frameIndex,r);$e(l,e,t.color)}return _e(l)},nn=t=>{var e,a,o,r,s,A,l,c,g;const u=t.gameHistory.length,h=`${Math.max(u*i/6,1e3)}ms`,m=d(t),f=m.intensityColors[0];let y='<svg width="1166" height="249" xmlns="http://www.w3.org/2000/svg">';y+=`<desc>Generated with puzzle-bobble-contribution-graph on ${new Date}</desc>`,y+=`<rect width="100%" height="100%" fill="${m.gridBackground}"/>`;let p="";for(let e=0;e<n;e++)t.monthLabels[e]!==p&&(y+=`<text x="${22*e+10}" y="10" text-anchor="middle" font-size="10" fill="${m.textColor}">${t.monthLabels[e]}</text>`,p=t.monthLabels[e]);for(let e=0;e<n;e++)for(let n=0;n<7;n++){const i=qe(e),a=Ze(n),o=en(t,e,n,f);y+=`<circle cx="${i}" cy="${a}" r="9" fill="${f}">\n\t\t\t\t<animate attributeName="fill" calcMode="discrete" dur="${h}" repeatCount="indefinite"\n\t\t\t\t\tvalues="${o.values}" keyTimes="${o.keyTimes}"/>\n\t\t\t</circle>`}if(u>=2){const n=(t=>{const e=[],n=new Map;for(let i=0;i<t.gameHistory.length;i++){const a=t.gameHistory[i].activeBubble;for(const[t,o]of n)a&&a.id===t||(e.push({id:t,colorIndex:o.colorIndex,startFrame:o.startFrame,endFrame:i-1,xPositions:o.xs,yPositions:o.ys}),n.delete(t));if(a&&a.active)if(n.has(a.id)){const t=n.get(a.id);t.xs.push(a.x),t.ys.push(a.y)}else n.set(a.id,{colorIndex:a.colorIndex,startFrame:i,xs:[a.x],ys:[a.y]})}for(const[i,a]of n)e.push({id:i,colorIndex:a.colorIndex,startFrame:a.startFrame,endFrame:t.gameHistory.length-1,xPositions:a.xs,yPositions:a.ys});return e})(t);for(const t of n){const n=Number((t.startFrame/(u-1)).toFixed(4)),i=Number((Math.min(t.endFrame+1,u-1)/(u-1)).toFixed(4)),a=null!==(e=We[t.colorIndex])&&void 0!==e?e:We[0];let o,r;n<=0&&i>=1?(o="0;1",r="1;1"):n<=0?(o=`0;${i};${i};1`,r="1;1;0;0"):i>=1?(o=`0;${n};${n};1`,r="0;0;1;1"):(o=`0;${n};${n};${i};${i};1`,r="0;0;1;1;0;0");const s=[],A=[],l=t.xPositions[0].toFixed(1),c=t.yPositions[0].toFixed(1);t.startFrame>0&&(s.push(0),A.push(`${l},${c}`));for(let e=0;e<t.xPositions.length;e++){const n=t.startFrame+e,i=Number((n/(u-1)).toFixed(4)),a=t.xPositions[e].toFixed(1),o=t.yPositions[e].toFixed(1);0!==s.length&&i===s[s.length-1]||(s.push(i),A.push(`${a},${o}`))}if(1!==s[s.length-1]){const e=t.xPositions[t.xPositions.length-1].toFixed(1),n=t.yPositions[t.yPositions.length-1].toFixed(1);s.push(1),A.push(`${e},${n}`)}y+=`<circle cx="0" cy="0" r="9" fill="${a}" opacity="0" stroke="white" stroke-width="1" stroke-opacity="0.4">\n\t\t\t\t<animate attributeName="opacity" calcMode="discrete" dur="${h}" repeatCount="indefinite"\n\t\t\t\t\tkeyTimes="${o}" values="${r}"/>\n\t\t\t\t<animateTransform attributeName="transform" type="translate" calcMode="linear"\n\t\t\t\t\tdur="${h}" repeatCount="indefinite"\n\t\t\t\t\tkeyTimes="${s.join(";")}" values="${A.join(";")}"/>\n\t\t\t</circle>`}}if(u>=2)for(const e of t.popEvents){const t=Number((e.frameIndex/(u-1)).toFixed(4)),n=Number((Math.min(e.frameIndex+8,u-1)/(u-1)).toFixed(4));if(n<=t)continue;const i=`0;${t};${t};${n};1`,a="0;0;1;0;0";for(const{x:t,y:n}of e.cells)y+=`<circle cx="${qe(t).toFixed(1)}" cy="${Ze(n).toFixed(1)}" r="4" fill="none" stroke="${e.color}" stroke-width="2" opacity="0">\n\t\t\t\t\t<animate attributeName="r" calcMode="linear" dur="${h}" repeatCount="indefinite" keyTimes="${i}" values="4;4;4;20;20"/>\n\t\t\t\t\t<animate attributeName="stroke-width" calcMode="linear" dur="${h}" repeatCount="indefinite" keyTimes="${i}" values="2;2;2;0;0"/>\n\t\t\t\t\t<animate attributeName="opacity" calcMode="linear" dur="${h}" repeatCount="indefinite" keyTimes="${i}" values="${a}"/>\n\t\t\t\t</circle>`}if(u>=2){const e=169,n=583..toFixed(1),i=(e+30).toFixed(1),d={keyTimes:[],values:[]};for(let e=0;e<t.gameHistory.length;e++){const a=tn(e,u),o=(90-t.gameHistory[e].cannon.angleDeg).toFixed(1);$e(d,a,`${o} ${n} ${i}`)}const f=_e(d),p=22,x=Number(n),b=Number(i),v=b-p,C={keyTimes:[],values:[]};for(let e=0;e<t.gameHistory.length;e++){const n=tn(e,u),i=t.gameHistory[e].currentBubbleColorIndex;$e(C,n,null!==(a=We[i])&&void 0!==a?a:We[0])}const w=_e(C);y+=`<circle cx="${n}" cy="${i}" r="10" fill="${null!==(s=We[null!==(r=null===(o=t.gameHistory[0])||void 0===o?void 0:o.currentBubbleColorIndex)&&void 0!==r?r:0])&&void 0!==s?s:We[0]}" stroke="white" stroke-width="2">\n\t\t\t<animate attributeName="fill" calcMode="discrete" dur="${h}" repeatCount="indefinite"\n\t\t\t\tvalues="${w.values}" keyTimes="${w.keyTimes}"/>\n\t\t\t<animateTransform attributeName="transform" type="rotate" calcMode="linear"\n\t\t\t\tdur="${h}" repeatCount="indefinite"\n\t\t\t\tkeyTimes="${f.keyTimes}" values="${f.values}"/>\n\t\t</circle>`,y+=`<line x1="${x}" y1="${b}" x2="${x}" y2="${v}" stroke="#cccccc" stroke-width="6" stroke-linecap="round">\n\t\t\t<animateTransform attributeName="transform" type="rotate" calcMode="linear"\n\t\t\t\tdur="${h}" repeatCount="indefinite"\n\t\t\t\tkeyTimes="${f.keyTimes}" values="${f.values}"/>\n\t\t</line>`;const B={keyTimes:[],values:[]};for(let e=0;e<t.gameHistory.length;e++){const n=tn(e,u),i=t.gameHistory[e].nextBubbleColorIndex;$e(B,n,null!==(A=We[i])&&void 0!==A?A:We[0])}const E=_e(B),k=(Number(n)+28).toFixed(1),U=i,S=null!==(g=We[null!==(c=null===(l=t.gameHistory[0])||void 0===l?void 0:l.nextBubbleColorIndex)&&void 0!==c?c:0])&&void 0!==g?g:We[0];y+=`<text x="${k}" y="${(Number(i)-16).toFixed(1)}" text-anchor="middle" font-size="8" fill="${m.textColor}" opacity="0.8">NEXT</text>`,y+=`<circle cx="${k}" cy="${U}" r="9" fill="${S}" stroke="white" stroke-width="1" stroke-opacity="0.5">\n\t\t\t<animate attributeName="fill" calcMode="discrete" dur="${h}" repeatCount="indefinite"\n\t\t\t\tvalues="${E.values}" keyTimes="${E.keyTimes}"/>\n\t\t</circle>`}return y+="</svg>",y};const an=t=>22*t+10,on=t=>22*t+15+10,rn=t=>Math.round((t-10)/22),sn=t=>Math.round((t-15-10)/22),An=t=>t.grid.some((t=>t.some((t=>t.commitsCount>0)))),ln=(t,e,i,a)=>{var o,r,s;const A=new Set,l=[],c=[{x:e,y:i}];for(;c.length;){const{x:e,y:i}=c.pop(),d=`${e},${i}`;if(A.has(d))continue;if(e<0||e>=n||i<0||i>=7)continue;const g=null===(o=t.grid[e])||void 0===o?void 0:o[i];g&&0!==g.commitsCount&&(null!==(s=null===(r=t.cellBubbleColors[e])||void 0===r?void 0:r[i])&&void 0!==s?s:-1)===a&&(A.add(d),l.push({x:e,y:i}),c.push({x:e-1,y:i},{x:e+1,y:i},{x:e,y:i-1},{x:e,y:i+1}))}return l},cn=(t,e,i,a)=>{var o,r,s,A;const l=i*Math.PI/180;let c=10*Math.cos(l),d=-10*Math.sin(l),g=t,u=e;for(let t=0;t<2e3;t++){if(g+=c,u+=d,g<9&&(g=9,c=Math.abs(c)),g>1157&&(g=1157,c=-Math.abs(c)),u<0)return null;const t=rn(g),e=sn(u);if(!(e<0||e>=7||t<0||t>=n)){for(const[i,s]of[[0,0],[1,0],[-1,0],[0,1],[0,-1]]){const A=t+i,l=e+s;if(!(A<0||A>=n||l<0||l>=7)&&(null===(r=null===(o=a.grid[A])||void 0===o?void 0:o[l])||void 0===r?void 0:r.commitsCount)>0){const t=an(A),e=on(l);if(Math.hypot(g-t,u-e)<20)return{col:Math.max(0,Math.min(52,rn(g))),row:Math.max(0,Math.min(6,sn(u)))}}}if(0===e&&0===(null===(A=null===(s=a.grid[t])||void 0===s?void 0:s[0])||void 0===A?void 0:A.commitsCount))return{col:Math.max(0,Math.min(52,t)),row:0}}}return null},dn=t=>{t.gameHistory.push({cannon:Object.assign({},t.cannon),activeBubble:t.activeBubble?Object.assign({},t.activeBubble):null,nextBubbleColorIndex:t.nextBubbleColorIndex,currentBubbleColorIndex:t.currentBubbleColorIndex})},gn=t=>{var e,i,a,o,r,s,A;if(t.frameCount++,!t.activeBubble){-1===t.cannonTargetAngle&&(t.cannonTargetAngle=((t,e,i,a)=>{var o,r,s,A,l,c,d,g,u,h,m,f,y,p;const x=1664525*t.nextBubbleId+1013904223>>>0,b=[],v=[],C=[],w=[[-1,0],[1,0],[0,-1],[0,1],[-1,1],[0,1],[1,1],[-1,2],[0,2],[1,2]];for(let e=12;e<=168;e+=2){const i=cn(583,199,e,t);if(!i)continue;if((null!==(s=null===(r=null===(o=t.grid[i.col])||void 0===o?void 0:o[i.row])||void 0===r?void 0:r.commitsCount)&&void 0!==s?s:0)>0)continue;let u=!1,h=!1,m=0;for(const[e,o]of w){const r=i.col+e,s=i.row+o;if(!(r<0||r>=n||s<0||s>=7)&&0!==(null!==(c=null===(l=null===(A=t.grid[r])||void 0===A?void 0:A[s])||void 0===l?void 0:l.commitsCount)&&void 0!==c?c:0)&&(h=!0,(null!==(g=null===(d=t.cellBubbleColors[r])||void 0===d?void 0:d[s])&&void 0!==g?g:-1)===a)){u=!0;const e=ln(t,r,s,a).length+1;e>m&&(m=e)}}m>=3?b.push({angleDeg:e,score:m}):u?v.push(e):h&&C.push(e)}if(b.length>0){const t=Math.max(...b.map((t=>t.score))),e=b.filter((e=>e.score===t));return e[x%e.length].angleDeg}if(v.length>0)return v[x%v.length];if(C.length>0)return C[x%C.length];let B=90,E=1/0;for(let e=12;e<=168;e+=2){const i=cn(583,199,e,t);if(!i)continue;if((null!==(m=null===(h=null===(u=t.grid[i.col])||void 0===u?void 0:u[i.row])||void 0===h?void 0:h.commitsCount)&&void 0!==m?m:0)>0)continue;const a=an(i.col),o=on(i.row);let r=1/0;for(let e=0;e<n;e++)for(let n=0;n<7;n++)if((null!==(p=null===(y=null===(f=t.grid[e])||void 0===f?void 0:f[n])||void 0===y?void 0:y.commitsCount)&&void 0!==p?p:0)>0){const t=Math.hypot(a-an(e),o-on(n));t<r&&(r=t)}r<E&&(E=r,B=e)}return B})(t,0,0,t.nextBubbleColorIndex));const a=t.cannonTargetAngle;t.currentBubbleColorIndex=t.nextBubbleColorIndex;const o=a-t.cannon.angleDeg;if(!(Math.abs(o)<=6))return t.cannon.angleDeg+=6*Math.sign(o),t.cannon.angleDeg=Math.max(10,Math.min(170,t.cannon.angleDeg)),void dn(t);t.cannon.angleDeg=a;const r=t.nextBubbleColorIndex;t.currentBubbleColorIndex=r,t.cannonTargetAngle=-1;const s=new Set;for(let a=0;a<n;a++)for(let n=0;n<7;n++)t.grid[a][n].commitsCount>0&&s.add(null!==(i=null===(e=t.cellBubbleColors[a])||void 0===e?void 0:e[n])&&void 0!==i?i:0);const A=[...s];if(A.length>0){const e=1664525*t.frameCount+1013904223>>>0;t.nextBubbleColorIndex=A[e%A.length]}const l=t.cannon.angleDeg*Math.PI/180;return t.activeBubble={id:t.nextBubbleId++,x:583,y:199,vx:10*Math.cos(l),vy:-10*Math.sin(l),colorIndex:r,active:!0},void dn(t)}const l=t.activeBubble;if(l.x+=l.vx,l.y+=l.vy,l.x<9&&(l.x=9,l.vx=Math.abs(l.vx)),l.x>1157&&(l.x=1157,l.vx=-Math.abs(l.vx)),l.y<0||l.y>209)return t.activeBubble=null,t.cannonTargetAngle=-1,void dn(t);let c=!1,g=-1,u=-1;const h=rn(l.x),m=sn(l.y);t:for(let e=-1;e<=1;e++)for(let i=-1;i<=1;i++){const A=h+e,d=m+i;if(A<0||A>=n||d<0||d>=7)continue;const f=an(A),y=on(d);if(Math.hypot(l.x-f,l.y-y)<18){if((null===(o=null===(a=t.grid[A])||void 0===a?void 0:a[d])||void 0===o?void 0:o.commitsCount)>0){if(0===(null===(s=null===(r=t.grid[h])||void 0===r?void 0:r[m])||void 0===s?void 0:s.commitsCount)&&h>=0&&h<n&&m>=0&&m<7)g=h,u=m;else for(const[e,i]of[[0,1],[-1,0],[1,0],[0,-1]]){const a=A+e,o=d+i;if(a>=0&&a<n&&o>=0&&o<7&&0===t.grid[a][o].commitsCount){g=a,u=o;break}}c=!0;break t}if(0===d){g=A,u=0,c=!0;break t}}}if(!c&&m<=0&&h>=0&&h<n&&(g=h,u=0,c=!0),c&&g>=0&&u>=0){g=Math.max(0,Math.min(52,g)),u=Math.max(0,Math.min(6,u));const e=d(t).intensityColors[0],n=null!==(A=We[l.colorIndex])&&void 0!==A?A:We[0];t.grid[g][u]={commitsCount:1,color:n,level:"FIRST_QUARTILE"},t.cellBubbleColors[g][u]=l.colorIndex,t.cellEvents.push({frameIndex:t.gameHistory.length,x:g,y:u,color:n});const i=ln(t,g,u,l.colorIndex);if(i.length>=3){const a=n;for(const{x:n,y:a}of i)t.grid[n][a]={commitsCount:0,color:e,level:"NONE"},t.cellBubbleColors[n][a]=-1,t.cellEvents.push({frameIndex:t.gameHistory.length,x:n,y:a,color:e});t.popEvents.push({frameIndex:t.gameHistory.length,cells:i,color:a}),t.config.pointsIncreasedCallback(t.cellEvents.length)}t.activeBubble=null,t.cannonTargetAngle=-1}dn(t)},un=t=>{return e=void 0,i=void 0,o=function*(){var e,i,a;t.frameCount=0,t.nextBubbleId=0,t.gameHistory=[],t.cellEvents=[],t.popEvents=[],t.activeBubble=null,t.grid=h(t);const o=d(t).intensityColors[0],r=[];for(let e=0;e<n;e++)for(let n=0;n<7;n++)t.grid[e][n].commitsCount>0&&r.push({x:e,y:n});const s=r.length<=50?2:r.length<=150?3:r.length<=250?4:r.length<=350?5:6;let A=2654435761*r.length>>>0;const l=()=>(A=Math.imul(A,1664525)+1013904223>>>0,A/4294967296);t.cellBubbleColors=Array.from({length:n},(()=>new Array(7).fill(-1)));for(const{x:e,y:n}of r)t.cellBubbleColors[e][n]=Math.floor(l()*s);for(let n=0;n<3;n++){const n=t.cellBubbleColors.map((t=>[...t]));for(const{x:a,y:o}of r){const r=new Array(s).fill(0);let A=0;for(const[t,s]of[[-1,0],[1,0],[0,-1],[0,1],[-1,-1],[1,-1],[-1,1],[1,1]]){const l=null!==(i=null===(e=n[a+t])||void 0===e?void 0:e[o+s])&&void 0!==i?i:-1;l>=0&&(r[l]++,A++)}if(A>0){const e=Math.max(...r);e>=.5*A&&(t.cellBubbleColors[a][o]=r.indexOf(e))}}}for(const{x:e,y:n}of r){const i=t.cellBubbleColors[e][n];t.grid[e][n]=Object.assign(Object.assign({},t.grid[e][n]),{color:We[i]})}t.initialColors=t.grid.map((t=>t.map((t=>t.commitsCount>0?t.color:o))));const c=[...new Set(r.map((({x:e,y:n})=>t.cellBubbleColors[e][n])))];if(t.nextBubbleColorIndex=null!==(a=c[Math.floor(l()*c.length)])&&void 0!==a?a:0,!An(t)){const e=nn(t);return t.config.svgCallback(e),void t.config.gameOverCallback()}for(t.cannon={angleDeg:90},t.cannonTargetAngle=-1,t.currentBubbleColorIndex=t.nextBubbleColorIndex;An(t)&&t.frameCount<5e3;)gn(t);const g=nn(t);t.config.svgCallback(g),t.config.gameStatsCallback&&t.config.gameStatsCallback({totalScore:t.cellEvents.length,steps:t.frameCount,ghostsEaten:0}),t.config.gameOverCallback()},new((a=void 0)||(a=Promise))((function(t,n){function r(t){try{A(o.next(t))}catch(t){n(t)}}function s(t){try{A(o.throw(t))}catch(t){n(t)}}function A(e){var n;e.done?t(e.value):(n=e.value,n instanceof a?n:new a((function(t){t(n)}))).then(r,s)}A((o=o.apply(e,i||[])).next())}));var e,i,a,o},hn={frameCount:0,nextBubbleId:0,nextBubbleColorIndex:0,currentBubbleColorIndex:0,cannonTargetAngle:-1,contributions:[],cannon:{angleDeg:90},activeBubble:null,grid:[],monthLabels:[],gameHistory:[],initialColors:[],cellBubbleColors:[],cellEvents:[],popEvents:[],config:void 0};class mn{constructor(t){this.conf=Object.assign({},t)}start(){return t=this,e=void 0,i=function*(){switch(this.store=JSON.parse(JSON.stringify(hn)),this.store.config=Object.assign(Object.assign({},{platform:"github",username:"",svgCallback:t=>{},gameOverCallback:()=>{},gameTheme:"github",pointsIncreasedCallback:t=>{},githubSettings:{accessToken:""}}),this.conf),this.store.config.platform){case"gitlab":this.store.contributions=yield y(this.store);break;case"github":this.store.contributions=yield f(this.store);break;default:throw new Error(`Unsupported platform: ${this.store.config.platform}`)}return g(this.store),u(this.store),yield un(this.store),this.store},new((n=void 0)||(n=Promise))((function(a,o){function r(t){try{A(i.next(t))}catch(t){o(t)}}function s(t){try{A(i.throw(t))}catch(t){o(t)}}function A(t){var e;t.done?a(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(r,s)}A((i=i.apply(t,e||[])).next())}));var t,e,n,i}stop(){this.store}}const fn={pacman:{label:"👻 Pac-Man",factory:t=>new Xe(t)},breakout:{label:"🧱 Breakout",factory:t=>new jt(t)},galaga:{label:"🚀 Galaga",factory:t=>new ae(t)},"puzzle-bobble":{label:"🫧 Puzzle Bobble",factory:t=>new mn(t)},bomberman:{label:"💣 Bomberman",factory:t=>new St(t)}},yn=Object.keys(fn);class pn{constructor(t){const e=fn[t.game];if(!e)throw new Error(`Unknown game "${t.game}". Valid games: ${yn.join(", ")}`);this.renderer=e.factory(t)}start(){return t=this,e=void 0,i=function*(){return this.renderer.start()},new((n=void 0)||(n=Promise))((function(a,o){function r(t){try{A(i.next(t))}catch(t){o(t)}}function s(t){try{A(i.throw(t))}catch(t){o(t)}}function A(t){var e;t.done?a(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(r,s)}A((i=i.apply(t,e||[])).next())}));var t,e,n,i}stop(){this.renderer.stop()}}var xn=e.rd,bn=e._B,vn=e.Hr,Cn=e.Lc,wn=e.jg,Bn=e.b9,En=e.Cf,kn=e.rn,Un=e.OJ;export{xn as ARCADE_GAMES,bn as ArcadeRenderer,vn as BombermanRenderer,Cn as BreakoutRenderer,wn as GAME_REGISTRY,Bn as GalagaRenderer,En as PacmanRenderer,kn as PlayerStyle,Un as PuzzleBobbleRenderer};
|
|
1
|
+
var t={d:(e,n)=>{for(var i in n)t.o(n,i)&&!t.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:n[i]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e)},e={};t.d(e,{rd:()=>Ao,_B:()=>co,Hr:()=>Le,Lc:()=>cn,jg:()=>lo,b9:()=>wn,qV:()=>Zn,P4:()=>b,Cf:()=>Gi,rn:()=>xi,OJ:()=>ro,U9:()=>C,Jb:()=>E,eq:()=>B,U0:()=>k});const n=20,i=53,o=200,a={github:{textColor:"#57606a",gridBackground:"#ffffff",wallColor:"#000000",intensityColors:["#ebedf0","#9be9a8","#40c463","#30a14e","#216e39"]},"github-dark":{textColor:"#8b949e",gridBackground:"#0d1117",wallColor:"#ffffff",intensityColors:["#161b22","#0e4429","#006d32","#26a641","#39d353"]},gitlab:{textColor:"#626167",gridBackground:"#ffffff",wallColor:"#000000",intensityColors:["#ececef","#d2dcff","#7992f5","#4e65cd","#303470"]},"gitlab-dark":{textColor:"#999999",gridBackground:"#1f1f1f",wallColor:"#ffffff",intensityColors:["#2a2a3d","#4a5bdc","#2e3dbf","#1b2e8a","#0f1a4e"]}},s=(t,e)=>Math.floor((e.getTime()-t.getTime())/6048e5),r=t=>new Date(Date.UTC(t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate())),l=t=>{const e=r(new Date),n=(t=>t.contributions.reduce(((t,e)=>{const n=r(new Date(e.date));return void 0===t||n>t?n:t}),void 0))(t);return n&&n>e?n:e},A=t=>{var e;return null!==(e=a[t.config.gameTheme])&&void 0!==e?e:a.github},c=t=>{switch(t){case"NONE":default:return 0;case"FIRST_QUARTILE":return 1;case"SECOND_QUARTILE":return 2;case"THIRD_QUARTILE":return 3;case"FOURTH_QUARTILE":return 4}},d=(t,e)=>{const n=e/4;return 0===t?"NONE":t<n?"FIRST_QUARTILE":t<2*n?"SECOND_QUARTILE":t<3*n?"THIRD_QUARTILE":"FOURTH_QUARTILE"},h=t=>{const e=l(t),n=new Date(e);n.setUTCDate(e.getUTCDate()-365),n.setUTCDate(n.getUTCDate()-n.getUTCDay());const i=Array.from({length:53},(()=>Array.from({length:7},(()=>({commitsCount:0,color:A(t).intensityColors[0],level:"NONE"})))));t.contributions.forEach((o=>{const a=r(new Date(o.date));if(a<n||a>e)return;const l=a.getUTCDay(),d=s(n,a);if(d>=0&&d<53){const e=A(t);i[d][l]={commitsCount:o.count,color:e.intensityColors[c(o.level)],level:o.level}}})),t.grid=i},u=A,g=h,m=t=>{const e=l(t),n=new Date(e);n.setUTCDate(e.getUTCDate()-365),n.setUTCDate(n.getUTCDate()-n.getUTCDay());const o=s(n,e)+1,a=Array(o).fill("");let r="";for(let t=0;t<o;t++){const e=new Date(n);e.setUTCDate(e.getUTCDate()+7*t);const i=e.toLocaleString("default",{month:"short"});i!==r&&(a[t]=i,r=i)}t.monthLabels=o>i?a.slice(o-i):a},f=t=>(h(t),t.grid);var p=function(t,e,n,i){return new(n||(n=Promise))((function(o,a){function s(t){try{l(i.next(t))}catch(t){a(t)}}function r(t){try{l(i.throw(t))}catch(t){a(t)}}function l(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(s,r)}l((i=i.apply(t,e||[])).next())}))};const y=t=>p(void 0,void 0,void 0,(function*(){var e,n;const i=[];let o=!1,a=1;do{try{const s={};(null===(e=t.config.githubSettings)||void 0===e?void 0:e.accessToken)&&(s.Authorization="Bearer "+t.config.githubSettings.accessToken);const r=yield fetch(`https://api.github.com/search/commits?q=author:${t.config.username}&sort=author-date&order=desc&page=${a}&per_page=100`,{headers:s}),l=yield r.json();o=!l.items||0===l.items.length,i.push(...null!==(n=l.items)&&void 0!==n?n:[]),a++}catch(t){o=!0}}while(!o);const s=Array.from(i.reduce(((t,e)=>{var n,i,o,a;const s=null===(i=null===(n=e.commit.author)||void 0===n?void 0:n.date)||void 0===i?void 0:i.split("T")[0],r=(null===(a=null===(o=e.commit.committer)||void 0===o?void 0:o.date)||void 0===a?void 0:a.split("T")[0])||s,l=(t.get(r)||{count:0}).count+1;return t.set(r,{date:new Date(r),count:l,color:"",level:"NONE"})}),new Map).values()),r=Math.max(...s.map((t=>t.count)).filter((t=>t>0)));return s.map((e=>{const n=d(e.count,r),i=A(t);return{date:new Date(e.date),count:e.count,color:i.intensityColors[c(n)],level:n}}))})),x=t=>p(void 0,void 0,void 0,(function*(){var e;const n=yield fetch("https://api.github.com/graphql",{method:"POST",headers:{Authorization:`Bearer ${null===(e=t.config.githubSettings)||void 0===e?void 0:e.accessToken}`,"Content-Type":"application/json"},body:JSON.stringify({query:"\n\t\tquery ($login: String!) {\n\t\t\tuser(login: $login) {\n\t\t\t\tcontributionsCollection {\n\t\t\t\t\tcontributionCalendar {\n\t\t\t\t\t\tweeks {\n\t\t\t\t\t\t\tcontributionDays {\n\t\t\t\t\t\t\t\tdate\n\t\t\t\t\t\t\t\tcontributionCount\n\t\t\t\t\t\t\t\tcolor\n\t\t\t\t\t\t\t\tcontributionLevel\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t",variables:{login:t.config.username}})});if(!n.ok)throw new Error(`GitHub GraphQL request failed: ${n.status} ${n.statusText}`);return(yield n.json()).data.user.contributionsCollection.contributionCalendar.weeks.map((t=>t.contributionDays)).reduce(((t,e)=>t.concat(e)),[]).map((e=>{const n=e.contributionLevel,i=A(t);return{date:new Date(e.date),count:e.contributionCount,color:i.intensityColors[c(n)],level:n}}))}));const v=t=>{return e=void 0,n=void 0,o=function*(){const e=yield fetch(`https://v0-new-project-q1hhrdodoye-abozanona-gmailcoms-projects.vercel.app/api/contributions?username=${t.config.username}`),n=yield e.json(),i=Object.entries(n).map((([t,e])=>({date:new Date(t),count:Number(e),color:"",level:"NONE"}))),o=Math.max(...i.map((t=>t.count)).filter((t=>t>0)));return i.map((e=>{const n=d(e.count,o),i=A(t);return{date:new Date(e.date),count:e.count,color:i.intensityColors[c(n)],level:n}}))},new((i=void 0)||(i=Promise))((function(t,a){function s(t){try{l(o.next(t))}catch(t){a(t)}}function r(t){try{l(o.throw(t))}catch(t){a(t)}}function l(e){var n;e.done?t(e.value):(n=e.value,n instanceof i?n:new i((function(t){t(n)}))).then(s,r)}l((o=o.apply(e,n||[])).next())}));var e,n,i,o},b=["github","gitlab","scenario"],C=["full","empty","random","checkerboard","gradient","streaks"],w=53,B=t=>C.includes(t),k=t=>{const e=""===t||void 0===t?"random":t;if(!B(e))throw new Error(`Unknown scenario "${e}". Available scenarios: ${C.join(", ")}`);return e},E=t=>{const e=k(t);return{name:e,contributions:Q(M(e))}},M=t=>{switch(t){case"empty":return R();case"full":return U(8);case"checkerboard":return I({low:0,high:10});case"gradient":return D({min:0,max:12});case"streaks":return T();default:return S({density:.5,min:1,max:8})}},R=()=>Array.from({length:w},(()=>Array(7).fill(0))),U=t=>Array.from({length:w},(()=>Array(7).fill(H(t)))),S=({density:t,min:e,max:n})=>{const i=G(t,0,1),o=H(e),a=Math.max(o,H(n))-o+1;return Array.from({length:w},((t,e)=>Array.from({length:7},((t,e)=>Math.random()>=i?0:o+Math.floor(Math.random()*a)))))},I=({low:t,high:e})=>{const n=H(t),i=H(e);return Array.from({length:w},((t,e)=>Array.from({length:7},((t,o)=>(e+o)%2==0?i:n))))},D=({min:t,max:e})=>{const n=H(t),i=Math.max(n,H(e));return Array.from({length:w},((t,e)=>Array.from({length:7},((t,o)=>{const a=e/52,s=o/6;return Math.round(n+(i-n)*(.75*a+.25*s))}))))},T=()=>{const t=R();return O(t,{day:1,startWeek:2,length:10,count:6}),O(t,{day:3,startWeek:18,length:12,count:10}),O(t,{day:5,startWeek:38,length:10,count:14}),O(t,{day:0,startWeek:43,length:6,count:4}),O(t,{day:6,startWeek:43,length:6,count:4}),V(t,{startWeek:8,length:2,startDay:1,endDay:5,count:8}),V(t,{startWeek:27,length:1,startDay:0,endDay:6,count:12}),V(t,{startWeek:49,length:1,startDay:2,endDay:6,count:16}),N(t,{startWeek:5,startDay:0,length:9,count:7}),N(t,{startWeek:30,startDay:6,length:8,count:11,direction:-1}),t},O=(t,{day:e,startWeek:n,length:i,count:o})=>{const a=G(H(e),0,6),s=G(H(n),0,52),r=H(i),l=H(o);for(let e=s;e<Math.min(w,s+r);e++)t[e][a]=Math.max(t[e][a],l)},V=(t,{startWeek:e,length:n,startDay:i,endDay:o,count:a})=>{const s=G(H(e),0,52),r=H(n),l=G(H(i),0,6),A=G(H(o),l,6),c=H(a);for(let e=s;e<Math.min(w,s+r);e++)for(let n=l;n<=A;n++)t[e][n]=Math.max(t[e][n],c)},N=(t,{startWeek:e,startDay:n,length:i,count:o,direction:a=1})=>{const s=G(H(e),0,52),r=G(H(n),0,6),l=H(i),A=H(o);for(let e=0;e<l;e++){const n=s+e,i=r+e*a;n>=w||i<0||i>=7||(t[n][i]=Math.max(t[n][i],A))}},Q=t=>{const e=F(new Date);e.setUTCDate(e.getUTCDate()+(6-e.getUTCDay()));const n=new Date(e);n.setUTCDate(e.getUTCDate()-365),n.setUTCDate(n.getUTCDate()-n.getUTCDay());const i=Math.max(0,...t.flat()),o=[];for(let e=0;e<w;e++)for(let a=0;a<7;a++){const s=new Date(n);s.setUTCDate(n.getUTCDate()+7*e+a);const r=t[e][a];o.push({date:s,count:r,color:"",level:Y(r,i)})}return o},Y=(t,e)=>{if(0===t||0===e)return"NONE";const n=e/4;return t<n?"FIRST_QUARTILE":t<2*n?"SECOND_QUARTILE":t<3*n?"THIRD_QUARTILE":"FOURTH_QUARTILE"},F=t=>new Date(Date.UTC(t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate())),H=t=>{if(!Number.isFinite(t)||t<0)throw new Error(`Scenario counts must be non-negative numbers. Received: ${t}`);return Math.floor(t)},G=(t,e,n)=>Math.max(e,Math.min(n,t));var j=function(t,e,n,i){return new(n||(n=Promise))((function(o,a){function s(t){try{l(i.next(t))}catch(t){a(t)}}function r(t){try{l(i.throw(t))}catch(t){a(t)}}function l(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(s,r)}l((i=i.apply(t,e||[])).next())}))};const K=t=>j(void 0,void 0,void 0,(function*(){switch(t.config.platform){case"gitlab":return yield v(t);case"github":return yield(t=>p(void 0,void 0,void 0,(function*(){var e;return(null===(e=t.config.githubSettings)||void 0===e?void 0:e.accessToken)?yield x(t):yield y(t)})))(t);case"scenario":return yield(t=>j(void 0,void 0,void 0,(function*(){return E(t.config.scenario).contributions})))(t);default:throw new Error(`Unsupported platform: ${t.config.platform}`)}})),J={NONE:0,FIRST_QUARTILE:.05,SECOND_QUARTILE:.1,THIRD_QUARTILE:.18,FOURTH_QUARTILE:.28},P=12,L={blastRange:{width:16,height:16,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAIGNIUk0AAHomAACAhAAA+gAAAIDoAAB1MAAA6mAAADqYAAAXcJy6UTwAAAAbUExURdAAADCgWHAYAPh4APjIAPj4+BgYGPgoAP///+PC664AAAABYktHRAiG3pV6AAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAB3RJTUUH6gUdCQIvh672IgAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyNi0wNS0yOVQwODoyMDo0OSswMDowMFodDlQAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjYtMDUtMjlUMDg6MjA6NDArMDA6MDC+2PM7AAAAKHRFWHRkYXRlOnRpbWVzdGFtcAAyMDI2LTA1LTI5VDA5OjAyOjQ3KzAwOjAwrWVcEwAAAGVJREFUCNc9zsENgDAMA8CECZpMACkwACoLtBYTlAkQrMD6KCDq10l+2ER/WERl0OCIlmNPLJbGXHpiXSvgiDvqi2mrp6NLP9BQga+arwtLoC7l+3BwhKUyBGIdUUx8S81EQnvxAGrnE5e2ebHeAAAAAElFTkSuQmCC"},speed:{width:16,height:16,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAIGNIUk0AAHomAACAhAAA+gAAAIDoAAB1MAAA6mAAADqYAAAXcJy6UTwAAAAtUExURQAAANAAADCgWBgYGHAYAGiIoPj4+JC48ABg+ChAMPjIAPh4APgoAFBoeP///3UmhZMAAAABdFJOUwBA5thmAAAAAWJLR0QOb70wTwAAAAlwSFlzAAAOwwAADsMBx2+oZAAAAAd0SU1FB+oFHRMBD4Zco48AAAAldEVYdGRhdGU6Y3JlYXRlADIwMjYtMDUtMjlUMTA6NTQ6NTUrMDA6MDC2y+NcAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDI2LTA1LTI5VDA4OjIwOjQwKzAwOjAwvtjzOwAAACh0RVh0ZGF0ZTp0aW1lc3RhbXAAMjAyNi0wNS0yOVQxOTowMToxNSswMDowMAQiGSsAAABsSURBVAjXY2CAAUEoYBBSUjJxcXFWBDFM0yMmgxjKq/ZAGEoWHagiysZQEcuy9HIQQ3h6enlpR6chg3C7cWiH8UxDBuHJqywnr7I0ZBCyurnY6uZiEGPmZquZm0HaVxsprzYCGWispGSspAgAoLgj6HdswdIAAAAASUVORK5CYII="},bombCapacity:{width:16,height:16,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAIGNIUk0AAHomAACAhAAA+gAAAIDoAAB1MAAA6mAAADqYAAAXcJy6UTwAAAAeUExURdAAADCgWBgYGChAMFBoePj4+PgoAGiIoJC48P///8UaA3MAAAABYktHRAnx2aXsAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAB3RJTUUH6gUdFRYQClpWXgAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyNi0wNS0yOVQxMDo1NDo1NSswMDowMLbL41wAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjYtMDUtMjlUMDg6MjA6NDArMDA6MDC+2PM7AAAAKHRFWHRkYXRlOnRpbWVzdGFtcAAyMDI2LTA1LTI5VDIxOjIyOjE2KzAwOjAwoPP3wgAAAGtJREFUCNc9ju0JgDAMRJNOEJ2gXnWBphPYgBuIcxTFCcS1xfpxvx4HxzuiL9y0QAchbqF9nD0x0rgNRYjDURZAyKWl7Dl6ctOZe4UnZ6tFVDDLtUlmGm8IliswVPWeM4ICjwJAJ6+0kf/FBY3+EmtiU+0fAAAAAElFTkSuQmCC"},bombKick:{width:16,height:16,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAXVBMVEUHBwfQAAD4+Pj4yABwGAAYGBgwoFj4eAD4KAAoQDBQaHhoiKCQuPAAYPjYsJCYcFDn587QOADQaACQMABgAAAxGCm9OHP/ee//vv///+dzvq05cXv/AAB/AAAAAAAYEVbmAAAAH3RSTlP///////////////////////////////////////8AzRl2EAAAAH5JREFUeJxdz1EOwzAIA9AGY4PI1Psfd3LVdtL8k+SJEHKsO7zXY4kkxaCcdSwyNp/zBfuzh5TqgdkzhPC7MkMCpYL4NEUBgHgavE8ySzzDICAz0OQZBhewATTjAlewG6ie2AagLFWd269USRC7u5qew+OUxOzOF5zrj4a/fAF4DgSeMuBtyAAAAABJRU5ErkJggg=="}},z={player:{idleDown:{width:16,height:21,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAVCAYAAABPPm7SAAABgklEQVR42o1UIW/CQBh91yAmJ7v+g5OcY8kMsssExUFCliCxzTKBRCykFjWGIEECgjCBaEKWtO6Q9w/YSZKZuU5AL71y7folJ+679959330vR2CIuk0TU/4gBUFZ1G2a1G2aTHfLJPn51tZ0t0zS80Jyh22viPnVYVtNxErJ1Amw2DP8F4s9A3UC1aaVHjTfflE1stha/lA+eKVk+2ul7Wt5sv1+B/YkwDdUA6Y5+eABYx/aGwDApDes3EIWqwSoE1QWyGJJdoyD+QiPL+VC27GPSW+oTEXyXqBOoF6537gHAHzEEQAgfL2BOPqaI0kVC5dZ2sqS+YZiMB+pPrvtCN12pHoezEfgGwqjE3nLA2YU/TUvvLm/5sCMgrc8JaJ8IOMQdqMJGYcAAHH0sXg+e4EthRGjteDKE2QcwpWnwgpMGKLKB8DWK23O7DIFfpmCOJ4dmMVb2Rs+7VsdGEdX5BSjVZBPFrVhwtUOUhAX1yL57yvvEVeecJCCEBOg6O8zYf4AxGvpYTg/OGAAAAAASUVORK5CYII="},walkDown0:{width:14,height:24,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAYCAYAAADKx8xXAAABiUlEQVR42p1Uv2vCQBT+LmTo2PGa/+CNuS2CFBxbHIybAZeOrqFTR4ci6dipKkVwtIvYwaFQCrol4/0HNpuFLm7XQS8mMU2tDw7C996X9+N7dww5szkpFFgUS1aEw+akbE6qP58o9f2ZOf35RGn/AaklZgeE/GmJWUJmNidFVoDxu8Ax5l2GkCsfBgDU7jc41nSsmQbjqltK4h8vybeZJvGnC4i6RDilDEFjcdUFej4AbEs9xU4mMi1HZ9TF9W1QGjzr+Xhs3yGKJWNpLTujbilRk5KMZav22+pletTTJCuA11zAay5AVpDxZeSwOalwShisPZB1BuFU9lI4FWAZYLDeIJyOIepQUSyZme8BAORkn0HU5RZrAzeprIbNSYUNFxjS3w0OCWHDhc1JmXkfWQGEU8HD826pm0C4XECu/GIdi8hAMSmjY3pIuq/0tEVdZl4BI6/jYO0dtKaxdGVJqa/8HNypbW/K8g1X8RcAoAiPYskM/RftLL2Puxibk2L/WbfS4RyzpwDwA3eo2etvVgkzAAAAAElFTkSuQmCC"},walkDown1:{width:14,height:24,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAYCAYAAADKx8xXAAABkElEQVR42p2UsUvDQBTGf1c6OHY88x/cmGwVRHBUOthuDbg4ugZxcHSQEsdOtiKCY3Uo7eAgiNBuccx/ULNVcHE7h/bSXBrb6oOD8N378t5977sT5MKVSlMQ70ksinBcqbQrle4897T++rBW57mnzf4SqekNlgj51fQGKVm4UmnlhDy8emwS/l5EPAkoAexffbNpmNxyFkx26ytJ8u0x/S5nSfJmG68WE/WVRTBYsluHVgAwa/U/UQJ4Od/amGByhRnH6f0lh2fhStKgFdA+vuA9iYXIzlI5YaraSXUHgO54lFaKJ0HqILHOar9ZzxLHqKmcEL8xwm+MUE5o7VniuFLpqK/oTn2UE+LN2wTwqjszbD4S05llgPbxBQBxb1HBq8XF43Cl0kNZgVu1/oC3iuiojiuVLuf3TKvXd3NTNyAaj4gngZUnihQ1gpjIk6w5ZkXKn8tg2VeglJ9jd+ovHa0IS1sdygqyuj+7KeMXDpJPALK49/S4aNVUio7su2iShrJi4eaH4i92WynOJj4F+AFlodcPvNujWwAAAABJRU5ErkJggg=="},walkDown2:{width:14,height:24,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAYCAYAAADKx8xXAAABf0lEQVR42qVUMU8CMRT+ShgcGev9g47X7UiICSPEgWPjEjf/wcU4ODoYU0Ymwbg4IgOBgYHE5diOsf8Au0Hi4mQdzh70OOHUlzRpXt/X9/q9rw/IMZcy7VKmccBIHigvcKkkwaEs/dlQ6/c3a/VnQ51bhUuZ7vDJHiC7OnySgolLmWaOwPMrRxELzmLIVYgSANTvPlDUTGwJf7Ry1qFq/mHEfbgPVDUf9OEU/FwiHjMr3vialwI9U+r8+uTXpZaWShK5CjFYRIUADbXBUklCdnvJHIHu5+1RkCW5Y9rMSs9qhyGEOQJBO0LQjsAcYZ2lbzTZ4jHDYB2AOQLcq27Z9KqJ75tVU1najsE6QO/iBgAgh9sM/FwmGVs+8AgA0lZO80r8Tznmjd2npNygDcSLCHwUWuRYrMatRG589JKSAgByFe6xWjagKa2kh1NaQWMnOG75UIs5GmpjswoA1Ksjb28upF4dU1qB9ZFNgAFkb/9xWO2CjbSOqYcUmXB5k+4LCXHPPa24MKoAAAAASUVORK5CYII="},walkDown3:{width:14,height:24,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAYCAYAAADKx8xXAAABeklEQVR42p1UIU/DQBh910wgK4/9g5Ot2xKyZHJkYpujCYagsBUIfgCiyCk2gpksCELFRJOZ1bXy/kF3jiUY3E2UK72228q+5NLm+r1+73vfuwNKYVEmLcokjoRRBgXUREBNHAOTMnBfYiI4qf2gKM6WvpTfG23Nlr6sbcGiTF7ZnxVAeXl3XzmYWJRJ1vawWNloEk4vBk/dTJz+4w+ahso1cGKcDGzVbYqL8V7AJYCpAob3Z7hZ/YHo8znsIUf8wTSQPeQIqJlRTQQnPHUxj9aNKA7EFongxFCumF4/wOnFWdXbjZ79wvI95aDGlitbzyiCVE+s7cGZrOFMMvoBNRGPxpr5jXLzAGB3uloV2ulrz8o44lE2Btvv5ooufEBEIWinDxGFugHUOVQRUDOvrpS0398wENuqc4o01PvT6xzOZA3W9iritA4pGP/OlqcuAmpqFQ8Ceerm1IvqJ4ITouQNqJlTFFGo/b32dCjOxcRjoERw8i/nFC+sHSx90I3EuUDEAAAAAElFTkSuQmCC"},walkRight0:{width:16,height:24,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAYCAYAAADzoH0MAAABZ0lEQVR42p2UPU8CMRyHnxIHRsdy36Cb53YkLIw4CZskxoTBOOtAoh/A4VYmwM2RyejAwAgbN943gG6SuLjVRbB3XMvhL2ly7eX//rSCAoVSmaLzRKcifyZsg0SnIpTKqCCm+fwNQC+qAzBezBlcP+07CqUy5u7RrM8iE0plrs7fzWg6MeZrXbhG04mxM6wA6MWMlt5gR3apF9VRQbzLupLoVLT0BmAvbZfsICd27T4j3Wjvvi+AgV3CIelGGzms0dIb5LCGHNbA52C8mFNWGQezfpVjJfIAFTGQ7wFAS29IdCqEi0LXSGf9KunqYQeTcKXmm4pNoncKKogBWL4pALqdub+JZdTtzNlD2aV09ZDZv07q3N/0/pHBi2J52T7MgasHmRJue24ODk1CBXFmhKVK2E5g25P8q1RxRd5GH392vVkJ388PeYqMmn84/z48NlAVH3m2cdE+lMqIsvi6kBbH3oP8XfgBu12xmgbSwmIAAAAASUVORK5CYII="},walkRight1:{width:16,height:24,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAYCAYAAADzoH0MAAABdklEQVR42p1UIW/CQBh9RyaQyGv/wbm1riQYZJcJihvJsqRqegiS7QdM1KKAuUk2QYZAIIuj8v4BnGwyM3cTW7truWvLXtKkvfS+733vvTsCDRzKpG49EZyU14i6IRGcOJRJZkfoP38BAEKvCwBY7GJMb59OCzmUSXn/KI+XnnQokzfuh5xvllJ+HrXPfLOUKsMWAIjdFr5IoXY2IfS6YHaUs24lghNfpABwQtsEtcmFOnvVJtEL8vcrAFN1hDqIXgA6s+CLFHRmgc4soKrAYhejKQoFtpM2zgUpB0iXgbIGAOCLFInghJhSaLJ0O2mDH8Z5mIiJWpUrahIrXWB2BADYrxgAYDSMq0VsgtEwxkmUTeCHceH7ddnFw134DwYvDPtBUJ8DnQbMjuC+v/1oMQjgXnNzDuqcYHZUsLDRCJkDOk2MDLLO+xUrUF7TTiGF2iirP1Ov/xfl30tnTTvI7o9ClMvz6lTPxKw8TOeESnuYmhRSXfgGrX26OKISwJ0AAAAASUVORK5CYII="},walkRight2:{width:15,height:23,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAXCAYAAADUUxW8AAABgElEQVR42qVULW/DMBB9jgoGC93+A7MlLJVKClsFNHBgpOovWDQN9AcMlA5MbcYG24JqBQWFDUug/0FiGGlkzAOZXTcfSqU9yVLs0927e/cUAgA2ZRIAEsGJ+i4jEZyU34hNmYynPkR0wljkYP0lRq8/AICZOwAAhNEZb4+LahGbMpndu9KmTD44X3J93Ej5ndWe9XEjzc6sRHBSZmzCzB2A9Zd6TEsFyq02wSSwcCPC6Awx9DF5Xuq3TluSGPoAgAkAuuoVj17eziyGPuiqh7HIL4kGdPLp5U63dysstTueBrpAYyfzDGKeXUxiBtUKzLWZAj1ZC/A00EapWK7JnnU2tZqCrF8wxnsG814rWBOz43HEe4bP97ASr8x8oF2MRV7bcjwtdu7stkgEJzc7rA6NgqkZnT+vx9EZPA2utOnUJRYihXA8DkRFEZ4GONAuAOixOuV5lQ0dj+skADrRxBUzdUfAhxKH6b+LCfNOyvIrRfWqdtt2wdqcVWemf9nzF67Fws06Dc9qAAAAAElFTkSuQmCC"},walkRight3:{width:15,height:23,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAXCAYAAADUUxW8AAABf0lEQVR42pWUr27CUBjFf20qkJMX3uDK1kEyg2RBgBzJDCE8wCoQyAlEJ6dgjwATyyYQldSBvG8AV5LMTO1OsHb9u3QnadJ70/Pdc77v9ALgCmlcIQ3/hOUKafaDIToK6elz5YcHraz8ngMkRNkK6C4+ARi3OwA8RzsAnu7mpqwArpDm1nszq+3amI9T6bPargvWbFdIkz6xCuN2B9kKSBewgYLUKjx+PWTWdt3O6uthoaFOHRKAWDahX5OcIVXABghnjQJRLJsFme/iKks+aGWpo084ayQzLVUyOdHT50xYnN/0+IZZAIsdNzkSwL09B/xsPPNhAZCtIBlLWWTj0608MY39q0zevb5iP7g00XvZcNDKcmJi3Iw44+ro4/XVn2MsHZU6+pSp8PqbIvmgldWj3v+cKEQap8qvbAV4P1nfRztGUwrddmK/ot1FR2GSqNH0QkpbyYck41m0u+hJfKP4ldLjsNjxQkdhUiB/QpqUnrtV5fkvFEJSp0j+DvsGRtzJVsVjbugAAAAASUVORK5CYII="},walkRight4:{width:15,height:23,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAXCAYAAADUUxW8AAABgklEQVR42qVUIW/CQBh9RyqQkwf/4BytK8myZLJLBSBJZpapySEQk4gJJhELdGLJJJsgmUBUtq6V9w/gZJOZqd1E28u1HAS2lzS5fs37vnfveykBAJsyCQCp4KQ815EKTuo1YlMmk14fIg7hiQysPcXl4zcA4MbtAgCCOMLs+mG3iU2Z3HZcue240qZMLtZLKb+2xmexXkpdGdFl371OKhNNGF4k4JsRUsFJoyyy9vQgUZz3EcSRuhIAWOVBL5qIdN7C1W0+YFbUGzgBnshA5y31vkMO4ujoZoocjps4FURfmWnH+r11+angpJKacmV6Ex3huKnWVJlcb7APesIahz4mK4ZkxfJwDKL9htVRkhyfqwANBxFsylREjbKTXm6O8/G+09DxuVLYwB9wlGGsPYXjdpEUweGbUYVsmTp/0jMAwD2AJI7w9hzA8bmqe2AyFZxYh+Q9/UzgiQyOXxj4kpuIwgvLJNcTmZqilBREEYcw/gz2rq1wv/xVGbN9quP/iucv403HnBp4/m8AAAAASUVORK5CYII="},walkRight5:{width:15,height:23,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAXCAYAAADUUxW8AAABeUlEQVR42qWUr2/CQBTHPyUIJPLGf3CyOEhmkKBgcglmQc02C2JyghDsxDIwS5AFsWwCUbOEuk72P4BKkhncTZTrrqX8yl5ySXPX9973vt/vPQBsIZUtpOLCsGwhVdDuEPkezWhz8MfvKLSye0WAyPeSDVkZ0RhsuavVAZj4S7x+CXBUXoEE9njhqvHCVepnvbfGC3fvagX9cf/2BJB0zAtZGWEWKNpCKlkZAduDSdF1hxbA0CHsZjo3BtuTzIrXK1oPI3JhnxNZNQr8IwoAz93HZGPiL/chf82Ieuv9ZK1drOVfgWyRj6HDpyinHWZqbZokG16/RLhyUo6zsmY5dU/dvRlt8gkL3mWyAG5vlvkPw+watDsAVOezlKuqO9dN3XoKdvEUzHDlELoxmqmbfmGpZLPjsbCFVCnCbCGVSYYJN9jJFq6cFGFHYeuk6cskfiC9MqLWiA/ns5gwUyKzclYinainjnXu7NJK6MTkzpcOP832RQ7LzrBfnle9zbyp77EAAAAASUVORK5CYII="},walkUp0:{width:14,height:24,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAYCAYAAADKx8xXAAABj0lEQVR42sWUoU/DQBTGf7dMTCIv/Q9Otm7ISZKJDceSmSmCRSwBiUDU4iiCBDm1gEBUtq6TJ/CsbiQzcw8BV67dYKD41PW9e+++970vVTQQaiPswKK0yv9u+QWhNnJ2fwVAMRhSDIYAnN1fVfmtV26fZyLrpch6KaE2IqcXIqcXH+fP+O3z7Ks41EZOoscq6V9oNpT1Uk6iRwm1kTZA73pTYzDpHjJ5SXeNSu96gx17M/4V/1SYTjskebb3cpJnpNMOAMop6/bnxGkWONyML1mUVil/lyaItxR2SKcd7Ot55SC1z2rfWa8mTjE3AJggZnScMTrOMEFcyzm03WvF3JCsRpigQ+TNGHUPIY9JVhuK+QNRH1mUVrX9LjfjSwDsbJuiHcPEe7UVaiPFYAh3Zv+Ad4ZiMKTyqg8TxDWqAEWeYV/PazG1S1EnSEWzUVTboy9S1Lc01Y76tvYXaDX3mKxG21b7jPnMKqpP+gDd7QFQ5ilH5RsAu+KL0qqW6+KSvzmH2oj6i91+FOc3PgV4B9TS3qWPX7w1AAAAAElFTkSuQmCC"},walkUp1:{width:14,height:24,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAYCAYAAADKx8xXAAABgklEQVR42qWUr2/CQBzFP0cQSOSF/+Bk60AilyAARxMMEotATCIQ2DlA4NkEAYGoLO6QJ/AMtyUzuJvY2l1bNiD7JhX9/uh7976vJ8iEJ5XlQuxPRrjvBXfAk8r2FyMAdLOFbrYA6C9GST016Ellg3aEPoT0qrUcWq9aQx9Cgnb0w8iTynb8tbUfr8kz3S5tjDDdLlO1jr+2nlS2CFAfn3MIvUN46ajUx2dM1znjvfH/wdkuutrs9hQBwmGJ+vicFLLKugPhsASAiJWN93ctnrqP7E9GCNcAqjLJKewimeMgcZC4ZrXfrJdSVa8UAKoyIWhHBO0IVZmkajnL6ZXCbxhUZYLviONXa1+5hkGvVMKsmKVijgPM8oY9elLZjSzDXF3vnit0s0XiVTeyVAH0LsIcB6mcuKRoLIhLP6usyP79sUhZtf2GSd0CheweZ29B3qMXcgnVjSwjq3UATruQh9M7AG7ef3n+oRojxfdLsr/vpo0sp/LxB8U9dvtTnFt8CvAJx6DEoCOKVjcAAAAASUVORK5CYII="},walkUp2:{width:14,height:24,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAYCAYAAADKx8xXAAABeUlEQVR42qVULW/DMBS8TAGFhVb+gWHMUjIpsNJAW9ZKJVPRaEBB4UBBaNlKJg12A1ULBiKNJMyFBuNJ4KSSMg9MTu3E/dh2KLLfPd87nwNY4BMqfUIlzsCxkXivDwBgb6/V+q4URq2rE2yd+WeCZZZiMZ7JRgOfUDlkGyn3hZT7QiqpT++rak3uCzlkm2oExydUUi/GywerGi2zFABwH3QaCka3HCKPfqSG84OxaSMohPMDxBi4wR/xf6Ka6xz0GhcAkmkL4fxw0hSdkExbxwD4hMqH58erJC7GM+xK4Tj6XVIvbjisnyTyqAqAcyk5dSii4SpfUwAA9WKMBilGgxTUi409w1WfUMnXFOxOgHoxmGYOCzoGWSlz61JEHkGsmhLLSdt+j+Wk+FUArObU5fIshcgjwxxD6vEBR0AWG/LrcNVpW3KcYUva6GrFvNdHmSXoll/NGUkQwvatGpIgxJa0YTxkVaAI9e4nzdHJAC6SjKxeEzv9R/UNBfy0USHon8MAAAAASUVORK5CYII="},walkUp3:{width:14,height:24,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAYCAYAAADKx8xXAAABTklEQVR42r2Ur27DMBDGP0cDgYFW3sAwZR2ZVFhpoB0snIZKA/IAAwV5hIxMGgyqFBAQaSRlDvQbpGarVDLmgcyRnT9NNLBPOsWK75c7350DdBRQpgLKFCbkdCG+2YJvtpiC725tmnAlBRl1Mi3JU6WuZ6WuZ5XkqRo8gumY5KkFmRbvv1qYBJQp5sf4+FxgjnYPHKIOm+KsDt+YK+3r4I/6H/DtVNp9LCIXOJR4Xt5PAkXkAgCIbsf+/XUyYhG5EHWISgpCzF4yPx6ssAbMCSJjIzYmDTrWgB8ZAID5MXZPZWsAoPcGq7p4FM1zpEj8yNqsrNvBN9sGTPugfDn3IwaUqYx67UtzrbWWF6zlpZ8qXa7QXeszMj/uFefmRea/jRd1iIx6VsSboO6dmXpAmaqkIERXKaNem6I8FdbXB4dc52w6TkHWyM2ZHPOH9QOrJroE5w6VZAAAAABJRU5ErkJggg=="},death0:{width:16,height:21,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAVCAYAAABPPm7SAAABgElEQVR42pWUoW/CQBTGvyMVk8gb/8HJ1ixgliBLEBuSZG4KS8jEJGJZaqfGDAkSEGQIRJOZNjOtvP+AnSSZmTsEveNKr4W9pObye6/93vf1gIpyKZMuZbKKIWWNALCmdQCAL3YAgFTwAu/YGgfTMQCANlsAgEEcAQDeHp5l2SC4lMnJZi7l70/lM9nMc7KIamaNALMvD5dU/zYB3w6RCk5q6rD98odLy2RzO/iII3RGQWXz5+uwfImdUQD6fg2vy5GsWA5UZ53HIDdESwifri6WYLLO0ZahROb7uVILLATJpUyuzwzxxS6XA8cG/Kdq5tuTFdMpZI0A/V6Efi8CaxycGUzHSFYM1iAld/fHoHy34GUxVpXEEWY30dGV5QKp4ERLEHEI2mxDxCG4WIDPoa30ujxj6prJSUgFJ77YQcRh5Q5MRrtgfr63XGj9ALSMJPsb+fYQIJOvmW9QFmowjgrNpzYTm/dlMmyckwpOfBSHnF4ap1eb2gOxAdYbp4TZA9mI4jenPoeaAAAAAElFTkSuQmCC"},death1:{width:16,height:24,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAYCAYAAADzoH0MAAABVElEQVR42qVUMW7CMBR9RhyA8ZcbeEy2VOrCGIkBDtALsGbsyJi1U5nYgQGJgYGlEtnC6BukHiP1AO5kk3w7Lmq/FMX5/u/5++XZAoFISJpQ/qaVQCwSkiYhaTbnnTHfX71nc94ZOz8IDgGHiP4EDpGM8M8Y84R+WUYB9LnvfY84ONct6OPJvbvjXLfeAt4W6qNEOleojzKaGySwhelcRXM2BDfOiSZRDXLd9owlEpLmRBNQNoOuLsh1i9V2HQS/v76B14qEpKkXd2HSwz7aAa8dA4CuLo4VAOS0RJo994HVFaopvFpPAzktoZrCqW9F5HNOg9gJ5AShk+kRhNrn2+gSeD5QTYG6ukbBQR9wdbudWDCvuWkl3GGyqlI2c52gKu9jVjdoZRur7RqqKaCaYtBYnojWxpTNPEPVi6VbPddtX8TBe+6X+zP4Gx8NzwePEvGr/QduTytbQVkpAwAAAABJRU5ErkJggg=="},death2:{width:16,height:24,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAYCAYAAADzoH0MAAABeUlEQVR42qVUsW7CMBB9sfiAjFf+wBvJlkpdGCN1gJF+BhkZGeELyi8AA8IDA0sH1CWM+QPwGKk77kDt2sEOqD0psuO79+w7P18EjyXElW/9KKsIbZYQVwlxtdgtlfo6O99it1TaHwT7gCGiP4F9JJ3mSeTLsDVN+lg5/6wJzmUNen8yoz3PZX2zAWvuUG440tcK5Ya3rgUJbIC2EBgAoua9C4pba5DL2tFFlBBXgmJQ1oc87J0AnzVjOwBAWR9mXF+rzLszB1idCvhiGQDIw/6a63oF3p1BUIzqVGB+mWJ+maI6FRAUg3dnSH820BhHwqN0q869zIjElm5CXJ17mRqlW7+kNUFQ64EYhn8a81XZdwp9W3cJcll73/1RVpHvim+EVA6GptKaSPttn/azpgLfPp+dVOyj2z5vCuVgaAQzZhMIiiEoxphNjJjKgfsanX4gD3sTkK4L5MbzC3QEZBPksoag+CbAJvc9qOheJw6ZLnD0aEsPtfZvVKwyTDYVt1sAAAAASUVORK5CYII="},death3:{width:16,height:24,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAYCAYAAADzoH0MAAABpklEQVR42o1UoW7DMBB9jvYBgV7+wGwJmVqpZDBSQTu2SiODgy0sLEzh0DoyqbAJqBZQUDKp0UgL8wetYaTxZmA6106cbJaiWHfvznfP78xgWT4Xpc1+kDlD2/K5KH0uysVmVZbfJ+NbbFYl+RuDbYFNiSiOUfDz+wxPnS5kb9haJf+M8Zbt8PI4xUHmzNGdsjdEKAvw12v11/ehLGoHONUT9muBoJ9jvxattsYEBAz6eautxgEZUu62chDKwrhW5nNRptwF79xBZluEssDofoflqmsEkq2KZT4X5X5wISZIYgCA8CIjQX6c/PJRwToAILOtMggvUm3MzzPMzzPVmvAidQDFGBwILzJOIrC+1zFK2iTR001HqUwnVrcRhmyqAup5ebtDkMS1wSGuRl9dxUlNiflxYg2mcoMkVuVbhUQE2iaOrrt6OwbgIfhoHtcGTE2JOuPUCvl1H/mdqoSJJGqFSq/6rBzsB0NF0tiZIuUuUu5i7EwVyboSAeDKeA+yrQIEyQSh8lwCSYG1BKEskHK3BtCT2yaS/fUSNy0imP33SW962n8AdCQ0/3wR/FEAAAAASUVORK5CYII="},death4:{width:18,height:24,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAAYCAYAAAD3Va0xAAABYklEQVR42p1VrW7DMBA++wkCrb6BWRyWV8g0MliwFxhsNBRYNHVwrGi8qEpAX2FSA/0GtWGk8d3QWefKzZ+lKInj73zffd85Ah4MozSm5ntvBcwZRmk0SuPxckL8ddF1vJyQvt/jxH2Qt+89PL0fRjdrP2r4em3S2VEWLi/RKI348xLu/NkojS4vQ3aEl6kdr2cNxbOF61mPzo1SgwWDUxOPguhNuk72VieDCQrSqQwqP0QBPv/2UPkBAAA6lcFONlFAwvTeCqDiGaVxW7To8nKSnstL3BYtcqwgSnpzCGlPmS6FkRzUqWx2ofnaQI0oLVGNaBHF4CMq6pLBMZLL3alslpdIZa6w5HIGKWcYsfJD5Cm5ptApTAi0k81iatygkQJrVCNMZEjeEilj8o0oo2BImrS3OqRKinCgURpJWSoF9VvIiF7WNC3hou7nJps6Rvj63lsh1h5qyfNo7q9o7Jf0D3HLEgh0oL3lAAAAAElFTkSuQmCC"}},plunderBomber:{idleDown:{width:16,height:21,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAVCAYAAABPPm7SAAABoElEQVR42qWUoW7DMBCGf3eZFLBJhSkYCBgwdFjLFimgAQPtY3SopQEDHS1aH2AP0MIEVNpYy2YYMBCwSQksNKiUge4SJ3U3sCO2zvf9dz6dzWAw4fDS5JdFyto+ywQO4MJoDsq2kKXDBAohzAKyFiIRS4fPgpSEzmUt0sE/rdED33mq9u60GZgt9JuE1f6kgnHC4U6PgBdweAFHtjgKjhN+UkElsEXWyKZXQIKm2OoKc7sHV3EA6TFTUgNeUGd21Qhze49I5QAAJhxeroYp0jcfABD2u4h3e2PD9DN+94pxwusKIpVjbvcQ7/YI+12jAMGRyrH68bH26M7tXiOjDhKsj/YFDdG98HFZKLwcPuFb140qbm9sfHwpRCqHHnu4sh47+oTRGqm8kTXe1U1rx3YAQMrjkNM6gFuJEEzvpB3Lfnu+f5ksUsaEw8uJGAEAlnKN902KhyA8eVhSSjxvYngBhx7fGOWJGMELOGbDuCqR4NmwCZMx0z+wlGtjyQST+BYZLFmkDA7KAVxIKSuR9vdFfdJhWaSMnfsHzwm0z78BuJnMLUIpRL0AAAAASUVORK5CYII="},walkDown0:{width:14,height:24,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAYCAYAAADKx8xXAAABTklEQVR42p2UoZLCMBCGv3QQSGRPIiOD49wxg6ASHgOHrryzuHsMToLAg2NlZGUrkXU90UknKaHD3apk83+b3WwSRc9MqhsiJpVV/nzUB96ZYowJIRFIafwAykEx4GFXES4USGXV6FUIaDUCpDQJ/7SuxkX6xXQ3LC72IGQhCDBbag4ry+akA8D5Divb+RKAC0UgvJ1tdOxrlUl18zl+AyCvy8FUfV2Q6u1Dc7zeo1A2nwRryjXeRcvmkyjoIJdV4op3juP1HkT253lddgcU9NHB/q5u3K8/kcoqd/xbsyavy4cd87pka9YAbE4aqaxSJtXNYWWZ7to+bs0aESEb1y1YjzHG8C0/3M6WYt/Cyt3VWD/75utGscXYs+oHVbHH68MxSCqr1CuvP/YLJEOi/nfxNFV3oWdLHb30zt+1Y6iuZ/4k+Bb+MFavHEqs/l8uArn/P6LtpgAAAABJRU5ErkJggg=="},walkDown1:{width:14,height:24,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAYCAYAAADKx8xXAAABSUlEQVR42p2UL3PCQBDFf5eJiEQGiTx5OJCdiSCyfIy6aiS1df0YVIKoT1xXRkaCRMalgl64ux6ZTFddLu/t7ts/pwjM5LonYnJplPudhoQ1C4wxPkkEcnrXgbKkGOFPVBEqWuTSqHQqCbhhBMjpE/5pg8an/I3F6zi4fQeh9IkAy0Jz2DRsT9oj2LvDphnuEoCK1gN+fzXRs4tVJtf9PpsDsOvOo6m6uCHVcjWDelxjuZpxrK93jbvuDPUvecSO9XXIKr2Lx4tondgINoAtlNdH682NbM+hfhXOaUXLPpt7EXfdefhn51WZXPe25MtC82KeERHKrLsRuwxjDB/yOfRxe9K3dqxZEOtnaC4uHYYXqKR9uFahUxVbXpccI8mlUWrK9sdegWQMFD4XD1N1qxYb+mWh/Xa4FQu34JHeZNJzETmrKUWJ6f8B6XaqqsKyGRAAAAAASUVORK5CYII="},walkDown2:{width:14,height:24,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAYCAYAAADKx8xXAAABVUlEQVR42p2ULXPCQBBA32UikJWJREYerriKCirhZ+BaWSS6jp8BMojOtA4cKyMjiUTiUkH3uBzXDNOdydzmbt/cftyu4Q6xWdGqLk1lANI+I18OTwXl/sQio5WmMmkIjBlire1AIsLou+rsGYViQCgiwo4aaSqT3gsBFxsBMtqEf0oK8DYpgZLha9yo/risX817FwSYbQvWVMy2RQdaTy5760k3OTeuHj6rqO4nB8DYrGiXg5zF+dgb03KQO31xPl5d9Q9CeXl8AKDcn6511MIvB7kziIlC6lkSO/T/9VNIk5Ro5mIx+h6E5wnQqZ9/q3/TmKErm3vko+fCGWiSQmhH7WAyWmOzop3bKQAr2fSWRMEd9W0/hg/eL7qu0lTGxJpXYYVCjxzY1/1zO0VEXFutZHNNjgJaI/+hKxTqxh8Zvmg8f+2bvgEVy+bdMXba6nc0AvwAu7+3SNwDlHEAAAAASUVORK5CYII="},walkDown3:{width:15,height:23,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAXCAYAAADUUxW8AAABSElEQVR42qWUIXPCQBCFv2MikMggIyOvDv4BSPgZOCqLRNflZwQJojOtA9eTkZFEVuJSkdlwt0k6MH0quby3uX377uBJ2DitbZzWANEQYUi8H09Zzia8fFFHfaI5CdbaQOSc40zJ7naFS7NmfGGfSEOKuKow0TNCoOE4IKYe8Q+0Pb8ujiTbY4dQvofvn9VbV7w+peQUrE9pQM4X97V8UQTfgm0n25Dw/VEMGta6beO03o+nzRj+mK+P3e0ahkQTfCxnEwCOl5/2J8YPh4iFqOELB+OpBRpiotE57vu7FNCejCTLG7tiTtIhyFZ3tytzEoTfiiWWOp66RxmRwPi59meosbErADJ3aOZdFcb0nV//kGTu0AoFmTvcT5WriqDImbI5OSpZurWo7/ZoRtEV6ufOtsVJv3dZ08aZR+6tvqKtYY9efr4/AL+K1aQg8bD1tAAAAABJRU5ErkJggg=="},walkRight0:{width:16,height:24,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAYCAYAAADzoH0MAAABgElEQVR42qVUr3PCMBh94SImkZ1ERga3ObirADn+jDl05GZx/BkgQXC3Oer4ZGRlK5F1nei+kKQp425Ptbm8l/f9FEhAZ6pNnVNtRXwmfQLVVuhMta+Y3MS07shEQIY2FhI6U+1lpnAorjBNBSYzseeCCGeUTkQC6JHvQWsNEIAMLdVWSKqtML/WYtuPQPqxn1F2AugLzLNPAMBk3f1PcxUm8XKyAIByA6yOe7zrt4C8OipcTtYRGSN2MM0Vyk33wm5hsaU9iKjLvgd+yFWBHXw8PQMA1OwLk/XNIp8DgGmqXl9Itl9uLOz3PLjgk5cvYywxdv+H4gqToZUc9184FNdALKjCENgyO/GJQRK5NDG4sUxTwTRV4MIJcAXi+FNifhJNU4FqK1wZTVO5CnBOuLH879jFQCOFzcJNtaV956JItPI0v+0Af6x9F7F910iDk5dYLPFSGd0TiC+nNpJ4dJ0NicgUcbewbh78qUyttVHqVb+UQ4uGOeJR60Oh/DsHPyw/15lZ2SzeAAAAAElFTkSuQmCC"},walkRight1:{width:15,height:24,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAYCAYAAAAlBadpAAABoklEQVR42o2UL3PjMBDFf8oYHCz0QUPBDWuYMxPgzhy5fILiY8WGVxp2H8MHE5CZwphZ4IBYDWMYGKYDrhQ7Vpq+GY+lHb23f6RdRQSSahezm86q4T4ZHjadVZJqtyC7CIn0RGMgxQ1FlKTaNblmW58oz0c80ZMm3o3hQIvprEqACfEziAgYIMUlprOq/AjnOtR7ULEi/ZKfo0PL9DWss5f+P1/pniypds3eAtBuYL3TQWCZvrLeaarCst7pkejML7Y/lrSbXrkqLH/M377CA49VYadhS6rd72/fAdD5G9lLHxaAtwOU5+PYsw9Z52+TggyJT48PNLmmyXWwz/gitvWJbX2K5xxDeT6OQn16fGDyPO8hCNRjgcR0Vs1Xl4LdwoKM8txCfSNsX+l20++rwtLsLVVhOdB+CBynV3X9SLw3EQnNsCDjQBvaM/GL+eryPP0h/8ZFhINpJ32tPhsG156vB4K62XqRaXI9SaIk/70/49w/3PszwXa3JYd534LprFIxYrO3zFc65BxmGIwEZ7Fc/D0PJ4qIjPbB81fGbqxo/wGMrdCob5yBZgAAAABJRU5ErkJggg=="},walkRight4:{width:15,height:24,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAYCAYAAAAlBadpAAABnElEQVR42p2UK5PjMBCEP6UMDi7UQUPBCdswpyrAW3Xk8jOOLTbcpWH7M3wwAalaGDMLChrGMDDMBxwpcuzs44boUeqeVmtGiokQbbqpfds6Fa+T+LBtnRJtugXplUikB1oLmi4mUaJNV2eGbXWiOB/xQA8aZbeWAw22dSoBRsCPQkTAApousa1TxUXOrdTPQk2Z9Ed+Dw4t9WuYp8/9OF+ZHizadPXeAdBsYL0zgWCpX1nvDGXuWO/MgHTmJ9tfS5pNz1zmjjf7t3c4yljmbixbtOlefvwEwGTvpM+9LAC/D1Ccj8PMXrLJ3keGxMCnxwfqzFBnJuzP+GJsqxPb6jR956kozseB1KfHB0bl+VkEgmpIkNjWqfnqati9WJBSnBuo7sj2Tjebfl3mjnrvKHPHgeZCcBw/1W2R+GwiEpphQcqBJrRn4ifz1bU8/SFf4yLCwTajvk4mG933rbUhMxCyjhrjf36T2RRItOlis77VkveeKpZuW6dUDKz3jvnKBJfD33UBxW4H2f4e/n3jn0REwjoGhsxflX5r2D+I3dBkXCAzPQAAAABJRU5ErkJggg=="},walkRight2:{width:16,height:23,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAXCAYAAAAC9s/ZAAABj0lEQVR42o1UoXKDQBB9xyAqI6lEnlxccGSmgsjkM+KiK1sb18+gshHMBJe6O7kSWWRlHRXMXg64hq67W97bt++WVQgEJboP3duO1fQu9gG2Y0WJ7nOkNzKiAWwtkKCfEilKdG8KDQDIGoaABThTYS2uaB1JLImPz2/8J4gIsAAS9LZjFduOVdYM0paqhyL2e7+iHQgwJ9gkrwCA9Dics6eh7UhMrEqGqRlVyXiz7zPw/qwdUMAAEAmYmw3a01BBSKy1IyLJ+aFEwcvDIwBAFxekR4yqSO7552s2FxElujc1QxeXUVIqCRgATKFhCj26i3x5SxF66mgJJLK36xW269XfBO3pPknWcDA3M9E3qip5ZqgpNLKG3Si7ZxRwjhQH2iFHiv1ZO2UypVMlavr7HmjnkjJQcjf9kRyBvwdypCAi9/HSXlD3lomQiZoD7Zwq58EUXJW3neC3YuphvMUjKaSmlX2wtFCVjP1ZzxQFTfRJfA98sO9PFFqWV7QjsKnZnX2w7Vip/2xkmRPZCX7RX/h93PRAPh11AAAAAElFTkSuQmCC"},walkRight3:{width:16,height:22,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAWCAYAAADJqhx8AAABj0lEQVR42pWUoXPCMBjFf+EQyMkiKyNTN1y5Q7C7GfgTJnHMIplkjj+DSRDcDTdcIyMrqUTiOlES2jTHxnfXuzbte3l97/siCJSKZBla14UR/lo3BBoQ38iUqsBaQ0TpEwkLzlIJQHIwDIgdsKVCa37IHUmXB0spBRqIKHVhRNdKSg6VvHu7h6ql4IccRZhgGH0A8LaHZFT9csd5sDdke8NmbFjrryB4urv6dAUDdFQky83YsH0dkn9CPMeRaK1bRPZ9MIXt8YxMv4nnzV2WvT4Ai8up1RcdKz/vNWXbXSwYIEslWSoba526NJl+Yw5D9+zX9nj+OwXfJCt72evz8vzU+tYpyD9hupMsLic24yqRei0up7ACXRiRjGSjiVY7zTtb/NlYXHI4VmS2lV2M9cFRSrnM/c70kxD1SbQf24Hxwf4gOYJ7Z8C90oURrpXr3WVrpibuApyxA2JmaoKKZOlSWO1eGgdJ/X6tv9iMDclINn4z6IGdyFD5Hj3kQba/KbBgXRgh/nugWo9svDaJX3TfzZjLJgbWAAAAAElFTkSuQmCC"},walkRight5:{width:16,height:22,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAWCAYAAADJqhx8AAABh0lEQVR42pWUoZLCMBCGv3QQyJOprIwM7nAwg4CZM8djnOMsEuTxJmepYAYcOCIjK0EicT1RElKawtzOdJrsZnf/3X8TQUS0VGVMb85WPOo6Mac+2T2Y1pWzMSApHwOJNmfn2EBhDHsKH6QTGsPMbaK1BgNISnO2IonV1pY9JjUEe4oGiqFc+nU2u+t7I3UPoKUqjxt7MwCmQjGUS6a54ndsmeYK8iYCX0JvpChWcNzYqknG1DL/jm17CVqqctFNsbuUbLYFYNK9Ms0Vi27K+iO9HT/FEQCowbZhXHRTv568v3EcKI4DVdMnYf0Axar6z68n5td7xvXhwvpwec5CTMIgAPNdfZ+4Bj4T18A+GV/6s0a174HdDWmbSse/G7Bw0DyN8+up0UiXzSF01IYU1y6TG5g+WS2Lu0Cxqy0cC8WKatr+KYmjzjk/Nsx9fTJvCxuZAPzkE6+c5qoxzsYYvsdrX14oQktVhjXH6o0x4850zNkKJCWm/mC0BQmdzdkK8eohffW4/gGdV7r5dAGLnwAAAABJRU5ErkJggg=="},walkUp0:{width:14,height:24,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAYCAYAAADKx8xXAAABkklEQVR42pWUoVLDQBCGv8v0AZCRnDx5dY1rZxBlBtM+QTUuogaegTfgEYqDutYFx4mKcz1JZCXuEOmll0sYYFXy3327m83uChLTufIMmKmtiN9HKVAgqXB8TBUA472lQEKOjx1kASqQ3OtF6/Ht/dSJeK8XFMg2gAiQ1vqSljFUOEIG4cwYA0CFu6Ta+U6t0ehBPcA9MI4WLM2oA8bAZm6RZaO7J1huoTKuKVIKVrgeACBL+Cht6yDAoxRyT2D3M24nV011706o6Q5ZwgbLchtFHILC77idXPG2nwExrPrFCZCa7pqIZ0cuuZelYAwBqOmu1wwAmamtWG5V70CWtIWKbblVmNqKNuL4RvGbde7oXPnjCu8PeJ0rr3PlX69n/rjCH1f41+tZq/tDo+lc+RHArn6ANcALBZLHLwdt+p/txDyvH87ay3Cvxh3yk4mh4U3BtHdNbYX4y/QPbYHsJ8jUVqTrIr7T2QCh/cKkB30zt5fxOsNZeAjzNvTTgxbu6Fz5XnE286aJY0u1XnH+sx6/Ad95zsZS3ogEAAAAAElFTkSuQmCC"},walkUp1:{width:14,height:24,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAYCAYAAADKx8xXAAABeElEQVR42qWUsW7CMBCGP0d5AMaMzejRbLAlUocidSFPwMzGg7DxGLABQyXY0g0PDN7wmpE3cIfUqUmsFqk3Oef77s5/zhb0TGXSETHdGBF+p31gSk6N5VJIAMZnw5QcMlyYIPXQlBylFFprAA6f94eKSzVv9zKcbowQIdS1pTU1Ft9BbC+NnUcphULxmw3AsJq3ftUBuNE7ALZvhnzV+uwaqiPU2rJU8y62O2ONHQBAL4HsVE+BB8iuwZxLZpNRq+77HVmcyFewxVAdg1ZjkP8ds8mIw7kEQlgOxfGQLE5txe9EtheX9MEQApDFaTAMAIlujKiOcrCRr36ECa06SnRjRFdx/Cr5yx5iVCbdbYFzV5zKpFOZdPuX0t0WuNsCt38pO7+7tj6VSSdUJp0f4HogAdEJ2ujdUNXYeMWSitjlDeEYpBsjxDO3P/YKJM9C/ZgkfAH8+Pm1b/vyYbpXwMNJmCUEYqKFlRPfd43tRAjFCH3+vv5LnC/VmdRLkE3HiAAAAABJRU5ErkJggg=="},walkUp2:{width:14,height:23,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAXCAYAAAA7kX6CAAABcUlEQVR42o2UrZLCMBDH/+n0AU7WRkYGd3XtDAJmzpTHwJVnuHOH4zFAUsEMOHCsjKytRJ7ric6mm7Zwt6bTzf72O1EYiE1Miwmhxin5H08B98wAAGYXhxS6UyZopYOYoRQa1lrs6IDj7dFnYG33hQURAQlaapxSEmLZ0QEAsLZFmC4RAOCKuk9VyhCQ0RkegUSEK2r/zzXKjAKQgf3CYSMMVhUbYBpkSJehwb10XYfnfXQAUDwGCR0/cm9gsrPXz+YGKTSuqBFJqN4C+Aobo38K7+h+cr7+aGR0e8BkZ5js3EW/PbB8f+ucCglAhmSarB9KNDUvXWLUpOHeRtQ4taoMXgk3aDbv7SKbmHZtC690lxz1tmuUu+QBNBoHrxjv6CvhccRyeflguPD7hcOwnJgap/iu8QaBwt3UJYCqP6fGKfXX7V/bAnnyie9q6e+rBxlIobFZHIO0ZENkxEhCz4yn3iX16oEaOuI9/VeNz166XyietEPwUZThAAAAAElFTkSuQmCC"},walkUp3:{width:15,height:22,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAWCAYAAAAfD8YZAAABcElEQVR42pWULXfCMBSGn3AqJpGdjKwMjrpyDqLI8jOYqp6cntp+BkgQOwdccURG1lbyD5iApJeWj+11afJ+9N6bKDowcXLiDmzjlFxHt4iHLAFgtHMApOjzgZiTFIkkMUVTUbPeH4PgwhStOAZrLcScbONUJInGGAyGd7vqESVSNMScolub90gAxlzcu/8MYK2lou47XYh3C/ZtVyxzx1fZfqs/Yb7xytdGSlZ5mTt0eSZ46FKKJCFFRd2SJdHtJgAk2bYnMpqeBSpqBjKGJM7GQ9xuEtY+zeHHhZoMuspJtiXJtqz3R2bjYRCRAh6BPJomQUSXBIFHGPgBSdHMN0nvwCOBSPavsnWI5qNK6LJNCKDkaMoB+Xh5DTXoJvLVVs+uoccyd0HkqlW2cUre1RTNwhRhxhemCN1YmIKKGts4NbjlUlGH4fd4m87aey3H81n0LunKWRJTNMvc9Qi3nqs/OUt33w3bOKX+8wB2H8FfO7ur+BAfa5QAAAAASUVORK5CYII="},death0:{width:16,height:22,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAWCAYAAADJqhx8AAABfUlEQVR42oWULXfCMBiFn3AqJic7GRkZ3OrgHMQ4ZwZ+BlPVyGnU/gYWxM4B1zkiIyOpROI6AQkpTeGq5uPe9+b9qADQuWq4wtRWxOsY92emtiLTuWoKJAAVDr+ucBxGCoDh3lIgIacB8PfJaQZercJRIFnoWYi4+Tux+TuF9ULP8OIewVKBRGt9s2tMuPjoLKMHWms0mmfIUkmLI3jcuwhJ7COuPyyyvOy7Fcy3UBl3S6B3EC8qXIcIIEs4lDYIxSJZiuxWYPdjpu+vl2p8nlCjHbKENZb5NuEgRfYlnL6/stmPgVhE9VfBk9Vod3FwFXSJu4OUQEwGUKNdq6E6Aqa2wluKIUtCQmPMtwpTW9FyYGorhhP1tHGGkxsZQLS6L2qo75e38Ay7H7M8H0Og3j6Iu255dhCedewMUSeJOleNn8Sf302YygLZIt+3fZaK/jWR+LavksXrKaMxJvndmdTIxSBlK+Vq/WFbM+A54n4j/r09gq+GeGTvEdHjH7yMv10HhrOYAAAAAElFTkSuQmCC"},death1:{width:16,height:22,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAWCAYAAADJqhx8AAABjUlEQVR42p2ULW/DMBCGn0QBhYUda6ChxxbWSAPLNNKgweEOFe837J8UtgGTWpayGgyY1WMrHCzzQObWSVxt2klRTme/9/X6LiIgciRsyK4OOurakhAwI6XGsJsIAK43mowURtiuo8QHZ6RIKVFKAbDafrWizeS0ORthnZN2BlKe/wpejgaXkX9WK9MuwUXvOpPIUCtO5aiDjpJgs5SixvRALouLTfSBiztNOm/s5hXKCmpl6GYaASzHuV0dB9SYHhDoOBJkpBSDI/cf63MJPti8gt7kFDfDho2HL8RkTTqHBZqygoKrNv/7J6x9x+6fsMtxbu3j1C7HeUv377g3k5wZ0CeHxc2Q1baJCrD6ycYEmIhDLPhgADFZ9x6Vk9hxXlaid5jOzw30pazEidJWBte3gt+keycKTd/iTqM3+amMshLs3nQPrA46ip3iPgeAhsqyEszktDVQ/kQmoZmXI2Ffjp8t+/NtQXapib8tEzfeXb23D/iHxP8FO0x8adf54o+20x0m+utCvbRYvwEe6M6uyA/L8wAAAABJRU5ErkJggg=="},death2:{width:16,height:21,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAVCAYAAABPPm7SAAABb0lEQVR42o2UIZPCMBCFv3QQSCTIyMjgwJUZBMxg2p9R17Mn0bj7GZxhhjpwPUdkZeQhkec4UVLSEo57qrOb97LdvF1BAHqorqG4OVeiG4u6RD1U1ykSgHV/xClWAEyRTT4o4IiZTlo37L8uzXemk0bIxYRP1lrfyzWGEnu/PZAz50r0eAKtNRrNKwQF/NsdulUEBXzidlEh8zpuN5AWUBqLa3BQoMQ+EAFkDqe8aoR8kV6IbDdQHWcsJ4P6JVYXVHxA5rClIi0CFYTI7gmXkwH74wzwRdTzJjqyig91BTdBGzgbhWzrkwFUfGgZyjdf5BzmSvIhc5qG+kgL1Tg28m06nquXxhnPVcvu4tn0rfsjlrtbD1Yz3n++g9Mpuv/k1D/MZ+uwH/fHWnSnscQGbetc6s44kQcnArwt9qRF+9G2i4qyUA8zEvk9yHRCphNk3rbrFInM73mfE3VXlTGmmQEfdlPnuutN/GcX/rUbfwEjELpZrMKARgAAAABJRU5ErkJggg=="},death3:{width:20,height:23,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAXCAYAAAALHW+jAAABpElEQVR42q2Vr1rDMBTFf9lXUYkscnLy4tgjTO4VkPUYJsEgcJO8wiQWV+QViMrKVSLrgtgSbrJu419M2iT3fPeee07iODKkmnlODO1bN7ZeHAOaM0VEuHl8SPafb+9QVajwp4ATwLpaeP+Ol2oWZ/vt3/F1tfBjVRQ52Jwpi3KIa90To9+LcoBhChXeZulywPvyktWwBeC+vNwFX1/w8vYBEPfC/mrYJmVP8pRtwMtQJv+rYcuc6ejZg5Klmvlalqx1E4NEBEG4et0AUMty3+Ld1NCxj4llTyx3AUxEaOgAWOsG7VunfevWuolAIkISs2+Qy6USgLRvnVQzn8sirB2LiRyGzGJZRzRm12pZxkwPmiIiSYmcGZaCEAtQBP7+OubsNJnI5rvZjWUZhZ3b5yeAY5dIYRuyz9J/FzRoF0BVaeiYaN+60PbYuTNXVw4WtJnIRlV/3eUQm1ivoQMlWukUn6GCWpax1APAqHj98mwObIEsb9YtRSJs/crUuiYAJy4yYCJCo116HwaS7cHcBZYvC2Z5d+ceptxFlq8x7br/fvU+Af65JJ4LToNfAAAAAElFTkSuQmCC"}},explosions:{bombs:{fuse0:{width:16,height:16,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABSUlEQVR42qWTLU/DQBjH/y0VfIEm9wVIOMdhIHWbrEMRJqmYaLIEvWUJScMHIAyHxdWQgCzuMkwrIDkxUdmGIOpGgjjEdtfXEQY/dS/P/3n+9/IY6IARJrvWkzwxqjHhyS6MTiFxQCkFAAghVps5ryWbTV3Q/Qg7NTFx4J4PceoN8flVoHgvYNs2Pt4e4I4C7B31sXiJMJu6yBYFvMu0FLMDX46vHmWWxTLLYhlGSzk4u5GMML3OCJP8dizDC18qt5ZyoCwr4nmkx4fHfXABTO45/IFTizOVdQUXFFxQpK9pK1k8j+COAtCep51b1eorUVSrQHsenq4nAAIdI57vAOIAOS+PoKhW1hBnnaScKyz1VM07UOhnJE7nvtkK7BL/gLWtoOUgyROj+ct+Rc6R5Ilh4p+Yukm2cbGuDmBzM20SNrvS+Gs7K74B0DebyxOmawAAAAAASUVORK5CYII="}},blast:{center:[{width:16,height:16,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAA4UlEQVR4nJWTMRLCIBBFFyaFpWXSmdLSjrHzErmEbY5hGcc7cIl0tl7BDktvEGcTlllgmcTfkADvswu7qjUDkJ7QTzjWlz1A10Ak6+AzfufPM9wUTWsO8oU1EaM5SJOiumaJzAsZ3K/F8DeejibKmV04NcCUv3XxP5uj+1BkUIRZCqkJqqofxxyQTi5ITa9TfnFoQPDhCvC+Fw30KszHNFLR4E/p4Mjzpm8KXUoB91gnvAKZSEpfBi+xNUNUgdlzCjDVwJKCr6isD3yIqTiMTMUX5/oe+0nsRgYXu3GL0sb7AY0rZ6H0/Kl6AAAAAElFTkSuQmCC"},{width:16,height:16,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAA40lEQVR4nJVTMQ7CMAx0LAZGxnYrIz+o2PhEP9G1z2AE8Yd8go13sIWRH4DsxpHjEgInVVEa3/nsOG7bn0Bwg+lFa3PYAAwtQDemM7ifAXyAx/XJ2z0cHa0oxIz8AyR+pX8uyJS1IuJCv84zk/USfOBFyiA4Esgyi4CuX7uJIgJsLruZZDOX7Ou4oZ2b+PHQOrD7GIt8IJ8NrrnoRuWgFFy5CeSASlAGM1zIXTWdTYK2NAsfVAlWyLqiPYmZ63R/DZJOFgcK5VGk6bLlfCETuISFiED3QJWoXyTKqxKRmgtNJu4bNDhsjAJJPuoAAAAASUVORK5CYII="},{width:16,height:16,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAA6ElEQVR4nI1TMRKCMBC8ZCgsKaXDXzB2foIPWNLa+AdLLf0An7DzHXRY8oM4F1zmcjlGdoYhhNu9vbC4Q3MnxpsuYX8qidqKqO4ow/CY7/1In9cUl0e6OQ9yzjDICswrQF66byByLVy4cN3P3UG27BtjAC4KaHJ5TonT03bVjxTPIIEm6z3psK3Ir566JQIh1Ncd+fjAL6SItPwH3rS8ReTX2IUQQlbMonJPNlG1RXbCW75EIjAYYUGxNZ6qd0kO5HwWrCCNzW49ylJIBQhR9vxH8SJuCOWFBOKKq5hEiCz2cDEJOTHAvC/Ks2ZmjZsORQAAAABJRU5ErkJggg=="},{width:16,height:16,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAA0UlEQVR4nJWTwRWCMAyG0z4G4Ig3V9ANXIIFPDqBg/SGC7CEI+gIveENNojvLy220NryXfJo8/8JkAi+N0ygPdDC8UZJtJpjP9DnOVEViP8JfbGludQk+HXijbi+xg2mx6YLYQycOCWM8T6bIHjseLfY60buFSzYgrK4OnLWJoB9xo6z+Dljx+WvkEBG29plAJxJ7lsgb5Ujg8scvnj5jToczyIghk4rEmaZsAslo+ywU4hRrrBRDR5a9TNJDE1w1w8mzNvoDmDiiO2Ha92KUfwLuFCLiprjDJwAAAAASUVORK5CYII="}],segment:[{width:16,height:16,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAnklEQVR4nGNUtJjCQAlgokg31Q04xlDyHxsbGx8GGJ9bcPy3YuhhxKUAJgeiYQYhsxlBBiBrkHAUgLNf7P9A0AuM/yslMG0Ok2RgWPUcr0aY4Yz/zxtCDABpAGlEBsiG4JBjhBuAC2AzGEmOEWwALpuI8AYj1jBAU4QPMKLHAi6AHtWwqGSEpQOYBEwRshg+wIScKGAa0cXwemHAcyMA0fpTGHx5ENQAAAAASUVORK5CYII="},{width:16,height:16,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAyUlEQVR4nGNUtJjCQAlgQuYcYyj5j42N14BjUIXINLoYNgNhfCZ0SQlHATBGV2zF0MOIrBbEB7EZ/1dKgAVe7P8ANwAZwMSxAZBaxv/nDf8zrHqOKhMmCaHRxdHlGRigBhACMIOQNDIoZEMNeD8HYsCDqSgScAATxyYHj8YHRGjGBh5MRQoDZOdh8wJMHmYJ1HBGWCxg+BFZMx55RhQDcEQdetQiq2N8bsFBVJJFT0gwMbABuCSJMZgJWTOIDcPoBsIAuhgjpdkZAKAMboGGprwiAAAAAElFTkSuQmCC"},{width:16,height:16,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAA20lEQVR4nGNUtJjCcIyh5L8VQw8jAwMDCpsYwARjgDSiG4RLE7Ic43MLDjBHwlEALPBi/wcMDSBDkTUhW8KIbgA6wGYgMmD8XykBMTlMElVm1XO8GhEGnDf8z6CQjSnzYCrCIGTD0dQy/n8/BxFYAskImQ9zEYbANKHLgw34/x9naBMEH+YiohGXAkKABUURshNBAOQFBSxySHoYwYEIAugBCfM/NjkkNYxgA9BDGjka0cXR1DDC0wEaIJSA4F6ApURcAFcmg/HhsQCTRFaEnAfQMxlMjhE9O5MKALs5b2JBrTeQAAAAAElFTkSuQmCC"},{width:16,height:16,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAA5klEQVR4nGN8bsHx34qhh5GBgYHhGEPJfwYogIkRAowgA2AcCUcBFMkX+z8wIBuIzQLG/5US/xnCJBG6Vj2H0DAxGB+HwYz/zxvCTQUDhWwGhgdTMd0KMgiLRYz/38/5D9dgcA5CXzBCGIYNIFnAAlcokIyqCJsYHExFGP7//Zz/GACbGLo8VA0jiGCgADBRohm7AR/mQjAugCbPhCEJC2F8hoDUQOVZUBTCND+AhjJMDhYbyBbgTEgMSAAWVTBNyKkSmqggSRkdYEvaaEkYlm9QMhO6JLpG9FwLUgc3ADn7EputQeoAjl+lvfd2ynAAAAAASUVORK5CYII="}],end:[{width:16,height:16,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAkklEQVR4nGNUtJjCQAlgokg3LgOOMZT8J9qAY0iKYWwrhh5GYg1kgSmGKSLFdhBgfG7BAdcg4SiAoeDF/g9wNrrL4AZIoGsMk0Tlr3oONwzdEBawZnQN6AAkDzUEHbDg1YykCdkrqAaswlQE8xK6JpxhwEAAYNOIcAGaQlA04tOADphAipE1oKcLQoBxcGYmUgAA3+c5XtE+f2cAAAAASUVORK5CYII="},{width:16,height:16,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAwUlEQVR4nGNUtJjCQAlgOsZQ8h9dEF0Mmxq4AVYMPYzoCtHFYHxsBjE+t+DAaTo6QDYYxQAJRwEMxS/2fwDTIDkYG5shLGDNYZKoulc9B2sEgzBJBgk0Q1EMYEDXDNWEwV/1HKu3WBgUshkYHkyF8EBsZAATxwNYYE4G24JNA9RmbM6HGPAAhy1IToZpxhoL/yslcEYjeugjpwmMaHyBw4m4bIYBJmxOBNEwjNNUmAHoCtGTLSFDGCnOjRTpZmBgAAAhQ1I1DprO7gAAAABJRU5ErkJggg=="},{width:16,height:16,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAA6ElEQVR4nGNUtJjCQAlggjGOMZT8x8ZG5qOLgwDjcwsODEFcwIqhhxHDgP+VEjgNeLH/A4OEowCcjc0Qxv/nDSEGrHqOEA2TRDUJKofNEBYUTQrZELZAMgPDh7kMDA+mohgogWQIKDxABjGCXQDTCAMgA0DgghHCUJhhq56DDYG5ggnFVphGGADJwcTQLYECJrjJyADkfBBGdxEWwIJVFNlQBSxiWGMBGcBiBE9swMKAET0dwEIZFv9gQ5CiGFkzySmRAQpABsCikQlmGjYaPdUhi8G9gCs3wmxAZ6MDeG7E5kx0J2NTBwB7YGzn02LE2QAAAABJRU5ErkJggg=="},{width:16,height:16,data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAA/0lEQVR4nI2TMRKCQAxFswyFJSV2eASsGDsvwQUsbW28g6V2cgEuYWeLR7DDTm6wzl/Iml0W5c0wG0LyyWwStSrOdKeDJsGGTgon/LD5lD6OVW2xMMnpNrECr1sn9RxhX1TpY+r8ncqlm1W3QWGuQhkBPwlke6LnZewfBCHWV/C+9hUkO6LH+psMIMC2BP667SvSkibXEDQP4DNkN7nG/cWjslEJI+0JIudtRoIEnYtmRXZV+EKdCrqqv0Scv4S875H94AeG/B7oQuyUhx6XQ+vYn9FkG4FCO+S0GXiwjGBgyMQw2VGemn8g98SPtcs0tW3+pjJ2F7DO/2ARKcx8ABLLsb2vKrzPAAAAAElFTkSuQmCC"}]}}},W=[{dx:0,dy:-1,direction:"up"},{dx:0,dy:1,direction:"down"},{dx:-1,dy:0,direction:"left"},{dx:1,dy:0,direction:"right"}],X=W.map((({dx:t,dy:e,direction:n})=>({x:t,y:e,direction:n})));class Z{static from(t){return t instanceof Z?t:new Z(t.x,t.y)}constructor(t,e){this.x=t,this.y=e}key(){return`${this.x}:${this.y}`}equals(t){return this.x===t.x&&this.y===t.y}manhattanTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)}translate(t,e=1){return new Z(this.x+t.dx*e,this.y+t.dy*e)}inBounds(){return this.x>=0&&this.x<i&&this.y>=0&&this.y<7}adjacent(){return W.map((t=>Object.assign(Object.assign({},this.translate(t).toPlain()),{direction:t.direction}))).filter((t=>Z.from(t).inBounds()))}toPlain(){return{x:this.x,y:this.y}}}const q=t=>Z.from(t).key(),$=(t,e)=>Z.from(t).equals(e),_=(t,e)=>Z.from(t).manhattanTo(e),tt=t=>Z.from(t).inBounds(),et=(t,{x:e,y:n})=>tt({x:e,y:n})&&t.grid[e][n].commitsCount>0,nt=(t,{x:e,y:n})=>tt({x:e,y:n})&&0===t.grid[e][n].commitsCount,it=(t,e)=>nt(t,e)&&!t.bombs.some((t=>!t.exploded&&$(t,e)))&&!t.activeExplosions.some((t=>t.contains(e))),ot=t=>Z.from(t).adjacent().map((t=>({x:t.x,y:t.y,direction:t.direction})));class at{static from(t){return new at(t)}constructor(t){this.store=t}reset(){this.store.frameCount=0,this.store.nextBombId=0,this.store.nextItemId=0,this.store.players=[],this.store.bombs=[],this.store.activeExplosions=[],this.store.items=[],this.store.gameHistory=[],this.store.cellEvents=[],this.store.explosionEvents=[]}nextBombId(){return this.store.nextBombId++}nextItemId(){return this.store.nextItemId++}addBomb(t){this.store.bombs.push(t)}addExplosion(t){this.store.activeExplosions.push(t),this.store.explosionEvents.push(Object.assign({frameIndex:this.store.gameHistory.length},t))}activeBombsOwnedBy(t){return this.store.bombs.filter((e=>!e.exploded&&e.ownerId===t))}findBombAt(t){const e=Z.from(t);return this.store.bombs.find((t=>!t.exploded&&e.equals(t)))}activeExplosionAt(t,e){return this.store.activeExplosions.some((n=>(void 0===e||n.ownerId===e)&&n.contains(t)))}aliveOpponentOf(t){return this.store.players.find((e=>e.id!==t&&e.alive))}clearContributionCell(t){const e=Z.from(t),n=u(this.store);return this.store.grid[e.x][e.y]={commitsCount:0,level:"NONE",color:n.intensityColors[0]},n.intensityColors[0]}recordCellDestroyed(t,e){const n=Z.from(t);this.store.cellEvents.push({frameIndex:this.store.gameHistory.length,x:n.x,y:n.y,color:e}),this.store.config.pointsIncreasedCallback(this.store.cellEvents.length)}}const st={"blast-range":{sprite:L.blastRange,powerUp:new class{applyTo(t){t.increaseBlastRange()}}},speed:{sprite:L.speed,powerUp:new class{applyTo(t){t.increaseSpeed(5)}}},"bomb-capacity":{sprite:L.bombCapacity,powerUp:new class{applyTo(t){t.increaseBombCapacity()}}},"bomb-kick":{sprite:L.bombKick,powerUp:new class{applyTo(t){t.enableBombKick()}}}},rt={"blast-range":3,speed:3,"bomb-capacity":3,"bomb-kick":1};class lt{static createHiddenItems(t){t.items=[];const e=lt.calculateSparseDropMultiplier(t);for(let n=0;n<t.grid.length;n++)for(let i=0;i<t.grid[n].length;i++){const o=t.grid[n][i],a=o.commitsCount>0?J[o.level]:0,s=Math.min(1,a*e);s<=0||Math.random()>=s||t.items.push(lt.create(t,{x:n,y:i},lt.selectRandomType()))}}static revealAt(t,e){const n=lt.findAt(t,e);return n&&n.reveal()?n:null}static collectVisibleAt(t,e){const n=lt.findAt(t,e);return(null==n?void 0:n.visible)&&n.collectBy(e)?n:null}static destroyVisibleAt(t,e){const n=lt.findAt(t,e);return n&&n.destroy()?n:null}static hasVisibleAt(t,e){var n;return Boolean(null===(n=lt.findAt(t,e))||void 0===n?void 0:n.visible)}static create(t,e,n){return new lt(at.from(t).nextItemId(),n,e.x,e.y)}static calculateSparseDropMultiplier(t){const e=t.grid.reduce(((t,e)=>t+e.reduce(((t,e)=>t+(e.commitsCount>0?J[e.level]:0)),0)),0);return e<=0||e>=3?1:Math.min(3,3/e)}static selectRandomType(){const t=Object.keys(st),e=t.reduce(((t,e)=>t+rt[e]),0);let n=Math.random()*e;for(const e of t)if(n-=rt[e],n<0)return e;return"blast-range"}static findAt(t,e){const n=Z.from(e);if(n.inBounds())return t.items.find((t=>!t.collected&&!t.destroyed&&n.equals(t)))}constructor(t,e,n,i,o=!0,a=!1,s=!1){this.id=t,this.type=e,this.x=n,this.y=i,this.hidden=o,this.collected=a,this.destroyed=s}get visible(){return!this.hidden&&!this.collected&&!this.destroyed}reveal(){return!this.collected&&!this.destroyed&&(this.hidden=!1,!0)}collectBy(t){return!!this.visible&&(st[this.type].powerUp.applyTo(t),this.collect())}collect(){return!!this.visible&&(this.collected=!0,!0)}destroy(){return!!this.visible&&(this.destroyed=!0,!0)}}const At=t=>{const e=t.length;if(e<=1)return null;const n=[],i=[];let o=null;return t.forEach(((t,a)=>{t!==o&&(ut(n,i,mt(a,e),t),o=t)})),0===n.length?null:(gt(n,i),i.length<=1||i.every((t=>t===i[0]))?null:{keyTimes:n.join(";"),values:i.join(";")})},ct=(t,e,n,i,o="0",a=!1)=>{if(t<=1||a&&0===e&&n>=t)return null;const s=mt(e,t),r=mt(n,t);if(s>=r)return null;const l=0===s?[0]:[0,s],A=0===s?[i]:[o,i];return r<1?(l.push(r,1),A.push(o,o)):(l.push(1),A.push(i)),A.length<=1||A.every((t=>t===A[0]))?null:{keyTimes:l.join(";"),values:A.join(";")}},dt=(t,e,n)=>ct(t,e,n,"1","0",!0),ht=t=>{const e=t.length;if(e<=1)return null;const n=[],i=[];let o=null,a=null;return t.forEach(((t,s)=>{t!==o&&(null!==o&&null!==a&&s-1!==a&&ut(n,i,mt(s-1,e),o),ut(n,i,mt(s,e),t),o=t,a=s)})),gt(n,i),i.length<=1||i.every((t=>t===i[0]))?null:{keyTimes:n.join(";"),values:i.join(";")}},ut=(t,e,n,i)=>{n!==t[t.length-1]?(t.push(n),e.push(i)):e[e.length-1]=i},gt=(t,e)=>{1!==t[t.length-1]&&(t.push(1),e.push(e[e.length-1]))},mt=(t,e)=>Number((Math.min(t,Math.max(e-1,1))/Math.max(e-1,1)).toFixed(4)),ft=[new class{render({store:t,theme:e}){let n="",o="";for(let a=0;a<i;a++)t.monthLabels[a]!==o&&(n+=`<text x="${22*a+10}" y="10" text-anchor="middle" font-size="10" fill="${e.textColor}">${t.monthLabels[a]}</text>`,o=t.monthLabels[a]);return n}},new class{render({store:t,theme:e,cellEventsByPosition:n,totalDurationMs:o}){var a,s;let r="";for(let l=0;l<i;l++)for(let i=0;i<7;i++){const A=kt(t,l,i,n);r+=`<rect id="c-${l}-${i}" x="${wt(l)}" y="${Bt(i)}" width="20" height="20" rx="3" fill="${null!==(s=null===(a=t.initialColors[l])||void 0===a?void 0:a[i])&&void 0!==s?s:e.intensityColors[0]}">`,A&&(r+=`<animate attributeName="fill" calcMode="discrete" dur="${o}ms" repeatCount="indefinite" values="${A.values}" keyTimes="${A.keyTimes}"/>`),r+="</rect>"}return r}},new class{render({store:t,totalDurationMs:e}){let n="";const i=t.gameHistory.length;for(const{bomb:o,startFrame:a,endFrameExclusive:s,positions:r}of Et(t)){const t=dt(i,a,s),l=0===a?"1":"0";n+=`<g id="bomb-${o.id}" opacity="${l}">`,t&&(n+=`<animate attributeName="opacity" calcMode="discrete" dur="${e}ms" repeatCount="indefinite" keyTimes="${t.keyTimes}" values="${t.values}"/>`),n+=Ot(r,e),n+="</g>"}return n}},new class{render({store:t,totalDurationMs:e}){let n="";const i=t.gameHistory.length;for(const{item:o,startFrame:a,endFrameExclusive:s}of St(t)){const t=dt(i,a,s),r=wt(o.x)+2,l=Bt(o.y)+2;n+=`<use id="item-${o.id}" x="${r}" y="${l}" width="16" height="16" href="${ie(o.type)}" opacity="${0===a?"1":"0"}">`,t&&(n+=`<animate attributeName="opacity" calcMode="discrete" dur="${e}ms" repeatCount="indefinite" keyTimes="${t.keyTimes}" values="${t.values}"/>`),n+="</use>"}return n}},new class{render({store:t,totalDurationMs:e}){let n="";for(const i of t.explosionEvents)n+=Qt(t,i,e);return n}},new class{render({store:t,totalDurationMs:e}){var n,i,o;let a="";for(const s of t.players){const{positions:r,opacities:l,spriteRefs:A}=It(t,s.id),c=ht(r),d=At(l),h=At(A);a+=`<use id="player-${s.id}" x="-11" y="-18" width="22" height="28" href="${null!==(n=A[0])&&void 0!==n?n:ee(s.id)}" opacity="${null!==(i=l[0])&&void 0!==i?i:"0"}" transform="translate(${null!==(o=r[0])&&void 0!==o?o:"0 0"})">`,h&&(a+=`<animate attributeName="href" calcMode="discrete" dur="${e}ms" repeatCount="indefinite" keyTimes="${h.keyTimes}" values="${h.values}"/>`),d&&(a+=`<animate attributeName="opacity" calcMode="discrete" dur="${e}ms" repeatCount="indefinite" keyTimes="${d.keyTimes}" values="${d.values}"/>`),c&&(a+=`<animateTransform attributeName="transform" type="translate" calcMode="linear" dur="${e}ms" repeatCount="indefinite" keyTimes="${c.keyTimes}" values="${c.values}"/>`),a+="</use>"}return a}}],pt=(t,e)=>{const n=(e,n,i=!1)=>n.map(((n,o)=>({id:`bm-player-${t}-${e}-${o}`,frame:n,flipX:i})));return{down:n("down",[e.walkDown0,e.walkDown1,e.walkDown2,e.walkDown3]),up:n("up",[e.walkUp0,e.walkUp1,e.walkUp2,e.walkUp3]),left:n("left",[e.walkRight0,e.walkRight1,e.walkRight2,e.walkRight3,e.walkRight4,e.walkRight5],!0),right:n("right",[e.walkRight0,e.walkRight1,e.walkRight2,e.walkRight3,e.walkRight4,e.walkRight5])}},yt={1:pt(1,z.player),2:pt(2,z.plunderBomber)},xt={1:[z.player.death0,z.player.death1,z.player.death2,z.player.death3,z.player.death4].map(((t,e)=>({id:`bm-player-1-death-${e}`,frame:t}))),2:[z.plunderBomber.death0,z.plunderBomber.death1,z.plunderBomber.death2,z.plunderBomber.death3].map(((t,e)=>({id:`bm-player-2-death-${e}`,frame:t})))},vt={id:"bm-bomb",frame:z.explosions.bombs.fuse0},bt={center:z.explosions.blast.center.map(((t,e)=>({id:`bm-blast-center-${e}`,frame:t,preserveAspectRatio:"none"}))),segment:z.explosions.blast.segment.map(((t,e)=>({id:`bm-blast-segment-${e}`,frame:t,preserveAspectRatio:"none"}))),end:z.explosions.blast.end.map(((t,e)=>({id:`bm-blast-end-${e}`,frame:t,preserveAspectRatio:"none"})))},Ct=Object.fromEntries(Object.entries(st).map((([t,e])=>[t,{id:`bm-item-${t}`,frame:e.sprite}]))),wt=t=>22*t,Bt=t=>22*t+15,kt=(t,e,n,i)=>{var o,a;const s=t.gameHistory.length,r=null!==(a=null===(o=t.initialColors[e])||void 0===o?void 0:o[n])&&void 0!==a?a:u(t).intensityColors[0],l=i.get(Xt(e,n));return l&&0!==l.length?((t,e,n)=>{if(t<=1||0===n.length)return null;const i=[0],o=[e];for(const e of n)ut(i,o,mt(e.frameIndex,t),e.value);return gt(i,o),o.length<=1||o.every((t=>t===o[0]))?null:{keyTimes:i.join(";"),values:o.join(";")}})(s,r,l.map((t=>({frameIndex:t.frameIndex,value:t.color})))):null},Et=t=>{var e,n;const i=new Map,o=t.gameHistory.length;for(let e=0;e<t.gameHistory.length;e++){const n=t.gameHistory[e];for(const t of n.bombs){const n=i.get(t.id);if(n)n.endFrameExclusive=e+1,n.positions[e]=Tt(t.x,t.y);else{const n=Mt(t),a=Array(o);a[e]=n,i.set(t.id,{bomb:t,startFrame:e,endFrameExclusive:e+1,positions:a})}}}for(const t of i.values()){let i=null!==(e=t.positions[t.startFrame])&&void 0!==e?e:Tt(t.bomb.x,t.bomb.y);for(let e=0;e<t.startFrame;e++)t.positions[e]=i;for(let e=t.startFrame;e<o;e++)i=null!==(n=t.positions[e])&&void 0!==n?n:i,t.positions[e]=i}return Array.from(i.values())},Mt=t=>{if(!t.kickDirection)return Tt(t.x,t.y);const e=Rt(t,t.kickDirection);return e.x<0||e.x>=i||e.y<0||e.y>=7?Tt(t.x,t.y):Tt(e.x,e.y)},Rt=(t,e)=>{const n=Ut[e];return{x:t.x+n.x,y:t.y+n.y}},Ut={up:{x:0,y:1},down:{x:0,y:-1},left:{x:1,y:0},right:{x:-1,y:0}},St=t=>{const e=new Map;for(let n=0;n<t.gameHistory.length;n++){const i=t.gameHistory[n];for(const t of i.items){if(t.hidden||t.collected||t.destroyed)continue;const i=e.get(t.id);i?i.endFrameExclusive=n+1:e.set(t.id,{item:t,startFrame:n,endFrameExclusive:n+1})}}return Array.from(e.values())},It=(t,e)=>{const n=Dt(t,e),i=[],o=[],a=[];let s;return t.gameHistory.forEach(((t,r)=>{const l=t.players.find((t=>t.id===e));if(i.push(l?Tt(l.x,l.y):"0 0"),!l)return o.push("0"),a.push(ee(e)),void(s=void 0);if(l.alive){const t=Boolean(s&&(s.x!==l.x||s.y!==l.y)),n=yt[e][l.direction],i=t?Math.floor(r/2)%n.length:0;return o.push("1"),a.push(te(n[i])),void(s=l)}if(null===n)return o.push("0"),a.push(ee(e)),void(s=l);const A=r-n,c=xt[e],d=Math.min(Math.max(A,0),c.length-1);o.push(A>=0&&A<c.length?"1":"0"),a.push(te(c[d])),s=l})),{positions:i,opacities:o,spriteRefs:a}},Dt=(t,e)=>{for(let n=1;n<t.gameHistory.length;n++){const i=t.gameHistory[n-1].players.find((t=>t.id===e)),o=t.gameHistory[n].players.find((t=>t.id===e));if((null==i?void 0:i.alive)&&o&&!o.alive)return n}return null},Tt=(t,e)=>`${wt(t)+10} ${Bt(e)+10}`,Ot=(t,e)=>{const n=Number(17.92.toFixed(4)),i=Number((18*1.12).toFixed(4)),o=Number((-8-(n-16)/2).toFixed(4)),a=Number((-9-(i-18)/2).toFixed(4)),s=ne(),r=Vt(t,-8,"x"),l=Vt(t,-9,"y"),A=Vt(t,o,"x"),c=Vt(t,a,"y");return[`<use x="${r.initial}" y="${l.initial}" width="16" height="18" href="${s}" opacity="1">${Nt("x",r.animation,e)}${Nt("y",l.animation,e)}<animate attributeName="opacity" calcMode="discrete" dur="500ms" repeatCount="indefinite" keyTimes="0;0.5;1" values="1;0;1"/></use>`,`<use x="${A.initial}" y="${c.initial}" width="${n}" height="${i}" href="${s}" opacity="0">${Nt("x",A.animation,e)}${Nt("y",c.animation,e)}<animate attributeName="opacity" calcMode="discrete" dur="500ms" repeatCount="indefinite" keyTimes="0;0.5;1" values="0;1;0"/></use>`].join("")},Vt=(t,e,n)=>{var i;const o="x"===n?0:1,a=t.map((t=>{var n;const i=Number(null!==(n=t.split(" ")[o])&&void 0!==n?n:0);return`${Number((i+e).toFixed(4))}`}));return{initial:null!==(i=a[0])&&void 0!==i?i:`${e}`,animation:At(a)}},Nt=(t,e,n)=>e?`<animate attributeName="${t}" calcMode="linear" dur="${n}ms" repeatCount="indefinite" keyTimes="${e.keyTimes}" values="${e.values}"/>`:"",Qt=(t,e,n)=>{const i=t.gameHistory.length;let o="";for(let t=0;t<e.remainingFrames;t++){const a=e.frameIndex+t,s=a+1;if(a>=i)break;const r=ct(i,a,Math.min(s,i),"0.9");o+=`<g opacity="${0===a?"0.9":"0"}">`,o+=`<use href="#${Zt(e,t)}" transform="translate(${Tt(e.x,e.y)})"/>`,r&&(o+=`<animate attributeName="opacity" calcMode="discrete" dur="${n}ms" repeatCount="indefinite" keyTimes="${r.keyTimes}" values="${r.values}"/>`),o+="</g>"}return o},Yt=t=>{const{explosion:e}=t,n=zt(e),i=[["left",n.left],["right",n.right],["up",n.up],["down",n.down]].filter((([,t])=>t>0));return[...i.map((([e,n])=>Gt(t,e,n))),...Kt(t,n),...i.map((([e,n])=>{const i=Ft(e,n);return Ht("end",i.x,i.y,e,t)})),Ht("center",0,0,"right",t)].join("")},Ft=(t,e)=>{switch(t){case"left":return{x:-e,y:0};case"right":return{x:e,y:0};case"up":return{x:0,y:-e};case"down":return{x:0,y:e}}},Ht=(t,e,n,i,o)=>{const a=jt(t,e,n,i),s=0===a.degrees?"":` transform="rotate(${a.degrees} ${a.centerX} ${a.centerY})"`;return`<use x="${a.x}" y="${a.y}" width="${a.width}" height="${a.height}" href="${$t(t,o)}"${s}/>`},Gt=(t,e,n)=>{const i=Lt(e,n),o=0===i.degrees?"":` transform="rotate(${i.degrees} ${i.centerX} ${i.centerY})"`;return`<use x="${i.x}" y="${i.y}" width="${i.width}" height="${i.height}" href="${$t("segment",t)}"${o}/>`},jt=(t,e,n,i)=>{const o=22*e,a=22*n,s=o-10;if("center"===t)return{x:o-6,y:a-6,width:P,height:P,centerX:o,centerY:a,degrees:0};const r=P;switch(i){case"left":return{x:s,y:a-6,width:20,height:r,centerX:s+10,centerY:a,degrees:180};case"right":return{x:s,y:a-6,width:20,height:r,centerX:s+10,centerY:a,degrees:0};case"up":return{x:o-10,y:a-6,width:20,height:r,centerX:o,centerY:a,degrees:-90};case"down":return{x:o-10,y:a-6,width:20,height:r,centerX:o,centerY:a,degrees:90}}},Kt=(t,e)=>{const n=[];return(e.left>0||e.right>0)&&n.push(Jt(t,"horizontal")),(e.up>0||e.down>0)&&n.push(Jt(t,"vertical")),n},Jt=(t,e)=>{const n=Pt(e),i=0===n.degrees?"":` transform="rotate(${n.degrees} ${n.centerX} ${n.centerY})"`;return`<use x="${n.x}" y="${n.y}" width="${n.width}" height="${n.height}" href="${$t("segment",t)}"${i}/>`},Pt=t=>({x:-10,y:-6,width:n,height:P,centerX:0,centerY:0,degrees:"horizontal"===t?0:90}),Lt=(t,e)=>{const n=Ft(t,e),i=22*n.x,o=22*n.y;if("left"===t||"right"===t){const e=Math.min(0,i),n=Math.max(0,i);return{x:e,y:-6,width:n-e,height:12,centerX:(e+n)/2,centerY:0,degrees:"left"===t?180:0}}const a=Math.min(0,o),s=Math.max(0,o);return{x:0-(s-a)/2,y:(a+s)/2-6,width:s-a,height:12,centerX:0,centerY:(a+s)/2,degrees:"up"===t?-90:90}},zt=t=>{let e=0,n=0,i=0,o=0;for(const a of t.affectedCells)a.y===t.y&&(a.x<t.x&&(e=Math.max(e,t.x-a.x)),a.x>t.x&&(n=Math.max(n,a.x-t.x))),a.x===t.x&&(a.y<t.y&&(i=Math.max(i,t.y-a.y)),a.y>t.y&&(o=Math.max(o,a.y-t.y)));return{left:e,right:n,up:i,down:o}},Wt=t=>{const e=new Map;for(const n of t){const t=Xt(n.x,n.y),i=e.get(t);i?i.push(n):e.set(t,[n])}return e},Xt=(t,e)=>`${t}:${e}`,Zt=(t,e)=>{const n=zt(t);return`bm-explosion-shape-${qt(e)}-${n.left}-${n.right}-${n.up}-${n.down}`},qt=t=>t%bt.center.length,$t=(t,{spriteFrameIndex:e})=>{const n=bt[t];return te(n[e%n.length])},_t=t=>{const e=new Map;for(const n of t.explosionEvents)for(let t=0;t<n.remainingFrames;t++){const i=qt(t),o=Zt(n,i);e.has(o)||e.set(o,`<g id="${o}">${Yt({explosion:n,spriteFrameIndex:i})}</g>`)}return Array.from(e.values()).join("")},te=t=>`#${t.id}`,ee=t=>te(yt[t].down[0]),ne=()=>te(vt),ie=t=>te(Ct[t]),oe=t=>{const e=t.gameHistory.length,n=Math.max(e*o/2,1e3),i=u(t),a={store:t,theme:i,cellEventsByPosition:Wt(t.cellEvents),totalDurationMs:n};let s='<svg width="1166" height="169" xmlns="http://www.w3.org/2000/svg" shape-rendering="crispEdges" color-interpolation="sRGB">';s+="<style>image { image-rendering: pixelated; image-rendering: -moz-crisp-edges; }</style>",s+=(t=>{const e=new Map;for(const t of Object.values(yt))for(const n of Object.values(t))for(const t of n)e.set(t.id,t);for(const t of Object.values(xt))for(const n of t)e.set(n.id,n);e.set(vt.id,vt);for(const t of Object.values(bt))for(const n of t)e.set(n.id,n);for(const t of Object.values(Ct))e.set(t.id,t);return`<defs>${Array.from(e.entries()).map((([t,e])=>`<symbol id="${t}" viewBox="0 0 ${e.frame.width} ${e.frame.height}" overflow="visible"${e.preserveAspectRatio?` preserveAspectRatio="${e.preserveAspectRatio}"`:""}>\n\t\t\t\t<image width="${e.frame.width}" height="${e.frame.height}" href="${e.frame.data}" preserveAspectRatio="xMidYMid meet" style="image-rendering: pixelated;"${e.flipX?` transform="translate(${e.frame.width} 0) scale(-1 1)"`:""}/>\n\t\t\t</symbol>`)).join("")}${_t(t)}</defs>`})(t),s+=`<rect width="100%" height="100%" fill="${i.gridBackground}"/>`;for(const t of ft)s+=t.render(a);return s+="</svg>",(t=>t.replace(/>\s+</g,"><").replace(/\s{2,}/g," ").replace(/\s\/>/g,"/>").trim())(s)};class ae{static isActiveAt(t,e,n){return at.from(t).activeExplosionAt(e,n)}constructor(t,e,n,i,o,a,s,r){this.bombId=t,this.ownerId=e,this.x=n,this.y=i,this.blastRange=o,this.affectedCells=a,this.remainingFrames=s,this.hitPlayerIds=r,this.affectedCells=a.map((t=>Object.assign({},t))),this.hitPlayerIds=[...r]}tick(){return--this.remainingFrames}contains(t){const e=Z.from(t);return this.affectedCells.some((t=>e.equals(t)))}markPlayerHit(t){this.hitPlayerIds.includes(t)||this.hitPlayerIds.push(t)}}class se{static from(t,e,n){const i=Z.from(t),o={up:[],down:[],left:[],right:[]};for(const t of W)for(let a=1;a<=e;a++){const e=i.translate(t,a);if(!e.inBounds())break;if(o[t.direction].push(e),n(e))break}return new se(i,o)}constructor(t,e){this.origin=t,this.arms=e}cells(){return[this.origin,...Object.values(this.arms).flat()]}plainCells(){return this.cells().map((t=>t.toPlain()))}armLength(t){return this.arms[t].length}endPosition(t){var e;return null!==(e=this.arms[t][this.arms[t].length-1])&&void 0!==e?e:this.origin}}class re{static findAt(t,{x:e,y:n}){return at.from(t).findBombAt({x:e,y:n})}static getBlastCells(t,e,n=1){const i=[e];for(const{x:o,y:a}of X)for(let s=1;s<=n;s++){const n={x:e.x+o*s,y:e.y+a*s};if(!tt(n))break;if(i.push(n),et(t,n))break}return i}static getBlastArea(t,e,n=1){return se.from(e,n,(e=>et(t,e)))}static threateningAt(t,e,n){return t.bombs.filter((i=>i.threatens(t,e,n)))}constructor(t,e,n,i,o,a=8,s=!1,r,l=0){this.id=t,this.ownerId=e,this.x=n,this.y=i,this.blastRange=o,this.timer=a,this.exploded=s,this.kickDirection=r,this.kickMoveCooldown=l}tick(t){return this.exploded||(this.advanceKick(t),this.timer--),this.timer}getBlastCells(t){return re.getBlastCells(t,this,this.blastRange)}getBlastArea(t){return re.getBlastArea(t,this,this.blastRange)}getKickLandingPosition(t,e){var n,i;const o=W.find((t=>t.direction===e));if(!o)return null;let a=null;for(let e=1;e<=Math.max(t.grid.length,null!==(i=null===(n=t.grid[0])||void 0===n?void 0:n.length)&&void 0!==i?i:0);e++){const n=Z.from(this).translate(o,e);if(!this.canOccupyKickCell(t,n))break;a=n.toPlain()}return a}canKick(t,e){return null!==this.getKickLandingPosition(t,e)}kick(t,e){const n=this.getKickNextPosition(t,e);return!!n&&(this.x=n.x,this.y=n.y,this.kickDirection=e,this.kickMoveCooldown=2,!0)}advanceKick(t){if(!this.kickDirection)return;if(this.kickMoveCooldown>0&&(this.kickMoveCooldown--,this.kickMoveCooldown>0))return;const e=this.getKickNextPosition(t,this.kickDirection);if(!e)return this.kickDirection=void 0,void(this.kickMoveCooldown=0);this.x=e.x,this.y=e.y,this.kickMoveCooldown=2}getKickNextPosition(t,e){const n=W.find((t=>t.direction===e));if(!n)return null;const i=Z.from(this).translate(n);return this.canOccupyKickCell(t,i)?i.toPlain():null}canOccupyKickCell(t,e){return tt(e)&&!et(t,e)&&!re.findAt(t,e)&&!ae.isActiveAt(t,e)}threatens(t,e,n){return!this.exploded&&(void 0===n||this.ownerId===n)&&this.getBlastCells(t).some((t=>$(t,e)))}wouldHitContribution(t){return this.getBlastCells(t).some((e=>et(t,e)))}wouldHitVisibleItem(t){return this.getBlastCells(t).some((e=>lt.hasVisibleAt(t,e)))}wouldHitOpponent(t){const e=at.from(t).aliveOpponentOf(this.ownerId);return Boolean(e&&this.getBlastCells(t).some((t=>$(t,e))))}wouldHitTarget(t){return this.wouldHitContribution(t)||this.wouldHitOpponent(t)}explode(t){if(this.exploded)return;this.exploded=!0;const e=this.getBlastCells(t);this.applyBlastToCells(t,e);const n=this.killPlayersInBlast(t,e);this.recordExplosion(t,e,n)}applyBlastToCells(t,e){for(const n of e){et(t,n)?this.destroyContributionCell(t,n):lt.destroyVisibleAt(t,n);const e=re.findAt(t,n);e&&e.explode(t)}}destroyContributionCell(t,e){if(!et(t,e))return!1;const n=at.from(t),i=n.clearContributionCell(e),o=t.players.find((t=>t.id===this.ownerId));return o&&o.markCellDestroyed(),lt.revealAt(t,e),n.recordCellDestroyed(e,i),!0}killPlayersInBlast(t,e){const n=[];for(const i of t.players)i.alive&&e.some((t=>t.x===i.x&&t.y===i.y))&&(i.kill(),n.push(i.id));return n}recordExplosion(t,e,n){const i=new ae(this.id,this.ownerId,this.x,this.y,this.blastRange,e,4,n);at.from(t).addExplosion(i)}}const le=(t,e)=>{for(let n=e.x;n<e.x+2;n++)for(let i=e.y;i<e.y+2;i++){const e={x:n,y:i};tt(e)&&Ae(t,e)}},Ae=(t,e)=>!!et(t,e)&&(at.from(t).clearContributionCell(e),!0),ce=(t,e,n,i)=>new ue(t,e,n.x,n.y,i,!0,0,0,0,0,0,0,de(),he()),de=()=>Math.random()<.5?"left":"right",he=()=>Math.random()<.5?"horizontal-first":"vertical-first";class ue{static fromState(t){var e,n,i,o;return new ue(t.id,t.name,t.x,t.y,t.direction,t.alive,t.bombsPlaced,t.cellsDestroyed,t.blastRangeBonus,null!==(e=t.bombCapacityBonus)&&void 0!==e?e:0,null!==(n=t.speedBonus)&&void 0!==n?n:0,null!==(i=t.movementStepProgress)&&void 0!==i?i:0,t.attackSide,t.routePreference,null!==(o=t.canKickBombs)&&void 0!==o&&o)}constructor(t,e,n,i,o,a=!0,s=0,r=0,l=0,A=0,c=0,d=0,h,u,g=!1){this.id=t,this.name=e,this.x=n,this.y=i,this.direction=o,this.alive=a,this.bombsPlaced=s,this.cellsDestroyed=r,this.blastRangeBonus=l,this.bombCapacityBonus=A,this.speedBonus=c,this.movementStepProgress=d,this.attackSide=h,this.routePreference=u,this.canKickBombs=g}get blastRange(){return 1+this.blastRangeBonus}get bombLimit(){return 1+this.bombCapacityBonus}get previewBomb(){return new re(-1,this.id,this.x,this.y,this.blastRange,8,!1)}nextMoveCount(){const t=100+this.speedBonus,e=this.movementStepProgress+t,n=Math.floor(e/100);return this.movementStepProgress=e%100,Math.max(1,n)}moveTo(t,e){e&&(this.direction=e),this.x=t.x,this.y=t.y}kill(){this.alive=!1}markBombPlaced(){this.bombsPlaced++}markCellDestroyed(){this.cellsDestroyed++}increaseBlastRange(t=1){this.blastRangeBonus+=t}increaseBombCapacity(t=1){this.bombCapacityBonus+=t}increaseSpeed(t){this.speedBonus+=t}enableBombKick(){this.canKickBombs=!0}canPlaceBomb(t){const e=at.from(t);return this.alive&&nt(t,this)&&!e.findBombAt(this)&&e.activeBombsOwnedBy(this.id).length<this.bombLimit}placeBomb(t){if(!this.canPlaceBomb(t))return;const e=at.from(t),n=new re(e.nextBombId(),this.id,this.x,this.y,this.blastRange,8,!1);e.addBomb(n),this.markBombPlaced()}kickBomb(t,e,n){return!!this.canKickBombs&&!!this.isBombInKickDirection(e,n)&&e.kick(t,n)}isBombInKickDirection(t,e){const n=X.find((t=>t.direction===e));return Boolean(n&&t.x===this.x+n.x&&t.y===this.y+n.y)}isInOwnFutureBlast(t,e){return re.threateningAt(t,e,this.id).length>0}isOwnExplosionDangerCell(t,e){return ae.isActiveAt(t,e,this.id)||this.isInOwnFutureBlast(t,e)}isSafeStandingCell(t,e){return nt(t,e)&&!re.findAt(t,e)&&!ae.isActiveAt(t,e)&&!this.isInOwnFutureBlast(t,e)}bombWouldHitOpponent(t){return this.previewBomb.wouldHitOpponent(t)}bombWouldHitTarget(t){return this.previewBomb.wouldHitTarget(t)}}const ge=(t,e)=>{const n=t.gameHistory[t.gameHistory.length-2],i=null==n?void 0:n.players.find((t=>t.id===e));return i?{x:i.x,y:i.y}:null},me=(t,e,n)=>{const i=ge(t,e.id);return Boolean(i&&$(i,n))},fe=(t,e)=>t.sort(((t,n)=>{const i=e.avoidFirstStep&&$(t,e.avoidFirstStep)?1:0,o=e.avoidFirstStep&&$(n,e.avoidFirstStep)?1:0;if(i!==o)return i-o;if(e.target){const i=_(t,e.target)-_(n,e.target);if(0!==i)return i;const o=pe(t,e)-pe(n,e);if(0!==o)return o;const a=ye(t,e)-ye(n,e);if(0!==a)return a}return 0})),pe=(t,e)=>e.origin&&e.routePreference?(t.x!==e.origin.x?"horizontal-first":"vertical-first")===e.routePreference?0:1:0,ye=(t,e)=>e.attackSide&&e.target?"left"===e.attackSide?t.x<=e.target.x?0:1:t.x>=e.target.x?0:1:0,xe=(t,e,n,i={})=>{var o;const a=new Set([q(e)]),s=[{position:e,firstStep:null,distance:0}];let r=0;for(;r<s.length;){const e=s[r++];if(e.firstStep&&n(e.position))return{firstStep:e.firstStep,distance:e.distance};const l=fe(ot(e.position),e.firstStep?{attackSide:i.attackSide,origin:e.position,routePreference:i.routePreference,target:i.target}:Object.assign(Object.assign({},i),{origin:e.position}));for(const n of l){const i=q(n);!a.has(i)&&it(t,n)&&(a.add(i),s.push({position:n,firstStep:null!==(o=e.firstStep)&&void 0!==o?o:{x:n.x,y:n.y},distance:e.distance+1}))}}return null},ve=(t,e,n,i=new Set)=>{var o;const a=[{position:e,firstStep:null,distance:0,cost:0,blastedCells:0}],s=new Map([[q(e),0]]);for(;a.length>0;){const e=be(a,n);if(e.firstStep&&$(e.position,n))return{firstStep:e.firstStep,distance:e.distance,cost:e.cost,blastedCells:e.blastedCells};for(const r of ot(e.position)){if(re.findAt(t,r)||ae.isActiveAt(t,r))continue;const l=q(r),A=i.has(l),c=et(t,r)&&!A;if(!(nt(t,r)||A||c||$(r,n)))continue;const d=c?10:1,h=e.cost+d,u=s.get(l);void 0!==u&&u<=h||(s.set(l,h),a.push({position:{x:r.x,y:r.y},firstStep:null!==(o=e.firstStep)&&void 0!==o?o:{x:r.x,y:r.y},distance:e.distance+1,cost:h,blastedCells:e.blastedCells+(c?1:0)}))}}return null},be=(t,e)=>{let n=0;for(let i=1;i<t.length;i++){const o=t[n],a=t[i],s=a.cost-o.cost,r=_(a.position,e)-_(o.position,e);(s<0||0===s&&r<0)&&(n=i)}return t.splice(n,1)[0]},Ce=(t,e)=>{var n;const i=Math.max(8,4),o=[{position:e,firstStep:null,depth:0}],a=new Set([q(e)]);let s=0;for(;s<o.length;){const r=o[s++];if(r.firstStep&&e.isSafeStandingCell(t,r.position))return r.firstStep;if(r.depth>=i)continue;const l=ot(r.position).sort(((n,i)=>re.threateningAt(t,n,e.id).length-re.threateningAt(t,i,e.id).length));for(const i of l){const s=q(i);if(a.has(s)||!nt(t,i)||re.findAt(t,i)||ae.isActiveAt(t,i,e.id))continue;const l=r.depth+1;re.threateningAt(t,i,e.id).some((t=>t.timer<=l))||(a.add(s),o.push({position:i,firstStep:null!==(n=r.firstStep)&&void 0!==n?n:{x:i.x,y:i.y},depth:l}))}}return null},we=(t,e)=>{var n;const i=new Set([q(e)]),o=[{position:e,firstStep:null,distance:0}],a=[],s=ge(t,e.id);let r=0;for(;r<o.length;){const l=o[r++];a.push(l);const A=fe(ot(l.position),l.firstStep?{attackSide:e.attackSide,origin:l.position,routePreference:e.routePreference,target:e}:{attackSide:e.attackSide,avoidFirstStep:s,origin:l.position,routePreference:e.routePreference,target:e});for(const a of A){const s=q(a);i.has(s)||!it(t,a)||e.isOwnExplosionDangerCell(t,a)||(i.add(s),o.push({position:{x:a.x,y:a.y},firstStep:null!==(n=l.firstStep)&&void 0!==n?n:{x:a.x,y:a.y},distance:l.distance+1}))}}return a},Be=(t,e,n)=>{if(!nt(t,n)||re.findAt(t,n))return!1;const i=new re(-1,e.id,n.x,n.y,e.blastRange,8,!1),o=ue.fromState(Object.assign(Object.assign({},e),{x:n.x,y:n.y}));t.bombs.push(i);try{return Boolean(Ce(t,o))}finally{t.bombs.pop()}};class ke{score({origin:t,routeAfterBomb:e,opponent:n,contributions:i,routeImprovement:o,isBacktrack:a}){const s=a?6:0;return 10*e.blastedCells*3+2*t.distance+e.distance+.1*_(t.position,n)+s-.25*i.length-.5*o}}class Ee{choose({store:t,player:e}){return Boolean(re.findAt(t,e))||e.isOwnExplosionDangerCell(t,e)?{handled:!0,step:Ce(t,e)}:null}}class Me{choose({store:t,player:e,opponent:n}){var i;if(e.canKickBombs)return null;if(!n)return{handled:!0,step:null};const o=ge(t,e.id),a=xe(t,e,(e=>lt.hasVisibleAt(t,e)),{avoidFirstStep:o,attackSide:e.attackSide,routePreference:e.routePreference}),s=Te(t,e,null!==(i=null==a?void 0:a.firstStep)&&void 0!==i?i:null);return s?{handled:!0,step:s}:null}}class Re{choose({store:t,player:e,opponent:n}){var i;if(!n)return{handled:!0,step:null};const o=ge(t,e.id),a=xe(t,e,(t=>$(t,n)),{avoidFirstStep:o,attackSide:e.attackSide,routePreference:e.routePreference,target:n}),s=Te(t,e,null!==(i=null==a?void 0:a.firstStep)&&void 0!==i?i:null);return s?{handled:!0,step:s}:null}}class Ue{choose({store:t,player:e,opponent:n,bombSpotPlanner:i}){var o,a;if(!n||!e.canPlaceBomb(t))return null;const s=null!==(a=null===(o=i.findBestItemHuntToward(n))||void 0===o?void 0:o.firstStep)&&void 0!==a?a:null;return s?{handled:!0,step:Te(t,e,s)}:null}}class Se{choose({store:t,player:e,opponent:n}){if(!e.canKickBombs||!n)return null;const i=Ye(t,e,n);return i?{handled:!0,step:i}:null}}class Ie{choose({store:t,player:e,opponent:n,bombSpotPlanner:i}){var o,a;if(!n||!e.canPlaceBomb(t))return{handled:!0,step:null};const s=null!==(a=null===(o=i.findBestToward(n))||void 0===o?void 0:o.firstStep)&&void 0!==a?a:null;return{handled:!0,step:Te(t,e,s)}}}class De{constructor(t,e,n=new ke){this.store=t,this.player=e,this.bombSpotScorer=n}findBestToward(t){const e=ve(this.store,this.player,t),n=we(this.store,this.player),i=[];for(const o of n){if(!Be(this.store,this.player,o.position))continue;const n=new re(-1,this.player.id,o.position.x,o.position.y,this.player.blastRange);if(n.wouldHitVisibleItem(this.store))continue;const a=n.getBlastCells(this.store).filter((t=>et(this.store,t)));if(0===a.length)continue;const s=new Set(a.map(q)),r=ve(this.store,o.position,t,s);if(!r)continue;const l=e?e.cost-r.cost:10;if(l<=0)continue;const A=a.sort(((e,n)=>_(e,t)-_(n,t)))[0],c=this.bombSpotScorer.score({origin:o,routeAfterBomb:r,opponent:t,contributions:a,routeImprovement:l,isBacktrack:Boolean(o.firstStep&&me(this.store,this.player,o.firstStep))});i.push({position:o.position,firstStep:o.firstStep,contribution:A,score:c})}return 0===i.length?null:i.sort(((t,e)=>t.score-e.score||t.position.x-e.position.x||t.position.y-e.position.y))[0]}findBestItemHuntToward(t){const e=Oe(this.store,this.player,t);if(!e)return null;const n=we(this.store,this.player),i=[];for(const o of n){if(!Be(this.store,this.player,o.position))continue;const n=new re(-1,this.player.id,o.position.x,o.position.y,this.player.blastRange);if(n.wouldHitVisibleItem(this.store))continue;const a=n.getBlastCells(this.store).filter((t=>et(this.store,t)));if(0===a.length)continue;const s=a.map((t=>({contribution:t,itemDropChance:Qe(this.store,t),pathDistance:Ne(t,e)}))).sort(((e,n)=>e.pathDistance-n.pathDistance||n.itemDropChance-e.itemDropChance||_(e.contribution,t)-_(n.contribution,t)||_(e.contribution,this.player)-_(n.contribution,this.player)))[0];if(!s||s.pathDistance>1)continue;const r=a.reduce(((t,e)=>t+Qe(this.store,e)),0),l=2*o.distance+10*s.pathDistance+.1*_(s.contribution,t)-.25*a.length-40*r;i.push({position:o.position,firstStep:o.firstStep,contribution:s.contribution,score:l})}return 0===i.length?null:i.sort(((t,e)=>t.score-e.score||t.position.x-e.position.x||t.position.y-e.position.y))[0]}}const Te=(t,e,n)=>n&&it(t,n)&&!e.isOwnExplosionDangerCell(t,n)?n:null,Oe=(t,e,n)=>{const i=q(e),o=new Set([i]),a=new Map([[i,null]]),s=new Map([[i,{x:e.x,y:e.y}]]),r=[{x:e.x,y:e.y}];let l=0;for(;l<r.length;){const i=r[l++];if(i!==e&&$(i,n))return Ve(q(i),a,s);const A=fe(ot(i),{attackSide:e.attackSide,origin:i,routePreference:e.routePreference,target:n});for(const e of A){const n=q(e);!o.has(n)&&it(t,e)&&(o.add(n),a.set(n,q(i)),s.set(n,{x:e.x,y:e.y}),r.push({x:e.x,y:e.y}))}}return null},Ve=(t,e,n)=>{var i;const o=[];let a=t;for(;a;){const t=n.get(a);t&&o.push(t),a=null!==(i=e.get(a))&&void 0!==i?i:null}return o.reverse()},Ne=(t,e)=>e.reduce(((e,n)=>Math.min(e,_(t,n))),Number.POSITIVE_INFINITY),Qe=(t,e)=>{var n;const i=null===(n=t.grid[e.x])||void 0===n?void 0:n[e.y];return i?J[i.level]:0},Ye=(t,e,n)=>{var i;const o=fe(ot(e),{attackSide:e.attackSide,origin:e,routePreference:e.routePreference,target:n});for(const n of o){const o=null===(i=X.find((t=>e.x+t.x===n.x&&e.y+t.y===n.y)))||void 0===i?void 0:i.direction,a=re.findAt(t,n);if(!o||!a)continue;const s=Fe(t,a,o);if(s&&!s.threatens(t,n)&&He(t,e,a,o,n))return{x:n.x,y:n.y}}return null},Fe=(t,e,n)=>{const i=e.getKickLandingPosition(t,n);return i?new re(e.id,e.ownerId,i.x,i.y,e.blastRange,e.timer,e.exploded,n,e.kickMoveCooldown):null},He=(t,e,n,i,o)=>{const a=((t,e,n)=>{if(!e.canKick(t,n))return null;const i=X.find((t=>t.direction===n));return i?new re(e.id,e.ownerId,e.x+i.x,e.y+i.y,e.blastRange,e.timer,e.exploded,n,e.kickMoveCooldown):null})(t,n,i),s=Fe(t,n,i);return!(!a||!s)&&Ge(t,e,n,a,o)&&Ge(t,e,n,s,o)},Ge=(t,e,n,i,o)=>{const a=ue.fromState(Object.assign(Object.assign({},e),{x:o.x,y:o.y})),s=t.bombs.indexOf(n);s>=0?t.bombs[s]=i:t.bombs.push(i);try{return a.isSafeStandingCell(t,o)||Boolean(Ce(t,a))}finally{s>=0?t.bombs[s]=n:t.bombs.pop()}};class je{constructor(t,e,n=new ke){this.store=t,this.player=e,this.bombSpotPlanner=new De(t,e,n),this.movementStrategies=[new Se,new Ee,new Me,new Ue,new Re,new Ie]}shouldPlaceBomb(){const t=this.getAliveOpponent();if(e=this.store,n=this.player,!Be(e,n,n))return!1;var e,n;if(this.player.previewBomb.wouldHitVisibleItem(this.store))return!1;if(this.player.bombWouldHitOpponent(this.store))return!0;if(!t)return!1;const i=this.bombSpotPlanner.findBestItemHuntToward(t);if(i&&$(i.position,this.player))return!0;const o=this.bombSpotPlanner.findBestToward(t);return Boolean(o&&$(o.position,this.player)&&this.player.bombWouldHitTarget(this.store))}movePlayer(){const t=this.getAliveOpponent(),e={store:this.store,player:this.player,opponent:t,bombSpotPlanner:this.bombSpotPlanner};for(const t of this.movementStrategies){const n=t.choose(e);if(n&&(n.step&&this.movePlayerTo(n.step),n.handled))return}}getAliveOpponent(){var t;return null!==(t=this.store.players.find((t=>t.id!==this.player.id&&t.alive)))&&void 0!==t?t:null}movePlayerTo(t){var e,n;const i=null!==(n=null===(e=X.find((e=>this.player.x+e.x===t.x&&this.player.y+e.y===t.y)))||void 0===e?void 0:e.direction)&&void 0!==n?n:t.direction,o=re.findAt(this.store,t);o?i&&this.player.kickBomb(this.store,o,i)&&this.player.moveTo(t,i):this.player.moveTo(t,i)}}var Ke=function(t,e,n,i){return new(n||(n=Promise))((function(o,a){function s(t){try{l(i.next(t))}catch(t){a(t)}}function r(t){try{l(i.throw(t))}catch(t){a(t)}}function l(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(s,r)}l((i=i.apply(t,e||[])).next())}))};class Je{constructor(t){this.store=t}start(){return Ke(this,void 0,void 0,(function*(){var t;for(this.resetState(),this.store.grid=f(this.store),t=this.store,le(t,{x:0,y:0}),le(t,{x:51,y:5}),this.store.initialColors=this.store.grid.map((t=>t.map((t=>t.color)))),lt.createHiddenItems(this.store),(()=>{this.store.players=[ce(1,"Bomberman",{x:0,y:0},"right"),ce(2,"Plunder Bomber",{x:52,y:6},"left")]})(),this.pushSnapshot();this.alivePlayerCount()>1&&this.store.frameCount<400;)this.update();this.appendDeathAnimationSnapshots(),this.finish()}))}stop(){clearInterval(this.store.gameInterval)}pushSnapshot(){this.store.gameHistory.push({players:this.store.players.map((t=>Object.assign({},t))),bombs:this.store.bombs.map((t=>Object.assign({},t))),explosions:this.store.activeExplosions.map((t=>Object.assign(Object.assign({},t),{affectedCells:t.affectedCells.map((t=>Object.assign({},t))),hitPlayerIds:[...t.hitPlayerIds]}))),items:this.store.items.map((t=>Object.assign({},t)))})}update(){this.store.frameCount++,this.updateExplosions(),this.updateBombs(),this.killPlayersInActiveExplosions();for(const t of this.store.players){if(!t.alive)continue;const e=new je(this.store,t);t.canPlaceBomb(this.store)&&e.shouldPlaceBomb()&&t.placeBomb(this.store);const n=t.nextMoveCount();for(let i=0;i<n&&t.alive;i++)e.movePlayer(),lt.collectVisibleAt(this.store,t),this.killPlayersInActiveExplosions()}this.pushSnapshot()}updateExplosions(){for(const t of this.store.activeExplosions)t.tick();this.store.activeExplosions=this.store.activeExplosions.filter((t=>t.remainingFrames>0))}updateBombs(){for(const t of this.store.bombs)t.tick(this.store);for(const t of[...this.store.bombs])!t.exploded&&t.timer<=0&&t.explode(this.store);this.store.bombs=this.store.bombs.filter((t=>!t.exploded))}killPlayersInActiveExplosions(){for(const t of this.store.players)if(t.alive)for(const e of this.store.activeExplosions)if(e.contains(t)){t.kill(),e.markPlayerHit(t.id);break}}appendDeathAnimationSnapshots(){if(!this.store.players.every((t=>t.alive)))for(let t=1;t<8;t++)this.updateExplosions(),this.pushSnapshot()}resetState(){at.from(this.store).reset()}finish(){const t=oe(this.store);this.store.config.svgCallback(t),this.store.config.gameStatsCallback&&this.store.config.gameStatsCallback({totalScore:this.store.cellEvents.length,steps:this.store.frameCount,ghostsEaten:0}),this.store.config.gameOverCallback()}alivePlayerCount(){return this.store.players.filter((t=>t.alive)).length}}const Pe={frameCount:0,contributions:[],grid:[],monthLabels:[],gameInterval:0,nextBombId:0,nextItemId:0,players:[],bombs:[],activeExplosions:[],items:[],gameHistory:[],initialColors:[],cellEvents:[],explosionEvents:[],config:void 0};class Le{constructor(t){this.conf=t}start(){return t=this,e=void 0,i=function*(){return this.store=JSON.parse(JSON.stringify(Pe)),this.store.config=Object.assign(Object.assign({},{platform:"github",username:"",svgCallback:t=>{},gameOverCallback:()=>{},gameTheme:"github",pointsIncreasedCallback:t=>{},githubSettings:{accessToken:""}}),this.conf),this.store.contributions=yield K(this.store),m(this.store),yield(t=this.store,Ke(void 0,void 0,void 0,(function*(){return new Je(t).start()}))),this.store;var t},new((n=void 0)||(n=Promise))((function(o,a){function s(t){try{l(i.next(t))}catch(t){a(t)}}function r(t){try{l(i.throw(t))}catch(t){a(t)}}function l(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(s,r)}l((i=i.apply(t,e||[])).next())}));var t,e,n,i}stop(){var t;t=this.store,Ke(void 0,void 0,void 0,(function*(){return new Je(t).stop()}))}}const ze=.21,We=7.4,Xe=t=>22*t,Ze=t=>22*t+15,qe=(t,e,n)=>{var i,o;const a=t.gameHistory.length,s=null!==(o=null===(i=t.initialColors[e])||void 0===i?void 0:i[n])&&void 0!==o?o:"#ebedf0",r=t.brickEvents.filter((t=>t.x===e&&t.y===n));if(0===r.length)return{keyTimes:"0;1",values:`${s};${s}`};const l=[0],A=[s];for(const t of r){const e=Number((t.frameIndex/Math.max(a-1,1)).toFixed(4));e!==l[l.length-1]?(l.push(e),A.push(t.color)):A[A.length-1]=t.color}return 1!==l[l.length-1]&&(l.push(1),A.push(A[A.length-1])),{keyTimes:l.join(";"),values:A.join(";")}},$e=(t,e)=>{var n,i,o,a;const s=t.gameHistory.length;if(0===s){const t=null!==(n=e[0])&&void 0!==n?n:"0,0";return{keyTimes:"0;1",values:`${t};${t}`}}const r=[],l=[];let A=null,c=null;return e.forEach(((t,e)=>{t!==A&&(null!==A&&null!==c&&e-1!==c&&(r.push(Number(((e-1)/(s-1)).toFixed(4))),l.push(A)),r.push(Number((e/(s-1)).toFixed(4))),l.push(t),A=t,c=e)})),0!==r.length&&1===r[r.length-1]||(0===r.length?(r.push(0,1),l.push(null!==(i=e[0])&&void 0!==i?i:"0,0",null!==(o=e[e.length-1])&&void 0!==o?o:"0,0")):(r.push(1),l.push(null!==(a=null!=A?A:e[e.length-1])&&void 0!==a?a:"0,0"))),{keyTimes:r.join(";"),values:l.join(";")}},_e=t=>{const e=t.gameHistory.length*o/2,n=u(t);let a='<svg width="1166" height="209" xmlns="http://www.w3.org/2000/svg">';a+=`<desc>Generated with breakout-contribution-graph on ${new Date}</desc>`,a+=`<metadata>\n\t\t<info>\n\t\t\t<frames>${t.gameHistory.length}</frames>\n\t\t\t<frameRate>5</frameRate>\n\t\t\t<durationMs>${e}</durationMs>\n\t\t\t<generatedOn>${(new Date).toISOString()}</generatedOn>\n\t\t</info>\n\t</metadata>`,a+=`<rect width="100%" height="100%" fill="${n.gridBackground}"/>`;let s="";for(let e=0;e<i;e++)t.monthLabels[e]!==s&&(a+=`<text x="${22*e+10}" y="10" text-anchor="middle" font-size="10" fill="${n.textColor}">${t.monthLabels[e]}</text>`,s=t.monthLabels[e]);for(let o=0;o<i;o++)for(let i=0;i<7;i++){const s=Xe(o),r=Ze(i),l=qe(t,o,i);a+=`<rect id="c-${o}-${i}" x="${s}" y="${r}" width="20" height="20" rx="3" fill="${n.intensityColors[0]}">\n\t\t\t\t<animate attributeName="fill" calcMode="discrete" dur="${e}ms" repeatCount="indefinite"\n\t\t\t\t\tvalues="${l.values}" keyTimes="${l.keyTimes}"/>\n\t\t\t</rect>`}const r=Math.round(4.62),l=$e(t,(t=>t.gameHistory.map((t=>`${Xe(t.ball.x)},${Ze(t.ball.y)}`)))(t));a+=`<circle id="ball" cx="0" cy="0" r="${r}" fill="${n.wallColor}" stroke="#aaaaaa" stroke-width="1">\n\t\t<animateTransform attributeName="transform" type="translate"\n\t\t\tcalcMode="linear"\n\t\t\tdur="${e}ms" repeatCount="indefinite"\n\t\t\tkeyTimes="${l.keyTimes}"\n\t\t\tvalues="${l.values}"/>\n\t</circle>`;const A=Ze(We),c=Math.round(152),d=Math.round(11),h=$e(t,(t=>t.gameHistory.map((t=>`${Xe(t.paddle.x)},0`)))(t));return a+=`<rect id="paddle" x="0" y="${A}" width="${c}" height="${d}" rx="3" fill="${n.wallColor}">\n\t\t<animateTransform attributeName="transform" type="translate"\n\t\t\tcalcMode="linear"\n\t\t\tdur="${e}ms" repeatCount="indefinite"\n\t\t\tkeyTimes="${h.keyTimes}"\n\t\t\tvalues="${h.values}"/>\n\t</rect>`,a+="</svg>",a};const tn=n/22,en=["NONE","FIRST_QUARTILE","SECOND_QUARTILE","THIRD_QUARTILE","FOURTH_QUARTILE"],nn=t=>{const e=en.indexOf(t);return en[Math.max(0,e-1)]},on=t=>{var e,n;t.frameCount++;const{ball:o,paddle:a,grid:s}=t,r=Math.hypot(o.dx,o.dy),l=Math.ceil(r/ze),A=1/l;for(let r=0;r<l;r++){o.x+=o.dx*A,o.y+=o.dy*A,o.x-ze<=0&&(o.x=ze,o.dx=Math.abs(o.dx)),o.x+ze>=i&&(o.x=52.79,o.dx=-Math.abs(o.dx)),o.y-ze<=0&&(o.y=ze,o.dy=Math.abs(o.dy));const r=a.x,l=a.x+7;if(o.dy>0&&o.y+ze>=We&&o.y-ze<7.9&&o.x>=r-ze&&o.x<=l+ze){o.y=7.19;const e=r+3.5,n=Math.max(-1,Math.min(1,(o.x-e)/3.5)),i=Math.hypot(o.dx,o.dy),a=65*n*(Math.PI/180);o.dx=i*Math.sin(a),o.dy=-i*Math.cos(a),t.bouncesSinceTargetSet++,t.bouncesSinceTargetSet>=5&&(t.targetBrick=rn(t),t.bouncesSinceTargetSet=0)}o.y>8.4&&(o.x=26.5,o.y=5.9,o.dy=-Math.abs(o.dy));const c=Math.max(0,Math.floor(o.x-ze)),d=Math.min(52,Math.floor(o.x+ze)),h=Math.max(0,Math.floor(o.y-ze)),g=Math.min(6,Math.floor(o.y+ze));let m=!1,f=!1;const p=u(t);for(let i=c;i<=d;i++)for(let a=h;a<=g;a++){if(0===s[i][a].commitsCount)continue;const r=Math.max(i,Math.min(i+tn,o.x)),l=Math.max(a,Math.min(a+tn,o.y));if(Math.pow(o.x-r,2)+Math.pow(o.y-l,2)>=.04409999999999999)continue;const A=s[i][a].level,c=nn(A);if(s[i][a].level=c,"NONE"===c)s[i][a].commitsCount=0,s[i][a].color=p.intensityColors[0],(null===(e=t.targetBrick)||void 0===e?void 0:e.cx)===i&&(null===(n=t.targetBrick)||void 0===n?void 0:n.cy)===a&&(t.targetBrick=rn(t),t.bouncesSinceTargetSet=0);else{const t=en.indexOf(c);s[i][a].color=p.intensityColors[t]}t.brickEvents.push({frameIndex:t.gameHistory.length,x:i,y:a,color:s[i][a].color});const d=ze-Math.abs(o.x-r),h=ze-Math.abs(o.y-l);d<=h?(o.x+=o.dx<0?d:-d,m=!0):(o.y+=o.dy<0?h:-h,f=!0),t.framesSinceLastBrickHit=0,t.config.pointsIncreasedCallback(sn(t))}m&&(o.dx=-o.dx),f&&(o.dy=-o.dy)}if(o.dy>0&&t.targetBrick){const e=t.targetBrick,n=(We-o.y)/o.dy;let s=o.x+o.dx*n;s=Math.abs((s%106+106)%106),s>i&&(s=106-s);const r=e.cx+.5,l=e.cy+.5,A=We-l,c=r-s,d=Math.atan2(c,Math.max(A,.5))*(180/Math.PI),h=s-Math.max(-65,Math.min(65,d))/65*3.5,u=Math.max(0,Math.min(46,h-3.5));a.x<u-2?a.x+=2:a.x>u+2?a.x-=2:a.x=u}else if(o.dy>0){const t=a.x+3.5;t<o.x-.5?a.x=Math.min(a.x+2,46):t>o.x+.5&&(a.x=Math.max(a.x-2,0))}an(t)},an=t=>{t.gameHistory.push({ball:Object.assign({},t.ball),paddle:Object.assign({},t.paddle)})},sn=t=>{let e=0;return t.grid.forEach((t=>t.forEach((t=>{0===t.commitsCount&&e++})))),e},rn=t=>{var e,n;const o=[];for(let a=0;a<i;a++)for(let i=0;i<7;i++)(null===(n=null===(e=t.grid[a])||void 0===e?void 0:e[i])||void 0===n?void 0:n.commitsCount)>0&&o.push({cx:a,cy:i});return 0===o.length?null:o[Math.floor(Math.random()*o.length)]},ln=t=>{return e=void 0,n=void 0,o=function*(){if(t.frameCount=0,t.framesSinceLastBrickHit=0,t.gameHistory=[],t.brickEvents=[],t.grid=f(t),t.initialColors=t.grid.map((t=>t.map((t=>t.color)))),0===t.grid.reduce(((t,e)=>t+e.filter((t=>t.commitsCount>0)).length),0)){const e=_e(t);return t.config.svgCallback(e),void t.config.gameOverCallback()}for((t=>{t.ball={x:26.5,y:5.9,dx:.75,dy:-.95}})(t),(t=>{t.paddle={x:23,width:7}})(t),t.targetBrick=rn(t),t.bouncesSinceTargetSet=0;t.grid.some((t=>t.some((t=>t.commitsCount>0))))&&t.frameCount<3e3;)on(t),t.frameCount%200==0&&t.grid.reduce(((t,e)=>t+e.filter((t=>t.commitsCount>0)).length),0);const e=_e(t);t.config.svgCallback(e),t.config.gameStatsCallback&&t.config.gameStatsCallback({totalScore:sn(t),steps:t.frameCount,ghostsEaten:0}),t.config.gameOverCallback()},new((i=void 0)||(i=Promise))((function(t,a){function s(t){try{l(o.next(t))}catch(t){a(t)}}function r(t){try{l(o.throw(t))}catch(t){a(t)}}function l(e){var n;e.done?t(e.value):(n=e.value,n instanceof i?n:new i((function(t){t(n)}))).then(s,r)}l((o=o.apply(e,n||[])).next())}));var e,n,i,o},An={frameCount:0,contributions:[],ball:{x:0,y:0,dx:0,dy:0},paddle:{x:0,width:7},grid:[],monthLabels:[],framesSinceLastBrickHit:0,targetBrick:null,bouncesSinceTargetSet:0,gameHistory:[],initialColors:[],brickEvents:[],config:void 0};class cn{constructor(t){this.conf=Object.assign({},t)}start(){return t=this,e=void 0,i=function*(){return this.store=JSON.parse(JSON.stringify(An)),this.store.config=Object.assign(Object.assign({},{platform:"github",username:"",svgCallback:t=>{},gameOverCallback:()=>{},gameTheme:"github",pointsIncreasedCallback:t=>{},githubSettings:{accessToken:""}}),this.conf),this.store.contributions=yield K(this.store),g(this.store),m(this.store),yield ln(this.store),this.store},new((n=void 0)||(n=Promise))((function(o,a){function s(t){try{l(i.next(t))}catch(t){a(t)}}function r(t){try{l(i.throw(t))}catch(t){a(t)}}function l(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(s,r)}l((i=i.apply(t,e||[])).next())}));var t,e,n,i}stop(){this.store}}const dn=t=>22*t,hn=t=>22*t+15,un=(t,e,n)=>{var i,o;const a=t.gameHistory.length,s=null!==(o=null===(i=t.initialColors[e])||void 0===i?void 0:i[n])&&void 0!==o?o:"#ebedf0",r=t.cellEvents.filter((t=>t.x===e&&t.y===n));if(0===r.length)return{keyTimes:"0;1",values:`${s};${s}`};const l=[0],A=[s];for(const t of r){const e=Number((t.frameIndex/Math.max(a-1,1)).toFixed(4));e!==l[l.length-1]?(l.push(e),A.push(t.color)):A[A.length-1]=t.color}return 1!==l[l.length-1]&&(l.push(1),A.push(A[A.length-1])),{keyTimes:l.join(";"),values:A.join(";")}},gn=t=>{const e=t.gameHistory.length,n=Math.max(e*o/2,1e3),a=u(t),s=hn(10.5);let r='<svg width="1166" height="259" xmlns="http://www.w3.org/2000/svg">';r+=`<desc>Generated with galaga-contribution-graph on ${new Date}</desc>`,r+='<rect width="100%" height="100%" fill="#000000"/>';{let t=12345;const e=()=>(t=1664525*t+1013904223>>>0,t/4294967295);for(let t=0;t<120;t++){const t=(1166*e()).toFixed(1),n=(.4+1.6*e()).toFixed(1),i=(.3+.7*e()).toFixed(2),o=Math.floor(2500+5500*e());r+=`<circle cx="${t}" cy="0" r="${n}" fill="white" opacity="${i}"><animate attributeName="cy" from="-2" to="261" dur="${o}ms" begin="-${Math.floor(e()*o)}ms" repeatCount="indefinite"/></circle>`}}let l="";for(let e=0;e<i;e++)t.monthLabels[e]!==l&&(r+=`<text x="${22*e+10}" y="10" text-anchor="middle" font-size="10" fill="#aaaaaa">${t.monthLabels[e]}</text>`,l=t.monthLabels[e]);const A=a.intensityColors[0];for(let e=0;e<i;e++)for(let i=0;i<7;i++){const o=dn(e),a=hn(i),s=un(t,e,i);r+=`<rect x="${o}" y="${a}" width="20" height="20" rx="3" fill="transparent">\n\t\t\t\t<animate attributeName="fill" calcMode="discrete" dur="${n}ms" repeatCount="indefinite"\n\t\t\t\t\tvalues="${s.values.split(";").map((t=>t===A?"transparent":t)).join(";")}" keyTimes="${s.keyTimes}"/>\n\t\t\t</rect>`}if(e>=2){const i=(t=>{const e=[],n=new Map;for(let i=0;i<t.gameHistory.length;i++){const o=t.gameHistory[i].bullets.filter((t=>t.active)),a=new Set(o.map((t=>t.id)));for(const[t,o]of n)a.has(t)||(e.push({id:t,x:o.x,startFrame:o.startFrame,endFrame:i-1,yPositions:o.yPositions}),n.delete(t));for(const t of o)n.has(t.id)?n.get(t.id).yPositions.push(t.y):n.set(t.id,{x:t.x,startFrame:i,yPositions:[t.y]})}for(const[i,o]of n)e.push({id:i,x:o.x,startFrame:o.startFrame,endFrame:t.gameHistory.length-1,yPositions:o.yPositions});return e})(t);for(const t of i){const i=dn(t.x),o=Number((t.startFrame/(e-1)).toFixed(4)),a=Number((Math.min(t.endFrame+1,e-1)/(e-1)).toFixed(4));let s,l;o<=0&&a>=1?(s="0;1",l="1;1"):o<=0?(s=`0;${a};${a};1`,l="1;1;0;0"):a>=1?(s=`0;${o};${o};1`,l="0;0;1;1"):(s=`0;${o};${o};${a};${a};1`,l="0;0;1;1;0;0");const A=[],c=[],d=hn(t.yPositions[0]).toFixed(1),h=hn(t.yPositions[t.yPositions.length-1]).toFixed(1);t.startFrame>0&&(A.push(0),c.push(`${i.toFixed(1)},${d}`));for(let n=0;n<t.yPositions.length;n++){const o=t.startFrame+n,a=Number((o/(e-1)).toFixed(4)),s=hn(t.yPositions[n]).toFixed(1);0!==A.length&&a===A[A.length-1]||(A.push(a),c.push(`${i.toFixed(1)},${s}`))}1!==A[A.length-1]&&(A.push(1),c.push(`${i.toFixed(1)},${h}`)),r+=`<image x="-5" y="-13" width="10" height="13" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAACACAMAAACMX59YAAAAIGNIUk0AAHomAACAhAAA+gAAAIDoAAB1MAAA6mAAADqYAAAXcJy6UTwAAAByUExURQAAAP////7+/gBE/wBE/wBE/wBE/wBE/wBE/gBE/gBE/wBE/wBE/gBE/wBE/wBE/gBE/gBE/+cgMfUeJf8AAP8AAP4AAP4AAABE/wBE/hhW/y9m/y9n/yNd/4Sl/73O/7zO//8cHP4cHP8AAP4AAP///6QdcYAAAAAYdFJOUwAAAGbHk4W9hb1genq/3RYcHJPFhb2FvbKPFBsAAAABYktHRAH/Ai3eAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAB3RJTUUH6gUIFjcZmpji7QAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyNi0wNS0wOFQyMjo1NToyNSswMDowMDWlEL0AAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjYtMDUtMDhUMjI6NTU6MjUrMDA6MDBE+KgBAAAAKHRFWHRkYXRlOnRpbWVzdGFtcAAyMDI2LTA1LTA4VDIyOjU1OjI1KzAwOjAwE+2J3gAAAk5JREFUaN7tVotWwyAMnahzvp2PSXxMZ/P/3+ggECija1N2ZDvuWmm17W1y82IyyeH0LIPzyXBMdQYXR4IjwZFATDAD0NoeYE/mT30pITBfNK/ZNx2TyAX3acvjL4QE2r/HFxIXptGHmUEkIkkXx0CmwczIl6KD4OqaccPnWx8BXtc/d9GDN/Twepmc6S5A7x1z3iCgDKJfoFxI7kEI7nrdYkGfWXQZE3DW5e2HrGM5C0Anj3aoATmCyH8XAr5B/05oxRpsYGcEvQ5vJwiFxzUAkDAlBUrpndWAshg09NsCO9TgPxEIamE8wZ5rMIzg7b2FD7t+CgiWJxl8lRJ8DyFwJbdUJ0rFLysm6AsjFFowVgMYQlBswX4TtLcSYAiUD59qhzEJGGwSmF5r80CFFAgW+JZND3ZO5zINYDgBbBFRjbdAV63GLQSqjwAghJMJXB4os7bL2e9C9iWVewlUN8H9g8OcYC8fVxY/qxhPc3rOH4T8Bvq5CUC/vgh26zEBYxQBugOrWVCNYOEVwKAE1nAB2YYxBBh/HQ8uCvUJFi7+VARIVwfmAqcBhmQWWoB1XdhFGNGFcb0cZBjjrszRLLWgkgbovJB2JJfKXIljUjlSEev0RJuArIF0vC84/AYNLX/sQtRIxoRxj4qpXkfiaeIm/J+HcbEDDSiRMRoQNV3AA8yDcgJM/G+EPdE3VUpFd5INV9+JXFMykLmAfjIjmyK0wLUj5NYkJKBx0sKrWIMEchGxsgVNsQVNCYEfLGEySrd5xSK6LArjdUwtDIrCL/JGvSI+ReIgAAAAAElFTkSuQmCC" opacity="0" preserveAspectRatio="xMidYMid meet">\n\t\t\t\t<animate attributeName="opacity" calcMode="discrete" dur="${n}ms" repeatCount="indefinite"\n\t\t\t\t\tkeyTimes="${s}" values="${l}"/>\n\t\t\t\t<animateTransform attributeName="transform" type="translate" calcMode="linear"\n\t\t\t\t\tdur="${n}ms" repeatCount="indefinite"\n\t\t\t\t\tkeyTimes="${A.join(";")}" values="${c.join(";")}"/>\n\t\t\t</image>`}}if(e>=2)for(const i of t.explosionEvents){const t=(dn(i.x)+10).toFixed(1),o=(hn(i.y)+10).toFixed(1),a=Number((i.frameIndex/(e-1)).toFixed(4)),s=Number((Math.min(i.frameIndex+7,e-1)/(e-1)).toFixed(4));if(s<=a)continue;const l=`0;${a};${a};${s};1`,A="0;0;1;0;0",c=`${n}ms`;r+=`<circle cx="${t}" cy="${o}" r="2" fill="none" stroke="${i.color}" stroke-width="3" opacity="0">\n\t\t\t\t<animate attributeName="r" calcMode="linear" dur="${c}" repeatCount="indefinite" keyTimes="${l}" values="2;2;2;20;20"/>\n\t\t\t\t<animate attributeName="stroke-width" calcMode="linear" dur="${c}" repeatCount="indefinite" keyTimes="${l}" values="3;3;3;0;0"/>\n\t\t\t\t<animate attributeName="opacity" calcMode="linear" dur="${c}" repeatCount="indefinite" keyTimes="${l}" values="${A}"/>\n\t\t\t</circle>`;const d=[{dx:0,dy:-11},{dx:0,dy:11},{dx:-11,dy:0},{dx:11,dy:0}];for(const{dx:e,dy:n}of d){const a=(Number(t)+e).toFixed(1),s=(Number(o)+n).toFixed(1);r+=`<circle cx="${t}" cy="${o}" r="2.5" fill="${i.color}" opacity="0">\n\t\t\t\t\t<animate attributeName="cx" calcMode="linear" dur="${c}" repeatCount="indefinite" keyTimes="${l}" values="${t};${t};${t};${a};${a}"/>\n\t\t\t\t\t<animate attributeName="cy" calcMode="linear" dur="${c}" repeatCount="indefinite" keyTimes="${l}" values="${o};${o};${o};${s};${s}"/>\n\t\t\t\t\t<animate attributeName="r" calcMode="linear" dur="${c}" repeatCount="indefinite" keyTimes="${l}" values="2.5;2.5;2.5;0;0"/>\n\t\t\t\t\t<animate attributeName="opacity" calcMode="linear" dur="${c}" repeatCount="indefinite" keyTimes="${l}" values="${A}"/>\n\t\t\t\t</circle>`}}const c=t.gameHistory.map((t=>`${dn(t.ship.x).toFixed(1)},${s.toFixed(1)}`)),d=((t,e)=>{var n,i,o,a;const s=t.gameHistory.length;if(0===s){const t=null!==(n=e[0])&&void 0!==n?n:"0,0";return{keyTimes:"0;1",values:`${t};${t}`}}const r=[],l=[];let A=null,c=null;return e.forEach(((t,e)=>{t!==A&&(null!==A&&null!==c&&e-1!==c&&(r.push(Number(((e-1)/(s-1)).toFixed(4))),l.push(A)),r.push(Number((e/(s-1)).toFixed(4))),l.push(t),A=t,c=e)})),0!==r.length&&1===r[r.length-1]||(0===r.length?(r.push(0,1),l.push(null!==(i=e[0])&&void 0!==i?i:"0,0",null!==(o=e[e.length-1])&&void 0!==o?o:"0,0")):(r.push(1),l.push(null!==(a=null!=A?A:e[e.length-1])&&void 0!==a?a:"0,0"))),{keyTimes:r.join(";"),values:l.join(";")}})(t,c);return r+=`<image x="-16" y="-35" width="32" height="35" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABGCAYAAAB8MJLDAAAAIGNIUk0AAHomAACAhAAA+gAAAIDoAAB1MAAA6mAAADqYAAAXcJy6UTwAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAHdElNRQfqBQgWJQn/24JaAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDI2LTA1LTA4VDIyOjM1OjQ2KzAwOjAwKpfJ5AAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyNi0wNS0wOFQyMjozNTo0NiswMDowMFvKcVgAAAAodEVYdGRhdGU6dGltZXN0YW1wADIwMjYtMDUtMDhUMjI6Mzc6MDkrMDA6MDB6KP6pAAANdklEQVR42u2cW6wdVRnH/2vNfc++HYFKe7S0FQEDaEKjlEhaHyRi0xJJrCKpDyZo0EQu8kBTSwhJjSca0fhQNVFiYiMJiQqxtEAoD4fQRHIk1YJFsWAqtJyc0rP3zJ7Zc1uzfNhnrTN7z+zL2WdTovglO/md6VzWrPn+6/vWreCcw/d9nD9/HoIXFxdz7HkeGo1GjlutVhc3m80cu64Lx3Fy7DhOF7uum+Nms4lWq5XjRqPRxZ7n5XhxcRG+7+f4/Pnzkonv+yCEAEDnwPuMaRAEAADDMDCICSHQdT3HlFJomjaQFUWBqqo5VlW1ixVFybGmaaCUDmRd10EIybFhGAAwkAnnHO12G0EQYGpqCu12G2EYol6vd7Hv+4jjGLVarYs9z0OSJJIZY6hWq10sXLVSqUg2dR1xFAEAVF1HGEUghKBcLsN1XcmO40BRFNi23cXNZhOqqkrWNA2lUqmLG40GDMOAZVldvLi4CNM0YVnWhZXAfffdxw8dOgQA2LtnD766ezcBgN8//jj/7r59AIDbbrsNDz30ELlgEgjDULp6Eeu6jjAMpdv3snD1QSzcfn5+HqdPn8bp06fhOA6Eea2WPL6wsCAlEIahdPVBLNy+iAEgDEPp9r1M6/W6bD0FN5tNyY7joF6vgzEG13VzHMcxWq2WZM/zchyGIdrttizQINN1vUt6nuchjuMct1otya7rgjGWYxFh6vW6jEj1el1GrXq9DrXdboMQAsuyINg0zRxTSmEYRo4VRYGiKANZVVUAAGNsaAUwxqBpGgB0VVovi684iE3TLGTLsiSPLQHh3lnulYCqql0SGLUCshJQVbWvBISrZ/mCSUC4fZIkfSXg+/6qJSAiTpEEkiSR/D8jgSRJ3nsJCFeflAQEj1IBaZp2uf2kJNBPDoUSEG4/KQlEUbRiCURRNFEJZLlLAr7vg1KKUqkEwZZlSTZNU7JhGDkWrt6PH374YX7ixAkAwIsvvji0AmZnZ3HXXXdxANi8eTPuuOMOAgC+78sK9H1ffsVBLNze931YliU7eKVSSbIaRRFM04SmaVIrWdZ1HY7jwLIsqKoK13X7cqlUAqUUrVZL8uHDh3H06NGhLy7s5MmTOHnyJADg3LlzuPPOO5GmKYIgQLlcllypVJAkCaIo6svVahVRFA1kVeT8zWZT9gWE22fZ930EQZBjz/O62PM8hGHI5+fnwRgD51y+3Lp162AtfZVarSaPVyoVbNy0CQAQRRHeevNNAICmadKbhBsLFn0BwZqm5Vjk/70s+gL1eh3E8zxQSkEIAWNs1fzGG2/w/fv3w/d9pGmKZ599Fr7vAwAOHzqEbVu3kt6vzjgQLVXUKy+/zLfd+GkAwM6dO/HYY48R0ThSSmVDqSgKOOerZjWOYxiGIbuu/dg0Tdl17ceWZUHXdTz33HN4++23R3b7fsY5h6qqSNMUYRjCtm3JhmEgSRKI8hexaZqIomgg01qtJpMfwY7j5Fi0/L0sokCtVpP9AtHbWq0JCRR1w0UUEMwYy7Fo+XtZJEW1Wm14FOgXEQSLNFfw+vXrSbVa5WfPns29UMQ5gpTnjvM+FZAkCQzDkC12lk3THMrZlr9fFKBxHMvaLmJVVRHHMQghfVlRlI47UYpKpYLZ2VmysLBA3nnnHbJt27bcy/b+BklAURRQShHHcY4JIYjjGKqq9mUAiONYZpe9PFQCrusOlYDneVICvu9jzZo1MjyKWDxpCWRHovpJQAysTkwCqqri0Ucf5WmaAgAopSjiLVu2YHp6moya/vazrAReeeUVfvz48YHPpZTi1ltvlYnTKBIojAKiVc+yaDlvv/32oQV/8MEHsXfvXlBKu/KAlZqQQJqmmJmZwcGDB4deIzpx4r3iOM7x0Cgg3L5XAq7rjvQ2pmlKOQgdjmNZCQjdDrN+EshylwQ8z5MjrYItyyrkUqlEsNRu3QQTN6PTrfTB8T00ESw1aaKRmqQEkiSRx0sg2IMabHTC7SxCPIFOsmVZFiil8DxPun0vi3zC8zyoSZLk+vH9xvAVRZGF2AID30FV/v0zuDiDzstmM8TVSkDIqCulhoIHsJxKK3BkBYjokCSJ9MQiTtMUSZIsS6Co5V+tBLKDIeOY6JRNWgLZiEA9zwMhREqAEIJSqZTjpUgxUooXRREURYFhGBORgKIoXRIYZFkJlEolEEJybNu2ZCoKqCgKRuFRTLjuJKLASu8jysgYG4lptVqVEhDsum6O0zQdWQIi5LxXEkjTFNVqVbp9LwsJVKvV5Sig6zrOnj0ra7yIs27IP1BHetEGAABhKfCvM0Da8RQhgXcrCnBKwTesB1c63WPeeAtYWBTP5owxIsYLwjBEo9Ho4lqtJiWgCpc4cuQI37Vr1+iFu+PLCPbtk20Cv/JKjqUOkJh/m5QE0jTtug/f8CG0jz8pnx0fOMCxZw8AYHp6GhjcxcDTTz+NrVu3ki4JtNvtsQvaa6JPPikJZIfKJ2FicUSXBMRg4iQsiiI59z8JCQielJmmmZeAGG6qgGAeH5Yn/xMJPo4zK3rA/v37MTMzw0VljGuHDx/G1NTU2Pd5DdOYxnLkuhxv4QyYfFfGGNRqtYp2u52RAIGF5XBvYuWjO6LTsVpjjK1KmlbPuwjKSoCKIazV9Nv/20xIoNVqQRV96UmN433w0ktx6MgREEJz//bhtZcSg+afwzhHstRuf/SKK8jc8b/kWnGepvjyri/i9VOnVl3G7OhygQRWZ4auY+PGTYW1aRACWnCcQ3Yyoes6NmzYUHi9ZVnjx9SMve8lYFnWsgREgiElYOiIHrpfnhyTBLj/rrEfpmWklVWZ8sejXHlhDgCQbL4W/IvbC796vIpEKvrJA4iCTBj+/l6g2ehaJKVWKpUuCXBNRfKt3bIw7NQpjvtX9uCsqX2aFuWFOagHloa4dn8B6a7thefFq3B6dvM2JOvWLWerP93P0WxICVQqlf9LIC+BMez1xYinN+9FNQhQvqjS9zzl6AuczJ/rPO/V1+Vx+vppqL99ggMAr9fAtn+msDD2zfeieu15BHYJr54L+VUXG2MVeqAExrFT50OwDZ+CDkCr9s/Z1R8/AmU2v0aAHnsJ+rGXAADpNVeAbf9M4fXaxs3QKyEiAH9bCHDVxeOl7/+XQJEEVmrnfIaTCyEHgEaQ4mOXdL7GGnu0Xhtfuwb8oikAAFlsgrw1fDZ505QOkUd5USqfP++N11HqkoBYHT6q/fbEIh4/2NHxTR+p4KndneSHA4UToL0W3/01GW3Ug49z/VsPDL3mwI4Pyfzy3qfO8H3PdSqtPffOisrebreXJSBWZr8fJeC6LlY0WnHtNddg544dAIDj2lX485I/0lHbYoUC6lL3NHsRIcvHRxx4pQRQlu5x/Sc/iS2f6IwIHXrySfx1aVHWKLYiCXx3717s3LGjs2SFAywVIXS0h4W/+zkBT3MvmnxlJ0m+JBKh0W72g5vWkpnPru1UBr0SCul8mBtvvJFvX/pI/SwrAdV1XWiaNpIEsrkCJQBVVhiGVQVAwRemtPNbgSmUYDRfyVuXBIYlQNVaDd/4+tcBABsuu2zMR144m163TpbXtu2B5xJCoJbL5YESuOTii8mPf/SjkQtA317gtdvvln9Hh35FULLGe5uEofb5r3GwTpiLfzkDvmn9wC92+eWXDy2vkEC5XF6WgFhAvGqLIqhzy41QnDCM3Z/hHOpLJ4C4UwGJH4x/r4yJaTLXdUGzefH7xbL9n5wEwjDE3ffcs6La+Dh0fBNLnaCW964VXPvhL8Cn6hwAfo0W/oRwRdc3Gw0AQyQQxzF++cgjK7rxLSjh27jkXXtxYcofnpE8i3P4Dcar7KwEZBSo1+u44YYbkKapXLMvpqTEOp0sp2mKubm591w6qqriuuuuk1NxjLFCTpJEznVWKh1v7ZLA5s2bybFjx0beOBkEAdauXcuHTVg8ffBR/m8zH7G3XH89rr76agIA/3jtNf7888/nztmYUuxYGrXuZ9VqFc888wxZ6cZJIQE0m005BT0qB0EgtqlyAPwWlDjHZYW/z8EqWhvJfzAzwz3Hgec4+PmBA4Xn3Drgvl+FzQHwqakpHkURgiBAs9mU0/KjsirGyMVMLJBfmd3LvWt2BtlqBDLqtaI8g9YPZlmUnVK6LIFWqyX3C4itLln2fR9hGHZJQFgDKV7s0yL/HeNPkc0h7Hvfc1ie0Gm329A0DeVyWUqgXC5Lt+9lsV+gXC5DdRwHuq7LlRO6rstNy70sNjAbhtGVZs4iwPVY/fL4XnsTbOh9OeewbRuMMTiOA9u2kSQJHMdBuVwu5Gq1ijiO4TgO1KK1M2JTQT8WLlcul8ee/dUyG6hUVe00SGOY2EaTjVAABnJ2zdN7tn3e0HUkYvu8piFcWnl+wbfPN5tN6LoOTdPgeV6OxV6ALIula0VMKZUbGAWL2dgiBiB3m3DOC1nsEslyqVQCY6yQxaapLNu2jTiOc6wOW0rWTwJZFucP2p8jXLSXh7lrv2RMbMgqOmeY22eZ2rbdtYZWLCPv5TRN0W63c8wYQxAEksXeniwX1bxt23LrmuA4jnMchiEYYzkOgkByu91GmqY5FuP/vSz+kxXbtvEfwITwAX3FN6kAAAAASUVORK5CYII=" preserveAspectRatio="xMidYMid meet">\n\t\t<animateTransform attributeName="transform" type="translate" calcMode="linear"\n\t\t\tdur="${n}ms" repeatCount="indefinite"\n\t\t\tkeyTimes="${d.keyTimes}"\n\t\t\tvalues="${d.values}"/>\n\t</image>`,r+="</svg>",r};const mn=["NONE","FIRST_QUARTILE","SECOND_QUARTILE","THIRD_QUARTILE","FOURTH_QUARTILE"],fn=t=>{const e=mn.indexOf(t);return mn[Math.max(0,e-1)]},pn=()=>Math.floor(5*Math.random())+4,yn=t=>t.grid.some((t=>t.some((t=>t.commitsCount>0)))),xn=(t,e=-1)=>{const n=Math.round(t.ship.x-.5),o=e=>t.grid[e].reduce(((t,e)=>{var n;return t+(null!==(n={NONE:0,FIRST_QUARTILE:1,SECOND_QUARTILE:2,THIRD_QUARTILE:3,FOURTH_QUARTILE:4}[e.level])&&void 0!==n?n:0)}),0);for(let t=3;t<=i;t++){let a=-1,s=0;for(let r=-t;r<=t;r++){const t=n+r;if(t<0||t>=i)continue;if(t===e)continue;const l=o(t);l>s&&(s=l,a=t)}if(-1!==a)return a}for(let n=0;n<i;n++)if(n!==e&&t.grid[n].some((t=>t.commitsCount>0)))return n;return Math.floor(26.5)},vn=t=>{var e;t.frameCount++;const{grid:n,ship:o}=t,a=u(t);for(const e of t.bullets){if(!e.active)continue;if(e.y-=.6,e.y<-1){e.active=!1;continue}const o=Math.round(e.x-.5),s=Math.floor(e.y);if(o>=0&&o<i&&s>=0&&s<7&&n[o][s].commitsCount>0){const i=n[o][s].color,r=fn(n[o][s].level);n[o][s].level=r,n[o][s].color=a.intensityColors[mn.indexOf(r)],"NONE"===r&&(n[o][s].commitsCount=0,t.explosionEvents.push({frameIndex:t.gameHistory.length,x:o,y:s,color:i})),t.cellEvents.push({frameIndex:t.gameHistory.length,x:o,y:s,color:n[o][s].color}),t.config.pointsIncreasedCallback(t.cellEvents.length),e.active=!1}}t.bullets=t.bullets.filter((t=>t.active)),(null===(e=n[t.currentTargetCol])||void 0===e?void 0:e.some((t=>t.commitsCount>0)))||(t.currentTargetCol=xn(t),t.framesShootingAtTarget=0);const s=t.currentTargetCol,r=s+.5,l=r-o.x;Math.abs(l)>.4?o.x+=.4*Math.sign(l):o.x=r,o.x=Math.max(.8,Math.min(52.2,o.x));const A=Math.abs(o.x-r)<.5,c=n[s].some((t=>t.commitsCount>0));A&&c&&(t.framesShootingAtTarget>=t.framesAllowedForTarget?(t.currentTargetCol=xn(t,s),t.framesShootingAtTarget=0,t.framesAllowedForTarget=pn()):(t.frameCount%2==0&&t.bullets.length<10&&t.bullets.push({id:t.nextBulletId++,x:r,y:9.5,active:!0}),t.framesShootingAtTarget++)),(t=>{t.gameHistory.push({ship:{x:t.ship.x},bullets:t.bullets.map((t=>Object.assign({},t)))})})(t)},bn=t=>{return e=void 0,n=void 0,o=function*(){if(t.frameCount=0,t.nextBulletId=0,t.gameHistory=[],t.cellEvents=[],t.explosionEvents=[],t.bullets=[],t.grid=f(t),t.initialColors=t.grid.map((t=>t.map((t=>t.color)))),!yn(t)){const e=gn(t);return t.config.svgCallback(e),void t.config.gameOverCallback()}for(t.ship={x:26.5},t.currentTargetCol=xn(t),t.framesShootingAtTarget=0,t.framesAllowedForTarget=pn();yn(t)&&t.frameCount<3e3;)vn(t);const e=gn(t);t.config.svgCallback(e),t.config.gameStatsCallback&&t.config.gameStatsCallback({totalScore:t.cellEvents.length,steps:t.frameCount,ghostsEaten:0}),t.config.gameOverCallback()},new((i=void 0)||(i=Promise))((function(t,a){function s(t){try{l(o.next(t))}catch(t){a(t)}}function r(t){try{l(o.throw(t))}catch(t){a(t)}}function l(e){var n;e.done?t(e.value):(n=e.value,n instanceof i?n:new i((function(t){t(n)}))).then(s,r)}l((o=o.apply(e,n||[])).next())}));var e,n,i,o},Cn={frameCount:0,nextBulletId:0,contributions:[],ship:{x:0},bullets:[],grid:[],monthLabels:[],gameHistory:[],initialColors:[],cellEvents:[],explosionEvents:[],currentTargetCol:-1,framesShootingAtTarget:0,framesAllowedForTarget:4,config:void 0};class wn{constructor(t){this.conf=Object.assign({},t)}start(){return t=this,e=void 0,i=function*(){return this.store=JSON.parse(JSON.stringify(Cn)),this.store.config=Object.assign(Object.assign({},{platform:"github",username:"",svgCallback:t=>{},gameOverCallback:()=>{},gameTheme:"github",pointsIncreasedCallback:t=>{},githubSettings:{accessToken:""}}),this.conf),this.store.contributions=yield K(this.store),g(this.store),m(this.store),yield bn(this.store),this.store},new((n=void 0)||(n=Promise))((function(o,a){function s(t){try{l(i.next(t))}catch(t){a(t)}}function r(t){try{l(i.throw(t))}catch(t){a(t)}}function l(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(s,r)}l((i=i.apply(t,e||[])).next())}));var t,e,n,i}stop(){this.store}}const Bn=Math.max(1,Math.ceil(5.999999999999999)),kn=t=>22*t,En=t=>22*t+24,Mn=t=>{switch(t){case 1:return"#1f4acc";case 2:return"#1b7f37";case 3:return"#b01e1e";case 4:return"#5b2ca3";case 5:return"#7d1a1a";case 6:return"#00838f";case 7:return"#111111";default:return"#495057"}},Rn=(t,e,n,i)=>t.snapshots[Math.min(e,t.snapshots.length-1)].board[n][i],Un=(t,e,n,i,o,a)=>{const s=[];for(let r=0;r<t.snapshots.length;r++){const l=Rn(t,r,e,n);l.exploded||l.highlightMine?s.push(a):l.revealed?s.push(o):s.push(i)}return s},Sn=(t,e,n)=>{const i=[];for(let o=0;o<t.snapshots.length;o++){const a=Rn(t,o,e,n);i.push(a.flagged?"1":"0")}return i},In=(t,e,n)=>{const i=[];for(let o=0;o<t.snapshots.length;o++){const a=Rn(t,o,e,n);i.push(a.exploded||a.showMine?"1":"0")}return i},Dn=(t,e,n,i)=>{const o=[],a=[{x:0,y:0},{x:1.3,y:-1.1},{x:-1.2,y:1.1},{x:.9,y:.6},{x:0,y:0}];for(let s=0;s<t.snapshots.length;s++){if(!Rn(t,s,e,n).exploded){o.push("translate(0 0)");continue}let r=0,l=0;for(const t of i){const e=s-t;e>=0&&e<a.length&&(r+=a[e].x,l+=a[e].y)}o.push(`translate(${r.toFixed(2)} ${l.toFixed(2)})`)}return o},Tn=(t,e,n,i)=>{const o=[];for(let a=0;a<t.snapshots.length;a++){if(!Rn(t,a,e,n).exploded){o.push("0");continue}const s=i.some((t=>a>=t&&a<t+4));o.push(s?"1":"0")}return o},On=(t,e,n)=>{var i;const o=[];for(let a=0;a<t.snapshots.length;a++){const s=Rn(t,a,e,n),r=null!==(i=s.showNumber)&&void 0!==i?i:s.revealed&&s.adjacentMines>0;o.push(r?"1":"0")}return o},Vn=(t,e,n)=>{const i=[];for(let o=0;o<t.snapshots.length;o++){const a=Rn(t,o,e,n);i.push(String(a.adjacentMines))}return i},Nn=(t,e)=>{const n=t.snapshots.length;if(n<=1)return null;let i=[],o=[],a=null,s=null;return e.forEach(((t,e)=>{t!==a&&(null!==a&&null!==s&&e-1!==s&&(i.push(Number(((e-.1)/(n-1)).toFixed(4))),o.push(a)),i.push(Number((e/(n-1)).toFixed(4))),o.push(t),a=t,s=e)})),0===i.length?null:(1!==i[i.length-1]&&(i.push(1),o.push(a||e[e.length-1])),{keyTimes:i.join(";"),values:o.join(";")})};var Qn=function(t,e,n,i){return new(n||(n=Promise))((function(o,a){function s(t){try{l(i.next(t))}catch(t){a(t)}}function r(t){try{l(i.throw(t))}catch(t){a(t)}}function l(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(s,r)}l((i=i.apply(t,e||[])).next())}))};const Yn=(t,e)=>{const n=[];for(let o=-1;o<=1;o++)for(let a=-1;a<=1;a++){if(0===o&&0===a)continue;const s=t+o,r=e+a;s<0||s>=i||r<0||r>=7||n.push({x:s,y:r})}return n},Fn=t=>t.map((t=>t.map((t=>Object.assign({},t))))),Hn=(t,e)=>{for(const n of t)for(const t of n)e(t)},Gn=(t,e)=>{let n=0;return Hn(t,(t=>{e(t)&&n++})),n},jn=(t,e)=>{const n=[];return Hn(t,(t=>{e(t)&&n.push(t)})),n},Kn=(t,e=t.board)=>{t.snapshots.push({board:Fn(e),mouse:Object.assign({},t.mouse)}),t.frameCount=t.snapshots.length-1},Jn=(t,e,n)=>Yn(e,n).map((e=>t.board[e.x][e.y])).filter((t=>!t.revealed&&!t.flagged)),Pn=(t,e,n)=>Yn(e,n).map((e=>t.board[e.x][e.y])).filter((t=>t.flagged||t.exploded)).length,Ln=t=>jn(t.board,(()=>!0)).every((t=>t.isMine&&(t.flagged||t.exploded)||t.revealed)),zn=t=>{const e=(t=>{for(let e=0;e<i;e++)for(let n=0;n<7;n++){const i=t.board[e][n];if(!i.revealed)continue;const o=Jn(t,e,n);if(0===o.length)continue;const a=Pn(t,e,n),s=Math.max(i.adjacentMines-a,0);if(s===o.length){const t=o[0];return{x:t.x,y:t.y,type:"flag",probability:1}}if(0===s){const t=o[0];return{x:t.x,y:t.y,type:"reveal",probability:0}}}return null})(t),n=null!=e?e:(t=>{var e,n;const o=jn(t.board,(t=>!t.revealed&&!t.flagged));if(0===o.length)return null;const a=(t=>{var e;const n=new Map,o=new Set,a=jn(t.board,(t=>!t.revealed&&!t.flagged));if(0===a.length)return n;const s=Gn(t.board,(t=>t.flagged)),r=Math.max(0,(t.totalMines-s)/a.length);for(const t of a)n.set(`${t.x}:${t.y}`,r);for(let a=0;a<i;a++)for(let i=0;i<7;i++){const s=t.board[a][i];if(!s.revealed)continue;const l=Jn(t,a,i);if(0===l.length)continue;const A=Pn(t,a,i),c=Math.max(s.adjacentMines-A,0)/l.length;for(const t of l){const i=`${t.x}:${t.y}`;o.add(i);const a=null!==(e=n.get(i))&&void 0!==e?e:r;n.set(i,Math.max(a,c))}}for(const t of a){const e=`${t.x}:${t.y}`;o.has(e)||n.set(e,r)}return n})(t);let s=o[0],r=null!==(e=a.get(`${s.x}:${s.y}`))&&void 0!==e?e:.5;for(const t of o){const e=null!==(n=a.get(`${t.x}:${t.y}`))&&void 0!==n?n:.5;(e<r||e===r&&t.adjacentMines<s.adjacentMines)&&(s=t,r=e)}return{x:s.x,y:s.y,type:"reveal",probability:Math.min(Math.max(r,0),1)}})(t);return!!n&&(((t,e,n)=>{const i=t.mouse.x,o=t.mouse.y,a=e-i,s=n-o,r=Math.hypot(a,s);if(0===r)return;const l=Math.max(1,Math.ceil(2*r)),A=Math.min(l,Bn);for(let e=1;e<=A;e++){const n=e/A;t.mouse.x=i+a*n,t.mouse.y=o+s*n,Kn(t)}})(t,n.x,n.y),"flag"===n.type?((t,e,n)=>{const i=t.board[e][n];i.revealed||i.flagged||(i.flagged=!0,t.flagsPlaced++,t.actions.push({frameIndex:t.frameCount,type:"flag",x:e,y:n,adjacentMines:i.adjacentMines,probability:1}))})(t,n.x,n.y):((t,e,n,i,o)=>{const a=t.board[e][n];if(a.revealed||a.flagged)return;if(a.isMine)return a.revealed=!0,a.guessed=i,a.exploded=!0,t.explodedMines++,void t.actions.push({frameIndex:t.frameCount,type:"explode",x:e,y:n,adjacentMines:a.adjacentMines,probability:o});const s=[{x:e,y:n}],r=new Set;for(;s.length>0;){const a=s.shift(),l=`${a.x}:${a.y}`;if(r.has(l))continue;r.add(l);const A=t.board[a.x][a.y];if(!(A.revealed||A.flagged||A.isMine)&&(A.revealed=!0,A.guessed=a.x===e&&a.y===n&&i,t.clearedSafeCells++,t.actions.push({frameIndex:t.frameCount,type:"reveal",x:a.x,y:a.y,adjacentMines:A.adjacentMines,probability:o}),0===A.adjacentMines))for(const e of Yn(a.x,a.y)){const n=t.board[e.x][e.y];n.revealed||n.flagged||n.isMine||s.push(e)}}})(t,n.x,n.y,!e,n.probability),t.config.pointsIncreasedCallback(t.clearedSafeCells),Kn(t),!0)},Wn=t=>Qn(void 0,void 0,void 0,(function*(){(t=>{t.frameCount=0,t.actions=[],t.snapshots=[],t.flagsPlaced=0,t.clearedSafeCells=0,t.explodedMines=0,t.mouse={x:Math.floor(26.5),y:Math.floor(3.5)},(t=>{t.board=Array.from({length:i},((e,n)=>Array.from({length:7},((e,i)=>{var o,a;return{x:n,y:i,isMine:(null===(a=null===(o=t.grid[n])||void 0===o?void 0:o[i])||void 0===a?void 0:a.commitsCount)>0,adjacentMines:0,revealed:!1,flagged:!1,exploded:!1,guessed:!1}}))));for(let e=0;e<i;e++)for(let n=0;n<7;n++)t.board[e][n].adjacentMines=Yn(e,n).filter((e=>t.board[e.x][e.y].isMine)).length;t.totalMines=Gn(t.board,(t=>t.isMine))})(t),Kn(t)})(t);let e=0;for(;!Ln(t)&&e<1113&&zn(t);)e++;(t=>{const e=(t=>{const e=Fn(t.board);for(const t of e)for(const e of t){e.showNumber=!1;const t=e.isMine&&!e.flagged;e.showMine=t,e.highlightMine=t,t&&(e.flagged=!1)}return e})(t);for(let n=0;n<12;n++)Kn(t,e)})(t);const a=(t=>{const e=u(t),a=Math.max(t.snapshots.length,1),s=Math.max(a*o/1.2,5e3),r=e.intensityColors[0],l="#ffffff"===e.gridBackground?"#d7dde5":"#2b3642",A=(t=>{const e=[];for(let n=1;n<t.snapshots.length;n++){let o=!1;for(let e=0;e<i&&!o;e++)for(let i=0;i<7;i++){const a=t.snapshots[n-1].board[e][i],s=t.snapshots[n].board[e][i];if(!a.exploded&&s.exploded){o=!0;break}}o&&e.push(n)}return e})(t);let c='<svg width="1166" height="178" xmlns="http://www.w3.org/2000/svg" shape-rendering="geometricPrecision" color-interpolation="sRGB">';c+=`<rect width="100%" height="100%" fill="${e.gridBackground}"/>`,c+=(t=>{var e;let n="",o="";const a=u(t);for(let s=0;s<i;s++){const i=null!==(e=t.monthLabels[s])&&void 0!==e?e:"";i&&i!==o&&(n+=`<text x="${kn(s)+10}" y="16" text-anchor="middle" font-size="10" fill="${a.textColor}">${i}</text>`,o=i)}return n})(t);for(let o=0;o<i;o++)for(let i=0;i<7;i++){const a=t.board[o][i],d=Un(t,o,i,r,l,"#f28b82"),h=Nn(t,d),u=Nn(t,Sn(t,o,i)),g=Nn(t,In(t,o,i)),m=Nn(t,Tn(t,o,i,A)),f=Nn(t,Dn(t,o,i,A)),p=Nn(t,On(t,o,i)),y=Nn(t,Vn(t,o,i));c+=`<g id="cell-${o}-${i}">`,c+=`<rect x="${kn(o)}" y="${En(i)}" width="20" height="20" rx="3" fill="${d[0]}" stroke="${e.wallColor}" stroke-opacity="0.18">`,h&&(c+=`<animate attributeName="fill" calcMode="discrete" dur="${s}ms" repeatCount="indefinite" keyTimes="${h.keyTimes}" values="${h.values}"/>`),c+="</rect>",c+=`<text x="${kn(o)+10}" y="${En(i)+.68*n}" text-anchor="middle" font-size="12" font-weight="700" font-family="Verdana, sans-serif" fill="${Mn(a.adjacentMines)}" opacity="0">${a.adjacentMines}`,y&&(c+=`<animate attributeName="textContent" calcMode="discrete" dur="${s}ms" repeatCount="indefinite" keyTimes="${y.keyTimes}" values="${y.values}"/>`),p&&(c+=`<animate attributeName="opacity" calcMode="discrete" dur="${s}ms" repeatCount="indefinite" keyTimes="${p.keyTimes}" values="${p.values}"/>`),c+="</text>",c+='<g opacity="0">',u&&(c+=`<animate attributeName="opacity" calcMode="discrete" dur="${s}ms" repeatCount="indefinite" keyTimes="${u.keyTimes}" values="${u.values}"/>`),c+=`<line x1="${kn(o)+.34*n}" y1="${En(i)+4.8}" x2="${kn(o)+.34*n}" y2="${En(i)+.78*n}" stroke="${e.wallColor}" stroke-width="1.4"/>`,c+=`<polygon points="${kn(o)+.36*n},${En(i)+.28*n} ${kn(o)+.72*n},${En(i)+8.6} ${kn(o)+.36*n},${En(i)+.56*n}" fill="#d94841"/>`,c+="</g>",c+='<g opacity="0" transform="translate(0 0)">',m?c+=`<animate attributeName="opacity" calcMode="discrete" dur="${s}ms" repeatCount="indefinite" keyTimes="${m.keyTimes}" values="${m.values}"/>`:g&&(c+=`<animate attributeName="opacity" calcMode="discrete" dur="${s}ms" repeatCount="indefinite" keyTimes="${g.keyTimes}" values="${g.values}"/>`),f&&(c+=`<animateTransform attributeName="transform" type="translate" calcMode="discrete" dur="${s}ms" repeatCount="indefinite" keyTimes="${f.keyTimes}" values="${f.values.replace(/translate\(|\)/g,"")}"/>`),c+=`<circle cx="${kn(o)+10}" cy="${En(i)+10}" r="${.18*n}" fill="#202124"/>`,c+=`<line x1="${kn(o)+10}" y1="${En(i)+3.2}" x2="${kn(o)+10}" y2="${En(i)+16.8}" stroke="#202124" stroke-width="1"/>`,c+=`<line x1="${kn(o)+3.2}" y1="${En(i)+10}" x2="${kn(o)+16.8}" y2="${En(i)+10}" stroke="#202124" stroke-width="1"/>`,c+=`<line x1="${kn(o)+4.8}" y1="${En(i)+4.8}" x2="${kn(o)+15.2}" y2="${En(i)+15.2}" stroke="#202124" stroke-width="1"/>`,c+=`<line x1="${kn(o)+4.8}" y1="${En(i)+15.2}" x2="${kn(o)+15.2}" y2="${En(i)+4.8}" stroke="#202124" stroke-width="1"/>`,c+="</g>",c+="</g>"}const d=Nn(t,(t=>{const e=[];for(const n of t.snapshots)e.push(`${kn(n.mouse.x)+3} ${En(n.mouse.y)+3}`);return e})(t));return c+=`<g transform="translate(${kn(t.mouse.x)+3} ${En(t.mouse.y)+3})">`,d&&(c+=`<animateTransform attributeName="transform" type="translate" calcMode="linear" dur="${s}ms" repeatCount="indefinite" keyTimes="${d.keyTimes}" values="${d.values}"/>`),c+='<path d="M0 0 L8 4 L4 5.5 L6.3 10.5 L4.8 11.3 L2.5 6.2 L0.7 8 Z" fill="#f7f7f7" stroke="#111" stroke-width="0.8"/>',c+="</g>",c+="</svg>",c})(t);t.config.svgCallback(a),t.config.gameStatsCallback&&t.config.gameStatsCallback({totalScore:t.clearedSafeCells,steps:t.frameCount,ghostsEaten:t.explodedMines}),t.config.gameOverCallback()})),Xn={contributions:[],grid:[],monthLabels:[],config:void 0,gameInterval:0,frameCount:0,board:[],actions:[],snapshots:[],mouse:{x:0,y:0},totalMines:0,flagsPlaced:0,clearedSafeCells:0,explodedMines:0};class Zn{constructor(t){this.conf=Object.assign({},t)}start(){return t=this,e=void 0,i=function*(){return this.store=JSON.parse(JSON.stringify(Xn)),this.store.config=Object.assign(Object.assign({},{platform:"github",username:"",svgCallback:t=>{},gameOverCallback:()=>{},gameTheme:"github",pointsIncreasedCallback:t=>{},githubSettings:{accessToken:""}}),this.conf),this.store.contributions=yield K(this.store),g(this.store),m(this.store),yield Wn(this.store),this.store},new((n=void 0)||(n=Promise))((function(o,a){function s(t){try{l(i.next(t))}catch(t){a(t)}}function r(t){try{l(i.throw(t))}catch(t){a(t)}}function l(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(s,r)}l((i=i.apply(t,e||[])).next())}));var t,e,n,i}stop(){var t;t=this.store,Qn(void 0,void 0,void 0,(function*(){clearInterval(t.gameInterval)}))}}const qn="yellow",$n={blinky:{up:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABiklEQVR4nIXSO2sVURQF4G8mMwa8QU2KxFcjCoIgacR/oCBYCP4fsTEIBkWwEK21UAQLIdjYaKEiJIXBXhNBCFaSeDP3zLa4mdyj5rHgwNmPtffZ62z+Q4miKHlWs3yALwUvKYphbC8UjDN3nIUB/SCCSDRnWKiZVxTFrvxp5kMRHbEltaTODuIED3YkT3FnUy+uS815qQkzMSJOxAWpuSo1A72Y4f5f5DFuBpE+vmsmZ9ukF9Eu/xwV+Pw1TEYcOtum9GmxCaLmdl7jeRDp968mcnQFMqS02bSkMV5tS36UBL6t7ixO6o/uK6sKymM0Q9l5NKC/Ldb3lWGrqenRCw73hr61H9viDujjKbztnLnae50uF4sl1nf91/2xvt9q7YuyEwKCNg+2DFoGue/fnHLoGwbyZQ/akqqkykkFZW6XmNy6VJdYyhPP8eE07/PCl1kqqbbMI3BrjY1rvMH4SW4kmou86Eac5UmiOcUcxq/wep2NirugYh4TXfOah6izUauax5leB2vuwR+e2vAshd8i9AAAAABJRU5ErkJggg==",down:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABmUlEQVR4nHXTT0tUYRQG8N97/TOloSYpYv/BNlLYqqJli1Z9gz5SOwkKgpDaRBS5CKJ2fYFWrsyNZWKSOYliw8y9p8XMHa+Tc+ByOec8z/M+7z3nJidHwhtc7ORreIjog29H1iYunmc5iPIpyGd5h0cd8ZNPvcLzXmJBXq1N8/g/kSSlyywFkdPMaVZJvfVZnkhHImmSZyWol9jrqMSMsti5tmhwJyhSO+8bZT8ogrulQDbDQZe8/ZPt38eZA9jbZ2OjKzTFPpJxPrdoBFFsruVRxq+tI/v1nW45vn2NIFo0TvMxTdLcYRBt+DHPne/Up36GvaygDn+p17+srp+d59S1KHyvXOPHgaFLTC9gfUtQdDp/TLAbRJPDQ2O7cyIuiAgzlQlcjSkR8yLCWJS7McJGV6Df2HoXqZqPsJmVdk56J7JEVrGsmida2TATZeM+q+U4E9kcKzdYqe7Hg+OYcdN8atG41f5Zagu8KMhv8rbck9u8L8iv8xS1e3xo0TjHMgyM8BJDnUMGa7xWjrYdQ8O8cuSkNsoSsn/EzgO2a6zxyAAAAABJRU5ErkJggg==",left:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABzklEQVR4nIWSy2tTURCHvzNnzk0TS21sQluhq4Kb+sAH4qrgyoV/oNuCUIogEUGKf4DoolBFfCC4sYKgDVXig/Tec8ZF7k1uo9GBWczvnN8H84DpcM6h6ruw14VBBwZdeIX3inPuj//18FkmS/jtDdgvYGhgBhYhvwwv2khPs8z/3R2CnIcHlWlWXsXvMleDOEBVZaM0R8gTxGljghghN7BLyK4PwY/6UeUsbNuZlsVvn3JLyWz+1MTc8mbHP8x+HpmpWgVZhh5OKsbc0/6bgxhjzM3MbDicAN4f2jj6fUsQE8R52McBrcz7VbpPaJmxWALMxoBOMPMrE0bV3hXYC42grMCziOY3SJG18lf+fQxYx6y1XupfP1t9M6vwkjZ8GQ3JR3t3YHY8MGvWZsBpsw99s8GhmZwcbBd+sQQf/7e6WdmBIynKdRqkf17ZjBCrFdMQg5SgmNbqNySuFAySGwFP1AI6rVW1g0KANoCA3oK3DqR8lIvw/Bzs17Xb8LqqBTosI70ChjfhEVnWuIC/EyHfhIc4L2jmrqH3IuTX0S2azcYmcr+A4RrymCwEafuwJaoNAB+CLKjuiGoY9+q9XxDdcSF4AFEJiyJ3QwjyGx0DPZpbZTAYAAAAAElFTkSuQmCC",right:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABp0lEQVR4nI3TO2tUQRQH8N+9e9eg0YBBlwR8gNHKRqz8Amph4zcSBCWgEBALQbAU0U4EUewsfDQJNuIDiaAkSNhCY3Rz79xjsdndaxKDB6aYM//HzDln2DayrMXDgrct3hXcR7Y9dhMT14/wNFEGEURFb5onuLKjzDQ3B6QgalJNauamuLYt+SA3gkiUTffBauYPbBbJmB2AalJ8+Ryx2o1oN0Qm9kSdeim9Xyh/FFm0uNzUeFSTEmUsfoxhLC6NBNbXIyIipVR+fTGf8AAKZB2qjDyoHZ0B+04wvjJleWDRbisTuzponcon5Om7OoN7Fb1hsVY+RUTE2PGIw2J0g6jjd0TYG3FBnSp6uAPzg4oPwd1vEUvdCJ2RwNRk/1mvPwyxeF5gbUtLJjtb27TcJdsyBGs58n+Mxf9E6y9yUDf3NVVNtQOmzm0Agjpr3Cb6h0VO0SQNu9WPlGNS/x3FWRaawBlenuRVU/g8b/J++2G/grlVfp3jMcaOMZsoT3O3ryM/w4OK3iEuYewiz9b4iasDtznsHpi3uG3kAu2CW0Zfery98R/+AA8N/U/uOBf2AAAAAElFTkSuQmCC"},pinky:{up:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACkElEQVR4nG2TT2hcVRTGf/fc+2bey4xJk9hoXGlMES0uCoVoF4IWW1BEkWBB6lKwEPBPLXUlhYIYEiouRDdSsGDalJYmrtIuhECLC0MQIaWmgo2RJo0WMmn+zMy997h4aScTenbn+8453+E798L2EECMFHDjCWbRwoLDTmBEcrI5TFNiDWVjhtJgX549fGV3W+nplKisV+dqu344+NuKrP1SMeZDfNSHDsgonprq//njZ7v2QpJAYZOoAhswW5lm37mXvvlX7w00rZEkiSlRHLz5/mXd1xbqEOr6kaoeq6l+qqqfqEKoP1/21bkPJrWMG7bW5uLGGIDj1/svqq/4as+LqjjVym1V/TKqnlBdW1ClRfWJPap+xVf/endcgc+NMThVBejY6UrQAn9e27JazUCA7DHQ1RwKAbq0FaBTVRFxTtpNKU1dEe5us7gG1IGwBVuGLEnoIMuMtWKAL268ef5Y73NvI8E7jhagCxhSmN/0uLsOx5Nc4NQaUVN/64+f6Lnw1rcOKJVc0WHwrCYwCFiFumncaDGBzzxEB7UClKHVpA4oOSCEGPNCFyFY8Kb5wApsuM3D50RdPECQBgSEmDc2gIYBFhAFzcVMFADbeJsKMbVeVSOqoEpIqYUitTwPqBJjwXoCaN4aBfAh+BjT6OXO786YuqgQY6rezk0VZP7XQiyqRyxGosidaRez6GMIEfACdO7IOsUt/Zc+dfbA2MTMdzVTNrJy+6orjPSdcT++cHr5n0lHBpMz3/snR1+95Jb+TtvTRwR4FOCNM6+cXOorPTMKOIF3xl77er3btn8FgMDjbufQ+OvDVYH3ALen3Ds6sv/EMtB/34FDQEtusgE4wpa/K4IAAyIPoIx8GP8DW7gOkh3Y7ZsAAAAASUVORK5CYII=",down:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACZ0lEQVR4nHWRy4vNYRjHP8/ze885c+GIuTSZxriMS6KkKeQSK0lRDAsbthaTzSyUqYlhxYIsJkTNiGYh+RMYKRFTM5Fxq8ll3BriMOac3+95LM45GYOn3sX79n2/l+cL/58e4CkwAtwFwr9A8tfNOQJsernr2toFtauyFPIgORp7tw68TT6PAgcA+zcBdD7be6O7pXYDVNbgkVsRJEruPR6/puH85hsfyO0uk0gJgOOdT3b1d7csbctLQVRjDXhZxrHgMQH041Cov7jx+kdye0TERERw90PDOy6fXr5yXyxfRcVRomnmzADHqiTWT4Mhc7H1ch72q7sDNC+qnI/FFkslyhwB8d+f3SBL8RTAq5otDysA11IMicSQClE6BI4CS7yYUoB6h2MKxyOYC1JItEGyeSAC6B7c2Tdhhy3xN/7nnHD3jrz7xJQ3c7cuS5L99wsKdxRoakrXVzhu1JTilt1nAI+gYlrVATQ1NxgsUyA/GSfgwBdYvB4ihVfPgRQgCuOgjSDV4O9AIlFsEmBCAfEIUOBsQsNIUajpFPCmALHDSWgag+wPkFPANyAogAbABcDBc2q396HFtYJZFBMc/S5htL0UL7ZYEBUxBUyBxA085Sb510rKIICn3fTHWNBvo4FM0aFn3PTnWPCUW0k2VmDWjFSGKCHdemXL0IMXvUYFyM9Xurh39aCcWziQez8AlWDjD3VZ3+pBHX8USGcB6gDab23r+by9dt09oErg4HDb1ck1M5feLK2RaqIzI3v7JxeEuj4gPU9nX3rc1j+RRq6Wy+kCaqeUdQaYMa28C2XCYpH0iKC/AKR7DJ4ZSbreAAAAAElFTkSuQmCC",left:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACnklEQVR4nG2TTYiVZRTHf+c8z/vee+emNVycYBocHAqGEN3IgEgg7bIZBir72CW2aNEERZiK6Ci4sNrooi9q02KaZhYubNGuhVEkLcqmLkhpwgwqRGBzZ+6d+77POS7uxUw8yz+HP/+Pc+C+EREIIsAc8AdwBVhEEOT+bf4PxTySinQid9+z8vKFpxoDT1RB+KdzrTM69+zFDuknsni0LMoHEAhkzuzV/V+fGNmyC2qP4sENQLqirK9wa+0XHv9q+kzL7DBm9xCoImbHf33x/Mnx8amurIlqVyOSIAnUFcus9MLtxl/f5FsXJk+6yCzufc/wxqVXvvC0lgozS3624z6T3Gfc/T1zd3dvuduxjVQeKjeaz8078I6IoO4OMMaBHXjFTUSUNyswBNQcXu27rIO8nSsK45VRgG3ujoYsyAC5TDyzkxhh5UY/k0zgtlAZhXxrHxsEHNCe/xijaCrS4e9e+Pz1fQ+7Qcgl7y+XBgapfU9N6xDakvtju+3n5+deK8vytAIjw9aoXjjo5k0YbgAfJripUIXyXeg2gQ7wfgHJ8MxtRBs5MBKBdpE2oArMlUCA1dDrR7yn5IMAXevhwcGgSwGwHgHtSQb+TSCxh4iDOxQKfwOiEB3KBATUBSBEQFx64XiWmxgKBg6WU4KjySMGJMFDNMzvxqJAwhzP3WT9poJDVDyKaet61Nb16CoGCkGQ9rJ65ma9I00K1DfHOqFb5hOLey83l+eNKsja7zr82Y4ft3z65PfSWlIG4M/lBXYuPH05dDv55vwhgE0AB7+d+vj29NDEJaD2SNj01tJLX7a317adBxRBx+tji7/tX9gYjLUjQG3f0MQPFyc/WQVmCCGg6DGgAaBRBfQcSOU/n5oBH/XfHGBQ4JRq5A5IWx73SeLhogAAAABJRU5ErkJggg==",right:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACmUlEQVR4nGWTT4iWVRTGf+fce9/vj6Nf4/hnRlEERVcuAsFw0SKRRAhSiBJXgiQiqNRCwc1AC6FsihYVtrKYWShRkkSudBNFCPkVrSSmwj/ziVoa8c3Me99zXLzfTJTP6p57D8957nnOgf9DAUECXCxgJsGdAvmWIAF9Khv5TxAChcWJpsuO6QOXtw4v29wmOzZ3P2+Y3Nm9XT3qWvRDZPxpAkWWWXp/ev/lY8uXbwfpQGvw5sDsn/jjXxn7dOf5Ho8PDm5rgpSSpOzvTL/21Zsja3bNS1tURSL3ARWIjuGZlfD37e/jxg93n38U+wdzzo6IAJz+7dVLnk/mOR8391mvcc7dT7j78dL93Xl3d6+qqnxw6ppH+EBVUXcHWDXGSN3A4wINyEB/HzAELBV4IwFQAX+8vMUyjJkZKkG0Q7MoUgIDnqm/3VoN7RXAPaAIAPT79fHZ50Z1tFiXUiCoV/7e9b2Th2zdthz6FMzUBBs2wfBCyVwBEFvAKo27Om4/7596qaz4XIHO0tCICLWCCaAHN6/Cw3FqJ/5SOFOSSvAuXDkCK6qmAsMRKDNWmxIc5oG3HaJBqRCkNquX4HQeWB4G0igVcF0YB/fa2EpgNoDZQmKNuQh9Bwev3bN/h9PAipDd3RBAK6whuWowj/giubVCxsEGRRWwbJVZy7Le60aRSgGskKx3f4x+64fCE4YKBNBeN1rLsrlZrR5WjjQ7Gh/2musv7P7ym18+nqUNVe+7OPTZ9qk0teOTmd+vKEvgxs1J1k4+fzHc+alIjSEFRgH2Tr3w1oNtnU0XgAi8cmnPRH99Y/VHSK1ziDj+9YtnyzbFUSBsbKw998Wes/8Ahxc6cABZXB2AIyISFvdMVYATMcZBTAJeB3gCWn4PpFt1S94AAAAASUVORK5CYII="},inky:{up:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABzklEQVR4nJWTzWtTURDFf3fyXtqSCKa1GsWPTRG6UdSVa/8pV+JK6kYh4EoIIrgRuhAMgitdWGqhdtFWq0IoIsVqQUSSZ/Jy73HxkvBin6ADA3fOnXOGmbkXCqwEBrSATWAbeGhFiYeIpdgBDY7OtfiUpHgJSbz7kjBVfQrciO3vUo7aqQe0BxlJEiF4QvDZWeLNZzF15JYrJB+bb7KZiMuDHhd8OhYZ+Vmfcs2nbOyK8vRt54YyBlCqNPja1bL3KRY8Jj3JkVu/JJCO14N/5H3K1q6Amy4rDWCvCMH/8D4NA6kfJJ8TkKQkSApS2/uUrgQsA1jknDFbH+CcfQRcCWIHO7n+vgHTLqu2A+CBciWNsz7Kz9nv90bDakv68Gf/kg4kreSH+3YvAe4Dtj8GC4iFHoLnpwSsGdD5lzdyyPoC6NpoEf9v2Q5stAcAQhhM5IQwKMRyZhACAFLALEKajPMYMI6VZRnY/PAmYuHiaw76WUvfMWZmX3LizApyGba9B4tX1jGLqABQg3K1yepWh3MLTYOIk6fvst7uMVe/5xj+zPOLj1l7n1CtXY8h5tLVZ7zY6ABLWGQOuOMgAnDOGdBgcrjxEBsNbAZYMov4DRt5NkCBfZ1GAAAAAElFTkSuQmCC",down:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAB10lEQVR4nIWT3WsTURDFfzP37hrTD1QM9hPTYlP7ov6hvgcsvhSUUpD+EfUpRKEi+CRUkYgFrTakabK5d3zYTbLRiAcG7s6eM3vmsBfmQMCRpi1uLFyQVi+oVE8UdB53Bk5EcZWXrNbbXIUMM8PMuBwNqN1/C5XnDmSu2IOyvnXMsBDNq64ZtbUjnRkigogoK5u5OISMGMNf4hAyQuFqe+/QqU6GCEn1BYOC9K+vlwf1zPDJviMPxsiudkks/jekMW5aZJQ9jIA65xwbOxERRUR/AudzNFZUsbay3YhevYPqcpss37ljU8SS7R+l/kczI8ZAP2SIPxFIuthwEeDaLOpodO2cS1XVj1OKZjGEMDSzOPS+sjh2IXKuOOmOnb0GFm6DW4J3JfttIEkt1moWW2b5ugFAekDybSblTTM25qS/YsZucY4xMDIDd+Yp/6Jmkc8yfY5xBICq52uJM4UqECcvRHRCMIuoelT9jKjMyRvpILdlRuPJKd8Lmz0zlm61uHOvRVb0OmbsPD6drAW/YGH5Fe1PPbYaBykkrNWbvO8MWK8fOBABpb53yIfLPndXnzpIePDomDdf+qSLR4hzCtJU8OSBKOizP66vR/y+Ux33EnBN71P5DQllVXyQma9lAAAAAElFTkSuQmCC",left:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAB4ElEQVR4nH2SvWtUURDFf3Pf24+siYkYFLRRizSaSiVi7V9g7b9hpSgogmIhipVbC0IwQrTQRgQ/CiMxCbsgxi9iIMHGENndrG/vPRZv3+atbDIwMHM4Z+65946xc1SByW791cwuSNIufIiiCOASFB8z/71FU2JTor7miSpPgKtdzgAxgCtdZ2lVSGmG4AnB9/r6uijsuRlh/WLnHLjyFea+CO8TOp12T5Rlp9PG+4TlX6JYuuGcS8VmBnCRd3VNe5/U8id284Okl5kj7xNq6wIu501Mz/xck/c+kaRaTvxc2/FUSh2G4IFnABQKDtzehzYksc8nG5spuefgqDRyJMUa2YBEwsrTUeqeO7z/1uBk8CBtbXSJWQ5LVNIBH/OPu7jSAB4AvOZ3Cs5sSZv/P56kuSDV81gInqYEzMdAky0Po47zpcFffNoGgH8BaDnAMLfDau0S6m5ArwSQQj9JYSCWC9ebJgUsZyXrzVyfqL/vOGCUYQPnYianPrP8J2M6Dh5eYv+BBXx38GoTTkx9wrmYIQDGAG7zttbgzLlXDsqMjV9j4UebieOzBpGBcWziEYsrLcYP3SpCiVNnX/BmqQHcJ45jKJTvAiMAzswwqwLF7XtaDK5q2ZWhgovvRVHMP7z+WsD4PpRYAAAAAElFTkSuQmCC",right:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAB1klEQVR4nI2Tu4tTURDGf2fOvUlMcAXjigpZFfGBlaAI+h/4T9nYCClslFiJLlhZbJXCJmyxrs91bdyXYLFE8UGURaImN3PG4t6blxH8YIr5+OabOXPOcUzBpeECPAAuZnRb4FqAMK2fgPce4Aa+2GTjY5dgRt+M9m9lbv4xcDuOvZtdDEixXOf9F8MsjRCUEHSYf1KjWrvv00GnEJdusvPNUE1QTYZFeagmDAY92j+NucP3GJo4l4799msqCkFbZrY7bWBmr0LQF6oJux3Dx3dlrP8SGhTVpGkjPBsrXs84VU2e7CUKPAVAxDl86RH9dMxOJtx/0ozKyCAHhzQBM/yJ5ShCABbZ+NDLl7WcCavHzCiNDLYzXiIzjgdlM+lRLLYAXrOXbTwTr5rZ1owd7JjZio1pkU4EdOlPXsjVf7yTM9OEoyuAzLrV/4KJyAQRwuCvfBY3BgECBpgFRKKRe5aLRJiFCS7P0YEAB6kAIhHnLq+z+TkzcMKR2nP2lVf47tJJOwPh7IU1yBtZFaBO680PLl1pFqBA5cB1Xm73OH1+qQBeAOaPNlh794vawp0CxCycWmR1q0up8pBsDXVwZUi/MtAACvlpXHrUhkTiMyoCbvk4dn8AgDJfwO8SCRMAAAAASUVORK5CYII="},clyde:{up:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACj0lEQVR4nG2TT2hUVxSHv3PunZfJm5CMiSGSaigxUDSIFv9sutBNQSiuCl1YpO2iUdAiFURKRSUBiyC6EFEsLrJQEHHdlXShiwYpVVBQpJuaVkZDdDI248x7954u5llH8MCFy3fO+fG799wrvCfUJxLz9mXgwwL97rw/HPL8feVvw3sPcLwPrv8z1W92ELPvscdfpS2Fq8BBEXmnR7q3vdjJh1OjP4wNLmMjLyOlItNGWRjk7t8pH8/OHxKRs2bWZVk9Kcw8+Ha97RgN2eRA3rKZCbPTmJ3B7Og2+6Anb32+NmR3vh4JwHfOuUJdBAc//rV/2MLS7YxqDGBmTx+anfdms8O28OcTA7OBiRhC45fszu4+A/aKCN7MCLB1zaARKxt4VRPVAPR+BNEgKzM0vpqXDXAV0RjWtTetaHpg0szwmnjSdv6aDOAplaS/ONhzMMCaQGCgr2M5SE1DVJQQxDk0tvOLj6Yqu2xkIerspx5qQBOubIdmgPoCXPuko5k/wl3amZTWZfHu7upUCOGYBzaMVpZTKxGpPYEL46AlqNc7MwrA/Bz8XIXMYGkJW0EcqzRSYNwD/xIUYgAFGssd69o16AgsFoIFb0UFQlMB/3/CigZfNFuxKNgbMQMRA3CFnoMAMaHzVouiWCaPZXKsYHTVFFYUyLCA9RB1UTyuQ80Ttea8PhdvJSLa4foCHxPymLsIZAoMURa0lvrJs/63xccJpCDzFU1PhptjP9ltedarpPDgj0q+5Vwy5+tpub/8WoEqwIm5L4cbmwfcDSAZ8kzf/2ZVa1S5WNyi29jvbtzbs7qZIgeA8merSrd+/WJlHdiHcw6PnwZ6O/9CRXFnQN/MARHpcXCqC1UVPSIi/AeSmwjoBKJbfAAAAABJRU5ErkJggg==",down:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACbElEQVR4nHWSu2tUYRDFfzP37t27DzbZyOrGRyISBIPaaKNNChsbKxEEKx9EEEUUUkgKEaKCRAVfUUNasU7tH5BCQaIiEl/EmEgIebnZzd29+41FEl2DDkwz35wz35wzwv/jOrAHqAHTwDnABLCGJr8RIQJmXAJ2vz2ROt65YTmNMyajLDsGS5kqfAKu/YVZN/XK2KncjY6NFWit4ZLEABKj8l31x3yK7QNLdyO4/C+C3s+n833t++diczivTICtdgjUU1QRiN7kgpaBxXsRXGwk6Jk41XSrdd9CLCVUQPHW/c2BGc4yuPKHrJ+7X+o36FnToGvzlrIzAUl6itZXpFtTS4BQEUMtdi5TjB1wCEBX30tSFSURwtmXcGEaCh3gVsG5FrjwaSWbNyHVuqZhcW2DxxPdmSX3IFG3yoj9iWmzJ3mze56ZfWioj5l7lKtXzjdVgGEFDmxpKqcJahB2NixdgIQPosDOhnoHBEbYshACXQosEgs4hegLbXtBUlCerYBfBa8O5Sn8Ngi2AqVxRGOlqgA/FfBRD5yDwaMkPwPLkH5yBOYWIHIweJjMNwi/A0+PQVQBLwBQ/7fKMdjyRzfWW1AsC/IVBzEKWhv1F/raQWLMTToikBUDnA/EmMNCnM4GPvkZYAYDp3PqYx7WVHOSHVc8kPlAXbYaC3UViBVoIanofMbfd9tGZ95nIQCZzWt7n3vVfK02IlN5JQC+ZOm8yWudSvqEYFAAuPPuZHHpYDMvgDAHV8e7i9GuFMOAB0hRGJo4U6xtUx4DQUeCZ+9PFys+PF/zph/INNzdABA0eKfA0CohQAJ4CMgv7wr9rCokR+cAAAAASUVORK5CYII=",left:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACk0lEQVR4nGWTT4jVVRTHP+fcM783b97TpzNqjDMaZTCFZBJCbqRN62jbRhGrhWW4axM0BrNIEJpwCoUGghZtbOWmbWoUEU0Jok8xCMU/U6O+p7557917T4vf82V54HsvF77nfr/33HPg/yECqgp8BzQHWEQVEXmCbv85mEmM8dhG9x3XDjVeLcbuGaos/92YnD55Z6qPnDOzj2OM/+o9rt1Qjt9+t3Kw2NCFBriQEZAeShv+vLme50+0jnTUZ8kZAH20roP5y4emDtqLxLyWSA+ki8oqSmHkp0Kc3n4nNg/UPgpZPhw+R0QQmLv+wYyn9Fs/5+XkX25zP0qJb15w97Z793fPx4uUFuhf3DfuwOHHa3Lq6vmfU0qp7+7uvuy+YO6fr3Hv3PJh3P3B+1/Q8fdxYB5ArQhSlyrP7tylYS087AJsgELhxiTS2MTGmYFMYxsSUVxQEDMTjb301aV31r++o+aZh2rBAFqQUpnUg/TIafcaoUPhz3n+dd/42zHGIwo8s3n0pi3NzpBuXaUS2vD1bmglqDfxT/ewcqENqQmLr4GDV8hbK3dHga0GdHCgehn9djskg/v3y/8RQM7C4iT0EjxYLZ1k6PcN6HUMUEShl0tCoIQPsAqsPhhcBqRyF8kAQQFFHQTyGHGYDOQKMVeIQzeAG2UHBYaNFMmOF2RdKUuIlkS9LaYrZj5CxgbKbdQD2aMDJAXWURj6V2EvzY/80vqjBjWQ63VdM8f3W47qT7JSU6pw6UI9v7IwuhRa1aJWcYA6wNzS3on27gk5DVSmRmTuylubO09XWQQVsPDyhJxu7p/o1k0Og1bfmLYfz7y5qQ28h5kRkE9AxgBCCAosgIbhlAmjAp+VUw6g4wKzqso/UZISjmIm/qIAAAAASUVORK5CYII=",right:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACkUlEQVR4nG2Sz4uVZRTHP+c8z33vfe+90zg/dEaZULlUEgQa1NZ/wIXQtl8bN2HRJlq4CwRhxDEZBYtpF9QiaSHtWgiioBthwCjMizk23hrTxmruve/7nNPivd7IOnB4OHCew/mezxeeDhEQkRpczODnGqzV4RohBET+2/6vQlXqxnIT27/23tT+fPL3Jm54f8L2Lv157W6yLrXa61YU9j8DVKZFz99/d/JIbfYR5Anq4I6Jo2xmsAm7Tw2//sl4DTAABYgxyjR2vnc0PxI6D0qboySfgj7IAGUI1h6Wtk/LO8f2HH4WLsQQVMaaYal/dNrTMoV/Muvut9y97/7lPvdF3E/ivtJx94ee0kaRFg/4BHyO6nj/r+xDUjpL4eX3Po4/NtzPTbkvB3fvubt7SqnodbsJ9GolPIjOoCqeKSiEDgCNXSDtGbg/A5kDOwAI22Bu7x6dknmyKFE9+YU77zxzyHcNTYcWsZsAtCchA3CHZMA9HCDX2Mlg7f1tr2alX1dgodV8FAlACXx6EMrv2Fh9wODMy9D+ER4DK68g3MW7t7m1+BzN/KYOYCECA0wABwc2H8K5lyBTsGLECfhtHc52KvJhCASMNIgVSq+afAR2kKCf/nHKk/yrgBI8x4SKQTXfq8cyyvEnBWtQWp1ybDcBa45qDzwxkgF4humvWt1CwCOmPaKuS/SAEcADpr+ESI3RwTAFZmmArtfji6fl8r3VFrRAehO64wTfZif8G++2lTps3Z7Q50/rJek2lNxIsB3g+JU35h8fmA4XQbM2fLD65sLWC634BQQFYQ7O/PDWzmJnXZZA4+4GKzfent9qwWeoKlD7CDSvRCkCp5Rq0crtQSK1jzWOvKsaFT0ZY5S/AWqkD0QparkoAAAAAElFTkSuQmCC"},eyes:{up:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAj0lEQVR4nO2RsQ7CMAxE79K6aQCJbuztb8Af8P8rX8HaYzCChgbanZ5kyYqezjkb2MR3K02eOUdzJiBwhBCsgPWE7RcmD9YfBsCgp9zdS5Kul/Mpn50z95tzdSkAAKSYZp/7ZDzKF6XYxIUUvw12bbvKAF1VMQCvXUhSydXIjDk2kcDkjL4kF1k+4xrmH/UA3stP0Iur7f8AAAAASUVORK5CYII=",down:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAm0lEQVR4nO2Ryw3CQAxE35jdEBFRAycEpUAJ9A81EBIlcMjPgazEHUbyxX47I3vhLwBiDDydUpxnQt8zgG2+kQeD1A2cTJo3JIqVzV29jod9NrCX82m3xLRt27wHTYlmY+SjquslRpJ9ZVAmDKC/wf0K0lQAuFtWddn0a88ZgAwoKKx7MdRnShxdF5hAHIc5t+Q3rp2BoRT2c3oBFX9xUA7hwq8AAAAASUVORK5CYII=",left:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAuUlEQVR4nO2PvRIBQRCEu+fOIaD8RkoRKCGZwNt4fwKFcutnW2LP1tWdF6CjmdmveruBvxgGSSqOJKvgmEnM6CWYxS7hkYSVbuWdABIC9pTkI2cAeHiv3WazDPsiazWeFczDS0buQQLl0CfnrmHOb10LDHkoJxtV1cXZubyohCyyH36tVuji8vvHwJI6DltMhzNM2jqpUJqmaEdMD8YV5h3l0vHNrAf9zrjV/ARQpLrPYmYBZrWpfkwv2KllZq2VZYMAAAAASUVORK5CYII=",right:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAArklEQVR4nO2RsQrCMBCGv0vaUq2gIlJxEBEX6eLi5jv4/g8h0qViIpxT27S0i3M/COTCx5/cBSYAiIxBA8a8IcfEIhiRjmh7tQHi3pkAVnqpIfs4sbX8KIrdmGc6qfJCBETA+XlzZeWc73r1etIJgHXw7KjZV957Btn0A8K+26bf7vMd88izmbnl+UpVtVRVrVSvnJeLICAFkiRu51WqHjlkd05bAC7Gpv9+4wT8AASmiluJhbS5AAAAAElFTkSuQmCC"},scared:{imgDate:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAADCklEQVR4nFWSX2hbZRjGf993vnN60qSNXWva6JpR7f5km7qrWrVUXYt2HdOCk2FBoQiDsivxRmU3XggiKIIIuxgOpxeyKsL8A8IoaJVNrMy4Mant2qZbMxKX5k/TmJ6cfJ8Xyao+8PK8F89z8bzPK7gDIcHo+t42GGbwmzk8vwJCIi2HH4d7KfxcAgFCbGkFANIB7cH2l3exc+IVCHfRtn8Mzb/IJ6YQpSxzp94h9enSHY9CyLq5Z3If8ddO0xrrpwr4/B/tDz2PDbj37EW5x1k5PYeQSIyBHcfjxN84QzDWz0a1jNY+1n/MFqC1z0a1TKhnkH0nP2L7xE6MQSAkPH7lPJG9R6j4FXzlstkwBQADlBscAKiWabGbWZ39hJm+lxRGg59PgdFUpdrWDf1xWCvBpV8AG548CIEAXEiAl5aKmtF42RsYgyK4x8EKtSOFZMPo8SfggxfqJ7CPgAjA9Ov1JIffh2/PC0lYSJy2KKHdjmLw0gJN4W48o1FS3S7UxVfSdTYa0lXotKFQAiyp8IxmW98EAz88LBgtpnBaovU6G9kdoAZ4jaKdBnuAbgxAJTuvMEajgHXts1nzcJWLKyQ1YN2vANCqXCRQ1j5ezaNJKlosB6NrEltIbsKJ5zLXrp8rrr44ml1gyWiaSunfPs4tz54p3MAq32bZ6MljxdXr59ZvTR7NJ0kBtrQEQ7nlN09IVS7mkn/mOnp778olH3nw7t1/ZQs3f5q3bNuynIE4tIbc8MU/iqnFW8GOAztKmU3jht869XdOIYRMZyuFzy/H+jO/Ctl1wN+MdRZTiRU7cPbLth4UNDnF1T1dpczZ75vbM4lgZPaxYGSkN30VI6TgUH4FK9xNevpd2iL307J/jIzRmHySyldvo4HmZ08iWu8lIiTFxBS57ArRg6/ip6/C4VKapy9/Rug+m8gzXYzOX2DcGIYSU1uvPHTta8aN4dDcd3Q81U5wl8PI718wkl2A4eRFQg+4W+LosRhH1xZ5dPo9hAJhw8DMh4ytLdI5Ft3ShfuCDC/N/AMdtzXsl7IlxgAAAABJRU5ErkJggg=="}},_n={horizontal:Array(54).fill(null).map((()=>Array(8).fill({active:!1,id:""}))),vertical:Array(54).fill(null).map((()=>Array(8).fill({active:!1,id:""})))},ti=(t,e,n,i,o)=>{"horizontal"===n?t>=0&&t<_n.horizontal.length&&e>=0&&e<_n.horizontal[0].length&&(_n.horizontal[t][e]={active:!0,id:i,color:o}):t>=0&&t<_n.vertical.length&&e>=0&&e<_n.vertical[0].length&&(_n.vertical[t][e]={active:!0,id:i,color:o})},ei=(t,e)=>[[-1,0],[1,0],[0,-1],[0,1]].filter((([n,o])=>{const a=t+n,s=e+o;return!(a<0||a>=i||s<0||s>=7||(-1===n?_n.vertical[t][e].active:1===n?_n.vertical[t+1][e].active:-1===o?_n.horizontal[t][e].active:1===o&&_n.horizontal[t][e+1].active))})),ni={getValidMoves:ei,calculateDistance:(t,e,n,i)=>Math.sqrt(Math.pow(n-t,2)+Math.pow(i-e,2)),findNextStepDijkstra(t,e){if(t.x===e.x&&t.y===e.y)return null;const n=[Object.assign(Object.assign({},t),{cost:0,path:[]})],i=new Set([`${t.x},${t.y}`]);for(;n.length;){n.sort(((t,e)=>t.cost-e.cost));const{x:t,y:o,cost:a,path:s}=n.shift();for(const[r,l]of ei(t,o)){const A=t+r,c=o+l,d=`${A},${c}`;if(i.has(d))continue;i.add(d);const h=[...s,{x:A,y:c}];if(A===e.x&&c===e.y)return h.length>0?h[0]:null;n.push({x:A,y:c,cost:a+1,path:h})}}return null}},ii={blinky:{x:50,y:0},pinky:{x:0,y:0},inky:{x:50,y:6},clyde:{x:0,y:6}};let oi="scatter",ai=0,si=0;const ri=t=>{switch(t.direction){case"up":t.direction="down";break;case"down":t.direction="up";break;case"left":t.direction="right";break;case"right":t.direction="left"}},li=(t,e)=>{if(!t.justReleasedFromHouse)return t.respawnCounter&&t.respawnCounter>0?(t.respawnCounter--,void(0===t.respawnCounter&&t.originalName&&(t.name=t.originalName,t.inHouse=!1,t.scared=e.pacman.powerupRemainingDuration>0))):("up"===t.direction&&t.y<=3?(t.direction="down",t.y=3):"down"===t.direction&&t.y>=3&&(t.direction="up",t.y=3),"up"===t.direction?t.y-=1:t.y+=1,void((t.y<3||t.y>=4)&&(t.y=(t.direction,3),t.direction="up"===t.direction?"down":"up")));26===t.x?(t.y=2,t.direction="up",t.inHouse=!1,t.justReleasedFromHouse=!1):t.x<26?(t.x+=1,t.direction="right"):t.x>26&&(t.x-=1,t.direction="left")},Ai=(t,e)=>{const n=ii[t.name]||ii.blinky;if(t.target=n,t.x===n.x&&t.y===n.y){const e=ni.getValidMoves(t.x,t.y);if(e.length>0){const[n,i]=e[0];t.x+=n,t.y+=i,n>0?t.direction="right":n<0?t.direction="left":i>0?t.direction="down":i<0&&(t.direction="up")}return}const i=gi(t.x,t.y,n.x,n.y,t.direction);i&&(t.x=i.x,t.y=i.y,i.direction&&(t.direction=i.direction))},ci=(t,e)=>{var n,i,o,a,s,r,l,A;const c=.5,d=null!==(n=t.subX)&&void 0!==n?n:0,h=null!==(i=t.subY)&&void 0!==i?i:0;if(0!==d||0!==h){const n=d>0?1:d<0?-1:0,i=h>0?1:h<0?-1:0;return t.subX=d+n*c,t.subY=h+i*c,(null!==(o=t.subX)&&void 0!==o?o:0)>=1?(t.x+=1,t.subX=0):(null!==(a=t.subX)&&void 0!==a?a:0)<=-1&&(t.x-=1,t.subX=0),(null!==(s=t.subY)&&void 0!==s?s:0)>=1?(t.y+=1,t.subY=0):(null!==(r=t.subY)&&void 0!==r?r:0)<=-1&&(t.y-=1,t.subY=0),void(0===(null!==(l=t.subX)&&void 0!==l?l:0)&&0===(null!==(A=t.subY)&&void 0!==A?A:0)&&0===e.pacman.powerupRemainingDuration&&(t.scared=!1))}if(0===e.pacman.powerupRemainingDuration)return void(t.scared=!1);(!t.target||t.x===t.target.x&&t.y===t.target.y)&&(t.target=pi(t.x,t.y));const u=di(t);if(0===u.length)return;const g=t.target.x-t.x,m=t.target.y-t.y;let f=u;if(Math.random()<.5);else{const t=u.filter((t=>{const e=t[0],n=t[1];return g>0&&e>0||g<0&&e<0||m>0&&n>0||m<0&&n<0}));t.length>0&&(f=t)}const[p,y]=f[Math.floor(Math.random()*f.length)];p>0?t.direction="right":p<0?t.direction="left":y>0?t.direction="down":y<0&&(t.direction="up"),t.subX=p*c,t.subY=y*c},di=t=>ni.getValidMoves(t.x,t.y).filter((e=>{const[n,i]=e;return!("right"===t.direction&&n<0||"left"===t.direction&&n>0||"up"===t.direction&&i>0||"down"===t.direction&&i<0)})),hi=(t,e)=>{const n={x:26,y:3};if(Math.abs(t.x-n.x)<=1&&Math.abs(t.y-n.y)<=1)return t.x=n.x,t.y=n.y,t.inHouse=!0,void(t.respawnCounter=1);const i=ni.findNextStepDijkstra({x:t.x,y:t.y},n);if(i){const e=i.x-t.x,n=i.y-t.y;e>0?t.direction="right":e<0?t.direction="left":n>0?t.direction="down":n<0&&(t.direction="up"),t.x=i.x,t.y=i.y}else{const e=gi(t.x,t.y,n.x,n.y,t.direction);e&&(t.x=e.x,t.y=e.y,e.direction&&(t.direction=e.direction))}},ui=(t,e)=>{if("eyes"===t.name)return void hi(t);const n=mi(t,e);t.target=n;const i=gi(t.x,t.y,n.x,n.y,t.direction);i&&(t.x=i.x,t.y=i.y,i.direction&&(t.direction=i.direction))},gi=(t,e,n,i,o)=>{if(t===n&&e===i)return null;const a=[{x:t,y:e,path:[],direction:o||"right"}],s=new Set;for(s.add(`${t},${e}`);a.length>0;){const t=a.shift(),{x:e,y:o,path:r,direction:l}=t,A=ni.getValidMoves(e,o),c=A.filter((t=>{const[e,n]=t;return!l||!("right"===l&&e<0||"left"===l&&e>0||"up"===l&&n>0||"down"===l&&n<0)||1===A.length}));for(const[t,A]of c){const c=e+t,d=o+A,h=`${c},${d}`;if(s.has(h))continue;let u;s.add(h),u=t>0?"right":t<0?"left":A>0?"down":A<0?"up":l;const g=[...r,{x:c,y:d,pathDirection:u}];if(c===n&&d===i)return g.length>0?{x:g[0].x,y:g[0].y,direction:g[0].pathDirection}:null;a.push({x:c,y:d,path:g,direction:u})}}const r=ni.getValidMoves(t,e);if(r.length>0){const[n,i]=r[Math.floor(Math.random()*r.length)];let a=o;return n>0?a="right":n<0?a="left":i>0?a="down":i<0&&(a="up"),{x:t+n,y:e+i,direction:a}}return null},mi=(t,e)=>{const{pacman:n}=e;let i=fi(e),o=1;if("blinky"===t.name){const t=371,e=(t-si)/t;if(e>.7&&(o=1.2),e>.9&&(o=1.4),Math.random()<.8*o)return{x:n.x,y:n.y}}switch(t.name){case"blinky":default:return{x:n.x,y:n.y};case"pinky":const o=4;let a=n.x,s=n.y;return"up"===n.direction?(a=n.x-4,s=n.y-4):(a=n.x+i[0]*o,s=n.y+i[1]*o),a=Math.min(Math.max(a,0),52),s=Math.min(Math.max(s,0),6),{x:a,y:s};case"inky":const r=e.ghosts.find((t=>"blinky"===t.name));let l={x:n.x+2*i[0],y:n.y+2*i[1]};if("up"===n.direction&&(l.x=n.x-2,l.y=n.y-2),r){const t=l.x-r.x,e=l.y-r.y;l={x:l.x+t,y:l.y+e}}return l.x=Math.min(Math.max(l.x,0),52),l.y=Math.min(Math.max(l.y,0),6),l;case"clyde":return ni.calculateDistance(t.x,t.y,n.x,n.y)<8?ii.clyde:{x:n.x,y:n.y}}},fi=t=>{switch(t.pacman.direction){case"right":return[1,0];case"left":return[-1,0];case"up":return[0,-1];case"down":return[0,1];default:return[0,0]}},pi=(t,e)=>{const n=t+Math.floor(17*Math.random())-8,i=e+Math.floor(17*Math.random())-8;return{x:Math.max(0,Math.min(n,52)),y:Math.max(0,Math.min(i,6))}},yi=t=>{si=(t=>{let e=0;for(let n=0;n<i;n++)for(let i=0;i<7;i++)"NONE"!==t.grid[n][i].level&&e++;return e})(t),(t=>{t.pacman.powerupRemainingDuration>0||(ai++,ai>=5*("scatter"===oi?7:20)&&(oi="scatter"===oi?"chase":"scatter",ai=0,t.ghosts.forEach((t=>{t.inHouse||"eyes"===t.name||t.scared||ri(t)}))))})(t);for(const e of t.ghosts)e.inHouse?li(e,t):("eyes"===e.name&&(e.scared=!1),e.scared?ci(e,t):"eyes"===e.name?hi(e):"scatter"===oi?Ai(e):ui(e,t))};var xi;!function(t){t.CONSERVATIVE="conservative",t.AGGRESSIVE="aggressive",t.OPPORTUNISTIC="opportunistic"}(xi||(xi={}));const vi=t=>{const e=[];for(let n=0;n<i;n++)for(let i=0;i<7;i++){const o=t.grid[n][i];if("NONE"!==o.level){const a=ni.calculateDistance(n,i,t.pacman.x,t.pacman.y),s=o.commitsCount/(a+1);e.push({x:n,y:i,value:s})}}return e.sort(((t,e)=>e.value-t.value)),0===e.length?{x:t.pacman.x,y:t.pacman.y,value:0}:e[0]},bi=(t,e,n,i,o)=>{var a,s;const r=`${i},${o}`,l=null!==(a=e.get(r))&&void 0!==a?a:0;return 1+l*n+((null===(s=t.pacman.recentPositions)||void 0===s?void 0:s.includes(r))?100:0)+(l>=14?1e6:0)},Ci=(t,e)=>Math.abs(t.x-e.x)+Math.abs(t.y-e.y),wi=(t,e,n)=>{let i=e,o=t.get(i);for(;void 0!==o&&o!==n;)i=o,o=t.get(i);if(void 0===o)return null;const[a,s]=i.split(",").map(Number);return{x:a,y:s}},Bi=t=>{const e=new Map,n=!!t.pacman.powerupRemainingDuration;if(t.ghosts.forEach((t=>{if(!t.scared)for(let n=-5;n<=5;n++)for(let o=-5;o<=5;o++){const a=t.x+n,s=t.y+o;if(a>=0&&a<i&&s>=0&&s<7){const t=`${a},${s}`,i=15-(Math.abs(n)+Math.abs(o));if(i>0){const n=e.get(t)||0;e.set(t,Math.max(n,i))}}}})),n)for(const[t,n]of e.entries())e.set(t,n/5);return e},ki=(t,e)=>{var n;(n=t.pacman).recentPositions||(n.recentPositions=[]),t.pacman.recentPositions.push(`${e.x},${e.y}`),t.pacman.recentPositions.length>5&&t.pacman.recentPositions.shift();const i=e.x-t.pacman.x,o=e.y-t.pacman.y;t.pacman.direction=i>0?"right":i<0?"left":o>0?"down":o<0?"up":t.pacman.direction,t.pacman.x=e.x,t.pacman.y=e.y},Ei=t=>{t.pacman.powerupRemainingDuration=15,t.ghosts.forEach((t=>{"eyes"!==t.name&&(t.scared=!0)}))},Mi=t=>{if(t.pacman.deadRemainingDuration)return;const e=!!t.pacman.powerupRemainingDuration,n=t.ghosts.filter((t=>t.scared));let i;try{if(e&&n.length>0){const e=(t=>{const e=t.ghosts.filter((t=>t.scared));return 0===e.length?null:e.reduce(((e,n)=>{const i=ni.calculateDistance(n.x,n.y,t.pacman.x,t.pacman.y);return i<e.distance?{x:n.x,y:n.y,distance:i}:e}),{x:t.pacman.x,y:t.pacman.y,distance:1/0})})(t);i=null!=e?e:vi(t)}else t.pacman.target?t.pacman.x===t.pacman.target.x&&t.pacman.y===t.pacman.target.y?(i=vi(t),t.pacman.target=i):i=t.pacman.target:(i=vi(t),t.pacman.target=i);i||(i={x:t.pacman.x,y:t.pacman.y});const o=((t,e)=>{var n,i;const o={x:t.pacman.x,y:t.pacman.y};if(o.x===e.x&&o.y===e.y)return null;const a=Bi(t),s=(t=>{let e=.5;switch(t.config.playerStyle){case xi.CONSERVATIVE:e=3;break;case xi.AGGRESSIVE:e=.3;break;case xi.OPPORTUNISTIC:default:e=.8}let n=1/0;t.ghosts.forEach((e=>{if(!e.scared){const i=ni.calculateDistance(t.pacman.x,t.pacman.y,e.x,e.y);n=Math.min(n,i)}}));const i=t.config.playerStyle===xi.CONSERVATIVE?5:7,o=n<i;return t.config.playerStyle===xi.CONSERVATIVE&&o&&(e*=5),e})(t),r=`${o.x},${o.y}`,l=`${e.x},${e.y}`,A=[{x:o.x,y:o.y,g:0,f:Ci(o,e)}],c=new Map([[r,0]]),d=new Map;for(;A.length>0;){let o=0;for(let t=1;t<A.length;t++)A[t].f<A[o].f&&(o=t);const h=A.splice(o,1)[0],u=`${h.x},${h.y}`;if(!(h.g>(null!==(n=c.get(u))&&void 0!==n?n:1/0))){if(u===l)return wi(d,l,r);for(const[n,o]of ni.getValidMoves(h.x,h.y)){const r=h.x+n,l=h.y+o,g=`${r},${l}`,m=h.g+bi(t,a,s,r,l);m<(null!==(i=c.get(g))&&void 0!==i?i:1/0)&&(c.set(g,m),d.set(g,u),A.push({x:r,y:l,g:m,f:m+Ci({x:r,y:l},e)}))}}}return null})(t,i);o?ki(t,o):(t=>{const e=ni.getValidMoves(t.pacman.x,t.pacman.y);if(0===e.length)return;const n=e.reduce(((e,[n,i])=>{const o=t.pacman.x+n,a=t.pacman.y+i;let s=1/0;return t.ghosts.forEach((t=>{if(!t.scared){const e=ni.calculateDistance(t.x,t.y,o,a);s=Math.min(s,e)}})),s>e.distance?{dx:n,dy:i,distance:s}:e}),{dx:0,dy:0,distance:-1/0});ki(t,{x:t.pacman.x+n.dx,y:t.pacman.y+n.dy})})(t),(t=>{const e=t.grid[t.pacman.x][t.pacman.y];if("NONE"!==e.level){t.pacman.totalPoints+=e.commitsCount,t.pacman.points++,t.config.pointsIncreasedCallback(t.pacman.totalPoints);const n=u(t);"FOURTH_QUARTILE"===e.level&&Ei(t),e.level="NONE",e.color=n.intensityColors[0],e.commitsCount=0,t.cellEvents.push({frameIndex:t.gameHistory.length,x:t.pacman.x,y:t.pacman.y,color:e.color})}})(t)}catch(t){console.error("Error in movePacman:",t)}},Ri=t=>{const e=10,n=t,i=2*Math.PI-t;return`M 10,10\n L ${e+e*Math.cos(n)},${e+e*Math.sin(n)}\n A 10,10 0 1,1 ${e+e*Math.cos(i)},${e+e*Math.sin(i)}\n Z`},Ui=(t,e,n)=>{var i,o;const a=t.gameHistory.length,s=null!==(o=null===(i=t.initialColors[e])||void 0===i?void 0:i[n])&&void 0!==o?o:u(t).intensityColors[0],r=t.cellEvents.filter((t=>t.x===e&&t.y===n));if(0===r.length)return{keyTimes:"0;1",values:`${s};${s}`};const l=[0],A=[s];for(const t of r){const e=Number((t.frameIndex/Math.max(a-1,1)).toFixed(4));e!==l[l.length-1]?(l.push(e),A.push(t.color)):A[A.length-1]=t.color}return 1!==l[l.length-1]&&(l.push(1),A.push(A[A.length-1])),{keyTimes:l.join(";"),values:A.join(";")}},Si=(t,e)=>{if(t.gameHistory.length!==e.length)throw new Error(`The amount of values (${e.length}) does not match the size of the game history (${t.gameHistory.length})`);const n=t.gameHistory.length;if(0===n)return{keyTimes:"0;1",values:e[0]||"#000;#000"};let i=[],o=[],a=null,s=null;return e.forEach(((t,e)=>{t!==a&&(null!==a&&null!==s&&e-1!==s&&(i.push(Number(((e-1/40)/(n-1)).toFixed(4))),o.push(a)),i.push(Number((e/(n-1)).toFixed(4))),o.push(t),a=t,s=e)})),0!==i.length&&1===i[i.length-1]||(0===i.length?(i.push(0,1),o.push(e[0]||"#000",e[e.length-1]||"#000")):(i.push(1),o.push(a||e[e.length-1]||"#000"))),{keyTimes:i.join(";"),values:o.join(";")}},Ii=t=>{const e=t.gameHistory.length*o;let a='<svg width="1166" height="184" xmlns="http://www.w3.org/2000/svg">';a+=`<desc>Generated with pacman-contribution-graph on ${new Date}</desc>`,a+=`<metadata>\n\t\t<info>\n\t\t\t<frames>${t.gameHistory.length}</frames>\n\t\t\t<frameRate>5</frameRate>\n\t\t\t<durationMs>${e}</durationMs>\n\t\t\t<generatedOn>${(new Date).toISOString()}</generatedOn>\n\t\t</info>\n\t</metadata>`,a+=`<rect width="100%" height="100%" fill="${u(t).gridBackground}"/>`,a+=(()=>{let t="<defs>";return["blinky","inky","pinky","clyde"].forEach((e=>{["up","down","left","right"].forEach((n=>{const i=$n[e];n in i&&(t+=`\n <symbol id="ghost-${e}-${n}" viewBox="0 0 20 20">\n <image href="${i[n]}" width="20" height="20"/>\n </symbol>\n `)}))})),t+=`\n <symbol id="ghost-scared" viewBox="0 0 20 20">\n <image href="${$n.scared.imgDate}" width="20" height="20"/>\n </symbol>`,["up","down","left","right"].forEach((e=>{$n.eyes&&e in $n.eyes?t+=`\n <symbol id="ghost-eyes-${e}" viewBox="0 0 20 20">\n <image href="${$n.eyes[e]}" width="20" height="20"/>\n </symbol>\n `:(console.warn(`Imagem para eyes-${e} não encontrada, usando placeholder`),t+=`\n <symbol id="ghost-eyes-${e}" viewBox="0 0 20 20">\n <circle cx="10" cy="10" r="${n/3}" fill="white"/>\n </symbol>\n `)})),t+="</defs>",t})();let s="";for(let e=0;e<i;e++)t.monthLabels[e]!==s&&(a+=`<text x="${22*e+10}" y="10" text-anchor="middle" font-size="10" fill="${u(t).textColor}">${t.monthLabels[e]}</text>`,s=t.monthLabels[e]);for(let n=0;n<i;n++)for(let i=0;i<7;i++){const o=22*n,s=22*i+15,r=Ui(t,n,i);a+=`<rect id="c-${n}-${i}" x="${o}" y="${s}" width="20" height="20" rx="5" fill="${u(t).intensityColors[0]}">\n\t\t\t\t<animate attributeName="fill" dur="${e}ms" repeatCount="indefinite" calcMode="discrete"\n\t\t\t\t\tvalues="${r.values}" \n\t\t\t\t\tkeyTimes="${r.keyTimes}"/>\n\t\t\t</rect>`}for(let e=0;e<7;e++){let n=null;for(let o=0;o<=i;o++){let s=o<i&&_n.horizontal[o][e].active;s&&null===n&&(n=o),s&&o!==i||null===n||(a+=`<rect id="wh-${n}-${e}" x="${22*n-2}" y="${22*e-2+15}" width="${22*(o-n)}" height="2" fill="${u(t).wallColor}"></rect>`,n=null)}}for(let e=0;e<i;e++){let n=null;for(let i=0;i<=7;i++){let o=i<7&&_n.vertical[e][i].active;o&&null===n&&(n=i),o&&7!==i||null===n||(a+=`<rect id="wv-${e}-${n}" x="${22*e-2}" y="${22*n-2+15}" width="2" height="${22*(i-n)}" fill="${u(t).wallColor}"></rect>`,n=null)}}const r=Si(t,t.gameHistory.map((t=>{return(e=t.pacman).deadRemainingDuration?"#80808064":e.powerupRemainingDuration?"red":qn;var e}))),l=Si(t,(t=>t.gameHistory.map((t=>`${22*t.pacman.x},${22*t.pacman.y+15}`)))(t)),A=Si(t,(t=>t.gameHistory.map(((e,n)=>{const i=Math.min(n+1,t.gameHistory.length-1);return(t=>{switch(t){case"right":default:return"0 10 10";case"left":return"180 10 10";case"up":return"270 10 10";case"down":return"90 10 10"}})(t.gameHistory[i].pacman.direction)})))(t));return a+=`<path id="pacman" d="${Ri(.55)}" fill="${qn}">\n\t\t<animate attributeName="fill" dur="${e}ms" repeatCount="indefinite"\n\t\t\tkeyTimes="${r.keyTimes}"\n\t\t\tvalues="${r.values}"/>\n\t\t<animateTransform attributeName="transform" type="translate" dur="${e}ms" repeatCount="indefinite"\n\t\t\tkeyTimes="${l.keyTimes}"\n\t\t\tvalues="${l.values}"\n\t\t\tadditive="sum"/>\n\t\t<animateTransform attributeName="transform" type="rotate" dur="${e}ms" repeatCount="indefinite"\n\t\t\tkeyTimes="${A.keyTimes}"\n\t\t\tvalues="${A.values}"\n\t\t\tcalcMode="discrete"\n\t\t\tadditive="sum"/>\n\t\t<animate attributeName="d" dur="0.5s" repeatCount="indefinite"\n\t\t\tvalues="${Ri(.55)};${Ri(.05)};${Ri(.55)}"/>\n\t</path>`,t.ghosts.forEach(((n,i)=>{const o=Si(t,((t,e)=>t.gameHistory.map((t=>{var n,i;if(e>=t.ghosts.length)return"0,0";const o=t.ghosts[e];return`${22*(o.x+(null!==(n=o.subX)&&void 0!==n?n:0))},${22*(o.y+(null!==(i=o.subY)&&void 0!==i?i:0))+15}`})))(t,i));a+=`<g id="ghost${i}" transform="translate(0,0)">\n\t\t\t<animateTransform attributeName="transform" type="translate" \n\t\t\t\tdur="${e}ms" repeatCount="indefinite"\n\t\t\t\tkeyTimes="${o.keyTimes}"\n\t\t\t\tvalues="${o.values}"\n\t\t\t\tadditive="replace"/>`;const s=function(t,e){const n={};["blinky-up","blinky-down","blinky-left","blinky-right","inky-up","inky-down","inky-left","inky-right","pinky-up","pinky-down","pinky-left","pinky-right","clyde-up","clyde-down","clyde-left","clyde-right","eyes-up","eyes-down","eyes-left","eyes-right","scared"].forEach((t=>{n[t]=[{time:0,visible:!1}]}));const i=t.ghosts[e];if(!i)return n;const o=i.scared?"scared":"eyes"===i.name?`eyes-${i.direction||"right"}`:`${i.name}-${i.direction||"right"}`;n[o]=[{time:0,visible:!0}];let a=o;return t.gameHistory.forEach(((i,o)=>{if(e>=i.ghosts.length)return;const s=i.ghosts[e],r=o/(t.gameHistory.length-1),l=s.scared?"scared":"eyes"===s.name?`eyes-${s.direction||"right"}`:`${s.name}-${s.direction||"right"}`;l!==a&&(n[a].push({time:r,visible:!1}),n[l]||(n[l]=[{time:0,visible:!1}]),n[l].push({time:r,visible:!0}),a=l)})),n[a].push({time:1,visible:!0}),Object.keys(n).forEach((t=>{t!==a&&n[t].length>0&&n[t][n[t].length-1].time<1&&n[t].push({time:1,visible:!1})})),n}(t,i);for(const[t,n]of Object.entries(s)){if(0===n.length)continue;const i=`#ghost-${t}`,o=n.map((t=>t.time.toFixed(4))).join(";"),s=n.map((t=>t.visible?"visible":"hidden")).join(";"),r=n[0].visible?"visible":"hidden";a+=`<use href="${i}" width="20" height="20" visibility="${r}">\n\t\t\t\t<animate attributeName="visibility" \n\t\t\t\t\tdur="${e}ms" repeatCount="indefinite"\n\t\t\t\t\tkeyTimes="${o}"\n\t\t\t\t\tvalues="${s}" />\n\t\t\t</use>`}a+="</g>"})),a+="</svg>",a};var Di=function(t,e,n,i){return new(n||(n=Promise))((function(o,a){function s(t){try{l(i.next(t))}catch(t){a(t)}}function r(t){try{l(i.throw(t))}catch(t){a(t)}}function l(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(s,r)}l((i=i.apply(t,e||[])).next())}))};const Ti=t=>{t.ghosts=[{x:26,y:2,name:"blinky",direction:"left",scared:!1,target:void 0,inHouse:!1,respawnCounter:0,freezeCounter:0,justReleasedFromHouse:!1},{x:25,y:3,name:"inky",direction:"up",scared:!1,target:void 0,inHouse:!0,respawnCounter:0,freezeCounter:10,justReleasedFromHouse:!1},{x:26,y:3,name:"pinky",direction:"down",scared:!1,target:void 0,inHouse:!0,respawnCounter:0,freezeCounter:20,justReleasedFromHouse:!1},{x:27,y:3,name:"clyde",direction:"up",scared:!1,target:void 0,inHouse:!0,respawnCounter:0,freezeCounter:30,justReleasedFromHouse:!1}],t.ghosts.forEach((t=>{t.justReleasedFromHouse=!1,t.respawnCounter=0,t.inHouse&&("inky"===t.name?t.direction="up":"pinky"===t.name?t.direction="down":"clyde"===t.name&&(t.direction="up"))}))},Oi=t=>Di(void 0,void 0,void 0,(function*(){var e,n;if(t.frameCount++,t.pacman.deadRemainingDuration>0&&(t.pacman.deadRemainingDuration--,0===t.pacman.deadRemainingDuration&&((t=>{t.pacman.x=27,t.pacman.y=7,t.pacman.direction="right",t.pacman.recentPositions=[]})(t),Ti(t))),t.pacman.powerupRemainingDuration>0&&(t.pacman.powerupRemainingDuration--,0===t.pacman.powerupRemainingDuration&&(t.ghosts.forEach((t=>{var e,n;"eyes"!==t.name&&0===(null!==(e=t.subX)&&void 0!==e?e:0)&&0===(null!==(n=t.subY)&&void 0!==n?n:0)&&(t.scared=!1)})),t.pacman.points=0)),t.ghosts.forEach((e=>{e.inHouse&&e.respawnCounter&&e.respawnCounter>0&&(e.respawnCounter--,0===e.respawnCounter&&(e.name=e.originalName||(t=>{const e=["blinky","inky","pinky","clyde"];return e[t%e.length]})(t.ghosts.indexOf(e)),e.inHouse=!1,e.scared=t.pacman.powerupRemainingDuration>0,e.justReleasedFromHouse=!0)),e.freezeCounter&&(e.freezeCounter--,0===e.freezeCounter&&Qi(t,e.name))})),!t.grid.some((t=>t.some((t=>t.commitsCount>0))))){const n=Ii(t);return t.config.svgCallback(n),t.config.gameStatsCallback&&t.config.gameStatsCallback({totalScore:t.pacman.totalPoints,steps:t.aliveSteps,ghostsEaten:null!==(e=t.pacman.ghostsEaten)&&void 0!==e?e:0}),void t.config.gameOverCallback()}Mi(t),Ni(t),0===t.pacman.deadRemainingDuration&&(yi(t),Ni(t)),t.pacmanMouthOpen=!t.pacmanMouthOpen,0===t.pacman.deadRemainingDuration&&t.aliveSteps++,t.config.gameStatsCallback&&t.config.gameStatsCallback({totalScore:t.pacman.totalPoints,steps:t.aliveSteps,ghostsEaten:null!==(n=t.pacman.ghostsEaten)&&void 0!==n?n:0}),Vi(t)})),Vi=t=>{t.gameHistory.push({pacman:Object.assign(Object.assign({},t.pacman),{recentPositions:[...t.pacman.recentPositions]}),ghosts:t.ghosts.map((t=>Object.assign({},t)))})},Ni=t=>{t.pacman.deadRemainingDuration||t.ghosts.forEach((e=>{var n;"eyes"!==e.name&&e.x===t.pacman.x&&e.y===t.pacman.y&&(t.pacman.powerupRemainingDuration&&e.scared?(e.originalName=e.name,e.name="eyes",e.scared=!1,e.target={x:26,y:3},e.subX=0,e.subY=0,t.pacman.points+=10,t.pacman.ghostsEaten=(null!==(n=t.pacman.ghostsEaten)&&void 0!==n?n:0)+1):(t.pacman.points=0,t.pacman.powerupRemainingDuration=0,0===t.pacman.deadRemainingDuration&&(t.pacman.deadRemainingDuration=10)))}))},Qi=(t,e)=>{const n=t.ghosts.find((t=>t.name===e&&t.inHouse));n&&(n.justReleasedFromHouse=!0,n.y=2,n.direction="up")},Yi=t=>Di(void 0,void 0,void 0,(function*(){t.frameCount=0,t.aliveSteps=0,t.gameHistory=[],t.cellEvents=[],t.ghosts.forEach((t=>t.scared=!1)),oi="scatter",ai=0,si=0,t.grid=f(t),t.initialColors=t.grid.map((t=>t.map((t=>t.color))));const e=()=>t.grid.some((t=>t.some((t=>t.commitsCount>0))));for(e()&&((t=>{t.pacman={x:0,y:0,direction:"right",points:0,totalPoints:0,deadRemainingDuration:0,powerupRemainingDuration:0,recentPositions:[],ghostsEaten:0}})(t),Ti(t));e()&&t.gameHistory.length<3e3;)yield Oi(t);yield Oi(t)})),Fi={frameCount:0,aliveSteps:0,contributions:[],pacman:{x:0,y:0,direction:"right",points:0,totalPoints:0,deadRemainingDuration:0,powerupRemainingDuration:0,recentPositions:[],ghostsEaten:0},ghosts:[],grid:[],monthLabels:[],pacmanMouthOpen:!0,gameInterval:0,gameHistory:[],initialColors:[],cellEvents:[],config:void 0,useGithubThemeColor:!0},Hi=(t,e,n,o,a)=>{"horizontal"==n?(ti(t,e,"horizontal",a),"x"==o?ti(i-t-1,e,"horizontal",a):"y"==o?ti(t,7-e,"horizontal",a):"xy"==o&&(ti(i-t-1,e,"horizontal",a),ti(t,7-e,"horizontal",a),ti(i-t-1,7-e,"horizontal",a))):(ti(t,e,"vertical",a),"x"==o?ti(i-t,e,"vertical",a):"y"==o?ti(t,7-e-1,"vertical",a):"xy"==o&&(ti(i-t,e,"vertical",a),ti(t,7-e-1,"vertical",a),ti(i-t,7-e-1,"vertical",a)))};class Gi{constructor(t){this.conf=Object.assign({},t)}start(){return t=this,e=void 0,i=function*(){const t={platform:"github",username:"",svgCallback:t=>{},gameOverCallback:()=>{},gameTheme:"github",pointsIncreasedCallback:t=>{},githubSettings:{accessToken:""},playerStyle:xi.OPPORTUNISTIC};return this.store=JSON.parse(JSON.stringify(Fi)),this.store.config=Object.assign(Object.assign({},t),this.conf),this.store.contributions=yield K(this.store),Hi(0,2,"horizontal","xy","L1"),Hi(1,2,"horizontal","xy","L1"),Hi(4,1,"vertical","x","L2"),Hi(4,2,"vertical","x","L2"),Hi(4,3,"vertical","x","L2"),Hi(4,4,"vertical","x","L2"),Hi(3,3,"horizontal","x","L3"),Hi(2,3,"horizontal","x","L3"),Hi(4,5,"horizontal","x","L4"),Hi(6,4,"vertical","x","L5"),Hi(6,3,"vertical","x","L5"),Hi(6,2,"vertical","x","L5"),Hi(6,2,"horizontal","x","L6"),Hi(7,2,"horizontal","x","L6"),Hi(8,2,"horizontal","x","L6"),Hi(9,2,"horizontal","x","L6"),Hi(13,2,"horizontal","xy","L7"),Hi(14,2,"horizontal","xy","L7"),Hi(15,2,"horizontal","xy","L7"),Hi(16,2,"horizontal","xy","L7"),Hi(17,2,"horizontal","xy","L7"),Hi(18,2,"horizontal","xy","L7"),Hi(16,2,"vertical","xy","L8"),Hi(8,1,"horizontal","x","L9"),Hi(9,1,"horizontal","x","L9"),Hi(10,1,"horizontal","x","L9"),Hi(11,1,"horizontal","x","L9"),Hi(12,1,"vertical","x","L10"),Hi(12,3,"vertical","x","L10"),Hi(11,4,"horizontal","x","L11"),Hi(10,4,"horizontal","x","L11"),Hi(9,4,"horizontal","x","L11"),Hi(8,4,"horizontal","x","L11"),Hi(8,4,"vertical","x","L12"),Hi(8,5,"vertical","x","L12"),Hi(23,1,"horizontal","x","L18"),Hi(22,1,"horizontal","x","L18"),Hi(21,1,"horizontal","x","L18"),Hi(21,1,"vertical","x","L18"),Hi(21,2,"vertical","x","L18"),Hi(21,3,"vertical","x","L18"),Hi(20,4,"horizontal","x","L18"),Hi(19,4,"horizontal","x","L18"),Hi(19,3,"vertical","x","L18"),Hi(18,3,"horizontal","x","L18"),Hi(22,5,"vertical","x","L19"),Hi(21,5,"horizontal","x","L19"),Hi(20,5,"horizontal","x","L19"),Hi(20,5,"vertical","x","L19"),Hi(1,6,"horizontal","x","L20"),Hi(2,6,"horizontal","x","L20"),Hi(3,4,"vertical","x","L20"),Hi(5,6,"horizontal","x","L21"),Hi(6,6,"horizontal","x","L21"),ti(25,2,"horizontal","GH_TOP"),ti(27,2,"horizontal","GH_TOP"),ti(25,4,"horizontal","GH_BOTTOM"),ti(26,4,"horizontal","GH_BOTTOM"),ti(27,4,"horizontal","GH_BOTTOM"),ti(25,3,"vertical","GH_LEFT"),ti(28,3,"vertical","GH_RIGHT"),ti(25,2,"vertical","GH_LEFT"),ti(28,2,"vertical","GH_RIGHT"),g(this.store),m(this.store),yield Yi(this.store),this.store},new((n=void 0)||(n=Promise))((function(o,a){function s(t){try{l(i.next(t))}catch(t){a(t)}}function r(t){try{l(i.throw(t))}catch(t){a(t)}}function l(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(s,r)}l((i=i.apply(t,e||[])).next())}));var t,e,n,i}stop(){var t;t=this.store,Di(void 0,void 0,void 0,(function*(){clearInterval(t.gameInterval)}))}}const ji=["#e74c3c","#f1c40f","#2ecc71","#3498db","#9b59b6","#e67e22"],Ki=t=>22*t+10,Ji=t=>22*t+15+10,Pi=(t,e,n)=>{0===t.keyTimes.length||e!==t.keyTimes[t.keyTimes.length-1]?(t.keyTimes.push(e),t.values.push(n)):t.values[t.values.length-1]=n},Li=t=>(1!==t.keyTimes[t.keyTimes.length-1]&&(t.keyTimes.push(1),t.values.push(t.values[t.values.length-1])),{keyTimes:t.keyTimes.join(";"),values:t.values.join(";")}),zi=(t,e)=>Number((t/Math.max(e-1,1)).toFixed(4)),Wi=(t,e,n,i)=>{var o,a;const s=t.gameHistory.length,r=null!==(a=null===(o=t.initialColors[e])||void 0===o?void 0:o[n])&&void 0!==a?a:i,l=t.cellEvents.filter((t=>t.x===e&&t.y===n));if(0===l.length)return{keyTimes:"0;1",values:`${r};${r}`};const A={keyTimes:[0],values:[r]};for(const t of l){const e=zi(t.frameIndex,s);Pi(A,e,t.color)}return Li(A)},Xi=t=>{var e,n,a,s,r,l,A,c,d;const h=t.gameHistory.length,g=`${Math.max(h*o/6,1e3)}ms`,m=u(t),f=m.intensityColors[0];let p='<svg width="1166" height="249" xmlns="http://www.w3.org/2000/svg">';p+=`<desc>Generated with puzzle-bobble-contribution-graph on ${new Date}</desc>`,p+=`<rect width="100%" height="100%" fill="${m.gridBackground}"/>`;let y="";for(let e=0;e<i;e++)t.monthLabels[e]!==y&&(p+=`<text x="${22*e+10}" y="10" text-anchor="middle" font-size="10" fill="${m.textColor}">${t.monthLabels[e]}</text>`,y=t.monthLabels[e]);for(let e=0;e<i;e++)for(let n=0;n<7;n++){const i=Ki(e),o=Ji(n),a=Wi(t,e,n,f);p+=`<circle cx="${i}" cy="${o}" r="9" fill="${f}">\n\t\t\t\t<animate attributeName="fill" calcMode="discrete" dur="${g}" repeatCount="indefinite"\n\t\t\t\t\tvalues="${a.values}" keyTimes="${a.keyTimes}"/>\n\t\t\t</circle>`}if(h>=2){const n=(t=>{const e=[],n=new Map;for(let i=0;i<t.gameHistory.length;i++){const o=t.gameHistory[i].activeBubble;for(const[t,a]of n)o&&o.id===t||(e.push({id:t,colorIndex:a.colorIndex,startFrame:a.startFrame,endFrame:i-1,xPositions:a.xs,yPositions:a.ys}),n.delete(t));if(o&&o.active)if(n.has(o.id)){const t=n.get(o.id);t.xs.push(o.x),t.ys.push(o.y)}else n.set(o.id,{colorIndex:o.colorIndex,startFrame:i,xs:[o.x],ys:[o.y]})}for(const[i,o]of n)e.push({id:i,colorIndex:o.colorIndex,startFrame:o.startFrame,endFrame:t.gameHistory.length-1,xPositions:o.xs,yPositions:o.ys});return e})(t);for(const t of n){const n=Number((t.startFrame/(h-1)).toFixed(4)),i=Number((Math.min(t.endFrame+1,h-1)/(h-1)).toFixed(4)),o=null!==(e=ji[t.colorIndex])&&void 0!==e?e:ji[0];let a,s;n<=0&&i>=1?(a="0;1",s="1;1"):n<=0?(a=`0;${i};${i};1`,s="1;1;0;0"):i>=1?(a=`0;${n};${n};1`,s="0;0;1;1"):(a=`0;${n};${n};${i};${i};1`,s="0;0;1;1;0;0");const r=[],l=[],A=t.xPositions[0].toFixed(1),c=t.yPositions[0].toFixed(1);t.startFrame>0&&(r.push(0),l.push(`${A},${c}`));for(let e=0;e<t.xPositions.length;e++){const n=t.startFrame+e,i=Number((n/(h-1)).toFixed(4)),o=t.xPositions[e].toFixed(1),a=t.yPositions[e].toFixed(1);0!==r.length&&i===r[r.length-1]||(r.push(i),l.push(`${o},${a}`))}if(1!==r[r.length-1]){const e=t.xPositions[t.xPositions.length-1].toFixed(1),n=t.yPositions[t.yPositions.length-1].toFixed(1);r.push(1),l.push(`${e},${n}`)}p+=`<circle cx="0" cy="0" r="9" fill="${o}" opacity="0" stroke="white" stroke-width="1" stroke-opacity="0.4">\n\t\t\t\t<animate attributeName="opacity" calcMode="discrete" dur="${g}" repeatCount="indefinite"\n\t\t\t\t\tkeyTimes="${a}" values="${s}"/>\n\t\t\t\t<animateTransform attributeName="transform" type="translate" calcMode="linear"\n\t\t\t\t\tdur="${g}" repeatCount="indefinite"\n\t\t\t\t\tkeyTimes="${r.join(";")}" values="${l.join(";")}"/>\n\t\t\t</circle>`}}if(h>=2)for(const e of t.popEvents){const t=Number((e.frameIndex/(h-1)).toFixed(4)),n=Number((Math.min(e.frameIndex+8,h-1)/(h-1)).toFixed(4));if(n<=t)continue;const i=`0;${t};${t};${n};1`,o="0;0;1;0;0";for(const{x:t,y:n}of e.cells)p+=`<circle cx="${Ki(t).toFixed(1)}" cy="${Ji(n).toFixed(1)}" r="4" fill="none" stroke="${e.color}" stroke-width="2" opacity="0">\n\t\t\t\t\t<animate attributeName="r" calcMode="linear" dur="${g}" repeatCount="indefinite" keyTimes="${i}" values="4;4;4;20;20"/>\n\t\t\t\t\t<animate attributeName="stroke-width" calcMode="linear" dur="${g}" repeatCount="indefinite" keyTimes="${i}" values="2;2;2;0;0"/>\n\t\t\t\t\t<animate attributeName="opacity" calcMode="linear" dur="${g}" repeatCount="indefinite" keyTimes="${i}" values="${o}"/>\n\t\t\t\t</circle>`}if(h>=2){const e=169,i=583..toFixed(1),o=(e+30).toFixed(1),u={keyTimes:[],values:[]};for(let e=0;e<t.gameHistory.length;e++){const n=zi(e,h),a=(90-t.gameHistory[e].cannon.angleDeg).toFixed(1);Pi(u,n,`${a} ${i} ${o}`)}const f=Li(u),y=22,x=Number(i),v=Number(o),b=v-y,C={keyTimes:[],values:[]};for(let e=0;e<t.gameHistory.length;e++){const i=zi(e,h),o=t.gameHistory[e].currentBubbleColorIndex;Pi(C,i,null!==(n=ji[o])&&void 0!==n?n:ji[0])}const w=Li(C);p+=`<circle cx="${i}" cy="${o}" r="10" fill="${null!==(r=ji[null!==(s=null===(a=t.gameHistory[0])||void 0===a?void 0:a.currentBubbleColorIndex)&&void 0!==s?s:0])&&void 0!==r?r:ji[0]}" stroke="white" stroke-width="2">\n\t\t\t<animate attributeName="fill" calcMode="discrete" dur="${g}" repeatCount="indefinite"\n\t\t\t\tvalues="${w.values}" keyTimes="${w.keyTimes}"/>\n\t\t\t<animateTransform attributeName="transform" type="rotate" calcMode="linear"\n\t\t\t\tdur="${g}" repeatCount="indefinite"\n\t\t\t\tkeyTimes="${f.keyTimes}" values="${f.values}"/>\n\t\t</circle>`,p+=`<line x1="${x}" y1="${v}" x2="${x}" y2="${b}" stroke="#cccccc" stroke-width="6" stroke-linecap="round">\n\t\t\t<animateTransform attributeName="transform" type="rotate" calcMode="linear"\n\t\t\t\tdur="${g}" repeatCount="indefinite"\n\t\t\t\tkeyTimes="${f.keyTimes}" values="${f.values}"/>\n\t\t</line>`;const B={keyTimes:[],values:[]};for(let e=0;e<t.gameHistory.length;e++){const n=zi(e,h),i=t.gameHistory[e].nextBubbleColorIndex;Pi(B,n,null!==(l=ji[i])&&void 0!==l?l:ji[0])}const k=Li(B),E=(Number(i)+28).toFixed(1),M=o,R=null!==(d=ji[null!==(c=null===(A=t.gameHistory[0])||void 0===A?void 0:A.nextBubbleColorIndex)&&void 0!==c?c:0])&&void 0!==d?d:ji[0];p+=`<text x="${E}" y="${(Number(o)-16).toFixed(1)}" text-anchor="middle" font-size="8" fill="${m.textColor}" opacity="0.8">NEXT</text>`,p+=`<circle cx="${E}" cy="${M}" r="9" fill="${R}" stroke="white" stroke-width="1" stroke-opacity="0.5">\n\t\t\t<animate attributeName="fill" calcMode="discrete" dur="${g}" repeatCount="indefinite"\n\t\t\t\tvalues="${k.values}" keyTimes="${k.keyTimes}"/>\n\t\t</circle>`}return p+="</svg>",p};const Zi=t=>22*t+10,qi=t=>22*t+15+10,$i=t=>Math.round((t-10)/22),_i=t=>Math.round((t-15-10)/22),to=t=>t.grid.some((t=>t.some((t=>t.commitsCount>0)))),eo=(t,e,n,o)=>{var a,s,r;const l=new Set,A=[],c=[{x:e,y:n}];for(;c.length;){const{x:e,y:n}=c.pop(),d=`${e},${n}`;if(l.has(d))continue;if(e<0||e>=i||n<0||n>=7)continue;const h=null===(a=t.grid[e])||void 0===a?void 0:a[n];h&&0!==h.commitsCount&&(null!==(r=null===(s=t.cellBubbleColors[e])||void 0===s?void 0:s[n])&&void 0!==r?r:-1)===o&&(l.add(d),A.push({x:e,y:n}),c.push({x:e-1,y:n},{x:e+1,y:n},{x:e,y:n-1},{x:e,y:n+1}))}return A},no=(t,e,o,a)=>{var s,r,l,A;const c=o*Math.PI/180;let d=10*Math.cos(c),h=-10*Math.sin(c),u=t,g=e;for(let t=0;t<2e3;t++){if(u+=d,g+=h,u<9&&(u=9,d=Math.abs(d)),u>1157&&(u=1157,d=-Math.abs(d)),g<0)return null;const t=$i(u),e=_i(g);if(!(e<0||e>=7||t<0||t>=i)){for(const[o,l]of[[0,0],[1,0],[-1,0],[0,1],[0,-1]]){const A=t+o,c=e+l;if(!(A<0||A>=i||c<0||c>=7)&&(null===(r=null===(s=a.grid[A])||void 0===s?void 0:s[c])||void 0===r?void 0:r.commitsCount)>0){const t=Zi(A),e=qi(c);if(Math.hypot(u-t,g-e)<n)return{col:Math.max(0,Math.min(52,$i(u))),row:Math.max(0,Math.min(6,_i(g)))}}}if(0===e&&0===(null===(A=null===(l=a.grid[t])||void 0===l?void 0:l[0])||void 0===A?void 0:A.commitsCount))return{col:Math.max(0,Math.min(52,t)),row:0}}}return null},io=t=>{t.gameHistory.push({cannon:Object.assign({},t.cannon),activeBubble:t.activeBubble?Object.assign({},t.activeBubble):null,nextBubbleColorIndex:t.nextBubbleColorIndex,currentBubbleColorIndex:t.currentBubbleColorIndex})},oo=t=>{var e,n,o,a,s,r,l;if(t.frameCount++,!t.activeBubble){-1===t.cannonTargetAngle&&(t.cannonTargetAngle=((t,e,n,o)=>{var a,s,r,l,A,c,d,h,u,g,m,f,p,y;const x=1664525*t.nextBubbleId+1013904223>>>0,v=[],b=[],C=[],w=[[-1,0],[1,0],[0,-1],[0,1],[-1,1],[0,1],[1,1],[-1,2],[0,2],[1,2]];for(let e=12;e<=168;e+=2){const n=no(583,199,e,t);if(!n)continue;if((null!==(r=null===(s=null===(a=t.grid[n.col])||void 0===a?void 0:a[n.row])||void 0===s?void 0:s.commitsCount)&&void 0!==r?r:0)>0)continue;let u=!1,g=!1,m=0;for(const[e,a]of w){const s=n.col+e,r=n.row+a;if(!(s<0||s>=i||r<0||r>=7)&&0!==(null!==(c=null===(A=null===(l=t.grid[s])||void 0===l?void 0:l[r])||void 0===A?void 0:A.commitsCount)&&void 0!==c?c:0)&&(g=!0,(null!==(h=null===(d=t.cellBubbleColors[s])||void 0===d?void 0:d[r])&&void 0!==h?h:-1)===o)){u=!0;const e=eo(t,s,r,o).length+1;e>m&&(m=e)}}m>=3?v.push({angleDeg:e,score:m}):u?b.push(e):g&&C.push(e)}if(v.length>0){const t=Math.max(...v.map((t=>t.score))),e=v.filter((e=>e.score===t));return e[x%e.length].angleDeg}if(b.length>0)return b[x%b.length];if(C.length>0)return C[x%C.length];let B=90,k=1/0;for(let e=12;e<=168;e+=2){const n=no(583,199,e,t);if(!n)continue;if((null!==(m=null===(g=null===(u=t.grid[n.col])||void 0===u?void 0:u[n.row])||void 0===g?void 0:g.commitsCount)&&void 0!==m?m:0)>0)continue;const o=Zi(n.col),a=qi(n.row);let s=1/0;for(let e=0;e<i;e++)for(let n=0;n<7;n++)if((null!==(y=null===(p=null===(f=t.grid[e])||void 0===f?void 0:f[n])||void 0===p?void 0:p.commitsCount)&&void 0!==y?y:0)>0){const t=Math.hypot(o-Zi(e),a-qi(n));t<s&&(s=t)}s<k&&(k=s,B=e)}return B})(t,0,0,t.nextBubbleColorIndex));const o=t.cannonTargetAngle;t.currentBubbleColorIndex=t.nextBubbleColorIndex;const a=o-t.cannon.angleDeg;if(!(Math.abs(a)<=6))return t.cannon.angleDeg+=6*Math.sign(a),t.cannon.angleDeg=Math.max(10,Math.min(170,t.cannon.angleDeg)),void io(t);t.cannon.angleDeg=o;const s=t.nextBubbleColorIndex;t.currentBubbleColorIndex=s,t.cannonTargetAngle=-1;const r=new Set;for(let o=0;o<i;o++)for(let i=0;i<7;i++)t.grid[o][i].commitsCount>0&&r.add(null!==(n=null===(e=t.cellBubbleColors[o])||void 0===e?void 0:e[i])&&void 0!==n?n:0);const l=[...r];if(l.length>0){const e=1664525*t.frameCount+1013904223>>>0;t.nextBubbleColorIndex=l[e%l.length]}const A=t.cannon.angleDeg*Math.PI/180;return t.activeBubble={id:t.nextBubbleId++,x:583,y:199,vx:10*Math.cos(A),vy:-10*Math.sin(A),colorIndex:s,active:!0},void io(t)}const A=t.activeBubble;if(A.x+=A.vx,A.y+=A.vy,A.x<9&&(A.x=9,A.vx=Math.abs(A.vx)),A.x>1157&&(A.x=1157,A.vx=-Math.abs(A.vx)),A.y<0||A.y>209)return t.activeBubble=null,t.cannonTargetAngle=-1,void io(t);let c=!1,d=-1,h=-1;const g=$i(A.x),m=_i(A.y);t:for(let e=-1;e<=1;e++)for(let n=-1;n<=1;n++){const l=g+e,u=m+n;if(l<0||l>=i||u<0||u>=7)continue;const f=Zi(l),p=qi(u);if(Math.hypot(A.x-f,A.y-p)<18){if((null===(a=null===(o=t.grid[l])||void 0===o?void 0:o[u])||void 0===a?void 0:a.commitsCount)>0){if(0===(null===(r=null===(s=t.grid[g])||void 0===s?void 0:s[m])||void 0===r?void 0:r.commitsCount)&&g>=0&&g<i&&m>=0&&m<7)d=g,h=m;else for(const[e,n]of[[0,1],[-1,0],[1,0],[0,-1]]){const o=l+e,a=u+n;if(o>=0&&o<i&&a>=0&&a<7&&0===t.grid[o][a].commitsCount){d=o,h=a;break}}c=!0;break t}if(0===u){d=l,h=0,c=!0;break t}}}if(!c&&m<=0&&g>=0&&g<i&&(d=g,h=0,c=!0),c&&d>=0&&h>=0){d=Math.max(0,Math.min(52,d)),h=Math.max(0,Math.min(6,h));const e=u(t).intensityColors[0],n=null!==(l=ji[A.colorIndex])&&void 0!==l?l:ji[0];t.grid[d][h]={commitsCount:1,color:n,level:"FIRST_QUARTILE"},t.cellBubbleColors[d][h]=A.colorIndex,t.cellEvents.push({frameIndex:t.gameHistory.length,x:d,y:h,color:n});const i=eo(t,d,h,A.colorIndex);if(i.length>=3){const o=n;for(const{x:n,y:o}of i)t.grid[n][o]={commitsCount:0,color:e,level:"NONE"},t.cellBubbleColors[n][o]=-1,t.cellEvents.push({frameIndex:t.gameHistory.length,x:n,y:o,color:e});t.popEvents.push({frameIndex:t.gameHistory.length,cells:i,color:o}),t.config.pointsIncreasedCallback(t.cellEvents.length)}t.activeBubble=null,t.cannonTargetAngle=-1}io(t)},ao=t=>{return e=void 0,n=void 0,a=function*(){var e,n,o;t.frameCount=0,t.nextBubbleId=0,t.gameHistory=[],t.cellEvents=[],t.popEvents=[],t.activeBubble=null,t.grid=f(t);const a=u(t).intensityColors[0],s=[];for(let e=0;e<i;e++)for(let n=0;n<7;n++)t.grid[e][n].commitsCount>0&&s.push({x:e,y:n});const r=s.length<=50?2:s.length<=150?3:s.length<=250?4:s.length<=350?5:6;let l=2654435761*s.length>>>0;const A=()=>(l=Math.imul(l,1664525)+1013904223>>>0,l/4294967296);t.cellBubbleColors=Array.from({length:i},(()=>new Array(7).fill(-1)));for(const{x:e,y:n}of s)t.cellBubbleColors[e][n]=Math.floor(A()*r);for(let i=0;i<3;i++){const i=t.cellBubbleColors.map((t=>[...t]));for(const{x:o,y:a}of s){const s=new Array(r).fill(0);let l=0;for(const[t,r]of[[-1,0],[1,0],[0,-1],[0,1],[-1,-1],[1,-1],[-1,1],[1,1]]){const A=null!==(n=null===(e=i[o+t])||void 0===e?void 0:e[a+r])&&void 0!==n?n:-1;A>=0&&(s[A]++,l++)}if(l>0){const e=Math.max(...s);e>=.5*l&&(t.cellBubbleColors[o][a]=s.indexOf(e))}}}for(const{x:e,y:n}of s){const i=t.cellBubbleColors[e][n];t.grid[e][n]=Object.assign(Object.assign({},t.grid[e][n]),{color:ji[i]})}t.initialColors=t.grid.map((t=>t.map((t=>t.commitsCount>0?t.color:a))));const c=[...new Set(s.map((({x:e,y:n})=>t.cellBubbleColors[e][n])))];if(t.nextBubbleColorIndex=null!==(o=c[Math.floor(A()*c.length)])&&void 0!==o?o:0,!to(t)){const e=Xi(t);return t.config.svgCallback(e),void t.config.gameOverCallback()}for(t.cannon={angleDeg:90},t.cannonTargetAngle=-1,t.currentBubbleColorIndex=t.nextBubbleColorIndex;to(t)&&t.frameCount<5e3;)oo(t);const d=Xi(t);t.config.svgCallback(d),t.config.gameStatsCallback&&t.config.gameStatsCallback({totalScore:t.cellEvents.length,steps:t.frameCount,ghostsEaten:0}),t.config.gameOverCallback()},new((o=void 0)||(o=Promise))((function(t,i){function s(t){try{l(a.next(t))}catch(t){i(t)}}function r(t){try{l(a.throw(t))}catch(t){i(t)}}function l(e){var n;e.done?t(e.value):(n=e.value,n instanceof o?n:new o((function(t){t(n)}))).then(s,r)}l((a=a.apply(e,n||[])).next())}));var e,n,o,a},so={frameCount:0,nextBubbleId:0,nextBubbleColorIndex:0,currentBubbleColorIndex:0,cannonTargetAngle:-1,contributions:[],cannon:{angleDeg:90},activeBubble:null,grid:[],monthLabels:[],gameHistory:[],initialColors:[],cellBubbleColors:[],cellEvents:[],popEvents:[],config:void 0};class ro{constructor(t){this.conf=Object.assign({},t)}start(){return t=this,e=void 0,i=function*(){return this.store=JSON.parse(JSON.stringify(so)),this.store.config=Object.assign(Object.assign({},{platform:"github",username:"",svgCallback:t=>{},gameOverCallback:()=>{},gameTheme:"github",pointsIncreasedCallback:t=>{},githubSettings:{accessToken:""}}),this.conf),this.store.contributions=yield K(this.store),g(this.store),m(this.store),yield ao(this.store),this.store},new((n=void 0)||(n=Promise))((function(o,a){function s(t){try{l(i.next(t))}catch(t){a(t)}}function r(t){try{l(i.throw(t))}catch(t){a(t)}}function l(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(s,r)}l((i=i.apply(t,e||[])).next())}));var t,e,n,i}stop(){this.store}}const lo={pacman:{label:"👻 Pac-Man",factory:t=>new Gi(t)},breakout:{label:"🧱 Breakout",factory:t=>new cn(t)},galaga:{label:"🚀 Galaga",factory:t=>new wn(t)},"puzzle-bobble":{label:"🫧 Puzzle Bobble",factory:t=>new ro(t)},bomberman:{label:"💣 Bomberman",factory:t=>new Le(t)},minesweeper:{label:"💠 Minesweeper",factory:t=>new Zn(t)}},Ao=Object.keys(lo);class co{constructor(t){const e=lo[t.game];if(!e)throw new Error(`Unknown game "${t.game}". Valid games: ${Ao.join(", ")}`);this.renderer=e.factory(t)}start(){return t=this,e=void 0,i=function*(){return this.renderer.start()},new((n=void 0)||(n=Promise))((function(o,a){function s(t){try{l(i.next(t))}catch(t){a(t)}}function r(t){try{l(i.throw(t))}catch(t){a(t)}}function l(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(s,r)}l((i=i.apply(t,e||[])).next())}));var t,e,n,i}stop(){this.renderer.stop()}}var ho=e.rd,uo=e._B,go=e.Hr,mo=e.Lc,fo=e.jg,po=e.b9,yo=e.qV,xo=e.P4,vo=e.Cf,bo=e.rn,Co=e.OJ,wo=e.U9,Bo=e.Jb,ko=e.eq,Eo=e.U0;export{ho as ARCADE_GAMES,uo as ArcadeRenderer,go as BombermanRenderer,mo as BreakoutRenderer,fo as GAME_REGISTRY,po as GalagaRenderer,yo as MinesweeperRenderer,xo as PLATFORMS,vo as PacmanRenderer,bo as PlayerStyle,Co as PuzzleBobbleRenderer,wo as SCENARIOS,Bo as generateScenarioContributions,ko as isScenarioName,Eo as resolveScenarioName};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pacman-contribution-graph",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.3.1",
|
|
4
4
|
"description": "Generates a pacman game from a github or gitlab user contributions grid",
|
|
5
5
|
"repository": "github:abozanona/pacman-contribution-graph",
|
|
6
6
|
"homepage": "https://abozanona.github.io/pacman-contribution-graph/",
|
|
@@ -23,6 +23,7 @@
|
|
|
23
23
|
"galaga",
|
|
24
24
|
"puzzle-bobble",
|
|
25
25
|
"bomberman",
|
|
26
|
+
"minesweeper",
|
|
26
27
|
"svg",
|
|
27
28
|
"contribution-graph",
|
|
28
29
|
"animation",
|
|
@@ -38,11 +39,13 @@
|
|
|
38
39
|
},
|
|
39
40
|
"devDependencies": {
|
|
40
41
|
"@types/jest": "^30.0.0",
|
|
42
|
+
"@types/node": "^25.9.1",
|
|
41
43
|
"jest": "^30.1.3",
|
|
42
44
|
"prettier": "^3.4.2",
|
|
43
45
|
"terser": "^5.37.0",
|
|
44
46
|
"ts-jest": "^29.4.4",
|
|
45
47
|
"ts-loader": "^9.5.2",
|
|
48
|
+
"ts-node": "^10.9.2",
|
|
46
49
|
"typescript": "^4.9.5",
|
|
47
50
|
"webpack": "^5.97.1",
|
|
48
51
|
"webpack-cli": "^6.0.1",
|