pacman-contribution-graph 3.0.0 → 3.1.0

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 CHANGED
@@ -1,4 +1,4 @@
1
- # 👻🧱 Arcade Contribution Graph Games
1
+ # 👻🧱🚀 Arcade Contribution Graph Games
2
2
 
3
3
  ![Active users count][active-users-shield]
4
4
  [![Forks][forks-shield]][forks-url]
@@ -15,6 +15,7 @@ Transform your GitHub or GitLab contribution graph into arcade games! This JavaS
15
15
  | --------------- | ------------------------------------------------------- |
16
16
  | 👻 **Pac-Man** | Pac-Man eats your contributions while ghosts give chase |
17
17
  | 🧱 **Breakout** | A ball bounces around breaking your contribution bricks |
18
+ | 🚀 **Galaga** | A fighter ship shoots lasers at your contribution grid |
18
19
 
19
20
  More games coming soon!
20
21
 
@@ -26,6 +27,22 @@ More games coming soon!
26
27
  <img alt="pacman contribution graph" src="https://raw.githubusercontent.com/abozanona/abozanona/output/pacman-contribution-graph.svg">
27
28
  </picture>
28
29
 
30
+ ### Breakout preview
31
+
32
+ <picture>
33
+ <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/abozanona/abozanona/output/breakout-contribution-graph-dark.svg">
34
+ <source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/abozanona/abozanona/output/breakout-contribution-graph.svg">
35
+ <img alt="breakout contribution graph" src="https://raw.githubusercontent.com/abozanona/abozanona/output/breakout-contribution-graph.svg">
36
+ </picture>
37
+
38
+ ### Galaga preview
39
+
40
+ <picture>
41
+ <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/abozanona/abozanona/output/galaga-contribution-graph-dark.svg">
42
+ <source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/abozanona/abozanona/output/galaga-contribution-graph.svg">
43
+ <img alt="galaga contribution graph" src="https://raw.githubusercontent.com/abozanona/abozanona/output/galaga-contribution-graph.svg">
44
+ </picture>
45
+
29
46
  ## 🎮 Features
30
47
 
31
48
  Elevate your GitHub profile with the Pac-Man Contribution Graph Game and add a playful touch to your coding journey!
@@ -109,6 +126,28 @@ Here's how to set up and run the games:
109
126
  renderer.start();
110
127
  ```
111
128
 
129
+ import { GalagaRenderer } from 'pacman-contribution-graph';
130
+
131
+ const renderer = new GalagaRenderer({
132
+ username: 'your_username',
133
+ platform: 'github', // or 'gitlab'
134
+ gameTheme: 'github-dark', // 'github', 'github-dark', 'gitlab', or 'gitlab-dark'
135
+ svgCallback: (svg) => {
136
+ document.getElementById('output').innerHTML = svg;
137
+ },
138
+ gameOverCallback: () => {
139
+ console.log('Game over!');
140
+ },
141
+ pointsIncreasedCallback: (points) => {
142
+ console.log('Score:', points);
143
+ }
144
+ });
145
+ renderer.start();
146
+
147
+ ```
148
+
149
+ ```
150
+
112
151
  3. **Customize Settings**: Adjust the parameters as needed:
113
152
  - `username`: Your GitHub or GitLab username.
114
153
  - `platform`: Specify `'github'` or `'gitlab'`.
@@ -135,7 +174,7 @@ To showcase the Pac-Man game on your GitHub profile, follow these steps:
135
174
  - Add a `main.yml` file with the following content:
136
175
 
137
176
  ```yaml
138
- name: generate pacman game
177
+ name: generate arcade contribution graphs
139
178
 
140
179
  on:
141
180
  schedule: # Run automatically every 24 hours
@@ -150,16 +189,20 @@ To showcase the Pac-Man game on your GitHub profile, follow these steps:
150
189
  permissions:
151
190
  contents: write
152
191
  runs-on: ubuntu-latest
153
- timeout-minutes: 5
192
+ timeout-minutes: 10
154
193
 
155
194
  steps:
156
- - name: generate pacman-contribution-graph.svg
195
+ - name: generate contribution graph SVGs
157
196
  uses: abozanona/pacman-contribution-graph@main
158
197
  with:
159
198
  github_user_name: ${{ github.repository_owner }}
199
+ # Comma-separated list of games to generate.
200
+ # Valid values: pacman, breakout, galaga
201
+ # Default: pacman
202
+ games: 'pacman,breakout,galaga'
160
203
 
161
- # Push the generated SVG to the output branch
162
- - name: push pacman-contribution-graph.svg to the output branch
204
+ # Push the generated SVGs to the output branch
205
+ - name: push SVGs to the output branch
163
206
  uses: crazy-max/ghaction-github-pages@v3.1.0
164
207
  with:
165
208
  target_branch: output
@@ -175,11 +218,26 @@ To showcase the Pac-Man game on your GitHub profile, follow these steps:
175
218
  ```markdown
176
219
  ## My Contribution Graph
177
220
 
221
+ <!-- Pac-Man -->
178
222
  <picture>
179
223
  <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/[USERNAME]/[USERNAME]/output/pacman-contribution-graph-dark.svg">
180
224
  <source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/[USERNAME]/[USERNAME]/output/pacman-contribution-graph.svg">
181
225
  <img alt="pacman contribution graph" src="https://raw.githubusercontent.com/[USERNAME]/[USERNAME]/output/pacman-contribution-graph.svg">
182
226
  </picture>
227
+
228
+ <!-- Breakout -->
229
+ <picture>
230
+ <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/[USERNAME]/[USERNAME]/output/breakout-contribution-graph-dark.svg">
231
+ <source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/[USERNAME]/[USERNAME]/output/breakout-contribution-graph.svg">
232
+ <img alt="breakout contribution graph" src="https://raw.githubusercontent.com/[USERNAME]/[USERNAME]/output/breakout-contribution-graph.svg">
233
+ </picture>
234
+
235
+ <!-- Galaga -->
236
+ <picture>
237
+ <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/[USERNAME]/[USERNAME]/output/galaga-contribution-graph-dark.svg">
238
+ <source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/[USERNAME]/[USERNAME]/output/galaga-contribution-graph.svg">
239
+ <img alt="galaga contribution graph" src="https://raw.githubusercontent.com/[USERNAME]/[USERNAME]/output/galaga-contribution-graph.svg">
240
+ </picture>
183
241
  ```
184
242
 
185
243
  4. **Commit and Push**:
@@ -215,20 +273,29 @@ To showcase the Pac-Man game on your GitLab profile, follow these steps:
215
273
  variables:
216
274
  GIT_SUBMODULE_STRATEGY: recursive
217
275
 
218
- generate_pacman_graph:
276
+ generate_graphs:
219
277
  stage: generate
220
278
  image: node:20
221
279
  script:
222
280
  - mkdir -p dist
223
281
  - npm install -g pacman-contribution-graph
224
- - pacman-contribution-graph --platform gitlab --username "$CI_PROJECT_NAMESPACE" --gameTheme gitlab --output pacman-contribution-graph-light.svg
225
- - mv pacman-contribution-graph-light.svg dist/pacman-contribution-graph-light.svg
226
- - pacman-contribution-graph --platform gitlab --username "$CI_PROJECT_NAMESPACE" --gameTheme gitlab-dark --output pacman-contribution-graph-dark.svg
227
- - mv pacman-contribution-graph-dark.svg dist/pacman-contribution-graph-dark.svg
282
+ # Pac-Man
283
+ - pacman-contribution-graph --platform gitlab --username "$CI_PROJECT_NAMESPACE" --game pacman --gameTheme gitlab --output dist/pacman-contribution-graph.svg
284
+ - pacman-contribution-graph --platform gitlab --username "$CI_PROJECT_NAMESPACE" --game pacman --gameTheme gitlab-dark --output dist/pacman-contribution-graph-dark.svg
285
+ # Breakout
286
+ - pacman-contribution-graph --platform gitlab --username "$CI_PROJECT_NAMESPACE" --game breakout --gameTheme gitlab --output dist/breakout-contribution-graph.svg
287
+ - pacman-contribution-graph --platform gitlab --username "$CI_PROJECT_NAMESPACE" --game breakout --gameTheme gitlab-dark --output dist/breakout-contribution-graph-dark.svg
288
+ # Galaga
289
+ - pacman-contribution-graph --platform gitlab --username "$CI_PROJECT_NAMESPACE" --game galaga --gameTheme gitlab --output dist/galaga-contribution-graph.svg
290
+ - pacman-contribution-graph --platform gitlab --username "$CI_PROJECT_NAMESPACE" --game galaga --gameTheme gitlab-dark --output dist/galaga-contribution-graph-dark.svg
228
291
  artifacts:
229
292
  paths:
230
- - dist/pacman-contribution-graph-light.svg
293
+ - dist/pacman-contribution-graph.svg
231
294
  - dist/pacman-contribution-graph-dark.svg
295
+ - dist/breakout-contribution-graph.svg
296
+ - dist/breakout-contribution-graph-dark.svg
297
+ - dist/galaga-contribution-graph.svg
298
+ - dist/galaga-contribution-graph-dark.svg
232
299
  expire_in: 1 hour
233
300
  rules:
234
301
  - if: '$CI_PIPELINE_SOURCE == "schedule"'
@@ -240,13 +307,12 @@ To showcase the Pac-Man game on your GitLab profile, follow these steps:
240
307
  script:
241
308
  - apk add --no-cache git
242
309
  - mkdir -p output
