hbengine 0.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +20 -0
- package/engine-cli/connect.mjs +73 -0
- package/engine-cli/hbengine.mjs +565 -0
- package/engine-cli/package.json +1 -0
- package/engine-cli/templates.mjs +14 -0
- package/engine-conformance/analyse-worker.mjs +12 -0
- package/engine-conformance/analyse.mjs +4458 -0
- package/engine-conformance/bundle.mjs +208 -0
- package/engine-conformance/clock.mjs +294 -0
- package/engine-conformance/csp.go +56 -0
- package/engine-conformance/csp.json +6 -0
- package/engine-conformance/csp.mjs +20 -0
- package/engine-conformance/gzip-sizes.mjs +9 -0
- package/engine-conformance/package.json +1 -0
- package/engine-conformance/picture.mjs +55 -0
- package/engine-conformance/report.go +349 -0
- package/engine-conformance/run.mjs +1217 -0
- package/engine-conformance/scan.mjs +476 -0
- package/engine-conformance/testdata/clock-overlay/bundle/assets.json +1 -0
- package/engine-conformance/testdata/clock-overlay/bundle/game.css +17 -0
- package/engine-conformance/testdata/clock-overlay/bundle/game.js +83 -0
- package/engine-conformance/testdata/clock-overlay/bundle/hbtest.json +4 -0
- package/engine-conformance/testdata/clock-overlay/bundle/index.html +34 -0
- package/engine-conformance/testdata/clock-probe/bundle/assets.json +1 -0
- package/engine-conformance/testdata/clock-probe/bundle/game.css +17 -0
- package/engine-conformance/testdata/clock-probe/bundle/game.js +65 -0
- package/engine-conformance/testdata/clock-probe/bundle/hbtest.json +4 -0
- package/engine-conformance/testdata/clock-probe/bundle/index.html +35 -0
- package/engine-conformance/testdata/clock-probe/bundle/probe-worker.js +46 -0
- package/engine-conformance/testdata/clock-probe/bundle/probe.js +210 -0
- package/engine-conformance/testdata/clock-probe/math/dice.tsv +100 -0
- package/engine-conformance/testdata/clock-probe/math/manifest.json +2925 -0
- package/engine-conformance/testdata/clock-worker/bundle/assets.json +1 -0
- package/engine-conformance/testdata/clock-worker/bundle/clock-worker.js +14 -0
- package/engine-conformance/testdata/clock-worker/bundle/game.css +17 -0
- package/engine-conformance/testdata/clock-worker/bundle/game.js +61 -0
- package/engine-conformance/testdata/clock-worker/bundle/hbtest.json +4 -0
- package/engine-conformance/testdata/clock-worker/bundle/index.html +35 -0
- package/engine-conformance/testdata/clock-worker/math/dice.tsv +100 -0
- package/engine-conformance/testdata/clock-worker/math/manifest.json +2925 -0
- package/engine-conformance/travel.mjs +1209 -0
- package/engine-conformance/vendor/acorn/LICENSE +21 -0
- package/engine-conformance/vendor/acorn/acorn.mjs +6266 -0
- package/engine-conformance/wasm-releases.json +168 -0
- package/engine-examples/README.md +23 -0
- package/engine-examples/coin/AGENTS.md +3 -0
- package/engine-examples/coin/README.md +7 -0
- package/engine-examples/coin/bundle/assets.json +1 -0
- package/engine-examples/coin/bundle/game.css +5 -0
- package/engine-examples/coin/bundle/game.js +19 -0
- package/engine-examples/coin/bundle/hbtest.json +5 -0
- package/engine-examples/coin/bundle/index.html +16 -0
- package/engine-examples/coin/math/coin.tsv +2 -0
- package/engine-examples/coin/math/manifest.json +17 -0
- package/engine-examples/crash/AGENTS.md +3 -0
- package/engine-examples/crash/README.md +14 -0
- package/engine-examples/crash/bundle/assets.json +1 -0
- package/engine-examples/crash/bundle/game.css +8 -0
- package/engine-examples/crash/bundle/game.js +90 -0
- package/engine-examples/crash/bundle/hbtest.json +5 -0
- package/engine-examples/crash/bundle/index.html +20 -0
- package/engine-examples/crash/math/crash-01.tsv +2 -0
- package/engine-examples/crash/math/crash-02.tsv +2 -0
- package/engine-examples/crash/math/crash-03.tsv +2 -0
- package/engine-examples/crash/math/crash-04.tsv +2 -0
- package/engine-examples/crash/math/crash-05.tsv +2 -0
- package/engine-examples/crash/math/crash-06.tsv +2 -0
- package/engine-examples/crash/math/crash-07.tsv +2 -0
- package/engine-examples/crash/math/crash-08.tsv +2 -0
- package/engine-examples/crash/math/crash-09.tsv +2 -0
- package/engine-examples/crash/math/crash-10.tsv +2 -0
- package/engine-examples/crash/math/crash-11.tsv +2 -0
- package/engine-examples/crash/math/crash-12.tsv +2 -0
- package/engine-examples/crash/math/crash-13.tsv +2 -0
- package/engine-examples/crash/math/crash-14.tsv +2 -0
- package/engine-examples/crash/math/crash-15.tsv +2 -0
- package/engine-examples/crash/math/crash-16.tsv +2 -0
- package/engine-examples/crash/math/crash-17.tsv +2 -0
- package/engine-examples/crash/math/crash-18.tsv +2 -0
- package/engine-examples/crash/math/crash-19.tsv +2 -0
- package/engine-examples/crash/math/crash-20.tsv +2 -0
- package/engine-examples/crash/math/crash-21.tsv +2 -0
- package/engine-examples/crash/math/crash-22.tsv +2 -0
- package/engine-examples/crash/math/crash-23.tsv +2 -0
- package/engine-examples/crash/math/crash-24.tsv +2 -0
- package/engine-examples/crash/math/crash-25.tsv +2 -0
- package/engine-examples/crash/math/crash-26.tsv +2 -0
- package/engine-examples/crash/math/crash-27.tsv +2 -0
- package/engine-examples/crash/math/crash-28.tsv +2 -0
- package/engine-examples/crash/math/crash-29.tsv +2 -0
- package/engine-examples/crash/math/crash-30.tsv +2 -0
- package/engine-examples/crash/math/crash-31.tsv +2 -0
- package/engine-examples/crash/math/crash-32.tsv +2 -0
- package/engine-examples/crash/math/crash-33.tsv +2 -0
- package/engine-examples/crash/math/crash-34.tsv +2 -0
- package/engine-examples/crash/math/crash-35.tsv +2 -0
- package/engine-examples/crash/math/crash-36.tsv +2 -0
- package/engine-examples/crash/math/crash-37.tsv +2 -0
- package/engine-examples/crash/math/crash-38.tsv +2 -0
- package/engine-examples/crash/math/crash-39.tsv +2 -0
- package/engine-examples/crash/math/crash-40.tsv +2 -0
- package/engine-examples/crash/math/crash-41.tsv +2 -0
- package/engine-examples/crash/math/crash-42.tsv +2 -0
- package/engine-examples/crash/math/crash-43.tsv +2 -0
- package/engine-examples/crash/math/crash-44.tsv +2 -0
- package/engine-examples/crash/math/crash-45.tsv +2 -0
- package/engine-examples/crash/math/crash-46.tsv +2 -0
- package/engine-examples/crash/math/crash-47.tsv +2 -0
- package/engine-examples/crash/math/crash-48.tsv +2 -0
- package/engine-examples/crash/math/crash-49.tsv +2 -0
- package/engine-examples/crash/math/crash-50.tsv +2 -0
- package/engine-examples/crash/math/crash-51.tsv +2 -0
- package/engine-examples/crash/math/crash-52.tsv +2 -0
- package/engine-examples/crash/math/crash-53.tsv +2 -0
- package/engine-examples/crash/math/crash-54.tsv +2 -0
- package/engine-examples/crash/math/crash-55.tsv +2 -0
- package/engine-examples/crash/math/crash-56.tsv +2 -0
- package/engine-examples/crash/math/crash-57.tsv +2 -0
- package/engine-examples/crash/math/crash-58.tsv +2 -0
- package/engine-examples/crash/math/crash-59.tsv +2 -0
- package/engine-examples/crash/math/crash-60.tsv +2 -0
- package/engine-examples/crash/math/crash-61.tsv +2 -0
- package/engine-examples/crash/math/crash-62.tsv +2 -0
- package/engine-examples/crash/math/crash-63.tsv +2 -0
- package/engine-examples/crash/math/crash-64.tsv +2 -0
- package/engine-examples/crash/math/gen.mjs +31 -0
- package/engine-examples/crash/math/manifest.json +1 -0
- package/engine-examples/dice/AGENTS.md +3 -0
- package/engine-examples/dice/README.md +25 -0
- package/engine-examples/dice/bundle/assets.json +1 -0
- package/engine-examples/dice/bundle/game.css +17 -0
- package/engine-examples/dice/bundle/game.js +61 -0
- package/engine-examples/dice/bundle/hbtest.json +4 -0
- package/engine-examples/dice/bundle/index.html +34 -0
- package/engine-examples/dice/math/dice.tsv +100 -0
- package/engine-examples/dice/math/manifest.json +2925 -0
- package/engine-examples/keno/AGENTS.md +3 -0
- package/engine-examples/keno/README.md +11 -0
- package/engine-examples/keno/bundle/assets.json +1 -0
- package/engine-examples/keno/bundle/game.css +14 -0
- package/engine-examples/keno/bundle/game.js +86 -0
- package/engine-examples/keno/bundle/hbtest.json +4 -0
- package/engine-examples/keno/bundle/i18n.json +342 -0
- package/engine-examples/keno/bundle/index.html +20 -0
- package/engine-examples/keno/bundle/model.json +1 -0
- package/engine-examples/keno/math/gen.mjs +35 -0
- package/engine-examples/keno/math/keno-picks-1.tsv +2 -0
- package/engine-examples/keno/math/keno-picks-10.tsv +11 -0
- package/engine-examples/keno/math/keno-picks-2.tsv +3 -0
- package/engine-examples/keno/math/keno-picks-3.tsv +4 -0
- package/engine-examples/keno/math/keno-picks-4.tsv +5 -0
- package/engine-examples/keno/math/keno-picks-5.tsv +6 -0
- package/engine-examples/keno/math/keno-picks-6.tsv +7 -0
- package/engine-examples/keno/math/keno-picks-7.tsv +8 -0
- package/engine-examples/keno/math/keno-picks-8.tsv +9 -0
- package/engine-examples/keno/math/keno-picks-9.tsv +10 -0
- package/engine-examples/keno/math/manifest.json +1 -0
- package/engine-examples/keno/math-kit/pack.mjs +165 -0
- package/engine-examples/keno/math-kit/package.json +8 -0
- package/engine-examples/keno/math-kit/slot.mjs +94 -0
- package/engine-examples/keno/math-kit/tumble.mjs +94 -0
- package/engine-examples/lines/AGENTS.md +3 -0
- package/engine-examples/lines/README.md +20 -0
- package/engine-examples/lines/bundle/assets.json +1 -0
- package/engine-examples/lines/bundle/game.css +16 -0
- package/engine-examples/lines/bundle/game.js +125 -0
- package/engine-examples/lines/bundle/hbtest.json +4 -0
- package/engine-examples/lines/bundle/i18n.json +242 -0
- package/engine-examples/lines/bundle/index.html +23 -0
- package/engine-examples/lines/bundle/model.json +1 -0
- package/engine-examples/lines/math/gen.mjs +54 -0
- package/engine-examples/lines/math-kit/pack.mjs +165 -0
- package/engine-examples/lines/math-kit/package.json +8 -0
- package/engine-examples/lines/math-kit/slot.mjs +94 -0
- package/engine-examples/lines/math-kit/tumble.mjs +94 -0
- package/engine-examples/mines/AGENTS.md +3 -0
- package/engine-examples/mines/README.md +13 -0
- package/engine-examples/mines/bundle/assets.json +1 -0
- package/engine-examples/mines/bundle/game.css +12 -0
- package/engine-examples/mines/bundle/game.js +58 -0
- package/engine-examples/mines/bundle/hbtest.json +8 -0
- package/engine-examples/mines/bundle/index.html +16 -0
- package/engine-examples/mines/math/gen.mjs +40 -0
- package/engine-examples/mines/math/manifest.json +1 -0
- package/engine-examples/mines/math/mines-1-1.tsv +2 -0
- package/engine-examples/mines/math/mines-1-2.tsv +2 -0
- package/engine-examples/mines/math/mines-1-22.tsv +2 -0
- package/engine-examples/mines/math/mines-1-23.tsv +2 -0
- package/engine-examples/mines/math/mines-1-24.tsv +2 -0
- package/engine-examples/mines/math/mines-1-3.tsv +2 -0
- package/engine-examples/mines/math/mines-10-1.tsv +2 -0
- package/engine-examples/mines/math/mines-10-10.tsv +2 -0
- package/engine-examples/mines/math/mines-10-11.tsv +2 -0
- package/engine-examples/mines/math/mines-10-12.tsv +2 -0
- package/engine-examples/mines/math/mines-10-13.tsv +2 -0
- package/engine-examples/mines/math/mines-10-14.tsv +2 -0
- package/engine-examples/mines/math/mines-10-15.tsv +2 -0
- package/engine-examples/mines/math/mines-10-2.tsv +2 -0
- package/engine-examples/mines/math/mines-10-3.tsv +2 -0
- package/engine-examples/mines/math/mines-10-4.tsv +2 -0
- package/engine-examples/mines/math/mines-10-5.tsv +2 -0
- package/engine-examples/mines/math/mines-10-6.tsv +2 -0
- package/engine-examples/mines/math/mines-10-7.tsv +2 -0
- package/engine-examples/mines/math/mines-10-8.tsv +2 -0
- package/engine-examples/mines/math/mines-10-9.tsv +2 -0
- package/engine-examples/mines/math/mines-11-1.tsv +2 -0
- package/engine-examples/mines/math/mines-11-10.tsv +2 -0
- package/engine-examples/mines/math/mines-11-11.tsv +2 -0
- package/engine-examples/mines/math/mines-11-12.tsv +2 -0
- package/engine-examples/mines/math/mines-11-13.tsv +2 -0
- package/engine-examples/mines/math/mines-11-14.tsv +2 -0
- package/engine-examples/mines/math/mines-11-2.tsv +2 -0
- package/engine-examples/mines/math/mines-11-3.tsv +2 -0
- package/engine-examples/mines/math/mines-11-4.tsv +2 -0
- package/engine-examples/mines/math/mines-11-5.tsv +2 -0
- package/engine-examples/mines/math/mines-11-6.tsv +2 -0
- package/engine-examples/mines/math/mines-11-7.tsv +2 -0
- package/engine-examples/mines/math/mines-11-8.tsv +2 -0
- package/engine-examples/mines/math/mines-11-9.tsv +2 -0
- package/engine-examples/mines/math/mines-12-1.tsv +2 -0
- package/engine-examples/mines/math/mines-12-10.tsv +2 -0
- package/engine-examples/mines/math/mines-12-11.tsv +2 -0
- package/engine-examples/mines/math/mines-12-12.tsv +2 -0
- package/engine-examples/mines/math/mines-12-13.tsv +2 -0
- package/engine-examples/mines/math/mines-12-2.tsv +2 -0
- package/engine-examples/mines/math/mines-12-3.tsv +2 -0
- package/engine-examples/mines/math/mines-12-4.tsv +2 -0
- package/engine-examples/mines/math/mines-12-5.tsv +2 -0
- package/engine-examples/mines/math/mines-12-6.tsv +2 -0
- package/engine-examples/mines/math/mines-12-7.tsv +2 -0
- package/engine-examples/mines/math/mines-12-8.tsv +2 -0
- package/engine-examples/mines/math/mines-12-9.tsv +2 -0
- package/engine-examples/mines/math/mines-13-1.tsv +2 -0
- package/engine-examples/mines/math/mines-13-10.tsv +2 -0
- package/engine-examples/mines/math/mines-13-11.tsv +2 -0
- package/engine-examples/mines/math/mines-13-12.tsv +2 -0
- package/engine-examples/mines/math/mines-13-2.tsv +2 -0
- package/engine-examples/mines/math/mines-13-3.tsv +2 -0
- package/engine-examples/mines/math/mines-13-4.tsv +2 -0
- package/engine-examples/mines/math/mines-13-5.tsv +2 -0
- package/engine-examples/mines/math/mines-13-6.tsv +2 -0
- package/engine-examples/mines/math/mines-13-7.tsv +2 -0
- package/engine-examples/mines/math/mines-13-8.tsv +2 -0
- package/engine-examples/mines/math/mines-13-9.tsv +2 -0
- package/engine-examples/mines/math/mines-14-1.tsv +2 -0
- package/engine-examples/mines/math/mines-14-10.tsv +2 -0
- package/engine-examples/mines/math/mines-14-11.tsv +2 -0
- package/engine-examples/mines/math/mines-14-2.tsv +2 -0
- package/engine-examples/mines/math/mines-14-3.tsv +2 -0
- package/engine-examples/mines/math/mines-14-4.tsv +2 -0
- package/engine-examples/mines/math/mines-14-5.tsv +2 -0
- package/engine-examples/mines/math/mines-14-6.tsv +2 -0
- package/engine-examples/mines/math/mines-14-7.tsv +2 -0
- package/engine-examples/mines/math/mines-14-8.tsv +2 -0
- package/engine-examples/mines/math/mines-14-9.tsv +2 -0
- package/engine-examples/mines/math/mines-15-1.tsv +2 -0
- package/engine-examples/mines/math/mines-15-10.tsv +2 -0
- package/engine-examples/mines/math/mines-15-2.tsv +2 -0
- package/engine-examples/mines/math/mines-15-3.tsv +2 -0
- package/engine-examples/mines/math/mines-15-4.tsv +2 -0
- package/engine-examples/mines/math/mines-15-5.tsv +2 -0
- package/engine-examples/mines/math/mines-15-6.tsv +2 -0
- package/engine-examples/mines/math/mines-15-7.tsv +2 -0
- package/engine-examples/mines/math/mines-15-8.tsv +2 -0
- package/engine-examples/mines/math/mines-15-9.tsv +2 -0
- package/engine-examples/mines/math/mines-16-1.tsv +2 -0
- package/engine-examples/mines/math/mines-16-2.tsv +2 -0
- package/engine-examples/mines/math/mines-16-3.tsv +2 -0
- package/engine-examples/mines/math/mines-16-4.tsv +2 -0
- package/engine-examples/mines/math/mines-16-5.tsv +2 -0
- package/engine-examples/mines/math/mines-16-6.tsv +2 -0
- package/engine-examples/mines/math/mines-16-7.tsv +2 -0
- package/engine-examples/mines/math/mines-16-8.tsv +2 -0
- package/engine-examples/mines/math/mines-16-9.tsv +2 -0
- package/engine-examples/mines/math/mines-17-1.tsv +2 -0
- package/engine-examples/mines/math/mines-17-2.tsv +2 -0
- package/engine-examples/mines/math/mines-17-3.tsv +2 -0
- package/engine-examples/mines/math/mines-17-4.tsv +2 -0
- package/engine-examples/mines/math/mines-17-5.tsv +2 -0
- package/engine-examples/mines/math/mines-17-6.tsv +2 -0
- package/engine-examples/mines/math/mines-17-7.tsv +2 -0
- package/engine-examples/mines/math/mines-17-8.tsv +2 -0
- package/engine-examples/mines/math/mines-18-1.tsv +2 -0
- package/engine-examples/mines/math/mines-18-2.tsv +2 -0
- package/engine-examples/mines/math/mines-18-3.tsv +2 -0
- package/engine-examples/mines/math/mines-18-4.tsv +2 -0
- package/engine-examples/mines/math/mines-18-5.tsv +2 -0
- package/engine-examples/mines/math/mines-18-6.tsv +2 -0
- package/engine-examples/mines/math/mines-18-7.tsv +2 -0
- package/engine-examples/mines/math/mines-19-1.tsv +2 -0
- package/engine-examples/mines/math/mines-19-2.tsv +2 -0
- package/engine-examples/mines/math/mines-19-3.tsv +2 -0
- package/engine-examples/mines/math/mines-19-4.tsv +2 -0
- package/engine-examples/mines/math/mines-19-5.tsv +2 -0
- package/engine-examples/mines/math/mines-19-6.tsv +2 -0
- package/engine-examples/mines/math/mines-2-1.tsv +2 -0
- package/engine-examples/mines/math/mines-2-19.tsv +2 -0
- package/engine-examples/mines/math/mines-2-2.tsv +2 -0
- package/engine-examples/mines/math/mines-2-20.tsv +2 -0
- package/engine-examples/mines/math/mines-2-21.tsv +2 -0
- package/engine-examples/mines/math/mines-2-22.tsv +2 -0
- package/engine-examples/mines/math/mines-2-23.tsv +2 -0
- package/engine-examples/mines/math/mines-2-3.tsv +2 -0
- package/engine-examples/mines/math/mines-2-4.tsv +2 -0
- package/engine-examples/mines/math/mines-2-5.tsv +2 -0
- package/engine-examples/mines/math/mines-20-1.tsv +2 -0
- package/engine-examples/mines/math/mines-20-2.tsv +2 -0
- package/engine-examples/mines/math/mines-20-3.tsv +2 -0
- package/engine-examples/mines/math/mines-20-4.tsv +2 -0
- package/engine-examples/mines/math/mines-20-5.tsv +2 -0
- package/engine-examples/mines/math/mines-21-1.tsv +2 -0
- package/engine-examples/mines/math/mines-21-2.tsv +2 -0
- package/engine-examples/mines/math/mines-21-3.tsv +2 -0
- package/engine-examples/mines/math/mines-21-4.tsv +2 -0
- package/engine-examples/mines/math/mines-22-1.tsv +2 -0
- package/engine-examples/mines/math/mines-22-2.tsv +2 -0
- package/engine-examples/mines/math/mines-22-3.tsv +2 -0
- package/engine-examples/mines/math/mines-23-1.tsv +2 -0
- package/engine-examples/mines/math/mines-23-2.tsv +2 -0
- package/engine-examples/mines/math/mines-24-1.tsv +2 -0
- package/engine-examples/mines/math/mines-3-1.tsv +2 -0
- package/engine-examples/mines/math/mines-3-17.tsv +2 -0
- package/engine-examples/mines/math/mines-3-18.tsv +2 -0
- package/engine-examples/mines/math/mines-3-19.tsv +2 -0
- package/engine-examples/mines/math/mines-3-2.tsv +2 -0
- package/engine-examples/mines/math/mines-3-20.tsv +2 -0
- package/engine-examples/mines/math/mines-3-21.tsv +2 -0
- package/engine-examples/mines/math/mines-3-22.tsv +2 -0
- package/engine-examples/mines/math/mines-3-3.tsv +2 -0
- package/engine-examples/mines/math/mines-3-4.tsv +2 -0
- package/engine-examples/mines/math/mines-3-5.tsv +2 -0
- package/engine-examples/mines/math/mines-3-6.tsv +2 -0
- package/engine-examples/mines/math/mines-4-1.tsv +2 -0
- package/engine-examples/mines/math/mines-4-13.tsv +2 -0
- package/engine-examples/mines/math/mines-4-14.tsv +2 -0
- package/engine-examples/mines/math/mines-4-15.tsv +2 -0
- package/engine-examples/mines/math/mines-4-16.tsv +2 -0
- package/engine-examples/mines/math/mines-4-17.tsv +2 -0
- package/engine-examples/mines/math/mines-4-18.tsv +2 -0
- package/engine-examples/mines/math/mines-4-19.tsv +2 -0
- package/engine-examples/mines/math/mines-4-2.tsv +2 -0
- package/engine-examples/mines/math/mines-4-20.tsv +2 -0
- package/engine-examples/mines/math/mines-4-21.tsv +2 -0
- package/engine-examples/mines/math/mines-4-3.tsv +2 -0
- package/engine-examples/mines/math/mines-4-4.tsv +2 -0
- package/engine-examples/mines/math/mines-4-5.tsv +2 -0
- package/engine-examples/mines/math/mines-4-6.tsv +2 -0
- package/engine-examples/mines/math/mines-4-7.tsv +2 -0
- package/engine-examples/mines/math/mines-4-8.tsv +2 -0
- package/engine-examples/mines/math/mines-4-9.tsv +2 -0
- package/engine-examples/mines/math/mines-5-1.tsv +2 -0
- package/engine-examples/mines/math/mines-5-10.tsv +2 -0
- package/engine-examples/mines/math/mines-5-11.tsv +2 -0
- package/engine-examples/mines/math/mines-5-12.tsv +2 -0
- package/engine-examples/mines/math/mines-5-13.tsv +2 -0
- package/engine-examples/mines/math/mines-5-14.tsv +2 -0
- package/engine-examples/mines/math/mines-5-15.tsv +2 -0
- package/engine-examples/mines/math/mines-5-16.tsv +2 -0
- package/engine-examples/mines/math/mines-5-17.tsv +2 -0
- package/engine-examples/mines/math/mines-5-18.tsv +2 -0
- package/engine-examples/mines/math/mines-5-19.tsv +2 -0
- package/engine-examples/mines/math/mines-5-2.tsv +2 -0
- package/engine-examples/mines/math/mines-5-20.tsv +2 -0
- package/engine-examples/mines/math/mines-5-3.tsv +2 -0
- package/engine-examples/mines/math/mines-5-4.tsv +2 -0
- package/engine-examples/mines/math/mines-5-5.tsv +2 -0
- package/engine-examples/mines/math/mines-5-6.tsv +2 -0
- package/engine-examples/mines/math/mines-5-7.tsv +2 -0
- package/engine-examples/mines/math/mines-5-8.tsv +2 -0
- package/engine-examples/mines/math/mines-5-9.tsv +2 -0
- package/engine-examples/mines/math/mines-6-1.tsv +2 -0
- package/engine-examples/mines/math/mines-6-10.tsv +2 -0
- package/engine-examples/mines/math/mines-6-11.tsv +2 -0
- package/engine-examples/mines/math/mines-6-12.tsv +2 -0
- package/engine-examples/mines/math/mines-6-13.tsv +2 -0
- package/engine-examples/mines/math/mines-6-14.tsv +2 -0
- package/engine-examples/mines/math/mines-6-15.tsv +2 -0
- package/engine-examples/mines/math/mines-6-16.tsv +2 -0
- package/engine-examples/mines/math/mines-6-17.tsv +2 -0
- package/engine-examples/mines/math/mines-6-18.tsv +2 -0
- package/engine-examples/mines/math/mines-6-19.tsv +2 -0
- package/engine-examples/mines/math/mines-6-2.tsv +2 -0
- package/engine-examples/mines/math/mines-6-3.tsv +2 -0
- package/engine-examples/mines/math/mines-6-4.tsv +2 -0
- package/engine-examples/mines/math/mines-6-5.tsv +2 -0
- package/engine-examples/mines/math/mines-6-6.tsv +2 -0
- package/engine-examples/mines/math/mines-6-7.tsv +2 -0
- package/engine-examples/mines/math/mines-6-8.tsv +2 -0
- package/engine-examples/mines/math/mines-6-9.tsv +2 -0
- package/engine-examples/mines/math/mines-7-1.tsv +2 -0
- package/engine-examples/mines/math/mines-7-10.tsv +2 -0
- package/engine-examples/mines/math/mines-7-11.tsv +2 -0
- package/engine-examples/mines/math/mines-7-12.tsv +2 -0
- package/engine-examples/mines/math/mines-7-13.tsv +2 -0
- package/engine-examples/mines/math/mines-7-14.tsv +2 -0
- package/engine-examples/mines/math/mines-7-15.tsv +2 -0
- package/engine-examples/mines/math/mines-7-16.tsv +2 -0
- package/engine-examples/mines/math/mines-7-17.tsv +2 -0
- package/engine-examples/mines/math/mines-7-18.tsv +2 -0
- package/engine-examples/mines/math/mines-7-2.tsv +2 -0
- package/engine-examples/mines/math/mines-7-3.tsv +2 -0
- package/engine-examples/mines/math/mines-7-4.tsv +2 -0
- package/engine-examples/mines/math/mines-7-5.tsv +2 -0
- package/engine-examples/mines/math/mines-7-6.tsv +2 -0
- package/engine-examples/mines/math/mines-7-7.tsv +2 -0
- package/engine-examples/mines/math/mines-7-8.tsv +2 -0
- package/engine-examples/mines/math/mines-7-9.tsv +2 -0
- package/engine-examples/mines/math/mines-8-1.tsv +2 -0
- package/engine-examples/mines/math/mines-8-10.tsv +2 -0
- package/engine-examples/mines/math/mines-8-11.tsv +2 -0
- package/engine-examples/mines/math/mines-8-12.tsv +2 -0
- package/engine-examples/mines/math/mines-8-13.tsv +2 -0
- package/engine-examples/mines/math/mines-8-14.tsv +2 -0
- package/engine-examples/mines/math/mines-8-15.tsv +2 -0
- package/engine-examples/mines/math/mines-8-16.tsv +2 -0
- package/engine-examples/mines/math/mines-8-17.tsv +2 -0
- package/engine-examples/mines/math/mines-8-2.tsv +2 -0
- package/engine-examples/mines/math/mines-8-3.tsv +2 -0
- package/engine-examples/mines/math/mines-8-4.tsv +2 -0
- package/engine-examples/mines/math/mines-8-5.tsv +2 -0
- package/engine-examples/mines/math/mines-8-6.tsv +2 -0
- package/engine-examples/mines/math/mines-8-7.tsv +2 -0
- package/engine-examples/mines/math/mines-8-8.tsv +2 -0
- package/engine-examples/mines/math/mines-8-9.tsv +2 -0
- package/engine-examples/mines/math/mines-9-1.tsv +2 -0
- package/engine-examples/mines/math/mines-9-10.tsv +2 -0
- package/engine-examples/mines/math/mines-9-11.tsv +2 -0
- package/engine-examples/mines/math/mines-9-12.tsv +2 -0
- package/engine-examples/mines/math/mines-9-13.tsv +2 -0
- package/engine-examples/mines/math/mines-9-14.tsv +2 -0
- package/engine-examples/mines/math/mines-9-15.tsv +2 -0
- package/engine-examples/mines/math/mines-9-16.tsv +2 -0
- package/engine-examples/mines/math/mines-9-2.tsv +2 -0
- package/engine-examples/mines/math/mines-9-3.tsv +2 -0
- package/engine-examples/mines/math/mines-9-4.tsv +2 -0
- package/engine-examples/mines/math/mines-9-5.tsv +2 -0
- package/engine-examples/mines/math/mines-9-6.tsv +2 -0
- package/engine-examples/mines/math/mines-9-7.tsv +2 -0
- package/engine-examples/mines/math/mines-9-8.tsv +2 -0
- package/engine-examples/mines/math/mines-9-9.tsv +2 -0
- package/engine-examples/plinko/AGENTS.md +3 -0
- package/engine-examples/plinko/README.md +9 -0
- package/engine-examples/plinko/bundle/assets.json +1 -0
- package/engine-examples/plinko/bundle/game.css +5 -0
- package/engine-examples/plinko/bundle/game.js +92 -0
- package/engine-examples/plinko/bundle/hbtest.json +4 -0
- package/engine-examples/plinko/bundle/index.html +16 -0
- package/engine-examples/plinko/bundle/model.json +1 -0
- package/engine-examples/plinko/math/gen.mjs +40 -0
- package/engine-examples/plinko/math/manifest.json +1 -0
- package/engine-examples/plinko/math/plinko-12-high.tsv +13 -0
- package/engine-examples/plinko/math/plinko-12-low.tsv +13 -0
- package/engine-examples/plinko/math/plinko-12-medium.tsv +13 -0
- package/engine-examples/plinko/math/plinko-16-high.tsv +17 -0
- package/engine-examples/plinko/math/plinko-16-low.tsv +17 -0
- package/engine-examples/plinko/math/plinko-16-medium.tsv +17 -0
- package/engine-examples/plinko/math/plinko-8-high.tsv +9 -0
- package/engine-examples/plinko/math/plinko-8-low.tsv +9 -0
- package/engine-examples/plinko/math/plinko-8-medium.tsv +9 -0
- package/engine-examples/plinko/math-kit/pack.mjs +165 -0
- package/engine-examples/plinko/math-kit/package.json +8 -0
- package/engine-examples/plinko/math-kit/slot.mjs +94 -0
- package/engine-examples/plinko/math-kit/tumble.mjs +94 -0
- package/engine-examples/slot/AGENTS.md +3 -0
- package/engine-examples/slot/README.md +26 -0
- package/engine-examples/slot/bundle/assets.json +1 -0
- package/engine-examples/slot/bundle/game.css +19 -0
- package/engine-examples/slot/bundle/game.js +42 -0
- package/engine-examples/slot/bundle/hbtest.json +4 -0
- package/engine-examples/slot/bundle/index.html +23 -0
- package/engine-examples/slot/math/gen.mjs +79 -0
- package/engine-examples/slot/math/manifest.json +1 -0
- package/engine-examples/slot/math/slot.tsv +110592 -0
- package/engine-examples/tower/AGENTS.md +3 -0
- package/engine-examples/tower/README.md +21 -0
- package/engine-examples/tower/bundle/assets.json +1 -0
- package/engine-examples/tower/bundle/game.css +8 -0
- package/engine-examples/tower/bundle/game.js +37 -0
- package/engine-examples/tower/bundle/hbtest.json +5 -0
- package/engine-examples/tower/bundle/index.html +16 -0
- package/engine-examples/tower/math/floor.tsv +4 -0
- package/engine-examples/tower/math/manifest.json +61 -0
- package/engine-examples/tumble/AGENTS.md +3 -0
- package/engine-examples/tumble/README.md +18 -0
- package/engine-examples/tumble/bundle/assets.json +1 -0
- package/engine-examples/tumble/bundle/game.css +13 -0
- package/engine-examples/tumble/bundle/game.js +119 -0
- package/engine-examples/tumble/bundle/hbtest.json +4 -0
- package/engine-examples/tumble/bundle/i18n.json +122 -0
- package/engine-examples/tumble/bundle/index.html +20 -0
- package/engine-examples/tumble/bundle/model.json +1 -0
- package/engine-examples/tumble/math/gen.mjs +38 -0
- package/engine-examples/tumble/math-kit/pack.mjs +165 -0
- package/engine-examples/tumble/math-kit/package.json +8 -0
- package/engine-examples/tumble/math-kit/slot.mjs +94 -0
- package/engine-examples/tumble/math-kit/tumble.mjs +94 -0
- package/engine-examples/wheel/README.md +14 -0
- package/engine-examples/wheel/bundle/assets.json +1 -0
- package/engine-examples/wheel/bundle/game.css +7 -0
- package/engine-examples/wheel/bundle/game.js +51 -0
- package/engine-examples/wheel/bundle/hbtest.json +4 -0
- package/engine-examples/wheel/bundle/index.html +19 -0
- package/engine-examples/wheel/math/high.tsv +24 -0
- package/engine-examples/wheel/math/low.tsv +24 -0
- package/engine-examples/wheel/math/manifest.json +48 -0
- package/engine-examples/wheel/math/medium.tsv +24 -0
- package/engine-math/pack.mjs +165 -0
- package/engine-math/package.json +1 -0
- package/engine-math/slot.mjs +94 -0
- package/engine-math/tumble.mjs +94 -0
- package/engine-mcp/package.json +1 -0
- package/engine-mcp/server.mjs +151 -0
- package/engine-sdk/GUIDE.md +855 -0
- package/engine-sdk/assets.js +92 -0
- package/engine-sdk/autoplay.js +82 -0
- package/engine-sdk/bet-field.js +391 -0
- package/engine-sdk/kit/fiat-coins.js +51 -0
- package/engine-sdk/kit/numeric-input.js +116 -0
- package/engine-sdk/kit/wallet-format.js +423 -0
- package/engine-sdk/marks.js +22 -0
- package/engine-sdk/messages.js +289 -0
- package/engine-sdk/money.js +89 -0
- package/engine-sdk/package.json +1 -0
- package/engine-sdk/protocol.js +263 -0
- package/engine-sdk/sdk.d.ts +138 -0
- package/engine-sdk/sdk.js +330 -0
- package/engine-sdk/stake.js +68 -0
- package/engine-sdk/ui.d.ts +36 -0
- package/engine-sdk/ui.js +340 -0
- package/engine-shell/core/faults.js +127 -0
- package/engine-shell/core/rgs.js +193 -0
- package/engine-shell/core/router.js +917 -0
- package/engine-shell/host/boot.js +408 -0
- package/engine-shell/host/engine-v1.js +438 -0
- package/engine-shell/host/fair.js +285 -0
- package/engine-shell/host/fonts/SOURCE.json +11 -0
- package/engine-shell/host/fonts/figtree-400.woff2 +0 -0
- package/engine-shell/host/fonts/figtree-500.woff2 +0 -0
- package/engine-shell/host/fonts/figtree-600.woff2 +0 -0
- package/engine-shell/host/fonts/red-hat-display-700.woff2 +0 -0
- package/engine-shell/host/index.html +230 -0
- package/engine-shell/host/page.js +809 -0
- package/engine-shell/host/sandbox-panel.js +681 -0
- package/engine-shell/host/sandbox-scenarios.js +554 -0
- package/engine-shell/host/site-bridge.js +87 -0
- package/engine-shell/host/strings.js +916 -0
- package/engine-shell/package.json +1 -0
- package/engine-shell/verifiers/badcat/coin.tsv +2 -0
- package/engine-shell/verifiers/badcat/dice-2.tsv +11 -0
- package/engine-shell/verifiers/badcat/dice-5.tsv +26 -0
- package/engine-shell/verifiers/badcat/dice-9.tsv +46 -0
- package/engine-shell/verifiers/badcat/manifest.json +3344 -0
- package/engine-shell/verifiers/badcat/rps.tsv +3 -0
- package/engine-shell/verifiers/badcat/triple.tsv +66 -0
- package/engine-shell/verifiers/engine-verify.js +358 -0
- package/engine-shell/verifiers/package.json +5 -0
- package/engine-shell/verifiers/parity/manifest.json +27 -0
- package/engine-shell/verifiers/parity/wide.tsv +5 -0
- package/engine-shell/verifiers/parity-vectors.json +244 -0
- package/engine-shell/verifiers/vectors.json +100 -0
- package/package.json +10 -0
|
@@ -0,0 +1,423 @@
|
|
|
1
|
+
/* THE KIT'S CORE. This file is the source of the money rule for every game.
|
|
2
|
+
|
|
3
|
+
Brought over from dice on 07.09.2026 WITHOUT changing the rule: dice goes first
|
|
4
|
+
and serves as the reference, so the kit takes its module as it is instead of
|
|
5
|
+
rewriting it. The version taken is the one from `main` — the blackjack branch
|
|
6
|
+
carried an older copy, without the `viewUnitCrypto` fix (the wallet's own
|
|
7
|
+
currency name is asked for first, because in a fiat display the platform
|
|
8
|
+
renames `symbol`). Divergences exactly like that are what the kit is for.
|
|
9
|
+
|
|
10
|
+
Dice itself still keeps its own copy and will move onto the kit in its next
|
|
11
|
+
assembly (ADR-004): touching an almost finished game for the sake of tidiness
|
|
12
|
+
costs more than waiting. While there are two copies, the stand's gate
|
|
13
|
+
`scripts/kit-drift-contract.mjs` holds them together — one and the same set of
|
|
14
|
+
cases runs through both and the answers are compared, so they cannot drift
|
|
15
|
+
apart silently.
|
|
16
|
+
|
|
17
|
+
Design decisions and the threat review — `docs/DESIGN.md`. */
|
|
18
|
+
|
|
19
|
+
import { fiatCoinSrc } from './fiat-coins.js';
|
|
20
|
+
|
|
21
|
+
/* The host wallet's contract: unit, precision, format, parsing, conversion.
|
|
22
|
+
---------------------------------------------------------------------------
|
|
23
|
+
WHY THIS MODULE EXISTS. A game has two lives. On a standalone page it is its
|
|
24
|
+
own platform: the player switches the display currency (USD / BTC / ETH) and
|
|
25
|
+
the game takes rates from its own table. On a platform it is the other way
|
|
26
|
+
round — the money, the wallet, the rate and the precision belong to the host,
|
|
27
|
+
and a table of our own can only disagree with his data. And so it did: the host
|
|
28
|
+
sent "USDT is worth exactly 1", the table said 1.0011990, and the bet field
|
|
29
|
+
lost money on it — 1 USDT typed in came back as 0.99880245.
|
|
30
|
+
|
|
31
|
+
Hence the simple rule: THERE IS A HOST WALLET — every currency fact is his,
|
|
32
|
+
our own table takes no part. No wallet — the old standalone path.
|
|
33
|
+
|
|
34
|
+
The rules below are not invented: this is the contract the platform already
|
|
35
|
+
implements on its side (its `getBetInputPlaceholder` /
|
|
36
|
+
`formatWalletBetTopText`, which repeat the format of the older games).
|
|
37
|
+
Counting differently means disagreeing with it again:
|
|
38
|
+
|
|
39
|
+
crypto display (isFiat: false)
|
|
40
|
+
field — the wallet's currency, min(betPrecision ?? decimals ?? 8, 8)
|
|
41
|
+
decimals, the coin icon from the platform
|
|
42
|
+
caption — none: in this mode the platform gives no fiat and sends rate 1
|
|
43
|
+
fiat display (isFiat: true)
|
|
44
|
+
field — the CHOSEN fiat, precision as in its header (JPY whole, two
|
|
45
|
+
decimals for most), with that fiat's flag
|
|
46
|
+
caption — the wallet's currency, at its own precision
|
|
47
|
+
|
|
48
|
+
Corrected on 22.09.2026 against the platform's own answers: the caption used to
|
|
49
|
+
be in dollars and the field always carried two decimals and a dollar sign —
|
|
50
|
+
which is true only for a USD display.
|
|
51
|
+
|
|
52
|
+
Inside the game the amount is ALWAYS in the wallet's units: that is what the
|
|
53
|
+
server takes (`amount` + `currency`). The fiat mode is presentation only: the
|
|
54
|
+
dollars typed in are converted at the host's rate, and the crypto amount is
|
|
55
|
+
what goes to the server.
|
|
56
|
+
|
|
57
|
+
No rate — no conversion shown. Inventing a rate is not allowed, and a wrong
|
|
58
|
+
number is worse than none: limits and settlement are the server's anyway. What
|
|
59
|
+
to do about a rate that never loaded is the platform's concern, not the game's.
|
|
60
|
+
|
|
61
|
+
The module is deliberately dependency-free: a separate test from the stand
|
|
62
|
+
checks it, and dragging Svelte stores along for that is unnecessary. */
|
|
63
|
+
|
|
64
|
+
/** Crypto precision is cut at eight decimals — as on the platform. */
|
|
65
|
+
var MAX_DECIMALS = 8;
|
|
66
|
+
|
|
67
|
+
function toNumber(v) {
|
|
68
|
+
var n = typeof v === 'number' ? v : parseFloat(String(v == null ? '' : v).replace(/[\s,]/g, ''));
|
|
69
|
+
return isFinite(n) ? n : 0;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
function toWholeNumber(v) {
|
|
73
|
+
var n = Number(v);
|
|
74
|
+
return isFinite(n) ? Math.max(0, Math.trunc(n)) : null;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/** Is there a host wallet at all? The answer to this switches every rule below. */
|
|
78
|
+
export function hasWallet(wallet) {
|
|
79
|
+
return !!(wallet && typeof wallet === 'object');
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/** Is the WALLET ITSELF a fiat one (not merely a fiat display)?
|
|
83
|
+
|
|
84
|
+
Telling the two apart is mandatory. The platform's `isFiat` means "show in
|
|
85
|
+
fiat", and the wallet may well stay crypto: symbol BTC, display fiat USD.
|
|
86
|
+
Whoever confuses the two states converts limits wrongly — they arrive in
|
|
87
|
+
dollars, and a crypto wallet has to divide them by the rate while a fiat one
|
|
88
|
+
does not. The mark: a fiat display AND the wallet's currency matching the
|
|
89
|
+
display currency (or a display with no currency named). */
|
|
90
|
+
export function walletIsFiat(wallet) {
|
|
91
|
+
if (!hasWallet(wallet) || wallet.isFiat !== true) return false;
|
|
92
|
+
var shown = (typeof wallet.fiat === 'string' && wallet.fiat) ||
|
|
93
|
+
(typeof wallet.currentFiat === 'string' && wallet.currentFiat) || '';
|
|
94
|
+
var own = (typeof wallet.symbol === 'string' && wallet.symbol) ||
|
|
95
|
+
(typeof wallet.name === 'string' && wallet.name) || '';
|
|
96
|
+
return !shown || shown.toUpperCase() === own.toUpperCase();
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/** Are we showing fiat instead of the wallet's currency? */
|
|
100
|
+
export function isFiatView(wallet) {
|
|
101
|
+
return !!(wallet && wallet.isFiat === true);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/* A fiat amount is shown EXACTLY AS IN THE PLATFORM'S HEADER (owner's decision,
|
|
105
|
+
22.09.2026): Intl en-US with its signs and with no fractional part for the
|
|
106
|
+
currencies it prints whole. Taken from its header; a sign it does not override
|
|
107
|
+
is the Intl en-US one. */
|
|
108
|
+
var HEADER_SIGNS = {
|
|
109
|
+
EUR: '€', GBP: '£', JPY: '¥', CHF: 'CHF', USD: '$', CAD: 'CA$',
|
|
110
|
+
AUD: 'A$', CNY: 'CN¥', MXN: 'MX$', TWD: 'NT$', ARS: 'AR$'
|
|
111
|
+
};
|
|
112
|
+
var WHOLE_FIATS = { CLP: true, IDR: true, JPY: true, KRW: true, VND: true };
|
|
113
|
+
|
|
114
|
+
/** How many decimals the platform's header gives a fiat: zero for CLP, IDR, JPY,
|
|
115
|
+
KRW and VND, otherwise as many as Intl gives that currency (two for most). */
|
|
116
|
+
export function fiatPrecision(code) {
|
|
117
|
+
var upper = String(code == null ? '' : code).trim().toUpperCase();
|
|
118
|
+
if (WHOLE_FIATS[upper]) return 0;
|
|
119
|
+
try {
|
|
120
|
+
var digits = new Intl.NumberFormat('en-US', { style: 'currency', currency: upper })
|
|
121
|
+
.resolvedOptions().maximumFractionDigits;
|
|
122
|
+
return typeof digits === 'number' ? digits : 2;
|
|
123
|
+
} catch (e) {
|
|
124
|
+
return 2;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/** A fiat's sign by its code — the way the platform's header prints it: $ for
|
|
129
|
+
USD, € for EUR, CA$ for CAD. No sign for the code (or the code is not ISO) —
|
|
130
|
+
we return the code itself: it is more honest than an invented sign. */
|
|
131
|
+
export function fiatSymbol(code) {
|
|
132
|
+
var upper = String(code == null ? '' : code).trim().toUpperCase();
|
|
133
|
+
if (!upper) return '';
|
|
134
|
+
if (HEADER_SIGNS[upper]) return HEADER_SIGNS[upper];
|
|
135
|
+
try {
|
|
136
|
+
var parts = new Intl.NumberFormat('en-US', {
|
|
137
|
+
style: 'currency',
|
|
138
|
+
currency: upper,
|
|
139
|
+
currencyDisplay: 'symbol'
|
|
140
|
+
}).formatToParts(0);
|
|
141
|
+
for (var i = 0; i < parts.length; i++) {
|
|
142
|
+
if (parts[i].type === 'currency' && parts[i].value) return parts[i].value;
|
|
143
|
+
}
|
|
144
|
+
} catch (e) { /* the code is not ISO — we return it as it is below */ }
|
|
145
|
+
return upper;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/** The platform's picture for a fiat — the round flag its header and its "Wallet
|
|
149
|
+
settings" draw (`/img/flags/round/<code>.svg`, served by the storefront the
|
|
150
|
+
game is mounted into). Empty when the code is not three letters. */
|
|
151
|
+
export function fiatFlagSrc(code) {
|
|
152
|
+
var lower = String(code == null ? '' : code).trim().toLowerCase();
|
|
153
|
+
return /^[a-z]{3}$/.test(lower) ? '/img/flags/round/' + lower + '.svg' : '';
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/** THE PICTURE OF A FIAT IS OUR OWN COIN (owner, 2026-10-08: the flags "look
|
|
157
|
+
silly"). `fiat-coins.js` carries a struck coin for every fiat the platform
|
|
158
|
+
offers; a fiat outside that set still gets the platform's round flag. */
|
|
159
|
+
export function fiatMarkSrc(code) {
|
|
160
|
+
return fiatCoinSrc(code) || fiatFlagSrc(code);
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
/* IS THIS CURRENCY A FIAT — we ask the world's list, not one of our own.
|
|
164
|
+
|
|
165
|
+
The wallet names its currency, and the game needs to know whether that is a
|
|
166
|
+
country's money (EUR, JPY) or a coin (BTC, USDT): a fiat's picture is the
|
|
167
|
+
platform's round flag, a coin's is its icon. A list of our own would be a copy
|
|
168
|
+
of the platform's set of wallets: it drifts the moment a currency appears
|
|
169
|
+
there, and it drifts silently. `Intl.supportedValuesOf('currency')` is the
|
|
170
|
+
ISO-4217 list the browser already carries: every fiat is in it and not a single
|
|
171
|
+
coin. Where the browser does not have it, nobody counts as fiat here and the
|
|
172
|
+
old coin path works: an old engine loses the flag, not the game. */
|
|
173
|
+
var ISO_CURRENCIES = null;
|
|
174
|
+
|
|
175
|
+
export function isFiatCode(code) {
|
|
176
|
+
var upper = String(code == null ? '' : code).trim().toUpperCase();
|
|
177
|
+
if (!/^[A-Z]{3}$/.test(upper)) return false;
|
|
178
|
+
if (ISO_CURRENCIES == null) {
|
|
179
|
+
try {
|
|
180
|
+
ISO_CURRENCIES = new Set(Intl.supportedValuesOf('currency'));
|
|
181
|
+
} catch (e) {
|
|
182
|
+
ISO_CURRENCIES = new Set();
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
return ISO_CURRENCIES.has(upper);
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
/** The currency mark in the panel's FIELDS when the fiat display is on.
|
|
189
|
+
|
|
190
|
+
WHY. The mark used to be chosen by the currency code, and in a fiat display
|
|
191
|
+
the platform sends `symbol: "USD"` — so the chain of checks reached the final
|
|
192
|
+
"well, let it be USDT". Next to an amount of 0.00 stood a crypto mark: a fiat
|
|
193
|
+
amount with a crypto sign. The rule is the opposite and simple: showing fiat
|
|
194
|
+
means a fiat mark.
|
|
195
|
+
|
|
196
|
+
THE PLATFORM DRAWS THE ICON, AND ONLY IT. It does have a set of fiat icons —
|
|
197
|
+
usd.svg, eur.svg, jpy.svg, inr.svg, cad.svg are visible in its wallet — and
|
|
198
|
+
the channel for passing one is described by the launch contract: `iconFiat`.
|
|
199
|
+
The game takes what lies in that channel and substitutes NOTHING for it.
|
|
200
|
+
|
|
201
|
+
WHY THERE IS NO FALLBACK SIGN. A "$" of our own drawn where the picture never
|
|
202
|
+
arrived would look like a working state, and the disagreement with the
|
|
203
|
+
platform would live unnoticed. Let it be visible that the picture did not
|
|
204
|
+
load: a breakage has to be visible at once to whoever looks at the game, not
|
|
205
|
+
only to whoever reads the code.
|
|
206
|
+
|
|
207
|
+
What lies in that channel right now is a question for the platform: on dev
|
|
208
|
+
2026-09-05 USDT's `iconFiat` and `icon` point at the same 10.png, that is, in
|
|
209
|
+
a fiat display a crypto coin stands next to the amount "0.00". That is its
|
|
210
|
+
data and it is fixed on its side; the game only shows what was passed.
|
|
211
|
+
|
|
212
|
+
THE ROUND RECEIPT DOES NOT COME HERE, and that is not an oversight. In the
|
|
213
|
+
history popup the mark is the currency the round was PLAYED in: a fact of a
|
|
214
|
+
finished round. So the crypto icon stays there and only the number becomes
|
|
215
|
+
fiat, with the sign after the amount. The reference does the same.
|
|
216
|
+
|
|
217
|
+
THE CRYPTO DISPLAY TAKES THE PLATFORM'S ICON TOO (21.09.2026): `icon`, the
|
|
218
|
+
picture of the wallet's coin. Before that the field drew signs of its own, and
|
|
219
|
+
one wallet was shown with one picture in the platform's header and another one
|
|
220
|
+
in the game.
|
|
221
|
+
|
|
222
|
+
THE CHOSEN FIAT'S FLAG, NOT THE DOLLAR (owner's decision, 22.09.2026). The
|
|
223
|
+
platform sends the same `iconFiat` for every fiat — the dollar picture 10.png
|
|
224
|
+
— and a player counting in euro saw a dollar sign. The field takes the
|
|
225
|
+
platform's own flag of the chosen fiat (the picture its header and "Wallet
|
|
226
|
+
settings" draw), and `iconFiat` stays as the fallback in case the flag does
|
|
227
|
+
not load. A coin has its fallback too: the platform's picture did not load (on
|
|
228
|
+
dev its host answers 522 for ETH and BTC) — the field draws the built-in mark
|
|
229
|
+
(`fallback: null`) rather than a broken picture. */
|
|
230
|
+
export function coinMark(wallet) {
|
|
231
|
+
if (!hasWallet(wallet)) return null;
|
|
232
|
+
var fallback = typeof wallet.iconFiat === 'string' ? wallet.iconFiat : '';
|
|
233
|
+
if (isFiatView(wallet)) {
|
|
234
|
+
var flag = fiatMarkSrc(viewUnit(wallet));
|
|
235
|
+
return flag ? { host: flag, fallback: fallback } : { host: fallback, fallback: '' };
|
|
236
|
+
}
|
|
237
|
+
/* A FIAT WALLET STAYS FIAT WITH THE DISPLAY OFF TOO (owner, 22.09.2026: "the
|
|
238
|
+
fiat equivalent is off right now, so the fields must carry the euro mark;
|
|
239
|
+
had it been on, the dollar"). The rule above was written for crypto: with
|
|
240
|
+
the display off the platform sends the wallet coin's icon, and for a cash
|
|
241
|
+
wallet that is a picture its own host does not have — EUR asks for
|
|
242
|
+
`coin/17/39.png`, the host answers 522, the field stood empty for twenty
|
|
243
|
+
seconds and then took the built-in mark, which gave tether to everything
|
|
244
|
+
except BTC and ETH. A euro wallet wore the USDT mark. The platform's header
|
|
245
|
+
draws such a wallet a flag — now the field draws the same one; `iconFiat`
|
|
246
|
+
stays as the fallback. */
|
|
247
|
+
var own = viewUnitCrypto(wallet);
|
|
248
|
+
if (isFiatCode(own)) {
|
|
249
|
+
var ownFlag = fiatMarkSrc(own);
|
|
250
|
+
if (ownFlag) return { host: ownFlag, fallback: fallback };
|
|
251
|
+
}
|
|
252
|
+
var icon = typeof wallet.icon === 'string' ? wallet.icon.trim() : '';
|
|
253
|
+
return icon ? { host: icon, fallback: null } : null;
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
/** The precision of the WALLET ITSELF — the amount lives in it inside the game
|
|
257
|
+
and goes to the server in it. */
|
|
258
|
+
export function walletPrecision(wallet) {
|
|
259
|
+
if (!hasWallet(wallet)) return 2;
|
|
260
|
+
var bp = toWholeNumber(wallet.betPrecision);
|
|
261
|
+
if (bp != null) return Math.min(bp, MAX_DECIMALS);
|
|
262
|
+
var dec = toWholeNumber(wallet.decimals);
|
|
263
|
+
if (dec != null) return Math.min(dec, MAX_DECIMALS);
|
|
264
|
+
var p = toWholeNumber(wallet.precision);
|
|
265
|
+
if (p != null) return Math.min(p, MAX_DECIMALS);
|
|
266
|
+
return MAX_DECIMALS;
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
/** A round's payout at the wallet's precision — the number money is moved by.
|
|
270
|
+
*
|
|
271
|
+
* A function of its own rather than a `round2` on the spot, because the dice
|
|
272
|
+
* multiplier is not a round one: at 2.0002 and a stake of 0.1 the payout is
|
|
273
|
+
* 0.20002, and rounding to cents loses 0.00002. The loss is not cosmetic — the
|
|
274
|
+
* platform's header keeps its own count from what it was told, and that
|
|
275
|
+
* difference stays in it forever: a measurement taken on 2026-09-04 showed the
|
|
276
|
+
* server at 199968.89446929 against 199968.89444929 in the header.
|
|
277
|
+
*
|
|
278
|
+
* Rounding to the NEAREST, not down as for a stake: a stake is truncated so that
|
|
279
|
+
* the player does not bet more than they typed, while a payout is a result the
|
|
280
|
+
* server has already computed, and it may be neither lowered nor raised.
|
|
281
|
+
*/
|
|
282
|
+
export function payoutAtWalletPrecision(amount, mult, wallet) {
|
|
283
|
+
var n = Number(amount) * Number(mult);
|
|
284
|
+
if (!isFinite(n) || n <= 0) return 0;
|
|
285
|
+
var dp = walletPrecision(wallet);
|
|
286
|
+
var f = Math.pow(10, dp);
|
|
287
|
+
/* The same scrub of floating noise as in `truncate`: 0.1 × 2.0002 in binary
|
|
288
|
+
fractions gives 0.20002000000000002. */
|
|
289
|
+
return Math.round(parseFloat((n * f).toPrecision(15))) / f;
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
/** The FIELD's precision: in fiat mode the fiat's own precision, as the
|
|
293
|
+
platform's header prints it (zero for JPY, two for most), otherwise the
|
|
294
|
+
wallet's precision. */
|
|
295
|
+
export function viewPrecision(wallet) {
|
|
296
|
+
if (!hasWallet(wallet)) return 2;
|
|
297
|
+
return isFiatView(wallet) ? fiatPrecision(viewUnit(wallet)) : walletPrecision(wallet);
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
/** The label of the field's unit. */
|
|
301
|
+
export function viewUnit(wallet) {
|
|
302
|
+
if (!hasWallet(wallet)) return 'USD';
|
|
303
|
+
if (isFiatView(wallet)) {
|
|
304
|
+
return (typeof wallet.fiat === 'string' && wallet.fiat) ||
|
|
305
|
+
(typeof wallet.currentFiat === 'string' && wallet.currentFiat) || 'USD';
|
|
306
|
+
}
|
|
307
|
+
return (typeof wallet.symbol === 'string' && wallet.symbol) ||
|
|
308
|
+
(typeof wallet.name === 'string' && wallet.name) || '';
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
/** The fiat sign the amount fields put before the number in a fiat view —
|
|
312
|
+
$ for USD, € for EUR, £ for GBP, CA$ for CAD — the same sign the platform's
|
|
313
|
+
header prints. `''` in a crypto view: there the coin's own mark says it. */
|
|
314
|
+
export function fieldSign(wallet) {
|
|
315
|
+
return isFiatView(wallet) ? fiatSymbol(viewUnit(wallet)) : '';
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
/** The host's rate, when there is one. NOT "how many dollars a unit costs": in a
|
|
319
|
+
fiat display this is the rate to the CHOSEN fiat (the unit's price in $ ÷ the
|
|
320
|
+
fiat's price in $), and with the display off the platform sends 1 — there is
|
|
321
|
+
no fiat there at all. */
|
|
322
|
+
export function hostRate(wallet) {
|
|
323
|
+
if (!hasWallet(wallet)) return null;
|
|
324
|
+
var r = Number(wallet.rate);
|
|
325
|
+
return isFinite(r) && r > 0 ? r : null;
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
/* ---------- conversion between the wallet amount and the field ---------- */
|
|
329
|
+
|
|
330
|
+
/** Wallet amount → the field's value (dollars in fiat mode). */
|
|
331
|
+
export function viewFromWallet(amount, wallet) {
|
|
332
|
+
var n = toNumber(amount);
|
|
333
|
+
if (!isFiatView(wallet)) return n;
|
|
334
|
+
var rate = hostRate(wallet);
|
|
335
|
+
return rate == null ? n : n * rate;
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
/** The field's value → the wallet amount (what goes to the server). */
|
|
339
|
+
export function walletFromView(value, wallet) {
|
|
340
|
+
var n = toNumber(value);
|
|
341
|
+
if (!isFiatView(wallet)) return truncate(n, walletPrecision(wallet));
|
|
342
|
+
var rate = hostRate(wallet);
|
|
343
|
+
if (rate == null) return truncate(n, walletPrecision(wallet));
|
|
344
|
+
return truncate(n / rate, walletPrecision(wallet));
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
/* We truncate DOWN rather than round: a stake has no right to become larger than
|
|
348
|
+
the one typed — otherwise the player bets less than they see while the server
|
|
349
|
+
takes more. */
|
|
350
|
+
function truncate(n, dp) {
|
|
351
|
+
if (!isFinite(n)) return 0;
|
|
352
|
+
var f = Math.pow(10, dp);
|
|
353
|
+
/* A scrub of floating noise before truncating: 1.23456789 * 1e8 gives
|
|
354
|
+
123456788.99999999, and without it the last decimal would be lost. */
|
|
355
|
+
return Math.floor(parseFloat((n * f).toPrecision(15))) / f;
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
/* ---------- strings ---------- */
|
|
359
|
+
|
|
360
|
+
function groupThousands(wholePart) {
|
|
361
|
+
return wholePart.replace(/\B(?=(\d{3})+(?!\d))/g, ',');
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
/** A number → a string with a fixed number of decimals and grouped thousands. */
|
|
365
|
+
export function fmtFixed(n, dp) {
|
|
366
|
+
var v = toNumber(n);
|
|
367
|
+
var sign = v < 0 ? '-' : '';
|
|
368
|
+
var parts = Math.abs(v).toFixed(dp).split('.');
|
|
369
|
+
return sign + groupThousands(parts[0]) + (parts[1] ? '.' + parts[1] : '');
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
/** The field's value as a string — at the field's precision. Zero too:
|
|
373
|
+
`0.00000000`, not `0.00`. */
|
|
374
|
+
export function fmtView(amount, wallet) {
|
|
375
|
+
return fmtFixed(viewFromWallet(amount, wallet), viewPrecision(wallet));
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
/** The caption above the field: the opposite unit.
|
|
379
|
+
|
|
380
|
+
Fiat in the field — the caption names the wallet's currency. The wallet's
|
|
381
|
+
currency in the field — THERE IS NO CAPTION: with the display off the platform
|
|
382
|
+
gives no fiat and sends rate 1, and the old "$… USD" printed a coin amount as
|
|
383
|
+
dollars (1 BTC as "$1.00 USD"). Its own header shows only the coin in this
|
|
384
|
+
mode as well. */
|
|
385
|
+
export function counterText(amount, wallet) {
|
|
386
|
+
if (!hasWallet(wallet)) return null;
|
|
387
|
+
if (!isFiatView(wallet)) return null;
|
|
388
|
+
/* The amount is kept in the wallet's currency anyway, no rate is needed here. */
|
|
389
|
+
return fmtFixed(toNumber(amount), walletPrecision(wallet)) + ' ' + viewUnitCrypto(wallet);
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
/* The currency of the WALLET ITSELF — the one the money is kept in.
|
|
393
|
+
|
|
394
|
+
The name is asked for FIRST, and that is not a matter of taste. In a fiat
|
|
395
|
+
display the platform renames `symbol` into the fiat (its
|
|
396
|
+
`normalizeHousegamesCurrencySymbol`: with `isFiat` it takes baseCurrencySymbol
|
|
397
|
+
→ currentFiat → name) and leaves the wallet's currency in `name`. While
|
|
398
|
+
`symbol` stood first here, the caption above the field named the fiat instead
|
|
399
|
+
of the crypto: on dev 2026-09-05 in a fiat display it read "0.00000000 USD" —
|
|
400
|
+
eight decimals of crypto precision with a fiat name.
|
|
401
|
+
|
|
402
|
+
On the stand this was invisible: it did not rename `symbol`, and the caption
|
|
403
|
+
looked right. The stand has since been brought to the platform's rule. */
|
|
404
|
+
function viewUnitCrypto(wallet) {
|
|
405
|
+
return (typeof wallet.name === 'string' && wallet.name) ||
|
|
406
|
+
(typeof wallet.symbol === 'string' && wallet.symbol) || '';
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
/** Parsing what was typed: the field's string → a wallet amount.
|
|
410
|
+
|
|
411
|
+
A positive amount smaller than one wallet unit is NOT zero. Zero is a free
|
|
412
|
+
round, and a player who typed 0.00001 dollars on a bitcoin wallet meant to
|
|
413
|
+
bet, not to play for free (live check 22.09.2026: a bet of 0 went out). One
|
|
414
|
+
smallest unit is returned — it is below any minimum, so the game refuses it as
|
|
415
|
+
"below the minimum" and offers the minimum (owner's decision, 22.09.2026: a
|
|
416
|
+
refusal, not a free round). */
|
|
417
|
+
export function parseView(text, wallet) {
|
|
418
|
+
var raw = String(text == null ? '' : text).replace(/[\s,]/g, '');
|
|
419
|
+
if (raw === '' || raw === '.') return 0;
|
|
420
|
+
var amount = walletFromView(raw, wallet);
|
|
421
|
+
if (amount === 0 && toNumber(raw) > 0) return Math.pow(10, -walletPrecision(wallet));
|
|
422
|
+
return amount;
|
|
423
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/* GENERATED by tools/sync-kit.mjs --site <arbitrium-frontend>: do not edit.
|
|
2
|
+
The site's own coin pictures (apps/web/public/img/crypto, the ones its
|
|
3
|
+
header and wallet draw), carried as data: URIs so a game frame needs no
|
|
4
|
+
network to show them. */
|
|
5
|
+
export const COIN_MARKS = Object.freeze({
|
|
6
|
+
BTC: 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBvdmVyZmxvdz0idmlzaWJsZSIgc3R5bGU9ImRpc3BsYXk6IGJsb2NrOyIgdmlld0JveD0iMCAwIDMxLjk5NjUgMzIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGlkPSJCaXRjb2luIChCVEMpIj4KPHBhdGggaWQ9IkJpdGNvaW4gKEJUQylfMiIgZD0iTTMxLjUxNzggMTkuODcwNUMyOS4zODA5IDI4LjQ0MiAyMC42OTkzIDMzLjY1ODQgMTIuMTI2OCAzMS41MjFDMy41NTc4NSAyOS4zODQxIC0xLjY1ODYgMjAuNzAyIDAuNDc5MjUzIDEyLjEzMTJDMi42MTUyMyAzLjU1ODcgMTEuMjk2OCAtMS42NTgxNCAxOS44NjY3IDAuNDc4Nzc1QzI4LjQzODYgMi42MTU2OSAzMy42NTQ3IDExLjI5ODcgMzEuNTE3NiAxOS44NzA2TDMxLjUxNzcgMTkuODcwNUgzMS41MTc4WiIgZmlsbD0idmFyKC0tZmlsbC0wLCAjRjc5MzFBKSIvPgo8cGF0aCBpZD0iQml0Y29pbiAoQlRDKV8zIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTIzLjA1MzYgMTMuNzIwNEMyMy4zNzIgMTEuNTkxMSAyMS43NTEgMTAuNDQ2NiAxOS41MzQzIDkuNjgzMDZMMjAuMjUzNCA2Ljc5ODhMMTguNDk3NiA2LjM2MTMxTDE3Ljc5NzYgOS4xNjk2M0MxNy4zMzYgOS4wNTQ1MSAxNi44NjIgOC45NDYwNCAxNi4zOTA5IDguODM4NTFMMTcuMDk2IDYuMDExNjVMMTUuMzQxNCA1LjU3NDE3TDE0LjYyMTkgOC40NTc0OEMxNC4yMzk5IDguMzcwNTIgMTMuODY0OCA4LjI4NDU3IDEzLjUwMDggOC4xOTQwMUwxMy41MDI4IDguMTg0OTNMMTEuMDgxNiA3LjU4MDMyTDEwLjYxNDYgOS40NTU1NkMxMC42MTQ2IDkuNDU1NTYgMTEuOTE3MiA5Ljc1NDE1IDExLjg4OTcgOS43NzI1M0MxMi42MDA3IDkuOTQ5OTggMTIuNzI5MyAxMC40MjA2IDEyLjcwNzkgMTAuNzkzN0wxMS44ODg4IDE0LjA3OTVDMTEuOTM3OCAxNC4wOTIgMTIuMDAxMyAxNC4xMDk5IDEyLjA3MTMgMTQuMTM4MUwxMi4wMjA0IDE0LjEyNTRDMTEuOTc3IDE0LjExNDUgMTEuOTMyIDE0LjEwMzMgMTEuODg1OCAxNC4wOTIyTDEwLjczNzYgMTguNjk1MkMxMC42NTA3IDE4LjkxMTIgMTAuNDMwMiAxOS4yMzU0IDkuOTMzMDkgMTkuMTEyM0M5Ljk1MDY5IDE5LjEzNzggOC42NTcgMTguNzkzOCA4LjY1NyAxOC43OTM4TDcuNzg1MzEgMjAuODAzNkwxMC4wNzAxIDIxLjM3MzFDMTAuMzIwMyAyMS40MzU5IDEwLjU2NzYgMjEuNTAwMyAxMC44MTIzIDIxLjU2NDFDMTAuOTgzMyAyMS42MDg3IDExLjE1MzIgMjEuNjUzIDExLjMyMTkgMjEuNjk2MUwxMC41OTUzIDI0LjYxMzVMMTIuMzQ5MSAyNS4wNTFMMTMuMDY4NiAyMi4xNjQ2QzEzLjU0NzYgMjIuMjk0NiAxNC4wMTI2IDIyLjQxNDYgMTQuNDY3NyAyMi41Mjc3TDEzLjc1MDcgMjUuNDAwNUwxNS41MDY1IDI1LjgzNzlMMTYuMjMyOSAyMi45MjYxQzE5LjIyNjggMjMuNDkyNyAyMS40NzggMjMuMjY0MyAyMi40MjU2IDIwLjU1NjNDMjMuMTg5MSAxOC4zNzYgMjIuMzg3NiAxNy4xMTg1IDIwLjgxMjUgMTYuMjk4NEMyMS45NTk3IDE2LjAzMzggMjIuODIzOCAxNS4yNzkzIDIzLjA1NDIgMTMuNzIwNkwyMy4wNTM2IDEzLjcyMDJMMjMuMDUzNiAxMy43MjA0Wk0xOS4wNDIxIDE5LjM0NTVDMTguNTQ0MyAyMS4zNDU4IDE1LjQxMzMgMjAuNTE4OCAxMy45ODA3IDIwLjE0MDRDMTMuODUxOSAyMC4xMDY0IDEzLjczNjcgMjAuMDc2IDEzLjYzODUgMjAuMDUxNkwxNC42MDI3IDE2LjE4NjZDMTQuNzIyNCAxNi4yMTY1IDE0Ljg2ODYgMTYuMjQ5MyAxNS4wMzQzIDE2LjI4NjVMMTUuMDM0NCAxNi4yODY1QzE2LjUxNjIgMTYuNjE5MSAxOS41NTIyIDE3LjMwMDQgMTkuMDQyMiAxOS4zNDU1SDE5LjA0MjFaTTE1LjMzMTYgMTQuNDkyN0MxNi41MjU5IDE0LjgxMTUgMTkuMTMxNCAxNS41MDY4IDE5LjU4NTEgMTMuNjg4OEgxOS41ODUzQzIwLjA0ODYgMTEuODI5NCAxNy41MTY2IDExLjI2ODggMTYuMjc5OSAxMC45OTVDMTYuMTQwOCAxMC45NjQyIDE2LjAxODEgMTAuOTM3MSAxNS45MTc5IDEwLjkxMjFMMTUuMDQzNyAxNC40MTc0QzE1LjEyNjMgMTQuNDM3OSAxNS4yMjMxIDE0LjQ2MzggMTUuMzMxNiAxNC40OTI3WiIgZmlsbD0idmFyKC0tZmlsbC0wLCB3aGl0ZSkiLz4KPC9nPgo8L3N2Zz4K',
|
|
7
|
+
BNB: 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBvdmVyZmxvdz0idmlzaWJsZSIgc3R5bGU9ImRpc3BsYXk6IGJsb2NrOyIgdmlld0JveD0iMCAwIDMxLjk5NjQgMzIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGlkPSJCaW5hbmNlIENvaW4gKEJOQikiPgo8cGF0aCBpZD0iQmluYW5jZSBDb2luIChCTkIpXzIiIGQ9Ik0zMS41MTc3IDE5Ljg3MDVDMjkuMzgwOCAyOC40NDIgMjAuNjk5MiAzMy42NTg0IDEyLjEyNjcgMzEuNTIxQzMuNTU3NzggMjkuMzg0MSAtMS42NTg2OCAyMC43MDIgMC40NzkxNzcgMTIuMTMxMkMyLjYxNTE1IDMuNTU4NyAxMS4yOTY3IC0xLjY1ODE0IDE5Ljg2NjYgMC40Nzg3NzVDMjguNDM4NSAyLjYxNTY5IDMzLjY1NDYgMTEuMjk4NyAzMS41MTc1IDE5Ljg3MDZMMzEuNTE3NiAxOS44NzA1SDMxLjUxNzdaIiBmaWxsPSJ2YXIoLS1maWxsLTAsICNGM0JBMkYpIi8+CjxwYXRoIGlkPSJCaW5hbmNlIENvaW4gKEJOQilfMyIgZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xNiAxMC4xNTQ3TDExLjg1NjkgMTQuMjk3OEwxMS44NTcgMTQuMjk3Nkw5LjQ0NjQgMTEuODg2OUwxNiA1LjMzMzMzTDIyLjU1NTcgMTEuODg4OUwyMC4xNDUxIDE0LjI5OTZMMTYgMTAuMTU0N1pNNy43NDQwOSAxMy41ODg5TDUuMzMzMzMgMTZMNy43NDM5MiAxOC40MTAyTDEwLjE1NDcgMTUuOTk5NUw3Ljc0NDA5IDEzLjU4ODlaTTExLjg1NjkgMTcuNzAyNUwxNiAyMS44NDUzTDIwLjE0NSAxNy43MDA1TDIyLjU1NjkgMjAuMTA5OUwyMi41NTU3IDIwLjExMTJMMTYgMjYuNjY2N0w5LjQ0NjQgMjAuMTEzMUw5LjQ0Mjk5IDIwLjEwOTdMMTEuODU2OSAxNy43MDI1Wk0yNC4yNTYxIDEzLjU5MDNMMjEuODQ1MyAxNi4wMDFMMjQuMjU2IDE4LjQxMTZMMjYuNjY2NyAxNi4wMDA5TDI0LjI1NjEgMTMuNTkwM1oiIGZpbGw9InZhcigtLWZpbGwtMCwgd2hpdGUpIi8+CjxwYXRoIGlkPSJCaW5hbmNlIENvaW4gKEJOQilfNCIgZD0iTTE4LjQ0NSAxNS45OTg3SDE4LjQ0NkwxNiAxMy41NTI2TDE0LjE5MiAxNS4zNlYxNS4zNkwxMy45ODQzIDE1LjU2NzhMMTMuNTU2IDE1Ljk5NjJMMTMuNTUyNiAxNS45OTk2TDEzLjU1NiAxNi4wMDMxTDE2IDE4LjQ0NzRMMTguNDQ2MiAxNi4wMDEzTDE4LjQ0NzQgMTUuOTk5OUwxOC40NDUxIDE1Ljk5ODciIGZpbGw9InZhcigtLWZpbGwtMCwgd2hpdGUpIi8+CjwvZz4KPC9zdmc+Cg==',
|
|
8
|
+
DOGE: 'data:image/webp;base64,UklGRiQDAABXRUJQVlA4WAoAAAAQAAAALwAALwAAQUxQSN4AAAABgBDbbt3oQRAEQQqDiokFwQxaBi2DlIGXgcNAENS/7bcEImICMC5Wrz0ys+/VFKul7DnYTFdIiZx51mklcnaZoy0Xdp1wilwa21DJ5WWgJGH5aUvK0w8aHKHfepK2LyVp/YMmb8jbhSgdgCZzCGBU6UDj2qFJLsZmla3ubLeDrSd70P3DoDvY+o3tXtmqsZmwKXauBjiXARJUCsCZzgAgQaRvcB7H58bS8VWDI/QbjGPDr87g+N3XOUa3WBOGce0rmmKqTwvHbL1MCRcsVPsbubtgtVq9H5kZx62aYBxWUDggIAIAANAKAJ0BKjAAMAA+bS6TR6QiIaEuNAgAgA2JZAC7M1o8qVYHGjZ2TDPjQamqCGheSjohe7WnA7fj/0Yfrfq/xwmmI044BVGaXT0P4bJ9D0MQndJ33GXlCm0Qber6lYAAAP7vtGYAgQgfiOzs/k49sG5Lx+2iWXHiWme69fs+89krX2rek7pPIPn16M5XA/9G6vIJPv66ue7syJA0xsuS7aHym9kjjBT5lXEY1x6Zu/Qd9k/YLW20+HMO5e2lXvh6xMTBQRnjwyyJKwsLWaiQ+LuhPuf0bm5XmGk5WscP8OJpqFDouAhc8lFU/gBra6dql1gkPs2PE9FnfedRVjaC74IwvDEAhDHxiIFCxo0oEuFQeusbLyCsem2YJu2uu9c+NXDmsssbvWClPVRlifjHQvCEm7+GAkCTDHXKt2Bh1MaKq1OL3k20nAI6yPNAI51DqY82FL8Ig2LPhCsbWMEFSu+dXQ9ahmO8mhb878iQzqf4+qzjJFknHZzqqlVJL1CiIDCEN6mPhpcrBNPnTMK5qRyIF1cxE/0QwZNNKKGBYybQ+k3eR1F3iopmwbQrFy4tbE6WmSfLe8ZykgHGiN83nmqFca78gzlvRTzzUJrzI61HdFQQTFlP1iPekwwnI1BgHM9CwZ8ooUTJADfcblrCrtsSCCehM2fypUqsHt6Rk8vwCMQldZi0+zmAxVh+tqgYW0iWeaJvpB7a/WaDZeuGAAA=',
|
|
9
|
+
ETH: 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBvdmVyZmxvdz0idmlzaWJsZSIgc3R5bGU9ImRpc3BsYXk6IGJsb2NrOyIgdmlld0JveD0iMCAwIDMyIDMyIiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8ZyBpZD0iRXRoZXJldW0gKEVUSCkiPgo8Y2lyY2xlIGlkPSJFdGhlcmV1bSAoRVRIKV8yIiBjeD0iMTYiIGN5PSIxNiIgcj0iMTYiIGZpbGw9InZhcigtLWZpbGwtMCwgIzZDODBEQykiLz4KPGcgaWQ9IkV0aGVyZXVtIChFVEgpXzMiPgo8cGF0aCBpZD0iRXRoZXJldW0gKEVUSClfNCIgZD0iTTE1Ljk1NjQgNi40TDE1LjgyOTEgNi44MzIzNFYxOS4zNzY4TDE1Ljk1NjQgMTkuNTAzOEwyMS43NzkyIDE2LjA2MThMMTUuOTU2NCA2LjRaIiBmaWxsPSJ2YXIoLS1maWxsLTAsIHdoaXRlKSIvPgo8cGF0aCBpZD0iRXRoZXJldW0gKEVUSClfNSIgZD0iTTE1Ljk1NjQgNi40TDEwLjEzMzMgMTYuMDYxOEwxNS45NTY0IDE5LjUwMzhWMTMuNDE1VjYuNFoiIGZpbGw9InZhcigtLWZpbGwtMCwgd2hpdGUpIi8+CjxwYXRoIGlkPSJFdGhlcmV1bSAoRVRIKV82IiBkPSJNMTUuOTU2NCAyMC42MDYyTDE1Ljg4NDYgMjAuNjkzN1YyNS4xNjIyTDE1Ljk1NjQgMjUuMzcxN0wyMS43ODI4IDE3LjE2NjFMMTUuOTU2NCAyMC42MDYyWiIgZmlsbD0idmFyKC0tZmlsbC0wLCB3aGl0ZSkiLz4KPHBhdGggaWQ9IkV0aGVyZXVtIChFVEgpXzciIGQ9Ik0xNS45NTY0IDI1LjM3MTdWMjAuNjA2MkwxMC4xMzMzIDE3LjE2NjFMMTUuOTU2NCAyNS4zNzE3WiIgZmlsbD0idmFyKC0tZmlsbC0wLCB3aGl0ZSkiLz4KPHBhdGggaWQ9IkV0aGVyZXVtIChFVEgpXzgiIGQ9Ik0xNS45NTY0IDE5LjUwMzhMMjEuNzc5MiAxNi4wNjE4TDE1Ljk1NjQgMTMuNDE1VjE5LjUwMzhaIiBmaWxsPSJ2YXIoLS1maWxsLTAsIHdoaXRlKSIvPgo8cGF0aCBpZD0iRXRoZXJldW0gKEVUSClfOSIgZD0iTTEwLjEzMzMgMTYuMDYxOEwxNS45NTY0IDE5LjUwMzhWMTMuNDE1TDEwLjEzMzMgMTYuMDYxOFoiIGZpbGw9InZhcigtLWZpbGwtMCwgd2hpdGUpIi8+CjwvZz4KPC9nPgo8L3N2Zz4K',
|
|
10
|
+
LTC: 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBvdmVyZmxvdz0idmlzaWJsZSIgc3R5bGU9ImRpc3BsYXk6IGJsb2NrOyIgdmlld0JveD0iMCAwIDMxLjk5OTkgMzIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGlkPSJMaXRlY29pbiAoTFRDKSI+CjxjaXJjbGUgaWQ9IkxpdGVjb2luIChMVEMpXzIiIGN4PSIxNi4xMzMzIiBjeT0iMTUuODY2NyIgcj0iMTQuMjY2NyIgZmlsbD0idmFyKC0tZmlsbC0wLCB3aGl0ZSkiLz4KPHBhdGggaWQ9IkxpdGVjb2luIChMVEMpXzMiIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMCAxNkMwIDcuMTYzNDQgNy4xNjM0MSAwIDE1Ljk5OTkgMEgxNi4wOTI5QzIwLjMyNCAwLjAxMjMxMTcgMjQuMzc3IDEuNzA0OTQgMjcuMzYwMSA0LjcwNTUzQzMwLjM0MzIgNy43MDYxMSAzMi4wMTIyIDExLjc2ODkgMzEuOTk5OSAxNkMzMS45OTk5IDI0LjgzNjYgMjQuODM2NSAzMiAxNS45OTk5IDMyQzcuMTYzNDEgMzIgMCAyNC44MzY2IDAgMTZaTTE0LjYwNTMgMjIuMTU5OEwxNi4yNzExIDE2LjU0MjRMMTguODY2NyAxNS44MDYzTDE5LjQwOTEgMTMuOTQ2N0wxNi44NTIyIDE0LjcyMTVMMTkuNTY0MSA1LjUwMTIxVjUuMzU0QzE5LjU2IDUuMjM0NzggMTkuNTA4OCA1LjEyMjA3IDE5LjQyMTYgNS4wNDA2OEMxOS4zMzQ0IDQuOTU5MyAxOS4yMTg0IDQuOTE1OTIgMTkuMDk5MiA0LjkyMDFIMTUuNjUxM0MxNS4zODI3IDQuOTExODIgMTUuMTQzIDUuMDg3NTkgMTUuMDcwMiA1LjM0NjI1TDExLjg1NDcgMTYuMjcxMkw5LjI5Nzc4IDE3LjA0Nkw4LjcxNjY3IDE4LjgyODFMMTEuMjczNiAxOC4wNTMzTDguOTg3ODYgMjUuODQwMkgyMi42MjQ2QzIyLjg5NDEgMjUuODUxMyAyMy4xMzU0IDI1LjY3NDQgMjMuMjA1NyAyNS40MTRMMjMuOTgwNSAyMi43NDA5VjIyLjU5MzdDMjMuOTc2NSAyMi40NzQ1IDIzLjkyNTIgMjIuMzYxOCAyMy44MzggMjIuMjgwNEMyMy43NTA4IDIyLjE5OSAyMy42MzQ4IDIyLjE1NTYgMjMuNTE1NiAyMi4xNTk4SDE0LjYwNTNaIiBmaWxsPSJ2YXIoLS1maWxsLTAsICMzNDVEOUQpIi8+CjwvZz4KPC9zdmc+Cg==',
|
|
11
|
+
POL: 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBvdmVyZmxvdz0idmlzaWJsZSIgc3R5bGU9ImRpc3BsYXk6IGJsb2NrOyIgdmlld0JveD0iMCAwIDMyIDMyIiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8ZyBpZD0iUG9seWdvbiAoTUFUSUMpIj4KPGNpcmNsZSBpZD0iUG9seWdvbiAoTUFUSUMpXzIiIGN4PSIxNiIgY3k9IjE2IiByPSIxNiIgZmlsbD0idmFyKC0tZmlsbC0wLCAjRURGMEY0KSIvPgo8ZyBpZD0iUG9seWdvbiAoTUFUSUMpXzMiPgo8cGF0aCBpZD0iUG9seWdvbiAoTUFUSUMpXzQiIGQ9Ik0yMC44MDA3IDEyLjc4NjVDMjAuNDU5NSAxMi41OTAzIDIwLjAyMDkgMTIuNTkwMyAxOS42MzEgMTIuNzg2NUwxNi45MDE3IDE0LjQwNTVMMTUuMDQ5NiAxNS40MzU4TDEyLjM2OSAxNy4wNTQ4QzEyLjAyNzggMTcuMjUxIDExLjU4OTIgMTcuMjUxIDExLjE5OTMgMTcuMDU0OEw5LjEwMzU3IDE1Ljc3OTJDOC43NjI0IDE1LjU4MyA4LjUxODcxIDE1LjE5MDUgOC41MTg3MSAxNC43NDlWMTIuMjk1OUM4LjUxODcxIDExLjkwMzUgOC43MTM2NiAxMS41MTEgOS4xMDM1NyAxMS4yNjU3TDExLjE5OTMgMTAuMDM5MkMxMS41NDA1IDkuODQyOTMgMTEuOTc5MSA5Ljg0MjkzIDEyLjM2OSAxMC4wMzkyTDE0LjQ2NDggMTEuMzE0N0MxNC44MDU5IDExLjUxMSAxNS4wNDk2IDExLjkwMzUgMTUuMDQ5NiAxMi4zNDVWMTMuOTY0TDE2LjkwMTcgMTIuODg0N1YxMS4yMTY2QzE2LjkwMTcgMTAuODI0MSAxNi43MDY3IDEwLjQzMTcgMTYuMzE2OCAxMC4xODY0TDEyLjQxNzggNy44ODA1MUMxMi4wNzY2IDcuNjg0MjcgMTEuNjM3OSA3LjY4NDI3IDExLjI0OCA3Ljg4MDUxTDcuMjUxNTIgMTAuMjM1NEM2Ljg2MTYyIDEwLjQzMTcgNi42NjY2NyAxMC44MjQxIDYuNjY2NjcgMTEuMjE2NlYxNS44MjgzQzYuNjY2NjcgMTYuMjIwOCA2Ljg2MTYyIDE2LjYxMzMgNy4yNTE1MiAxNi44NTg2TDExLjE5OTMgMTkuMTY0NEMxMS41NDA1IDE5LjM2MDYgMTEuOTc5MSAxOS4zNjA2IDEyLjM2OSAxOS4xNjQ0TDE1LjA0OTYgMTcuNTk0NUwxNi45MDE3IDE2LjUxNTFMMTkuNTgyMiAxNC45NDUyQzE5LjkyMzQgMTQuNzQ5IDIwLjM2MjEgMTQuNzQ5IDIwLjc1MiAxNC45NDUyTDIyLjg0NzcgMTYuMTcxN0MyMy4xODg5IDE2LjM2OCAyMy40MzI1IDE2Ljc2MDQgMjMuNDMyNSAxNy4yMDJWMTkuNjU1QzIzLjQzMjUgMjAuMDQ3NSAyMy4yMzc2IDIwLjQ0IDIyLjg0NzcgMjAuNjg1M0wyMC44MDA3IDIxLjkxMThDMjAuNDU5NSAyMi4xMDggMjAuMDIwOSAyMi4xMDggMTkuNjMxIDIxLjkxMThMMTcuNTM1MiAyMC42ODUzQzE3LjE5NDEgMjAuNDg5IDE2Ljk1MDQgMjAuMDk2NSAxNi45NTA0IDE5LjY1NVYxOC4wODUxTDE1LjA5ODMgMTkuMTY0NFYyMC43ODM0QzE1LjA5ODMgMjEuMTc1OSAxNS4yOTMzIDIxLjU2ODMgMTUuNjgzMiAyMS44MTM2TDE5LjYzMSAyNC4xMTk1QzE5Ljk3MjEgMjQuMzE1NyAyMC40MTA4IDI0LjMxNTcgMjAuODAwNyAyNC4xMTk1TDI0Ljc0ODUgMjEuODEzNkMyNS4wODk2IDIxLjYxNzQgMjUuMzMzMyAyMS4yMjQ5IDI1LjMzMzMgMjAuNzgzNFYxNi4xMjI3QzI1LjMzMzMgMTUuNzMwMiAyNS4xMzg0IDE1LjMzNzcgMjQuNzQ4NSAxNS4wOTI0TDIwLjgwMDcgMTIuNzg2NVoiIGZpbGw9InZhcigtLWZpbGwtMCwgIzgyNDdFNSkiLz4KPC9nPgo8L2c+Cjwvc3ZnPgo=',
|
|
12
|
+
SHIB: 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBvdmVyZmxvdz0idmlzaWJsZSIgc3R5bGU9ImRpc3BsYXk6IGJsb2NrOyIgdmlld0JveD0iMCAwIDMyIDMyIiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8ZyBpZD0iU0hJQkEgSU5VIChTSElCKSI+CjxwYXRoIGlkPSJTSElCQSBJTlUgKFNISUIpXzIiIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMTYgMzJDNy4yIDMyIDAgMjQuODAwMSAwIDE1LjkyMDNDMC4wOCA3LjEyMDUxIDcuMiAtMC4wNzkzMzgxIDE2LjA4IDAuMDAwNjYwMjcyQzI0Ljg4IDAuMDgwNjU4NiAzMiA3LjIwMDUxIDMyIDE2LjE2MDNDMzEuOTIgMjQuODgwMSAyNC44IDMyIDE2IDMyIiBmaWxsPSJ2YXIoLS1maWxsLTAsICNFNDJEMDQpIi8+CjxnIGlkPSJTSElCQSBJTlUgKFNISUIpXzMiPgo8cGF0aCBpZD0iU0hJQkEgSU5VIChTSElCKV80IiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTE2LjMxMTcgMjcuNzMzM0MxNy40NzMgMjcuNzMzMyAyMC40NTIgMjcuMjA5OCAyMy4wNzc2IDI1LjExNTZDMjYuMDk2NyAyMi43MDc2IDI2LjM4MTIgMjEuMzY0NiAyNi41NjQ3IDIwLjQ5ODdDMjYuNTgwNiAyMC40MjMzIDI2LjU5NTggMjAuMzUxNiAyNi42MTIgMjAuMjgzQzI2LjY0MjYgMjAuMTUzMiAyNi42NjA1IDE5Ljk3NyAyNi42NjY3IDE5Ljc2NzZDMjYuMDMyNSAxOS42NjQ5IDI1LjE0MzYgMTkuNjA2MSAyNC4xMDYzIDE5LjcyOTNDMjIuNDA5OCAxOS45MzA2IDIxLjA3NjggMjEuMDg4NCAyMC42MjI0IDIxLjY0MjJDMjAuMzY5OSAyMC4zODM3IDE5LjEzNzkgMTcuODY2NyAxNi4yMjk2IDE3Ljg2NjdDMTMuMzIxMyAxNy44NjY3IDExLjc1MjYgMjAuMzgzNyAxMS4zMzE5IDIxLjY0MjJDMTEuMDYyNiAyMS4xNzIzIDEwLjA1OTUgMjAuMTMyIDguMjAxMzggMTkuNzI5M0M3LjA1MjUxIDE5LjQ4MDMgNi4wNTAzNSAxOS42MDMzIDUuMzMzMzMgMTkuODEyOEM1LjM4OTk0IDIwLjc0ODYgNS42OTc1NCAyMS43NDY4IDYuNTE2MjQgMjIuOEM3LjkyNDk2IDI0LjYxMjIgMTAuMTEwOCAyNS43MzEzIDExLjA4NiAyNi4yMzA2QzExLjE5NDMgMjYuMjg2MSAxMS4yODc3IDI2LjMzMzkgMTEuMzYzNSAyNi4zNzQyQzEyLjEyMDggMjYuNzc2OSAxNC4xOTEgMjcuNzMzMyAxNi4zMTE3IDI3LjczMzNaIiBmaWxsPSJ2YXIoLS1maWxsLTAsIHdoaXRlKSIvPgo8cGF0aCBpZD0iU0hJQkEgSU5VIChTSElCKV81IiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTI2LjY2NDMgMTkuNzMwOEMyNi4wMzA0IDE5LjYyODQgMjUuMTQyMSAxOS41Njk4IDI0LjEwNTQgMTkuNjkyNUMyMi40MDk5IDE5Ljg5MzMgMjEuMDc3NiAyMS4wNDc4IDIwLjYyMzUgMjEuNkMyMC4zNzEyIDIwLjM0NTEgMTkuMTM5OSAxNy44MzUzIDE2LjIzMzIgMTcuODM1M0MxMy4zMjY2IDE3LjgzNTMgMTEuNzU4OSAyMC4zNDUxIDExLjMzODQgMjEuNkMxMS4wNjkyIDIxLjEzMTUgMTAuMDY2NyAyMC4wOTQxIDguMjA5NyAxOS42OTI1QzcuMDYxNDkgMTkuNDQ0MyA2LjA1OTkxIDE5LjU2NyA1LjM0MzMxIDE5Ljc3NkM1LjI5MTcyIDE4LjkyNSA1LjQ0ODcyIDE4LjEyNTcgNS42MTcyIDE3LjM4MzVDNS44OTk3OSAxNi4xMzg3IDYuNjA5NjMgMTQuNDg4OSA2LjkyOTIzIDEzLjgxOTZDNi42NDMyNyAxMy4xMzM2IDUuOTgwNTMgMTEuMTg5MyA1LjYxNzIgOC45MDAzOUM1LjI1Mzg3IDYuNjExNDUgNS44Njk1MSA1LjA2ODc2IDYuMjIyNzUgNC41ODM1M0M2Ljc5NDY2IDQuNzM0MTIgOC4xNjA1MiA1LjIwNTk2IDkuMDQ4NjYgNS44ODg2M0M5LjkzNjggNi41NzEyOSAxMS4zMDI2IDguMDgwNTIgMTEuODc0NiA4Ljc0OThDMTIuNjE0NyA4LjU0OTAyIDE0LjUxODggOC4xNDc0NSAxNi4yMTQ0IDguMTQ3NDVDMTcuOTA5OSA4LjE0NzQ1IDE5LjU0NDkgOC41NDkwMiAyMC4xNTA0IDguNzQ5OEMyMC42NTUxIDguMTQ3NDUgMjEuODk2NCA2LjczMTkyIDIyLjgyNSA1Ljg4ODYzQzIzLjc1MzUgNS4wNDUzMyAyNS4yNjM5IDQuNjMzNzMgMjUuOTAzMiA0LjUzMzMzQzI2LjA3MTMgNC43NTA4NSAyNi40MjggNS4zODY2NyAyNi41MDg3IDYuMTg5OEMyNi42MDk2IDcuMTkzNzMgMjYuMzA2OSA5LjMwMTk2IDI1LjkwMzIgMTAuNzA3NUMyNS41ODAyIDExLjgzMTggMjUuMTYzIDEzLjE1MDMgMjQuOTk0OCAxMy42NjlDMjUuMDc4OSAxMy44NTMxIDI1LjM2ODMgMTQuNDUyMSAyNS44NTI3IDE1LjM3NTdDMjYuMzY2NCAxNi4zNTUxIDI2LjY5ODUgMTguNTYyNiAyNi42NjQzIDE5LjczMDhaIiBmaWxsPSJ2YXIoLS1maWxsLTAsICNGRkFBMzUpIi8+CjxwYXRoIGlkPSJTSElCQSBJTlUgKFNISUIpXzYiIGQ9Ik0xOC4zODMzIDI0LjE5NzlDMTguMjYzMyAyNC4zNTg0IDE4LjEzMzMgMjQuNjY2MiAxOC4wODMzIDI0LjhWMjQuNzQ5OEwxNy45MzMzIDIzLjU0NTZDMTcuNjUgMjMuNTc5IDE2LjkxMzMgMjMuNjQ1OSAxNi4yMzMzIDIzLjY0NTlDMTUuNTUzMyAyMy42NDU5IDE0Ljc1IDIzLjU3OSAxNC40MzMzIDIzLjU0NTZMMTQuMzgzMyAyNC43NDk4QzE0LjM1IDI0LjY5OTYgMTQuMjYzMyAyNC41NTkxIDE0LjE4MzMgMjQuMzk4NkMxNC4wODMzIDI0LjE5NzkgMTMuNzMzMyAyMy44OTY4IDEzLjczMzMgMjMuNzQ2M0MxMy43MzMzIDIzLjYyNTggMTMuNTY2NyAyMy4zNjE2IDEzLjQ4MzMgMjMuMjQ0NUwxMy4zMzMzIDIzLjA0MzhIMTQuMjMzM0wxNC40MzMzIDIzLjE5NDNDMTQuNiAyMy4xNzc2IDE1LjAyMzMgMjMuMTY0MiAxNS4zODMzIDIzLjI0NDVDMTUuNzQzMyAyMy4zMjQ4IDE1Ljk2NjYgMjMuMDEwNCAxNi4wMzMzIDIyLjg0MzFWMjIuMDQwMkMxNS44ODMzIDIxLjkzOTkgMTUuNTEzMyAyMS43MDkgMTUuMjMzMyAyMS41ODg2QzE0Ljg4MzMgMjEuNDM4MSAxNC41MzMzIDIwLjgzNiAxNC42MzMzIDIwLjIzMzhDMTQuNzMzMyAxOS42MzE3IDE1LjAzMzMgMTkuNDMxIDE1LjIzMzMgMTkuNDgxMkMxNS40MzMzIDE5LjUzMTMgMTYuNzMzMyAxOS40MzEgMTYuOTMzMyAxOS40ODEyQzE3LjEzMzMgMTkuNTMxMyAxNy40ODMzIDE5LjYzMTcgMTcuNjMzMyAxOS44ODI2QzE3Ljc4MzMgMjAuMTMzNSAxNy42ODMzIDIxLjEzNyAxNy4zODMzIDIxLjQ4ODNDMTcuMTQzMyAyMS43NjkzIDE2LjY4MzMgMjEuOTczMyAxNi40ODMzIDIyLjA0MDJWMjIuODQzMUMxNi40ODMzIDIyLjk0MzQgMTYuODMzMyAyMy4xOTQzIDE2Ljg4MzMgMjMuMjQ0NUMxNi45MzMzIDIzLjI5NDcgMTcuNjgzMyAyMy4yNDQ1IDE3LjgzMzMgMjMuMjQ0NUMxNy45NTMzIDIzLjI0NDUgMTguMDUgMjMuMTQ0MSAxOC4wODMzIDIzLjA5NEgxOC45MzMzVjIzLjI5NDdDMTguOTMzMyAyMy4zOTUgMTguNzgzMyAyMy44NDY2IDE4LjczMzMgMjMuODk2OEMxOC42ODMzIDIzLjk0NyAxOC41MzMzIDIzLjk5NzIgMTguMzgzMyAyNC4xOTc5WiIgZmlsbD0idmFyKC0tZmlsbC0wLCBibGFjaykiLz4KPHBhdGggaWQ9IlNISUJBIElOVSAoU0hJQilfNyIgZD0iTTE2Ljc3NDYgMjMuODY2N0wxNi4yNjY3IDI0LjI2NjdMMTUuODYwMyAyMy44NjY3TDE1LjUwNDggMjQuMDQ0NEwxNS4yIDIzLjczMzNIMTcuMzMzM0wxNy4wMjg2IDI0LjA4ODlMMTYuNzc0NiAyMy44NjY3WiIgZmlsbD0idmFyKC0tZmlsbC0wLCBibGFjaykiLz4KPHBhdGggaWQ9IlNISUJBIElOVSAoU0hJQilfOCIgZD0iTTExLjMwODEgMTUuNjYxNUMxMC43MTMgMTUuNDE1NCAxMC4wNjgzIDE1LjI1MTMgOS44MjA0IDE1LjJDOS43NTQyOCAxNS4yMzQyIDkuNjIyMDQgMTUuMzQzNiA5LjYyMjA0IDE1LjUwNzdDOS42MjIwNCAxNS43MTI4IDkuNTcyNDUgMTUuOTE3OSA5LjYyMjA0IDE2LjMyODJDOS42NzE2MyAxNi43Mzg1IDEwLjA2ODMgMTYuOTk0OSAxMC43NjI2IDE3LjMwMjZDMTEuNDU2OSAxNy42MTAzIDEyLjY0NyAxNy44NjY3IDEzLjQ5MDEgMTcuODY2N0MxNC4zMzMxIDE3Ljg2NjcgMTMuNTM5NiAxNi45OTQ5IDEzLjI0MjEgMTYuNzg5N0MxMi45NDQ2IDE2LjU4NDYgMTIuMDUxOSAxNS45NjkyIDExLjMwODEgMTUuNjYxNVoiIGZpbGw9InZhcigtLWZpbGwtMCwgYmxhY2spIi8+CjxwYXRoIGlkPSJTSElCQSBJTlUgKFNISUIpXzkiIGQ9Ik0xMi4xMjI1IDE0LjMwMDZDMTEuNjc3OCAxNC4zODAxIDExLjA2MTIgMTQuNCAxMC44MDg2IDE0LjRDMTAuNTU1OSAxNC4zNjY5IDEwLjAyMDIgMTQuMjExMSA5Ljg5ODk0IDEzLjg1MzNDOS43NDczMyAxMy40MDU5IDEwLjE1MTYgMTIuOTA4OSAxMC42NTcgMTIuNjYwNEMxMS4xNjIzIDEyLjQxMTggMTEuODE5MyAxMi41MTEyIDEyLjIyMzYgMTMuMTA3N0MxMi42Mjc4IDEzLjcwNDEgMTIuNjc4NCAxNC4yMDEyIDEyLjEyMjUgMTQuMzAwNloiIGZpbGw9InZhcigtLWZpbGwtMCwgd2hpdGUpIi8+CjxwYXRoIGlkPSJTSElCQSBJTlUgKFNISUIpXzEwIiBkPSJNMjEuMjI1MiAxNS4zOTQ5QzIxLjgyMDMgMTUuMTQ4NyAyMi40NjUgMTQuOTg0NiAyMi43MTI5IDE0LjkzMzNDMjIuNzc5MSAxNC45Njc1IDIyLjkxMTMgMTUuMDc2OSAyMi45MTEzIDE1LjI0MUMyMi45MTEzIDE1LjQ0NjIgMjIuOTYwOSAxNS42NTEzIDIyLjkxMTMgMTYuMDYxNUMyMi44NjE3IDE2LjQ3MTggMjIuNDY1IDE2LjcyODIgMjEuNzcwNyAxNy4wMzU5QzIxLjA3NjUgMTcuMzQzNiAxOS44ODYzIDE3LjYgMTkuMDQzMyAxNy42QzE4LjIwMDMgMTcuNiAxOC45OTM3IDE2LjcyODIgMTkuMjkxMiAxNi41MjMxQzE5LjU4ODggMTYuMzE3OSAyMC40ODE0IDE1LjcwMjYgMjEuMjI1MiAxNS4zOTQ5WiIgZmlsbD0idmFyKC0tZmlsbC0wLCBibGFjaykiLz4KPHBhdGggaWQ9IlNISUJBIElOVSAoU0hJQilfMTEiIGQ9Ik0xOS42MTA4IDE0LjMwMDZDMjAuMDU1NiAxNC4zODAxIDIwLjY3MjEgMTQuNCAyMC45MjQ4IDE0LjRDMjEuMTc3NCAxNC4zNjY5IDIxLjcxMzEgMTQuMjExMSAyMS44MzQ0IDEzLjg1MzNDMjEuOTg2IDEzLjQwNTkgMjEuNTgxNyAxMi45MDg5IDIxLjA3NjQgMTIuNjYwNEMyMC41NzEgMTIuNDExOCAxOS45MTQxIDEyLjUxMTIgMTkuNTA5OCAxMy4xMDc3QzE5LjEwNTUgMTMuNzA0MSAxOS4wNTUgMTQuMjAxMiAxOS42MTA4IDE0LjMwMDZaIiBmaWxsPSJ2YXIoLS1maWxsLTAsIHdoaXRlKSIvPgo8cGF0aCBpZD0iU0hJQkEgSU5VIChTSElCKV8xMiIgZD0iTTguNjQ3OCAxMC41Nzk4QzguMjg0NDEgMTAuOTc2NyA3LjU4NzkgMTEuODY5OCA3LjI4NTA3IDEyLjI2NjdDNy4wODMxOCAxMS44MzY3IDYuNjM5MDMgMTAuNjg5IDYuNDc3NTIgOS41Mzc5OEM2LjMxNjAxIDguMzg2OTggNi40NDM4OCA2LjYxMDg1IDYuNTI3OTkgNS44NjY2N0M2Ljc0NjcxIDUuODgzMjEgNy4zODYwMSA2LjA2NTEyIDguMTkzNTYgNi42NjA0N0M5LjAwMTEgNy4yNTU4MSAxMC4xNzg4IDguMzYzODMgMTAuNjY2NyA4Ljg0MzQxQzEwLjE0NTEgOS4yNTY4NSA5LjAxMTIgMTAuMTgyOSA4LjY0NzggMTAuNTc5OFoiIGZpbGw9InZhcigtLWZpbGwtMCwgI0ZGOEMzMCkiLz4KPHBhdGggaWQ9IlNISUJBIElOVSAoU0hJQilfMTMiIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNNi40IDYuODExNzFDNy4xOTM3MiA3LjE0MjkzIDguMjM4NTEgNy42NDkyNSA4LjY3NjM2IDguMTA2ODZDOS4xMjA1MSA4LjU3MTA3IDkuNTExMjUgOS4xODU1NyA5Ljc0MzIyIDkuNkMxMC4wOTE1IDkuMzExMjUgMTAuNDM3NSA5LjAzMzg2IDEwLjY2NjcgOC44NTM2QzEwLjE3MzMgOC4zNzIzNyA4Ljk4MjU2IDcuMjYwNTcgOC4xNjYwMiA2LjY2MzE4QzcuMzQ5NDkgNi4wNjU4IDYuNzAzMDcgNS44ODMyNiA2LjQ4MTkyIDUuODY2NjdDNi40NTU1MSA2LjA5ODQ3IDYuNDI0ODUgNi40MzAwNyA2LjQgNi44MTE3MVoiIGZpbGw9InZhcigtLWZpbGwtMCwgI0ZGOUEzMikiLz4KPHBhdGggaWQ9IlNISUJBIElOVSAoU0hJQilfMTQiIGQ9Ik0yMy4wODU1IDEwLjU3OThDMjMuNDQ4OSAxMC45NzY3IDI0LjE0NTQgMTEuODY5OCAyNC40NDgzIDEyLjI2NjdDMjQuNjUwMiAxMS44MzY3IDI1LjA5NDMgMTAuNjg5IDI1LjI1NTggOS41Mzc5OEMyNS40MTczIDguMzg2OTggMjUuMjg5NCA2LjYxMDg1IDI1LjIwNTMgNS44NjY2N0MyNC45ODY2IDUuODgzMjEgMjQuMzQ3MyA2LjA2NTEyIDIzLjUzOTggNi42NjA0N0MyMi43MzIyIDcuMjU1ODEgMjEuNTU0NSA4LjM2MzgzIDIxLjA2NjcgOC44NDM0MUMyMS41ODgyIDkuMjU2ODUgMjIuNzIyMSAxMC4xODI5IDIzLjA4NTUgMTAuNTc5OFoiIGZpbGw9InZhcigtLWZpbGwtMCwgI0ZGOEMzMCkiLz4KPHBhdGggaWQ9IlNISUJBIElOVSAoU0hJQilfMTUiIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMjUuMzMzMyA2LjgxMTcxQzI0LjUzOTYgNy4xNDI5MyAyMy40OTQ4IDcuNjQ5MjUgMjMuMDU3IDguMTA2ODZDMjIuNjEyOCA4LjU3MTA3IDIyLjIyMjEgOS4xODU1NyAyMS45OTAyIDkuNkMyMS42NDE5IDkuMzExMjUgMjEuMjk1OCA5LjAzMzg2IDIxLjA2NjcgOC44NTM2QzIxLjU2IDguMzcyMzcgMjIuNzUwOCA3LjI2MDU3IDIzLjU2NzMgNi42NjMxOEMyNC4zODM4IDYuMDY1OCAyNS4wMzAyIDUuODgzMjYgMjUuMjUxNCA1Ljg2NjY3QzI1LjI3NzggNi4wOTg0NyAyNS4zMDg0IDYuNDMwMDcgMjUuMzMzMyA2LjgxMTcxWiIgZmlsbD0idmFyKC0tZmlsbC0wLCAjRkY5QTMyKSIvPgo8L2c+CjwvZz4KPC9zdmc+Cg==',
|
|
13
|
+
SOL: 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBvdmVyZmxvdz0idmlzaWJsZSIgc3R5bGU9ImRpc3BsYXk6IGJsb2NrOyIgdmlld0JveD0iMCAwIDMyIDMyIiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8ZyBpZD0iU29sYW5hIChTT0wpIj4KPGNpcmNsZSBpZD0iU29sYW5hIChTT0wpXzIiIGN4PSIxNiIgY3k9IjE2IiByPSIxNiIgZmlsbD0idmFyKC0tZmlsbC0wLCBibGFjaykiLz4KPGcgaWQ9IlNvbGFuYSAoU09MKV8zIj4KPHBhdGggaWQ9IlNvbGFuYSAoU09MKV80IiBkPSJNOS45MTg2NyAxOS43OTA2QzEwLjAyOTUgMTkuNjc5NyAxMC4xODIgMTkuNjE1IDEwLjM0MzcgMTkuNjE1SDI1LjAwN0MyNS4yNzUgMTkuNjE1IDI1LjQwOSAxOS45Mzg0IDI1LjIxOTUgMjAuMTI3OEwyMi4zMjI5IDIzLjAyNDRDMjIuMjEyIDIzLjEzNTMgMjIuMDU5NiAyMy4yIDIxLjg5NzkgMjMuMkg3LjIzNDU1QzYuOTY2NiAyMy4yIDYuODMyNjMgMjIuODc2NiA3LjAyMjA0IDIyLjY4NzJMOS45MTg2NyAxOS43OTA2WiIgZmlsbD0idXJsKCNwYWludDBfbGluZWFyXzBfMzIxKSIvPgo8cGF0aCBpZD0iU29sYW5hIChTT0wpXzUiIGQ9Ik05LjkxODY3IDguOTc1NTVDMTAuMDM0MiA4Ljg2NDY4IDEwLjE4NjYgOC44IDEwLjM0MzcgOC44SDI1LjAwN0MyNS4yNzUgOC44IDI1LjQwOSA5LjEyMzM5IDI1LjIxOTUgOS4zMTI4TDIyLjMyMjkgMTIuMjA5NEMyMi4yMTIgMTIuMzIwMyAyMi4wNTk2IDEyLjM4NSAyMS44OTc5IDEyLjM4NUg3LjIzNDU1QzYuOTY2NiAxMi4zODUgNi44MzI2MyAxMi4wNjE2IDcuMDIyMDQgMTEuODcyMkw5LjkxODY3IDguOTc1NTVaIiBmaWxsPSJ1cmwoI3BhaW50MV9saW5lYXJfMF8zMjEpIi8+CjxwYXRoIGlkPSJTb2xhbmEgKFNPTClfNiIgZD0iTTIyLjMyMjkgMTQuMzQ4NEMyMi4yMTIgMTQuMjM3NSAyMi4wNTk2IDE0LjE3MjkgMjEuODk3OSAxNC4xNzI5SDcuMjM0NTVDNi45NjY2IDE0LjE3MjkgNi44MzI2MyAxNC40OTYyIDcuMDIyMDQgMTQuNjg1N0w5LjkxODY3IDE3LjU4MjNDMTAuMDI5NSAxNy42OTMyIDEwLjE4MiAxNy43NTc4IDEwLjM0MzcgMTcuNzU3OEgyNS4wMDdDMjUuMjc1IDE3Ljc1NzggMjUuNDA5IDE3LjQzNDUgMjUuMjE5NSAxNy4yNDVMMjIuMzIyOSAxNC4zNDg0WiIgZmlsbD0idXJsKCNwYWludDJfbGluZWFyXzBfMzIxKSIvPgo8L2c+CjwvZz4KPGRlZnM+CjxsaW5lYXJHcmFkaWVudCBpZD0icGFpbnQwX2xpbmVhcl8wXzMyMSIgeDE9Ii0yNi4yMDgzIiB5MT0iNi4wNzk2NiIgeDI9Ii0yNi41OTg1IiB5Mj0iMjUuNzExNSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgo8c3RvcCBzdG9wLWNvbG9yPSIjMDBGRkEzIi8+CjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI0RDMUZGRiIvPgo8L2xpbmVhckdyYWRpZW50Pgo8bGluZWFyR3JhZGllbnQgaWQ9InBhaW50MV9saW5lYXJfMF8zMjEiIHgxPSItMzAuNjQ1NyIgeTE9IjMuNzYzIiB4Mj0iLTMxLjAzNTgiIHkyPSIyMy4zOTQ4IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CjxzdG9wIHN0b3AtY29sb3I9IiMwMEZGQTMiLz4KPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjREMxRkZGIi8+CjwvbGluZWFyR3JhZGllbnQ+CjxsaW5lYXJHcmFkaWVudCBpZD0icGFpbnQyX2xpbmVhcl8wXzMyMSIgeDE9Ii0yOC40NDExIiB5MT0iNC45MTM5NiIgeDI9Ii0yOC44MzEzIiB5Mj0iMjQuNTQ1OCIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgo8c3RvcCBzdG9wLWNvbG9yPSIjMDBGRkEzIi8+CjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI0RDMUZGRiIvPgo8L2xpbmVhckdyYWRpZW50Pgo8L2RlZnM+Cjwvc3ZnPgo=',
|
|
14
|
+
TON: 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjM3IiBoZWlnaHQ9IjIzNyIgdmlld0JveD0iMCAwIDIzNyAyMzciIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGQ9Ik0xMTguMjA0IDAuMDAwMjkyNDM2QzE4My40ODYgMC4wMDAyOTI0MzYgMjM2LjQwOCA1Mi45MjI0IDIzNi40MDggMTE4LjIwNUMyMzYuNDA4IDE4My40ODcgMTgzLjQ4NiAyMzYuNDA4IDExOC4yMDQgMjM2LjQwOEM1Mi45MjE2IDIzNi40MDggMC4wMDAxODQwMDcgMTgzLjQ4NyAwIDExOC4yMDVDMCA1Mi45MjI1IDUyLjkyMTUgMC4wMDA0NTIwMTIgMTE4LjIwNCAwLjAwMDI5MjQzNlpNNzQuMTAxMSA2Mi4xOTY1QzU3LjY3OTkgNjIuMTk2NSA0Ny4yNjggNzkuOTEyIDU1LjUzMDggOTQuMjM0N0wxMDkuOTY0IDE4OC41ODJDMTEzLjYxOSAxOTQuOTIyIDEyMi43ODEgMTk0LjkyMiAxMjYuNDM2IDE4OC41ODJMMTgwLjg4IDk0LjIzNDdDMTg5LjEzMiA3OS45MzQzIDE3OC43MiA2Mi4xOTY2IDE2Mi4zMSA2Mi4xOTY1SDc0LjEwMTFaTTE2Mi4yODggNzguODQxMkMxNjYuMDMxIDc4Ljg0MTIgMTY4LjIzNCA4Mi44MTIxIDE2Ni40NSA4NS45MDc1TDEzNy44NTYgMTM3LjA5MUwxMzcuODUxIDEzNy4wOTlMMTI2LjUwNiAxNTkuMDQ2Vjc4Ljg0MTJIMTYyLjI4OFpNMTA5Ljg3MiA3OC44NTE3VjE1OS4wMjRMOTguNTM3NiAxMzcuMDg4TDk4LjUzMzQgMTM3LjA4TDY5LjkyOTQgODUuOTIxNUw2OS44NDY4IDg1Ljc3MjVDNjguMjEzNCA4Mi42OTk3IDcwLjQwNSA3OC44NTE3IDc0LjA4OTkgNzguODUxN0gxMDkuODcyWiIgZmlsbD0iIzREQjhGRiIvPgo8L3N2Zz4K',
|
|
15
|
+
TRX: 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBvdmVyZmxvdz0idmlzaWJsZSIgc3R5bGU9ImRpc3BsYXk6IGJsb2NrOyIgdmlld0JveD0iMCAwIDMyIDMyIiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8ZyBpZD0iVFJPTiAoVFJYKSI+CjxwYXRoIGlkPSJUUk9OIChUUlgpXzIiIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMTYgMzJDNy4yIDMyIDAgMjQuODAwMSAwIDE1LjkyMDNDMC4wOCA3LjEyMDUxIDcuMiAtMC4wNzkzMzgxIDE2LjA4IDAuMDAwNjYwMjcyQzI0Ljg4IDAuMDgwNjU4NiAzMiA3LjIwMDUxIDMyIDE2LjE2MDNDMzEuOTIgMjQuODgwMSAyNC44IDMyIDE2IDMyIiBmaWxsPSJ2YXIoLS1maWxsLTAsICNGQzA3MEMpIi8+CjxnIGlkPSJUUk9OIChUUlgpXzMiPgo8cGF0aCBpZD0iVFJPTiAoVFJYKV80IiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTI1LjkyOTYgMTEuMjA4MUwyNS45Mjk1IDExLjIwOEMyNS4xODg1IDEwLjQ4ODUgMjQuNDA1NSA5LjcyODMgMjMuNzE0NCA5LjExNDk1TDIzLjY0NDQgOS4wNjU5NUMyMy41MjggOC45NzI0MyAyMy4zOTY3IDguODk5MDggMjMuMjU1OSA4Ljg0ODk1TDIyLjcyMjUgOC43NDk0M0MxOS4wNDI0IDguMDYyNzYgNy4xMTQzNyA1LjgzNzEyIDYuODY5IDUuODY2OTZDNi43OTY0MyA1Ljg3NzEzIDYuNzI3MDYgNS45MDM0NCA2LjY2NiA1Ljk0Mzk2TDYuNTk5NSA1Ljk5NjQ2QzYuNTE3NjEgNi4wNzk2MiA2LjQ1NTQyIDYuMTgwMDkgNi40MTc1IDYuMjkwNDZMNi40IDYuMzM1OTZWNi41ODQ0NlY2LjYyMjk2QzcuMjA5ODMgOC44Nzc5NyA5LjMxMzUzIDEzLjkxMzkgMTEuMjU2IDE4LjU2MzhMMTEuMjU2IDE4LjU2MzlMMTEuMjU2IDE4LjU2NEMxMi44OTgyIDIyLjQ5NTEgMTQuNDI1MSAyNi4xNTA0IDE0Ljk1NzUgMjcuNjE1OUwxNC45NTc3IDI3LjYxNjVDMTUuMDI3NyAyNy44MzM3IDE1LjE2MDcgMjguMjQ1OSAxNS40MDkgMjguMjY2OUgxNS40NjVDMTUuNTk4IDI4LjI2NjkgMTYuMTY1IDI3LjUxNzkgMTYuMTY1IDI3LjUxNzlDMTYuMTY1IDI3LjUxNzkgMjYuMzAwOSAxNS4yMjU5IDI3LjMyNjQgMTMuOTE2OUMyNy40NTkyIDEzLjc1NTcgMjcuNTc2NCAxMy41ODIzIDI3LjY3NjQgMTMuMzk4OUMyNy43Mjg0IDEzLjEwNzIgMjcuNjIzNCAxMi44MDk2IDI3LjM5OTkgMTIuNjE0OUMyNi45NjMzIDEyLjIxMTggMjYuNDU3MSAxMS43MjAzIDI1LjkyOTYgMTEuMjA4MVpNMTguNzY1NSAxNC4wNDY0TDIzLjA5MTQgMTAuNDU4OUwyNS42Mjg5IDEyLjc5NjlMMTguNzY1NSAxNC4wNDY0Wk05LjYzNzQ5IDcuNzA3OTZMMTcuMDg1NSAxMy44MTE5TDIxLjY4OCA5LjkzMDQ1TDkuNjM3NDkgNy43MDc5NlpNMTcuNzU3NSAxNS40MTE0TDI1LjM4MDQgMTQuMTgyOUwxNi42NjU1IDI0LjY4MjlMMTcuNzU3NSAxNS40MTE0Wk0xNi40NjI1IDE0Ljk2NjlMOC42MjU5OSA4LjMxNjk2TDE1LjMyODUgMjQuNjg5OUwxNi40NjI1IDE0Ljk2NjlaIiBmaWxsPSJ2YXIoLS1maWxsLTAsIHdoaXRlKSIvPgo8L2c+CjwvZz4KPC9zdmc+Cg==',
|
|
16
|
+
USDC: 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBvdmVyZmxvdz0idmlzaWJsZSIgc3R5bGU9ImRpc3BsYXk6IGJsb2NrOyIgdmlld0JveD0iMCAwIDMyIDMyIiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8ZyBpZD0iVVNEIENvaW4gKFVTREMpIj4KPHBhdGggaWQ9IlVTRCBDb2luIChVU0RDKV8yIiBkPSJNMTYgMzJDMjQuODY2NyAzMiAzMiAyNC44NjY3IDMyIDE2QzMyIDcuMTMzMjggMjQuODY2NyAwIDE2IDBDNy4xMzMyOCAwIDAgNy4xMzMyOCAwIDE2QzAgMjQuODY2NyA3LjEzMzI4IDMyIDE2IDMyWiIgZmlsbD0idmFyKC0tZmlsbC0wLCAjMjc3NUNBKSIvPgo8cGF0aCBpZD0iVVNEIENvaW4gKFVTREMpXzMiIGQ9Ik0yMC40IDE4LjUzMzNDMjAuNCAxNi4yIDE5IDE1LjQgMTYuMiAxNS4wNjY3QzE0LjIgMTQuOCAxMy44IDE0LjI2NjcgMTMuOCAxMy4zMzMzQzEzLjggMTIuMzk5OCAxNC40NjY3IDExLjggMTUuOCAxMS44QzE3IDExLjggMTcuNjY2NyAxMi4yIDE4IDEzLjJDMTguMDY2NyAxMy40IDE4LjI2NjcgMTMuNTMzMyAxOC40NjY3IDEzLjUzMzNIMTkuNTMzM0MxOS44IDEzLjUzMzMgMjAgMTMuMzMzMyAyMCAxMy4wNjY3VjEzQzE5LjczMzMgMTEuNTMzMyAxOC41MzMzIDEwLjQgMTcgMTAuMjY2N1Y4LjY2NjcyQzE3IDguNCAxNi44IDguMiAxNi40NjY3IDguMTMzMjhIMTUuNDY2N0MxNS4yIDguMTMzMjggMTUgOC4zMzMyOCAxNC45MzMzIDguNjY2NzJWMTAuMkMxMi45MzMzIDEwLjQ2NjcgMTEuNjY2NyAxMS44IDExLjY2NjcgMTMuNDY2N0MxMS42NjY3IDE1LjY2NjcgMTMgMTYuNTMzMyAxNS44IDE2Ljg2NjdDMTcuNjY2NyAxNy4yIDE4LjI2NjcgMTcuNiAxOC4yNjY3IDE4LjY2NjdDMTguMjY2NyAxOS43MzM0IDE3LjMzMzMgMjAuNDY2NyAxNi4wNjY3IDIwLjQ2NjdDMTQuMzMzMyAyMC40NjY3IDEzLjczMzMgMTkuNzMzMyAxMy41MzMzIDE4LjczMzNDMTMuNDY2NyAxOC40NjY3IDEzLjI2NjcgMTguMzMzMyAxMy4wNjY3IDE4LjMzMzNIMTEuOTMzM0MxMS42NjY3IDE4LjMzMzMgMTEuNDY2NyAxOC41MzMzIDExLjQ2NjcgMTguOFYxOC44NjY3QzExLjczMzMgMjAuNTMzMyAxMi44IDIxLjczMzMgMTUgMjIuMDY2N1YyMy42NjY3QzE1IDIzLjkzMzMgMTUuMiAyNC4xMzMzIDE1LjUzMzMgMjQuMkgxNi41MzMzQzE2LjggMjQuMiAxNyAyNCAxNy4wNjY3IDIzLjY2NjdWMjIuMDY2N0MxOS4wNjY3IDIxLjczMzMgMjAuNCAyMC4zMzMzIDIwLjQgMTguNTMzM1YxOC41MzMzWiIgZmlsbD0idmFyKC0tZmlsbC0wLCB3aGl0ZSkiLz4KPHBhdGggaWQ9IlVTRCBDb2luIChVU0RDKV80IiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTYuNjY2NzIgMTIuNzMzM0M0LjczMzI4IDE3Ljg2NjcgNy40IDIzLjY2NjcgMTIuNiAyNS41MzMzQzEyLjggMjUuNjY2NyAxMyAyNS45MzMzIDEzIDI2LjEzMzNWMjcuMDY2N0MxMyAyNy4yIDEzIDI3LjI2NjcgMTIuOTMzMyAyNy4zMzMzQzEyLjg2NjcgMjcuNiAxMi42IDI3LjczMzMgMTIuMzMzMyAyNy42QzguNiAyNi40IDUuNzMzMjggMjMuNTMzMyA0LjUzMzI4IDE5LjhDMi41MzMyOCAxMy40NjY3IDYgNi43MzMyOCAxMi4zMzMzIDQuNzMzMjhDMTIuNCA0LjY2NjcyIDEyLjUzMzMgNC42NjY3MiAxMi42IDQuNjY2NzJDMTIuODY2NyA0LjczMzI4IDEzIDQuOTMzMjggMTMgNS4yVjYuMTMzMjhDMTMgNi40NjY3MiAxMi44NjY3IDYuNjY2NzIgMTIuNiA2LjhDOS44NjY3MiA3LjggNy42NjY3MiA5LjkzMzI4IDYuNjY2NzIgMTIuNzMzM1pNMTkuMDY2NyA1QzE5LjEzMzMgNC43MzMyOCAxOS40IDQuNiAxOS42NjY3IDQuNzMzMjhDMjMuMzMzMyA1LjkzMzI4IDI2LjI2NjcgOC44IDI3LjQ2NjcgMTIuNkMyOS40NjY3IDE4LjkzMzMgMjYgMjUuNjY2NyAxOS42NjY3IDI3LjY2NjdDMTkuNiAyNy43MzMzIDE5LjQ2NjcgMjcuNzMzMyAxOS40IDI3LjczMzNDMTkuMTMzMyAyNy42NjY3IDE5IDI3LjQ2NjcgMTkgMjcuMlYyNi4yNjY3QzE5IDI1LjkzMzMgMTkuMTMzMyAyNS43MzMzIDE5LjQgMjUuNkMyMi4xMzMzIDI0LjYgMjQuMzMzMyAyMi40NjY3IDI1LjMzMzMgMTkuNjY2N0MyNy4yNjY3IDE0LjUzMzMgMjQuNiA4LjczMzI4IDE5LjQgNi44NjY3MkMxOS4yIDYuNzMzMjggMTkgNi40NjY3MiAxOSA2LjJWNS4yNjY3MkMxOSA1LjEzMzI4IDE5IDUuMDY2NzIgMTkuMDY2NyA1WiIgZmlsbD0idmFyKC0tZmlsbC0wLCB3aGl0ZSkiLz4KPC9nPgo8L3N2Zz4K',
|
|
17
|
+
USDT: 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBvdmVyZmxvdz0idmlzaWJsZSIgc3R5bGU9ImRpc3BsYXk6IGJsb2NrOyIgdmlld0JveD0iMCAwIDMxLjk5NjQgMzIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGlkPSJUZXRoZXIgKFVTRFQpIj4KPHBhdGggaWQ9IlRldGhlciAoVVNEVClfMiIgZD0iTTMxLjUxNzcgMTkuODcwNUMyOS4zODA4IDI4LjQ0MiAyMC42OTkyIDMzLjY1ODQgMTIuMTI2NyAzMS41MjFDMy41NTc3OCAyOS4zODQxIC0xLjY1ODY4IDIwLjcwMiAwLjQ3OTE3NyAxMi4xMzEyQzIuNjE1MTUgMy41NTg3IDExLjI5NjcgLTEuNjU4MTQgMTkuODY2NiAwLjQ3ODc3NUMyOC40Mzg1IDIuNjE1NjkgMzMuNjU0NiAxMS4yOTg3IDMxLjUxNzUgMTkuODcwNkwzMS41MTc2IDE5Ljg3MDVIMzEuNTE3N1oiIGZpbGw9InZhcigtLWZpbGwtMCwgIzUwQUY5NSkiLz4KPHBhdGggaWQ9IlRldGhlciAoVVNEVClfMyIgZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xOC4wMjQ2IDE3LjgxMzlWMTcuODEzOUMxNy45MTE1IDE3LjgyMjQgMTcuMzI3IDE3Ljg1NzMgMTYuMDIzMSAxNy44NTczQzE0Ljk4NiAxNy44NTczIDE0LjI0OTcgMTcuODI2MiAxMy45OTE0IDE3LjgxMzlWMTcuODEzOUM5Ljk4MzYgMTcuNjM3NiA2Ljk5MjE0IDE2Ljk0IDYuOTkyMTQgMTYuMTA0NkM2Ljk5MjE0IDE1LjI2OTMgOS45ODM2IDE0LjU3MjYgMTMuOTkxNCAxNC4zOTM1VjE3LjExOTFDMTQuMjUzNSAxNy4xMzc5IDE1LjAwMzkgMTcuMTgyMyAxNi4wNDEgMTcuMTgyM0MxNy4yODU1IDE3LjE4MjMgMTcuOTA4NyAxNy4xMzA0IDE4LjAyMDkgMTcuMTJWMTQuMzk1NEMyMi4wMjAyIDE0LjU3MzYgMjUuMDA1IDE1LjI3MTIgMjUuMDA1IDE2LjEwNDZDMjUuMDA1IDE2LjkzODEgMjIuMDIxMSAxNy42MzU3IDE4LjAyMDkgMTcuODEzVjE3LjgxM0wxOC4wMjQ2IDE3LjgxMzlaTTE4LjAyNDYgMTQuMTEzNVYxMS42NzQ1SDIzLjYwNTlWNy45NTUxOUg4LjQxMDA5VjExLjY3NDVIMTMuOTkwNFYxNC4xMTI1QzkuNDU0NyAxNC4zMjA5IDYuMDQzNjkgMTUuMjE5NCA2LjA0MzY5IDE2LjI5NkM2LjA0MzY5IDE3LjM3MjcgOS40NTQ3IDE4LjI3MDIgMTMuOTkwNCAxOC40Nzk1VjI2LjI5NTJIMTguMDIzN1YxOC40NzY3QzIyLjU0OTEgMTguMjY4MyAyNS45NTQ0IDE3LjM3MDggMjUuOTU0NCAxNi4yOTUxQzI1Ljk1NDQgMTUuMjE5NCAyMi41NTE5IDE0LjMyMTggMTguMDIzNyAxNC4xMTI1VjE0LjExMjVMMTguMDI0NiAxNC4xMTM1WiIgZmlsbD0idmFyKC0tZmlsbC0wLCB3aGl0ZSkiLz4KPC9nPgo8L3N2Zz4K',
|
|
18
|
+
XRP: 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIxIiBoZWlnaHQ9IjEyMSIgdmlld0JveD0iMCAwIDEyMSAxMjEiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGQ9Ik0xMTguNjkyIDc1LjAxNDRDMTEwLjY3OCAxMDcuMTU4IDc4LjEyMjMgMTI2LjcxOSA0NS45NzUzIDExOC43MDRDMTMuODQxOCAxMTAuNjkgLTUuNzE5OTIgNzguMTMyNSAyLjI5NzAzIDQ1Ljk5MkMxMC4zMDY5IDEzLjg0NTMgNDIuODYyOCAtNS43MTc5MSA3NC45OTk4IDIuMjk1NTJDMTA3LjE0NCAxMC4zMDkgMTI2LjcwNSA0Mi44NzAzIDExOC42OTEgNzUuMDE1TDExOC42OTEgNzUuMDE0NEgxMTguNjkyWiIgZmlsbD0iIzIzMjkyRiIgc3Ryb2tlPSJ3aGl0ZSIgc3Ryb2tlLW9wYWNpdHk9IjAuMiIvPgo8cGF0aCBkPSJNOTAuMDAyMiAyNS41MDAxSDEwMi4xMUw3Ni45MTI2IDUwLjQ0ODlDNjcuNzg3NSA1OS40NzkxIDUyLjk5MjkgNTkuNDc5MSA0My44NjEzIDUwLjQ0ODlMMTguNjUzOSAyNS41MDAxSDMwLjc3MTZMNDkuOTE1MiA0NC40NTIzQzU1LjcxODkgNTAuMTcyMyA2NS4wNDAyIDUwLjE3MjMgNzAuODQzOSA0NC40NTIzTDkwLjAwMjIgMjUuNTAwMVoiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGQ9Ik0zMC42MTYyIDk0Ljg3NTFIMTguNTAwMUw0My44NjEzIDY5Ljc3MjVDNTIuOTg2NCA2MC43NDIzIDY3Ljc4MDkgNjAuNzQyMyA3Ni45MTI2IDY5Ljc3MjVMMTAyLjI3NCA5NC44NzUxSDkwLjE2NThMNzAuODU4NiA3NS43NjkyQzY1LjA1NDkgNzAuMDQ5MSA1NS43MzM3IDcwLjA0OTEgNDkuOTI5OSA3NS43NjkyTDMwLjYxNjIgOTQuODc1MVoiIGZpbGw9IndoaXRlIi8+Cjwvc3ZnPgo=',
|
|
19
|
+
LINK: 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHZpZXdCb3g9IjAgMCAzMiAzMiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8IS0tIE9mZmljaWFsIENoYWlubGluayBzeW1ib2w6IGh0dHBzOi8vY2hhaW4ubGluay9icmFuZC1hc3NldHMgLS0+CiAgPGNpcmNsZSBjeD0iMTYiIGN5PSIxNiIgcj0iMTYiIGZpbGw9IiMwODQ3RjciLz4KICA8c3ZnIHg9IjcuMyIgeT0iNiIgd2lkdGg9IjE3LjQiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyNDcgMjg0Ij4KICAgIDxwYXRoIGQ9Ik0xMjMuNSAwTDAgNzAuOTcyNlYyMTIuOTE4TDEyMy41IDI4My44OUwyNDcgMjEyLjkxOFY3MC45NzI2TDEyMy41IDBaTTE5NC42NzkgMTgyLjgzN0wxMjMuNTIzIDIyMy43MjhMNTIuMzY2MyAxODIuODM3VjEwMS4wNTRMMTIzLjUyMyA2MC4xNjIxTDE5NC42NzkgMTAxLjA1NFYxODIuODM3WiIgZmlsbD0id2hpdGUiLz4KICA8L3N2Zz4KPC9zdmc+Cg==',
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
export const LOGO_MARK = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9Ii0xMCAtMTAgNDggNDgiPjxjaXJjbGUgY3g9IjE0IiBjeT0iMTQiIHI9IjIzIiBmaWxsPSIjMDgxNDFhIiBzdHJva2U9IiMwYTNhNDciIHN0cm9rZS13aWR0aD0iMiIvPjxwYXRoIGQ9Ik0yOCAwVjI4SDE4LjA0NDRWMTguNDUxOUMxOC4wNDQ0IDE3LjQ4NzkgMTcuNTgxMSAxNi41ODI2IDE2Ljc5OTIgMTYuMDE4N0wxNS4xNjk4IDE0Ljg0MzZDMTQuNDcxMyAxNC4zMzk5IDEzLjUyODcgMTQuMzM5OSAxMi44MzAyIDE0Ljg0MzZMMTEuMjAwOCAxNi4wMTg3QzEwLjQxODkgMTYuNTgyNiA5Ljk1NTU2IDE3LjQ4NzkgOS45NTU1NiAxOC40NTE5VjI4SDBWMC4wMDQzMTc1NEg5Ljk1NTU2VjEwLjM5ODhIMTguMDQ0NFYwSDI4WiIgZmlsbD0iIzAyRjhGOCIvPjwvc3ZnPg==';
|