eyeling 1.15.11 → 1.15.13

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.
Files changed (50) hide show
  1. package/README.md +3 -3
  2. package/follows-from/artifacts/ackermann.html +678 -0
  3. package/follows-from/artifacts/auroracare.html +1297 -0
  4. package/follows-from/artifacts/bike-trip.html +752 -0
  5. package/follows-from/artifacts/binomial-theorem.html +631 -0
  6. package/follows-from/artifacts/bmi.html +511 -0
  7. package/follows-from/artifacts/building-performance.html +750 -0
  8. package/follows-from/artifacts/clinical-care.html +726 -0
  9. package/follows-from/artifacts/collatz.html +403 -0
  10. package/follows-from/artifacts/complex.html +321 -0
  11. package/follows-from/artifacts/control-system.html +482 -0
  12. package/follows-from/artifacts/delfour.html +849 -0
  13. package/follows-from/artifacts/earthquake-epicenter.html +982 -0
  14. package/follows-from/artifacts/eco-route.html +662 -0
  15. package/follows-from/artifacts/euclid-infinitude.html +564 -0
  16. package/follows-from/artifacts/euler-identity.html +667 -0
  17. package/follows-from/artifacts/exoplanet-transit.html +1000 -0
  18. package/follows-from/artifacts/faltings-theorem.html +1046 -0
  19. package/follows-from/artifacts/fibonacci.html +299 -0
  20. package/follows-from/artifacts/fundamental-theorem-arithmetic.html +398 -0
  21. package/follows-from/artifacts/godel-numbering.html +743 -0
  22. package/follows-from/artifacts/gps-bike.html +759 -0
  23. package/follows-from/artifacts/gps-clinical-bench.html +792 -0
  24. package/follows-from/artifacts/graph-french.html +449 -0
  25. package/follows-from/artifacts/grass-molecular.html +592 -0
  26. package/follows-from/artifacts/group-theory.html +740 -0
  27. package/follows-from/artifacts/health-info.html +833 -0
  28. package/follows-from/artifacts/kaprekar-constant.html +576 -0
  29. package/follows-from/artifacts/lee.html +805 -0
  30. package/follows-from/artifacts/linked-lists.html +502 -0
  31. package/follows-from/artifacts/lldm.html +612 -0
  32. package/follows-from/artifacts/matrix-multiplication.html +502 -0
  33. package/follows-from/artifacts/matrix.html +651 -0
  34. package/follows-from/artifacts/newton-raphson.html +944 -0
  35. package/follows-from/artifacts/peano-factorial.html +456 -0
  36. package/follows-from/artifacts/pi.html +363 -0
  37. package/follows-from/artifacts/polynomial.html +646 -0
  38. package/follows-from/artifacts/prime.html +366 -0
  39. package/follows-from/artifacts/pythagorean-theorem.html +468 -0
  40. package/follows-from/artifacts/rest-path.html +469 -0
  41. package/follows-from/artifacts/roots-of-unity.html +363 -0
  42. package/follows-from/artifacts/turing.html +409 -0
  43. package/follows-from/artifacts/wind-turbines.html +726 -0
  44. package/follows-from/index.html +549 -0
  45. package/follows-from/library/index.md +22 -0
  46. package/follows-from/logo.svg +12 -0
  47. package/follows-from/manifesto.md +48 -0
  48. package/follows-from/method/index.md +30 -0
  49. package/follows-from/path/index.md +20 -0
  50. package/package.json +4 -3
