dsh-inkpond 0.1.0 → 0.2.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/lib/client.js CHANGED
@@ -29,7 +29,7 @@ module.exports = __toCommonJS(index_exports);
29
29
 
30
30
  // src/client/preferences.ts
31
31
  var STORAGE_KEY = "dsh-inkpond.preferences.v1";
32
- var SCENES = ["lotus", "shanshui", "qingming"];
32
+ var SCENES = ["lotus", "shanshui", "qingming", "jieqi", "beiming"];
33
33
  var DEFAULTS = Object.freeze({
34
34
  enabled: true,
35
35
  scene: "lotus",
@@ -193,10 +193,2415 @@ var glyphTable = (ramps, loose = "") => {
193
193
  };
194
194
  };
195
195
 
196
+ // node_modules/inkpond/dist/scenes/beiming.js
197
+ var BEIMING_FONT_FAMILY = "Inkpond Glyphs Beiming";
198
+ var BEIMING_FONT_URL = "data:font/woff2;base64,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";
199
+ var SEA = 0;
200
+ var WHALE = 1;
201
+ var BEIMING_LEVELS = [
202
+ "\u4E00",
203
+ "\u4E00",
204
+ "\u4E00\uFF5E",
205
+ "\uFF5E",
206
+ "\uFF5E\u4E8C",
207
+ "\u51AB\u6C34",
208
+ "\u6CE2\u6D6A",
209
+ "\u6CA7\u6D77"
210
+ ];
211
+ var WHALE_LEVELS = [
212
+ "\u4E36",
213
+ "\u51AB",
214
+ "\u6C35\u6C89",
215
+ "\u6DF1\u6CA1",
216
+ "\u5E7D\u6F5C",
217
+ "\u51A5\u6E0A",
218
+ "\u6E9F\u9CB2",
219
+ "\u9CB8\u9CB2"
220
+ ];
221
+ var MOTE = "\u4E36";
222
+ var SEA_INK = 2.6;
223
+ var WHALE_INK = 2.8;
224
+ var SPINE = 14;
225
+ var DEPTH_PERIOD = 56;
226
+ var BEAT_PERIOD = 7;
227
+ var SLICKS = 18;
228
+ var SLICK_EVERY_S = 1.8;
229
+ var SLICK_LIFE_S = 32;
230
+ var angleTo = (from, to) => {
231
+ let d = to - from;
232
+ while (d > Math.PI)
233
+ d -= Math.PI * 2;
234
+ while (d < -Math.PI)
235
+ d += Math.PI * 2;
236
+ return d;
237
+ };
238
+ var createBeiming = (levels = BEIMING_LEVELS) => {
239
+ const table = glyphTable([levels, WHALE_LEVELS], MOTE);
240
+ const mote = table.index(MOTE);
241
+ let cols = 0;
242
+ let rows = 0;
243
+ let cell = 16;
244
+ let width = 0;
245
+ let height = 0;
246
+ let warp = coarseField(0, 0);
247
+ let patch = coarseField(0, 0);
248
+ let length = 0;
249
+ let girth = 0;
250
+ let seg = 0;
251
+ let spine = [];
252
+ let halfWidth = new Float32Array(0);
253
+ let heading = 0;
254
+ let depth = 0.5;
255
+ let dive = 0;
256
+ let beat = 0;
257
+ let slicks = [];
258
+ let nextSlick = 0;
259
+ let lastSlick = Number.NEGATIVE_INFINITY;
260
+ let motes = [];
261
+ let rim = false;
262
+ const layoutWhale = () => {
263
+ length = clamp(Math.min(Math.max(width * 0.5, height * 0.62), width * 0.9), 240, 860);
264
+ girth = length * 0.11;
265
+ seg = length / (SPINE - 1);
266
+ heading = -0.12;
267
+ halfWidth = new Float32Array(SPINE);
268
+ spine = [];
269
+ for (let i = 0; i < SPINE; i++) {
270
+ const s = i / (SPINE - 1);
271
+ halfWidth[i] = s < 0.26 ? girth * (0.42 + 0.58 * Math.sqrt(Math.sin(s / 0.26 * (Math.PI / 2)))) : girth * (0.1 + 0.9 * Math.cos((s - 0.26) / 0.74 * (Math.PI / 2)) ** 1.7);
272
+ spine.push({
273
+ x: width * 0.32 - Math.cos(heading) * seg * i,
274
+ y: height * 0.6 - Math.sin(heading) * seg * i
275
+ });
276
+ }
277
+ slicks = Array.from({ length: SLICKS }, () => ({ k: 0, t: 0, x: 0, y: 0 }));
278
+ nextSlick = 0;
279
+ lastSlick = Number.NEGATIVE_INFINITY;
280
+ dive = 0;
281
+ const rand = rng(cols * 29 + rows * 13);
282
+ motes = Array.from({ length: clamp(Math.round(width * height / 52e3), 12, 48) }, () => ({
283
+ phase: rand() * 6.28,
284
+ x: rand() * width,
285
+ y: rand() * height,
286
+ z: 0.4 + rand() * 0.6
287
+ }));
288
+ };
289
+ const taper = (px, py, ax, ay, dx, dy, len, r0, r1) => {
290
+ const t = clamp(((px - ax) * dx + (py - ay) * dy) / len, 0, 1);
291
+ const ex = px - ax - dx * t * len;
292
+ const ey = py - ay - dy * t * len;
293
+ return Math.sqrt(ex * ex + ey * ey) - (r0 + (r1 - r0) * t);
294
+ };
295
+ let blur = 0;
296
+ let span = 0;
297
+ let tailX = 0;
298
+ let tailY = 0;
299
+ let tailDX = 1;
300
+ let tailDY = 0;
301
+ const fin = new Float64Array(8);
302
+ const pose = (time) => {
303
+ blur = (0.6 + 2.2 * depth) * cell;
304
+ span = length * 0.17 * (0.86 + 0.14 * Math.cos(beat));
305
+ const tail = spine[SPINE - 1];
306
+ const stock = spine[SPINE - 2];
307
+ const tl = Math.hypot(tail.x - stock.x, tail.y - stock.y) || 1;
308
+ tailX = tail.x;
309
+ tailY = tail.y;
310
+ tailDX = (tail.x - stock.x) / tl;
311
+ tailDY = (tail.y - stock.y) / tl;
312
+ const f0 = spine[3];
313
+ const f1 = spine[4];
314
+ const fl = Math.hypot(f1.x - f0.x, f1.y - f0.y) || 1;
315
+ const bx = (f1.x - f0.x) / fl;
316
+ const by = (f1.y - f0.y) / fl;
317
+ for (let side = -1, k = 0; side <= 1; side += 2, k += 4) {
318
+ const a = 0.72 + 0.12 * Math.sin(time * 0.32 + side);
319
+ const ca = Math.cos(a);
320
+ const sa = Math.sin(a) * side;
321
+ const root = (halfWidth[3] ?? 0) * 0.75 * side;
322
+ fin[k] = f0.x + (f1.x - f0.x) * 0.25 - by * root;
323
+ fin[k + 1] = f0.y + (f1.y - f0.y) * 0.25 + bx * root;
324
+ fin[k + 2] = bx * ca - by * sa;
325
+ fin[k + 3] = by * ca + bx * sa;
326
+ }
327
+ };
328
+ const whaleAt = (x, y, time) => {
329
+ let body = 1e9;
330
+ let bodyHalf = 1;
331
+ for (let i = 0; i < SPINE - 1; i++) {
332
+ const a = spine[i];
333
+ const b = spine[i + 1];
334
+ const vx = b.x - a.x;
335
+ const vy = b.y - a.y;
336
+ const k = clamp(((x - a.x) * vx + (y - a.y) * vy) / (vx * vx + vy * vy || 1), 0, 1);
337
+ const h = (halfWidth[i] ?? 0) + ((halfWidth[i + 1] ?? 0) - (halfWidth[i] ?? 0)) * k;
338
+ const ex = x - a.x - vx * k;
339
+ const ey = y - a.y - vy * k;
340
+ const d2 = Math.sqrt(ex * ex + ey * ey) - h;
341
+ if (d2 < body) {
342
+ body = d2;
343
+ bodyHalf = h;
344
+ }
345
+ }
346
+ if (body > length * 0.3 + blur) {
347
+ rim = false;
348
+ return 0;
349
+ }
350
+ const u = (x - tailX) * tailDX + (y - tailY) * tailDY;
351
+ const w = -(x - tailX) * tailDY + (y - tailY) * tailDX;
352
+ const chord = length * 0.075;
353
+ const aw = Math.abs(w) / span;
354
+ const lead = -chord * 0.2 + chord * 0.85 * aw ** 1.8;
355
+ const trail = lead + chord * Math.sqrt(Math.max(0, 1 - aw * aw)) * (1 - 0.45 * Math.exp(-((w / (span * 0.1)) ** 2)));
356
+ const flukes = Math.max(Math.abs(w) - span, lead - u, u - trail);
357
+ let fins = 1e9;
358
+ for (let k = 0; k < 8; k += 4) {
359
+ fins = Math.min(fins, taper(x, y, fin[k] ?? 0, fin[k + 1] ?? 0, fin[k + 2] ?? 0, fin[k + 3] ?? 0, length * 0.27, length * 0.042, length * 0.012));
360
+ }
361
+ const d = Math.min(body, flukes, fins);
362
+ if (d > blur) {
363
+ rim = false;
364
+ return 0;
365
+ }
366
+ rim = d > -blur * 0.55 - depth * girth * 0.5;
367
+ const core = body <= d ? 0.5 + 0.5 * Math.sqrt(clamp(-body / (bodyHalf * 0.9), 0, 1)) : flukes <= d ? 0.8 * (0.85 + 0.15 * Math.cos(beat)) : 0.8;
368
+ const mottle = 0.78 + 0.4 * (noise(x / 46, y / 46) - 0.5);
369
+ const c = noise(x / 68 + time * 0.12, y / 68 - time * 0.08);
370
+ const lit = 1 - 0.32 * smoothstep(0.78, 1, 1 - Math.abs(2 * c - 1)) * (1 - depth);
371
+ return (1 - smoothstep(-blur, blur, d)) * (1 - 0.5 * depth) * core * mottle * lit;
372
+ };
373
+ const calmAt = (x, y, time) => {
374
+ let calm = 0;
375
+ for (const s of slicks) {
376
+ if (s.k <= 0)
377
+ continue;
378
+ const age = time - s.t;
379
+ if (age > SLICK_LIFE_S)
380
+ continue;
381
+ const r = girth * (1.5 + age * 0.06);
382
+ const d2 = ((x - s.x) ** 2 + (y - s.y) ** 2) / (r * r);
383
+ if (d2 < 4) {
384
+ calm = Math.max(calm, Math.exp(-d2 * d2) * s.k * smoothstep(SLICK_LIFE_S, SLICK_LIFE_S * 0.56, age));
385
+ }
386
+ }
387
+ return calm;
388
+ };
389
+ return {
390
+ fontFamily: BEIMING_FONT_FAMILY,
391
+ fontUrl: BEIMING_FONT_URL,
392
+ glyphs: table.glyphs,
393
+ moving: true,
394
+ panSpeed: 0,
395
+ ramps: table.ramps,
396
+ compose(grid, _offset, time) {
397
+ for (let cy = 0; cy < warp.h; cy++) {
398
+ for (let cx = 0; cx < warp.w; cx++) {
399
+ const x = cx * COARSE * cell;
400
+ const y = cy * COARSE * cell;
401
+ const j = cy * warp.w + cx;
402
+ warp.data[j] = 3.2 * fbm(x / 300, y / 300 + time * 0.015);
403
+ patch.data[j] = smoothstep(0.45, 0.75, fbm(x / 230 + time * 8e-3 + 9, y / 230));
404
+ }
405
+ }
406
+ let x0 = Number.POSITIVE_INFINITY;
407
+ let y0 = Number.POSITIVE_INFINITY;
408
+ let x1 = Number.NEGATIVE_INFINITY;
409
+ let y1 = Number.NEGATIVE_INFINITY;
410
+ for (const p of spine) {
411
+ x0 = Math.min(x0, p.x);
412
+ y0 = Math.min(y0, p.y);
413
+ x1 = Math.max(x1, p.x);
414
+ y1 = Math.max(y1, p.y);
415
+ }
416
+ const reach = length * 0.36;
417
+ pose(time);
418
+ const slicked = slicks.some((s) => s.k > 0 && time - s.t < SLICK_LIFE_S);
419
+ grid.wet.fill(1);
420
+ for (let y = 0; y < rows; y++) {
421
+ const py = (y - 0.5) * cell;
422
+ for (let x = 0, i = y * cols; x < cols; x++, i++) {
423
+ const px = (x - 0.5) * cell;
424
+ const a = Math.sin((py * 0.96 + px * 0.28) / (cell * 2.4) + warp.at(x, y) - time * 0.42);
425
+ let sea = smoothstep(0.9, 1, a) * (0.25 + 0.75 * patch.at(x, y)) * 0.42;
426
+ if (sea > 0 && slicked)
427
+ sea *= 1 - calmAt(px, py, time);
428
+ const near = px > x0 - reach && px < x1 + reach && py > y0 - reach && py < y1 + reach;
429
+ const whale = near ? whaleAt(px, py, time) * (1 - 0.3 * sea) : 0;
430
+ if (whale > 0.02 && whale >= sea) {
431
+ grid.kind[i] = WHALE;
432
+ grid.ground[i] = whale * WHALE_INK;
433
+ grid.pigment[i] = rim ? HUAQING : INK;
434
+ } else {
435
+ grid.kind[i] = SEA;
436
+ grid.ground[i] = sea * SEA_INK;
437
+ grid.pigment[i] = INK;
438
+ }
439
+ }
440
+ }
441
+ },
442
+ layout(view) {
443
+ cols = view.cols;
444
+ rows = view.rows;
445
+ cell = view.cell;
446
+ width = view.width;
447
+ height = view.height;
448
+ warp = coarseField(cols, rows);
449
+ patch = coarseField(cols, rows);
450
+ layoutWhale();
451
+ },
452
+ stamps(_env, emit) {
453
+ for (const m of motes) {
454
+ emit(mote, m.x, m.y, 0.22 * m.z, 0.6 + m.z * 0.4, INK);
455
+ }
456
+ },
457
+ step(dt, env) {
458
+ dt = Math.min(dt, 0.1);
459
+ const time = env.time;
460
+ const head = spine[0];
461
+ if (!head)
462
+ return;
463
+ let turn = (noise(time * 0.02, 7.3) - 0.5) * 0.14;
464
+ const R = Math.min(env.width, env.height) * 0.5;
465
+ const dx = env.width / 2 - head.x;
466
+ const dy = env.height / 2 - head.y;
467
+ turn += angleTo(heading, Math.atan2(dy, dx)) * 0.2 * smoothstep(R * 0.25, R * 1.1, Math.hypot(dx, dy));
468
+ for (const d of env.drops) {
469
+ if (d.age < 10) {
470
+ turn += angleTo(heading, Math.atan2(d.y - head.y, d.x - head.x)) * 0.25;
471
+ break;
472
+ }
473
+ }
474
+ heading += clamp(turn, -0.5, 0.5) * dt;
475
+ const speed = length * 0.06;
476
+ head.x += Math.cos(heading) * speed * dt;
477
+ head.y += Math.sin(heading) * speed * dt;
478
+ for (let i = 1; i < SPINE; i++) {
479
+ const p2 = spine[i];
480
+ const q = spine[i - 1];
481
+ const d = Math.hypot(p2.x - q.x, p2.y - q.y) || 1;
482
+ p2.x = q.x + (p2.x - q.x) / d * seg;
483
+ p2.y = q.y + (p2.y - q.y) / d * seg;
484
+ }
485
+ const p = env.pointer;
486
+ let touched = false;
487
+ if (p) {
488
+ for (const s of spine) {
489
+ if (Math.hypot(p.x - s.x, p.y - s.y) < girth * 2.5) {
490
+ touched = true;
491
+ break;
492
+ }
493
+ }
494
+ }
495
+ dive = touched ? Math.min(1, dive + dt * 1.5) : Math.max(0, dive - dt * 0.06);
496
+ depth = clamp(0.5 + 0.45 * Math.sin(time * 2 * Math.PI / DEPTH_PERIOD - 0.9) + dive * 0.6, 0, 1);
497
+ beat = time * 2 * Math.PI / BEAT_PERIOD;
498
+ if (depth < 0.5 && time - lastSlick > SLICK_EVERY_S) {
499
+ const tail = spine[SPINE - 1];
500
+ const s = slicks[nextSlick];
501
+ s.x = tail.x;
502
+ s.y = tail.y;
503
+ s.t = time;
504
+ s.k = 1 - depth * 2;
505
+ nextSlick = (nextSlick + 1) % SLICKS;
506
+ lastSlick = time;
507
+ }
508
+ for (const m of motes) {
509
+ m.x += (6 + 4 * m.z) * dt;
510
+ m.y += Math.sin(time * 0.3 + m.phase) * 2 * dt;
511
+ if (m.x > env.width + cell) {
512
+ m.x = -cell;
513
+ m.y = (m.y + env.height * 0.618) % env.height;
514
+ }
515
+ }
516
+ }
517
+ };
518
+ };
519
+
520
+ // node_modules/inkpond/dist/scenes/jieqi/term.js
521
+ var TAU = Math.PI * 2;
522
+ var ring = (d, r, w) => {
523
+ const k = (d - r) / w;
524
+ return Math.exp(-k * k);
525
+ };
526
+ var angleTo2 = (from, to) => {
527
+ let d = to - from;
528
+ while (d > Math.PI)
529
+ d -= TAU;
530
+ while (d < -Math.PI)
531
+ d += TAU;
532
+ return d;
533
+ };
534
+ var pool = (n) => Array.from({ length: n }, () => ({
535
+ a: 0,
536
+ b: 0,
537
+ life: 0,
538
+ vx: 0,
539
+ vy: 0,
540
+ x: 0,
541
+ y: 0
542
+ }));
543
+ var spawn = (ps) => {
544
+ let pick = ps[0];
545
+ for (const p of ps) {
546
+ if (p.life <= 0)
547
+ return p;
548
+ if (pick && p.life < pick.life)
549
+ pick = p;
550
+ }
551
+ return pick;
552
+ };
553
+ var WATER = ["\u4E36", "\u4E00", "\u4E8C", "\u6C35", "\u6C34", "\u6C40", "\u6CE2", "\u6F9C"];
554
+
555
+ // node_modules/inkpond/dist/scenes/jieqi/autumn.js
556
+ var liqiu = {
557
+ create({ glyph, rand }) {
558
+ const leafGlyph = glyph("\u53F6");
559
+ let rings = pool(0);
560
+ let v = { cell: 16, height: 0, width: 0 };
561
+ let shore = 0;
562
+ const leaf = { a: 0, b: 0, life: 1, vx: 0, vy: -1, x: 0, y: 0 };
563
+ const fall = (t) => {
564
+ leaf.a = v.width * (0.35 + rand() * 0.35);
565
+ leaf.b = rand() * TAU;
566
+ leaf.vx = t;
567
+ leaf.vy = -1;
568
+ leaf.x = leaf.a;
569
+ leaf.y = v.height * 0.12;
570
+ };
571
+ return {
572
+ cell(x, y, t, out) {
573
+ const bx = v.width * 0.55;
574
+ if (x > bx && y < v.height * 0.3) {
575
+ const by = v.height * 0.06 + (x - bx) * 0.18 + Math.sin(x * 0.03) * 6;
576
+ const thick = 3 + 6 * (x - bx) / (v.width - bx);
577
+ if (Math.abs(y - by) < thick) {
578
+ out.v = 0.85;
579
+ out.wet = 0.2;
580
+ return;
581
+ }
582
+ if (Math.abs(y - by) < 46 && fbm(x * 0.04, y * 0.05) > 0.56) {
583
+ out.v = 0.45;
584
+ out.p = ZHE;
585
+ out.wet = 0.2;
586
+ return;
587
+ }
588
+ }
589
+ if (y < shore)
590
+ return;
591
+ let val = 0.12 + 0.06 * noise(x * 0.02, y * 0.08 + t * 0.2);
592
+ for (const r of rings) {
593
+ if (r.life <= 0)
594
+ continue;
595
+ const age = t - r.a;
596
+ val += 0.8 * Math.exp(-age * 0.7) * ring(Math.hypot(x - r.x, (y - r.y) * 3), age * 70, 12);
597
+ }
598
+ out.v = val;
599
+ },
600
+ layout(view) {
601
+ v = view;
602
+ shore = v.height * 0.76;
603
+ rings = pool(3);
604
+ fall(0);
605
+ },
606
+ stamps(t, emit) {
607
+ const a = leaf.vy < 0 ? 0.95 : 0.95 * (1 - (t - leaf.vy) / 5);
608
+ emit(leafGlyph, leaf.x, leaf.y, a, 2.2, ZHE);
609
+ },
610
+ step(dt, t, env) {
611
+ for (const r2 of rings)
612
+ r2.life -= dt;
613
+ if (leaf.vy >= 0) {
614
+ leaf.x += 6 * dt;
615
+ if (t - leaf.vy > 5)
616
+ fall(t);
617
+ return;
618
+ }
619
+ const ph = (t - leaf.vx) * 1.4 + leaf.b;
620
+ leaf.y += (26 + Math.cos(ph) * 14) * dt;
621
+ leaf.x = leaf.a + Math.sin(ph) * 64;
622
+ const p = env.pointer;
623
+ if (p && Math.hypot(p.x - leaf.x, p.y - leaf.y) < 130) {
624
+ leaf.a += (leaf.x > p.x ? 1 : -1) * 90 * dt;
625
+ }
626
+ if (leaf.y < shore)
627
+ return;
628
+ leaf.vy = t;
629
+ const r = spawn(rings);
630
+ if (!r)
631
+ return;
632
+ r.life = 5;
633
+ r.x = leaf.x;
634
+ r.y = leaf.y;
635
+ r.a = t;
636
+ }
637
+ };
638
+ },
639
+ id: "liqiu",
640
+ loose: "\u53F6",
641
+ ramps: [["\u4E36", "\u4E00", "\u51AB", "\u6C34", "\u6C40", "\u51C9", "\u6E05", "\u6F88"]],
642
+ warm: 2
643
+ };
644
+ var chushu = {
645
+ create({ glyph, rand }) {
646
+ const fire = glyph("\u706B");
647
+ const hawk = glyph("\u9E70");
648
+ let sparks = pool(0);
649
+ let v = { cell: 16, height: 0, width: 0 };
650
+ let front = 0;
651
+ let px = -1e4;
652
+ let py = -1e4;
653
+ return {
654
+ cell(x, y, t, out) {
655
+ const fx = front + (fbm(y * 0.01, t * 0.3) - 0.5) * 180;
656
+ const hot = x > fx && Math.hypot(x - px, y - py) > 110;
657
+ if (hot) {
658
+ out.v = x - fx < 26 ? 0.95 : 0.08 + 0.75 * smoothstep(0.45, 0.78, fbm(x * 0.015 + t * 0.1, y * 0.015));
659
+ out.p = ZHU;
660
+ } else {
661
+ out.v = 0.04 + 0.16 * fbm(x * 0.015 - t * 0.05, y * 0.015);
662
+ out.p = HUAQING;
663
+ }
664
+ },
665
+ layout(view) {
666
+ v = view;
667
+ sparks = pool(40);
668
+ },
669
+ stamps(t, emit) {
670
+ for (const s of sparks)
671
+ if (s.life > 0)
672
+ emit(fire, s.x, s.y, s.life, 0.7, s.life > 0.5 ? ZHU : ZHE);
673
+ emit(hawk, v.width * 0.5 + Math.cos(t * 0.4) * v.width * 0.28, v.height * 0.22 + Math.sin(t * 0.8) * 30, 0.95, 1.3, INK);
674
+ },
675
+ step(dt, t, env) {
676
+ px = env.pointer?.x ?? -1e4;
677
+ py = env.pointer?.y ?? -1e4;
678
+ front = t * 50 % (v.width + 300) - 150;
679
+ if (rand() < dt * 14) {
680
+ const s = spawn(sparks);
681
+ if (s && s.life <= 0) {
682
+ s.life = 1;
683
+ s.x = front + (rand() - 0.5) * 40;
684
+ s.y = rand() * v.height;
685
+ }
686
+ }
687
+ for (const s of sparks) {
688
+ if (s.life <= 0)
689
+ continue;
690
+ s.y -= 30 * dt;
691
+ s.x -= 20 * dt;
692
+ s.life -= dt * 0.7;
693
+ }
694
+ }
695
+ };
696
+ },
697
+ id: "chushu",
698
+ loose: "\u706B\u9E70",
699
+ ramps: [["\u4E36", "\u4E00", "\u51AB", "\u51C9", "\u8083", "\u6691", "\u708E", "\u7131"]],
700
+ warm: 3
701
+ };
702
+ var bailu = {
703
+ create({ glyph, rand }) {
704
+ const bead = glyph("\u73E0");
705
+ const dot = glyph("\u4E36");
706
+ const TRAIL = 10;
707
+ let drops = pool(0);
708
+ let trails = new Float32Array(0);
709
+ let v = { cell: 16, height: 0, width: 0 };
710
+ const bead0 = (d, i, y) => {
711
+ d.x = rand() * v.width;
712
+ d.y = y;
713
+ d.b = 14 + rand() * 16;
714
+ d.a = 0.6 + rand() * 0.8;
715
+ d.vy = 0;
716
+ d.life = 0;
717
+ trails.fill(-1e4, i * TRAIL * 2, (i + 1) * TRAIL * 2);
718
+ };
719
+ return {
720
+ cell(x, y, _t, out) {
721
+ const w = (x * 0.9 - y * 0.42) * 0.045;
722
+ out.v = smoothstep(0.94, 1, Math.abs(Math.sin(w + noise(x * 0.01, y * 0.01) * 3))) * 0.42;
723
+ out.wet = 0.6;
724
+ for (const d of drops) {
725
+ if (d.vy !== 0)
726
+ continue;
727
+ const dist = Math.hypot(x - d.x, y - d.y);
728
+ if (dist > d.b)
729
+ continue;
730
+ if (Math.hypot(x - (d.x - d.b * 0.35), y - (d.y - d.b * 0.35)) < d.b * 0.3) {
731
+ out.v = 0;
732
+ return;
733
+ }
734
+ out.v = 0.35 + 0.6 * smoothstep(d.b * 0.45, d.b, dist);
735
+ out.p = HUAQING;
736
+ out.wet = 1;
737
+ return;
738
+ }
739
+ },
740
+ layout(view) {
741
+ v = view;
742
+ drops = pool(14);
743
+ trails = new Float32Array(14 * TRAIL * 2);
744
+ drops.forEach((d, i) => {
745
+ bead0(d, i, rand() * v.height);
746
+ });
747
+ },
748
+ stamps(_t, emit) {
749
+ drops.forEach((d, i) => {
750
+ if (d.vy === 0)
751
+ return;
752
+ for (let k = 0; k < TRAIL; k++) {
753
+ const x = trails[(i * TRAIL + k) * 2] ?? -1e4;
754
+ if (x < -1e3)
755
+ continue;
756
+ emit(dot, x, trails[(i * TRAIL + k) * 2 + 1] ?? 0, 0.5 * ((k + 1) / TRAIL), 0.7, HUAQING);
757
+ }
758
+ emit(bead, d.x, d.y, 0.95, Math.min(2.4, d.b / 20), HUAQING);
759
+ });
760
+ },
761
+ step(dt, _t, env) {
762
+ const p = env.pointer;
763
+ drops.forEach((d, i) => {
764
+ if (d.vy === 0) {
765
+ d.b += d.a * dt * 2.2;
766
+ if (d.b > 56 || p && Math.hypot(p.x - d.x, p.y - d.y) < d.b + 12)
767
+ d.vy = 1;
768
+ return;
769
+ }
770
+ d.vy += 160 * dt;
771
+ d.y += d.vy * dt;
772
+ d.x += d.vy * 0.25 * dt;
773
+ d.life += dt;
774
+ if (d.life > 0.06) {
775
+ d.life = 0;
776
+ trails.copyWithin(i * TRAIL * 2, i * TRAIL * 2 + 2, (i + 1) * TRAIL * 2);
777
+ trails[(i + 1) * TRAIL * 2 - 2] = d.x;
778
+ trails[(i + 1) * TRAIL * 2 - 1] = d.y - d.b * 0.6;
779
+ }
780
+ if (d.y - d.b > v.height)
781
+ bead0(d, i, rand() * v.height * 0.8);
782
+ });
783
+ }
784
+ };
785
+ },
786
+ id: "bailu",
787
+ loose: "\u73E0\u4E36",
788
+ ramps: [["\u4E36", "\u51AB", "\u6C35", "\u767D", "\u6CCA", "\u73E0", "\u9732", "\u6EF4"]],
789
+ warm: 3
790
+ };
791
+ var qiufen = {
792
+ create() {
793
+ let v = { cell: 16, height: 0, width: 0 };
794
+ let ang = 0;
795
+ return {
796
+ cell(x, y, t, out, cx, cy) {
797
+ const dx = x - v.width / 2;
798
+ const dy = y - v.height / 2;
799
+ const d = Math.hypot(dx, dy);
800
+ const R = Math.min(v.width, v.height) * 0.36;
801
+ const across = -dx * Math.sin(ang) + dy * Math.cos(ang);
802
+ if (d < R) {
803
+ out.wet = 0.4;
804
+ if (Math.abs(across) < v.cell * 0.45) {
805
+ out.v = 1;
806
+ out.p = ZHU;
807
+ return;
808
+ }
809
+ if (across > 0)
810
+ out.v = 0.66 + 0.25 * fbm(x * 0.03, y * 0.03);
811
+ else {
812
+ out.v = 0.22 + 0.22 * fbm(x * 0.03 + 9, y * 0.03);
813
+ out.p = ZHE;
814
+ }
815
+ out.v = Math.max(out.v, ring(d, R, 6) * 0.9);
816
+ return;
817
+ }
818
+ if (Math.abs(across) < v.cell * 0.3 && d < R * 1.45) {
819
+ out.v = 0.4 * (1 - (d - R) / (R * 0.45));
820
+ out.p = ZHU;
821
+ return;
822
+ }
823
+ const star = hash2(cx, cy) > 0.99 ? 0.3 + 0.25 * Math.sin(t * 2 + cx) : 0;
824
+ out.v = ring(d, R, 6) * 0.9 + star;
825
+ },
826
+ layout(view) {
827
+ v = view;
828
+ },
829
+ stamps() {
830
+ },
831
+ step(dt, t, env) {
832
+ const p = env.pointer;
833
+ const target = p ? Math.atan2(p.y - v.height / 2, p.x - v.width / 2) : t * TAU / 24;
834
+ ang += angleTo2(ang, target) * Math.min(1, dt * (p ? 4 : 10));
835
+ }
836
+ };
837
+ },
838
+ id: "qiufen",
839
+ loose: "",
840
+ ramps: [["\u4E36", "\u4E00", "\u5915", "\u6708", "\u8083", "\u79CB", "\u723D", "\u7A46"]],
841
+ warm: 1
842
+ };
843
+ var hanlu = {
844
+ create({ glyph }) {
845
+ const goose = glyph("\u96C1");
846
+ let geese = pool(0);
847
+ let v = { cell: 16, height: 0, width: 0 };
848
+ let lx = 0;
849
+ let ly = 0;
850
+ let lift = 0;
851
+ const slot = (i, m, out) => {
852
+ const k = Math.ceil(i / 2);
853
+ const side = i % 2 ? 1 : -1;
854
+ const vx = lx - k * 24;
855
+ const vy = ly + side * k * 15;
856
+ out.x = vx + (lx - i * 22 - vx) * m;
857
+ out.y = vy + (ly - vy) * m;
858
+ };
859
+ const at = { x: 0, y: 0 };
860
+ return {
861
+ cell(x, y, t, out) {
862
+ const cloud = smoothstep(0.6, 0.8, fbm(x * 8e-3 - t * 0.03, y * 0.02)) * 0.3 * (1 - y / v.height);
863
+ const mum = smoothstep(0.5, 0.78, fbm(x * 0.03, y * 0.05 + Math.sin(t * 0.8 + x * 0.01) * 0.15)) * smoothstep(v.height * 0.7, v.height, y);
864
+ if (mum > 0.1) {
865
+ out.v = 0.3 + mum * 0.7;
866
+ out.p = ZHE;
867
+ out.wet = 0.4;
868
+ } else
869
+ out.v = cloud + 0.04;
870
+ },
871
+ layout(view) {
872
+ v = view;
873
+ lx = v.width * 0.3;
874
+ ly = v.height * 0.35;
875
+ geese = pool(13);
876
+ geese.forEach((g, i) => {
877
+ slot(i, 0.5, at);
878
+ g.x = at.x;
879
+ g.y = at.y;
880
+ });
881
+ },
882
+ stamps(t, emit) {
883
+ geese.forEach((g, i) => {
884
+ emit(goose, g.x, g.y + Math.sin(t * 5 + i) * 1.5, 0.92, 1, INK);
885
+ });
886
+ },
887
+ step(dt, t, env) {
888
+ lx += 55 * dt;
889
+ if (lx > v.width + 320)
890
+ lx = -60;
891
+ const p = env.pointer;
892
+ const push = p && Math.abs(p.x - (lx - 120)) < 200 ? p.y > ly ? -1 : 1 : 0;
893
+ lift += (push * v.height * 0.18 - lift) * Math.min(1, dt * 1.5);
894
+ ly = v.height * 0.33 + Math.sin(t * 0.25) * v.height * 0.06 + lift;
895
+ const m = 0.5 + 0.5 * Math.sin(t * 0.35);
896
+ geese.forEach((g, i) => {
897
+ slot(i, m, at);
898
+ g.x += (at.x - g.x) * Math.min(1, dt * 3);
899
+ g.y += (at.y - g.y) * Math.min(1, dt * 3);
900
+ });
901
+ }
902
+ };
903
+ },
904
+ id: "hanlu",
905
+ loose: "\u96C1",
906
+ ramps: [["\u4E36", "\u4E00", "\u4E8C", "\u4E91", "\u5BD2", "\u9732", "\u83CA", "\u971C"]],
907
+ warm: 1
908
+ };
909
+ var shuangjiang = {
910
+ create({ glyph, rand }) {
911
+ const maple = glyph("\u67AB");
912
+ const SPOTS = [
913
+ [0.02, 0.05],
914
+ [0.98, 0.1],
915
+ [0.05, 0.95],
916
+ [0.95, 0.92],
917
+ [0.5, 1.02],
918
+ [0.55, -0.02]
919
+ ];
920
+ let seeds = pool(0);
921
+ let leaves = pool(0);
922
+ let v = { cell: 16, height: 0, width: 0 };
923
+ let px = -1e4;
924
+ let py = -1e4;
925
+ let now = 0;
926
+ return {
927
+ cell(x, y, _t, out) {
928
+ let val = 0;
929
+ let pig = INK;
930
+ for (const s of seeds) {
931
+ const age = now - s.a;
932
+ const G = smoothstep(0, 16, age) * (1 - smoothstep(23, 26, age)) * s.b;
933
+ if (G <= 0)
934
+ continue;
935
+ const dx = x - s.x;
936
+ const dy = y - s.y;
937
+ const d = Math.hypot(dx, dy);
938
+ if (d > G)
939
+ continue;
940
+ const a = Math.atan2(dy, dx) + s.vx;
941
+ const arm = Math.abs(Math.cos(3 * a)) ** 14;
942
+ const sub = Math.abs(Math.cos(3 * a + 1.05)) ** 16 * 0.5 * (d / G);
943
+ const len = G * (0.1 + 0.9 * Math.max(arm, sub)) * (0.85 + 0.3 * noise(d * 0.05, a * 3));
944
+ if (d >= len)
945
+ continue;
946
+ const w = 0.25 + 0.5 * (d / len) + 0.25 * ring(d, len, 9);
947
+ if (w > val) {
948
+ val = w;
949
+ pig = d / len > 0.75 ? HUAQING : INK;
950
+ }
951
+ }
952
+ const warm = Math.hypot(x - px, y - py);
953
+ if (warm < 110)
954
+ val *= warm / 110;
955
+ out.v = val;
956
+ out.p = pig;
957
+ out.wet = 0.5;
958
+ },
959
+ layout(view) {
960
+ v = view;
961
+ seeds = pool(SPOTS.length);
962
+ seeds.forEach((s, i) => {
963
+ s.x = (SPOTS[i]?.[0] ?? 0) * v.width;
964
+ s.y = (SPOTS[i]?.[1] ?? 0) * v.height;
965
+ s.a = -i * 1.5;
966
+ s.vx = rand() * TAU;
967
+ s.b = Math.min(v.width, v.height) * (0.3 + rand() * 0.14);
968
+ });
969
+ leaves = pool(12);
970
+ for (const l of leaves) {
971
+ l.x = rand() * v.width;
972
+ l.y = rand() * v.height;
973
+ l.vy = 30 + rand() * 30;
974
+ l.b = rand() * TAU;
975
+ }
976
+ },
977
+ stamps(_t, emit) {
978
+ for (const l of leaves)
979
+ emit(maple, l.x, l.y, 0.92, 1.15, ZHU);
980
+ },
981
+ step(dt, t, env) {
982
+ now = t;
983
+ px = env.pointer?.x ?? -1e4;
984
+ py = env.pointer?.y ?? -1e4;
985
+ for (const s of seeds) {
986
+ if (t - s.a > 26) {
987
+ s.a = t;
988
+ s.vx = rand() * TAU;
989
+ }
990
+ }
991
+ for (const l of leaves) {
992
+ l.y += l.vy * dt;
993
+ l.x += Math.sin(t * 1.2 + l.b) * 30 * dt;
994
+ if (l.y > v.height + 20) {
995
+ l.y = -20;
996
+ l.x = rand() * v.width;
997
+ }
998
+ }
999
+ }
1000
+ };
1001
+ },
1002
+ id: "shuangjiang",
1003
+ loose: "\u67AB",
1004
+ ramps: [["\u4E36", "\u51AB", "\u51B0", "\u51C7", "\u971C", "\u51DB", "\u51DD", "\u9730"]],
1005
+ warm: 10
1006
+ };
1007
+
1008
+ // node_modules/inkpond/dist/scenes/jieqi/calendar.js
1009
+ var JIEQI = [
1010
+ { id: "lichun", longitude: 315, name: "\u7ACB\u6625" },
1011
+ { id: "yushui", longitude: 330, name: "\u96E8\u6C34" },
1012
+ { id: "jingzhe", longitude: 345, name: "\u60CA\u86F0" },
1013
+ { id: "chunfen", longitude: 0, name: "\u6625\u5206" },
1014
+ { id: "qingming", longitude: 15, name: "\u6E05\u660E" },
1015
+ { id: "guyu", longitude: 30, name: "\u8C37\u96E8" },
1016
+ { id: "lixia", longitude: 45, name: "\u7ACB\u590F" },
1017
+ { id: "xiaoman", longitude: 60, name: "\u5C0F\u6EE1" },
1018
+ { id: "mangzhong", longitude: 75, name: "\u8292\u79CD" },
1019
+ { id: "xiazhi", longitude: 90, name: "\u590F\u81F3" },
1020
+ { id: "xiaoshu", longitude: 105, name: "\u5C0F\u6691" },
1021
+ { id: "dashu", longitude: 120, name: "\u5927\u6691" },
1022
+ { id: "liqiu", longitude: 135, name: "\u7ACB\u79CB" },
1023
+ { id: "chushu", longitude: 150, name: "\u5904\u6691" },
1024
+ { id: "bailu", longitude: 165, name: "\u767D\u9732" },
1025
+ { id: "qiufen", longitude: 180, name: "\u79CB\u5206" },
1026
+ { id: "hanlu", longitude: 195, name: "\u5BD2\u9732" },
1027
+ { id: "shuangjiang", longitude: 210, name: "\u971C\u964D" },
1028
+ { id: "lidong", longitude: 225, name: "\u7ACB\u51AC" },
1029
+ { id: "xiaoxue", longitude: 240, name: "\u5C0F\u96EA" },
1030
+ { id: "daxue", longitude: 255, name: "\u5927\u96EA" },
1031
+ { id: "dongzhi", longitude: 270, name: "\u51AC\u81F3" },
1032
+ { id: "xiaohan", longitude: 285, name: "\u5C0F\u5BD2" },
1033
+ { id: "dahan", longitude: 300, name: "\u5927\u5BD2" }
1034
+ ];
1035
+ var DAY_MS = 864e5;
1036
+ var UNIX_JD = 24405875e-1;
1037
+ var J2000 = 2451545;
1038
+ var sunLongitude = (date) => {
1039
+ const d = +date / DAY_MS + UNIX_JD - J2000;
1040
+ const g = (357.529 + 0.98560028 * d) * Math.PI / 180;
1041
+ const l = 280.459 + 0.98564736 * d + 1.915 * Math.sin(g) + 0.02 * Math.sin(2 * g);
1042
+ return (l % 360 + 360) % 360;
1043
+ };
1044
+ var jieqiIndexAt = (date) => Math.floor(((sunLongitude(date) - 315) % 360 + 360) % 360 / 15);
1045
+
1046
+ // node_modules/inkpond/dist/scenes/jieqi/spring.js
1047
+ var crackAt = (x, y) => Math.abs(noise(x * 95e-4 + y * 55e-4, y * 95e-4 - x * 55e-4) - 0.5);
1048
+ var lichun = {
1049
+ create({ glyph, rand }) {
1050
+ const sprout = glyph("\u82BD");
1051
+ const sprouts = new Float32Array(92);
1052
+ let n = 0;
1053
+ let v = { cell: 16, height: 0, width: 0 };
1054
+ let ox = 0;
1055
+ let oy = 0;
1056
+ let t0 = 0;
1057
+ const reach = (t) => (t - t0) * 80;
1058
+ return {
1059
+ cell(x, y, t, out) {
1060
+ const d = Math.hypot(x - ox, y - oy);
1061
+ const r = reach(t);
1062
+ const ridge = crackAt(x, y);
1063
+ const fine = Math.abs(noise(x * 0.024 + y * 0.016 + 50, y * 0.024 - x * 0.016) - 0.5);
1064
+ const open = smoothstep(r, r - 90, d);
1065
+ out.v = 0.08 + 0.3 * smoothstep(0.35, 0.75, fbm(x * 0.012, y * 0.012));
1066
+ out.wet = 0.4;
1067
+ if (open > 0 && (ridge < 0.045 || fine < 0.02)) {
1068
+ out.v = 0.98 * open;
1069
+ out.wet = 1;
1070
+ } else if (open > 0.5)
1071
+ out.v *= 0.55;
1072
+ const edge = ring(d, r, 14);
1073
+ if (edge > 0.2 && ridge < 0.1) {
1074
+ out.v = Math.max(out.v, edge);
1075
+ out.p = HUAQING;
1076
+ }
1077
+ },
1078
+ drop(x, y, t) {
1079
+ ox = x;
1080
+ oy = y;
1081
+ t0 = t;
1082
+ },
1083
+ layout(view) {
1084
+ v = view;
1085
+ ox = v.width * 0.42;
1086
+ oy = v.height * 0.55;
1087
+ t0 = 0;
1088
+ n = 0;
1089
+ for (let k = 0; k < 4e3 && n < 46; k++) {
1090
+ const x = rand() * v.width;
1091
+ const y = rand() * v.height;
1092
+ if (crackAt(x, y) < 0.04) {
1093
+ sprouts[n * 2] = x;
1094
+ sprouts[n * 2 + 1] = y;
1095
+ n++;
1096
+ }
1097
+ }
1098
+ },
1099
+ stamps(t, emit) {
1100
+ const r = reach(t);
1101
+ for (let k = 0; k < n; k++) {
1102
+ const x = sprouts[k * 2] ?? 0;
1103
+ const y = sprouts[k * 2 + 1] ?? 0;
1104
+ const d = Math.hypot(x - ox, y - oy);
1105
+ if (d > r - 40)
1106
+ continue;
1107
+ const g = clamp((r - 40 - d) / 140, 0, 1);
1108
+ emit(sprout, x, y - g * 8, g * 0.9, 0.6 + g * 0.6, HUAQING);
1109
+ }
1110
+ },
1111
+ step(_dt, t) {
1112
+ if (reach(t) > Math.hypot(v.width, v.height) + 260) {
1113
+ t0 = t;
1114
+ ox = v.width * (0.2 + rand() * 0.6);
1115
+ oy = v.height * (0.3 + rand() * 0.5);
1116
+ }
1117
+ }
1118
+ };
1119
+ },
1120
+ id: "lichun",
1121
+ loose: "\u82BD",
1122
+ ramps: [["\u4E36", "\u51AB", "\u4E8C", "\u51B0", "\u51BB", "\u51CC", "\u51C7", "\u51DD"]],
1123
+ warm: 3
1124
+ };
1125
+ var yushui = {
1126
+ create({ glyph, rand }) {
1127
+ const rain = glyph("\u96E8");
1128
+ const dot = glyph("\u4E36");
1129
+ let drops = pool(0);
1130
+ let rings = pool(0);
1131
+ let v = { cell: 16, height: 0, width: 0 };
1132
+ let wind = 0.25;
1133
+ let acc = 0;
1134
+ let shore = 0;
1135
+ return {
1136
+ cell(x, y, t, out) {
1137
+ if (y < shore) {
1138
+ out.v = 0.1 * fbm(x * 0.01 + t * 0.1, y * 0.02);
1139
+ return;
1140
+ }
1141
+ let r = 0;
1142
+ for (const p of rings) {
1143
+ if (p.life <= 0 || Math.abs(x - p.x) > 120)
1144
+ continue;
1145
+ const age = t - p.a;
1146
+ const d = Math.hypot(x - p.x, (y - p.y) * 2.6);
1147
+ r += Math.exp(-age * 1.5) * 0.75 * ring(d, age * 55, 10);
1148
+ }
1149
+ out.v = 0.16 + 0.12 * noise(x * 0.03, y * 0.09 + t * 0.4) + r;
1150
+ if (r > 0.22)
1151
+ out.p = HUAQING;
1152
+ },
1153
+ layout(view) {
1154
+ v = view;
1155
+ shore = v.height * 0.66;
1156
+ drops = pool(110);
1157
+ rings = pool(40);
1158
+ },
1159
+ stamps(_t, emit) {
1160
+ const n = Math.hypot(wind, 1);
1161
+ const gap = Math.max(16, v.cell);
1162
+ const ux = wind / n * gap;
1163
+ const uy = gap / n;
1164
+ for (const d of drops) {
1165
+ if (d.life <= 0)
1166
+ continue;
1167
+ emit(rain, d.x, d.y, 0.85, 0.75, INK);
1168
+ emit(dot, d.x - ux, d.y - uy, 0.55, 0.6, HUAQING);
1169
+ emit(dot, d.x - ux * 2, d.y - uy * 2, 0.3, 0.6, HUAQING);
1170
+ }
1171
+ },
1172
+ step(dt, t, env) {
1173
+ const target = env.pointer ? (env.pointer.x / v.width - 0.5) * 1.3 : 0.25 + Math.sin(t * 0.3) * 0.1;
1174
+ wind += (target - wind) * Math.min(1, dt * 2);
1175
+ acc += dt * v.width / 14;
1176
+ for (; acc > 1; acc--) {
1177
+ const d = spawn(drops);
1178
+ if (!d || d.life > 0)
1179
+ break;
1180
+ d.life = 1;
1181
+ d.x = rand() * (v.width + 300) - 150;
1182
+ d.y = -20 - rand() * 60;
1183
+ d.vy = 360 + rand() * 220;
1184
+ d.a = shore + rand() * (v.height - shore);
1185
+ }
1186
+ for (const d of drops) {
1187
+ if (d.life <= 0)
1188
+ continue;
1189
+ d.y += d.vy * dt;
1190
+ d.x += d.vy * wind * dt;
1191
+ if (d.y < d.a)
1192
+ continue;
1193
+ d.life = 0;
1194
+ const r = spawn(rings);
1195
+ if (!r)
1196
+ continue;
1197
+ r.life = 2.2;
1198
+ r.x = d.x;
1199
+ r.y = d.a;
1200
+ r.a = t;
1201
+ }
1202
+ for (const r of rings)
1203
+ r.life -= dt;
1204
+ }
1205
+ };
1206
+ },
1207
+ id: "yushui",
1208
+ loose: "\u96E8\u4E36",
1209
+ ramps: [WATER],
1210
+ warm: 3
1211
+ };
1212
+ var jingzhe = {
1213
+ create({ glyph, rand }) {
1214
+ const spark = glyph("\u7535");
1215
+ const bug = glyph("\u866B");
1216
+ const bolt = new Float32Array(130);
1217
+ let boltAt = -9;
1218
+ let bugs = pool(0);
1219
+ let craters = pool(0);
1220
+ let v = { cell: 16, height: 0, width: 0 };
1221
+ let ground = 0;
1222
+ let next = 0.8;
1223
+ let flash = 0;
1224
+ const strike = (x, t) => {
1225
+ bolt[0] = x + (rand() - 0.5) * v.width * 0.3;
1226
+ bolt[1] = 0;
1227
+ bolt[128] = x;
1228
+ bolt[129] = ground;
1229
+ for (let s = 32, off = v.width * 0.12; s >= 1; s /= 2, off *= 0.55) {
1230
+ for (let i = s; i < 64; i += s * 2) {
1231
+ bolt[i * 2] = ((bolt[(i - s) * 2] ?? 0) + (bolt[(i + s) * 2] ?? 0)) / 2 + (rand() - 0.5) * off;
1232
+ bolt[i * 2 + 1] = ((bolt[(i - s) * 2 + 1] ?? 0) + (bolt[(i + s) * 2 + 1] ?? 0)) / 2;
1233
+ }
1234
+ }
1235
+ boltAt = t;
1236
+ flash = 1;
1237
+ const c = spawn(craters);
1238
+ if (c) {
1239
+ c.life = 4;
1240
+ c.x = x;
1241
+ c.a = t;
1242
+ }
1243
+ for (let k = 0; k < 24; k++) {
1244
+ const b = spawn(bugs);
1245
+ if (!b)
1246
+ break;
1247
+ b.life = 1;
1248
+ b.x = x;
1249
+ b.y = ground;
1250
+ b.vx = (rand() - 0.5) * 420;
1251
+ b.vy = -160 - rand() * 360;
1252
+ }
1253
+ next = t + 2.6 + rand() * 2;
1254
+ };
1255
+ return {
1256
+ cell(x, y, t, out) {
1257
+ const g = ground + 14 * (noise(x * 0.02, 3) - 0.5);
1258
+ const earth = y > g;
1259
+ let val = earth ? 0.12 + 0.55 * smoothstep(0.4, 0.75, fbm(x * 0.02, y * 0.04)) : 0.06 * fbm(x * 0.01, y * 0.02 + t * 0.05);
1260
+ out.wet = earth ? 0.3 : 1;
1261
+ for (const c of craters) {
1262
+ if (c.life <= 0)
1263
+ continue;
1264
+ const age = t - c.a;
1265
+ const d = Math.hypot(x - c.x, (y - ground) * 1.4);
1266
+ const shock = ring(d, age * 150, 26) * Math.exp(-age * 1.2);
1267
+ if (shock > 0.25)
1268
+ out.p = ZHU;
1269
+ val += shock * 0.7;
1270
+ if (earth) {
1271
+ const hole = smoothstep(0, 70 * (1 - Math.exp(-age * 4)), d);
1272
+ val *= Math.min(1, 0.35 + 0.65 * hole + 0.65 * smoothstep(2, 3.5, age));
1273
+ }
1274
+ }
1275
+ if (flash > 0)
1276
+ val = val * (1 - flash) + (1 - val) * flash * 0.7;
1277
+ out.v = val;
1278
+ },
1279
+ drop(x, _y, t) {
1280
+ strike(x, t);
1281
+ },
1282
+ layout(view) {
1283
+ v = view;
1284
+ ground = v.height * 0.6;
1285
+ bugs = pool(120);
1286
+ craters = pool(4);
1287
+ boltAt = -9;
1288
+ next = 0.8;
1289
+ },
1290
+ stamps(t, emit) {
1291
+ const age = t - boltAt;
1292
+ if (age < 0.4) {
1293
+ const a = 1 - age / 0.4;
1294
+ let left = 0;
1295
+ for (let i = 1; i < 65; i++) {
1296
+ const px = bolt[(i - 1) * 2] ?? 0;
1297
+ const py = bolt[(i - 1) * 2 + 1] ?? 0;
1298
+ const qx = bolt[i * 2] ?? 0;
1299
+ const qy = bolt[i * 2 + 1] ?? 0;
1300
+ const len = Math.hypot(qx - px, qy - py);
1301
+ for (; left < len; left += 14) {
1302
+ const f = left / len;
1303
+ emit(spark, px + (qx - px) * f, py + (qy - py) * f, a, 0.9, i % 3 ? ZHU : INK);
1304
+ }
1305
+ left -= len;
1306
+ }
1307
+ }
1308
+ for (const b of bugs)
1309
+ if (b.life > 0)
1310
+ emit(bug, b.x, b.y, b.life, 0.7, INK);
1311
+ },
1312
+ step(dt, t) {
1313
+ if (t > next)
1314
+ strike(v.width * (0.15 + rand() * 0.7), t);
1315
+ flash = Math.max(0, flash - dt * 4);
1316
+ for (const c of craters)
1317
+ c.life -= dt;
1318
+ for (const b of bugs) {
1319
+ if (b.life <= 0)
1320
+ continue;
1321
+ b.vy += 520 * dt;
1322
+ b.x += b.vx * dt;
1323
+ b.y += b.vy * dt;
1324
+ if (b.y > ground + 20 && b.vy > 0) {
1325
+ b.vy *= -0.3;
1326
+ b.vx *= 0.6;
1327
+ }
1328
+ b.life -= dt * 0.45;
1329
+ }
1330
+ }
1331
+ };
1332
+ },
1333
+ id: "jingzhe",
1334
+ loose: "\u7535\u866B",
1335
+ ramps: [["\u4E36", "\u571F", "\u866B", "\u5730", "\u867A", "\u86F0", "\u8822", "\u9707"]],
1336
+ warm: 1.5
1337
+ };
1338
+ var chunfen = {
1339
+ create({ glyph, rand }) {
1340
+ const swallow = glyph("\u71D5");
1341
+ const dot = glyph("\u4E36");
1342
+ let birds = pool(0);
1343
+ let v = { cell: 16, height: 0, width: 0 };
1344
+ let seam = 0;
1345
+ const line = (y, t) => seam + Math.sin(y * 0.012 + t * 0.8) * 26 + Math.sin(y * 0.031 - t * 1.3) * 10;
1346
+ let now = 0;
1347
+ return {
1348
+ cell(x, y, t, out) {
1349
+ const l = line(y, t);
1350
+ out.v = x > l ? 0.2 + 0.55 * smoothstep(0.35, 0.72, fbm(x * 0.012 + t * 0.05, y * 0.015)) : 0.08 + 0.08 * fbm(x * 0.02 - t * 0.05, y * 0.02);
1351
+ const e = ring(x, l, 9);
1352
+ if (e > 0.3) {
1353
+ out.v = Math.max(out.v, e);
1354
+ out.p = ZHU;
1355
+ }
1356
+ },
1357
+ layout(view) {
1358
+ v = view;
1359
+ seam = v.width / 2;
1360
+ birds = pool(7);
1361
+ birds.forEach((b, i) => {
1362
+ b.life = 1;
1363
+ b.x = rand() * v.width;
1364
+ b.a = v.height * (0.15 + rand() * 0.7);
1365
+ b.vx = (50 + rand() * 60) * (i % 2 ? 1 : -1);
1366
+ b.b = rand() * TAU;
1367
+ });
1368
+ },
1369
+ stamps(t, emit) {
1370
+ for (const b of birds) {
1371
+ const night = b.x > line(b.y, t);
1372
+ const dir = b.vx > 0 ? 1 : -1;
1373
+ emit(swallow, b.x, b.y, 0.95, 1.15, night ? ZHU : INK);
1374
+ emit(dot, b.x - dir * 16, b.y + 2, 0.4, 0.7, night ? ZHU : INK);
1375
+ }
1376
+ },
1377
+ step(dt, t, env) {
1378
+ now = t;
1379
+ const target = env.pointer ? env.pointer.x : v.width / 2 + Math.sin(now * 0.3) * v.width * 0.08;
1380
+ seam += (target - seam) * Math.min(1, dt * 2.5);
1381
+ for (const b of birds) {
1382
+ b.x += b.vx * dt;
1383
+ if (b.x > v.width + 30)
1384
+ b.x = -30;
1385
+ if (b.x < -30)
1386
+ b.x = v.width + 30;
1387
+ b.y = b.a + Math.sin(b.x * 0.02 + b.b) * 26;
1388
+ }
1389
+ }
1390
+ };
1391
+ },
1392
+ id: "chunfen",
1393
+ loose: "\u71D5\u4E36",
1394
+ ramps: [["\u4E00", "\u4E8C", "\u5206", "\u5E73", "\u663C", "\u591C", "\u669D", "\u9EEF"]],
1395
+ warm: 1
1396
+ };
1397
+ var qingming = {
1398
+ create({ glyph, rand }) {
1399
+ const willow = glyph("\u67F3");
1400
+ const thread = glyph("\u4E1D");
1401
+ const kite = glyph("\u9E22");
1402
+ const dot = glyph("\u4E36");
1403
+ let strands = pool(0);
1404
+ let v = { cell: 16, height: 0, width: 0 };
1405
+ let px = -1e4;
1406
+ let py = -1e4;
1407
+ return {
1408
+ cell(x, y, t, out, cx, cy) {
1409
+ out.v = 0.1 * fbm(x * 0.015 - t * 0.05, y * 0.01);
1410
+ if (hash2(cx, cy + Math.floor(t * 5) * 131) > 0.988) {
1411
+ out.v = 0.4;
1412
+ out.p = HUAQING;
1413
+ }
1414
+ },
1415
+ layout(view) {
1416
+ v = view;
1417
+ const n = Math.max(5, Math.floor(v.width / 56));
1418
+ strands = pool(n);
1419
+ strands.forEach((s, i) => {
1420
+ s.x = (i + 0.3 + rand() * 0.4) * v.width / n;
1421
+ s.a = v.height * (0.3 + rand() * 0.35);
1422
+ s.b = rand() * TAU;
1423
+ });
1424
+ },
1425
+ stamps(t, emit) {
1426
+ const step = Math.max(14, v.cell);
1427
+ for (const s of strands) {
1428
+ for (let y = 0, k = 0; y < s.a; y += step, k++) {
1429
+ const f = y / s.a;
1430
+ let x = s.x + Math.sin(t * 1.1 + s.b + f * 1.6) * f ** 1.6 * 28 + Math.sin(t * 0.4) * f * 10;
1431
+ const d = Math.hypot(x - px, y - py);
1432
+ if (d < 100)
1433
+ x += (x >= px ? 1 : -1) * (100 - d) * 0.5 * f;
1434
+ const top = k % 4 === 0;
1435
+ emit(top ? willow : thread, x, y + 6, 0.85 - f * 0.35, 0.75, top ? INK : HUAQING);
1436
+ }
1437
+ }
1438
+ const kx = v.width * 0.74 + Math.sin(t * 0.4) * 40;
1439
+ const ky = v.height * 0.2 + Math.sin(t * 0.7) * 18;
1440
+ for (let j = 1; j < 24; j++) {
1441
+ const f = j / 24;
1442
+ emit(dot, kx + (v.width * 0.4 - kx) * f, ky + (v.height - ky) * f + Math.sin(f * Math.PI) * 30, 0.35, 0.5, INK);
1443
+ }
1444
+ emit(kite, kx, ky, 0.95, 1.5, ZHU);
1445
+ },
1446
+ step(_dt, _t, env) {
1447
+ px = env.pointer?.x ?? -1e4;
1448
+ py = env.pointer?.y ?? -1e4;
1449
+ }
1450
+ };
1451
+ },
1452
+ id: "qingming",
1453
+ loose: "\u67F3\u4E1D\u9E22\u4E36",
1454
+ ramps: [["\u4E36", "\u51AB", "\u6C35", "\u96E8", "\u6E05", "\u660E", "\u9701", "\u972D"]],
1455
+ warm: 1
1456
+ };
1457
+ var guyu = {
1458
+ create({ glyph, rand }) {
1459
+ const petal = glyph("\u74E3");
1460
+ let blooms = pool(0);
1461
+ let petals = pool(0);
1462
+ let v = { cell: 16, height: 0, width: 0 };
1463
+ const open = (p, x, y, t) => {
1464
+ p.x = x;
1465
+ p.y = y;
1466
+ p.b = Math.min(v.width, v.height) * (0.16 + rand() * 0.1);
1467
+ p.a = t;
1468
+ p.vx = 5 + Math.floor(rand() * 2);
1469
+ p.vy = rand() * TAU;
1470
+ p.life = 1;
1471
+ };
1472
+ return {
1473
+ cell(x, y, t, out) {
1474
+ let val = 0.06 * fbm(x * 0.02, y * 0.01 - t * 0.3);
1475
+ let pig = INK;
1476
+ for (const b of blooms) {
1477
+ const age = t - b.a;
1478
+ const g = smoothstep(0, 4, age) * (1 - smoothstep(13, 16, age));
1479
+ if (g <= 0)
1480
+ continue;
1481
+ const dx = x - b.x;
1482
+ const dy = y - b.y;
1483
+ const d = Math.hypot(dx, dy);
1484
+ if (d > b.b * 1.05)
1485
+ continue;
1486
+ if (d < b.b * 0.13 * g) {
1487
+ val = 0.95;
1488
+ pig = ZHU;
1489
+ break;
1490
+ }
1491
+ const th = Math.atan2(dy, dx);
1492
+ const spin = b.vy + age * 0.06;
1493
+ const r1 = b.b * g * (0.55 + 0.45 * Math.abs(Math.cos(b.vx * th / 2 + spin)));
1494
+ const r2 = b.b * g * 0.62 * (0.6 + 0.4 * Math.abs(Math.cos(b.vx * th / 2 - spin * 1.5 + 0.6)));
1495
+ let w = 0;
1496
+ if (d < r1)
1497
+ w = 0.3 + 0.6 * smoothstep(r1 * 0.7, r1, d);
1498
+ if (d < r2)
1499
+ w = Math.max(w, 0.35 + 0.6 * smoothstep(r2 * 0.6, r2, d));
1500
+ if (w > val) {
1501
+ val = w;
1502
+ pig = YANZHI;
1503
+ }
1504
+ }
1505
+ out.v = val;
1506
+ out.p = pig;
1507
+ },
1508
+ drop(x, y, t) {
1509
+ let oldest = blooms[0];
1510
+ for (const b of blooms)
1511
+ if (oldest && b.a < oldest.a)
1512
+ oldest = b;
1513
+ if (oldest)
1514
+ open(oldest, x, y, t);
1515
+ },
1516
+ layout(view) {
1517
+ v = view;
1518
+ blooms = pool(3);
1519
+ petals = pool(40);
1520
+ blooms.forEach((b, i) => {
1521
+ open(b, v.width * (0.2 + 0.3 * i + rand() * 0.1), v.height * (0.35 + rand() * 0.3), -rand() * 5);
1522
+ });
1523
+ },
1524
+ stamps(_t, emit) {
1525
+ for (const p of petals)
1526
+ if (p.life > 0)
1527
+ emit(petal, p.x, p.y, p.life * 0.9, 0.8, YANZHI);
1528
+ },
1529
+ step(dt, t) {
1530
+ for (const b of blooms) {
1531
+ if (t - b.a > 16)
1532
+ open(b, v.width * (0.15 + rand() * 0.7), v.height * (0.25 + rand() * 0.5), t);
1533
+ if (t - b.a > 3 && rand() < dt * 2.5) {
1534
+ const p = spawn(petals);
1535
+ if (p && p.life <= 0) {
1536
+ p.life = 1;
1537
+ p.x = b.x + (rand() - 0.5) * b.b;
1538
+ p.y = b.y;
1539
+ p.vy = 20 + rand() * 20;
1540
+ p.b = rand() * TAU;
1541
+ }
1542
+ }
1543
+ }
1544
+ for (const p of petals) {
1545
+ if (p.life <= 0)
1546
+ continue;
1547
+ p.y += p.vy * dt;
1548
+ p.x += Math.sin(t + p.b) * 20 * dt;
1549
+ p.life -= dt * 0.12;
1550
+ if (p.y > v.height + 20)
1551
+ p.life = 0;
1552
+ }
1553
+ }
1554
+ };
1555
+ },
1556
+ id: "guyu",
1557
+ loose: "\u74E3",
1558
+ ramps: [["\u4E36", "\u535C", "\u8279", "\u82B1", "\u82B3", "\u8469", "\u854A", "\u7E41"]],
1559
+ warm: 4
1560
+ };
1561
+
1562
+ // node_modules/inkpond/dist/scenes/jieqi/summer.js
1563
+ var lixia = {
1564
+ create({ glyph, rand }) {
1565
+ const frog = glyph("\u86D9");
1566
+ const croak = glyph("\u5471");
1567
+ let frogs = pool(0);
1568
+ let rings = pool(0);
1569
+ let v = { cell: 16, height: 0, width: 0 };
1570
+ const call = (x, y, t) => {
1571
+ const r = spawn(rings);
1572
+ if (!r)
1573
+ return;
1574
+ r.life = 6;
1575
+ r.x = x;
1576
+ r.y = y;
1577
+ r.a = t;
1578
+ };
1579
+ return {
1580
+ cell(x, y, t, out) {
1581
+ let sum = 0;
1582
+ for (const r of rings) {
1583
+ if (r.life <= 0)
1584
+ continue;
1585
+ const age = t - r.a;
1586
+ const d = Math.hypot(x - r.x, y - r.y);
1587
+ const R = age * 90;
1588
+ if (d > R + 60)
1589
+ continue;
1590
+ sum += Math.cos((d - R) * 0.16) * ring(d, R - 30, 50) * Math.exp(-age * 0.55);
1591
+ }
1592
+ out.v = 0.06 + 0.06 * noise(x * 0.02, y * 0.02 + t * 0.2) + Math.max(0, sum) * 0.85;
1593
+ if (sum > 0.25)
1594
+ out.p = HUAQING;
1595
+ },
1596
+ drop(x, y, t) {
1597
+ call(x, y, t);
1598
+ },
1599
+ layout(view) {
1600
+ v = view;
1601
+ frogs = pool(5);
1602
+ rings = pool(22);
1603
+ for (const f of frogs) {
1604
+ f.x = v.width * (0.12 + rand() * 0.76);
1605
+ f.y = v.height * (0.18 + rand() * 0.64);
1606
+ f.a = rand() * 2;
1607
+ f.b = -9;
1608
+ }
1609
+ },
1610
+ stamps(t, emit) {
1611
+ for (const f of frogs) {
1612
+ const age = t - f.b;
1613
+ emit(frog, f.x, f.y, 0.95, age < 0.25 ? 1.5 : 1.3, INK);
1614
+ if (age < 0.5)
1615
+ emit(croak, f.x + 20, f.y - 20 - age * 30, 1 - age * 2, 0.8, ZHU);
1616
+ }
1617
+ },
1618
+ step(dt, t, env) {
1619
+ const p = env.pointer;
1620
+ for (const f of frogs) {
1621
+ if (p && Math.hypot(p.x - f.x, p.y - f.y) < 130)
1622
+ f.a = Math.min(f.a, f.b + 0.5);
1623
+ if (t > f.a) {
1624
+ call(f.x, f.y, t);
1625
+ f.b = t;
1626
+ f.a = t + 1.6 + rand() * 2.4;
1627
+ }
1628
+ }
1629
+ for (const r of rings)
1630
+ r.life -= dt;
1631
+ }
1632
+ };
1633
+ },
1634
+ id: "lixia",
1635
+ loose: "\u86D9\u5471",
1636
+ ramps: [["\u4E36", "\u4E00", "\u53E3", "\u53EB", "\u5471", "\u9E23", "\u566A", "\u56A3"]],
1637
+ warm: 4
1638
+ };
1639
+ var xiaoman = {
1640
+ create({ glyph, rand }) {
1641
+ const awn = glyph("\u8292");
1642
+ let chaff = pool(0);
1643
+ let v = { cell: 16, height: 0, width: 0 };
1644
+ let px = -1e4;
1645
+ let py = -1e4;
1646
+ return {
1647
+ cell(x, y, t, out) {
1648
+ const hz = v.height * 0.3 + Math.sin(x * 4e-3) * 10;
1649
+ if (y < hz) {
1650
+ out.v = 0.05 * fbm(x * 0.01 - t * 0.05, y * 0.03);
1651
+ return;
1652
+ }
1653
+ const f = (y - hz) / (v.height - hz);
1654
+ const wave = Math.sin(x * 0.022 - t * 1.7 + fbm(x * 4e-3, y * 0.012) * 2.5 + y * 0.012);
1655
+ let val = 0.12 + 0.1 * f + 0.6 * Math.max(0, wave) * (0.5 + f * 0.5);
1656
+ const d = Math.hypot(x - px, y - py);
1657
+ if (d < 140)
1658
+ val -= (1 - d / 140) * 0.45;
1659
+ out.v = val;
1660
+ out.wet = 0.5;
1661
+ if (wave > 0.45)
1662
+ out.p = ZHE;
1663
+ },
1664
+ layout(view) {
1665
+ v = view;
1666
+ chaff = pool(24);
1667
+ for (const c of chaff) {
1668
+ c.x = rand() * v.width;
1669
+ c.y = v.height * (0.3 + rand() * 0.6);
1670
+ c.b = rand() * TAU;
1671
+ }
1672
+ },
1673
+ stamps(_t, emit) {
1674
+ for (const c of chaff)
1675
+ emit(awn, c.x, c.y, 0.6, 0.6, ZHE);
1676
+ },
1677
+ step(dt, t, env) {
1678
+ px = env.pointer?.x ?? -1e4;
1679
+ py = env.pointer?.y ?? -1e4;
1680
+ for (const c of chaff) {
1681
+ c.x += (40 + Math.sin(t + c.b) * 20) * dt;
1682
+ c.y += Math.sin(t * 1.3 + c.b) * 12 * dt;
1683
+ if (c.x > v.width + 20) {
1684
+ c.x = -20;
1685
+ c.y = v.height * (0.3 + rand() * 0.6);
1686
+ }
1687
+ }
1688
+ }
1689
+ };
1690
+ },
1691
+ id: "xiaoman",
1692
+ loose: "\u8292",
1693
+ ramps: [["\u4E36", "\u79BE", "\u672A", "\u7C73", "\u9EA6", "\u79C0", "\u7A57", "\u7A70"]],
1694
+ warm: 1
1695
+ };
1696
+ var mangzhong = {
1697
+ create({ glyph, rand }) {
1698
+ const awn = glyph("\u8292");
1699
+ let needles = pool(0);
1700
+ let v = { cell: 16, height: 0, width: 0 };
1701
+ let front = 0;
1702
+ return {
1703
+ cell(x, y, t, out, cx, cy) {
1704
+ out.v = 0.06 + 0.1 * noise(x * 0.03, y * 0.03 + t * 0.25);
1705
+ if (y < v.height * 0.12)
1706
+ return;
1707
+ if (cx % 3 === 1 && cy % 2 === 1 && x < front - hash2(cx, cy) * 50) {
1708
+ out.v = 0.68 + 0.18 * Math.sin(t * 2.2 + cx * 0.4 + cy * 0.2);
1709
+ out.p = HUAQING;
1710
+ out.wet = 0.6;
1711
+ }
1712
+ if (Math.abs(x - front) < v.cell * 0.6) {
1713
+ out.v = 0.92;
1714
+ out.p = ZHU;
1715
+ }
1716
+ },
1717
+ drop(x) {
1718
+ front = x;
1719
+ },
1720
+ layout(view) {
1721
+ v = view;
1722
+ front = v.width * 0.2;
1723
+ needles = pool(30);
1724
+ },
1725
+ stamps(_t, emit) {
1726
+ for (const n of needles)
1727
+ if (n.life > 0)
1728
+ emit(awn, n.x, n.y, n.life * 0.8, 0.8, ZHE);
1729
+ },
1730
+ step(dt) {
1731
+ front += dt * 70;
1732
+ if (front > v.width + 160)
1733
+ front = -60;
1734
+ if (rand() < dt * 6) {
1735
+ const n = spawn(needles);
1736
+ if (n && n.life <= 0) {
1737
+ n.life = 1;
1738
+ n.x = rand() * v.width;
1739
+ n.y = -10;
1740
+ }
1741
+ }
1742
+ for (const n of needles) {
1743
+ if (n.life <= 0)
1744
+ continue;
1745
+ n.x += 160 * dt;
1746
+ n.y += 220 * dt;
1747
+ n.life -= dt * 0.5;
1748
+ }
1749
+ }
1750
+ };
1751
+ },
1752
+ id: "mangzhong",
1753
+ loose: "\u8292",
1754
+ ramps: [["\u4E36", "\u4E00", "\u6C35", "\u7530", "\u79BE", "\u79E7", "\u7A3B", "\u7A51"]],
1755
+ warm: 5
1756
+ };
1757
+ var xiazhi = {
1758
+ create() {
1759
+ let v = { cell: 16, height: 0, width: 0 };
1760
+ let sx = 0;
1761
+ let sy = 0;
1762
+ return {
1763
+ cell(x, y, t, out) {
1764
+ const hz = v.height * 0.8;
1765
+ if (y > hz) {
1766
+ const xs = x + Math.sin(y * 0.09 + t * 5) * 6;
1767
+ out.v = y < hz + v.cell ? 0.55 : 0.16 + 0.22 * fbm(xs * 0.03, y * 0.08 - t * 0.6);
1768
+ out.p = y < hz + v.cell ? INK : ZHE;
1769
+ out.wet = 0.4;
1770
+ return;
1771
+ }
1772
+ const dx = x - sx;
1773
+ const dy = y - sy;
1774
+ const d = Math.hypot(dx, dy);
1775
+ const R = Math.min(v.width, v.height) * 0.2;
1776
+ if (d < R) {
1777
+ out.v = 0.72 + 0.22 * fbm(x * 0.03 + t * 0.3, y * 0.03);
1778
+ out.p = ZHU;
1779
+ out.wet = 0.3;
1780
+ return;
1781
+ }
1782
+ const fall = Math.exp(-(d - R) / (R * 0.9));
1783
+ const ray = Math.abs(Math.cos(Math.atan2(dy, dx) * 12 + t * 0.25)) ** 6 * fall;
1784
+ const pulse = ring(d - R, t * 70 % (R * 2.2), 16) * fall;
1785
+ const val = ray * 0.55 + pulse * 0.6 + ring(d, R, 6) * 0.9;
1786
+ out.v = val;
1787
+ out.p = val > 0.22 ? ZHU : ZHE;
1788
+ },
1789
+ layout(view) {
1790
+ v = view;
1791
+ sx = v.width * 0.5;
1792
+ sy = v.height * 0.4;
1793
+ },
1794
+ stamps() {
1795
+ },
1796
+ step(dt, _t, env) {
1797
+ const p = env.pointer;
1798
+ const tx = p ? p.x : v.width * 0.5;
1799
+ const ty = p ? Math.min(p.y, v.height * 0.6) : v.height * 0.4;
1800
+ sx += (tx - sx) * Math.min(1, dt * 0.8);
1801
+ sy += (ty - sy) * Math.min(1, dt * 0.8);
1802
+ }
1803
+ };
1804
+ },
1805
+ id: "xiazhi",
1806
+ loose: "",
1807
+ ramps: [["\u4E36", "\u4E00", "\u65E5", "\u65E6", "\u660A", "\u708E", "\u7131", "\u66DC"]],
1808
+ warm: 1
1809
+ };
1810
+ var xiaoshu = {
1811
+ create({ glyph }) {
1812
+ const cicada = glyph("\u8749");
1813
+ const call = glyph("\u9E23");
1814
+ const perches = [0.25, 0.55, 0.8];
1815
+ let v = { cell: 16, height: 0, width: 0 };
1816
+ let px = -1e4;
1817
+ let py = -1e4;
1818
+ return {
1819
+ cell(x, y, t, out) {
1820
+ const X = x + Math.sin(y * 0.015 + t * 1.2) * 18;
1821
+ const q = fbm(X * 0.012, (y + t * 45) * 0.012);
1822
+ let plume = smoothstep(0.42, 0.75, q) * (0.3 + 0.7 * (y / v.height));
1823
+ const d = Math.hypot(x - px, y - py);
1824
+ if (d < 160)
1825
+ plume *= d / 160;
1826
+ out.v = 0.04 + plume * 0.95;
1827
+ out.p = plume > 0.5 ? ZHU : ZHE;
1828
+ },
1829
+ layout(view) {
1830
+ v = view;
1831
+ },
1832
+ stamps(t, emit) {
1833
+ perches.forEach((f, i) => {
1834
+ const x = 30 + i % 2 * 16;
1835
+ const y = v.height * f;
1836
+ emit(cicada, x, y, 0.95, 1.2, INK);
1837
+ for (let k = 0; k < 3; k++) {
1838
+ const ph = (t * 70 + k * 55 + i * 30) % 165;
1839
+ emit(call, x + 26 + ph, y, (1 - ph / 165) * 0.8, 0.7 + ph / 330, INK);
1840
+ }
1841
+ });
1842
+ },
1843
+ step(_dt, _t, env) {
1844
+ px = env.pointer?.x ?? -1e4;
1845
+ py = env.pointer?.y ?? -1e4;
1846
+ }
1847
+ };
1848
+ },
1849
+ id: "xiaoshu",
1850
+ loose: "\u8749\u9E23",
1851
+ ramps: [["\u4E36", "\u706B", "\u706C", "\u70ED", "\u70D8", "\u7116", "\u71E0", "\u7207"]],
1852
+ warm: 1
1853
+ };
1854
+ var dashu = {
1855
+ create({ glyph, rand }) {
1856
+ const fly = glyph("\u8424");
1857
+ const dot = glyph("\u4E36");
1858
+ const TRAIL = 7;
1859
+ let flies = pool(0);
1860
+ let trails = new Float32Array(0);
1861
+ let v = { cell: 16, height: 0, width: 0 };
1862
+ let tick = 0;
1863
+ let head = 0;
1864
+ return {
1865
+ cell(x, y, t, out) {
1866
+ const top = v.height * 0.55 + 40 * noise(x * 0.015, 1);
1867
+ if (y <= top) {
1868
+ out.v = 0.03;
1869
+ return;
1870
+ }
1871
+ const blade = Math.abs(Math.sin(x * 0.11 + noise(x * 0.05, 4) * 6)) ** 2;
1872
+ out.v = smoothstep(top, v.height, y) * (0.45 + 0.4 * blade) + 0.12 * fbm(x * 0.04 + t * 0.1, y * 0.03);
1873
+ out.wet = 0.4;
1874
+ },
1875
+ layout(view) {
1876
+ v = view;
1877
+ flies = pool(30);
1878
+ trails = new Float32Array(30 * TRAIL * 2);
1879
+ for (const [i, f] of flies.entries()) {
1880
+ f.x = rand() * v.width;
1881
+ f.y = v.height * (0.2 + rand() * 0.7);
1882
+ f.b = rand() * TAU;
1883
+ f.a = i * 3.1;
1884
+ for (let k = 0; k < TRAIL; k++) {
1885
+ trails[(i * TRAIL + k) * 2] = f.x;
1886
+ trails[(i * TRAIL + k) * 2 + 1] = f.y;
1887
+ }
1888
+ }
1889
+ },
1890
+ stamps(t, emit) {
1891
+ flies.forEach((f, i) => {
1892
+ const glow = 0.5 + 0.5 * Math.sin(t * 2.6 + f.b);
1893
+ for (let k = 1; k < TRAIL; k++) {
1894
+ const j = (head + k) % TRAIL;
1895
+ emit(dot, trails[(i * TRAIL + j) * 2] ?? 0, trails[(i * TRAIL + j) * 2 + 1] ?? 0, glow * 0.45 * (k / TRAIL), 0.6, ZHE);
1896
+ }
1897
+ emit(fly, f.x, f.y, 0.3 + 0.7 * glow, 0.65 + glow * 0.3, ZHE);
1898
+ });
1899
+ },
1900
+ step(dt, t, env) {
1901
+ const p = env.pointer;
1902
+ for (const f of flies) {
1903
+ const ang = noise(f.x * 4e-3 + f.a, t * 0.15) * TAU * 2;
1904
+ let ax = Math.cos(ang) * 60;
1905
+ let ay = Math.sin(ang) * 60;
1906
+ if (p) {
1907
+ ax += (p.x - f.x) * 0.9;
1908
+ ay += (p.y - f.y) * 0.9;
1909
+ }
1910
+ f.vx = (f.vx + ax * dt) * 0.97;
1911
+ f.vy = (f.vy + ay * dt) * 0.97;
1912
+ const sp = Math.hypot(f.vx, f.vy);
1913
+ if (sp > 70) {
1914
+ f.vx *= 70 / sp;
1915
+ f.vy *= 70 / sp;
1916
+ }
1917
+ f.x += f.vx * dt;
1918
+ f.y += f.vy * dt;
1919
+ if (f.x < -10)
1920
+ f.x = v.width + 10;
1921
+ if (f.x > v.width + 10)
1922
+ f.x = -10;
1923
+ if (f.y < v.height * 0.08)
1924
+ f.vy += 200 * dt;
1925
+ if (f.y > v.height - 10)
1926
+ f.vy -= 200 * dt;
1927
+ }
1928
+ tick += dt;
1929
+ if (tick < 0.09)
1930
+ return;
1931
+ tick = 0;
1932
+ head = (head + 1) % TRAIL;
1933
+ flies.forEach((f, i) => {
1934
+ trails[(i * TRAIL + head) * 2] = f.x;
1935
+ trails[(i * TRAIL + head) * 2 + 1] = f.y;
1936
+ });
1937
+ }
1938
+ };
1939
+ },
1940
+ id: "dashu",
1941
+ loose: "\u8424\u4E36",
1942
+ ramps: [["\u4E36", "\u8279", "\u8349", "\u8305", "\u83BD", "\u840B", "\u8473", "\u8564"]],
1943
+ warm: 2
1944
+ };
1945
+
1946
+ // node_modules/inkpond/dist/scenes/jieqi/winter.js
1947
+ var lidong = {
1948
+ create({ rand }) {
1949
+ let sources = pool(0);
1950
+ let v = { cell: 16, height: 0, width: 0 };
1951
+ let phase = 0;
1952
+ let freeze = 0;
1953
+ let crack = 0;
1954
+ let count = 3;
1955
+ return {
1956
+ cell(x, y, _t, out) {
1957
+ let w = 0;
1958
+ for (const s of sources) {
1959
+ if (s.life <= 0)
1960
+ continue;
1961
+ const d = Math.hypot(x - s.x, y - s.y);
1962
+ w += Math.sin(d * 0.06 - phase) / (1 + d * 4e-3);
1963
+ }
1964
+ w = Math.max(0, Math.min(1, 0.5 + w / count));
1965
+ out.v = 0.02 + 0.88 * w ** 2.5;
1966
+ if (freeze > 0.5) {
1967
+ out.k = 1;
1968
+ out.p = HUAQING;
1969
+ out.wet = 0.3;
1970
+ }
1971
+ if (crack > 0 && Math.abs(noise(x * 0.02, y * 0.02) - 0.5) < 0.02 * crack) {
1972
+ out.v = 0.95;
1973
+ out.p = INK;
1974
+ }
1975
+ },
1976
+ drop(x, y) {
1977
+ const s = spawn(sources);
1978
+ if (!s)
1979
+ return;
1980
+ s.life = 1 + rand();
1981
+ s.x = x;
1982
+ s.y = y;
1983
+ },
1984
+ layout(view) {
1985
+ v = view;
1986
+ sources = pool(5);
1987
+ const at = [
1988
+ [0.3, 0.4],
1989
+ [0.7, 0.6],
1990
+ [0.5, 0.15]
1991
+ ];
1992
+ at.forEach(([fx = 0, fy = 0], i) => {
1993
+ const s = sources[i];
1994
+ if (!s)
1995
+ return;
1996
+ s.life = 1;
1997
+ s.x = fx * v.width;
1998
+ s.y = fy * v.height;
1999
+ });
2000
+ },
2001
+ stamps() {
2002
+ },
2003
+ step(dt, t) {
2004
+ const c = t % 18 / 18;
2005
+ freeze = smoothstep(0.15, 0.65, c) * (1 - smoothstep(0.9, 1, c));
2006
+ crack = smoothstep(0.62, 0.85, c) * (1 - smoothstep(0.9, 1, c));
2007
+ phase += dt * 3.2 * (1 - freeze);
2008
+ count = 0;
2009
+ for (const s of sources)
2010
+ if (s.life > 0)
2011
+ count++;
2012
+ count = Math.max(1, count);
2013
+ }
2014
+ };
2015
+ },
2016
+ id: "lidong",
2017
+ loose: "",
2018
+ ramps: [WATER, ["\u4E36", "\u51AB", "\u51AB", "\u51B1", "\u51B0", "\u51BB", "\u51CC", "\u51DB"]],
2019
+ warm: 1
2020
+ };
2021
+ var xiaoxue = {
2022
+ create({ glyph, rand }) {
2023
+ const snow = glyph("\u96EA");
2024
+ const dot = glyph("\u4E36");
2025
+ let flakes = pool(0);
2026
+ let v = { cell: 16, height: 0, width: 0 };
2027
+ return {
2028
+ cell(x, y, t, out) {
2029
+ out.v = smoothstep(v.height - 30 - 14 * noise(x * 0.01, 0), v.height, y) * 0.6 + 0.04 * fbm(x * 0.01, y * 0.01 + t * 0.03);
2030
+ },
2031
+ layout(view) {
2032
+ v = view;
2033
+ flakes = pool(70);
2034
+ for (const f of flakes) {
2035
+ f.x = rand() * v.width;
2036
+ f.y = rand() * v.height;
2037
+ f.a = rand();
2038
+ f.b = rand() * TAU;
2039
+ }
2040
+ },
2041
+ stamps(t, emit) {
2042
+ for (const f of flakes) {
2043
+ emit(f.a > 0.35 ? snow : dot, f.x, f.y + Math.sin(t + f.b) * 2, 0.3 + 0.6 * f.a, 0.45 + f.a * 0.8, INK);
2044
+ }
2045
+ },
2046
+ step(dt, t, env) {
2047
+ const p = env.pointer;
2048
+ for (const f of flakes) {
2049
+ f.y += (10 + f.a * 26) * dt;
2050
+ f.x += (Math.sin(t * 0.6 + f.b) * 10 * (0.4 + f.a) + f.vx) * dt;
2051
+ f.vx *= 0.96;
2052
+ if (p) {
2053
+ const dx = f.x - p.x;
2054
+ const dy = f.y - p.y;
2055
+ const d = Math.hypot(dx, dy);
2056
+ if (d < 110 && d > 0) {
2057
+ f.vx += dx / d * 400 * dt;
2058
+ f.y += dy / d * 40 * dt;
2059
+ }
2060
+ }
2061
+ if (f.y > v.height + 10) {
2062
+ f.y = -10;
2063
+ f.x = rand() * v.width;
2064
+ }
2065
+ if (f.x < -20)
2066
+ f.x = v.width + 10;
2067
+ if (f.x > v.width + 20)
2068
+ f.x = -10;
2069
+ }
2070
+ }
2071
+ };
2072
+ },
2073
+ id: "xiaoxue",
2074
+ loose: "\u96EA\u4E36",
2075
+ ramps: [["\u4E36", "\u4E00", "\u4E8C", "\u51AB", "\u96EA", "\u970F", "\u9701", "\u7691"]],
2076
+ warm: 1
2077
+ };
2078
+ var daxue = {
2079
+ create({ glyph, rand }) {
2080
+ const snow = glyph("\u96EA");
2081
+ const dot = glyph("\u4E36");
2082
+ let flakes = pool(0);
2083
+ let bank = new Float32Array(0);
2084
+ let v = { cell: 16, height: 0, width: 0 };
2085
+ let wind = 120;
2086
+ return {
2087
+ cell(x, y, t, out, cx) {
2088
+ const h = bank[cx + 1] ?? 0;
2089
+ if (y > v.height - h) {
2090
+ out.v = 0.45 + 0.35 * fbm(x * 0.03, y * 0.04);
2091
+ out.wet = 0.3;
2092
+ return;
2093
+ }
2094
+ out.v = 0.08 * fbm(x * 0.01 - t * wind * 2e-3, y * 0.012);
2095
+ },
2096
+ layout(view) {
2097
+ v = view;
2098
+ bank = new Float32Array(Math.ceil(v.width / v.cell) + 3);
2099
+ flakes = pool(150);
2100
+ for (const f of flakes) {
2101
+ f.x = rand() * v.width;
2102
+ f.y = rand() * v.height;
2103
+ f.a = rand();
2104
+ }
2105
+ },
2106
+ stamps(_t, emit) {
2107
+ for (const f of flakes) {
2108
+ emit(f.a > 0.6 ? snow : dot, f.x, f.y, 0.3 + 0.6 * f.a, 0.45 + f.a * 0.65, INK);
2109
+ }
2110
+ },
2111
+ step(dt, t, env) {
2112
+ const target = env.pointer ? (env.pointer.x / v.width - 0.5) * 520 : 140 * Math.sin(t * 0.2) + 60;
2113
+ wind += (target - wind) * Math.min(1, dt * 1.5);
2114
+ for (const f of flakes) {
2115
+ f.x += wind * (0.5 + f.a) * dt;
2116
+ f.y += (110 + f.a * 90) * dt;
2117
+ const c = Math.max(0, Math.min(bank.length - 1, Math.floor(f.x / v.cell) + 1));
2118
+ if (f.y > v.height - (bank[c] ?? 0)) {
2119
+ if (f.x > 0 && f.x < v.width)
2120
+ bank[c] = (bank[c] ?? 0) + 0.9;
2121
+ f.y = -10;
2122
+ f.x = rand() * (v.width + 400) - 200;
2123
+ }
2124
+ if (f.x > v.width + 220)
2125
+ f.x -= v.width + 420;
2126
+ if (f.x < -220)
2127
+ f.x += v.width + 420;
2128
+ }
2129
+ let top = 0;
2130
+ for (let k = 1; k < bank.length - 1; k++) {
2131
+ const h = bank[k] ?? 0;
2132
+ const avg = ((bank[k - 1] ?? 0) + (bank[k + 1] ?? 0)) / 2;
2133
+ bank[k] = h + (avg - h) * dt * 0.8;
2134
+ top = Math.max(top, bank[k] ?? 0);
2135
+ }
2136
+ if (top > v.height * 0.42)
2137
+ bank.fill(0);
2138
+ }
2139
+ };
2140
+ },
2141
+ id: "daxue",
2142
+ loose: "\u96EA\u4E36",
2143
+ ramps: [["\u4E36", "\u51AB", "\u4E8C", "\u96EA", "\u970F", "\u7691", "\u9730", "\u51DB"]],
2144
+ warm: 8
2145
+ };
2146
+ var dongzhi = {
2147
+ create({ glyph }) {
2148
+ const sun = glyph("\u9633");
2149
+ const plum = glyph("\u6885");
2150
+ const dot = glyph("\u4E36");
2151
+ let v = { cell: 16, height: 0, width: 0 };
2152
+ let px = 0;
2153
+ let py = 0;
2154
+ let days = 0;
2155
+ return {
2156
+ cell(x, y, t, out) {
2157
+ const d = Math.hypot(x - px, y - py);
2158
+ const R = t * 80 % (Math.max(v.width, v.height) * 1.1);
2159
+ let val = 0.72 * smoothstep(0.42, 0.78, fbm(x * 9e-3 + t * 0.02, y * 9e-3)) - ring(d, R, 60) * 0.45;
2160
+ const glow = 1 - d / 90;
2161
+ if (glow > 0) {
2162
+ val = val * (1 - glow) + 0.6 * glow;
2163
+ if (glow > 0.3)
2164
+ out.p = ZHU;
2165
+ }
2166
+ if (ring(d, R, 8) > 0.4) {
2167
+ val = Math.max(val, 0.7);
2168
+ out.p = ZHU;
2169
+ }
2170
+ out.v = val;
2171
+ },
2172
+ layout(view) {
2173
+ v = view;
2174
+ px = v.width / 2;
2175
+ py = v.height / 2;
2176
+ },
2177
+ stamps(t, emit) {
2178
+ const R = Math.min(v.width, v.height) * 0.4;
2179
+ const fit = Math.min(1, TAU * R / 81 / (v.cell * 1.25 * 0.8));
2180
+ for (let i = 0; i < 81; i++) {
2181
+ const a = -Math.PI / 2 + i / 81 * TAU;
2182
+ const on = i < days;
2183
+ emit(on ? plum : dot, v.width / 2 + Math.cos(a) * R, v.height / 2 + Math.sin(a) * R, on ? 0.95 : 0.45, (on ? 0.8 : 0.5) * fit, on ? ZHU : INK);
2184
+ }
2185
+ emit(sun, px, py, 1, 1.3 + 0.15 * Math.sin(t * 3), ZHU);
2186
+ },
2187
+ step(dt, t, env) {
2188
+ const p = env.pointer;
2189
+ px += ((p ? p.x : v.width / 2) - px) * Math.min(1, dt * 2);
2190
+ py += ((p ? p.y : v.height / 2) - py) * Math.min(1, dt * 2);
2191
+ days = Math.min(81, Math.floor(t * 3 % 96));
2192
+ }
2193
+ };
2194
+ },
2195
+ id: "dongzhi",
2196
+ loose: "\u9633\u6885\u4E36",
2197
+ ramps: [["\u4E36", "\u4E00", "\u51AB", "\u51AC", "\u591C", "\u7384", "\u51A5", "\u9EEF"]],
2198
+ warm: 6
2199
+ };
2200
+ var xiaohan = {
2201
+ create({ glyph, rand }) {
2202
+ const plum = glyph("\u6885");
2203
+ const MAX_SEGS = 600;
2204
+ const segs = new Float32Array(MAX_SEGS * 7);
2205
+ const tips = new Float32Array(MAX_SEGS * 3);
2206
+ let nSegs = 0;
2207
+ let nTips = 0;
2208
+ let bursts = pool(0);
2209
+ let birth = new Float32Array(0);
2210
+ let depthAt = new Uint8Array(0);
2211
+ let mapCols = 0;
2212
+ let v = { cell: 16, height: 0, width: 0 };
2213
+ let t0 = 0;
2214
+ const tip = (x, y, at) => {
2215
+ if (nTips >= MAX_SEGS)
2216
+ return;
2217
+ tips[nTips * 3] = x;
2218
+ tips[nTips * 3 + 1] = y;
2219
+ tips[nTips * 3 + 2] = at;
2220
+ nTips++;
2221
+ };
2222
+ const grow = (x, y, a, len, depth, at) => {
2223
+ if (nSegs >= MAX_SEGS)
2224
+ return;
2225
+ const x1 = x + Math.cos(a) * len;
2226
+ const y1 = y + Math.sin(a) * len;
2227
+ const dur = len / 110;
2228
+ segs.set([x, y, x1, y1, at, dur, depth], nSegs * 7);
2229
+ nSegs++;
2230
+ const step = v.cell * 0.5;
2231
+ for (let s = 0; s <= len; s += step) {
2232
+ const f = s / len;
2233
+ const cx = Math.floor((x + (x1 - x) * f) / v.cell) + 1;
2234
+ const cy = Math.floor((y + (y1 - y) * f) / v.cell) + 1;
2235
+ if (cx < 0 || cy < 0 || cx >= mapCols)
2236
+ continue;
2237
+ const i = cy * mapCols + cx;
2238
+ if (i >= birth.length)
2239
+ continue;
2240
+ const when = at + dur * f;
2241
+ if (when < (birth[i] ?? Number.POSITIVE_INFINITY)) {
2242
+ birth[i] = when;
2243
+ depthAt[i] = depth;
2244
+ }
2245
+ }
2246
+ if (depth >= 5 || len < 16) {
2247
+ tip(x1, y1, at + dur);
2248
+ return;
2249
+ }
2250
+ const n = rand() < 0.2 ? 3 : 2;
2251
+ for (let k = 0; k < n; k++) {
2252
+ grow(x1, y1, a + (k - (n - 1) / 2) * (0.5 + rand() * 0.4) + (rand() - 0.5) * 0.3, len * (0.66 + rand() * 0.12), depth + 1, at + dur);
2253
+ }
2254
+ if (depth > 1 && rand() < 0.5)
2255
+ tip(x1, y1, at + dur + 0.4);
2256
+ };
2257
+ const reset = (t) => {
2258
+ t0 = t;
2259
+ nSegs = 0;
2260
+ nTips = 0;
2261
+ birth.fill(Number.POSITIVE_INFINITY);
2262
+ grow(v.width * 0.1, v.height, -Math.PI / 2 + 0.35, v.height * 0.24, 0, 0);
2263
+ grow(v.width * 0.92, v.height, -Math.PI / 2 - 0.4, v.height * 0.18, 0, 1.2);
2264
+ };
2265
+ return {
2266
+ cell(x, y, t, out, cx, cy) {
2267
+ const i = (cy + 1) * mapCols + cx + 1;
2268
+ const when = birth[i] ?? Number.POSITIVE_INFINITY;
2269
+ if (t - t0 >= when) {
2270
+ out.v = 0.9 - (depthAt[i] ?? 0) * 0.08;
2271
+ out.k = 1;
2272
+ out.wet = 0.2;
2273
+ return;
2274
+ }
2275
+ out.v = smoothstep(v.height - 22, v.height, y) * 0.45 + 0.05 * fbm(x * 0.01, y * 0.01 - t * 0.05);
2276
+ },
2277
+ drop(x, y) {
2278
+ for (let k = 0; k < 6; k++) {
2279
+ const b = spawn(bursts);
2280
+ if (!b)
2281
+ return;
2282
+ const a = k / 6 * TAU + rand();
2283
+ b.life = 4;
2284
+ b.x = x + Math.cos(a) * 26;
2285
+ b.y = y + Math.sin(a) * 26;
2286
+ }
2287
+ },
2288
+ layout(view) {
2289
+ v = view;
2290
+ mapCols = Math.ceil(v.width / v.cell) + 2;
2291
+ const n = mapCols * (Math.ceil(v.height / v.cell) + 2);
2292
+ birth = new Float32Array(n);
2293
+ depthAt = new Uint8Array(n);
2294
+ bursts = pool(18);
2295
+ reset(0);
2296
+ },
2297
+ stamps(t, emit) {
2298
+ const T = t - t0;
2299
+ for (let k = 0; k < nTips; k++) {
2300
+ const age = T - (tips[k * 3 + 2] ?? 0);
2301
+ if (age <= 0)
2302
+ continue;
2303
+ emit(plum, tips[k * 3] ?? 0, tips[k * 3 + 1] ?? 0, 0.95, smoothstep(0, 0.6, age) * 0.95, k % 3 ? YANZHI : ZHU);
2304
+ }
2305
+ for (const b of bursts) {
2306
+ if (b.life > 0)
2307
+ emit(plum, b.x, b.y, Math.min(1, b.life), smoothstep(4, 3.4, b.life) * 0.95, YANZHI);
2308
+ }
2309
+ },
2310
+ step(dt, t) {
2311
+ for (const b of bursts)
2312
+ b.life -= dt;
2313
+ if (t - t0 > 15)
2314
+ reset(t);
2315
+ }
2316
+ };
2317
+ },
2318
+ id: "xiaohan",
2319
+ loose: "\u6885",
2320
+ ramps: [
2321
+ ["\u4E36", "\u4E00", "\u4E8C", "\u51AB", "\u5BD2", "\u51DB", "\u51BD", "\u51DD"],
2322
+ ["\u4E36", "\u4E28", "\u6728", "\u679D", "\u6748", "\u6792", "\u67EF", "\u5E72"]
2323
+ ],
2324
+ warm: 9
2325
+ };
2326
+ var dahan = {
2327
+ create({ glyph, rand }) {
2328
+ const fire = glyph("\u706B");
2329
+ const star = glyph("\u661F");
2330
+ let bursts = pool(0);
2331
+ let parts = pool(0);
2332
+ let v = { cell: 16, height: 0, width: 0 };
2333
+ let next = 0.5;
2334
+ const burst = (x, y, t) => {
2335
+ const b = spawn(bursts);
2336
+ if (b) {
2337
+ b.life = 1.4;
2338
+ b.x = x;
2339
+ b.y = y;
2340
+ b.a = t;
2341
+ }
2342
+ for (let i = 0; i < 40; i++) {
2343
+ const p = spawn(parts);
2344
+ if (!p)
2345
+ return;
2346
+ const a = i / 40 * TAU + rand() * 0.1;
2347
+ const speed = 90 + rand() * 150;
2348
+ p.life = 1;
2349
+ p.x = x;
2350
+ p.y = y;
2351
+ p.vx = Math.cos(a) * speed;
2352
+ p.vy = Math.sin(a) * speed;
2353
+ p.b = i;
2354
+ }
2355
+ };
2356
+ return {
2357
+ cell(x, y, t, out) {
2358
+ let val = 0.06 + 0.32 * smoothstep(0.38, 0.75, fbm(x * 0.012, y * 0.012));
2359
+ out.wet = 0.4;
2360
+ if (Math.abs(noise(x * 0.015, y * 0.015) - 0.5) < 0.016)
2361
+ val = 0.7;
2362
+ for (const b of bursts) {
2363
+ if (b.life <= 0)
2364
+ continue;
2365
+ const age = t - b.a;
2366
+ const f = ring(Math.hypot(x - b.x, y - b.y), age * 120, 34) * (1 - age / 1.4);
2367
+ if (f > 0.15) {
2368
+ val = val * (1 - f) + f * 0.8;
2369
+ out.p = ZHU;
2370
+ }
2371
+ }
2372
+ out.v = val;
2373
+ },
2374
+ drop(x, y, t) {
2375
+ burst(x, y, t);
2376
+ },
2377
+ layout(view) {
2378
+ v = view;
2379
+ bursts = pool(4);
2380
+ parts = pool(240);
2381
+ next = 0.5;
2382
+ },
2383
+ stamps(_t, emit) {
2384
+ for (const p of parts) {
2385
+ if (p.life <= 0)
2386
+ continue;
2387
+ emit(p.b % 3 ? fire : star, p.x, p.y, p.life, 0.5 + p.life * 0.45, p.b % 2 ? ZHU : ZHE);
2388
+ }
2389
+ },
2390
+ step(dt, t) {
2391
+ if (t > next) {
2392
+ burst(v.width * (0.15 + rand() * 0.7), v.height * (0.15 + rand() * 0.45), t);
2393
+ next = t + 0.9 + rand() * 1.4;
2394
+ }
2395
+ for (const b of bursts)
2396
+ b.life -= dt;
2397
+ for (const p of parts) {
2398
+ if (p.life <= 0)
2399
+ continue;
2400
+ p.vx *= 0.97;
2401
+ p.vy = p.vy * 0.97 + 70 * dt;
2402
+ p.x += p.vx * dt;
2403
+ p.y += p.vy * dt;
2404
+ p.life -= dt * 0.6;
2405
+ }
2406
+ }
2407
+ };
2408
+ },
2409
+ id: "dahan",
2410
+ loose: "\u706B\u661F",
2411
+ ramps: [["\u4E36", "\u51AB", "\u51B0", "\u51BB", "\u51DB", "\u5BD2", "\u51DD", "\u51BD"]],
2412
+ warm: 3
2413
+ };
2414
+
2415
+ // node_modules/inkpond/dist/scenes/jieqi/index.js
2416
+ var JIEQI_FONT_FAMILY = "Inkpond Glyphs Jieqi";
2417
+ var JIEQI_FONT_URL = "data:font/woff2;base64,d09GMk9UVE8AAHVoAA4AAAAAnjAAAHUVAAIAxAAAAAAAAAAAAAAAAAAAAAAAAAAADYKYMhsgHEgGYA4IAId8ATYCJAOCBgQGBZMMByAXJBiCBhs5nVEEGwcI3mw4O4qyyGoRlayjKP443BjDALTqC6tgGyQpCQw7CqaNMDvdSLPtDQVJHZzdZRbGxV2R+6kaQt65jS7fnzwpGBvnLXSqi74zcJyPmjtAa/PiLz4LPpOnnsiWiBQQMQBtFAwqjZyBydCFjRUze5Xoyvns6qsPaaaG3R73kr0af7i2xYfFBxBJd84QX3bOAWSyz6fTqv5mDlq/l1Gxyx0QGwJmlGSQbF5JxmQJbT4CqhgroOo6FXM8/P+Yu+//mYWyLFrK8kJ0xEInQ0yijQYJSvXK4e9/s7fOrQkdqPun+aeLxVbEI6xBxIAYmoSobLL+zkxT8f//f83+vxryde6zjNtcjZgRs1biQCEe1Isy8NdBy7ESB0+ciCIaJyatvvbJ3HXPf6fff7k72vcd6Uws3SwDFNJLJQ6hHSBwCJqUaInAT/JCyW6sgfx2o1axJ5JJmvU/bWZtdwNzXRkzJeBRohCvqJLZl5eOiBIgSVfsrPf1o+jhRvv++v/8753/V8Jc++u+r5lBrqRmUMcr4qFuaakrFSM5Ci1JoCEElSpuQR+lrnPvMXf+Dzf7/zYz34zzZ8WtfStmXbGuQLtiFRISCLBLJrSFVA2zp6q3ey7v+/9Pc//WMvfUJF3nlS744oLJTMwIiaOZKFGiWPD3RdQ3XfM637v5//+M0/n46XoJZ609x/xu0yumx2Sb1gQo1thYJnEgAW+hUN8m11T4iP/f9JudWbprTbU5ZyVCIzwonf/eSzbv38wWxUlmuxtKKVuzH7qqEoVEokprqlqE8WiL0Zb/X1Xf9T5A8nnQ9Gj9JE9Og5yGdP529v+njKMEgP+ARTQNuiiApCik7SMBrqSlI4OW0sowZcxY6jDSgAtEuVCPkWOTroD1C3jknA+muo9/9Mky/WzJln2ufViXwFdy9f3oYfEPqhLJOHbZa/px1/hrehnT9eHJMBgJJBC5N3X3PFlRDg9Jppt8f6s3t6XWyWBE5CEiIvIZ9nBJ2QFESAC4v4gXbhuuY4sD5gFX9RkRI7r9e7t/2PRhc+diyYct4J8h6M8Q/Oc6wl2nv82PHyED6GiExQB8+r8RnfuD/uFvirr17HUdSvzjHCYwN0CUtv+k9keByzhOJ7w26WeT2asZI/O4c6C1wFrDY+uJ3TjDLgjT4b85k0xvL8bC/+d5oHQJUSHk+S+u2RN+U8gWU47XNihVRwE/ytPf3ZlBZFelO3vkag8jojTGtO76rD7u40XJaSb/73sfAEDdS5QT+xJe4pvEGrlD/kP+S4EUTPGo9VSCIqgMxVOj1GXmALuQPcVuSoVk/ewHubncOS7Aqa3prkZrKq+CH1eExeaiWPzCdyKz9GL8GhvYlE9hIZr/q7AqP1V3MeUbL+y8sq7fU/sHT9Lzf2ioV+d9beSBiBr52Ldf1PFYPfZ54KrYQPL7SH/0dsGafnHsTfXI9Mz0qnQ+/5f6T/3/ZfTPoCsP5g412tXLiT/JryjeLP9c8ZEyp/pb2RLV+6r/1tRULtM/rc8YXjQ05f+vTldvpWx14P67e0nalI6kZ+vd+nr96qpwpt+Z4/Xvjld+/dXO4B/YZAYgAACAAXQ4mQAQTB4cWAQt8BFkhXPwLUIkMojSmIq/GwqA+k9/kHv+Vfr3//vnkv/67u//+m/JO2/+EfDe9P+Lzvzy3yv+ujO7m9/4z//8LTDvfsvf/l5YsOEfv4vnt5YOUQ+9MjyobGLHXeWTO10cdXZ065jusZ+Nq53w14WnJy5f9P3eVyb/tN/c5T0zlLOWrT4/e/ra/1n3f+sr5//sddHg62PLFptPhB0vt6c7nV0n7vm6+/R9nfu+6g33cf3i4NmfKMoRBx43Bc2vu163lexHBt7hiDtdLqP7ruCN4T/z9okcivo72Az3RS6N708Q0/9V9U6tS/1RPTj9rfhCks5+UHky83fLlvxMUV36sXyYakLxwJJvVA+o7ZpT7xHE++ko9zS95y2F5jT1DkJjrcIVGPzFUaPN45h5txP/aMR0CdQ2CQl6U9Np+Kv2pZsteRNO4B+R5InL4X/qUVLsGlY14xfGqg1KkCEOnuHx2cz3n7u9PUAgSvW8Xx0Xx9YLjBATydIBos43/KiqMZI/h+IX5lT1I+oPksm49rvxF02i0QhYTuQGRVtiniUM5ZdvVID84fvQ6uUqAe48rAfjttNWmJx+lKIhoW/0IEXWk6zGe07dsuhjZ/bsuxv0ntogGPG+zTggTXw28L0tgPgM4s8WlgP7r7m95LoWcIsGQs2tJHJE3hI1kaoVN1x00C/eKAPpg4Vr6QkGBJaaXeZ/RCOYJ1XUoXgr7AZmigkEupfO8SmlTz8SpDZMRX4d0Qc9iM/zMrklwoUvRGobJf6Piipp2Eft68d+2Puel5WeYUNOvKEHRiM+7Fht8ZPB9wRxdXaaB4zgX6DBSomeMD4BjUz3dtYTwryL8ucP3MEf3jffD0seYzVPMtaLQP5SEsnWft39rUE09uhVZhUvTKNedXdxwFiT66G2UkyKo0iw0DG9/Kco1XOq+Q7vQqAgKCG6SOvG9Qs7oRrd/pLfbw//47UQK3OWChOBBeo+VWrlfHrEEsG7Dh62TmwlkjueJdJPXhD0udlB/lr1GjJy9ow/Ar3KMnd48GqwDgG1oV9DJa8YB4rVr/OkWaMKZoDZKpSHKXjr+lYU3/dZIsPo5ED7f4NeS3qCBbGNN794MlagWQ+1cj8O+rOVZrkAPO3li9lvgkhA+Qm5WzXuaAht3SsbQcOTdIXgHS850AsvgMqWOT9VBKTI++mEuevKwpG1sQRpdzQLiyCyY5wjA8B7rE0SblNi7TGXQJrTRwRgXX8LmnM9Z2Lu9/gXWdVNxQF9E+aiFk8xbSdqo+wRUqAnMcbpI8GW3p7qVRlWfzRALV4F1oYFu7bFdVffTq27wHlslnEjl79y/cjzJK/ibHOcVvUdokq9/nj4WOsG/NroQIQPrQSBkfUFyyr+KvxMmY7is9gYrH5ZQpA7hJUVfM4VetBRk0byB7UPmfmtNsTC01lGE06jcd74qmk1wF40KlSCBwNAY7rdzD1UIwvf3VF8U9ambmrKK7YWuRcajoXn4JkCoaQpsK4C9/OfPMW/WNfdsnBTudzBMhegaUH5NCQu38ry4qoW/0lXKNv5ggM8wDZYwoW6Uy/niKrpQLifDVKprr2w3OU24nOFhbfXLAdDficVxSrzMXutjJEoTrLHSKunJFo6Fmjpaaus3jk1bwyaF9fzAWnQut663GfOAqiplJAG6Rh4BoszzfSCRMhf9C7FT0RQ6zJVED14h8MCgBanAXjYr0NsTnrl+nAvyZXn56docSB1Z6LVtDaAKH2YlWbSREJtBXpPRUiZe/dHoas+PMQozde3FKJXnLWEMwmNkiVjigPBxdqlz4nZzujF/TsEldgmlbPV+gJWmTBzZI+v+sBp2z2p11eXSmmiYQaEO9khKtWN51fbjUP4SuER4I2roDn/WAViDmry2tJkaYI9tqgyIc4Y5zpp9ZvSBXZgrW7q9S3G23/Fl88G9oifkZRjr1wfGhQ3F3RP+hcvZcD70WCjyBFSRK7C1lsZ6/FoQV5J/vRuoisTo0nE4MIe3AtGBXxJUNNpYtLYcQnGsYs+SztHKtucTVz9wPcgsAHGl92ClQaMAUNQ92iCZmjGjzvmt9n0QrDiLwGNIBw39xDEFh2hQr1zo7hd4wy/LzuCyPWMxAlS7jMAmXNAYJ0EjDNGqF7+zU5mjQO8rt1jEE0HvDLdM0ZNvLDa2abgS4WFnzcsh8b8I/EnXVu9VsZKFieYY4qqrvgxtDb4htRMGrSWfOsP+LwZAB4xEsH+A/o5x8rsi/QdAU6yP1225I0UVlVFrUD83NiOZIt6Ni8vp350J9EWiZGP30OmNUbH1tRf3yJF+1xBwpoCvZ3NGOLwc2915Y6YvlN9GAMKHIpXzbVLsgCIRLAKymQjgsocgfYM93O1KpdVv5DGaXLjR/8IC2xG8612jzeB1aNTpAPhXjZFpbP3XKvDpuCTAQEeXtpFNfnLVJzSN2E2avKaWTPhTzJHy2qmJIjTxwMt3e3lNRnWvCk13xqv6kJ1WuOr3+BzJ6mBOPm3odE+kgfTnb1Oy8nvlTF7xCaQDYZNECYbYExseicW/OAwo0muPjeccKdEu2XalLg7gGJd545YbAubwahsAa/vTZkNJRTRkIqeF4H7wWBU7ORMrrPevFQ/EvcwwVgmumraHxcUfcCw8HBtJaGtEn2Ftln9zhZFVzDdf5/DfFhIW+6xrjmcQDFqAkVQDPgY1zbTVSQCFAsLhjJHSeeZ9gHOwZa033NWgCC2ZoNTulFqBA5B18sArzPt7/zypVSt3wlHXtNVhQGvY4dF6Vx4vtjFGvBRvwpn124ldf4BFdZlVcfM8oQ/yR4urVPW2HSko7oyXvPWAPU38oHWRDW6cbWf2270MOF4TpzoIzlKZtqE/NXxmh8q5bQTJY/XdFt39dOFK2GRKLqw+zsZ6HcDqdpgGJSDffmjLJIu/Xi6M9iFc/PrCtnO8zy8SR5TAW/xcqrqEfYezwP6mTh/8NoppeqQohl3TWoQRMNE/PPATyU+qnvVEjKOfnzsGLLcpowEW1IFI03IhyzYDUJlK4JKHCuMRoONeoVMtLsarKcCrSqR/pcXM4Uy8OyqcERdHbIlYd8XU1j3jskPnsNESH6e+1sYamYhka44IxDERrVTod6+U9rDvARfD7oQ7imREhTcYZh27vhRH9Z/yFOd9OlN2luuBmly863cqfoGlYqzfjxjMXnwkRyD2cUziF71mXqEBN9hdsYEs23EJuX9+7F9/v6gwrnx9PKx2nX4YiCMIHdtg+b8M8t4nJUxk8VJ5mjdf55x93yJ1EnVXPkunzT1+5ki3n4CIwN5cgc0nbKI1yXsZKeJYTdwfCLk7sb4xNbt/fvltKuQNKZBJ5nTxiR802zq3RLTF2INXhI9vbYKqSNMBkWI7B/k2CBwEwosI0XpmaNCEBPSTqrkr7xQOHHKiF+EexHomckApCEWgDMPXb9n2T431di/uanxjs9L2jSiaAzwbt2lUl15sdPpVPC5HISXV64Gdf6hrivn7cwaieIEc5S0ZnHCGPTyq00tLGwAW3WLNLbo7/4O3zoN9If9QXxyrT76orXD+WmyTY7tQ1OPHbcJjIG7cnWO21l7k7os2jblnGXfmXuA3IDSW3b2btqPAs6sHy5tubnpB9LdwRuC8gKRdAF4Zbh91tlnlpjtBSH6E5cxPfCQj/qBfBhaDE/3gsyQrpQ4vaYmWSJOp9/99Eh9YvXCYYEupC0MNgN0fG80nGaElzhEblmeR1KdSR5DvZN9Wg40XlNaS4/RgIdIWnwbUUz1YAW2N3tNpbNyNu42BvCeUYHSSWMp9teVnHstcuuhXdu8VC39cEVpg6Y9Rqyhq+BhWSKV6uYLq+1GBZ8Z/PBx5yow5+8pOmVOofCeo4qqpyTK7jZ50LKwASxVTfIB+ju+xVdNIi45VRvf+JxORcphFpXjztOpzkkbPg9Mw+SpxTCiWobawYWDzC9wryRhrdS+3QxkIAd+QhNAmzVdgqAaZvX5EYa8htsNrBSdsB4Kd3pi6uD1hbqgW/MT+rS97CRDAr4qGLu3bYNOhcEB0QTFXLkr8aPcqQfpffOiJWxgCb4Vep0hVXtPh5MvAmzs79UhuFlYe0wNkvRnfQBIFwkIHcmmPuP9i8KcsJEEaXE0CQMjdGiQY0+Ai+CfIPi5iLkjDobMqH6iLDeqLIRXO9YvwtJL1R6rGR8PiLC6eQ1V5icVnfbgivafMe5v6QpoZl8ftC2sDm41XN6iTt3gvds/fke4Prp1bJDkKldPLWqlvC2zLcEyqQie3spSaRWcozEswxtTT+2DxYVX5U8JrAB7l4kPZ+nT2mQ88VLCb4n6ZnxNjodezIuC1CuRny98lE/UAJ6TX34EsJab5wt3twXDgrrFwKqs919S6ZSrV9fPSShdyjAEYyyaInsqzJE8DkH6dqm4eM6/EPPUBXvP4sVC3d0YEvzmNzkmkpk9+kZFdjkPyb2JWvalrXNaV+kWZE4VG8w0fS/r/OoAph34uGY8yolEWhuSKkG855sj9IHXG8nxcOF/b7ECgEHdRgu4CFpNxlVI3NyBVZETtUMs1Z7mKi4gJhqqZFWFJdtmnWUvSbhRxtBTjoRfIoRFs2BU4o9rOIZCYuZfab0nET6mtmam8ZC1reIFSk5VZxbGlTVQ6k7nk3dXqRf0Kv0JkulZ4fC2uFblo3TZTTCJYHDrZlzl+EKv0tkv4+DkxLvnDt8zfr023i5IXCb40H0ODwF7oC6haBS5J7MxSRTv8roVKwksP9tPkGbvFSwmOMEW43WmxMf+AI5810BdZ/NSrDFA5WP1O3crc5ejpu81nVwO8tNHa5U6UZgAh6UaRZzzdGm1mdvYAEjPhcQZqK0UZUOF6psgxCM2lCoIXZN4HmLegXtCNVBg3sNMe8cVopITuVE6s7/O+LSkED3j2pzylaDRzqR0KbiS1Ss12Hdb0LcUob1F4giTPXc5xA+BbcpuE+Qy+Y/jCOZOFXTI7gUFHE48Ez9a+mdcF+bneyRKqPuw8LtAtoAgbhLM/I50Ot0BvqPbmd9s7giAJebJuliGIifsfo8xdt9zlvDgm7A0R7yD1YGuWIFB4Z00u0IQS4QPBLJPBKsJk0GIzCNCmfM1keuun5tc2n9AvZ9QxMUv70kse0qIE0cwd9xhUHzzx4DyMvB3+QvClJbIBJjyfyiyTIfpmDPlYwmyo9FqOASR7Xc4wgdIsDE1vde8kugMufXuZ4nkc+XoiHqtWcIk3++5kPV86aja8h3VAU/S1yFbpToVqpHUYAcfMcZZqrOwG1hXzIhU5vjJbQqLVsMimG69wxEiwMLaNKHa0w3cYnlqCUGMVxOl42ce9g07Pbg60yBqgmgj/NGzztYzofauq0+7lUV9QcSOIUODPvM4f3a7ibDK3jyj+5/wugSwXAWCIb1Oji8CKUNYoh1sV6+3U1QvTRvUKerf1BldelvpqMDLiVytfnhi6emCevApaC5eCV9pdgLQUMxEpdxgHwuzA+SW8DNv4azyj3/viBnI5g8/eRWZPeaNIprysQkme8Y4KojldGvCEEzbuxxaEJ1uHUtUhH8Nqdb32Tg5R8sjE+H95rSzeXRnRIcthQFHyELwFKCXmaKxjRIdzsPo3riR2fhw9JxV4J47lyeknAv4mu1lhAUV4YrZGNLGuGHCF31+tP51UxA2kaQLs91IWnFqkmijQ6HHFUO9o0Az4LxWavBpiqoAu69iongHUC4PCmsM0gCrfDZFvK9/lz+d7g7reJhY5I69mWPsDen5XDHc3TaFhH7bR/sYO0hgyyQWRvjAcDMRbKQ74jrR+roFsKsFxy5hlCY7I7YGzVB9a8KSsnaSTBl41+gqw0AOtkZ193yFoBgVJVhkbY0oboL4IfsHdzDw9hlVRsZHxQW1qskB3LA+QVBRFJ74eDjZaYlpJWZLv8rsV6JZNyzuGeKY46frh6mpFBYCwCyBJtGUpjfWdruzE9wuXxC21G43Fq0Tkb+/xY2KmeTJL82afvjnyWmk2Xrd9QP/XlnGkx/+pWRTlDx+EtBjY4xgpjjQFnUw5Pqhlh5wuXhR2FLOuJKEaHFgRHaNcVQIb3D7uBvX5k0JYQe2Hgjb0SNigcvI9B5OODVQIAQPd6Ri2F8c8ERdK7mq4mMVdpMisKq2Ri7eTJDmsRU8b10UlsTsHc+OFmFiRPYP+GUwY1tUh4UF4QrbCJKntJwPzx8FF9lCJ/jcjuqoOWEhGRInmoSFtX8YGn3PO2Q65qxgYRI+soCPJfyYLuaCtH7Nr81dwhH7HRXGICw4kO6pwYD+NE9vbyvJMCYFMgZwwAjk6RJsBmGKFVFKHL/Hv8QvM4hIuYpQfdxOZTOCZ3EsQE0cVWE1mC4bQEuscDhge+lGgsdnEi6OTYkr/0qkA1XNPW3ZTtLjjrZKMPaQ0YJlmrU9ragmM+Naqrj06MU+Gmp8ah9cDpkuiDqbcCedKbikCdZIJB96ovnP7Zd/h5a45nITtPTcleUhSSFq0dwkmwFqWR4e5jojrFiCXUn91yYYfkdxBuu0d5wjg/Duydfz3BiNnzDFEIm9/ctwcOlrLkB5roEuieGD0RTV1nYJo5EOa2ATdLAIMQ+asrXvSIK/xcGLAVVaIIENZlMEdfYuIcCYF9jZmjqt/JNVIeiRyBGTcKR19TfmRUR67zcc1disbAAGAeyc7mon5JgFTeWEBf0294jyJElFo32WSujWZxwsAL+hJet17U45RxHU1jWmzd5S5ewdqxvtTnxq8cPVTeOJpLmOCmfrcEWxuXDMEoTQuauJbug2D2HwrsPws4QNBHIi3d8JaJnVBHHiCcH1VHA5ucLP4FjtLl/q3MS2WScLr/VeuWbuLmAMXt3RSmcAsDQjCzeWDEC9PnBzKVxisi6AOWbMmQU3P6l7AZ8GnFE6kwnd94gDRWAhdN2swqqlfCR8C0FDPob7v3aEw9p5E17bXQLUiSTEBw/b3jIFD9TFkLWrNxpXKteRo791WATN4QHg1BvGPsv0stAX21xeuwR4SlW4Yw6WISuJZkGxQoHAPLI3VKmt83mPLYhP7H7Yu7CJoOqeZEU573O3jlz5vJv8thdslJTfa0IEyYdlFV9OMv6RII70AVmO/nkMQmu6l4VI7ZY+R7JWaiqlfhx0paWFslNzw9XsF0C0R8lpmU+uOupCR8dKL6h5ki4TvPsZh4jwmlHZkHHmHMAC/ZCI/BqRALVmIUZ+L1ju1YYQN2D3PdygX2g0ed+dq43yY/un8IJ+fmjSoTO/ynABO5+TWgyEJQ5mBclsjIw70dxMJL00C6PDP90TdAhcw1TzIOzyowJaisOTZy4CeE6gSEi6ALZfvQV4QsvQvweB/QAdHLzWL9ZdzelA6EDu4hNjRCPwH0mYC2Xhu2ypxbD+8NTcGgqei5nyRRXpTI+PIMtP5b4CjUx3L+FPRw706pC+e6ZydKpnKcvQNYHiMhfKpJvf3N6hdrbf86OfIMEr5ZCwr14bjC8PBuz6ZeOqMPpIKM8Ue7/nRNWBt1eCHrz3v/mhuSsaiCWncKco/ZbudrypMRlGpfsWbVTNYGqvP1A2u0SybxGIZcXyFCM+yBP1IFhih77ULvuqwLd3DHpPV7GuSEGHA5uJffTMnS0SGYr1gQ3jU/c5zAsegBVZIoi/fMEADN61Mcnud0SrKdtHf35dUlJH6uSO4E69po7V3gN1zJ3xiATZjWh1HZex9R6Hi+BKrMwQb1RFdEV9Bun/GrW9XmtbCOIvmsujFDCNhoyyIq8DernDJY4nDYVjDFlC9Oh5AVVF2hFFADiMGXKiEeE+szF0SmDBfnvZ5tuJwEl0dMCeIp0Mydd1byiWW2yyj0gbruneW35ngnEBbOpxycjcB/w0lzN47h+Yz9S4G5krMiOCg3IHxqRItnqVlMdhzXYuHVC8ywO/IzDNNRiCeDNbTGS4QxmxOWTBnUDh7SzYUZbV6+V+6DdPg6AN5HXU5bXIdzWGDzEGCpm49uyI/AGbVUDw0mdjkxitwqaYvO4uR4tABZanCF33DJHntVF3h3zxYnxI8HCVkHxcbx9sgW56TSXW21VA8Af4DNAxZ9KfBm4GSNLO2xzhB3RWkkz6xsPRwuUFsTKdo5E8Wkiw6A59qUFmAfp8keA5IBrbrcAMi1n06/DHT/FqEbPfsq8dCcfNu3bmkJqA9j1FvbEi3bG6zBqbVGTAMMBPGb6XHZaFkWv9y8zLiNLM8aHZs/dYn/utqjyGi5KkvIgPE1/fJ71mwBMUtDVMHF0Ftu04pKKnIUIglElugvh2NX4Qg7cWGcYv/WG1RuI1ZkWc7wvFQxBorpX1WolX/XA3iIYDsa4PhvFAIBAJ789O4wXWpgg3l1nbXNd0w49XG4UjsyoCOBhn9i2Htqb+ui4I6lhiAlgTkfrJmQAlP1xlkOw58765RNXLawdH+kkGFpdYde4dTKIfI0NXDUH60VBwRZrF6rjUqMZvbTbYGIJYqnnc6MsJW1Gvx1iZ/uWNJ2J8RCTxYavoCLZjOe1jZkD0qQYAUiRrcNKmwcM5ks4MORaBpe6Cq2x8mA+jm073pw1kTGXJk7NjQTWK0FUaaE94GHr6CJfUCXvOX6xdEc3CJBreGRycFjswOMqTdGcQ3Zkhohqq+Jg1HnrcmR5a5Fb7P+cSY4DP5hIyQr88ASRKPUmJCD8dyAZkcpDSIl2lP0/dKlhqh56nbt5MBd/RMYgpPQJHazm37xgJW26EXQqixbAIwtsnspCUh2B1nAT2QM+pVMsXEgEmiuMuHiyHjSJiOJjKym/6XSf0GXHgSBLLxx+VJPtLDKBNPHXtjjkrA3LVEo/M+unBvBDp9BmegwstlZnHaPDK5fcWdh9GohlaMVxKLzgdW/7ENDBmEJuxOV7taKVcXWRyFBXmrOrwtS/xl7m2fXzxY5rEQqRyzWgio5KQLT8Fph4GTiux9qiLYRtsudop7Cl3m3DbPQnGH62xram3UPKTsgba+zQaL3ApwTVk7bQDENFtJFANCwWi9Re7N5QGujp8DX4F9GRT2OLufj/2cX257RnnqACW0Z//mf5Y1H8TBDEwa6RKbp8JDDun8PzxBkDrJv8RW2uVjvapgNve6/LRFiBrp/+RRfkkJVbgPFRGzNDFA1oEpoDGVNgaYRqC1lJ70JLoWN8DxS6TvDmBuqI5yNZAyF02xOVubIgV2H7muCS2bns70RiIyfpac6lWDwCgWNZ1+XwJcM7r9tPLYbFULlZF/FmKrk4PQU9fbHwiqrW6KNgKEH5UYAAwlJywlQ0eW27JGWBGQXZoYdDNnyOLDxDFUrt6JInM25db1xCVuXg+0q02SwC8ErOkDE2GNHJAKO4bxrN4X19fC7DVekwWWoSA/GuygIwH+MAo9smoeV/4hrW3L+cdnwlIo4KACP1E76bSQPcE0Z/n/jFAtCc8JPX/O7B7wlpJf/Dex8L6USKJyWqI1BxXamwIWXA1kH0XC7avJfU6iff55kngtYK4jnHcjgKtPjTE6M3YqMvVZ0dnnUlvyZLeJQDD3c9T/zAZUkSevMeRQvLPWJgmbJ6PD2blDJbNeL8QxHeZBwOMwGalwB69UDMil0tLc2MESQH8hD2YYaGL7WVJSSIUIYKkcvgcoQk/PnzAkwBE1uFT3HO7GI6WcXdDthEuqIouwHmH5qqAIyg7YcTjuWpr3QSWmT0hov0s0mf2PUfmdiBa299iK5ottKMd9tJUEgr+FEoxvoM24b7DmTsJRLGUvCYeOFFca2QcoM9Ww6YWXp/WbqHmJvbhZJcwkMGRT3k/Vo8ideM2YCPgwfaSQyQQLzXYKEGwZ5mEshfXf6pxRP06nDCwMLhAQHI2X8/t9QvXg3EWuHrjbT/6/sa2pPfSB91FC+pqafmdu2sC9/VNHz0xvYUIUs9DcCcSRi0zBbO9j1giQjyg7voYzFj3vha4UxMnpx8TrSD6eeAwRE9K6DkyMPByZu0LUYKraRhDOMRDBhwGZrIVoUWOZfay4MwapKJdA5gHAS/byfgz9th8DnjG8HgP9DUNRMf+Qp/V9pYchN5V39KXkgSgNEk1N84lvCOm6xnEIQh2S46sLdGM9YlAE6LdK6Jz3u0cND0QitmXwxxjqn6vh6t2Hl6Ty+SGiz+4I3t++x2wF51Mt9EuB2grCPltBV/YLkkTfBlSV31khIHDrm8pQi+5wqQzBQYZjZqS8FtPpXdTzERy0m+lh6fkO+XKEBPiKGVAikYElxQAWrAmM5CBxivBdEJyRSKDTy3JhSQk846m+sJ1KG2wul8xhiB21mf0taTqC3DWWsrMHhOttn9SVlukoeFSMA4CUraT0adouZIAnjae2GFaM2s4mJVtnteHBEhd/AURR8KPfOIciQmpkJhxdAI604wjzLUfK6jU4S40IZE9gBPRmRNvHrNx3cw9wLt8tkBIPRmQhZ+JoWvTpkb49xuC2pIpcWG+ZWpvQf8rUaY8s7n1tazwo+x5zMcErIRwrQp+oI2PkBU0KWAzjtn/XwDXczNT2yP6DhpNHzq0sQYJYm/6P/eyO949Y1YsNOmzYNPTzim4c2u5o3jik0x8AdDOmmKQhfuv+JsrgE5Y5ChQr3l1aBq2Vqhh1NPBsE8Ci49ThQOOSEJcD8Q+ysJNtLLe4IhRoCRVyFfwv2mnrkcFTr0RfbOtxRlVVB4tnGvRXHW0dUbfu6dCjxUXzwfnkmeL6sWk/tHva/C8BKVtKybGePsjDhWA41ibIMsRY5EJRQlcHuZkzREJWai/FoynAF61k+tPWoV8LISY4dhj2mB17iMJi9W7a/WB5ejP6bWw5WUmqbbMGRM5a2a9jWIO3e4odNUvDDFqk+00rz0/ktunkiVjHCaw0Liy16tLGLQjFVe0wB0dR+5QZO6wTeBDcE/AzxAe+8b/t3aOcXQocXG9W2O6u75F6hHXPYHDrYOj5hD4ztpFRBdNJ5GlKpRDLsw7c1AQNthuBaEh3e9y0B0DrCyR4SeWxZKmbLy2A31ZW8J5KGO0eUAQ+ZkTZ2kJvouq3WcmG1hSDI0Qw2bXnNMlTLYNcNJlR8KbmX+U4RkpYXd5nhdhQT7kKByDxcGVtjkRATmouQm0ZwAqyeXHK+GMjCOqJOLRaIfDdjRutfg2nB7gDviCngUh0AQUokDcijx34+TU0nPz1H6dIUe8EFprLASTgu3FAFsz0IK61359PxhehbCEzob13DsxQTvA/PWPYnS1uxiKI3/9+1jIPLNTM/acX6suzUrSGTJtzhiS8LxZ17wlZgvCpHh9+3gm+s5YQQX2RNNUuOpHOJN1GPsdHKiOXk2NUEeFs3qiYLX78ZbHDcyhi4m2qIdBDLAFTVGrxRthDmsqi6gdPBMo56Pu1G69Q+jsaS7UOqBslfxg5dwp20LBH5dhqJbKOmX22TMFRSX5o/uIjnSM9qLkhDy5UAEqJZkdpfMc15cPS6rK841GwphGvWTKjnGns6xRgc1tZo99Cb6AM2ia7K6dKsaF+nvUL5nj8MavoemKq3G1MfYbiG5d5hqh4vrbww8DTdiePLNolYySyFS4o7pKb8tir4o4DPVDNsEmAu1G+ezS1QoHNEMLsRPqF60C4wTqBy8TnQdsSIeMFaBa2efq+OMkQ08vK8XU1rSqcEa1rZy7OOpigztOL6gO6qKHom+2oRTFXmUS72R6RtH75uwYCf4aaaSAlLzAPBEFopf3aBS6GiNDjNwUtgjPDaUhSMYcC5hQrO9+Qcz+jKV+IJZ95WV2OV2pLGgqE0BcbuLXfUn7zYPVqNvR+00YaYH/UK+z+Gk93IlYjDsSSTaZ3iwRKhDpByXPRXLbElUJ3XefJT4IZMrOU6VcPLol99jwrZuCnze+C0BwI0uUK8d3jT02/HrYjHAPFcBwLqTicPq2vtnrZaxEeYI9foaB8WTj9NFwS09XZbPZtwbmFzeBtW7Bam6x3dM3aWgbL35kdiZn8oSNPfEcybOfW5ykBaJlZ6lS146uKO12fOlg4OEV48B6rGKx2jvRNrld+NThhJNbxtLNXExFcQ9EK2vOlj56RGGZE2eOBXF1Q1LzTp958SKpadGjGu/6Fd86l/9AUnOVPvQiqQ/yZepKx9hJxoVurfnbOnSI8QqH33p2ZNabhGXamjSoABFvfH7cqOwQgiqNSfV32zyAQSBedoMqZfXYiqHDgS9dy/B0eztYg423MZzsWr1ufO5agosXttBgrqSoqQOgZsZMDDFHSivgDLnLrHdDA+aFTdR8ivHOn/KNs0EhMbkNP1yYn+RXG6D3SB883R+gmzU0pA+uBlrSRhZvnt6l2AUb6LIU8W6uDJzqdBG8iw9Hlllv2ENQ1IXZMDAmu25zuAeogyvX+2zMXJQ4UW0gfKvCP3WzlTXIodJyXgy0Vx3vDlgXLwJbFcFENN7zPX4xYT08mfDPDZkXulGMphvwPNJjXZMvzOeuVTh6USftwgaq1O6Jus3pwUd2N+xcO5bY9JRBZFo/npEnBARpIYU/yXIN2rPe6IiRXvIxkPkmnJIbsCM6ffKNY/3XztoNXO/hFqimALRol8zfoJnXfG03VIO2JjNhpnvKuYKhF9WVErdxpe+fBJQZp0OmnKE6MmvvjLvqgidy+Xpi3EvWS8ju5xwsWhZR4Uw+UCsiFZFL2FiWJMzBM0zviO4/jJs/dsYmaiQQlF2nSl09tmTyOvCVewnuXjKadi6Ex7N8atHq9uBTBwMnN4+igVxBpYodPFGcYA+XVnZ4NEC6amtQfYRlcTMfYI4wLn2bnz913WIwPPFIL3XM5qer6zISR2GJe7KbBqIY6UHzMIxgnfm/wL8xxYe14fwlFh36QCYJc/0TJBaAsQPd93+BnGjLl0k2fwgV7sv8Fhfh1HcYnRqL49QXcAqcNsbCa8uiPeIRSCE6dZCv1F0fHmGo9WK87CwnnGkwymjYlIQ/eyvtG2J6iceJDOHX3QGfMYV1wMSVxWZOVLjCo1mzbQRHnTyYjl5EeJcXUXGad6ds81JxkjlUVzTBrL+lt7MKrX5XammQD3GTNPjFr/HVk0D6QJxyZmujvSRHmZ2fpj96rWCx0jvVtnk8izDJyc0tNK6mkUw80bF43GHaHbB6UTuJm88XSUxABq4P6/jPP8e+7UgJntK82zJia9AszQPcJ+QAOeU7y4pk4bXd18gOpYF5Qcg9jclp8w1QkrlNs5P6DJ1RRwwpeNmkb94Us5xoERlOcccYx4XiI8SpWKdbavkZQ0PsoT5e5CkYJR/BJmxMEi+tzNpCLoW0X4GETAzJAJkT2AWyaxeFq83XJEgu0aj7jKd49yYnnkH0h7BxljRt35t3xPpw9F7JIqhVVQ9r+EqYPq236ojjyL6QDhPNA7ZeU4MCY2RPqXCVTsZsZj/eNcRg44T3CdPdNMpnCKWaMTee9SeYQ6SVU+LFaWP+lq7WSme8u39pybpqDVSj69f4nHaAV4TpP4qT/QzIyGbulr4B6VCXjrVMLhc+cDHQuHwmxeNqKp2NIwWTfRgnrDzEzpxP7KC8GWoDjqvdhzjILUocFwqk1D2mCTfX1BO+GN9cGvCESPWesVKbGjL37OS0JSxqv81tJ/UEnZUnjNPwoklfvRKn/6MqOEL4QD8nnpiA27U7sq5oqorFN+ckw24vqi0z5aa5IWMEQkd9QnLX2Rd8E64x3FR2k9qsvXf11s4MBcgKowiK7SeQulaKgLSVCS7Xg9dlgNU1KkGr2Cksi2okjkBo7Pio1sO928YGZWHyAQ9HCenrKn1rNv11odfBChV2fWnZ8ys0IOpYkFTAnHTSwIhm7gQoITCHtj7k87r8YPExqhpAja0sQerDiN48POG31FppZ/JjghpU9Gj1V1DD/YdrjAJTZkGcrSXeieqAI+wQKBaEKW6s4gA38vqZTRGviDFbIAdLqxQGvdHdUTVD5D2pTWG1PrXBLt3kqzpAytjqmDYJnz0e/NqGVantkzWHy4tPbC5YXDOa+tWubndPtK1uFz6zeeDo1k6i8ZcGlery0ZbsdOJ9JwO9K+YSKXMpi6RzTwUcuhB2FNffOGGS6KVu+23eVooOd8+D1N0YHd9EwiSnXKWkWaB3aGOmTGWTvnldLCaDnkwIkd1jDLYdGMZjP30eJnHWMsfJxB3ix/WGz4l9Ph+GdDjRPGDrNDVoeeiIpNmBvR9wwzwZvd2xZvYDKouis83RIFXGudMdV8D/2ugoeC6ZRb3v7/9LtIbRaSM1ml7Yid+8wfGn4f9iEk4N9zKJ9dGz8HYs4X4IuQdpa7/yHRDcVT0xZtWStOIPOldYD1tWSay7ps2rEpg9xVegzkzOgtjWiHrJqIDjNOduS/WkAvH6RqO+uXHlH8nyTmiHVIxrA7UieolX5S2teCR3dXYxRxhd8g0oHYHdY6MLn7Zy1GVK8bZaYRlDPysnb9SgP6NkEbAegJ84sb/EYCSJfkXP0N4VoPebFqkjD4HkWfBKBLFD1ZS/ePRaViMMm+z35jgJJd4jXYKa5/Qy6da3N3asmuP39OjnSHbb11d3xIv6ovFz3mrftbDHb+LgHxBsd3kmUAyzFCBVow/0HrxQ1LTCMO6J1ZdbwZX2ze+fBGMi0J5sBwuR3YcskdLSrIeNci/hUsvNqr9c73xHCliiyvuy4BaZC5XxIy0w1RmrLFS9teryd/uBmNBgGkuzoFQ2ImqRV2D2y5oppxpOYEW4ZTEP7py9zvudqmNHPXai1r09d0yuF7R2vNLiVnq+sDVEH5rkgwM7hw8K25t564Nmn4kHZZ7zxMD8AGgFd1T3iuafi8yqC3aK8b95GpQjwLcTU3dqYg0dZ7mj6q8SNd/TAZM08OPTlNcsyQ16vpSmKmb33OV456ntAZzno4RaroDANquER4HYf8RWa69Efrq18Y6wM/GiiTUGPp+Ly58/f3NWA0bN8vuin0GmL4uf8Ln0aNZOTceqJZfrHUfz1uVl5ZcDgCbsL91IrLFV+YF0KDiYvmYPuND+wbssQebz73crU7N0qzVqI2CXONAH1ZuwtV0VSiEd8uESUNrFbg+RrN5lK7As5VJ2KnNcdpAT7+tqhq0tdz3GipAi51GtDtTLUfWGsj8ffLSeAGZd777yoMP2ltELnSu/PjXCRo3ZztyN9eFxL23StPo/m+JqeVDhvHavfz/9Tfi6j0ecJ/7AXTxUL5Nu+Ejl4NoVONmtwscNQhMUPW6QRy/5WPLwyrU40Z6FyaliJKDVlsVn33Kvw1ujmU+yI72YY6q80LQvhTfefh0oCYvNXAmseC1y7gEAahv1Ayo3qkzz1r6x3+VxVGeEzkuVWHlicOOBIYBnmgVCrHkvBs1a5bl8ODT6zvgAQHt+fbbXGjCJQAwgv6xFC794cG95ocnryJ4zhyPrfaSnFK8flU3KE1gmZ7Kz6F2FSj/0Ldi8LUwN4z0THBEAEFQDvYdFUCqbABf2nRpmRTrIYdHZEZOE2gy2BmpLsO2cpSp07tr9vhppbsD/dqonXKNImxuf2llnA5N7XX6CzwCdhI2pNTYbmnfEVBTEWD9rjMjXEkLEDPBfjTvv3D8//o2tSN20TGOt4nK+67Lc2utJvxgAOGFe9mEeUl+Y25p5ikivnkm6St585kwj9Lv6zw/uwVXwqr4oeskn0odVrcdrZj/YdhQ3wbtUTIUa6z5elwM2AFAi89mGnHxs1Fb20RMf6OqG3S1vMNAGgCj5vFZtm70dUm8o//P+h80YsOva9qeGzI4doxcih//Wt4KJGOON+fXLQYPmiIQU4LVUmDPEWBRzwybYy29oE2TS6oTBTV1EuU6j7MWlr6YNNgeu1hA8jKia/Errefp8tCHkGTxiaav4EXmClhxacKrK2VQ6f2hgbjgzP0EnI1LvCoe0Kww626MFaYrctHnAsf83RMv+5Ho8r+Ex0R0BqdYYHV2998CFyoQ9BQaJrXCZ+bFgaN8iE5xBuL8IptvGWSA/3WYBUrGpd1YsVhuttH3anc6v+V6zWv/q6BoxRdGSj3x0wsKXluY+bFYGGWeyuFr0Fmr1rx/ewr07zWRhvPrOh83xAs16UM8Pk+5YczksdVpL3x0DOHHl9TQZKBew4I3y39CsLmXLblwZRcqFzygTufpzizbvyMt+C2Cbl95uvXgzNulnDarQR87xomB6R4olNWDTsybVqAFTj3xWGsEFHkBbU+TgCYPFckJru7YAHgHakeg6Bwlinj99c8FpO5S/yRZ5NrXDr94zd7073PDSBlXJQzdYelw8krHnPpyJNxqAiNREs051mUdYkZdh/LOafW423lxOGLr9MyC9C7aTUfiFRtXqUyy3lM0ulnQBus7Rp1cuP8T5WkyrO2VpmD5xj8NI59GIx/na5HJ+gwTKkoWlhQG8u1JsquWe6ohV5pvu5cqtd14FekKcFy2y6PkfDx5Tuh7HTihB5zDREoqqVThXPtU+SrMWnw6E4OW2b4FSmvVK5Qv3xfez3IRfynYk++vvEX7Wc+LL4oArYmPYA2CDKaxJJLNRSxiEiTX8+lscexILqYkhUJiXEaBCBKK1j8np0G0UrYIQWY+AIp+OGUoNw5TdqtSZsDBsBF3jinAlOHgHhBoJY4mXMNQC+gjFRskk8FcCAuh1Lb+D7iBfvt1veP1AtUGIYohnQ+1y1QfAy8wVh3dXwsMkCJX5PVoOij1eti0Hy7D1yhEltUjiVY0y+Uyc52VCnGg29kztfjfAb3F5MLvX2i/90GFsUL4ltray9ynF4ScWAspqZs71U3lQWq7P0RFIvndVThLH2eBlb63UAbMEAjKE2tT7c7Kw0yW3/X2H9fbuSvbXAzt4FvqWfquSe6LmV3O0yVEqVBeCmtji1YnGAL5pw+UvLj6VcptD2He0/bWgWEzTACKaY0e6fHjIUnLREx/rmgYA2wRjimlKIG3zdrsFV0b9+eT93S2SJp5tyRPu5kYGItA7Xqymh82cMQxnc5vXouMoj8IrHf9Ap51YCLKUlJUnl0R7j61B5hkmoSNMDg3V6YTXBnNbtez6oLUeGxoEYbR6bNbXHsPFPjTjECZEcICSPGyYrOxVkhCLu2KjvkfmRt4aCAxz5FJ8pdfaAGCXmKWLY0j8aDtT8DqjGwErYIcvIiNwQh9/08zdYDoMEvtLSjggFDVNiiM7BYUjxY7IFZ70wYRqch+WRkAd1yBlnP96RDTcKBBaMvezL2cA7Fgwviu5Xzx1U0Fv69BpgmccNBrwEe1C0giZ/pAKdCeNZ7G8eW7XPejHB2onFK55kxbvynR4DU3THznPs8/MzvmyvSIZPzucnasCttw9VKpfeFQ+zLQMv7AsIcmH1gMSnjAoXAvP5E80Knh7QIHROd8QIofqZeOnPG3unrPRayc0wbFS5AQ2b1kK47V33ePxqzTzsVLtxe2x0lzT3izdeO1tICTfp//RQ6izUdRzcc/GANmcd5rVHQ8JKHeyyOHQJNlRmh/mwqqXYUprk0NXvuMIEQG3SFodq6oGPL2EwCuw4PQpHT1BqxDsARaH9kvjzrJqJtWThwYTtoilOiu4yrKJtDqyQdK/YO9SjhC8YElkQgu96U/Yky+PjX8lMDZvndF6yjJ4gxNoqaBmfd9wolEKXMGsOW8kfnIf6NmmJ07JYgtJLHdk8yl0rDjDS978fvQ1Q0POH8K0rS59Rpl1/2z2Uwyf8O2H4n2wMmhxUKsKsgKChUxQkCrBIl+EBQtDOkwlAC7q8bZWxgQRfLvUJBCW2WNqvvUIz34yslFdrfRpbt3+vkZQpBn9oGmgj/8wKkFQSnkAQ9m4XA0UgIczBYHtHf6DiqM5UlC5Scw4J+ekovPrWK60g7cxyk5teyjnfoW+RcALA5+hZrsxsUhYueZHrYRiYucAnccJ8X5tQn1VGf9qO6CydkBeXRvm7dKM6uzbcHPZ7SGZC7CfPvpWT/TaroWgWaucCavuxFZ84I0T75zZZRXMYkuGmD15jsvOazlFEic+l91BvFobqHI0Rorx3BSG2t0BX7pfIAOXeEuOTu+FQNqZWU0NPHvB8NnddsEuFdIW1ui2K7zwXDVdzT0V2Aw279UPMArcpcWK0XhM6pfI5fYrjY3l2rmo6kltpvpfPm78rC5hqwjGk9jrLnLpOSWTG/cnke3B4doIp2YuxezyePlBkQxe6q04Vrrf8aYd06vxoecuHDtLQslCZnrrsP28gpidBNwuS2DS7E3p09CL9S5bC0MSnN26jlihMW7B4O321/0oCFkIkm2POJKhdF1QL5d5eVSDgTHSRcLe/nl8p69FMGix4b02ZBSpU9f0S8McA+B40pqJ/YKJULe3v+T3WYO/+6zEUv+qI55ShXNFnaHSoND4MCt5lHGegxTBapXfX3Noc9oY0XsnOSnod9hsTPAc0p9fVPX9eRG/Wh7o+nZABx+5xmwVCTPFSuioINtPKaC3IXZtgVERuhOt9cpVQEwnuzc57paFAFTvBblte9ETFqg3Afn1vugGXC0KYXeMMyjp0gTfHloXL1c6jmIIs/o1+I9Uh51vACNJSlnEx4ivYShZJRw21LZJLABnXkJOLiJhzzIcxqjR0hcLeU5UDvixbgrTEzTxUYtcJPGGH2Y3mL81BJgbDNQrVui/0FTF3lwUwSEJVksy4Gw8i8kOpIEmI2zjXm3y9ZsF+wA+verTpEUSiJ+9oFy68EjEaPBiv1kAzR7riT2rVfRuVthkGMZhQwxcB6+mQ1hIWfSC50NdGgvekmWw7fwLnl97Izo4+zlft8aMV4cU0KwVkIiHfxZFOIAlSlV4YwqRBzkDwrf5HUqjJ5+zj1lHMeI+RO84F5Sjq5XWvR9bQXX13W4pRBmhMCE536l/+WL/xFxTMKv2PCFv2uPoq4dTJ4vHH+RFvmk9Hq4Zj/YCRQMsHYEuEBn2IrID0U+y1D3hVN8ox0gr+yLUy//f1BXnq2JeU+RqjRNTSzvWUrUCaRr+1XtEzWVjZoI7XdT5VsBETTCkx4zxooB23NW87bdNjLf+oIcXb5zanWchCDo/m2IhirK5F/sdKkbkAKHXFK1ESLXrUmC9CWDyDZRJDj3lxZFOlNXfRcLf5m8kw97Cx9lvrzGvjaM9d7VuB6kCL9zzPjdXbRjfk2sm8H+9EtUO+w11ha98oXRAd4elQTos2OpJJJgquyuLInjkgoMY+PhIT3eV1/yy2VkiccY9OhP0qpbGGtNj2GRL0K3+W+gWK3fMPOk9UBnoChUYvLH541Fa5k77RGAuF7C49R5HCPQRVmWWZ35pOtGkGDUBFTUIHpYPDprtwClGKxwTWNEoKrVgtw/MHj31IjTZNzakL/0jkQxUPPf0FSfJTtjbKsCu2uHJS9T5VlZRSWXFystPXhxsKEKA1L8KkkErznYJZ7b4pMjicsMjiFvvcrjPo1U2sBmMScZmKgW4OninMNtOZ8wjUBA3p3/TE/luTQTlaCEVG0d3TaSXCstyxLu+PNAdO+v33d1fz9oype4ywur3GKEPPeFgJ/AOp+9cvZO0AItJuQrxonuYtDfd7b0hvHPPJgmgSJBmQVBhWL1UJeXussbsIMdw+2lx21UjBY7YUDhnkqnUjx8g7NkYPbzGKDkjBoZUErYY28HyY3Ipmsxq7GzyHqy4jWA2Pmkv/iGRCVQ56dS2maRnrG2VQO4ho0Vbm5F2TllNZye0VHnpwUv9NAw4pq06kGo0fblHuHotVYaUGY3lNC3ht+4xP6j7BLlF+7jsmJI9WFraBWlCW3fNHbDOWRDWuMpLt6NFFEEx7h/lmBC2UkumfiMwX5Q5ViyQgRGydZiljuDDNbRBLG8I4WLfIi7crr3DdnS3jf3tZKRoJxTyLVQSfQOHhOdVxKluD0HW+/rAA+eIYweZD9PfXCsvoGJIxzLNQ5LDyIPmlTe6duhkDzKCf3vU4KdKxaf4hqeDS4xufcnQng9TZwpLh1zJEsJeB0ozoJU/oigE9k4rKI3mFOXkj+4kepIxgqGaWGCsaaREmc2N0jnddf7PSKrK643NaV8JmyRzZpS7kKFeCE9Hwl/agNaicw2TvRMcFsIc6v448IutYSquuh18rKEIqLtHemRj+AmM4+RD6ioJLd/0x1ztOChJKATFJfPRhSk4CI6ktLJ4YqL4R5DsivkbwnKTNnwG8Wh0WL7Pc6L3JVwwpLTLCHFQEF43JexB++CMP8/IvhcM+bUweqlQ8sDVHPl9rsdbgT6wm4qbaHwut7FhDJi9oDgHRGzk8zH0O77dgzu6LE51W0mSoPozjOXxxTc9fyD+PM2+18yPUt54faMQtJbKP98PeEKh8qZ1U2WsZRsSt7bgYd90Wr2ujN8uwUokjkBXnRnH5gnJsjWhcEel0muI07PsHe2A3QDOq+6IvOGSer41EdLvvckxXUfbwswlHXgKWM+DIcEd+zHUgkgIxSmzw+u8nPBkSh97wvsEZnsGoLf4C+T6usthdyI42zNgZNMiEWXng2oAgIpEbj/ukq0JoGUXe7sJly654TmUMVk8r5sSMFU5n9FLyXEkosAkVPshsv+yGqIhJF6P0rtvGk2BEmuJ6inzUX+rsr4R5xx95HkBRj5z/PGpIrlYfZVd5gCe3An/VJQ3gOrYaQY7GXmCERcSlsrLrLvLRRHFh/to3mLzVsfL151fIipCOpqPBc/hh2gqCM3/5FOQdYLHVPTfrimFHl0dC8KWNXqnoM7b/c9M6RLqoY3QjMPhcqP0k6CBsAkDYfbUBNdK74ekgrWyDEOFNUXs5bsuQfDrxZHTGYmZQvSdOKwmmqzY6q2EWpAKsWgP1llAKwlHZowBGWwu5dJVzxaOZwx4Ww5D68xviT7dwRnnSk+LqohjqUG5vez40BxDs9coQImWDzcNKlwxZ1Gx3WqB8fMjkDjjO2Ibtok2PtgxGrIuYZa7cmvKeLciJI0B+91+NtmdZxTwHxzK94PUkOZFZ7DByqycdCXGHp/kjwOMcUZV3FSBXK657qANgGBbppzwkOzTAMrjS3R2MvakXV5I2lKVWHdX8aBHRbQdyhmsrpeN3w59RUMSkACxpX4bqMfnGOvGUXDHWfOWd9Zx5phMyBuGOeFqIicWT9zDfHth4EyriyQ4jNeD6hp3sICST5PsGWV6ZTUabmvsZPl1udFG6TXIIzrhAkPph95S5O+yP9evGdTsTXbYRSzjFlp7lS99G9HTEPS7sNXJJcLAh1/q197SqL3QcD6Yb8xtuMK7jwLHWSDZusXUy4YMBAPKmZcnrwCxAbm33s9HMRK40wDsqjO7qYylg5BIPRosEMRVxO4BfGowKgWst4mKHdf2B5Q+Oz4LTMDV69oAFLdlLjh3/hbntg/dVFP58fWRl+dcaPEQyYjQMaBQhpiRDHnorGmSMgkSnsTotkf80QnGuLAmaapA+vxXySUGEG/vGeI0MLh0XKm+klGpdJzCcJH0/TU5i5Nua3DP5QbD0WvowndlZXqTt3G2wJnL9MKWqCXNL+RKqyPfbiCaW4ol0wWmOmKqEHjr+WPf20+3xAnuFTA3sBU0nZEjcWYbnAHAmo14ZjsmMN/MQrl0xfP5DpMFh5QQbB3zHTEHkamwFsg7YXPP1IwIJZPminOyC9zkDRFM/kmIrohLXLPEhvW045bOzdQKMNUSpsLZnVduKOzNd9JgvUmtDyGqscGS9X82cSnwvS6Bs2vOwvcXDpFz+Y+A1ULZ8cfYPGJelfFkNNslshL43Vfn+8IsO6K1WThbTA26vnrxL9HSa2TpmCRhEAZS0bu7nHQBGygmdA+CZz8OOeiqadEqCRPuPGNbH/PHJxjtgvEzJznvv0Q26WCs5U2RkIHSa0B1GgBlidx4lApxSvBUDcNQHrYjMSvr3bR5QLP/13TtKpULVCxoSSSqUcV3yivpfoMVRw0S5I7rIuQONhTElz8xOCcVac79VtKR8iQqa16xXHe/NlQhcm22zNESRERgfeGj1t9QGccFWkaKXLC2VX5Myani8HxEPqOqZfKzeVAl9V7y00t8Etzwdk4k7SCXaTA36RVq7+nOMfXr8a7Mws41PxFfn2rMiyb1cwCP6QFBO16In+a9LlRfZhd1ueNs0ykovRRyYoleMvz4qlSJb5K6lIXjWNzBjOxaEwXbI/6f5yF3P8JLaANGL99p3mlVOwx0ZrZGZwhxkULfgWDEl+7es/6YLQ4Pr7FA7yXzKl8IzZXBbCAj8Ifyr8G929oA0Sm3CIEShPei6LmUjVoLnYmtQBmH8E7JFskiMFUMMKUMxOvOxHv5CQIJm+IE94uYZ0sczpivBwMPq+l4eBzuI7jHocj9o7N9C5bCMVOHFbjH+ArvoGwnJTbw5jUPD1QplUTCWm10bhWudMZs52NecwjuXEplrYwYS9jhof3aVQWZaAtUaUDDxEiv4olHfCjMCGdPS5gqkrNVm3Rdg+EW1yMgHW2uAfFpZQZJbj5ChQrqJrlbcViPh52Mb9PGLbiv2UXDgowE1AR2s6OjInZFpWZBiMTeZGWtgTUlbvj6sE60hnWjQ0I06gbW0FtXOfEs1tD9IR2ym4XaFzuItE4Me1ziD9vcDyIHXuacDXicWAZOxIBf778EHN6093Bb7FyODJ3ljdAVsJNJtcbR6aU98+oEUhEWH94mdKZKaUsA41oDscPeXPL8AtDTKyj/cl+yvXTm2mKpjoGWbW/oShqrNzgbxYrlzVFZIweHOedyKpgVE4+NFRJVov1HM5py6CzMj/Jg1Yvg00TJ/kjOiPWjQjd1bFQPuCeO0o1cN/+FQGTtuoVFhaCm9cuxv8YC8OwfWFU3zb8N1kEYin40bd2GBinBA9wa090X7UT2M8G0ZaJBIFXWT4V6405uT2OB36seHvHeLlIigmWLpP6DMolpVBHu3pl4Lxjt/tbCSAfcSxjzjHx3dv0NR6PZElvtsjfT1zVoJzSi/ShVwoNKRLDHGKriqSMksFLagbpMNWxpV8nmhZqvuL3JxFPVslTVq//YkN7XZwQvAr9mvlDOo9d+3Ds9go+nhmD1+3EIbbeJlp/d9eDqne2RuVr7n9tF+ejxFmnWCEk0BlClBaywUzY1GHLkchPpW8/GKKc5zAbVVPcTd2hltBGMuPLYeTZ229kwZTdFTGEl0eSDogQRGbTmFZ9sooSIe74ee87VAf4Rz6tyi9yG81hovfAGsiX1s3lFOSXeM05cE6NxHDrNwEtmSDOKvRPaZrxniXlZU1Ukvt2atgvWU8KAeXVZdobck9I146fm1wsk7Or5RXsM/FBq6bGxjblQ/azGBElzS41Z+H6YqRE3ksaXzQlb0Np/NhR3pT4OjcDiyUULnwvOKzk1NSmUPKWlPa1xX4DA6Yhf/PN066ytYgK2Pzn5QbwWrNBZ5eMrlmnf9Kei9tBAAlqsekeTRyVd0x2auRtOeyVEIKM171HfQd/6jGbvB/K+YNlKFKDxPYrScKK3QZOhe5stGg9kYbgL6ICh2XB1B1hroJaLmmY+d617XZCL6hyr1dVeZ0Wkv9P1RHYWf43QumGDM9wV56d0xtupUfFtz3dLonlNwlh0PumZixxK3SyQZ5cEOXvD9sxmKKr+frXr1aisC5ub1sXsebq6YDoUTsI11IahkGiDoGlhPvGBySRchesBEqwoWleypjyhF0e78U0SWLhmONt5RYBvQuSaQr9G9Qs7dD2/LURZfiQUHZBsuEUmXfvO+m61BX53OwW4ukyWBFcX4CAUCTxjfjkAh/n+Syv3lesvA+KrPwolCKuOmWIA9v8LAjZWVlV44sKCpiTsYgieQAvHGelGwVdSc8ydksjYVbWWj42QYdCXQl0+tTu3K9NMqzvZG4Fm5YW8r3qXMw41Ht2s5puHwl5tOmkUAB7RFNldDAOfGvjn3IO7+6L5TgM1A6CbQ2DfZfcIX5cFCcPvUfFv09ej9nCZXrtXqSdhEUgKlZ1tYjs3RwRK0gMdfNhYyQUJwu5/ptsOBBaVPqBSq7yWMVhc+NgoQu+8jwhOYhIrUW+jaKkFZdoe13VIkLaZW2Y9vppJ47/P3du4i2iD3f1HcMz+Nm9AjAjbD7G3/dyWUTnpwe76f15MwLtSLWvS+ROKnMX5WvLP9xKeW2PsHgz12nhwcfERAjw/xTPGbYnY5JAsftCATaVz8VjRYHHjI0VidtXMJrC26tHZa5/lhkq0M2oQ+Dm69piST/qqBom/RBOYSMZD7U88RgHgLliNj5Turl3qyTTK8Fee4RG+1fUipDjvChbmbRZRMza2+5MfgDkDjAlNQI78+0pTbxGVPJsboTNaGvyfkBSiF9Qr0/4iNElMZpi7cm2Z14oXlxp9Whkc4Ifz3+GQALARmlvxpnYRsEywQFFDjUCXsgpiMBv1g24+SEc7YpzASdQfomcnew0M72F5EZZSKA3MJGOzhFYhfA/i+s0sfnVg5/oij2UwC9CVrzTon0EOeO0gE7xe63YV3UBB4PGrbYvuBmuKNrd+2T0CJnBl8dCpql89k8Vd6K1Ed9Z1PWYg275mOukYCT7GppVIESSmZAnWhFSrXzjM2M1VZOaN50ardUSZjBiTBtLc1JxwcreWHumHElRDs9R7o4IzWX/8ID1tj+kUTqLwYBs9IXPQYxu+bYvvQJRKTAE2DdSFcPbUyRVDg80sr/g1GrPOB5CvGGa7KFYg0wpzbd9PXUEofD2cBfylM8GmkGlVDpswPeFwK6otaWMcCKgwYqNT6omUjZ69Md5hVRi/I/eBzR1qEiwhe55yoG+lJmha5hqvJt9KNmqOQl+LsZq9TzjIB35dDojtMCKL52PebPjB9qAGvP5H4eSNSs60PnHg0E/ECXyEgt4G1u0LiOc28vrlrq8N4qJdgAYIH0dcQCpbl0FPLh/M2Q8IYl4gYrCCDn2pwa6ANzRXMVQ8j8WpZelUt6tB8ktVViKRHGoD6bFLqJKuHUn2zIHHno5mYbQ9kqO5Ik8qnB8wltrA0A2JRkOghrSIcklnP5FUHuWGFLURZ9VmQpTGZjXgHSf0rI3tFbiDQD1hKdXJ32tGX2dzJDuMUjz0hBB3W5oo5VRumM7Cbqw+C93R2sqMDcbX//QQdznHmzV44W67HzUMd1p+NRDBu+5ziAjeC1vOy3GkUdElQorjdwSlHKmnvb6qgeNjGAhDuU3VUQZQbjRUKRVakFM2CpWmupagoC3uYQGfOZDqJOEQCIvYRACVUeLDQZOzGR8Mmz0HtFNwoAY284Bt2VFD6K4OOOOtph7P6rh1U1gesH3qG4O7x6YDF0xEcK7Eom7L6Jnc6pVKr5DjPLsagY5lLcR6M3b4yqP1tCPCbA0I6j/+jHCZTd1Ay1MpQotzAzkAW4FFD+ie2ehfseUTZoT4PspfM8gKzoU70sjqRF7iGiehLxpdkjXNHZkiSMPJIrK95AhzQvKU1CRC0Ny+OKYcs3KTYIYVEctUDXep94O7zHQSYkbw5tWcajPCGbjPXlrbjv/PCaffbDgGxz2aIL1clgsSQcPIDaVBJJ/KpIvVf0vFfCJ3RiBI74bAB6/lCLUU4TQakIW/1O2aZCfT48VvW78unzhcXwyWAaVBZ1YNQHUh/8wOtLaFwR4moKXILpayfMHcPd5ycN0fma2yidQtSMWvhOMxdZMQ6FxWSoyZ1MMGTCjTtqim8EssMLCrfQ+DxF9j9U9o46O0wP5U+Y5QyvCCT9WTCAlQ6QYWIPUb+mx8uVhXS4MY6Etqi6EPHK3FldznQJSj9JjMqRgT0JGEVi6WFvz3ljDZ9ZwlIIlZc9pPFgAx8kCSq8LtGpxid7qGaXUdYy7S4Lh+SjsMo3uPRMLOMfh8MIUw79+68IVgvZxQY1NCwrNMdIVdNxK9PTKvYmG0GgzjAyhm1cE7JYtOqGQAwEUCkr1jVZLgxqMb3WFrsAfCzYpSdLfkxSW0SJc7ESZXhUGgb7STiLVOsUG6DktJQEFMMQc8WHZ4QVEEIJf6Jwl/UaoH8MDwMXQDtcyeBN6g9H2FSRDeN9L6emoOVZbsGmg2EdOgR69QEh9Hdf8pmMdxfBidNl5pcyZ3mL9OtW6A2dNQvU78VpmREfTJ2DK9N3RcD7XvP/Xnfx7f12cbDJFvjX3duR9bSQhKmn5q20zQM7a2CmD0kFHZ1oa3U1DWUtkpLVVefeqSgQYLQerWIqS6oO0NLsmWkcoY210ZmtveZbplKsKkVWeIfvvn8b18BDEpC2Wx0hwrRF3jOBG2gufooYQSBzPcCcxf6/nLB0QiO0vxpULhRLCov5HiVCxJEWQHDM9j8FFQ1xuU2B9/jJOyGejJC0j3K6G6/GpxJU5NPmE0ubbGz+bJL7u6Wvbtzo+8eXt+OVF67sybl1OFq9atUK36Hxj6xpc4Ooyl1Pw45aqmXIGzzaT0/Lx/NkqW0hNvUSRKRdGAmlFo8yFCg+fuGd12cG6GfHWbtO2OjN1dcXeD1fGt2MCVlGftU6Uz+jY9ZS/Lr05GWiksLlcuTjhd+XBzapkGvphtxqrgCCCuQsBjKs5Pa43q9ov/rwDAiwAkNAZ9wY5gqoDt+7VMphaD6hIH5K0QBrKAyzLJYYmTsCKfi8oYkEOXjDXd5nyspov5Lt3PQD0xA8OnqLxwLNwnhxDshp1rRfZeIuPnu1E2xOyu2QF/oE/tmQpWoiQ1GLX5LCSIz7SUMunKj6cOLV+Fwz1R2DlKtAQuf0FfzbyY7TaZcdAchI0jPieITY6XJXbSR8aMcp7mPWql7Gl3ilt3/Wrd+mZvg8ilxbJAQ7AhJMHCdust6YcxxqqZxiNw5V6qY7KAopxJZfNJihqZpsOIZ0W3c6JZp41c9CtP75XUciIiy8n5Yxl220aQCuoyXfJSusdgxX5TGFwHfEmUqTMMjS681hiy2fGehYPWVYuJxs8TKdVLzy8dZ+nDF0MBhHntOuBPcohlSO2GgyelPHC3bMaT5Nb9Qr3pfUe6if/64VJNvPbRJz3JGmWtv+6SDrXUDO1e2PvKeJPO4Y9cqCXYGKHB/FbrTem7dmPFTJNhS1vF65ScFp9aiCiroNSTyafmxnXTdMQZIlHFATH1DBtc6BtHGotfthI1kvwmnNq0UvgsrXiFUpzg5PykojyXSuentLDy2YtOGiiiAwyeLst/2eBKDLjD8Y0DfIJrL42g7Wh7Ia0wEu/HMj6IFaPy7iuYqyTjPOJi2ypbnWqdMy3Qhey3iK07wPjo4TrjCJPeEbS4j57qFe4vbFkXetNMVBSveATBdj1HEEIBP1yvngS4TDZOQqGz73P5zXkjYcupwzsOL5WFiQvtaUuLTlmLxyoePbFnx1j0ZpE8vjzd9rd/H2VEbt+69Cf/yGyJfH1ldZ1z/HaNnK5IROVK5CbpbPLayouSzyoKjYUZIyHqZDRhSMDAZH3Fh+fv84D0Sl0wKyPg67Ug70vd1YV56+6OhloFbdGx5AOXUjSUe9heuOzfjNM6hWiWxiIJh4/AQ4qbaErCUX1WuA0SYEin0rKtMCsCv9baXx6qmPdqOUTHow1tuISKRYlRxXjIxMt2yW1zvg19PNcf2hXJlj+I2J026o5Umn4DUCg2qRc5O5avNYZZQK0DtIetqL38yJvB1ydqW3pSi51ixc4YmkpmX57jG9k7aoInXl4rXAY5fvhD7HKruohnLl+TunC46Mm4EH2PUTQe1Hr2SGrrOnZKoKq49TZ/wKiTY3CU02uXtyNjQKsyXqJIGZeOF5NGbwt4PoPSFwqqEg+9r/HpBHNA0xP7VWPh3t7xUsBvCX3b6UeeZyVNeJW0pC41uisEFpR9ziAa+PHMPH//5y4g6BmtdA8EyCu8j5tcCrBkY6t3/l8Ta265wtPqIQLU/yFbc2bZUVtb+SeUnBbsrafbM7L6THZURxVnb79w1N8Rg22Vo6uhyBPB1mWPk35i89O2UHYAYFssci4oK9Le8ej7Gp1hZADSTgCg/c0wajjLqEPcRI8KN5cJe9LJFls44PUfpeIUGb8XlyRbylLYl9bi1OZC4B6jQMFwaYnX3r7+cYLXQLQB6KXMS8eATEERtb//c/aePoIIZo8IT8dHvZWiCEe5HIDODwmSENXUlG39XIqiVABDlKcUddpmzAUOt0PmRdTgeQjh5nwcw053qT+rDoW3AwFVkczgj06VqoKCpbzKcUEcZgED1udry2vWZnJtkTl6LAx7HxUqYrt9phVR3/XE+3nCkDXeh2e/y7FJVHvBmBjlxrvi0DtWnESunXHM43P4cE2hgbJX+PTCHB+t3J1mrzMEbHg8CDkCTjnxpzvBIsG8i6Z2Rf3Jtn7ibn1qbQ94nuJ+fWplj0CfMoMRPBK+K27MkFoKKA5KbK1n7uWzU5Zlo5qrX+fRSz4a/9fBnv6+MvfcxL7CfgCSHs1rPKvPqBPGjHpZwHhxoD3pCv53O8f0gNeLKB0677MHTn5fKyjCvH+ovZ85EqqRiZOZCf8UfHF7GwJ8esqXs4KzIpfOJITyF5ioyrtF8A5hiSha/DbOvk6Ey0LqPMlakKaYUOdyzIsdEd3LQl3oBQkIos/xWBHlAfJc7DAiUG7ux21VBBTIEQQ6UEt5hpxXU0Ymo7NAIq75NYF9c+LueH+B8lPKsYXxQzcnLFG2Nk1s9mQ2NT1o8Vi3Bi0WyK9Hl3fnblZeLo6H1ddT3V8KDqvPnKU9tAwIQzU6v4O44JszpfIyrWt2mg/5Vv9A5PHaCfmUfJrr6pabUd8VLf21/reR1ypc6hwc5qgIZtHa91b1TUEM4Z22YSkbPPfs1eKeNIEa1c32tU2LHU1eg/xtcK9xyBLbi40epxXvW3zQuGIjpaAnub8MFNjV7UC0wIum8qzzXVCSejocBClKjaGPTbKaSwLmMFgCobfeo109liZT7zOM080PruYoKMSXSRyh5gRia0FsTBNxvyNBzH4mYnaL/5W/wzNTNIJQlYs/3RgvelK/nzRP6mJ7vSpU9pfNE1HW2ZwRW+h6bZrSl0X0whRrVmxeiGapFreDA3z8BI6ACdZSW8W06/EXr+G7hLsWmLPHRrDjEaEs9lZaW1EVkUt6lNh2Fr8tiFk7pm07vUeg2XQvm+sc0zEBHYDW7phxlUfGp3ELrFxfM5gHutCaqWSJqjIR2HjHqTmpIVO8QAOAVlCWHfacSrD+ZFItiq5qiqrwwz3fhD1rdx1piZktkEcXRDJsGSE5VL7Yx3N9d0V0aCgIR6+lQfuHZ/si//nr9qh9DCMuEqf1K7/g0Q2zaeM0DF0cAcexq8tfCrpKd9aRubKCv3nvNb1ojZZFVhKjURhYTTBBfDubQ7TFwFji+xq4lnZ3ehqshbf3GYQtIWl5raQLtX71xHaSzZENMadUQUDLpptIGrOkSbSJkUlkS0mXOGXsFjc12Y7lAibOAKltTSGiFjuga+QOc/Ik6qOVhKAfb8qzeQneXorhrXgstQYzg8ZzgFvYN4f5rPUs1/oMdHKWRieITrt+vJav/aLbdMGRZNIwdoUdYmd8XPlSMNi9eVf23HL+Vry+WyeZ4oNuxig41tCb1zjhDPzjtFVgIvtJNd/XNrZ8XXMI4lftweUrvxBkrn21/xofRvvyFC0+i3Pt6/1X+whPszF6fy43nbxjxWnxI3tRLGD3rCO3T+o/7kbu+LPMZKe1XE3lpmeTl9J0EWpx+ymSBGpZPXWQ+33D5Ev538PkdcXt7rVeePQVACc+BtZ6hRK47I3jQQDDihRhIXkA6axf+izoUw3d11nfD87Un+x+VcJOicmNJq0cqWc9YR9BsScswiCU7LgjEhHAISxPEkFUZzlUuILDCQPjwWFFA9txm4jyTWQ04roORVVnte0loyuaGZlt8Qjq5MmgOw+0ZzfpZaEtXF+s9gBfXh7oednJG5v8YJMmKqbaEokVG0EpbQEAn/imDgSB6qYpW3lzChToxyiHZeKnofK3WJEjuBFIfF4rPgJe9Ub1N79PSVAFTp3G2WrUO7UVkedXhDsk7nn+HdEkKFbpcQdb7ipcdW9QFi8O6TwtWM8G59NK/RpeNIh7x9GarArSEzTZF+e6Z0hKsawMsOTXQCpOBf7I9lJtQ6D2tInFytqxFYPRiQ8cdui9cA6VYxGVGcPhlQGTFSetLth5yQKiX/SRZfPopqHLgQ89S9C5fTb4DAve7qr02mq/8SENPDC6YwnwOp2nV9+IH/y57Cdt6wbLJMGK99qRD0f5dH64kO0p4aw1DUY7s+CP3sriZ8WsF1kkdRg/dY+jDo1KmSqTjbi/ZR+i4N3ohdgmKz1CYqXittR9+ZxGPQfZoCDC79TDwfEEKjZXoBIiYxEJLFMKC2NbP7jfmqzSrEdqpR8HbWlhoeLU3XBj7stAB72vfNepLkeFNKDzUXJ0zt2JOhtCZ3jtUtj2xZAx2QWSg/j6e5hNWLzwtlhFftPMtXTqIB8cRUVD2kk5gD3qDiF/jZNNPTrf4Ml+mYsitNnT97LPGM0/v+5/EIJ4It1DNDfqzeDaMYJ2sR3KPNQeVCQfsKpNz1tY8I3dIqG28RvfNAXAzawCswPajv+GpsDKC8rCzTGa8Al7SFPf2FdNxDfq8eDA2BrSfnOkAYNSsyCmqzl0OJ5plFr58Ztxm5qfCzhwNpQWs1cBfWlXxOvVZMxxNTVqHX9lxAPUquF/1NJTnaYKSa2LUWpdCMuTzprgaeu2i1VP0iWCD0xyeBA4uwzOio5CBQKL/J7Kps+d3TplrfZYIW0AMdLDPETDW44i+Q3HxS17XmWshd6AwrvA9qGpAiFzCezaQDwNqNeD5iHd5Vl/0w9qFGgZbM0f1hLhu715pVB1dRFhL0yjkgOtzvGtM7nEsqBjc5uYCaFHZoSjWSKIi1M2Qx3gAatr21ZehWzymzwJPCL3Tj0XGT9xHdqohwK/XFVDyd4SVP605Axmd0yE2Jhvw5I0gXuA9CTaHgigGS0jbctUAItf4S//HIBCZ/3l8aWnpzcYUUjb4lfXZUqUn7MEuDcaKPBL8cBOkhxLKVd3ryuUW7yEl2SuOcm0qOM+nyM07RbmqILprgFOueQM+UXro+5StENMtNfIoO35gmzgN3Cifb7gxb//n0ocTcGRN95rr1YWxNafORgWNZr1pDB2MwHqc/m5kNfsoJu+DXTcJWXpVKelQkrSmSi2zkdkSWddaGtdaZcqEwuPIDD11To+jbfteMc/W6eZk3twApVmhmc4EMQjaQdReadeiUogEcsb9XJw6flj2VkFEImFjXohsF5eLIitPC2N8g2a9SQ33l2N7hW9apbb0jWgaTdtUmxrJE+3rTPzAXm8l1vbV7pBVYrx/icc6h+6tgEuqOtOUGpggcdgLcyeCMy0UJ8x0zagG54l8BJZi5MJ3YmBPshaWosPxCmcrpq2sUrdOWIURwhTxqno1beAHcG7KwOe2IW9xNIBJ8LHJwVZAN8fsaQvgG1lCPl68L/GJqAdSSZV02j22V0Q96aNRNGdehEKRwhSFqSAE8+zoDwRy1EFZMhomAF0y4cFsdXPSENCnWov7aq2hKPM63bYzt8YteJ8fAS1Xq5uRukZWUiRcEvqalvqFKq+rWB04NFFJvdd3gbfZCV3KoZ3uR8zopmjJvXcdRkrbQHa5I+8kkfwu1IGQs6XDNIc4y9B4phDDf47Fork2T383pL8gZ6sQ01+nXHydNXl8L7jWYTWZUzdlNHtKipyMIN/Jpq/S4U7m+3ETmgePEqeA97FSDit2vKalGK9wReWL2tRIHAkimcB35QkXH/QPvGNgUCUdIBKtXO8bfaO4P2AGXLnjSfR430LKhv1SmR/DaTOpIIDNwYs6GwBfqhBZqOeCfj4GZsNHSH0/tc46SQgHo9bCXs+CrTG8cmlfdO0VaaJiuKNe+jLQTjHhUUSAzWrgfVw/n6DsB7CXfRh1A2ioYP95bpFHCd+Qdd61NK4Iq8/mO6XiMtsWDUHgBoK17SsnvrhE4Q1FqPTy+f3Rrx2m5r9pSB/s5+usZjDmsbET7d0lI4y5D23ZFIhZa5kboLOt11bOSopQD3uhQSfBXpZmZzgTsaQF8COsP59BpxHCq4hfGCMo8LAt2iqDzNY1aj4afPUDeo7GjFyQuZOv9Uq9ork1ll0s91uTnDJUPIgP41V+K2ieHkO6KQ+YxCcfx+j82azHLEFr0CfDIz47HAko255mh/rMuXmywZwNhSW0reALtmtQk92RUp1VboZqlOz8Zbqrm1i52qvVJdwCeNDDyH0VVcXwBXJqFzFuGV/mYfCzQvH972OCjOrp8kX6b6kmka9Btx+3JKmO/UmMP4PuoPZnVoWkPXai7rZJEjJ103J3bNTkzPX2vPUSyhjxhy8HKarXZYZFiY4ILddGqkyBFtiBN/JSco4yWqT1csQSJ4jKNkkYvJMJINeSD8ucMdVgXwD4lcU+hnUdr3ZrW6ILRuixoz9waMH51cFzxQJwRPfbXE71B07rmTkjxv8UospTFhtXcGZmnd+LisGsnDTptPjqrUMEiccoelkISmzWEMyFOgPJkkE+dqaNedOvDTZSa4Spt8cnPXgB/S4t/TLNOSj2szym+NbtALWLyrhqEF2OiaIcADkAjR9z5ey4iJIjl+M4QREZts1fF+Fr3tK49YKADQNsSC29vJQXGrMLrqpn80FCJoDspi58sbzDpq01x1Lg1xCe4e6Epdzh7yBfdeWwFWnpXTZ4NkVmqxwbubSzsHrZE+6ZaawcQkVbpjeSUsb9VIM/kZT79RTAVD19WWn4NyNp1u7pXZYu5DLFvKH89Owx1Od51zHmUv2Ne52Up20csnK8sqa2HIqOpFUr5/dcqwxbq5ATpld42MClLSvlt/+Z3fQ9forsQ+Dj+PDD8e51VmcOyzSdAsV19xgo7moZXXqpsWFTnU5lFCnSN/yCodEACFM4ZjNS1SVgqX4ihRkzEHg2VkpC5DqA9JoRiu2s6NdFdSl3FyZ16xwyVqbxx2tSFDZPHQlSkrmo7KUqyZ4WpYXi6Ev726joDA6uwKuc2bueAdmJcQ06dyZXXxqs0baBOyTv2LO+UImm+Pvm4ilUqfZAvczhVV3RkviE6eOZNEsMJb0XWqO4Fiv3rJdIyjWuEheM4E84b14De9c7/sNhIgXTGipG3BeMSJC3r3vfb1kigMQCVo0UYQP3SqfAsxvGNVfFy6hEy1A8fvcoD19BfYke0SV0j636AlEcTI6C5ELC3TqVycGmcAnRM224eskbaIhDKkdAXQox6YCDZ4euwCZji9rsMREKvmL+1xuibEuKEfmE9VyoGYTuTE6j7q++qqkEO1yLc6aM8AgmbJKnEoROPWWHzuA/7fGvjGOCIOv09KUiLIFxQfm2lSmpXKT9IrapubJXU0+op9K6ZxpO70BtFVE1pgNlMyphSk+A3SyMj3G9YY1O4BtnfoV1IffEbqKyWsp7pDbiV7yizPcvL6rOVnySmjjj0Thmzk+lWjnsUSeyZ8za8pREy9s3tjEW7jBpyOZg8hIT6MZP4qxsccOPp0v1rtis06ookfECq/d5rEl3P/BD3KN7f+Ulls++IqjGiLTrgCjcLZVQs8v5Os82hPYl5mUSrV1tGqwu/GujYXMhfOJ7HIfttjLXjANYFbdL1GNtdbq+94Q9Db3MYVTNYqByMos4XF7krSR+un9hCNX7zFU6PBwc+ZtUrzPz43R+ZbrK+KpYIoGWRkeaZBghRCeSQZ/61H8yJUydNgfXkQIeJQyQCMoQ/VTBQX3SYkzlRun8z3XVk5KClG3Vk3wadA9U/2eOPNKsCdi/oyFML2frmG8bzwsA1raSmXbB+Y6YqmQf5U/JasVnNcGYHP5E+AzTeGAdXay7V6Dvmv8Lc8SC+lmFE16PNIOy9QWqpTGUCngHsOhMAWiI0YSVdk3q1vkDvFA/5pEsuywKDHLJ5WMeT2abs7/WFD9R6WWh/Mhxzg2eGK4hVS7y/tAxPNa4pEwJHqvnFRSN0GF/P99hlV7ylbZLRdFFJSFJiirFCJ1LUtSP3iQcGRW5QvVmtlQvUVlajI3TucwN5ZfU6nTvZhqM7YaRU2OinvSihXA9nb3ui0f/GWV4EPDHHOiV/ykAn2LimJ1WtEAFdpcboou9F1bOiMpRO2e8hxLAI2ipsbEHSHJKEBHE6moX/D/wlWE3zDEUSeAebA1FsuW54sbWom6T1d8RQ7cuSWRPgB+D6zkZrLrS87GncT625OPNATgxBvuhFAt9RuoAN47A0RHvfIFgTRMSQqt5ZEJa9w+K0CGct2wdIuaos2LVZU+5uQZtHd3oH9YFky1Bcu3AWpKwlinaAzKT2MH3Rk7SUWaJIvUFE2CIYWedLCxyXANz68XJ2z36fzTI6eCjlCv2bPNl0oRsXOODB71Erq099Q+4F+Ogr9Vf75EV+a6TrsJzJqi7PHpWEEB72weXjkbMhP6ByXy8kZly8cu3Nq0r3lbyEmouAQcb5nOE4pog91sYK79+mZgXaf7DJm+sRi2qcQFOJeQ3z789CtL7PaykPhZlwnd+5QPCsBhGFoMl7tgJcLs6onReUStd9qNvmPPGlruNWL7tflA/DXY9sfcBxeEk+2ExvbeHvwDfhEGW0BPNn4tXbIWkYb5/hDNe34+EKdjM2NPbv/r7nfo49FQBIKIZY+odAUnsnZ7EMccQbAdP4c2YxTl0QtfSPWyNhwbikPopC+JTv/GbcqZnd0ofZZU3NNb/Fr+E2WSzno41vsQd93KgWLLd/RVBy6XLj+cUxgX9rtcYNhvLSG0wVA0furT1g6ZGfs2vAfMVFGT3ZKhIL70qQNzpXIUknCmoyitu4WwYX19qEDdfXcoHT/9JVef1ondhzsfnEpQIhY7mEE2+NMzdyzfjFPAVMsp9ppmr7hb3pdqpegzfIPFMNIExVItYW++GJrniiv261fmOfA/ONP9KD7thHT22mX6K1oQ/aGDQxzT1RTI0Z7EUrFZwd3TNu7bmH9xbq9yF+q1YL140zkhqqtlRYUI3ou6f8fc6/O0sy/2g/tEuDkc5rNOWan0a6/ZkRMCvIa+32Qwx30U/d4REPEgXsgD15tIPvDoT83mb796QSeZog6XOyAShN64BSfJSuwWOB91h/LdA/hC6v6+RxDX6RpV6vqRjcEuJ076zDB64XTidalXcpWhbnAO44DbAZKTNxDtyr1bb/fa8azF6sMRBwu2o+YRVg0dlEfPORqymnx43SoBcHsXgfiqpTBefvHxmKjR7MdauZdyqMVmYLaLndvzKbimXDqgqD/uRIXlK8dwg2tH36vrZcxCAT+wZwt/EcXvHe9781XsIINIKqDm0AuKFO2t6xx3GrwBGxKJStoWtUmP7L9Q9AJFN49EfY2kEBjpAXboDJHoUiUG7a2l0rOXLL390rOpw3KIapRe4/OLY1Wx1UNVFQMwXBqn8dcI3pyN9/o6cd1oDfDud0xesqwf+mHqFeagOge9aVJSdKWdMSu4tzKlEwqhZHrcYCmS45zCtyjeU18ZNgl8gW5xJWDFeC3DCVRRuOt9irdLaS7epZ7k0BWDLXUKP+ndNbydIrQ8mgACjytSIvgxPtpjicynuwVy8zxP0p1D0MX+zulvWwkD+U07rW2n6Bl7WznY9ZBT6cqGpZNVluey0zqqKu+96KZn+IQ7N4qQwuLLJTlFzfV9aZeCAvwP1fND8NgD9gcu1TmEiZsCG54Q4g5V5opbmgxZRDTp0LTzaT/bEsFSoXfpqAzyOljvZxidcuzcle3QSBTQhcYQr9OGhBE2FYXvRXlXfXomUAxRnPP2/8xnODR70VawDp4pESqfC+L2FWuIVBgxLORcMN08c70fNqikC9CWUTSxcJLo3ArK+MsfeZC6Oobf0JhNf6yhJ31ljuMDWBh3LZSkcQC+Wt1CPRqegd7V3+i3bSi6ktq/ZVV/Pe2IMgJH0RubmKzi0uK4BHrvIvAiASuqSimy46GTkE0+2gLXs3HXu9XMf3pz5Ddc6R4k41u7t13jQloEothKbqPfICKr1KL3NDs1PuuKfRk2gZOVH8IagAKk8D+EKcmuLQBYN2b9CX/zGjPW398Z/j7MATMAAIlIyMfMQ0ZqYD4Cw3+Ih+eUtDpIv3m3o3cHPBNwh55k9BVHyFaMZk4NWnqGAnskIQvcGc6PwV8BANAllEaLyA/twCWQjfylUEK+U8cHS/3n3cXnxHjwkd1PGoBwDobgiDsHelDJzB0mEh8sFGEAwOkAr+bNzu//5f7SMlfTAox1x/AxbuyyWOLkKLFIl2388Ggkc78HHNxn+81YN+5JGuIUnQ9YJUdbjsl2UWBB8PeeNxN/hg6K/XvskNiB2OmQP/RxGMWNjauLo1I3w/5wNvxbeLv0+fHzk0YyH43nJvdP+alm6JQvJpWvxt6PNdRj01vTf1IzcSxjUeaLxOfJfOqS7M6ch5Ub2aXsSpbLlnNXFBDKvOJSZK3YONSqJUZlG4mlRC9xORkrXi2/O/kFxcElI0tOKhLKXmVANabKqV5Xbaw6XbODdob2fkfFUXPurWO6f+gG6ibppuqmt4xoKQ1c4v01jpHMb6isUlzfNxJ/rOu8v3NgN3P4/9rrpej5uKSVgqX3SynOx7k5B6dwMtfFdXLt3CGdszr/1n5ba3v7hPZhbb31dn04tW3XD0k1iZy/s60PX2MdMvY3/s/IDF+6DaZkvt+9o+EPht/rP3F1GsRIG29xHee8lv53A2xutFotB9etZG7Siuo3zXPqEbPZvHfNf6pLTSHTcaY/fvaw4QV9RP/f/+eVz2tX0ziN0pn0cdWWsn+UkbLfSJ/JSzJS/msxX+SKoeJ4MVJ8tD4t/bpgLDykHVT/b/299X+Fb+f/v+WXlmHZ6dOr8zhxb3w6qo1qooeFrJAUvIJROCmciLqjt0e8OvKrJbEZnnl/b8hZ7txnP10d3vrnfLj8m4CXb4h39/d8N7fxMlj+L+f7cL0pCohLzTL7/3fL5Kt/+f+NkV0Xvx3M7wERjYpXwEYgBZOliyGQWBDxUfH18VviHHBLDW/QkIgk78E93ZIR8xqgS8cOink5gP/i4JiwzRJCXdeG3RAjoDiSRaN33USUljXU7CZNLRWJ0GxIOx9ywE3ViGEbrCyNE10eusEDBTvmGTTcxNKD0qoOPt2yR0JS6VjhKHEG0ohFXMF2JFyjd103G38fBToAgO1Hp+aCaOnAQTA0B2NZUycQN6G4sHbuKRCzb0Dr0YFE3nYQml8cTOX/OuHoEGkRdShDHHSYvtjmcKTk4YjxGOp1pFhOkDky5+JTjpr6kPs3oHGu2L8gKf0pTSN8dR0ww6Z/cdO9nwdlpWU0YD6WWfnl4C4ixzjpRZwqqJWuZqlpU/0sRGyYClMtoSTQt3lTNFVNK8rOPolnEirynfs5bAE2j0EsnRJT3XRCtULEsPgIBpdhxTjAdIAGlS9cKibetSMe/XAog5W2FaPyaVSyzbMkY04LdQkB4cFP8uTN4S0siEGiqTzyaUslwMmcDHDyZQsG9WSTAdIASwQ6PDchKaqXFraSY4CGTr7SyNaNlt5rdQIdWJhxNHWHJ8dMHkDAgK0LjVNnlcqKA8gN53Air2qwx53qhtXD4cWxh3ZaL8+7MgFDiywgCUj7eQ7FIw8CoSVueHRr+AHt6jOgRs9X8CTtCAKbniZbyRsaoccBvprVpxHkdZsWbKb7qtBn7zSoy5gBcAWlc9t0DOOcgGD56h0BX3UKjjDpEA2WQ3RgJJY3/lOfXqjwL69PxOZ8r8Abgb2DcqCbHaoDzGdDJV0qhsG7NafXK7OJm3eQ6NYI+eg+8Hn26/hbZ/dFLz4nUHIpJvaGb7vn7/ts8YCImEANEjMpkGKEr2RMLqckXOSD74C5HDmROBDthWUxLJEYRuC9WHB1vXToDEI1gbIKNWc8YcVOJeGsBIlOMpCNdmnOCQqcylMGxGlRWiCaELpEYkfhOw+ULvFj7Zqaogr+mMMl19+fPnn5AI8oNrYsjuxcqmt2kkk2qwdoVTZhhOVQnUOqqzgWcJP0Ls3XXkjusQkzPFE9isBtlSZqUdT95pQEquyYQutoFKkIg3u/HbKg615/xCreCFDUmWrLTx2RMfTI3Zn149mDeBA/SPf0j5toL2ZLa7WHorpUuX006uge0qWldds8tGZQUV3twKVDpTa0yKBPgFJDldbiZnppzgN5MP3Mwo4ygCeCTkpNa0ruebgW4F9Kl27WWFyfCZ9cQLWpJtxdztDJwcBnBoFWKAiBZvXvQ5RAprnW6vJj6Wh9SQFTWgQttpGSUqqqdGZxYEPipAiYbDtnGkTbis1z8Anxwq0ZWMDcHGw0KFL+Y+Rsl863r8EsuxbnnV/1+z9lwV36KevdQ5OR998CwEOA0RRLgB7dWm0TltYoIrfqKh6gFtODz6NxEtjd4kgun6FVersos5qV2CijieQD4MUzSeBSiL8t23VuJYX1ZnLt7Ek3YBgm5YlicYSZEGbESaCYOC0aMZtg3ET56PHFFon2QPxjZHQgDhq3zRxK66JuKWW+mMdihjFhs2YeBwA=";
2418
+ var TERM_SPECS = [
2419
+ lichun,
2420
+ yushui,
2421
+ jingzhe,
2422
+ chunfen,
2423
+ qingming,
2424
+ guyu,
2425
+ lixia,
2426
+ xiaoman,
2427
+ mangzhong,
2428
+ xiazhi,
2429
+ xiaoshu,
2430
+ dashu,
2431
+ liqiu,
2432
+ chushu,
2433
+ bailu,
2434
+ qiufen,
2435
+ hanlu,
2436
+ shuangjiang,
2437
+ lidong,
2438
+ xiaoxue,
2439
+ daxue,
2440
+ dongzhi,
2441
+ xiaohan,
2442
+ dahan
2443
+ ];
2444
+ var INK_SCALE = 2.1;
2445
+ var PAPER = 0.15;
2446
+ var MIX_S = 1.6;
2447
+ var CHECK_S = 60;
2448
+ var WARM_DT = 1 / 20;
2449
+ var stillEnv = (view) => ({
2450
+ cell: view.cell,
2451
+ drops: [],
2452
+ height: view.height,
2453
+ maskAt: () => 1,
2454
+ pan: 0,
2455
+ pointer: null,
2456
+ time: 0,
2457
+ width: view.width
2458
+ });
2459
+ var createJieqi = (options = {}) => {
2460
+ const firstKind = [];
2461
+ const ramps = [];
2462
+ for (const spec of TERM_SPECS) {
2463
+ firstKind.push(ramps.length);
2464
+ ramps.push(...spec.ramps);
2465
+ }
2466
+ const EDGE = ramps.length;
2467
+ ramps.push(["\u58A8"]);
2468
+ const table = glyphTable(ramps, TERM_SPECS.map((spec) => spec.loose).join(""));
2469
+ const fixed = options.term ? Math.max(0, JIEQI.findIndex((term) => term.id === options.term)) : null;
2470
+ const follow = fixed === null && options.date === void 0;
2471
+ const pick = () => fixed ?? jieqiIndexAt(options.date === void 0 ? Date.now() : options.date);
2472
+ let view = null;
2473
+ const cellOut = { k: 0, p: INK, v: 0, wet: 1 };
2474
+ const start = (index) => {
2475
+ const spec = TERM_SPECS[index] ?? TERM_SPECS[0];
2476
+ if (!spec)
2477
+ throw new Error("inkpond: no solar terms");
2478
+ const live = {
2479
+ clock: 0,
2480
+ index,
2481
+ kinds: firstKind[index] ?? 0,
2482
+ term: spec.create({
2483
+ glyph: table.index,
2484
+ rand: rng(index * 7919 + 977)
2485
+ })
2486
+ };
2487
+ if (view)
2488
+ place(live, spec);
2489
+ return live;
2490
+ };
2491
+ const place = (live, spec) => {
2492
+ if (!view)
2493
+ return;
2494
+ live.term.layout({
2495
+ cell: view.cell,
2496
+ height: view.height,
2497
+ width: view.width
2498
+ });
2499
+ live.clock = 0;
2500
+ const env = stillEnv(view);
2501
+ for (let t = 0; t < spec.warm; t += WARM_DT) {
2502
+ live.clock += WARM_DT;
2503
+ live.term.step(WARM_DT, live.clock, env);
2504
+ }
2505
+ };
2506
+ let cur = start(pick());
2507
+ let prev = null;
2508
+ let mixAt = 0;
2509
+ let nextCheck = CHECK_S;
2510
+ const readCell = (live, x, y, cx, cy) => {
2511
+ cellOut.v = 0;
2512
+ cellOut.p = INK;
2513
+ cellOut.k = 0;
2514
+ cellOut.wet = 1;
2515
+ live.term.cell(x, y, live.clock, cellOut, cx, cy);
2516
+ return cellOut;
2517
+ };
2518
+ return {
2519
+ fontFamily: JIEQI_FONT_FAMILY,
2520
+ fontUrl: JIEQI_FONT_URL,
2521
+ glyphs: table.glyphs,
2522
+ moving: true,
2523
+ panSpeed: 0,
2524
+ ramps: table.ramps,
2525
+ compose(grid, _offset, time) {
2526
+ if (!view)
2527
+ return;
2528
+ const { cols, rows, cell } = view;
2529
+ const mix = prev ? clamp((time - mixAt) / MIX_S, 0, 1) : 1;
2530
+ if (mix >= 1)
2531
+ prev = null;
2532
+ for (let y = 0, i = 0; y < rows; y++) {
2533
+ const py = (y - 1) * cell + cell / 2;
2534
+ for (let x = 0; x < cols; x++, i++) {
2535
+ const px = (x - 1) * cell + cell / 2;
2536
+ let live = cur;
2537
+ if (prev) {
2538
+ const m = noise(x * 0.13, y * 0.13) * 0.78 + hash2(x, y) * 0.22;
2539
+ if (m > mix)
2540
+ live = prev;
2541
+ else if (m > mix - 0.05) {
2542
+ grid.ground[i] = 0.9 * INK_SCALE;
2543
+ grid.kind[i] = EDGE;
2544
+ grid.pigment[i] = ZHU;
2545
+ grid.wet[i] = 1;
2546
+ continue;
2547
+ }
2548
+ }
2549
+ const c = readCell(live, px, py, x - 1, y - 1);
2550
+ grid.ground[i] = Math.max(0, (c.v - PAPER) / (1 - PAPER)) * INK_SCALE;
2551
+ grid.kind[i] = live.kinds + c.k;
2552
+ grid.pigment[i] = c.p;
2553
+ grid.wet[i] = c.wet;
2554
+ }
2555
+ }
2556
+ },
2557
+ layout(next) {
2558
+ view = next;
2559
+ const spec = TERM_SPECS[cur.index];
2560
+ if (spec)
2561
+ place(cur, spec);
2562
+ prev = null;
2563
+ },
2564
+ stamps(env, emit) {
2565
+ const fade = prev ? clamp((env.time - mixAt) / MIX_S, 0, 1) : 1;
2566
+ if (prev) {
2567
+ const out = 1 - fade;
2568
+ prev.term.stamps(prev.clock, (g, x, y, a, s, p) => emit(g, x, y, a * out, s, p));
2569
+ }
2570
+ if (fade >= 1)
2571
+ cur.term.stamps(cur.clock, emit);
2572
+ else
2573
+ cur.term.stamps(cur.clock, (g, x, y, a, s, p) => emit(g, x, y, a * fade, s, p));
2574
+ },
2575
+ step(dt, env) {
2576
+ const now = env.time;
2577
+ if (follow && now >= nextCheck) {
2578
+ nextCheck = now + CHECK_S;
2579
+ const index = pick();
2580
+ if (index !== cur.index) {
2581
+ prev = cur;
2582
+ cur = start(index);
2583
+ mixAt = now;
2584
+ }
2585
+ }
2586
+ if (prev)
2587
+ advance(prev, dt, env);
2588
+ advance(cur, dt, env);
2589
+ }
2590
+ };
2591
+ };
2592
+ var advance = (live, dt, env) => {
2593
+ live.clock += dt;
2594
+ for (const d of env.drops) {
2595
+ if (d.age <= dt + 1e-6)
2596
+ live.term.drop?.(d.x, d.y, live.clock);
2597
+ }
2598
+ live.term.step(dt, live.clock, env);
2599
+ };
2600
+
196
2601
  // node_modules/inkpond/dist/scenes/lotus.js
197
2602
  var LOTUS_FONT_FAMILY = "Inkpond Glyphs Lotus";
198
2603
  var LOTUS_FONT_URL = "data:font/woff2;base64,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";
199
- var WATER = 0;
2604
+ var WATER2 = 0;
200
2605
  var LEAF = 1;
201
2606
  var FLOWER = 2;
202
2607
  var WEED = 3;
@@ -207,11 +2612,11 @@ var RAMPS = [
207
2612
  ["\u4E36", "\u70B9", "\u840D", "\u85FB"]
208
2613
  ];
209
2614
  var LOOSE = "\u9CA4\u9CDE\u9CCD\u5C3E\uFF5E";
210
- var SPINE = 5;
2615
+ var SPINE2 = 5;
211
2616
  var LEAF_INK = 1.8;
212
2617
  var KOI_SIZE = 1.35;
213
2618
  var KOI_COLORS = [ZHU, INK, ZHU, ZHE, ZHU, INK];
214
- var angleTo = (from, to) => {
2619
+ var angleTo3 = (from, to) => {
215
2620
  let d = to - from;
216
2621
  while (d > Math.PI)
217
2622
  d -= Math.PI * 2;
@@ -283,7 +2688,7 @@ var createLotus = (levels = DEFAULT_LEVELS) => {
283
2688
  if (d > 1.05)
284
2689
  continue;
285
2690
  const a = Math.atan2(dy, dx);
286
- if (d > 0.18 && Math.abs(angleTo(a, notch)) < 0.16)
2691
+ if (d > 0.18 && Math.abs(angleTo3(a, notch)) < 0.16)
287
2692
  continue;
288
2693
  const vein = d > 0.2 && d < 0.88 ? smoothstep(0.9, 0.99, Math.cos((a + twist) * veins)) : 0;
289
2694
  const rimInk = Math.exp(-(((d - 0.88) / 0.1) ** 2));
@@ -326,7 +2731,7 @@ var createLotus = (levels = DEFAULT_LEVELS) => {
326
2731
  }
327
2732
  for (let y = 0; y < rows; y++) {
328
2733
  for (let x = 0, i = y * cols; x < cols; x++, i++) {
329
- if (kinds[i] !== WATER)
2734
+ if (kinds[i] !== WATER2)
330
2735
  continue;
331
2736
  const f = fbm(x * 0.21 + 50, y * 0.27);
332
2737
  if (f < 0.7)
@@ -367,7 +2772,7 @@ var createLotus = (levels = DEFAULT_LEVELS) => {
367
2772
  const gap = cell * 0.7 * fish.size;
368
2773
  fish.x = x;
369
2774
  fish.y = y;
370
- fish.spine = Array.from({ length: SPINE }, (_, j) => ({
2775
+ fish.spine = Array.from({ length: SPINE2 }, (_, j) => ({
371
2776
  x: x - Math.cos(fish.heading) * gap * j,
372
2777
  y: y - Math.sin(fish.heading) * gap * j
373
2778
  }));
@@ -404,7 +2809,7 @@ var createLotus = (levels = DEFAULT_LEVELS) => {
404
2809
  if (food) {
405
2810
  const dist = Math.hypot(food.x - fish.x, food.y - fish.y);
406
2811
  if (dist > cell * 2.5) {
407
- turn += angleTo(fish.heading, Math.atan2(food.y - fish.y, food.x - fish.x)) * 2.4;
2812
+ turn += angleTo3(fish.heading, Math.atan2(food.y - fish.y, food.x - fish.x)) * 2.4;
408
2813
  target = 46;
409
2814
  } else
410
2815
  target = 14;
@@ -421,7 +2826,7 @@ var createLotus = (levels = DEFAULT_LEVELS) => {
421
2826
  const dist = Math.hypot(p.x - fish.x, p.y - fish.y);
422
2827
  if (dist < cell * 7) {
423
2828
  fish.fright = 1;
424
- turn += angleTo(fish.heading, Math.atan2(fish.y - p.y, fish.x - p.x)) * 4;
2829
+ turn += angleTo3(fish.heading, Math.atan2(fish.y - p.y, fish.x - p.x)) * 4;
425
2830
  }
426
2831
  }
427
2832
  fish.fright = Math.max(0, fish.fright - dt * 0.8);
@@ -472,11 +2877,11 @@ var createLotus = (levels = DEFAULT_LEVELS) => {
472
2877
  }
473
2878
  for (let y = 0; y < rows; y++) {
474
2879
  for (let x = 0, i = y * cols; x < cols; x++, i++) {
475
- const k = kinds[i] ?? WATER;
2880
+ const k = kinds[i] ?? WATER2;
476
2881
  grid.kind[i] = k;
477
2882
  grid.pigment[i] = pigments[i] ?? INK;
478
2883
  grid.wet[i] = k === LEAF || k === FLOWER ? 0.5 : 1;
479
- grid.ground[i] = k === WATER ? sheen.at(x, y) : base[i] ?? 0;
2884
+ grid.ground[i] = k === WATER2 ? sheen.at(x, y) : base[i] ?? 0;
480
2885
  }
481
2886
  }
482
2887
  },
@@ -543,7 +2948,7 @@ var createLotus = (levels = DEFAULT_LEVELS) => {
543
2948
  // node_modules/inkpond/dist/scenes/qingming.js
544
2949
  var QINGMING_FONT_FAMILY = "Inkpond Glyphs Qingming";
545
2950
  var QINGMING_FONT_URL = "data:font/woff2;base64,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";
546
- var WATER2 = 0;
2951
+ var WATER3 = 0;
547
2952
  var LAND = 1;
548
2953
  var ROOF = 2;
549
2954
  var WALL = 3;
@@ -643,7 +3048,7 @@ var createQingming = (levels = DEFAULT_LEVELS) => {
643
3048
  return;
644
3049
  const i = y * W + wrap(Math.round(x), W);
645
3050
  const ink = kind === LAND ? v : v * INK_WEIGHT;
646
- if (ink < (base[i] ?? 0) && kinds[i] !== LAND && kinds[i] !== WATER2) {
3051
+ if (ink < (base[i] ?? 0) && kinds[i] !== LAND && kinds[i] !== WATER3) {
647
3052
  return;
648
3053
  }
649
3054
  base[i] = ink;
@@ -774,7 +3179,7 @@ var createQingming = (levels = DEFAULT_LEVELS) => {
774
3179
  for (let y = 0; y < rows; y++) {
775
3180
  const i = y * W + x;
776
3181
  if (y >= top && y <= bottom) {
777
- kinds[i] = WATER2;
3182
+ kinds[i] = WATER3;
778
3183
  continue;
779
3184
  }
780
3185
  if (y < rows * 0.3) {
@@ -926,7 +3331,7 @@ var createQingming = (levels = DEFAULT_LEVELS) => {
926
3331
  }
927
3332
  fixtures.sort((a, b) => a.x - b.x);
928
3333
  };
929
- const spawn = (width) => {
3334
+ const spawn2 = (width) => {
930
3335
  const rand = rng(W * 7 + rows * 13);
931
3336
  boats = Array.from({ length: Math.max(6, Math.round(W / 26)) }, (_, id) => ({
932
3337
  big: rand() < 0.6,
@@ -1011,10 +3416,10 @@ var createQingming = (levels = DEFAULT_LEVELS) => {
1011
3416
  for (let x = 0, i = y * cols; x < cols; x++, i++) {
1012
3417
  const wx = wrap(x + offset, W);
1013
3418
  const j = y * W + wx;
1014
- const k = kinds[j] ?? WATER2;
3419
+ const k = kinds[j] ?? WATER3;
1015
3420
  grid.kind[i] = k;
1016
3421
  grid.pigment[i] = pigments[j] ?? INK;
1017
- if (k === WATER2) {
3422
+ if (k === WATER3) {
1018
3423
  grid.wet[i] = 1;
1019
3424
  grid.ground[i] = smoothstep(0.62, 0.86, fbmTiled(wx / W * P * 3 - flow, y * 0.55, P * 3)) * 0.34;
1020
3425
  } else {
@@ -1031,7 +3436,7 @@ var createQingming = (levels = DEFAULT_LEVELS) => {
1031
3436
  cell = view.cell;
1032
3437
  haze = coarseField(cols, rows);
1033
3438
  layoutWorld();
1034
- spawn(view.width);
3439
+ spawn2(view.width);
1035
3440
  },
1036
3441
  stamps(env, emit) {
1037
3442
  const span = W * cell;
@@ -1267,8 +3672,12 @@ var createShanshui = (levels = DEFAULT_LEVELS) => {
1267
3672
  };
1268
3673
 
1269
3674
  // node_modules/inkpond/dist/scenes/index.js
1270
- var createScene = (name2 = "shanshui", levels) => {
3675
+ var createScene = (name2 = "shanshui", levels, jieqi) => {
1271
3676
  switch (name2) {
3677
+ case "beiming":
3678
+ return createBeiming(levels);
3679
+ case "jieqi":
3680
+ return createJieqi(jieqi);
1272
3681
  case "lotus":
1273
3682
  return createLotus(levels);
1274
3683
  case "qingming":
@@ -1347,7 +3756,7 @@ var InkPondEngine = class {
1347
3756
  constructor(canvas, options = {}) {
1348
3757
  this.canvas = canvas;
1349
3758
  this.ctx = canvas?.getContext("2d") ?? null;
1350
- this.scene = createScene(options.scene, options.levels?.length ? options.levels : void 0);
3759
+ this.scene = createScene(options.scene, options.levels?.length ? options.levels : void 0, { date: options.date, term: options.term });
1351
3760
  this.strength = options.strength ?? 0.45;
1352
3761
  this.c2 = Math.min(0.24, WAVE_C2 * (options.waveSpeed ?? 1) ** 2);
1353
3762
  this.avoidPad = options.avoidPadding ?? 20;
@@ -1812,6 +4221,15 @@ var TIERS = [
1812
4221
  { cell: 22, dprCap: 1.25, fps: 0 }
1813
4222
  ];
1814
4223
  var STILL_TIER = TIERS.length - 1;
4224
+ var MIN_CELL = 12;
4225
+ var MAX_CELL = 48;
4226
+ var cellFor = (tier, requested) => {
4227
+ const own = TIERS[tier]?.cell ?? TIERS[0]?.cell ?? 16;
4228
+ if (requested === void 0 || !Number.isFinite(requested))
4229
+ return own;
4230
+ const asked = Math.min(MAX_CELL, Math.max(MIN_CELL, requested));
4231
+ return tier === 0 ? asked : Math.max(asked, own);
4232
+ };
1815
4233
  var BUDGET_MS = 8;
1816
4234
  var WINDOW = 60;
1817
4235
  var RECENT = 10;
@@ -2013,7 +4431,7 @@ var createInkPond = (canvas, options = {}) => {
2013
4431
  if (!t)
2014
4432
  return;
2015
4433
  const dpr = Math.min(window.devicePixelRatio || 1, t.dprCap);
2016
- engine.resize(rect.width, rect.height, dpr, t.cell);
4434
+ engine.resize(rect.width, rect.height, dpr, cellFor(tier, options.cellSize));
2017
4435
  syncAvoid(true);
2018
4436
  };
2019
4437
  const paintOnce = () => {
@@ -2369,7 +4787,9 @@ function createSettings(store) {
2369
4787
  children: [
2370
4788
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("option", { value: "lotus", children: t("\u83B2\u6C60", "Lotus pond") }),
2371
4789
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("option", { value: "shanshui", children: t("\u5C71\u6C34", "Misty hills") }),
2372
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("option", { value: "qingming", children: t("\u6E05\u660E\u4E0A\u6CB3", "Qingming handscroll") })
4790
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("option", { value: "qingming", children: t("\u6E05\u660E\u4E0A\u6CB3", "Qingming handscroll") }),
4791
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("option", { value: "jieqi", children: t("\u4E8C\u5341\u56DB\u8282\u6C14", "24 solar terms") }),
4792
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("option", { value: "beiming", children: t("\u5317\u51A5", "Northern sea") })
2373
4793
  ]
2374
4794
  }
2375
4795
  )