243
- - cp dist/pacman-contribution-graph-light.svg output/
244
- - cp dist/pacman-contribution-graph-dark.svg output/
310
+ - cp dist/*.svg output/
245
311
  - git remote set-url origin https://gitlab-ci-token:${CI_PUSH_TOKEN}@gitlab.com/${CI_PROJECT_PATH}.git
246
- - git config --global user.email "pacman-bot@example.com"
247
- - git config --global user.name "Pacman Bot"
248
- - git add output/pacman-contribution-graph-light.svg output/pacman-contribution-graph-dark.svg
249
- - git commit -m "Update Pac-Man contribution graph [ci skip]" || echo "No changes"
312
+ - git config --global user.email "arcade-bot@example.com"
313
+ - git config --global user.name "Arcade Bot"
314
+ - git add output/*.svg
315
+ - git commit -m "Update arcade contribution graphs [ci skip]" || echo "No changes"
250
316
  - git push origin HEAD:main
251
317
  rules:
252
318
  - if: '$CI_PIPELINE_SOURCE == "schedule"'
@@ -260,10 +326,25 @@ To showcase the Pac-Man game on your GitLab profile, follow these steps:
260
326
  ```markdown
261
327
  ## My Contribution Graph
262
328
 
329
+ <!-- Pac-Man -->
263
330
  <picture>
264
331
  <source media="(prefers-color-scheme: dark)" srcset="https://gitlab.com/[USERNAME]/[USERNAME]/-/raw/main/output/pacman-contribution-graph-dark.svg">
265
- <source media="(prefers-color-scheme: light)" srcset="https://gitlab.com/[USERNAME]/[USERNAME]/-/raw/main/output/pacman-contribution-graph-light.svg">
266
- <img alt="pacman contribution graph" src="https://gitlab.com/[USERNAME]/[USERNAME]/-/raw/main/output/pacman-contribution-graph-light.svg">
332
+ <source media="(prefers-color-scheme: light)" srcset="https://gitlab.com/[USERNAME]/[USERNAME]/-/raw/main/output/pacman-contribution-graph.svg">
333
+ <img alt="pacman contribution graph" src="https://gitlab.com/[USERNAME]/[USERNAME]/-/raw/main/output/pacman-contribution-graph.svg">
334
+ </picture>
335
+
336
+ <!-- Breakout -->
337
+ <picture>
338
+ <source media="(prefers-color-scheme: dark)" srcset="https://gitlab.com/[USERNAME]/[USERNAME]/-/raw/main/output/breakout-contribution-graph-dark.svg">
339
+ <source media="(prefers-color-scheme: light)" srcset="https://gitlab.com/[USERNAME]/[USERNAME]/-/raw/main/output/breakout-contribution-graph.svg">
340
+ <img alt="breakout contribution graph" src="https://gitlab.com/[USERNAME]/[USERNAME]/-/raw/main/output/breakout-contribution-graph.svg">
341
+ </picture>
342
+
343
+ <!-- Galaga -->
344
+ <picture>
345
+ <source media="(prefers-color-scheme: dark)" srcset="https://gitlab.com/[USERNAME]/[USERNAME]/-/raw/main/output/galaga-contribution-graph-dark.svg">
346
+ <source media="(prefers-color-scheme: light)" srcset="https://gitlab.com/[USERNAME]/[USERNAME]/-/raw/main/output/galaga-contribution-graph.svg">
347
+ <img alt="galaga contribution graph" src="https://gitlab.com/[USERNAME]/[USERNAME]/-/raw/main/output/galaga-contribution-graph.svg">
267
348
  </picture>
268
349
  ```
269
350
 
package/action.yml CHANGED
@@ -1,5 +1,5 @@
1
1
  name: 'generate-pacman-game-from-github-contribution-grid'
2
- description: 'Generates a Pacman game from a github user contributions grid. Output the animation as svg'
2
+ description: 'Generates arcade games (Pac-Man, Breakout) from a GitHub user contributions grid and outputs animated SVGs'
3
3
  author: 'abozanona'
4
4
 
5
5
  runs:
@@ -14,3 +14,11 @@ inputs:
14
14
  description: 'github token used to fetch the contribution calendar. Default to the action token if empty.'
15
15
  required: false
16
16
  default: ${{ github.token }}
17
+ games:
18
+ description: 'Comma-separated list of games to generate. Valid values: pacman, breakout, galaga. Example: "pacman,breakout,galaga"'
19
+ required: false
20
+ default: 'pacman'
21
+ player_style:
22
+ description: 'Pac-Man player style: opportunistic, conservative, or aggressive'
23
+ required: false
24
+ default: 'opportunistic'
package/cli/cli.js CHANGED
@@ -4,9 +4,16 @@
4
4
  import fs from 'fs';
5
5
  import { hideBin } from 'yargs/helpers';
6
6
  import yargs from 'yargs/yargs';
7
- import { PacmanRenderer } from '../dist/pacman-contribution-graph.min.js';
7
+ import { BreakoutRenderer, GalagaRenderer, PacmanRenderer } from '../dist/pacman-contribution-graph.min.js';
8
8
 
9
9
  const argv = yargs(hideBin(process.argv))
10
+ .option('game', {
11
+ alias: 'g',
12
+ describe: 'Game to generate: pacman, breakout, galaga',
13
+ choices: ['pacman', 'breakout', 'galaga'],
14
+ default: 'pacman',
15
+ type: 'string'
16
+ })
10
17
  .option('platform', {
11
18
  alias: 'pl',
12
19
  describe: 'Platform: github, gitlab',
@@ -30,12 +37,12 @@ const argv = yargs(hideBin(process.argv))
30
37
  .option('output', {
31
38
  alias: 'o',
32
39
  describe: 'Output file (SVG)',
33
- default: 'pacman-contribution-graph.svg',
40
+ default: 'contribution-graph.svg',
34
41
  type: 'string'
35
42
  })
36
43
  .help().argv;
37
44
 
38
- const pr = new PacmanRenderer({
45
+ const config = {
39
46
  platform: argv.platform,
40
47
  username: argv.username,
41
48
  gameTheme: argv.gameTheme,
@@ -43,6 +50,17 @@ const pr = new PacmanRenderer({
43
50
  fs.writeFileSync(argv.output, svg);
44
51
  console.log(`SVG saved to ${argv.output}`);
45
52
  }
46
- });
53
+ };
47
54
 
48
- pr.start();
55
+ let renderer;
56
+ switch (argv.game) {
57
+ case 'breakout':
58
+ renderer = new BreakoutRenderer(config);
59
+ break;
60
+ case 'galaga':
61
+ renderer = new GalagaRenderer(config);
62
+ break;
63
+ default:
64
+ renderer = new PacmanRenderer(config);
65
+ }
66
+ renderer.start();
@@ -1 +1 @@
1
- var t={d:(e,n)=>{for(var a in n)t.o(n,a)&&!t.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:n[a]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e)},e={};t.d(e,{Lc:()=>U,Cf:()=>vt,rn:()=>nt});const n=53,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"]}},i=(t,e)=>Math.floor((e.getTime()-t.getTime())/6048e5),o=t=>new Date(Date.UTC(t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate())),r=t=>{var e;return null!==(e=a[t.config.gameTheme])&&void 0!==e?e:a.github},s=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}},c=(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"},l=t=>{const e=o(new Date),n=new Date(e);n.setUTCDate(e.getUTCDate()-365),n.setUTCDate(n.getUTCDate()-n.getUTCDay());const a=Array.from({length:53},(()=>Array.from({length:7},(()=>({commitsCount:0,color:r(t).intensityColors[0],level:"NONE"})))));t.contributions.forEach((c=>{const l=o(new Date(c.date));if(l<n||l>e)return;const A=l.getUTCDay(),u=i(n,l);if(u>=0&&u<53){const e=r(t);a[u][A]={commitsCount:c.count,color:e.intensityColors[s(c.level)],level:c.level}}})),t.grid=a},A=r,u=l,h=t=>{const e=o(new Date),a=new Date(e);a.setUTCDate(e.getUTCDate()-365),a.setUTCDate(a.getUTCDate()-a.getUTCDay());const r=i(a,e)+1,s=Array(r).fill("");let c="";for(let t=0;t<r;t++){const e=new Date(a);e.setUTCDate(e.getUTCDate()+7*t);const n=e.toLocaleString("default",{month:"short"});n!==c&&(s[t]=n,c=n)}t.monthLabels=r>n?s.slice(r-n):s},d=t=>(l(t),t.grid);var g=function(t,e,n,a){return new(n||(n=Promise))((function(i,o){function r(t){try{c(a.next(t))}catch(t){o(t)}}function s(t){try{c(a.throw(t))}catch(t){o(t)}}function c(t){var e;t.done?i(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(r,s)}c((a=a.apply(t,e||[])).next())}))};const m=t=>g(void 0,void 0,void 0,(function*(){var e;return(null===(e=t.config.githubSettings)||void 0===e?void 0:e.accessToken)?yield(t=>g(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,a=r(t);return{date:new Date(e.date),count:e.contributionCount,color:a.intensityColors[s(n)],level:n}}))})))(t):yield(t=>g(void 0,void 0,void 0,(function*(){var e,n;const a=[];let i=!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}),c=yield s.json();i=!c.items||0===c.items.length,a.push(...null!==(n=c.items)&&void 0!==n?n:[]),o++}catch(t){i=!0}}while(!i);const l=Array.from(a.reduce(((t,e)=>{var n,a,i,o;const r=null===(a=null===(n=e.commit.author)||void 0===n?void 0:n.date)||void 0===a?void 0:a.split("T")[0],s=(null===(o=null===(i=e.commit.committer)||void 0===i?void 0:i.date)||void 0===o?void 0:o.split("T")[0])||r,c=(t.get(s)||{count:0}).count+1;return t.set(s,{date:new Date(s),count:c,color:"",level:"NONE"})}),new Map).values()),A=Math.max(...l.map((t=>t.count)).filter((t=>t>0)));return l.map((e=>{const n=c(e.count,A),a=r(t);return{date:new Date(e.date),count:e.count,color:a.intensityColors[s(n)],level:n}}))})))(t)})),f=t=>{return e=void 0,n=void 0,i=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(),a=Object.entries(n).map((([t,e])=>({date:new Date(t),count:Number(e),color:"",level:"NONE"}))),i=Math.max(...a.map((t=>t.count)).filter((t=>t>0)));return a.map((e=>{const n=c(e.count,i),a=r(t);return{date:new Date(e.date),count:e.count,color:a.intensityColors[s(n)],level:n}}))},new((a=void 0)||(a=Promise))((function(t,o){function r(t){try{c(i.next(t))}catch(t){o(t)}}function s(t){try{c(i.throw(t))}catch(t){o(t)}}function c(e){var n;e.done?t(e.value):(n=e.value,n instanceof a?n:new a((function(t){t(n)}))).then(r,s)}c((i=i.apply(e,n||[])).next())}));var e,n,a,i},y=.21,p=7.4,x=t=>22*t,v=t=>22*t+15,C=(t,e,n)=>{var a,i;const o=t.gameHistory.length,r=null!==(i=null===(a=t.initialColors[e])||void 0===a?void 0:a[n])&&void 0!==i?i:"#ebedf0",s=t.brickEvents.filter((t=>t.x===e&&t.y===n));if(0===s.length)return{keyTimes:"0;1",values:`${r};${r}`};const c=[0],l=[r];for(const t of s){const e=Number((t.frameIndex/Math.max(o-1,1)).toFixed(4));e!==c[c.length-1]?(c.push(e),l.push(t.color)):l[l.length-1]=t.color}return 1!==c[c.length-1]&&(c.push(1),l.push(l[l.length-1])),{keyTimes:c.join(";"),values:l.join(";")}},b=(t,e)=>{var n,a,i,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=[],c=[];let l=null,A=null;return e.forEach(((t,e)=>{t!==l&&(null!==l&&null!==A&&e-1!==A&&(s.push(Number(((e-1)/(r-1)).toFixed(4))),c.push(l)),s.push(Number((e/(r-1)).toFixed(4))),c.push(t),l=t,A=e)})),0!==s.length&&1===s[s.length-1]||(0===s.length?(s.push(0,1),c.push(null!==(a=e[0])&&void 0!==a?a:"0,0",null!==(i=e[e.length-1])&&void 0!==i?i:"0,0")):(s.push(1),c.push(null!==(o=null!=l?l:e[e.length-1])&&void 0!==o?o:"0,0"))),{keyTimes:s.join(";"),values:c.join(";")}},w=t=>{const e=200*t.gameHistory.length/2,a=A(t);let i='<svg width="1166" height="209" xmlns="http://www.w3.org/2000/svg">';i+=`<desc>Generated with breakout-contribution-graph on ${new Date}</desc>`,i+=`<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>`,i+=`<rect width="100%" height="100%" fill="${a.gridBackground}"/>`;let o="";for(let e=0;e<n;e++)t.monthLabels[e]!==o&&(i+=`<text x="${22*e+10}" y="10" text-anchor="middle" font-size="10" fill="${a.textColor}">${t.monthLabels[e]}</text>`,o=t.monthLabels[e]);for(let o=0;o<n;o++)for(let n=0;n<7;n++){const r=x(o),s=v(n),c=C(t,o,n);i+=`<rect id="c-${o}-${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="${c.values}" keyTimes="${c.keyTimes}"/>\n\t\t\t</rect>`}const r=Math.round(4.62),s=b(t,(t=>t.gameHistory.map((t=>`${x(t.ball.x)},${v(t.ball.y)}`)))(t));i+=`<circle id="ball" cx="0" cy="0" r="${r}" 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="${s.keyTimes}"\n\t\t\tvalues="${s.values}"/>\n\t</circle>`;const c=v(p),l=Math.round(152),u=Math.round(11),h=b(t,(t=>t.gameHistory.map((t=>`${x(t.paddle.x)},0`)))(t));return i+=`<rect id="paddle" x="0" y="${c}" width="${l}" height="${u}" 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="${h.keyTimes}"\n\t\t\tvalues="${h.values}"/>\n\t</rect>`,i+="</svg>",i};const R=20/22,B=["NONE","FIRST_QUARTILE","SECOND_QUARTILE","THIRD_QUARTILE","FOURTH_QUARTILE"],S=t=>{const e=B.indexOf(t);return B[Math.max(0,e-1)]},E=t=>{var e,a;t.frameCount++;const{ball:i,paddle:o,grid:r}=t,s=Math.hypot(i.dx,i.dy),c=Math.ceil(s/y),l=1/c;for(let s=0;s<c;s++){i.x+=i.dx*l,i.y+=i.dy*l,i.x-y<=0&&(i.x=y,i.dx=Math.abs(i.dx)),i.x+y>=n&&(i.x=52.79,i.dx=-Math.abs(i.dx)),i.y-y<=0&&(i.y=y,i.dy=Math.abs(i.dy));const s=o.x,c=o.x+7;if(i.dy>0&&i.y+y>=p&&i.y-y<7.9&&i.x>=s-y&&i.x<=c+y){i.y=7.19;const e=s+3.5,n=Math.max(-1,Math.min(1,(i.x-e)/3.5)),a=Math.hypot(i.dx,i.dy),o=65*n*(Math.PI/180);i.dx=a*Math.sin(o),i.dy=-a*Math.cos(o),t.bouncesSinceTargetSet++,t.bouncesSinceTargetSet>=5&&(t.targetBrick=T(t),t.bouncesSinceTargetSet=0)}i.y>8.4&&(i.x=26.5,i.y=5.9,i.dy=-Math.abs(i.dy));const u=Math.max(0,Math.floor(i.x-y)),h=Math.min(52,Math.floor(i.x+y)),d=Math.max(0,Math.floor(i.y-y)),g=Math.min(6,Math.floor(i.y+y));let m=!1,f=!1;const x=A(t);for(let n=u;n<=h;n++)for(let o=d;o<=g;o++){if(0===r[n][o].commitsCount)continue;const s=Math.max(n,Math.min(n+R,i.x)),c=Math.max(o,Math.min(o+R,i.y));if(Math.pow(i.x-s,2)+Math.pow(i.y-c,2)>=.04409999999999999)continue;const l=r[n][o].level,A=S(l);if(r[n][o].level=A,"NONE"===A)r[n][o].commitsCount=0,r[n][o].color=x.intensityColors[0],(null===(e=t.targetBrick)||void 0===e?void 0:e.cx)===n&&(null===(a=t.targetBrick)||void 0===a?void 0:a.cy)===o&&(t.targetBrick=T(t),t.bouncesSinceTargetSet=0);else{const t=B.indexOf(A);r[n][o].color=x.intensityColors[t]}t.brickEvents.push({frameIndex:t.gameHistory.length,x:n,y:o,color:r[n][o].color});const u=y-Math.abs(i.x-s),h=y-Math.abs(i.y-c);u<=h?(i.x+=i.dx<0?u:-u,m=!0):(i.y+=i.dy<0?h:-h,f=!0),t.framesSinceLastBrickHit=0,t.config.pointsIncreasedCallback(k(t))}m&&(i.dx=-i.dx),f&&(i.dy=-i.dy)}if(i.dy>0&&t.targetBrick){const e=t.targetBrick,a=(p-i.y)/i.dy;let r=i.x+i.dx*a;r=Math.abs((r%106+106)%106),r>n&&(r=106-r);const s=e.cx+.5,c=e.cy+.5,l=p-c,A=s-r,u=Math.atan2(A,Math.max(l,.5))*(180/Math.PI),h=r-Math.max(-65,Math.min(65,u))/65*3.5,d=Math.max(0,Math.min(46,h-3.5));o.x<d-2?o.x+=2:o.x>d+2?o.x-=2:o.x=d}else if(i.dy>0){const t=o.x+3.5;t<i.x-.5?o.x=Math.min(o.x+2,46):t>i.x+.5&&(o.x=Math.max(o.x-2,0))}M(t)},M=t=>{t.gameHistory.push({ball:Object.assign({},t.ball),paddle:Object.assign({},t.paddle)})},k=t=>{let e=0;return t.grid.forEach((t=>t.forEach((t=>{0===t.commitsCount&&e++})))),e},T=t=>{var e,a;const i=[];for(let o=0;o<n;o++)for(let n=0;n<7;n++)(null===(a=null===(e=t.grid[o])||void 0===e?void 0:e[n])||void 0===a?void 0:a.commitsCount)>0&&i.push({cx:o,cy:n});return 0===i.length?null:i[Math.floor(Math.random()*i.length)]},D=t=>{return e=void 0,n=void 0,i=function*(){if(t.frameCount=0,t.framesSinceLastBrickHit=0,t.gameHistory=[],t.brickEvents=[],t.grid=d(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=w(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=T(t),t.bouncesSinceTargetSet=0;t.grid.some((t=>t.some((t=>t.commitsCount>0))))&&t.frameCount<3e3;)E(t),t.frameCount%200==0&&t.grid.reduce(((t,e)=>t+e.filter((t=>t.commitsCount>0)).length),0);const e=w(t);t.config.svgCallback(e),t.config.gameStatsCallback&&t.config.gameStatsCallback({totalScore:k(t),steps:t.frameCount,ghostsEaten:0}),t.config.gameOverCallback()},new((a=void 0)||(a=Promise))((function(t,o){function r(t){try{c(i.next(t))}catch(t){o(t)}}function s(t){try{c(i.throw(t))}catch(t){o(t)}}function c(e){var n;e.done?t(e.value):(n=e.value,n instanceof a?n:new a((function(t){t(n)}))).then(r,s)}c((i=i.apply(e,n||[])).next())}));var e,n,a,i},O={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 U{constructor(t){this.conf=Object.assign({},t)}start(){return t=this,e=void 0,a=function*(){switch(this.store=JSON.parse(JSON.stringify(O)),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 f(this.store);break;case"github":this.store.contributions=yield m(this.store);break;default:throw new Error(`Unsupported platform: ${this.store.config.platform}`)}return u(this.store),h(this.store),yield D(this.store),this.store},new((n=void 0)||(n=Promise))((function(i,o){function r(t){try{c(a.next(t))}catch(t){o(t)}}function s(t){try{c(a.throw(t))}catch(t){o(t)}}function c(t){var e;t.done?i(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(r,s)}c((a=a.apply(t,e||[])).next())}));var t,e,n,a}stop(){this.store}}const z="yellow",I={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:""})))},H=(t,e,n,a,i)=>{"horizontal"===n?t>=0&&t<N.horizontal.length&&e>=0&&e<N.horizontal[0].length&&(N.horizontal[t][e]={active:!0,id:a,color:i}):t>=0&&t<N.vertical.length&&e>=0&&e<N.vertical[0].length&&(N.vertical[t][e]={active:!0,id:a,color:i})},Q=(t,e)=>[[-1,0],[1,0],[0,-1],[0,1]].filter((([a,i])=>{const o=t+a,r=e+i;return!(o<0||o>=n||r<0||r>=7||(-1===a?N.vertical[t][e].active:1===a?N.vertical[t+1][e].active:-1===i?N.horizontal[t][e].active:1===i&&N.horizontal[t][e+1].active))})),V={getValidMoves:Q,calculateDistance:(t,e,n,a)=>Math.sqrt(Math.pow(n-t,2)+Math.pow(a-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:[]})],a=new Set([`${t.x},${t.y}`]);for(;n.length;){n.sort(((t,e)=>t.cost-e.cost));const{x:t,y:i,cost:o,path:r}=n.shift();for(const[s,c]of Q(t,i)){const l=t+s,A=i+c,u=`${l},${A}`;if(a.has(u))continue;a.add(u);const h=[...r,{x:l,y:A}];if(l===e.x&&A===e.y)return h.length>0?h[0]:null;n.push({x:l,y:A,cost:o+1,path:h})}}return null}},L={blinky:{x:50,y:0},pinky:{x:0,y:0},inky:{x:50,y:6},clyde:{x:0,y:6}};let P="scatter",Y=0,F=0;const j=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"}},K=(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")},G=(t,e)=>{const n=L[t.name]||L.blinky;t.target=n;const a=Z(t.x,t.y,n.x,n.y,t.direction);a&&(t.x=a.x,t.y=a.y,a.direction&&(t.direction=a.direction))},J=(t,e)=>{(!t.target||t.x===t.target.x&&t.y===t.target.y)&&(t.target=tt(t.x,t.y));const n=q(t);if(0===n.length)return;const a=t.target.x-t.x,i=t.target.y-t.y;let o=n;if(Math.random()<.5);else{const t=n.filter((t=>{const e=t[0],n=t[1];return a>0&&e>0||a<0&&e<0||i>0&&n>0||i<0&&n<0}));t.length>0&&(o=t)}const[r,s]=o[Math.floor(Math.random()*o.length)];e.pacman.powerupRemainingDuration&&Math.random()<.6||(r>0?t.direction="right":r<0?t.direction="left":s>0?t.direction="down":s<0&&(t.direction="up"),t.x+=r,t.y+=s)},q=t=>V.getValidMoves(t.x,t.y).filter((e=>{const[n,a]=e;return!("right"===t.direction&&n<0||"left"===t.direction&&n>0||"up"===t.direction&&a>0||"down"===t.direction&&a<0)})),W=(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 a=V.findNextStepDijkstra({x:t.x,y:t.y},n);if(a){const e=a.x-t.x,n=a.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=a.x,t.y=a.y}else{const e=Z(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))}},X=(t,e)=>{if("eyes"===t.name)return void W(t);const n=$(t,e);t.target=n;const a=Z(t.x,t.y,n.x,n.y,t.direction);a&&(t.x=a.x,t.y=a.y,a.direction&&(t.direction=a.direction))},Z=(t,e,n,a,i)=>{if(t===n&&e===a)return null;const o=[{x:t,y:e,path:[],direction:i||"right"}],r=new Set;for(r.add(`${t},${e}`);o.length>0;){const t=o.shift(),{x:e,y:i,path:s,direction:c}=t,l=V.getValidMoves(e,i),A=l.filter((t=>{const[e,n]=t;return!c||!("right"===c&&e<0||"left"===c&&e>0||"up"===c&&n>0||"down"===c&&n<0)||1===l.length}));for(const[t,l]of A){const A=e+t,u=i+l,h=`${A},${u}`;if(r.has(h))continue;let d;r.add(h),d=t>0?"right":t<0?"left":l>0?"down":l<0?"up":c;const g=[...s,{x:A,y:u,pathDirection:d}];if(A===n&&u===a)return g.length>0?{x:g[0].x,y:g[0].y,direction:g[0].pathDirection}:null;o.push({x:A,y:u,path:g,direction:d})}}const s=V.getValidMoves(t,e);if(s.length>0){const[n,a]=s[Math.floor(Math.random()*s.length)];let o=i;return n>0?o="right":n<0?o="left":a>0?o="down":a<0&&(o="up"),{x:t+n,y:e+a,direction:o}}return null},$=(t,e)=>{const{pacman:n}=e;let a=_(e),i=1;if("blinky"===t.name){const t=371,e=(t-F)/t;if(e>.7&&(i=1.2),e>.9&&(i=1.4),Math.random()<.8*i)return{x:n.x,y:n.y}}switch(t.name){case"blinky":default:return{x:n.x,y:n.y};case"pinky":const i=4;let o=n.x,r=n.y;return"up"===n.direction?(o=n.x-4,r=n.y-4):(o=n.x+a[0]*i,r=n.y+a[1]*i),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 c={x:n.x+2*a[0],y:n.y+2*a[1]};if("up"===n.direction&&(c.x=n.x-2,c.y=n.y-2),s){const t=c.x-s.x,e=c.y-s.y;c={x:c.x+t,y:c.y+e}}return c.x=Math.min(Math.max(c.x,0),52),c.y=Math.min(Math.max(c.y,0),6),c;case"clyde":return V.calculateDistance(t.x,t.y,n.x,n.y)<8?L.clyde:{x:n.x,y:n.y}}},_=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]}},tt=(t,e)=>{const n=t+Math.floor(17*Math.random())-8,a=e+Math.floor(17*Math.random())-8;return{x:Math.max(0,Math.min(n,52)),y:Math.max(0,Math.min(a,6))}},et=t=>{F=(t=>{let e=0;for(let a=0;a<n;a++)for(let n=0;n<7;n++)"NONE"!==t.grid[a][n].level&&e++;return e})(t),(t=>{t.pacman.powerupRemainingDuration>0||(Y++,Y>=5*("scatter"===P?7:20)&&(P="scatter"===P?"chase":"scatter",Y=0,t.ghosts.forEach((t=>{t.inHouse||"eyes"===t.name||t.scared||j(t)}))))})(t);for(const e of t.ghosts)e.inHouse?K(e,t):("eyes"===e.name&&(e.scared=!1),e.scared?J(e,t):"eyes"===e.name?W(e):"scatter"===P?G(e):X(e,t))};var nt;!function(t){t.CONSERVATIVE="conservative",t.AGGRESSIVE="aggressive",t.OPPORTUNISTIC="opportunistic"}(nt||(nt={}));const at=t=>{const e=[];for(let a=0;a<n;a++)for(let n=0;n<7;n++){const i=t.grid[a][n];if("NONE"!==i.level){const o=V.calculateDistance(a,n,t.pacman.x,t.pacman.y),r=i.commitsCount/(o+1);e.push({x:a,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]},it=t=>{const e=new Map,a=!!t.pacman.powerupRemainingDuration;if(t.ghosts.forEach((t=>{if(!t.scared)for(let a=-5;a<=5;a++)for(let i=-5;i<=5;i++){const o=t.x+a,r=t.y+i;if(o>=0&&o<n&&r>=0&&r<7){const t=`${o},${r}`,n=15-(Math.abs(a)+Math.abs(i));if(n>0){const a=e.get(t)||0;e.set(t,Math.max(a,n))}}}})),a)for(const[t,n]of e.entries())e.set(t,n/5);return e},ot=(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 a=e.x-t.pacman.x,i=e.y-t.pacman.y;t.pacman.direction=a>0?"right":a<0?"left":i>0?"down":i<0?"up":t.pacman.direction,t.pacman.x=e.x,t.pacman.y=e.y},rt=t=>{t.pacman.powerupRemainingDuration=15,t.ghosts.forEach((t=>t.scared=!0))},st=t=>{if(t.pacman.deadRemainingDuration)return;const e=!!t.pacman.powerupRemainingDuration,n=t.ghosts.filter((t=>t.scared));let a;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 a=V.calculateDistance(n.x,n.y,t.pacman.x,t.pacman.y);return a<e.distance?{x:n.x,y:n.y,distance:a}:e}),{x:t.pacman.x,y:t.pacman.y,distance:1/0})})(t);a=null!=e?e:at(t)}else t.pacman.target?t.pacman.x===t.pacman.target.x&&t.pacman.y===t.pacman.target.y?(a=at(t),t.pacman.target=a):a=t.pacman.target:(a=at(t),t.pacman.target=a);a||(a={x:t.pacman.x,y:t.pacman.y});const i=((t,e)=>{var n;const a=[{x:t.pacman.x,y:t.pacman.y,path:[],score:0}],i=new Set([`${t.pacman.x},${t.pacman.y}`]),o=it(t);let r=.5,s=.5;switch(t.config.playerStyle){case nt.CONSERVATIVE:r=3,s=.1;break;case nt.AGGRESSIVE:r=.3,s=2;break;case nt.OPPORTUNISTIC:default:r=.8,s=.8}let c=1/0;t.ghosts.forEach((e=>{if(!e.scared){const n=V.calculateDistance(t.pacman.x,t.pacman.y,e.x,e.y);c=Math.min(c,n)}}));const l=t.config.playerStyle===nt.CONSERVATIVE?5:7,A=c<l;for(t.config.playerStyle===nt.CONSERVATIVE&&A&&(r*=5);a.length>0;){a.sort(((t,e)=>e.score-t.score));const c=a.shift(),{x:l,y:A,path:u}=c;if(l===e.x&&A===e.y){if(u.length>0){let e=0,n=0;return u.forEach((a=>{const i=`${a.x},${a.y}`,c=o.get(i)||0,l=t.grid[a.x][a.y].commitsCount;e-=c*r,n+=l*s})),u[0]}return null}for(const[c,h]of V.getValidMoves(l,A)){const d=l+c,g=A+h,m=`${d},${g}`;if(!i.has(m)){const c=[...u,{x:d,y:g}],l=o.get(m)||0,A=t.grid[d][g].commitsCount,h=V.calculateDistance(d,g,e.x,e.y),f=(null===(n=t.pacman.recentPositions)||void 0===n?void 0:n.includes(m))?100:0;let y,p,x;t.config.playerStyle===nt.CONSERVATIVE?(y=(15-l)*r,l>=5?y-=100:y+=50,p=A*s,x=5*y+p+-h/10-f):(y=(15-l)*r,p=A*s,x=y+p+-h/10-f),a.push({x:d,y:g,path:c,score:x}),i.add(m)}}}return null})(t,a);i?ot(t,i):(t=>{const e=V.getValidMoves(t.pacman.x,t.pacman.y);if(0===e.length)return;const n=e.reduce(((e,[n,a])=>{const i=t.pacman.x+n,o=t.pacman.y+a;let r=1/0;return t.ghosts.forEach((t=>{if(!t.scared){const e=V.calculateDistance(t.x,t.y,i,o);r=Math.min(r,e)}})),r>e.distance?{dx:n,dy:a,distance:r}:e}),{dx:0,dy:0,distance:-1/0});ot(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=A(t);"FOURTH_QUARTILE"===e.level&&rt(t),e.level="NONE",e.color=n.intensityColors[0],e.commitsCount=0}})(t)}catch(t){console.error("Error in movePacman:",t)}},ct=t=>{const e=10,n=t,a=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(a)},${e+e*Math.sin(a)}\n Z`},lt=(t,e,n)=>t.gameHistory.map((t=>t.grid[e][n].color)),At=(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 a=[],i=[],o=null,r=null;return e.forEach(((t,e)=>{t!==o&&(null!==o&&null!==r&&e-1!==r&&(a.push(Number(((e-1/40)/(n-1)).toFixed(4))),i.push(o)),a.push(Number((e/(n-1)).toFixed(4))),i.push(t),o=t,r=e)})),0!==a.length&&1===a[a.length-1]||(0===a.length?(a.push(0,1),i.push(e[0]||"#000",e[e.length-1]||"#000")):(a.push(1),i.push(o||e[e.length-1]||"#000"))),{keyTimes:a.join(";"),values:i.join(";")}},ut=t=>{const e=200*t.gameHistory.length;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="${A(t).gridBackground}"/>`,a+=(()=>{let t="<defs>";return["blinky","inky","pinky","clyde"].forEach((e=>{["up","down","left","right"].forEach((n=>{const a=I[e];n in a&&(t+=`\n <symbol id="ghost-${e}-${n}" viewBox="0 0 20 20">\n <image href="${a[n]}" width="20" height="20"/>\n </symbol>\n `)}))})),t+=`\n <symbol id="ghost-scared" viewBox="0 0 20 20">\n <image href="${I.scared.imgDate}" width="20" height="20"/>\n </symbol>`,["up","down","left","right"].forEach((e=>{I.eyes&&e in I.eyes?t+=`\n <symbol id="ghost-eyes-${e}" viewBox="0 0 20 20">\n <image href="${I.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 i="";for(let e=0;e<n;e++)t.monthLabels[e]!==i&&(a+=`<text x="${22*e+10}" y="10" text-anchor="middle" font-size="10" fill="${A(t).textColor}">${t.monthLabels[e]}</text>`,i=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=At(t,lt(t,i,n));a+=`<rect id="c-${i}-${n}" x="${o}" y="${r}" width="20" height="20" rx="5" fill="${A(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&&N.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="${A(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&&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="${A(t).wallColor}"></rect>`,n=null)}}const o=At(t,t.gameHistory.map((t=>{return(e=t.pacman).deadRemainingDuration?"#80808064":e.powerupRemainingDuration?"red":z;var e}))),r=At(t,(t=>t.gameHistory.map((t=>`${22*t.pacman.x},${22*t.pacman.y+15}`)))(t)),s=At(t,(t=>t.gameHistory.map((t=>{switch(t.pacman.direction){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));return a+=`<path id="pacman" d="${ct(.55)}" fill="${z}">\n\t\t<animate attributeName="fill" dur="${e}ms" repeatCount="indefinite"\n\t\t\tkeyTimes="${o.keyTimes}"\n\t\t\tvalues="${o.values}"/>\n\t\t<animateTransform attributeName="transform" type="translate" dur="${e}ms" repeatCount="indefinite"\n\t\t\tkeyTimes="${r.keyTimes}"\n\t\t\tvalues="${r.values}"\n\t\t\tadditive="sum"/>\n\t\t<animateTransform attributeName="transform" type="rotate" 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<animate attributeName="d" dur="0.5s" repeatCount="indefinite"\n\t\t\tvalues="${ct(.55)};${ct(.05)};${ct(.55)}"/>\n\t</path>`,t.ghosts.forEach(((n,i)=>{const o=At(t,((t,e)=>t.gameHistory.map((t=>{if(e>=t.ghosts.length)return"0,0";const n=t.ghosts[e];return`${22*n.x},${22*n.y+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 a=t.ghosts[e];if(!a)return n;const i=a.scared?"scared":"eyes"===a.name?`eyes-${a.direction||"right"}`:`${a.name}-${a.direction||"right"}`;n[i]=[{time:0,visible:!0}];let o=i;return t.gameHistory.forEach(((a,i)=>{if(e>=a.ghosts.length)return;const r=a.ghosts[e],s=i/(t.gameHistory.length-1),c=r.scared?"scared":"eyes"===r.name?`eyes-${r.direction||"right"}`:`${r.name}-${r.direction||"right"}`;c!==o&&(n[o].push({time:s,visible:!1}),n[c]||(n[c]=[{time:0,visible:!1}]),n[c].push({time:s,visible:!0}),o=c)})),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 ht=function(t,e,n,a){return new(n||(n=Promise))((function(i,o){function r(t){try{c(a.next(t))}catch(t){o(t)}}function s(t){try{c(a.throw(t))}catch(t){o(t)}}function c(t){var e;t.done?i(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(r,s)}c((a=a.apply(t,e||[])).next())}))};const dt=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"))}))},gt=t=>ht(void 0,void 0,void 0,(function*(){var e,n,a;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),dt(t))),t.pacman.powerupRemainingDuration>0&&(t.pacman.powerupRemainingDuration--,0===t.pacman.powerupRemainingDuration&&(t.ghosts.forEach((t=>{"eyes"!==t.name&&(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&&yt(t,e.name))})),!t.grid.some((t=>t.some((t=>t.commitsCount>0))))){const n=ut(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()}st(t);const i=null===(n=t.grid[t.pacman.x])||void 0===n?void 0:n[t.pacman.y];i&&"FOURTH_QUARTILE"===i.level&&0===t.pacman.powerupRemainingDuration&&(t.pacman.powerupRemainingDuration=30,t.ghosts.forEach((t=>{"eyes"!==t.name&&(t.scared=!0)}))),ft(t),0===t.pacman.deadRemainingDuration&&(et(t),ft(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!==(a=t.pacman.ghostsEaten)&&void 0!==a?a:0}),mt(t)})),mt=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)))))})},ft=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},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)))}))},yt=(t,e)=>{const n=t.ghosts.find((t=>t.name===e&&t.inHouse));n&&(n.justReleasedFromHouse=!0,n.y=2,n.direction="up")},pt={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},xt=(t,e,a,i,o)=>{"horizontal"==a?(H(t,e,"horizontal",o),"x"==i?H(n-t-1,e,"horizontal",o):"y"==i?H(t,7-e,"horizontal",o):"xy"==i&&(H(n-t-1,e,"horizontal",o),H(t,7-e,"horizontal",o),H(n-t-1,7-e,"horizontal",o))):(H(t,e,"vertical",o),"x"==i?H(n-t,e,"vertical",o):"y"==i?H(t,7-e-1,"vertical",o):"xy"==i&&(H(n-t,e,"vertical",o),H(t,7-e-1,"vertical",o),H(n-t,7-e-1,"vertical",o)))};class vt{constructor(t){this.conf=Object.assign({},t)}start(){return t=this,e=void 0,a=function*(){const t={platform:"github",username:"",svgCallback:t=>{},gameOverCallback:()=>{},gameTheme:"github",pointsIncreasedCallback:t=>{},githubSettings:{accessToken:""},playerStyle:nt.OPPORTUNISTIC};switch(this.store=JSON.parse(JSON.stringify(pt)),this.store.config=Object.assign(Object.assign({},t),this.conf),this.store.config.platform){case"gitlab":this.store.contributions=yield f(this.store);break;case"github":this.store.contributions=yield m(this.store);break;default:throw new Error(`Unsupported platform: ${this.store.config.platform}`)}return xt(0,2,"horizontal","xy","L1"),xt(1,2,"horizontal","xy","L1"),xt(4,1,"vertical","x","L2"),xt(4,2,"vertical","x","L2"),xt(4,3,"vertical","x","L2"),xt(4,4,"vertical","x","L2"),xt(3,3,"horizontal","x","L3"),xt(2,3,"horizontal","x","L3"),xt(4,5,"horizontal","x","L4"),xt(6,4,"vertical","x","L5"),xt(6,3,"vertical","x","L5"),xt(6,2,"vertical","x","L5"),xt(6,2,"horizontal","x","L6"),xt(7,2,"horizontal","x","L6"),xt(8,2,"horizontal","x","L6"),xt(9,2,"horizontal","x","L6"),xt(13,2,"horizontal","xy","L7"),xt(14,2,"horizontal","xy","L7"),xt(15,2,"horizontal","xy","L7"),xt(16,2,"horizontal","xy","L7"),xt(17,2,"horizontal","xy","L7"),xt(18,2,"horizontal","xy","L7"),xt(16,2,"vertical","xy","L8"),xt(8,1,"horizontal","x","L9"),xt(9,1,"horizontal","x","L9"),xt(10,1,"horizontal","x","L9"),xt(11,1,"horizontal","x","L9"),xt(12,1,"vertical","x","L10"),xt(12,3,"vertical","x","L10"),xt(11,4,"horizontal","x","L11"),xt(10,4,"horizontal","x","L11"),xt(9,4,"horizontal","x","L11"),xt(8,4,"horizontal","x","L11"),xt(8,4,"vertical","x","L12"),xt(8,5,"vertical","x","L12"),xt(23,1,"horizontal","x","L18"),xt(22,1,"horizontal","x","L18"),xt(21,1,"horizontal","x","L18"),xt(21,1,"vertical","x","L18"),xt(21,2,"vertical","x","L18"),xt(21,3,"vertical","x","L18"),xt(20,4,"horizontal","x","L18"),xt(19,4,"horizontal","x","L18"),xt(19,3,"vertical","x","L18"),xt(18,3,"horizontal","x","L18"),xt(22,5,"vertical","x","L19"),xt(21,5,"horizontal","x","L19"),xt(20,5,"horizontal","x","L19"),xt(20,5,"vertical","x","L19"),xt(1,6,"horizontal","x","L20"),xt(2,6,"horizontal","x","L20"),xt(3,4,"vertical","x","L20"),xt(5,6,"horizontal","x","L21"),xt(6,6,"horizontal","x","L21"),H(25,2,"horizontal","GH_TOP"),H(27,2,"horizontal","GH_TOP"),H(25,4,"horizontal","GH_BOTTOM"),H(26,4,"horizontal","GH_BOTTOM"),H(27,4,"horizontal","GH_BOTTOM"),H(25,3,"vertical","GH_LEFT"),H(28,3,"vertical","GH_RIGHT"),H(25,2,"vertical","GH_LEFT"),H(28,2,"vertical","GH_RIGHT"),u(this.store),h(this.store),yield(e=this.store,ht(void 0,void 0,void 0,(function*(){e.frameCount=0,e.aliveSteps=0,e.gameHistory=[],e.ghosts.forEach((t=>t.scared=!1)),e.grid=d(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),dt(e));t();)yield gt(e);yield gt(e)}))),this.store;var e},new((n=void 0)||(n=Promise))((function(i,o){function r(t){try{c(a.next(t))}catch(t){o(t)}}function s(t){try{c(a.throw(t))}catch(t){o(t)}}function c(t){var e;t.done?i(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(r,s)}c((a=a.apply(t,e||[])).next())}));var t,e,n,a}stop(){var t;t=this.store,ht(void 0,void 0,void 0,(function*(){clearInterval(t.gameInterval)}))}}var Ct=e.Lc,bt=e.Cf,wt=e.rn;export{Ct as BreakoutRenderer,bt as PacmanRenderer,wt as PlayerStyle};
1
+ var t={d:(e,n)=>{for(var a in n)t.o(n,a)&&!t.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:n[a]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e)},e={};t.d(e,{Lc:()=>U,b9:()=>J,Cf:()=>Ut,rn:()=>mt});const n=53,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"]}},i=(t,e)=>Math.floor((e.getTime()-t.getTime())/6048e5),o=t=>new Date(Date.UTC(t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate())),r=t=>{var e;return null!==(e=a[t.config.gameTheme])&&void 0!==e?e:a.github},s=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=o(new Date),n=new Date(e);n.setUTCDate(e.getUTCDate()-365),n.setUTCDate(n.getUTCDate()-n.getUTCDay());const a=Array.from({length:53},(()=>Array.from({length:7},(()=>({commitsCount:0,color:r(t).intensityColors[0],level:"NONE"})))));t.contributions.forEach((l=>{const c=o(new Date(l.date));if(c<n||c>e)return;const A=c.getUTCDay(),u=i(n,c);if(u>=0&&u<53){const e=r(t);a[u][A]={commitsCount:l.count,color:e.intensityColors[s(l.level)],level:l.level}}})),t.grid=a},A=r,u=c,h=t=>{const e=o(new Date),a=new Date(e);a.setUTCDate(e.getUTCDate()-365),a.setUTCDate(a.getUTCDate()-a.getUTCDay());const r=i(a,e)+1,s=Array(r).fill("");let l="";for(let t=0;t<r;t++){const e=new Date(a);e.setUTCDate(e.getUTCDate()+7*t);const n=e.toLocaleString("default",{month:"short"});n!==l&&(s[t]=n,l=n)}t.monthLabels=r>n?s.slice(r-n):s},d=t=>(c(t),t.grid);var g=function(t,e,n,a){return new(n||(n=Promise))((function(i,o){function r(t){try{l(a.next(t))}catch(t){o(t)}}function s(t){try{l(a.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?i(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(r,s)}l((a=a.apply(t,e||[])).next())}))};const m=t=>g(void 0,void 0,void 0,(function*(){var e;return(null===(e=t.config.githubSettings)||void 0===e?void 0:e.accessToken)?yield(t=>g(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,a=r(t);return{date:new Date(e.date),count:e.contributionCount,color:a.intensityColors[s(n)],level:n}}))})))(t):yield(t=>g(void 0,void 0,void 0,(function*(){var e,n;const a=[];let i=!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}),l=yield s.json();i=!l.items||0===l.items.length,a.push(...null!==(n=l.items)&&void 0!==n?n:[]),o++}catch(t){i=!0}}while(!i);const c=Array.from(a.reduce(((t,e)=>{var n,a,i,o;const r=null===(a=null===(n=e.commit.author)||void 0===n?void 0:n.date)||void 0===a?void 0:a.split("T")[0],s=(null===(o=null===(i=e.commit.committer)||void 0===i?void 0:i.date)||void 0===o?void 0:o.split("T")[0])||r,l=(t.get(s)||{count:0}).count+1;return t.set(s,{date:new Date(s),count:l,color:"",level:"NONE"})}),new Map).values()),A=Math.max(...c.map((t=>t.count)).filter((t=>t>0)));return c.map((e=>{const n=l(e.count,A),a=r(t);return{date:new Date(e.date),count:e.count,color:a.intensityColors[s(n)],level:n}}))})))(t)})),f=t=>{return e=void 0,n=void 0,i=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(),a=Object.entries(n).map((([t,e])=>({date:new Date(t),count:Number(e),color:"",level:"NONE"}))),i=Math.max(...a.map((t=>t.count)).filter((t=>t>0)));return a.map((e=>{const n=l(e.count,i),a=r(t);return{date:new Date(e.date),count:e.count,color:a.intensityColors[s(n)],level:n}}))},new((a=void 0)||(a=Promise))((function(t,o){function r(t){try{l(i.next(t))}catch(t){o(t)}}function s(t){try{l(i.throw(t))}catch(t){o(t)}}function l(e){var n;e.done?t(e.value):(n=e.value,n instanceof a?n:new a((function(t){t(n)}))).then(r,s)}l((i=i.apply(e,n||[])).next())}));var e,n,a,i},y=.21,p=7.4,x=t=>22*t,v=t=>22*t+15,C=(t,e,n)=>{var a,i;const o=t.gameHistory.length,r=null!==(i=null===(a=t.initialColors[e])||void 0===a?void 0:a[n])&&void 0!==i?i:"#ebedf0",s=t.brickEvents.filter((t=>t.x===e&&t.y===n));if(0===s.length)return{keyTimes:"0;1",values:`${r};${r}`};const l=[0],c=[r];for(const t of s){const e=Number((t.frameIndex/Math.max(o-1,1)).toFixed(4));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])),{keyTimes:l.join(";"),values:c.join(";")}},b=(t,e)=>{var n,a,i,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=[],l=[];let c=null,A=null;return e.forEach(((t,e)=>{t!==c&&(null!==c&&null!==A&&e-1!==A&&(s.push(Number(((e-1)/(r-1)).toFixed(4))),l.push(c)),s.push(Number((e/(r-1)).toFixed(4))),l.push(t),c=t,A=e)})),0!==s.length&&1===s[s.length-1]||(0===s.length?(s.push(0,1),l.push(null!==(a=e[0])&&void 0!==a?a:"0,0",null!==(i=e[e.length-1])&&void 0!==i?i:"0,0")):(s.push(1),l.push(null!==(o=null!=c?c:e[e.length-1])&&void 0!==o?o:"0,0"))),{keyTimes:s.join(";"),values:l.join(";")}},w=t=>{const e=200*t.gameHistory.length/2,a=A(t);let i='<svg width="1166" height="209" xmlns="http://www.w3.org/2000/svg">';i+=`<desc>Generated with breakout-contribution-graph on ${new Date}</desc>`,i+=`<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>`,i+=`<rect width="100%" height="100%" fill="${a.gridBackground}"/>`;let o="";for(let e=0;e<n;e++)t.monthLabels[e]!==o&&(i+=`<text x="${22*e+10}" y="10" text-anchor="middle" font-size="10" fill="${a.textColor}">${t.monthLabels[e]}</text>`,o=t.monthLabels[e]);for(let o=0;o<n;o++)for(let n=0;n<7;n++){const r=x(o),s=v(n),l=C(t,o,n);i+=`<rect id="c-${o}-${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="${l.values}" keyTimes="${l.keyTimes}"/>\n\t\t\t</rect>`}const r=Math.round(4.62),s=b(t,(t=>t.gameHistory.map((t=>`${x(t.ball.x)},${v(t.ball.y)}`)))(t));i+=`<circle id="ball" cx="0" cy="0" r="${r}" 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="${s.keyTimes}"\n\t\t\tvalues="${s.values}"/>\n\t</circle>`;const l=v(p),c=Math.round(152),u=Math.round(11),h=b(t,(t=>t.gameHistory.map((t=>`${x(t.paddle.x)},0`)))(t));return i+=`<rect id="paddle" x="0" y="${l}" width="${c}" height="${u}" 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="${h.keyTimes}"\n\t\t\tvalues="${h.values}"/>\n\t</rect>`,i+="</svg>",i};const E=20/22,R=["NONE","FIRST_QUARTILE","SECOND_QUARTILE","THIRD_QUARTILE","FOURTH_QUARTILE"],B=t=>{const e=R.indexOf(t);return R[Math.max(0,e-1)]},M=t=>{var e,a;t.frameCount++;const{ball:i,paddle:o,grid:r}=t,s=Math.hypot(i.dx,i.dy),l=Math.ceil(s/y),c=1/l;for(let s=0;s<l;s++){i.x+=i.dx*c,i.y+=i.dy*c,i.x-y<=0&&(i.x=y,i.dx=Math.abs(i.dx)),i.x+y>=n&&(i.x=52.79,i.dx=-Math.abs(i.dx)),i.y-y<=0&&(i.y=y,i.dy=Math.abs(i.dy));const s=o.x,l=o.x+7;if(i.dy>0&&i.y+y>=p&&i.y-y<7.9&&i.x>=s-y&&i.x<=l+y){i.y=7.19;const e=s+3.5,n=Math.max(-1,Math.min(1,(i.x-e)/3.5)),a=Math.hypot(i.dx,i.dy),o=65*n*(Math.PI/180);i.dx=a*Math.sin(o),i.dy=-a*Math.cos(o),t.bouncesSinceTargetSet++,t.bouncesSinceTargetSet>=5&&(t.targetBrick=S(t),t.bouncesSinceTargetSet=0)}i.y>8.4&&(i.x=26.5,i.y=5.9,i.dy=-Math.abs(i.dy));const u=Math.max(0,Math.floor(i.x-y)),h=Math.min(52,Math.floor(i.x+y)),d=Math.max(0,Math.floor(i.y-y)),g=Math.min(6,Math.floor(i.y+y));let m=!1,f=!1;const x=A(t);for(let n=u;n<=h;n++)for(let o=d;o<=g;o++){if(0===r[n][o].commitsCount)continue;const s=Math.max(n,Math.min(n+E,i.x)),l=Math.max(o,Math.min(o+E,i.y));if(Math.pow(i.x-s,2)+Math.pow(i.y-l,2)>=.04409999999999999)continue;const c=r[n][o].level,A=B(c);if(r[n][o].level=A,"NONE"===A)r[n][o].commitsCount=0,r[n][o].color=x.intensityColors[0],(null===(e=t.targetBrick)||void 0===e?void 0:e.cx)===n&&(null===(a=t.targetBrick)||void 0===a?void 0:a.cy)===o&&(t.targetBrick=S(t),t.bouncesSinceTargetSet=0);else{const t=R.indexOf(A);r[n][o].color=x.intensityColors[t]}t.brickEvents.push({frameIndex:t.gameHistory.length,x:n,y:o,color:r[n][o].color});const u=y-Math.abs(i.x-s),h=y-Math.abs(i.y-l);u<=h?(i.x+=i.dx<0?u:-u,m=!0):(i.y+=i.dy<0?h:-h,f=!0),t.framesSinceLastBrickHit=0,t.config.pointsIncreasedCallback(k(t))}m&&(i.dx=-i.dx),f&&(i.dy=-i.dy)}if(i.dy>0&&t.targetBrick){const e=t.targetBrick,a=(p-i.y)/i.dy;let r=i.x+i.dx*a;r=Math.abs((r%106+106)%106),r>n&&(r=106-r);const s=e.cx+.5,l=e.cy+.5,c=p-l,A=s-r,u=Math.atan2(A,Math.max(c,.5))*(180/Math.PI),h=r-Math.max(-65,Math.min(65,u))/65*3.5,d=Math.max(0,Math.min(46,h-3.5));o.x<d-2?o.x+=2:o.x>d+2?o.x-=2:o.x=d}else if(i.dy>0){const t=o.x+3.5;t<i.x-.5?o.x=Math.min(o.x+2,46):t>i.x+.5&&(o.x=Math.max(o.x-2,0))}T(t)},T=t=>{t.gameHistory.push({ball:Object.assign({},t.ball),paddle:Object.assign({},t.paddle)})},k=t=>{let e=0;return t.grid.forEach((t=>t.forEach((t=>{0===t.commitsCount&&e++})))),e},S=t=>{var e,a;const i=[];for(let o=0;o<n;o++)for(let n=0;n<7;n++)(null===(a=null===(e=t.grid[o])||void 0===e?void 0:e[n])||void 0===a?void 0:a.commitsCount)>0&&i.push({cx:o,cy:n});return 0===i.length?null:i[Math.floor(Math.random()*i.length)]},D=t=>{return e=void 0,n=void 0,i=function*(){if(t.frameCount=0,t.framesSinceLastBrickHit=0,t.gameHistory=[],t.brickEvents=[],t.grid=d(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=w(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=S(t),t.bouncesSinceTargetSet=0;t.grid.some((t=>t.some((t=>t.commitsCount>0))))&&t.frameCount<3e3;)M(t),t.frameCount%200==0&&t.grid.reduce(((t,e)=>t+e.filter((t=>t.commitsCount>0)).length),0);const e=w(t);t.config.svgCallback(e),t.config.gameStatsCallback&&t.config.gameStatsCallback({totalScore:k(t),steps:t.frameCount,ghostsEaten:0}),t.config.gameOverCallback()},new((a=void 0)||(a=Promise))((function(t,o){function r(t){try{l(i.next(t))}catch(t){o(t)}}function s(t){try{l(i.throw(t))}catch(t){o(t)}}function l(e){var n;e.done?t(e.value):(n=e.value,n instanceof a?n:new a((function(t){t(n)}))).then(r,s)}l((i=i.apply(e,n||[])).next())}));var e,n,a,i},I={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 U{constructor(t){this.conf=Object.assign({},t)}start(){return t=this,e=void 0,a=function*(){switch(this.store=JSON.parse(JSON.stringify(I)),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 f(this.store);break;case"github":this.store.contributions=yield m(this.store);break;default:throw new Error(`Unsupported platform: ${this.store.config.platform}`)}return u(this.store),h(this.store),yield D(this.store),this.store},new((n=void 0)||(n=Promise))((function(i,o){function r(t){try{l(a.next(t))}catch(t){o(t)}}function s(t){try{l(a.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?i(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(r,s)}l((a=a.apply(t,e||[])).next())}));var t,e,n,a}stop(){this.store}}const N=t=>22*t,O=t=>22*t+15,H=(t,e,n)=>{var a,i;const o=t.gameHistory.length,r=null!==(i=null===(a=t.initialColors[e])||void 0===a?void 0:a[n])&&void 0!==i?i:"#ebedf0",s=t.cellEvents.filter((t=>t.x===e&&t.y===n));if(0===s.length)return{keyTimes:"0;1",values:`${r};${r}`};const l=[0],c=[r];for(const t of s){const e=Number((t.frameIndex/Math.max(o-1,1)).toFixed(4));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])),{keyTimes:l.join(";"),values:c.join(";")}},V=t=>{const e=t.gameHistory.length,a=Math.max(200*e/2,1e3),i=A(t),o=O(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),a=(.3+.7*e()).toFixed(2),i=Math.floor(2500+5500*e());r+=`<circle cx="${t}" cy="0" r="${n}" fill="white" opacity="${a}"><animate attributeName="cy" from="-2" to="261" dur="${i}ms" begin="-${Math.floor(e()*i)}ms" repeatCount="indefinite"/></circle>`}}let s="";for(let e=0;e<n;e++)t.monthLabels[e]!==s&&(r+=`<text x="${22*e+10}" y="10" text-anchor="middle" font-size="10" fill="#aaaaaa">${t.monthLabels[e]}</text>`,s=t.monthLabels[e]);const l=i.intensityColors[0];for(let e=0;e<n;e++)for(let n=0;n<7;n++){const i=N(e),o=O(n),s=H(t,e,n);r+=`<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="${s.values.split(";").map((t=>t===l?"transparent":t)).join(";")}" keyTimes="${s.keyTimes}"/>\n\t\t\t</rect>`}if(e>=2){const n=(t=>{const e=[],n=new Map;for(let a=0;a<t.gameHistory.length;a++){const i=t.gameHistory[a].bullets.filter((t=>t.active)),o=new Set(i.map((t=>t.id)));for(const[t,i]of n)o.has(t)||(e.push({id:t,x:i.x,startFrame:i.startFrame,endFrame:a-1,yPositions:i.yPositions}),n.delete(t));for(const t of i)n.has(t.id)?n.get(t.id).yPositions.push(t.y):n.set(t.id,{x:t.x,startFrame:a,yPositions:[t.y]})}for(const[a,i]of n)e.push({id:a,x:i.x,startFrame:i.startFrame,endFrame:t.gameHistory.length-1,yPositions:i.yPositions});return e})(t);for(const t of n){const n=N(t.x),i=Number((t.startFrame/(e-1)).toFixed(4)),o=Number((Math.min(t.endFrame+1,e-1)/(e-1)).toFixed(4));let s,l;i<=0&&o>=1?(s="0;1",l="1;1"):i<=0?(s=`0;${o};${o};1`,l="1;1;0;0"):o>=1?(s=`0;${i};${i};1`,l="0;0;1;1"):(s=`0;${i};${i};${o};${o};1`,l="0;0;1;1;0;0");const c=[],A=[],u=O(t.yPositions[0]).toFixed(1),h=O(t.yPositions[t.yPositions.length-1]).toFixed(1);t.startFrame>0&&(c.push(0),A.push(`${n.toFixed(1)},${u}`));for(let a=0;a<t.yPositions.length;a++){const i=t.startFrame+a,o=Number((i/(e-1)).toFixed(4)),r=O(t.yPositions[a]).toFixed(1);0!==c.length&&o===c[c.length-1]||(c.push(o),A.push(`${n.toFixed(1)},${r}`))}1!==c[c.length-1]&&(c.push(1),A.push(`${n.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="${a}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="${a}ms" repeatCount="indefinite"\n\t\t\t\t\tkeyTimes="${c.join(";")}" values="${A.join(";")}"/>\n\t\t\t</image>`}}if(e>=2)for(const n of t.explosionEvents){const t=(N(n.x)+10).toFixed(1),i=(O(n.y)+10).toFixed(1),o=Number((n.frameIndex/(e-1)).toFixed(4)),s=Number((Math.min(n.frameIndex+7,e-1)/(e-1)).toFixed(4));if(s<=o)continue;const l=`0;${o};${o};${s};1`,c="0;0;1;0;0",A=`${a}ms`;r+=`<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="${A}" repeatCount="indefinite" keyTimes="${l}" values="2;2;2;20;20"/>\n\t\t\t\t<animate attributeName="stroke-width" calcMode="linear" dur="${A}" repeatCount="indefinite" keyTimes="${l}" values="3;3;3;0;0"/>\n\t\t\t\t<animate attributeName="opacity" calcMode="linear" dur="${A}" repeatCount="indefinite" keyTimes="${l}" values="${c}"/>\n\t\t\t</circle>`;const u=[{dx:0,dy:-11},{dx:0,dy:11},{dx:-11,dy:0},{dx:11,dy:0}];for(const{dx:e,dy:a}of u){const o=(Number(t)+e).toFixed(1),s=(Number(i)+a).toFixed(1);r+=`<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="${A}" repeatCount="indefinite" keyTimes="${l}" values="${t};${t};${t};${o};${o}"/>\n\t\t\t\t\t<animate attributeName="cy" calcMode="linear" dur="${A}" repeatCount="indefinite" keyTimes="${l}" values="${i};${i};${i};${s};${s}"/>\n\t\t\t\t\t<animate attributeName="r" calcMode="linear" dur="${A}" 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="${A}" repeatCount="indefinite" keyTimes="${l}" values="${c}"/>\n\t\t\t\t</circle>`}}const c=t.gameHistory.map((t=>`${N(t.ship.x).toFixed(1)},${o.toFixed(1)}`)),u=((t,e)=>{var n,a,i,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=[],l=[];let c=null,A=null;return e.forEach(((t,e)=>{t!==c&&(null!==c&&null!==A&&e-1!==A&&(s.push(Number(((e-1)/(r-1)).toFixed(4))),l.push(c)),s.push(Number((e/(r-1)).toFixed(4))),l.push(t),c=t,A=e)})),0!==s.length&&1===s[s.length-1]||(0===s.length?(s.push(0,1),l.push(null!==(a=e[0])&&void 0!==a?a:"0,0",null!==(i=e[e.length-1])&&void 0!==i?i:"0,0")):(s.push(1),l.push(null!==(o=null!=c?c:e[e.length-1])&&void 0!==o?o:"0,0"))),{keyTimes:s.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="${a}ms" repeatCount="indefinite"\n\t\t\tkeyTimes="${u.keyTimes}"\n\t\t\tvalues="${u.values}"/>\n\t</image>`,r+="</svg>",r};const z=["NONE","FIRST_QUARTILE","SECOND_QUARTILE","THIRD_QUARTILE","FOURTH_QUARTILE"],F=t=>{const e=z.indexOf(t);return z[Math.max(0,e-1)]},L=()=>Math.floor(5*Math.random())+4,Q=t=>t.grid.some((t=>t.some((t=>t.commitsCount>0)))),j=(t,e=-1)=>{const a=Math.round(t.ship.x-.5),i=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=a+s;if(t<0||t>=n)continue;if(t===e)continue;const l=i(t);l>r&&(r=l,o=t)}if(-1!==o)return o}for(let a=0;a<n;a++)if(a!==e&&t.grid[a].some((t=>t.commitsCount>0)))return a;return Math.floor(26.5)},Y=t=>{var e;t.frameCount++;const{grid:a,ship:i}=t,o=A(t);for(const e of t.bullets){if(!e.active)continue;if(e.y-=.6,e.y<-1){e.active=!1;continue}const i=Math.round(e.x-.5),r=Math.floor(e.y);if(i>=0&&i<n&&r>=0&&r<7&&a[i][r].commitsCount>0){const n=a[i][r].color,s=F(a[i][r].level);a[i][r].level=s,a[i][r].color=o.intensityColors[z.indexOf(s)],"NONE"===s&&(a[i][r].commitsCount=0,t.explosionEvents.push({frameIndex:t.gameHistory.length,x:i,y:r,color:n})),t.cellEvents.push({frameIndex:t.gameHistory.length,x:i,y:r,color:a[i][r].color}),t.config.pointsIncreasedCallback(t.cellEvents.length),e.active=!1}}t.bullets=t.bullets.filter((t=>t.active)),(null===(e=a[t.currentTargetCol])||void 0===e?void 0:e.some((t=>t.commitsCount>0)))||(t.currentTargetCol=j(t),t.framesShootingAtTarget=0);const r=t.currentTargetCol,s=r+.5,l=s-i.x;Math.abs(l)>.4?i.x+=.4*Math.sign(l):i.x=s,i.x=Math.max(.8,Math.min(52.2,i.x));const c=Math.abs(i.x-s)<.5,u=a[r].some((t=>t.commitsCount>0));c&&u&&(t.framesShootingAtTarget>=t.framesAllowedForTarget?(t.currentTargetCol=j(t,r),t.framesShootingAtTarget=0,t.framesAllowedForTarget=L()):(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)},P=t=>{return e=void 0,n=void 0,i=function*(){if(t.frameCount=0,t.nextBulletId=0,t.gameHistory=[],t.cellEvents=[],t.explosionEvents=[],t.bullets=[],t.grid=d(t),t.initialColors=t.grid.map((t=>t.map((t=>t.color)))),!Q(t)){const e=V(t);return t.config.svgCallback(e),void t.config.gameOverCallback()}for(t.ship={x:26.5},t.currentTargetCol=j(t),t.framesShootingAtTarget=0,t.framesAllowedForTarget=L();Q(t)&&t.frameCount<3e3;)Y(t);const e=V(t);t.config.svgCallback(e),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,o){function r(t){try{l(i.next(t))}catch(t){o(t)}}function s(t){try{l(i.throw(t))}catch(t){o(t)}}function l(e){var n;e.done?t(e.value):(n=e.value,n instanceof a?n:new a((function(t){t(n)}))).then(r,s)}l((i=i.apply(e,n||[])).next())}));var e,n,a,i},G={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 J{constructor(t){this.conf=Object.assign({},t)}start(){return t=this,e=void 0,a=function*(){switch(this.store=JSON.parse(JSON.stringify(G)),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 f(this.store);break;case"github":this.store.contributions=yield m(this.store);break;default:throw new Error(`Unsupported platform: ${this.store.config.platform}`)}return u(this.store),h(this.store),yield P(this.store),this.store},new((n=void 0)||(n=Promise))((function(i,o){function r(t){try{l(a.next(t))}catch(t){o(t)}}function s(t){try{l(a.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?i(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(r,s)}l((a=a.apply(t,e||[])).next())}));var t,e,n,a}stop(){this.store}}const K="yellow",W={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=="}},q={horizontal:Array(54).fill(null).map((()=>Array(8).fill({active:!1,id:""}))),vertical:Array(54).fill(null).map((()=>Array(8).fill({active:!1,id:""})))},X=(t,e,n,a,i)=>{"horizontal"===n?t>=0&&t<q.horizontal.length&&e>=0&&e<q.horizontal[0].length&&(q.horizontal[t][e]={active:!0,id:a,color:i}):t>=0&&t<q.vertical.length&&e>=0&&e<q.vertical[0].length&&(q.vertical[t][e]={active:!0,id:a,color:i})},Z=(t,e)=>[[-1,0],[1,0],[0,-1],[0,1]].filter((([a,i])=>{const o=t+a,r=e+i;return!(o<0||o>=n||r<0||r>=7||(-1===a?q.vertical[t][e].active:1===a?q.vertical[t+1][e].active:-1===i?q.horizontal[t][e].active:1===i&&q.horizontal[t][e+1].active))})),$={getValidMoves:Z,calculateDistance:(t,e,n,a)=>Math.sqrt(Math.pow(n-t,2)+Math.pow(a-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:[]})],a=new Set([`${t.x},${t.y}`]);for(;n.length;){n.sort(((t,e)=>t.cost-e.cost));const{x:t,y:i,cost:o,path:r}=n.shift();for(const[s,l]of Z(t,i)){const c=t+s,A=i+l,u=`${c},${A}`;if(a.has(u))continue;a.add(u);const h=[...r,{x:c,y:A}];if(c===e.x&&A===e.y)return h.length>0?h[0]:null;n.push({x:c,y:A,cost:o+1,path:h})}}return null}},_={blinky:{x:50,y:0},pinky:{x:0,y:0},inky:{x:50,y:6},clyde:{x:0,y:6}};let tt="scatter",et=0,nt=0;const at=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"}},it=(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")},ot=(t,e)=>{const n=_[t.name]||_.blinky;t.target=n;const a=At(t.x,t.y,n.x,n.y,t.direction);a&&(t.x=a.x,t.y=a.y,a.direction&&(t.direction=a.direction))},rt=(t,e)=>{(!t.target||t.x===t.target.x&&t.y===t.target.y)&&(t.target=dt(t.x,t.y));const n=st(t);if(0===n.length)return;const a=t.target.x-t.x,i=t.target.y-t.y;let o=n;if(Math.random()<.5);else{const t=n.filter((t=>{const e=t[0],n=t[1];return a>0&&e>0||a<0&&e<0||i>0&&n>0||i<0&&n<0}));t.length>0&&(o=t)}const[r,s]=o[Math.floor(Math.random()*o.length)];e.pacman.powerupRemainingDuration&&Math.random()<.6||(r>0?t.direction="right":r<0?t.direction="left":s>0?t.direction="down":s<0&&(t.direction="up"),t.x+=r,t.y+=s)},st=t=>$.getValidMoves(t.x,t.y).filter((e=>{const[n,a]=e;return!("right"===t.direction&&n<0||"left"===t.direction&&n>0||"up"===t.direction&&a>0||"down"===t.direction&&a<0)})),lt=(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 a=$.findNextStepDijkstra({x:t.x,y:t.y},n);if(a){const e=a.x-t.x,n=a.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=a.x,t.y=a.y}else{const e=At(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))}},ct=(t,e)=>{if("eyes"===t.name)return void lt(t);const n=ut(t,e);t.target=n;const a=At(t.x,t.y,n.x,n.y,t.direction);a&&(t.x=a.x,t.y=a.y,a.direction&&(t.direction=a.direction))},At=(t,e,n,a,i)=>{if(t===n&&e===a)return null;const o=[{x:t,y:e,path:[],direction:i||"right"}],r=new Set;for(r.add(`${t},${e}`);o.length>0;){const t=o.shift(),{x:e,y:i,path:s,direction:l}=t,c=$.getValidMoves(e,i),A=c.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===c.length}));for(const[t,c]of A){const A=e+t,u=i+c,h=`${A},${u}`;if(r.has(h))continue;let d;r.add(h),d=t>0?"right":t<0?"left":c>0?"down":c<0?"up":l;const g=[...s,{x:A,y:u,pathDirection:d}];if(A===n&&u===a)return g.length>0?{x:g[0].x,y:g[0].y,direction:g[0].pathDirection}:null;o.push({x:A,y:u,path:g,direction:d})}}const s=$.getValidMoves(t,e);if(s.length>0){const[n,a]=s[Math.floor(Math.random()*s.length)];let o=i;return n>0?o="right":n<0?o="left":a>0?o="down":a<0&&(o="up"),{x:t+n,y:e+a,direction:o}}return null},ut=(t,e)=>{const{pacman:n}=e;let a=ht(e),i=1;if("blinky"===t.name){const t=371,e=(t-nt)/t;if(e>.7&&(i=1.2),e>.9&&(i=1.4),Math.random()<.8*i)return{x:n.x,y:n.y}}switch(t.name){case"blinky":default:return{x:n.x,y:n.y};case"pinky":const i=4;let o=n.x,r=n.y;return"up"===n.direction?(o=n.x-4,r=n.y-4):(o=n.x+a[0]*i,r=n.y+a[1]*i),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 l={x:n.x+2*a[0],y:n.y+2*a[1]};if("up"===n.direction&&(l.x=n.x-2,l.y=n.y-2),s){const t=l.x-s.x,e=l.y-s.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 $.calculateDistance(t.x,t.y,n.x,n.y)<8?_.clyde:{x:n.x,y:n.y}}},ht=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]}},dt=(t,e)=>{const n=t+Math.floor(17*Math.random())-8,a=e+Math.floor(17*Math.random())-8;return{x:Math.max(0,Math.min(n,52)),y:Math.max(0,Math.min(a,6))}},gt=t=>{nt=(t=>{let e=0;for(let a=0;a<n;a++)for(let n=0;n<7;n++)"NONE"!==t.grid[a][n].level&&e++;return e})(t),(t=>{t.pacman.powerupRemainingDuration>0||(et++,et>=5*("scatter"===tt?7:20)&&(tt="scatter"===tt?"chase":"scatter",et=0,t.ghosts.forEach((t=>{t.inHouse||"eyes"===t.name||t.scared||at(t)}))))})(t);for(const e of t.ghosts)e.inHouse?it(e,t):("eyes"===e.name&&(e.scared=!1),e.scared?rt(e,t):"eyes"===e.name?lt(e):"scatter"===tt?ot(e):ct(e,t))};var mt;!function(t){t.CONSERVATIVE="conservative",t.AGGRESSIVE="aggressive",t.OPPORTUNISTIC="opportunistic"}(mt||(mt={}));const ft=t=>{const e=[];for(let a=0;a<n;a++)for(let n=0;n<7;n++){const i=t.grid[a][n];if("NONE"!==i.level){const o=$.calculateDistance(a,n,t.pacman.x,t.pacman.y),r=i.commitsCount/(o+1);e.push({x:a,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]},yt=t=>{const e=new Map,a=!!t.pacman.powerupRemainingDuration;if(t.ghosts.forEach((t=>{if(!t.scared)for(let a=-5;a<=5;a++)for(let i=-5;i<=5;i++){const o=t.x+a,r=t.y+i;if(o>=0&&o<n&&r>=0&&r<7){const t=`${o},${r}`,n=15-(Math.abs(a)+Math.abs(i));if(n>0){const a=e.get(t)||0;e.set(t,Math.max(a,n))}}}})),a)for(const[t,n]of e.entries())e.set(t,n/5);return e},pt=(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 a=e.x-t.pacman.x,i=e.y-t.pacman.y;t.pacman.direction=a>0?"right":a<0?"left":i>0?"down":i<0?"up":t.pacman.direction,t.pacman.x=e.x,t.pacman.y=e.y},xt=t=>{t.pacman.powerupRemainingDuration=15,t.ghosts.forEach((t=>t.scared=!0))},vt=t=>{if(t.pacman.deadRemainingDuration)return;const e=!!t.pacman.powerupRemainingDuration,n=t.ghosts.filter((t=>t.scared));let a;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 a=$.calculateDistance(n.x,n.y,t.pacman.x,t.pacman.y);return a<e.distance?{x:n.x,y:n.y,distance:a}:e}),{x:t.pacman.x,y:t.pacman.y,distance:1/0})})(t);a=null!=e?e:ft(t)}else t.pacman.target?t.pacman.x===t.pacman.target.x&&t.pacman.y===t.pacman.target.y?(a=ft(t),t.pacman.target=a):a=t.pacman.target:(a=ft(t),t.pacman.target=a);a||(a={x:t.pacman.x,y:t.pacman.y});const i=((t,e)=>{var n;const a=[{x:t.pacman.x,y:t.pacman.y,path:[],score:0}],i=new Set([`${t.pacman.x},${t.pacman.y}`]),o=yt(t);let r=.5,s=.5;switch(t.config.playerStyle){case mt.CONSERVATIVE:r=3,s=.1;break;case mt.AGGRESSIVE:r=.3,s=2;break;case mt.OPPORTUNISTIC:default:r=.8,s=.8}let l=1/0;t.ghosts.forEach((e=>{if(!e.scared){const n=$.calculateDistance(t.pacman.x,t.pacman.y,e.x,e.y);l=Math.min(l,n)}}));const c=t.config.playerStyle===mt.CONSERVATIVE?5:7,A=l<c;for(t.config.playerStyle===mt.CONSERVATIVE&&A&&(r*=5);a.length>0;){a.sort(((t,e)=>e.score-t.score));const l=a.shift(),{x:c,y:A,path:u}=l;if(c===e.x&&A===e.y){if(u.length>0){let e=0,n=0;return u.forEach((a=>{const i=`${a.x},${a.y}`,l=o.get(i)||0,c=t.grid[a.x][a.y].commitsCount;e-=l*r,n+=c*s})),u[0]}return null}for(const[l,h]of $.getValidMoves(c,A)){const d=c+l,g=A+h,m=`${d},${g}`;if(!i.has(m)){const l=[...u,{x:d,y:g}],c=o.get(m)||0,A=t.grid[d][g].commitsCount,h=$.calculateDistance(d,g,e.x,e.y),f=(null===(n=t.pacman.recentPositions)||void 0===n?void 0:n.includes(m))?100:0;let y,p,x;t.config.playerStyle===mt.CONSERVATIVE?(y=(15-c)*r,c>=5?y-=100:y+=50,p=A*s,x=5*y+p+-h/10-f):(y=(15-c)*r,p=A*s,x=y+p+-h/10-f),a.push({x:d,y:g,path:l,score:x}),i.add(m)}}}return null})(t,a);i?pt(t,i):(t=>{const e=$.getValidMoves(t.pacman.x,t.pacman.y);if(0===e.length)return;const n=e.reduce(((e,[n,a])=>{const i=t.pacman.x+n,o=t.pacman.y+a;let r=1/0;return t.ghosts.forEach((t=>{if(!t.scared){const e=$.calculateDistance(t.x,t.y,i,o);r=Math.min(r,e)}})),r>e.distance?{dx:n,dy:a,distance:r}:e}),{dx:0,dy:0,distance:-1/0});pt(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=A(t);"FOURTH_QUARTILE"===e.level&&xt(t),e.level="NONE",e.color=n.intensityColors[0],e.commitsCount=0}})(t)}catch(t){console.error("Error in movePacman:",t)}},Ct=t=>{const e=10,n=t,a=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(a)},${e+e*Math.sin(a)}\n Z`},bt=(t,e,n)=>t.gameHistory.map((t=>t.grid[e][n].color)),wt=(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 a=[],i=[],o=null,r=null;return e.forEach(((t,e)=>{t!==o&&(null!==o&&null!==r&&e-1!==r&&(a.push(Number(((e-1/40)/(n-1)).toFixed(4))),i.push(o)),a.push(Number((e/(n-1)).toFixed(4))),i.push(t),o=t,r=e)})),0!==a.length&&1===a[a.length-1]||(0===a.length?(a.push(0,1),i.push(e[0]||"#000",e[e.length-1]||"#000")):(a.push(1),i.push(o||e[e.length-1]||"#000"))),{keyTimes:a.join(";"),values:i.join(";")}},Et=t=>{const e=200*t.gameHistory.length;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="${A(t).gridBackground}"/>`,a+=(()=>{let t="<defs>";return["blinky","inky","pinky","clyde"].forEach((e=>{["up","down","left","right"].forEach((n=>{const a=W[e];n in a&&(t+=`\n <symbol id="ghost-${e}-${n}" viewBox="0 0 20 20">\n <image href="${a[n]}" width="20" height="20"/>\n </symbol>\n `)}))})),t+=`\n <symbol id="ghost-scared" viewBox="0 0 20 20">\n <image href="${W.scared.imgDate}" width="20" height="20"/>\n </symbol>`,["up","down","left","right"].forEach((e=>{W.eyes&&e in W.eyes?t+=`\n <symbol id="ghost-eyes-${e}" viewBox="0 0 20 20">\n <image href="${W.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 i="";for(let e=0;e<n;e++)t.monthLabels[e]!==i&&(a+=`<text x="${22*e+10}" y="10" text-anchor="middle" font-size="10" fill="${A(t).textColor}">${t.monthLabels[e]}</text>`,i=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=wt(t,bt(t,i,n));a+=`<rect id="c-${i}-${n}" x="${o}" y="${r}" width="20" height="20" rx="5" fill="${A(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&&q.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="${A(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&&q.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="${A(t).wallColor}"></rect>`,n=null)}}const o=wt(t,t.gameHistory.map((t=>{return(e=t.pacman).deadRemainingDuration?"#80808064":e.powerupRemainingDuration?"red":K;var e}))),r=wt(t,(t=>t.gameHistory.map((t=>`${22*t.pacman.x},${22*t.pacman.y+15}`)))(t)),s=wt(t,(t=>t.gameHistory.map((t=>{switch(t.pacman.direction){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));return a+=`<path id="pacman" d="${Ct(.55)}" fill="${K}">\n\t\t<animate attributeName="fill" dur="${e}ms" repeatCount="indefinite"\n\t\t\tkeyTimes="${o.keyTimes}"\n\t\t\tvalues="${o.values}"/>\n\t\t<animateTransform attributeName="transform" type="translate" dur="${e}ms" repeatCount="indefinite"\n\t\t\tkeyTimes="${r.keyTimes}"\n\t\t\tvalues="${r.values}"\n\t\t\tadditive="sum"/>\n\t\t<animateTransform attributeName="transform" type="rotate" 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<animate attributeName="d" dur="0.5s" repeatCount="indefinite"\n\t\t\tvalues="${Ct(.55)};${Ct(.05)};${Ct(.55)}"/>\n\t</path>`,t.ghosts.forEach(((n,i)=>{const o=wt(t,((t,e)=>t.gameHistory.map((t=>{if(e>=t.ghosts.length)return"0,0";const n=t.ghosts[e];return`${22*n.x},${22*n.y+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 a=t.ghosts[e];if(!a)return n;const i=a.scared?"scared":"eyes"===a.name?`eyes-${a.direction||"right"}`:`${a.name}-${a.direction||"right"}`;n[i]=[{time:0,visible:!0}];let o=i;return t.gameHistory.forEach(((a,i)=>{if(e>=a.ghosts.length)return;const r=a.ghosts[e],s=i/(t.gameHistory.length-1),l=r.scared?"scared":"eyes"===r.name?`eyes-${r.direction||"right"}`:`${r.name}-${r.direction||"right"}`;l!==o&&(n[o].push({time:s,visible:!1}),n[l]||(n[l]=[{time:0,visible:!1}]),n[l].push({time:s,visible:!0}),o=l)})),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 Rt=function(t,e,n,a){return new(n||(n=Promise))((function(i,o){function r(t){try{l(a.next(t))}catch(t){o(t)}}function s(t){try{l(a.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?i(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(r,s)}l((a=a.apply(t,e||[])).next())}))};const Bt=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"))}))},Mt=t=>Rt(void 0,void 0,void 0,(function*(){var e,n,a;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),Bt(t))),t.pacman.powerupRemainingDuration>0&&(t.pacman.powerupRemainingDuration--,0===t.pacman.powerupRemainingDuration&&(t.ghosts.forEach((t=>{"eyes"!==t.name&&(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&&St(t,e.name))})),!t.grid.some((t=>t.some((t=>t.commitsCount>0))))){const n=Et(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()}vt(t);const i=null===(n=t.grid[t.pacman.x])||void 0===n?void 0:n[t.pacman.y];i&&"FOURTH_QUARTILE"===i.level&&0===t.pacman.powerupRemainingDuration&&(t.pacman.powerupRemainingDuration=30,t.ghosts.forEach((t=>{"eyes"!==t.name&&(t.scared=!0)}))),kt(t),0===t.pacman.deadRemainingDuration&&(gt(t),kt(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!==(a=t.pacman.ghostsEaten)&&void 0!==a?a:0}),Tt(t)})),Tt=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)))))})},kt=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},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)))}))},St=(t,e)=>{const n=t.ghosts.find((t=>t.name===e&&t.inHouse));n&&(n.justReleasedFromHouse=!0,n.y=2,n.direction="up")},Dt={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},It=(t,e,a,i,o)=>{"horizontal"==a?(X(t,e,"horizontal",o),"x"==i?X(n-t-1,e,"horizontal",o):"y"==i?X(t,7-e,"horizontal",o):"xy"==i&&(X(n-t-1,e,"horizontal",o),X(t,7-e,"horizontal",o),X(n-t-1,7-e,"horizontal",o))):(X(t,e,"vertical",o),"x"==i?X(n-t,e,"vertical",o):"y"==i?X(t,7-e-1,"vertical",o):"xy"==i&&(X(n-t,e,"vertical",o),X(t,7-e-1,"vertical",o),X(n-t,7-e-1,"vertical",o)))};class Ut{constructor(t){this.conf=Object.assign({},t)}start(){return t=this,e=void 0,a=function*(){const t={platform:"github",username:"",svgCallback:t=>{},gameOverCallback:()=>{},gameTheme:"github",pointsIncreasedCallback:t=>{},githubSettings:{accessToken:""},playerStyle:mt.OPPORTUNISTIC};switch(this.store=JSON.parse(JSON.stringify(Dt)),this.store.config=Object.assign(Object.assign({},t),this.conf),this.store.config.platform){case"gitlab":this.store.contributions=yield f(this.store);break;case"github":this.store.contributions=yield m(this.store);break;default:throw new Error(`Unsupported platform: ${this.store.config.platform}`)}return It(0,2,"horizontal","xy","L1"),It(1,2,"horizontal","xy","L1"),It(4,1,"vertical","x","L2"),It(4,2,"vertical","x","L2"),It(4,3,"vertical","x","L2"),It(4,4,"vertical","x","L2"),It(3,3,"horizontal","x","L3"),It(2,3,"horizontal","x","L3"),It(4,5,"horizontal","x","L4"),It(6,4,"vertical","x","L5"),It(6,3,"vertical","x","L5"),It(6,2,"vertical","x","L5"),It(6,2,"horizontal","x","L6"),It(7,2,"horizontal","x","L6"),It(8,2,"horizontal","x","L6"),It(9,2,"horizontal","x","L6"),It(13,2,"horizontal","xy","L7"),It(14,2,"horizontal","xy","L7"),It(15,2,"horizontal","xy","L7"),It(16,2,"horizontal","xy","L7"),It(17,2,"horizontal","xy","L7"),It(18,2,"horizontal","xy","L7"),It(16,2,"vertical","xy","L8"),It(8,1,"horizontal","x","L9"),It(9,1,"horizontal","x","L9"),It(10,1,"horizontal","x","L9"),It(11,1,"horizontal","x","L9"),It(12,1,"vertical","x","L10"),It(12,3,"vertical","x","L10"),It(11,4,"horizontal","x","L11"),It(10,4,"horizontal","x","L11"),It(9,4,"horizontal","x","L11"),It(8,4,"horizontal","x","L11"),It(8,4,"vertical","x","L12"),It(8,5,"vertical","x","L12"),It(23,1,"horizontal","x","L18"),It(22,1,"horizontal","x","L18"),It(21,1,"horizontal","x","L18"),It(21,1,"vertical","x","L18"),It(21,2,"vertical","x","L18"),It(21,3,"vertical","x","L18"),It(20,4,"horizontal","x","L18"),It(19,4,"horizontal","x","L18"),It(19,3,"vertical","x","L18"),It(18,3,"horizontal","x","L18"),It(22,5,"vertical","x","L19"),It(21,5,"horizontal","x","L19"),It(20,5,"horizontal","x","L19"),It(20,5,"vertical","x","L19"),It(1,6,"horizontal","x","L20"),It(2,6,"horizontal","x","L20"),It(3,4,"vertical","x","L20"),It(5,6,"horizontal","x","L21"),It(6,6,"horizontal","x","L21"),X(25,2,"horizontal","GH_TOP"),X(27,2,"horizontal","GH_TOP"),X(25,4,"horizontal","GH_BOTTOM"),X(26,4,"horizontal","GH_BOTTOM"),X(27,4,"horizontal","GH_BOTTOM"),X(25,3,"vertical","GH_LEFT"),X(28,3,"vertical","GH_RIGHT"),X(25,2,"vertical","GH_LEFT"),X(28,2,"vertical","GH_RIGHT"),u(this.store),h(this.store),yield(e=this.store,Rt(void 0,void 0,void 0,(function*(){e.frameCount=0,e.aliveSteps=0,e.gameHistory=[],e.ghosts.forEach((t=>t.scared=!1)),e.grid=d(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),Bt(e));t();)yield Mt(e);yield Mt(e)}))),this.store;var e},new((n=void 0)||(n=Promise))((function(i,o){function r(t){try{l(a.next(t))}catch(t){o(t)}}function s(t){try{l(a.throw(t))}catch(t){o(t)}}function l(t){var e;t.done?i(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(r,s)}l((a=a.apply(t,e||[])).next())}));var t,e,n,a}stop(){var t;t=this.store,Rt(void 0,void 0,void 0,(function*(){clearInterval(t.gameInterval)}))}}var Nt=e.Lc,Ot=e.b9,Ht=e.Cf,Vt=e.rn;export{Nt as BreakoutRenderer,Ot as GalagaRenderer,Ht as PacmanRenderer,Vt as PlayerStyle};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pacman-contribution-graph",
3
- "version": "3.0.0",
3
+ "version": "3.1.0",
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/",