@@ -0,0 +1,456 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <title>Peano Factorial • 5! = 120 proved via Resolution</title>
6
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
7
+ <style>
8
+ :root {
9
+ --bg: #f7f8fb;
10
+ --card: #ffffff;
11
+ --ink: #0f172a;
12
+ --muted: #4b5563;
13
+ --accent: #2563eb;
14
+ --ok: #059669;
15
+ --bad: #b91c1c;
16
+ --radius: 16px;
17
+ --shadow: 0 10px 22px rgba(2, 6, 23, 0.06), 0 2px 6px rgba(2, 6, 23, 0.06);
18
+ --mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace;
19
+ --sans: Inter, ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, 'Helvetica Neue', Arial;
20
+ }
21
+ * {
22
+ box-sizing: border-box;
23
+ }
24
+ body {
25
+ margin: 0;
26
+ background: var(--bg);
27
+ color: var(--ink);
28
+ font: 16px/1.6 var(--sans);
29
+ -webkit-font-smoothing: antialiased;
30
+ }
31
+ .wrap {
32
+ max-width: 980px;
33
+ margin: auto;
34
+ padding: 28px 16px 64px;
35
+ }
36
+ header {
37
+ display: flex;
38
+ flex-direction: column;
39
+ gap: 10px;
40
+ margin-bottom: 22px;
41
+ }
42
+ h1 {
43
+ font-size: clamp(24px, 3vw, 34px);
44
+ line-height: 1.2;
45
+ margin: 0;
46
+ }
47
+ .sub {
48
+ color: var(--muted);
49
+ }
50
+ .pill {
51
+ display: inline-flex;
52
+ align-items: center;
53
+ gap: 8px;
54
+ background: #eef2ff;
55
+ color: #3730a3;
56
+ border-radius: 999px;
57
+ padding: 8px 12px;
58
+ font-weight: 600;
59
+ font-size: 14px;
60
+ width: max-content;
61
+ }
62
+ .grid {
63
+ display: flex;
64
+ flex-direction: column;
65
+ gap: 16px;
66
+ }
67
+ .card {
68
+ background: var(--card);
69
+ border-radius: var(--radius);
70
+ box-shadow: var(--shadow);
71
+ padding: 18px;
72
+ border: 1px solid #eef2f7;
73
+ }
74
+ .kicker {
75
+ font-size: 12px;
76
+ letter-spacing: 0.12em;
77
+ text-transform: uppercase;
78
+ color: #6b7280;
79
+ }
80
+ .muted {
81
+ color: var(--muted);
82
+ }
83
+ .answer {
84
+ font-size: 18px;
85
+ font-weight: 800;
86
+ }
87
+ .ok {
88
+ color: var(--ok);
89
+ }
90
+ .fail {
91
+ color: var(--bad);
92
+ font-weight: 800;
93
+ }
94
+ .result {
95
+ margin-top: 10px;
96
+ padding: 10px 12px;
97
+ border-radius: 10px;
98
+ background: #fafbff;
99
+ border: 1px dashed #d7dbe5;
100
+ }
101
+ code,
102
+ pre {
103
+ font-family: var(--mono);
104
+ }
105
+ pre {
106
+ background: #fafbff;
107
+ color: #0f172a;
108
+ padding: 14px;
109
+ border-radius: 12px;
110
+ /* wrap long lines inside <pre> */
111
+ white-space: pre-wrap; /* preserve spaces/newlines, but wrap */
112
+ overflow-wrap: anywhere; /* break very long tokens if needed */
113
+ word-break: break-word; /* fallback for older browsers */
114
+ /* avoid the horizontal scrollbar */
115
+ overflow-x: hidden;
116
+ /* keep vertical scrolling if content is very tall (optional) */
117
+ overflow-y: auto;
118
+ max-width: 100%;
119
+ }
120
+ .small {
121
+ font-size: 13px;
122
+ }
123
+ .mono {
124
+ font-family: var(--mono);
125
+ }
126
+ textarea.input {
127
+ width: 100%;
128
+ min-height: 84px;
129
+ padding: 10px 12px;
130
+ border-radius: 10px;
131
+ border: 1px solid #d9e1f1;
132
+ background: #fdfefe;
133
+ font-family: var(--mono);
134
+ }
135
+ .badge {
136
+ display: inline-block;
137
+ font-size: 12px;
138
+ padding: 2px 8px;
139
+ border-radius: 999px;
140
+ background: #ecfeff;
141
+ color: #155e75;
142
+ border: 1px solid #a5f3fc;
143
+ }
144
+ </style>
145
+ </head>
146
+ <body>
147
+ <div class="wrap">
148
+ <header>
149
+ <h1>Peano Factorial • 5! = 120 proved via Resolution</h1>
150
+ </header>
151
+
152
+ <section class="grid">
153
+ <!-- Problem statement -->
154
+ <article class="card">
155
+ <div class="kicker">Problem</div>
156
+ <h2>Formalize factorial with successor; refute ¬fact(5, 120)</h2>
157
+ <pre>
158
+ // Symbols:
159
+ // 0 // zero
160
+ // s(x) // successor
161
+ // Predicates:
162
+ // add(x,y,z) // x + y = z
163
+ // mult(x,y,z) // x · y = z
164
+ // fact(n,z) // n! = z
165
+ //
166
+ // Axioms (Horn-friendly):
167
+ // Addition:
168
+ // A1: add(X, 0, X).
169
+ // A2: add(X, Y, Z) -> add(X, s(Y), s(Z)).
170
+ //
171
+ // Multiplication:
172
+ // M1: mult(X, 0, 0).
173
+ // M2: mult(X, Y, Z) ∧ add(Z, X, Z2) -> mult(X, s(Y), Z2).
174
+ //
175
+ // Factorial:
176
+ // F1: fact(0, s(0)). // 0! = 1
177
+ // F2: fact(N, F) ∧ mult(s(N), F, Z) -> fact(s(N), Z).
178
+ //
179
+ // Goal (ground): fact(s⁵(0), s¹²⁰(0)). (where sⁿ(0) abbreviates n successors)
180
+ </pre
181
+ >
182
+ <p class="small muted">We’ll show the axioms plus the negation of the goal derive ⟂ under Resolution.</p>
183
+ </article>
184
+
185
+ <!-- Answer -->
186
+ <article class="card">
187
+ <div class="kicker">Answer</div>
188
+ <p class="answer ok">
189
+ Entailed. The factorial, multiplication, and addition axioms, together with ¬fact(5,120), resolve down to
190
+ the base cases and yield the empty clause.
191
+ </p>
192
+ </article>
193
+
194
+ <!-- Reason Why (Resolution) -->
195
+ <article class="card">
196
+ <div class="kicker">Reason Why</div>
197
+ <h2>Resolution justification (clausal refutation, sketched)</h2>
198
+ <ol>
199
+ <li>
200
+ Clausify the Horn implications (move antecedents to the left as negated disjuncts):
201
+ <div class="small">
202
+ C<sub>A1</sub>: <code>add(X, 0, X)</code><br />
203
+ C<sub>A2</sub>: <code>¬add(X, Y, Z) ∨ add(X, s(Y), s(Z))</code><br />
204
+ C<sub>M1</sub>: <code>mult(X, 0, 0)</code><br />
205
+ C<sub>M2</sub>: <code>¬mult(X, Y, Z) ∨ ¬add(Z, X, Z2) ∨ mult(X, s(Y), Z2)</code><br />
206
+ C<sub>F1</sub>: <code>fact(0, s(0))</code><br />
207
+ C<sub>F2</sub>: <code>¬fact(N, F) ∨ ¬mult(s(N), F, Z) ∨ fact(s(N), Z)</code>
208
+ </div>
209
+ </li>
210
+ <li>Negate the goal and add it: <code>¬fact(s⁵(0), s¹²⁰(0))</code>.</li>
211
+ <li>
212
+ Repeatedly resolve with C<sub>F2</sub> to unfold factorial:
213
+ <div class="small">
214
+ <code>¬fact(s⁴(0), s²⁴(0))</code>, then <code>¬fact(s³(0), s⁶(0))</code>, then
215
+ <code>¬fact(s²(0), s²(0))</code>, then <code>¬fact(s(0), s(0))</code>, finally
216
+ <code>¬fact(0, s(0))</code>, with intermediate obligations discharged by matching
217
+ C<sub>M2</sub>/C<sub>M1</sub>/C<sub>A*</sub> to compute 5·24=120, 4·6=24, 3·2=6, 2·1=2, 1·1=1.
218
+ </div>
219
+ </li>
220
+ <li>Resolve <code>¬fact(0, s(0))</code> with C<sub>F1</sub> to obtain ⟂ (empty clause).</li>
221
+ <li>Therefore <code>fact(s⁵(0), s¹²⁰(0))</code> follows from the axioms.</li>
222
+ </ol>
223
+ <p class="small muted">
224
+ We abbreviate <code>sⁿ(0)</code> for readability; each multiplication step is justified by chaining C<sub
225
+ >M2</sub
226
+ >
227
+ with addition C<sub>A1</sub>/C<sub>A2</sub>.
228
+ </p>
229
+ </article>
230
+
231
+ <!-- Checks (7 harnesses), all auto-run -->
232
+ <article class="card" id="h1">
233
+ <div class="kicker">Check (harness) #1</div>
234
+ <h3>Concrete computation: 5! (Peano → integer)</h3>
235
+ <div class="result" id="r1" aria-live="polite"></div>
236
+ </article>
237
+
238
+ <article class="card" id="h2">
239
+ <div class="kicker">Check (harness) #2</div>
240
+ <h3>Randomized small factorials (n ≤ 6)</h3>
241
+ <p class="small muted">Compare Peano factorial with JavaScript’s numeric factorial.</p>
242
+ <div class="result" id="r2" aria-live="polite"></div>
243
+ </article>
244
+
245
+ <article class="card" id="h3">
246
+ <div class="kicker">Check (harness) #3</div>
247
+ <h3>Exhaustive n ∈ {0..5}</h3>
248
+ <p class="small muted">Verify 0!..5! match 1,1,2,6,24,120.</p>
249
+ <div class="result" id="r3" aria-live="polite"></div>
250
+ </article>
251
+
252
+ <article class="card" id="h4">
253
+ <div class="kicker">Check (harness) #4</div>
254
+ <h3>Base case</h3>
255
+ <p class="small muted">Check that fact(0)=1.</p>
256
+ <div class="result" id="r4" aria-live="polite"></div>
257
+ </article>
258
+
259
+ <article class="card" id="h5">
260
+ <div class="kicker">Check (harness) #5</div>
261
+ <h3>Step rule</h3>
262
+ <p class="small muted">Confirm: fact(s(n)) = mult(s(n), fact(n)).</p>
263
+ <div class="result" id="r5" aria-live="polite"></div>
264
+ </article>
265
+
266
+ <article class="card" id="h6">
267
+ <div class="kicker">Check (harness) #6</div>
268
+ <h3>Your data (CSV)</h3>
269
+ <p class="small muted">
270
+ Provide “N: 5” (try 0..7). We compute <code>N!</code> as a Peano term and as a number.
271
+ </p>
272
+ <textarea class="input" id="csv" placeholder="N: 5"></textarea>
273
+ <div class="result" id="r6" aria-live="polite"></div>
274
+ </article>
275
+
276
+ <article class="card" id="h7">
277
+ <div class="kicker">Check (harness) #7</div>
278
+ <h3>Automated Resolution trace (compressed)</h3>
279
+ <p class="small muted">
280
+ Shows the refutation pattern from ¬fact(5,120) to ⟂ using C<sub>F*</sub>, C<sub>M*</sub>, C<sub>A*</sub>.
281
+ </p>
282
+ <div class="result" id="r7" aria-live="polite"></div>
283
+ </article>
284
+ </section>
285
+ </div>
286
+
287
+ <script>
288
+ // ---------- Peano terms ----------
289
+ const Z = { tag: 'z' }; // 0
290
+ const S = (n) => ({ tag: 's', n }); // successor
291
+ const isZ = (t) => t.tag === 'z';
292
+
293
+ const fromInt = (k) => {
294
+ let t = Z;
295
+ for (let i = 0; i < k; i++) t = S(t);
296
+ return t;
297
+ };
298
+ const toInt = (t) => {
299
+ let i = 0,
300
+ cur = t;
301
+ while (!isZ(cur)) {
302
+ i++;
303
+ cur = cur.n;
304
+ }
305
+ return i;
306
+ };
307
+ const show = (t) => (isZ(t) ? '0' : `s(${show(t.n)})`);
308
+ const showPow = (k) => (k === 0 ? '0' : `s^${k}(0)`); // just for trace readability
309
+
310
+ // ---------- Addition & Multiplication (denotations from axioms) ----------
311
+ // A1/A2: add(X, 0, X); add(X, s(Y), s(Z)) if add(X, Y, Z)
312
+ const addTerm = (x, y) => (isZ(y) ? x : S(addTerm(x, y.n)));
313
+
314
+ // M1/M2: mult(X, 0, 0); mult(X, s(Y), Z2) if mult(X, Y, Z) and add(Z, X, Z2)
315
+ const multTerm = (x, y) => {
316
+ if (isZ(y)) return Z;
317
+ const prev = multTerm(x, y.n);
318
+ return addTerm(prev, x);
319
+ };
320
+
321
+ // ---------- Factorial (F1/F2): fact(0)=1; fact(s(n)) = mult(s(n), fact(n)) ----------
322
+ const factTerm = (n) => {
323
+ if (isZ(n)) return S(Z); // 1
324
+ const fn = factTerm(n.n);
325
+ const sn = S(n.n);
326
+ return multTerm(sn, fn);
327
+ };
328
+
329
+ // ---------- Checks ----------
330
+ function check1() {
331
+ const five = fromInt(5);
332
+ const f = factTerm(five);
333
+ const pass = toInt(f) === 120;
334
+ const msg = `5! = ${toInt(f)}\nPeano term: ${show(f)}`;
335
+ document.getElementById('r1').innerHTML =
336
+ `<div class="${pass ? 'ok' : 'fail'}">${pass ? 'PASS' : 'FAIL'}</div><pre>${msg}</pre>`;
337
+ }
338
+
339
+ function check2() {
340
+ const nf = (n) => (n <= 1 ? 1 : n * nf(n - 1));
341
+ let trials = 7,
342
+ ok = true,
343
+ lines = [];
344
+ for (let n = 0; n <= 6; n++) {
345
+ const got = toInt(factTerm(fromInt(n)));
346
+ const want = nf(n);
347
+ lines.push(`${n}! = ${got} (expect ${want}) ${got === want ? '✓' : '✗'}`);
348
+ ok = ok && got === want;
349
+ }
350
+ document.getElementById('r2').innerHTML =
351
+ `<div class="${ok ? 'ok' : 'fail'}">${ok ? 'PASS' : 'FAIL'}</div><pre>${lines.join('\n')}</pre>`;
352
+ }
353
+
354
+ function check3() {
355
+ const want = [1, 1, 2, 6, 24, 120];
356
+ let bad = 0,
357
+ lines = [];
358
+ for (let n = 0; n <= 5; n++) {
359
+ const got = toInt(factTerm(fromInt(n)));
360
+ if (got !== want[n]) bad++;
361
+ lines.push(`${n}! = ${got}`);
362
+ }
363
+ const pass = bad === 0;
364
+ document.getElementById('r3').innerHTML =
365
+ `<div class="${pass ? 'ok' : 'fail'}">${pass ? 'PASS' : 'FAIL'}</div><pre>${lines.join('\n')}</pre>`;
366
+ }
367
+
368
+ function check4() {
369
+ const base = toInt(factTerm(Z));
370
+ const pass = base === 1;
371
+ document.getElementById('r4').innerHTML =
372
+ `<div class="${pass ? 'ok' : 'fail'}">${pass ? 'PASS' : 'FAIL'}</div><pre>fact(0) = ${base}</pre>`;
373
+ }
374
+
375
+ function check5() {
376
+ let ok = true,
377
+ lines = [];
378
+ for (let n = 0; n <= 5; n++) {
379
+ const N = fromInt(n);
380
+ const lhs = factTerm(S(N)); // fact(s(n))
381
+ const rhs = multTerm(S(N), factTerm(N)); // mult(s(n), fact(n))
382
+ const good = toInt(lhs) === toInt(rhs);
383
+ ok = ok && good;
384
+ lines.push(
385
+ `fact(s(${n})) = ${toInt(lhs)} ; mult(s(${n}), ${toInt(factTerm(N))}) = ${toInt(rhs)} ${good ? '✓' : '✗'}`,
386
+ );
387
+ }
388
+ document.getElementById('r5').innerHTML =
389
+ `<div class="${ok ? 'ok' : 'fail'}">${ok ? 'PASS' : 'FAIL'}</div><pre>${lines.join('\n')}</pre>`;
390
+ }
391
+
392
+ function parseCSVSpec(text) {
393
+ const m = (text || '').match(/^N\s*:\s*([0-9]+)\s*$/im);
394
+ return m ? Math.min(parseInt(m[1], 10), 7) : 5; // keep outputs tame
395
+ }
396
+ function check6() {
397
+ const N = parseCSVSpec(document.getElementById('csv').value);
398
+ const val = toInt(factTerm(fromInt(N)));
399
+ const msg = `${N}! = ${val}${val > 5000 ? ' (large; term suppressed)' : '\nPeano term: ' + show(factTerm(fromInt(N)))}`;
400
+ document.getElementById('r6').innerHTML = `<div class="ok">OK</div><pre>${msg}</pre>`;
401
+ }
402
+
403
+ // Compressed resolution-style trace (symbolic)
404
+ function resolutionTrace() {
405
+ const steps = [];
406
+ steps.push('Clauses:');
407
+ steps.push(' C_A1: add(X, 0, X)');
408
+ steps.push(' C_A2: ¬add(X, Y, Z) ∨ add(X, s(Y), s(Z))');
409
+ steps.push(' C_M1: mult(X, 0, 0)');
410
+ steps.push(' C_M2: ¬mult(X, Y, Z) ∨ ¬add(Z, X, Z2) ∨ mult(X, s(Y), Z2)');
411
+ steps.push(' C_F1: fact(0, s(0))');
412
+ steps.push(' C_F2: ¬fact(N, F) ∨ ¬mult(s(N), F, Z) ∨ fact(s(N), Z)');
413
+ steps.push('');
414
+ steps.push('Assume negated goal:');
415
+ steps.push(' N0: ¬fact(s^5(0), s^120(0))');
416
+ steps.push('');
417
+ steps.push('Unfold factorial with C_F2 repeatedly (N := 4..0):');
418
+ steps.push(' R1: ¬fact(s^4(0), s^24(0)) ∨ ¬mult(s^5(0), s^24(0), s^120(0))');
419
+ steps.push(' R2: ¬fact(s^3(0), s^6(0)) ∨ ¬mult(s^4(0), s^6(0), s^24(0))');
420
+ steps.push(' R3: ¬fact(s^2(0), s^2(0)) ∨ ¬mult(s^3(0), s^2(0), s^6(0))');
421
+ steps.push(' R4: ¬fact(s^1(0), s^1(0)) ∨ ¬mult(s^2(0), s^1(0), s^2(0))');
422
+ steps.push(' R5: ¬fact(0, s(0)) ∨ ¬mult(s^1(0), s(0), s^1(0))');
423
+ steps.push('');
424
+ steps.push('Resolve multiplications using C_M2 and additions C_A* (sketch):');
425
+ steps.push(' From C_M1 and C_M2 + A* : mult(s(0), s(0), s(0)) (1·1 = 1)');
426
+ steps.push(' From C_M1 and C_M2 + A* : mult(s^2(0), s(0), s^2(0)) (2·1 = 2)');
427
+ steps.push(' From C_M1 and C_M2 + A* : mult(s^3(0), s^2(0), s^6(0)) (3·2 = 6)');
428
+ steps.push(' From C_M1 and C_M2 + A* : mult(s^4(0), s^6(0), s^24(0)) (4·6 = 24)');
429
+ steps.push(' From C_M1 and C_M2 + A* : mult(s^5(0), s^24(0), s^120(0)) (5·24 = 120)');
430
+ steps.push('');
431
+ steps.push('Now R5 resolves with C_F1: ¬fact(0, s(0)) + fact(0, s(0)) ⇒ ⟂');
432
+ steps.push('Thus the set of clauses is unsatisfiable; original goal holds.');
433
+ return steps;
434
+ }
435
+ function check7() {
436
+ const steps = resolutionTrace();
437
+ const ok = steps.some((s) => s.includes('⟂'));
438
+ document.getElementById('r7').innerHTML =
439
+ `<div class="${ok ? 'ok' : 'fail'}">${ok ? 'PASS' : 'FAIL'}</div><pre>${steps.join('\n')}</pre>`;
440
+ }
441
+
442
+ // Autorun all checks
443
+ window.addEventListener('DOMContentLoaded', () => {
444
+ const csv = document.getElementById('csv');
445
+ if (csv && !csv.value.trim()) csv.value = 'N: 5';
446
+ check1();
447
+ check2();
448
+ check3();
449
+ check4();
450
+ check5();
451
+ check6();
452
+ check7();
453
+ });
454
+ </script>
455
+ </body>
456
+ </html>