on main help sign in
feat: crush stats (#1920)
0eee061Carlos Alexandro Becker
Taskfile.yaml+5
@@ -66,6 +66,11 @@ tasks:
66 cmds:
66 cmds:
67 - gofumpt -w .
67 - gofumpt -w .
68
68
69+ fmt:html:
70+ desc: Run prettier on HTML/CSS/JS files
71+ cmds:
72+ - prettier --write internal/cmd/stats/index.html internal/cmd/stats/index.css internal/cmd/stats/index.js
73+
69 dev:
74 dev:
70 desc: Run with profiling enabled
75 desc: Run with profiling enabled
71 env:
76 env:
internal/cmd/root.go+1
@@ -51,6 +51,7 @@ func init() {
51 logsCmd,
51 logsCmd,
52 schemaCmd,
52 schemaCmd,
53 loginCmd,
53 loginCmd,
54+ statsCmd,
54 )
55 )
55}
56}
56
57
internal/cmd/stats.gonew file+384
@@ -0,0 +1,384 @@
1+package cmd
2+
3+import (
4+ "bytes"
5+ "context"
6+ "database/sql"
7+ _ "embed"
8+ "encoding/json"
9+ "fmt"
10+ "html/template"
11+ "os"
12+ "os/user"
13+ "path/filepath"
14+ "strings"
15+ "time"
16+
17+ "github.com/charmbracelet/crush/internal/config"
18+ "github.com/charmbracelet/crush/internal/db"
19+ "github.com/pkg/browser"
20+ "github.com/spf13/cobra"
21+)
22+
23+//go:embed stats/index.html
24+var statsTemplate string
25+
26+//go:embed stats/index.css
27+var statsCSS string
28+
29+//go:embed stats/index.js
30+var statsJS string
31+
32+//go:embed stats/header.svg
33+var headerSVG string
34+
35+//go:embed stats/heartbit.svg
36+var heartbitSVG string
37+
38+//go:embed stats/footer.svg
39+var footerSVG string
40+
41+var statsCmd = &cobra.Command{
42+ Use: "stats",
43+ Short: "Show usage statistics",
44+ Long: "Generate and display usage statistics including token usage, costs, and activity patterns",
45+ RunE: runStats,
46+}
47+
48+// Day names for day of week statistics.
49+var dayNames = []string{"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}
50+
51+// Stats holds all the statistics data.
52+type Stats struct {
53+ GeneratedAt time.Time `json:"generated_at"`
54+ Total TotalStats `json:"total"`
55+ UsageByDay []DailyUsage `json:"usage_by_day"`
56+ UsageByModel []ModelUsage `json:"usage_by_model"`
57+ UsageByHour []HourlyUsage `json:"usage_by_hour"`
58+ UsageByDayOfWeek []DayOfWeekUsage `json:"usage_by_day_of_week"`
59+ RecentActivity []DailyActivity `json:"recent_activity"`
60+ AvgResponseTimeMs float64 `json:"avg_response_time_ms"`
61+ ToolUsage []ToolUsage `json:"tool_usage"`
62+ HourDayHeatmap []HourDayHeatmapPt `json:"hour_day_heatmap"`
63+}
64+
65+type TotalStats struct {
66+ TotalSessions int64 `json:"total_sessions"`
67+ TotalPromptTokens int64 `json:"total_prompt_tokens"`
68+ TotalCompletionTokens int64 `json:"total_completion_tokens"`
69+ TotalTokens int64 `json:"total_tokens"`
70+ TotalCost float64 `json:"total_cost"`
71+ TotalMessages int64 `json:"total_messages"`
72+ AvgTokensPerSession float64 `json:"avg_tokens_per_session"`
73+ AvgMessagesPerSession float64 `json:"avg_messages_per_session"`
74+}
75+
76+type DailyUsage struct {
77+ Day string `json:"day"`
78+ PromptTokens int64 `json:"prompt_tokens"`
79+ CompletionTokens int64 `json:"completion_tokens"`
80+ TotalTokens int64 `json:"total_tokens"`
81+ Cost float64 `json:"cost"`
82+ SessionCount int64 `json:"session_count"`
83+}
84+
85+type ModelUsage struct {
86+ Model string `json:"model"`
87+ Provider string `json:"provider"`
88+ MessageCount int64 `json:"message_count"`
89+}
90+
91+type HourlyUsage struct {
92+ Hour int `json:"hour"`
93+ SessionCount int64 `json:"session_count"`
94+}
95+
96+type DayOfWeekUsage struct {
97+ DayOfWeek int `json:"day_of_week"`
98+ DayName string `json:"day_name"`
99+ SessionCount int64 `json:"session_count"`
100+ PromptTokens int64 `json:"prompt_tokens"`
101+ CompletionTokens int64 `json:"completion_tokens"`
102+}
103+
104+type DailyActivity struct {
105+ Day string `json:"day"`
106+ SessionCount int64 `json:"session_count"`
107+ TotalTokens int64 `json:"total_tokens"`
108+ Cost float64 `json:"cost"`
109+}
110+
111+type ToolUsage struct {
112+ ToolName string `json:"tool_name"`
113+ CallCount int64 `json:"call_count"`
114+}
115+
116+type HourDayHeatmapPt struct {
117+ DayOfWeek int `json:"day_of_week"`
118+ Hour int `json:"hour"`
119+ SessionCount int64 `json:"session_count"`
120+}
121+
122+func runStats(cmd *cobra.Command, _ []string) error {
123+ dataDir, _ := cmd.Flags().GetString("data-dir")
124+ ctx := cmd.Context()
125+
126+ if dataDir == "" {
127+ cfg, err := config.Init("", "", false)
128+ if err != nil {
129+ return fmt.Errorf("failed to initialize config: %w", err)
130+ }
131+ dataDir = cfg.Options.DataDirectory
132+ }
133+
134+ conn, err := db.Connect(ctx, dataDir)
135+ if err != nil {
136+ return fmt.Errorf("failed to connect to database: %w", err)
137+ }
138+ defer conn.Close()
139+
140+ stats, err := gatherStats(ctx, conn)
141+ if err != nil {
142+ return fmt.Errorf("failed to gather stats: %w", err)
143+ }
144+
145+ if stats.Total.TotalSessions == 0 {
146+ return fmt.Errorf("no data available: no sessions found in database")
147+ }
148+
149+ currentUser, err := user.Current()
150+ if err != nil {
151+ return fmt.Errorf("failed to get current user: %w", err)
152+ }
153+ username := currentUser.Username
154+ project, err := os.Getwd()
155+ if err != nil {
156+ return fmt.Errorf("failed to get current directory: %w", err)
157+ }
158+ project = strings.Replace(project, currentUser.HomeDir, "~", 1)
159+
160+ htmlPath := filepath.Join(dataDir, "stats/index.html")
161+ if err := generateHTML(stats, project, username, htmlPath); err != nil {
162+ return fmt.Errorf("failed to generate HTML: %w", err)
163+ }
164+
165+ fmt.Printf("Stats generated: %s\n", htmlPath)
166+
167+ if err := browser.OpenFile(htmlPath); err != nil {
168+ fmt.Printf("Could not open browser: %v\n", err)
169+ fmt.Println("Please open the file manually.")
170+ }
171+
172+ return nil
173+}
174+
175+func gatherStats(ctx context.Context, conn *sql.DB) (*Stats, error) {
176+ queries := db.New(conn)
177+
178+ stats := &Stats{
179+ GeneratedAt: time.Now(),
180+ }
181+
182+ // Total stats.
183+ total, err := queries.GetTotalStats(ctx)
184+ if err != nil {
185+ return nil, fmt.Errorf("get total stats: %w", err)
186+ }
187+ stats.Total = TotalStats{
188+ TotalSessions: total.TotalSessions,
189+ TotalPromptTokens: toInt64(total.TotalPromptTokens),
190+ TotalCompletionTokens: toInt64(total.TotalCompletionTokens),
191+ TotalTokens: toInt64(total.TotalPromptTokens) + toInt64(total.TotalCompletionTokens),
192+ TotalCost: toFloat64(total.TotalCost),
193+ TotalMessages: toInt64(total.TotalMessages),
194+ AvgTokensPerSession: toFloat64(total.AvgTokensPerSession),
195+ AvgMessagesPerSession: toFloat64(total.AvgMessagesPerSession),
196+ }
197+
198+ // Usage by day.
199+ dailyUsage, err := queries.GetUsageByDay(ctx)
200+ if err != nil {
201+ return nil, fmt.Errorf("get usage by day: %w", err)
202+ }
203+ for _, d := range dailyUsage {
204+ prompt := nullFloat64ToInt64(d.PromptTokens)
205+ completion := nullFloat64ToInt64(d.CompletionTokens)
206+ stats.UsageByDay = append(stats.UsageByDay, DailyUsage{
207+ Day: fmt.Sprintf("%v", d.Day),
208+ PromptTokens: prompt,
209+ CompletionTokens: completion,
210+ TotalTokens: prompt + completion,
211+ Cost: d.Cost.Float64,
212+ SessionCount: d.SessionCount,
213+ })
214+ }
215+
216+ // Usage by model.
217+ modelUsage, err := queries.GetUsageByModel(ctx)
218+ if err != nil {
219+ return nil, fmt.Errorf("get usage by model: %w", err)
220+ }
221+ for _, m := range modelUsage {
222+ stats.UsageByModel = append(stats.UsageByModel, ModelUsage{
223+ Model: m.Model,
224+ Provider: m.Provider,
225+ MessageCount: m.MessageCount,
226+ })
227+ }
228+
229+ // Usage by hour.
230+ hourlyUsage, err := queries.GetUsageByHour(ctx)
231+ if err != nil {
232+ return nil, fmt.Errorf("get usage by hour: %w", err)
233+ }
234+ for _, h := range hourlyUsage {
235+ stats.UsageByHour = append(stats.UsageByHour, HourlyUsage{
236+ Hour: int(h.Hour),
237+ SessionCount: h.SessionCount,
238+ })
239+ }
240+
241+ // Usage by day of week.
242+ dowUsage, err := queries.GetUsageByDayOfWeek(ctx)
243+ if err != nil {
244+ return nil, fmt.Errorf("get usage by day of week: %w", err)
245+ }
246+ for _, d := range dowUsage {
247+ stats.UsageByDayOfWeek = append(stats.UsageByDayOfWeek, DayOfWeekUsage{
248+ DayOfWeek: int(d.DayOfWeek),
249+ DayName: dayNames[int(d.DayOfWeek)],
250+ SessionCount: d.SessionCount,
251+ PromptTokens: nullFloat64ToInt64(d.PromptTokens),
252+ CompletionTokens: nullFloat64ToInt64(d.CompletionTokens),
253+ })
254+ }
255+
256+ // Recent activity (last 30 days).
257+ recent, err := queries.GetRecentActivity(ctx)
258+ if err != nil {
259+ return nil, fmt.Errorf("get recent activity: %w", err)
260+ }
261+ for _, r := range recent {
262+ stats.RecentActivity = append(stats.RecentActivity, DailyActivity{
263+ Day: fmt.Sprintf("%v", r.Day),
264+ SessionCount: r.SessionCount,
265+ TotalTokens: nullFloat64ToInt64(r.TotalTokens),
266+ Cost: r.Cost.Float64,
267+ })
268+ }
269+
270+ // Average response time.
271+ avgResp, err := queries.GetAverageResponseTime(ctx)
272+ if err != nil {
273+ return nil, fmt.Errorf("get average response time: %w", err)
274+ }
275+ stats.AvgResponseTimeMs = toFloat64(avgResp) * 1000
276+
277+ // Tool usage.
278+ toolUsage, err := queries.GetToolUsage(ctx)
279+ if err != nil {
280+ return nil, fmt.Errorf("get tool usage: %w", err)
281+ }
282+ for _, t := range toolUsage {
283+ if name, ok := t.ToolName.(string); ok && name != "" {
284+ stats.ToolUsage = append(stats.ToolUsage, ToolUsage{
285+ ToolName: name,
286+ CallCount: t.CallCount,
287+ })
288+ }
289+ }
290+
291+ // Hour/day heatmap.
292+ heatmap, err := queries.GetHourDayHeatmap(ctx)
293+ if err != nil {
294+ return nil, fmt.Errorf("get hour day heatmap: %w", err)
295+ }
296+ for _, h := range heatmap {
297+ stats.HourDayHeatmap = append(stats.HourDayHeatmap, HourDayHeatmapPt{
298+ DayOfWeek: int(h.DayOfWeek),
299+ Hour: int(h.Hour),
300+ SessionCount: h.SessionCount,
301+ })
302+ }
303+
304+ return stats, nil
305+}
306+
307+func toInt64(v any) int64 {
308+ switch val := v.(type) {
309+ case int64:
310+ return val
311+ case float64:
312+ return int64(val)
313+ case int:
314+ return int64(val)
315+ default:
316+ return 0
317+ }
318+}
319+
320+func toFloat64(v any) float64 {
321+ switch val := v.(type) {
322+ case float64:
323+ return val
324+ case int64:
325+ return float64(val)
326+ case int:
327+ return float64(val)
328+ default:
329+ return 0
330+ }
331+}
332+
333+func nullFloat64ToInt64(n sql.NullFloat64) int64 {
334+ if n.Valid {
335+ return int64(n.Float64)
336+ }
337+ return 0
338+}
339+
340+func generateHTML(stats *Stats, projName, username, path string) error {
341+ statsJSON, err := json.Marshal(stats)
342+ if err != nil {
343+ return err
344+ }
345+
346+ tmpl, err := template.New("stats").Parse(statsTemplate)
347+ if err != nil {
348+ return fmt.Errorf("parse template: %w", err)
349+ }
350+
351+ data := struct {
352+ StatsJSON template.JS
353+ CSS template.CSS
354+ JS template.JS
355+ Header template.HTML
356+ Heartbit template.HTML
357+ Footer template.HTML
358+ GeneratedAt string
359+ ProjectName string
360+ Username string
361+ }{
362+ StatsJSON: template.JS(statsJSON),
363+ CSS: template.CSS(statsCSS),
364+ JS: template.JS(statsJS),
365+ Header: template.HTML(headerSVG),
366+ Heartbit: template.HTML(heartbitSVG),
367+ Footer: template.HTML(footerSVG),
368+ GeneratedAt: stats.GeneratedAt.Format("2006-01-02"),
369+ ProjectName: projName,
370+ Username: username,
371+ }
372+
373+ var buf bytes.Buffer
374+ if err := tmpl.Execute(&buf, data); err != nil {
375+ return fmt.Errorf("execute template: %w", err)
376+ }
377+
378+ // Ensure parent directory exists.
379+ if err := os.MkdirAll(filepath.Dir(path), 0o755); err != nil {
380+ return fmt.Errorf("create directory: %w", err)
381+ }
382+
383+ return os.WriteFile(path, buf.Bytes(), 0o644)
384+}
internal/cmd/stats/AGENTS.mdnew file+3
@@ -0,0 +1,3 @@
1+# General Guidelines
2+
3+- always format CSS, HTML, and JS files with `prettier`
internal/cmd/stats/footer.svgnew file+838
@@ -0,0 +1,838 @@
1+<?xml version="1.0" encoding="UTF-8"?>
2+<svg id="Layer_2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:i="http://ns.adobe.com/AdobeIllustrator/10.0/" version="1.1" viewBox="0 0 829.8 30">
3+ <!-- Generator: Adobe Illustrator 30.1.0, SVG Export Plug-In . SVG Version: 2.1.1 Build 136) -->
4+ <defs>
5+ <style>
6+ .st0 {
7+ fill: #858392;
8+ }
9+
10+ .st1 {
11+ fill: url(#linear-gradient);
12+ }
13+
14+ .st2 {
15+ fill: #fffaf1;
16+ }
17+ </style>
18+ <linearGradient id="linear-gradient" x1="65.4" y1="14.8" x2="564.9" y2="14.8" gradientTransform="translate(0 32) scale(1 -1)" gradientUnits="userSpaceOnUse">
19+ <stop offset="0" stop-color="#6b50ff"/>
20+ <stop offset="1" stop-color="#ff6daa"/>
21+ </linearGradient>
22+ </defs>
23+ <g>
24+ <path class="st2" d="M738,22.7c1.2,0,2.2-.5,3.1-1.2.5-.4,1-.3,1.2.2,0,.2,0,.4,0,.6,0,2.2-1.8,4.8-6.2,4.8s-6.1-1.6-5.7-6.5l.4-4.9c.3-3.1,1.4-5.7,3.7-7.2,1.2-.8,2.7-1.2,4.6-1.2,2.9,0,3.8,1.2,3.8,2.4s-.4,1.6-1,2.1c0,0-.2,0-.3,0-.5,0-1-.1-1.5-.1-1.1,0-2,.2-2.7.9-.6.5-1,1.4-1.1,2.5l-.5,5.1c-.1,1.4.3,2.5,2,2.5h0Z"/>
25+ <path class="st2" d="M759,11.5l-1.1,12.4c0,1-.4,1.8-1.2,2.3-1.1.7-2.2,1-3.2,1s-1.4-.6-1.4-1.3l1.1-12.4c0-.7-.1-1-.7-1s-.9.1-1.2.3c-.6.3-.8.7-.9,1.3l-.9,9.9c0,1.1-.6,1.8-1.3,2.3-1,.7-2.2.9-3.1.9s-1.3-.6-1.2-1.6l1.9-22.2c0-1,.4-1.9,1.2-2.4,1.1-.6,2.2-.9,3.2-.9s1.5.5,1.4,1.2c0,0-.8,8.1-.8,8.2,0,.1.2.4.4.1.3-.4.9-1,1.4-1.3.9-.6,1.9-.9,3-.9,2.4,0,3.6,1.3,3.3,4.2h0Z"/>
26+ <path class="st2" d="M788.2,12.3c0,.1-.3.4-.5.3-.5-.1-1-.1-1.4-.1-1.8,0-3.2,1.1-3.3,2.9l-.7,8.5c0,1.1-.6,1.8-1.3,2.3-1,.7-2.2.9-3.1.9s-1.3-.6-1.2-1.6l1.3-14.9c0-1,.4-1.9,1.2-2.4,1.1-.6,2.1-.9,3.1-.9s1.3.5,1.3,1.2v1.3c-.1,0-.1.2,0,.2s.2-.1.3-.2c.5-1.2,1.6-2.5,3.3-2.5s2,.9,2,2.1-.3,1.9-.8,2.9h0Z"/>
27+ <path class="st2" d="M810.1,26.1c-1.1.7-2.2,1-3.2,1s-1.4-.6-1.4-1.3l1.1-12.9c0-.7,0-1-.6-1s-.8.1-1.1.3c-.5.3-.8.8-.9,1.3l-.9,10.3c0,1-.4,1.8-1.2,2.3-1.1.7-2.2,1-3.2,1s-1.4-.6-1.4-1.3l1.1-12.9c0-.7,0-1-.6-1s-.9.1-1.1.3c-.6.3-.8.7-.9,1.3l-.9,10.5c0,1.1-.6,1.8-1.3,2.3-1,.7-2.2.9-3.1.9s-1.3-.6-1.2-1.6l1.3-14.9c0-1,.4-1.9,1.2-2.4,1.1-.6,2.1-.9,3.1-.9s1.3.5,1.3,1.2c0,0,0,.7,0,.9,0,.2.2.3.4.1.2-.2.7-.8,1-1,1-.8,2.1-1.2,3.4-1.2,2.2,0,2.9,1,3.2,2.1,0,.2.3.2.4,0,.2-.2.8-.8,1.2-1.1,1-.7,2.1-1.1,3.3-1.1,2.4,0,3.5,1.3,3.3,4.2l-1.1,12.4c0,1-.4,1.8-1.2,2.3h0Z"/>
28+ <path class="st2" d="M824.4,30h-11.1c-.8,0-1.4-.4-1.4-1.3,0-1.6.5-2.6,1.7-2.6h11.1c.9,0,1.4.4,1.4,1.3,0,1.6-.5,2.6-1.7,2.6h0Z"/>
29+ <path class="st2" d="M773.8,7.6c-.7-.2-1.9-.3-3.2-.3-2.5,0-4.6.8-6.3,1.9-1.8,1.3-3,3.2-3.3,6.6l-.5,5.8c-.2,2.8.7,5.5,3.8,5.5s2.7-.7,3.4-1.5c.3-.3.5-.7.7-1s.4-.2.4.1c0,.3-.1,1.2-.1,1.2,0,.7.3,1.2,1.3,1.2s1.9-.3,3-1c.8-.5,1.1-1.2,1.2-2.3l1.2-14.4c0-.9-.2-1.4-1.6-1.8h0ZM768.8,21.4c0,.5-.3.9-.6,1.2-.3.2-.7.4-1.1.4-.7,0-1.1-.4-1-1.3l.7-7.6c0-.8.3-1.5.7-1.9.4-.5.9-.7,1.6-.7s.6,0,.7,0l-.9,10h0Z"/>
30+ <path class="st2" d="M826,23h1.5v.4h-.6v1.6h-.4v-1.6h-.5v-.4ZM827.8,23h.5l.5,1.5.5-1.5h.5v2h-.4v-.4c0-.2,0-.5,0-.8l-.4,1.1h-.4l-.4-1.1c0,.3,0,.5,0,.8v.4h-.4v-2h0Z"/>
31+ </g>
32+ <g>
33+ <path class="st0" d="M4.6,22.6c0-.2-.1-.3-.2-.5,0-.1-.2-.3-.3-.4s-.3-.2-.4-.2c-.2,0-.3,0-.5,0-.3,0-.7,0-.9.3s-.5.4-.6.8-.2.8-.2,1.2,0,.9.2,1.3c.2.3.4.6.6.8s.6.3,1,.3.6,0,.9-.2c.2-.1.4-.3.6-.5.1-.2.2-.5.2-.8h.3s-1.8,0-1.8,0v-.9h2.7v.8c0,.6-.1,1-.4,1.5s-.6.7-1,.9-.9.3-1.4.3-1.1-.1-1.6-.4-.8-.7-1.1-1.2c-.2-.5-.4-1.1-.4-1.8s0-1,.2-1.4c.1-.4.4-.8.6-1.1.3-.3.6-.5.9-.7.4-.1.8-.2,1.2-.2s.7,0,1,.2.6.2.8.5c.2.2.4.4.6.7s.3.6.3.9h-1.2Z"/>
34+ <path class="st0" d="M9.1,27.2c-.5,0-.9-.1-1.3-.3-.4-.2-.6-.5-.8-.9s-.3-.8-.3-1.3,0-1,.3-1.3.5-.7.8-.9.8-.3,1.2-.3.6,0,.9.1c.3.1.5.2.7.5s.4.5.5.8c.1.3.2.7.2,1.1v.4h-4v-.8h2.9c0-.2,0-.4-.1-.6s-.2-.3-.4-.4-.4-.1-.6-.1-.4,0-.6.2-.3.3-.4.5-.2.4-.2.6v.7c0,.3,0,.5.2.7.1.2.2.4.4.5s.4.2.7.2.3,0,.5,0,.2-.1.4-.2c.1,0,.2-.2.2-.4h1.1c0,.4-.2.7-.4.9-.2.2-.4.4-.7.5-.3.1-.6.2-1,.2h0Z"/>
35+ <path class="st0" d="M13.4,24.2v2.9h-1.2v-4.9h1.1v.8h0c.1-.3.3-.5.5-.7.2-.2.6-.2.9-.2s.6,0,.9.2c.2.1.5.4.6.6.1.3.2.6.2,1v3.1h-1.2v-3c0-.3,0-.6-.2-.8s-.4-.3-.7-.3-.4,0-.5.1c-.2,0-.3.2-.4.4,0,.2-.1.4-.1.6h0Z"/>
36+ <path class="st0" d="M19.9,27.2c-.5,0-.9-.1-1.3-.3-.4-.2-.6-.5-.8-.9s-.3-.8-.3-1.3.1-1,.3-1.3.5-.7.8-.9.8-.3,1.2-.3.6,0,.9.1.5.2.7.5.4.5.5.8c.1.3.2.7.2,1.1v.4h-4v-.8h2.9c0-.2,0-.4-.1-.6s-.2-.3-.4-.4-.4-.1-.6-.1-.4,0-.6.2-.3.3-.4.5-.1.4-.1.6v.7c0,.3,0,.5.2.7.1.2.2.4.4.5s.4.2.7.2.3,0,.5,0,.2-.1.4-.2c.1,0,.2-.2.2-.4h1.1c0,.4-.2.7-.4.9-.2.2-.4.4-.7.5-.3.1-.6.2-1,.2h0Z"/>
37+ <path class="st0" d="M23.1,27.1v-4.9h1.1v.8h0c0-.3.2-.5.5-.7.2-.1.5-.2.8-.2h.2c0,0,.1,0,.2,0v1.1s-.1,0-.2,0-.2,0-.3,0c-.2,0-.4,0-.6.1-.2,0-.3.2-.4.4s-.1.3-.1.5v2.9h-1.2,0Z"/>
38+ <path class="st0" d="M28,27.2c-.3,0-.6,0-.8-.2s-.4-.3-.6-.5c-.1-.2-.2-.5-.2-.8s0-.5.1-.7.2-.3.4-.4c.2-.1.4-.2.6-.2s.5-.1.7-.1c.3,0,.5,0,.7,0s.3,0,.4-.1c0,0,.1-.1.1-.2h0c0-.3,0-.5-.2-.6s-.4-.2-.6-.2-.5,0-.7.2-.3.3-.3.4h-1.1c0-.4.2-.7.4-.9.2-.2.4-.4.7-.5s.6-.1.9-.1.5,0,.7,0c.2,0,.5.1.6.3.2.1.4.3.5.5.1.2.2.5.2.8v3.3h-1.1v-.7h0c0,.1-.2.3-.3.4-.1.1-.3.2-.5.3-.2,0-.4.1-.7.1h0ZM28.3,26.3c.2,0,.4,0,.6-.1s.3-.2.4-.4c0-.1.1-.3.1-.5v-.6s-.1,0-.2,0c0,0-.2,0-.3,0s-.2,0-.3,0c-.1,0-.2,0-.3,0-.2,0-.3,0-.5.1-.1,0-.2.1-.3.2s-.1.2-.1.4,0,.4.2.5c.2.1.4.2.6.2h0Z"/>
39+ <path class="st0" d="M34.2,22.2v.9h-2.8v-.9h2.8ZM32,21h1.2v4.6c0,.2,0,.3,0,.4s.1.1.2.2c0,0,.2,0,.3,0s.1,0,.2,0,.1,0,.1,0l.2.9c0,0-.2,0-.3,0s-.2,0-.4,0c-.3,0-.5,0-.8-.1-.2-.1-.4-.2-.5-.5-.1-.2-.2-.5-.2-.8v-4.8h0Z"/>
40+ <path class="st0" d="M37.3,27.2c-.5,0-.9-.1-1.3-.3-.4-.2-.6-.5-.8-.9s-.3-.8-.3-1.3,0-1,.3-1.3.5-.7.8-.9c.3-.2.8-.3,1.2-.3s.6,0,.9.1.5.2.7.5c.2.2.4.5.5.8.1.3.2.7.2,1.1v.4h-4v-.8h2.9c0-.2,0-.4-.1-.6s-.2-.3-.4-.4-.4-.1-.6-.1-.4,0-.6.2-.3.3-.4.5-.2.4-.2.6v.7c0,.3,0,.5.2.7,0,.2.2.4.4.5s.4.2.7.2.3,0,.5,0,.2-.1.3-.2c0,0,.2-.2.2-.4h1.1c0,.4-.2.7-.4.9-.2.2-.4.4-.7.5-.3.1-.6.2-1,.2h0Z"/>
41+ <path class="st0" d="M42.2,27.2c-.4,0-.7-.1-1-.3s-.5-.5-.7-.9c-.2-.4-.3-.8-.3-1.4s0-1,.3-1.4.4-.7.7-.9.7-.3,1-.3.5,0,.7.1.3.2.4.4c.1.1.2.3.2.4h0v-2.5h1.2v6.5h-1.1v-.8h0c0,.1-.2.2-.3.4-.1.1-.3.2-.5.3-.2,0-.4.1-.7.1h0ZM42.6,26.2c.2,0,.5,0,.6-.2.2-.1.3-.3.4-.6s.1-.5.1-.8,0-.6-.1-.8-.2-.4-.4-.5-.4-.2-.6-.2-.5,0-.7.2c-.2.1-.3.3-.4.6s-.1.5-.1.8,0,.6.1.8.2.4.4.6.4.2.6.2h0Z"/>
42+ <path class="st0" d="M48.4,27.1v-6.5h1.2v2.5h0c0-.1.1-.2.2-.4s.3-.2.4-.4c.2-.1.4-.1.7-.1s.7.1,1,.3c.3.2.5.5.7.9s.3.8.3,1.4,0,1-.3,1.4c-.2.4-.4.7-.7.9-.3.2-.7.3-1,.3s-.5,0-.7-.1c-.2,0-.3-.2-.5-.3-.1-.1-.2-.3-.3-.4h0v.8h-1.1,0ZM49.5,24.6c0,.3,0,.6.1.8,0,.2.2.4.4.6.2.1.4.2.6.2s.5,0,.6-.2.3-.3.4-.6.1-.5.1-.8,0-.6-.1-.8-.2-.4-.4-.6c-.2-.1-.4-.2-.7-.2s-.5,0-.6.2c-.2.1-.3.3-.4.5s-.1.5-.1.8h0Z"/>
43+ <path class="st0" d="M54.5,28.9c-.2,0-.3,0-.4,0-.1,0-.2,0-.3,0l.3-.9c.2,0,.3,0,.5,0s.2,0,.3-.1.2-.2.3-.4v-.3c0,0-1.7-5-1.7-5h1.2l1.1,3.7h0l1.1-3.7h1.2l-2,5.5c0,.3-.2.5-.4.7s-.3.3-.5.4c-.2.1-.5.1-.8.1h0Z"/>
44+ </g>
45+ <path class="st1" d="M231.6,27.3l11.2-20.3h.8l-11.2,20.3h-.8ZM236.2,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM240,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM243.8,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM247.6,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM251.4,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM255.2,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM259,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM262.8,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM266.6,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM270.4,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM274.2,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM278,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM281.8,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM285.6,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM289.4,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM293.2,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM297,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM300.8,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM304.6,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM308.4,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM312.1,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM316,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM319.8,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM323.5,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM327.3,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM331.1,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM334.9,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM338.7,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM342.5,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM346.3,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM350.1,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM353.9,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM357.7,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM361.5,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM365.3,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM369.1,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM372.9,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM376.7,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM380.5,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM384.3,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM388.1,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM391.9,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM395.6,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM399.5,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM403.2,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM407,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM410.8,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM414.6,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM418.4,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM422.2,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM426,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM429.8,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM433.6,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM437.4,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM441.2,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM445,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM448.8,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM452.6,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM456.4,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM460.2,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM464,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM467.8,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM471.6,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM475.4,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM479.1,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM482.9,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM486.7,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM490.5,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM494.3,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM498.1,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM501.9,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM505.7,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM509.5,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM513.3,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM517.1,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM520.9,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM524.7,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM528.5,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM532.3,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM536.1,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM539.9,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM543.7,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM547.5,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM551.3,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM555,27.3l9.8-17.8v-1.5l-10.7,19.3h.8,0ZM558.8,27.3l6-10.9v-1.5l-6.9,12.4h.8,0ZM562.7,27.3l2.2-4v-1.5l-3.1,5.5h.8,0ZM228.7,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM224.9,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM221.1,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM217.3,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM213.5,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM209.7,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM205.9,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM202.1,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM198.3,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM194.5,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM190.7,27.3l11.2-20.3h-.8l-11.2,20.3h.8ZM197.3,7l-9.8,17.6v1.5l10.6-19.1s-.8,0-.8,0ZM193.5,7l-6,10.8v1.5l6.8-12.3h-.8,0ZM189.7,7l-2.2,3.9v1.5l3-5.4h-.8ZM138.4,23.3v4.1h16.2v-4.1h-16.2ZM158.7,7v4.1h-16.2v-4.1s16.2,0,16.2,0ZM138.4,11.1h4.1v4.1h16.2v8.1h-4.1v-4.1h-16.2s0-8.1,0-8.1ZM130.3,23.3v4.1h-12.2v-4.1h12.2ZM118.1,19.2v4.1h-4.1V7h4.1v12.2ZM130.3,7h4.1v16.2h-4.1V7ZM183.1,7v20.3h-4.1v-8.1h-12.2v8.1h-4.1V7h4.1v8.1h12.2V7h4.1ZM69.4,27.3v-4.1h16.2v4.1h-16.2ZM65.4,11.1h4.1v12.2h-4.1v-12.2ZM85.7,7v4.1h-16.2v-4.1s16.2,0,16.2,0ZM106,11.1h4.1v4.1h-4.1v-4.1ZM106,19.2h4.1v8.1h-4.1v-8.1ZM106,15.2v4.1h-12.2v8.1h-4.1V7h16.2v4.1h-12.2v4.1s12.2,0,12.2,0Z"/>
46+ <metadata>
47+ <i:aipgfRef id="adobe_illustrator_pgf"/>
48+ <i:aipgf id="adobe_illustrator_pgf" i:pgfEncoding="zstd/base64" i:pgfVersion="24">
49+<![CDATA[
50+KLUv/QBYlC0DOi4boTogRUTOAwAMAAwArAHAAMAALMA6vrpQuiak2EE606A//CAh0Acdrm3bBlrg
51+Xdd2Skn9A4kJGABwToA0XQkTCksKPgRDkQzJ0Dw/n3pzj+j4ob8UfVp+5md6k5tbLdHxK0FOoiM6
52+muD4UdEM+z59yE/Q/DiYkh/5iR84/tH/zT//pSd7KX59i76T+6MiuD/Zyc5J9TRLMvzG74/bjx01
53+yVH8nm815GJajqHnYSmCIRh+4Ac56EEV/cyPf/1TP0qCP/TkBv3nP+9PspM9/L2nJhl+Pi1VteTm
54+/kITJFFTNVOziyd4huM5lufm3n8oaG4UTdHzTNUUTdGNoqd5niZaoiVJjmG4QxREQY9+3zmqpig5
55+bvEMzxD8vO8nP/l5mmiKjhtMSzT8vVS356kpgt/3URVVURXFU9yniIok+P0uirv8wi/0oeebDP0J
56+9q/+nXa0m730KD95ycvv46Afe+egF8Gvc7Lj2df9R3bPxZD8+Og7Gfb+/0d2Ugw7npE8JEkuerB7
57+kfzE7oslunnv3fcfdrFEe9rVzn333v/Qi3400/79///b4yd/if70q59//fPfHz/yKz8z/dSPgx0E
58+R1MFNw8/MRzNtIte/GIpmuIpomIqqn6PIzmWaEiK5HjuD/2i2VEP7hEl0TL1IZmWKUii+0P/d/qT
59+n6mJmqZJmqIJmt/splqipVmSZVh+pS95mZInSH6Sk+l4jpscxREc/8jHVDxFUhRFUPxiF9UQDc2Q
60+DMUQDH/YQ7X8wI9+Z/iB6d/oN8MPqj4dvejTju5S5OH3fd9jOYK+q2S6RTL8OsnF/UOPfh1UP/V/
61+23+pR0k/9u3RXZJjuNGTND85jlscQ1IcN6iCKYiCJ3iS4AiK6Yf6b5dfP705fv57n24TTDlahh//
62+XU1R89xmCX7fc3NzUy3VMi3T0xzFMgS/L3u6PVmO4yjuMiTDMRTDMPzCH/qwhzxMQRQ0wTIEQfAD
63+P7g9yEH1Sz/0Oz/zK7/xE7/wA7/v+1//+Kf+9KP//OYn//jFH37wf/9///lXfepRb/rSl570og89
64+6Pfnv++ee+7Vjvazn93sZSf72MUe9q///rvvvfOu8pSf3OQlJznJRy7y8OOfe97//yo4Rc1Nmz3j
65+5NfxDAS9+Pv/RpGHZP86LpLf90WS/CNJei52PBNH8ZMdFHv4fZKLHd+0adp2xzRtGee9Zz4TO56J
66+YPfk5yPJwU/0X8czkgQ/773vXxc573gWht+HXwR9+L/Qix3P+D7Ys2nasm9LNjc7uU3TNE/zNFEz
67+NVNTNVWTn/zspz/9+c9/fud3guIpnuM5nuRZnuVpnuZ5nueJnumZnuqpnhzlaEe3Rz360Y9+6IeC
68+IiqiI0qiJFqiJWqiJnqiKIqiKZqiKqqiPO1pT33q05/+9AvTMBVTMR3TTaZkWqZlaqZmeqZoiqZp
69+mqZqqqZc7WpXverVr37qF6qhKqqjOqqkSqqlWqqmeqqniqqomqqpqqroaZbkGG4xBL/vOw+3mqKn
70+WZIjuEcxBL/vOwdVNVVR9VRNtVRJdVRFNVRB9VO/6tWuclVN0xRNz9RMy5RMx1RMwxRMv/Sn26c9
71+5amKpiiKnqiJliiJjqiIhiiIfuhHPdpRjqpneqLneZpneZLneIpneILnd/7Tn/3kp2qmJmqepmnu
72+0iTN0Zvd5KZapiVanqVZliVZjqVYhiVYfuUvfdlLXqpkSqLkSZpkSZLkSIpkSILkR35ye7KTnFTH
73+dETHczTHciTHcRTHcATHb/yjH/vIR1VMRVQ8RVMsRVIcRVEMRVD8xC96sYtcVMM0RMMzNMMtsPmW
74+bE+WJmmWZkmOpmiOOwRBcIuhaIbmDk0xDM0QBL9vboEt2bxzzz8O8pCPnOQmP3nKVe7718E+drKb
75+/exp39x3/3nQi570pT896lXP///gD7/4yW/+86eff/77PvALP/Erv/NDP/VTPw9+8ANDUARJsARP
76+EAVTcPfQhz8EwzAkwzI8QzRUQy568RM/ERRDcRRJ0RRRMRX52Mc/fiM4hqM4jiM5muM5pqM6crKT
77+nvzkR4LkDsmxJE3yJFEyJVNSJXnZS1/+8iu/EizDUizHkizJsizN0izPEi3RMi3VUi252U1vfvOb
78+n/mZoLkF9sFWmT7j2V6EGStTtS8Whj+K7FHDrati5xU2s74dDrCTLVqZbXUyFRyL5Vd8trUb62Rz
79+q4LdVatmN6K6hdl3U8Mui5lZmH1bAS6GVsHta2YtAW6damV6blNuS2Znlvu+7FnPZT2XrZrdwJo5
80+rl1VmsEbGuViFNkig2N3BVuyVqpmBWhZqjR749jzxrEna9Gx2czmtq7ZVFvTA3TaN+XWM7t50e4b
81+o14DdOT4bQXA6WuOVy2qyBZZO7OvupBdtlNkCxbsptjZkymyRZ1qE1CaTNUCwJ3jOtWCFDtewRY5
82+Fs8r7LJi78Y0EmwW7NawO2/gmMAkx+q2w4rfeN5s26ZruH294lMFp9u2O5mO88xp8nBb1+yr+q+P
83+YA9FkvQk92TvfOzGzIsqd15NYuhBR/Z9oOMBuyx31rQsdrOJArQuCFS1JhWcCtDWLDy39VuaxM7B
84+LAx9BvrfM/EDfUZ28o//C///wi8M/f/h777rZB8znnmSiyAI8rGHXvSdz0hyJMeQHMWR9N0XfRaC
85+HhT9J8FP5GL3vSN7tC4o9sCtrDHxbim3/WWff9QskwDTyjXVcFvD8WmCXVZrmsROz+0ALOYVIxjr
86+2BvTLaduWTPr6eyr1nNpAt9WFWdIS7ntnj3al011WtbMYkyfzx507cKfuX1jHM6/r1PPZQvHBNlD
87+gNYV0H7+M89FMfuid2RkF8PfOTmSHzl24X9dD9h9PQM7sH9tzb7yq/WYvqX8vi96PookSbtm9iXH
88+86IEx67LajkHioybK2fbNs8eNAt267rttCz2ZTGJlnLb2cP0LeW2w9+zx9yiXjEC1evGTJPvlrJn
89+NfuaY7V9XdUEWsptu1Lsa2YCxO/bjjK2hlsWm8lgdoAze9Bz/MYnTbepeN7UcPuKpWJ02/Y4fpCT
90+fiRJUiQ70megOIakJz3no9iRfsx4JoL+hx8nOe/oluNWtm3zn/E/Zjzj2WNAbLJgVwXHYnPb9h9/
91+2LNHCwCXplkBMHtu285sBBCAAfT/+LLQe957PXu0NYvCsbtgCaA7z02umUVNc1vHsWpqWSz9MbXo
92+2Hwqskf71q5n2/ZCkS3mVjWzlQx2azp2UWSPOVZ7x3/2gGOXnluQabSU27Z59/lswVHMcc3ONR17
93+X0uWPea4Ztv53Lad8e47WlSsKh2djbYF4UBhYepwx4FmAHV444D/TjvQJcbLgCHc9k9AOi1XTMMh
94+mBMoD5ilIA1pKNvWEBayxMhwdAxpGX4aIKgql2gIRxfdctLDshEVjhFrcIABmTwcjCwiVHzb3sFy
95+wrjlPELF+0EVQxhV6Xwe7w4RwwUMHvWFNwy+ed62hsJqEx5fWT+tFoOIHNZtfwwMKz+dGdi1VVKr
96+ApTg28iXWqC3XWB6VE4aQWZQ52AIKQOmyrcdfwgVz8RCmAFk1QKdYXCVi0YeA2FUMITcpOYyQcq3
97+XZ8IFU8dJYrmsDDQg7lpDVUt0IYNzXZJgt32wiNUvOZIFi6gsd4BwRjhWs4LIsCVtl3A8gIcafGl
98+qJLR19ZMLFoIbZVwsRHzO4EvBeE0i1MDYypCxUeiok1o2yk2b7uR1vGD2yy+hMsnoCXOzanC5Zfq
99+a4iYpY9Mv21F5/N4zDr4WlxjMJ/JF0Bs5ic0se0jRkB8xtR58mxb9NGEPkTxQGBEUi7QnSv+rqCE
100+Sz2Nh3OhaEGS8GiipNFna6pwz6mDKTUI0IOyOE+9F8Bhx2OgmQ1FM7LAKLEH6pYIiKmXXQFFLN8+
101+qh0hreAEdGxu+xtFPC4vTg18N0WG0/k8zml8GBSo1DlW6KSN235j6mv9Cy0eESw01SXhtE5Cq6FR
102+UpJDYxAILDRNl+K0jOobWk37eaYx9Yj5Hb3gXLjHcPVewwwvJfXAGr6mGi9l2zOo1MtTNRB4C4QI
103+9y0JLFT3EgjzdzTLABrCZLg0Zs4tamCEEm48gRJucjlVCg6f/roGycL5BJz4gtavlJ45rJQFsIFU
104+tz0QCivlmag9Ss1ImD/38V4CKfeMVAO0A5fmlOAUVsqCYjLPlUgk4V1xRMJpJOZ32x6pTA2tQVcU
105+Wkf1De1AZWpoW5fitEpCq6HBPHICxAL1fkm11GvM3+jqQSu/6XA5Hqwzo/pqEDr5CMV14RWH6sL9
106+CRPhtp2hPf0VLE4N/HVrwh1okZT/kDQ7Vx2kPI89SHmnbhygYLxL6TypmlS5xp15pjGVAd32SIpO
107+3CccpLyZ+0juoMVNUEv6WVEMXKoBGsvu/BsqgZQzOAcpj+4+kotRTekhUIoNvpNDJ96QZ0Q3UCkm
108+qAZBcDJJ3RlKPakSEqiAtNdtW+6AEk4xinjcZ7hDQ0WZhtZ5xDitW50WWsttNTTSgGChCbgknMZJ
109+eA4tUvkLrRVyIpx/FAh8PsN5fISSvBRRu1h/JmWs+GwyZMoMaSHwDIhSqm8b44ZO/tUx+LLulKjn
110+EgMRLjyBEk7Ff0iM1ZNDwOAVGoTjH82fcKiQEkoHoeKSk2byuVBQwqkuUtoTGc7jHgo04cQTKOG2
111+3chaVZxqUXC0WM5O6WWPrHdL6e16QOvp3VJCYLciQNzqlB8JpmZ5bgW4M5oNgMpULeyuWlQBinBc
112+w3HqFadYVgt3tOyiOlp+WwHt29HyR8XoeDXLr6qr4VUYzvXMouYV7LYsVp5TvIXdd9WqfMdrt0bF
113+CQPUdFvDbvdK+c47wpDs4ZlaMnPl0IpXCobZFBxb8RfFwm1Hz6pZHiDHbe22BKDpdpblGO1jKjnu
114+5AG0HMcpOWbdGmY7eYDsvilWJw+YfycP6GiZbuGafVd1S8+tim3RHS2z8itO9bej5VYduwZ4pbpX
115+l9l3bgXEr1vDqdQrp2gB7cum6E41p7qAVsfqVDMIgDluye676lRzitdw685xp5pdKfZFxTJdz60A
116+OE5185tSxa9uflO8Q8UJNOuuYhTMculW1bavmYrRlo6p2vZFdatV3LleLHmW2VftojpUnNC+b5yC
117+3fltVfFLJctvTcvyW9PdLMuqsJtlmVy1b9ey2Jc7dgHiVjfLckoFs7CLaVdzu3nbAe6G+yxewRZU
118+fMlq2IW0LNYFsy9Kdl00/b5s3NJzK6Cd3zdOsWB27lBxgucpOpu0s0mzTmtMT/R0NJxsQPvK7nvS
119+rPuWmVvDZWYps7Bbysx3S+nSMexmMZyRHnQFdeqYwMu8DPIVoQGxKcfzaVpBHQVbD2g9WStgfmMv
120+l87mVmbljETRmcqdWdkAKbidWZmG2bnOSEvpR/95cGZlPZvjN06xGWkpxRH8sr5qMd2Hvu68b0y1
121+lC7FgLbmcuxx1LSLsmBXgNYFjV9Lr1aaVYv5IBi68OdlwWWbYlXwY+tOvWoxYPd8BD8Ihp7O+7Zn
122+O680675s5tYwG6ZctH1RrKd9sQQvm4oxNGqZ2xq2pGK0Zitv21FkkFh8vm97gt0VzzWdtbD71rG4
123+AscAcOe44s161WJGcgQ3awZbsgz1irU8WVbDrcpVsfPaDtB1S9Nl+6LYeo7lAalXp1xUkUHA7/P/
124+G1sBbs2+LQd0ZDx2We2cDWhf+RWnMtl9U20KZl8WlQlwzLx78IvhOLtqWw9I37c9Vy2m/zEjPeck
125+SJrfyILdFu3CLKhetRjfPUmOXRTl2FO3WC6nf6SYkX2sYXeW51ZAnLUCZnmV8W4p4TjVdga0KthS
126+s3VngNp9XZRLu6AWZt9NHZPrmIZ/Od5kLYuNsWAWk9Ut3c6bbG4ztPSKuao2c6DIWnSbyUhL2Ws3
127+xcoakDPH8auaVO68iqHof/uisrZm35h2WVkdi12pGHZlWe+WEgDu3NY0y8niOlZmlnJ+49TXubJK
128+dF+2jmVapWLl8NPsS4AV3etVi3nFdR2j+AC+fyH/pOdcbNUqV4ABA+oWy21bbWqOxZ2U+3YBVnQL
129+x/DrotrOzAoQ8KBnVoCAB+0hr7imYykTDSMU8PsawNYs2r7yi6UfAui2jqHcua5ZuJ1Vr9tKQei6
130+7bQvinVnVkBXsXX7kgeoydjLCoBbVQw7WlUMv68BKkOrigkwGZEHqVPt23Z4K8WmGSRbtSrTZtpM
131+2/u6qisVY2iLInvj2PSccqPIOmr5fHof+ff9lYr9UI4+dtJBsv1zhG0nHSmSk2NqtVK8WIJWFadc
132++ONli56pZjZG1XOpcM1sZgD2lWkX7XDs1i4dbzix5205/Csy07Zr2I03L9tyvCwU+5iFoiiWbDuX
133+cjyfiqyGLV7G2ZpF55qG41PVquY41XJoOHZr1p1ZkKWE21WRQWraxdRzqWprdma5GUUGYee59BrZ
134+YiQaEJsCtC7ItII6iowFu3Pd8bJF1nHFADMLx26dch+ZZ9o2W7MoqYJT0+c/X9Muxtz0jIs9YmYk
135+75E1A0Ef4Sg2K0pt9gaACLVp67p92Y0KTiHZqkW9bEO8rRJlPeubI8r4VmW8dJBlMt4zAbKeJWQ8
136+u2R8DyDK+C5FnIxvVpT1rcl4+8ovt+PtRta+WAIvW5TqN8auWvRAsR8ZLEAMD3ibbt8B6k49l6LI
137+t8nN3rvZN0iqfZt9myja/yZRddyc7KIKfjzcIhf5SJ4cTVXOO+/df3GPfSzNM1V79x4MRT9uskxV
138+/rv/4AfDkdzlN795fpV/n/8fGJLlNr8TTf3/xJE0T3CfPORhD3ufi3NAKVogwbtxA555nqnOPFVe
139+e5QeKkMpxEs86sOhnbwmdCq/pvIRXyZhlVcPTlSfUOKMp/DihbdoMiBFAU5eCkklpd08EPGzQ9El
140+nzCJTN+ZRGZ3rmjUSqPWT6O6c8VpFI0q0MymTvFYcY5L9Lc9m85EA5ZowBKrbTdgiVUDllhxebSC
141+QCDRbCGl/ZRH8oj7nItuORfd8m3HoI9o8RF9TtBntAltQsvbhFbRJrT8tXlt9muzSjqiczu/U4Wf
142+nIltO4q/fSa/3jwmFxh5+LFLn1xeF/JwefXH4Q/0yS88Dn/bF89FHr4lATSJTF9hcb9CS0Smr1S6
143+aON62+6ijTaBSeoGhUatB9KvKsVlUku41a+qdXStKlVlVTo2OYOowKrcWmC73Bj5xihFcKSOUYqg
144+SOfG6KMhfZgV5x2kZHT0AMJBSkYvJBAb9IAxwygloyM2Bdv+n21fuhSnUWRWSsMVHbZ2sqO4vpkk
145+BF6BMrM6rAsLKDLIA1I49CtTihIixtNfgdedJ41aR6ORiPu9O1fbFnWKR8N3XmAzBbafmQILwkgr
146+jBQScYW+4vJIHsmjVR7JI5BoREr7ecISKw7iFp8YFINWyWdTMvq5xTC06qJbjnAoThV+Jr5W8JgM
147+yAObVvAYkBeRz+T//pn8PSBrBY9JjBLCyMOPXfrk8iIPP3bpk0tioP/LS3EZ6BOZPHz60ieWbXN1
148+yVvqkk8VE64ARpe8xZLgaFcJV6Eltbnt7SusygnBn3xH8CetpRKZXjG6/LYLH/VV1qPknqaNUYqA
149+SB2jVAOR0t4YpXRscilCi/qYLW172yF3iiNnzOx8R2XcEqGBNbzCub2frErLZ0qc8UTewPDb1kRe
150+pjsYvdW72bJtrztHIwSReYpCxWPF/2xaJbNpNa1d8TiIJPw5m2YTjLQ6Ct1R6KsPI62SUChEcwps
151+Pz+MtEpgJA4EAoFEZ2LFYYkVhyVWBfIIsQBLRk94HqHyiDyixWJxqnBHY3Gq8MWpwhfnybb8tVn/
152+a7O+NqukIzKxLd92wsS2fEAeALfP5H+t4DEgLwoeA1tC/Ex+wWPyB2Tvxy798oKRfuzSJ5eX4nsc
153+/uV1OSgeh3951ajFkrCwJCzSs2bRpRlVTLpJZILahJZXWLSkRkzqzoiZKhVW4/vOQZGE90CRhO9A
154+kYQnXatK0UYSnrHuVbWaHFY1FdjuUXJjFHfxtmPERoLGmYaW2KAH6LbjTEPCoQcMBSriejFiA3Po
155+KIJQ8TemSkKMojA6OB8S3xo0I71tVYxgBA0QKDQB1UDSx1UsV5aGTGQGDFy996sIguUBFpAyJd5Y
156+Dcb+Hvx1/Bl0UWrEVBAN+VCe06+jpWFAmrWIpkCDm5HedqcJzDMpFsIMlW9gKFg56VgL7OhLmS4d
157+YQg9nljlX1YLpdGH4F+cgyH0VGphNPoOXvljMIQ+gVELpMXncZQomiH8BJ8Xwjm6U2zeLD5DwnCq
158+cJVKEqmblZugMYTmGD0dboJ2Lq0BDV088+wu1BMxRRDmdNsYs/YoHZBqgIqrg5VYAWlW6EPhKCBc
159+HhYIIAVjiLVKybm23HKAZbxPKYT4MCkBUhih6UMJZeiSh5g0av1ed644jRrVItNvMJHpz4JLZI5o
160+1KhbbLNpFXFwJOFBxUPxWPFte8VjxWMIkYQXMbadyBTYvu1QKBQ6tAW2n4W+KvRVL/QVh5FC224s
161+OkpKO0pK++lASenmUFKaWHF5tMojebRKQCdDQkp7AlIy+hlCRbxP3XLK5/MpdEpGP72LbvnuLtpz
162+0TFo/TAWpwr3iDi4s0rgzloAd1bJbNoxyqnCT25iW25iW4eJbflrs3ZEKylRLE7i9pn8AXlg23/7
163+TLSCx2RAUfCY/AF5JSUDdGxy2zYUPPYArz2TD3tcXisp4WbTKuEuMPLwEQPrj11cdMsvL8RFMdAn
164+F0T3OPzDQJ9cYpdeR04VDrbokt/2qNBX3JLgM9xolbTokq/RTMFjgkgVE0vCSkosu5AqJqtjJOEs
165+NaqYcAX0Q/5MItMvPkrCbdujUtCSetsVWlJLuNdmUsffgBkr+QqrEmcqLEkt4badaquEqzhGItNz
166+GI5zHl0SrsDP407ZhMrPiZipwtdtNyitSMIXyEwk4TVUJOFjo2vbflWtpERNbCTcOn8iCS+PLgm3
167+bU5hNi6kgelhHgV7RLi45fVMgd3Ay7YLH9VIGyoLwxTY2KMOunPFuUaBxkDxWKWIbtPyDiWlX26M
168+UBFb4YjF6WNiW44wkEhpNznsxwxADj9FWAykigmXHvRPozdqDSnlMBwnhxhYJX+lS2lPEVZSIp+k
169+FG6MJJxvfNumUatXSRzYHotgiRXfoFUCd1ZIweFnGhkPaPJF7LYxA33C2XYMUzK6yWEbD4Pr0bLI
170+iJkqfEOcKnzzqXyUhEM1IVTE9bYNvHCTw1b4tmGIjYQrKDgZjnNLJRKuIMN5v/N5XE0wGR09WEnJ
171+thkGtG15G9q2PNN7VApZEj9KRj8PEir+QmwkFj5pZCIJz9GsFtIl4U46NhUNhIpzKAWIggD58IWv
172+Mm6bn9+LMGKzJvnQnAkBi4bMsxkm4PCHOA9hDiXrScJSfcB15KBAkAwCDYFgWqJvA0JL3mId0ZB5
173+3raoKKD8dZzVkf7QkD8iFX4dfflgnHhjE0n4wzdIOG3LQIsKCMaFJtASFW3CEI7mdQ0P6wkF8lzb
174+7xCs/OtgZIJ8+GAIvSY0Vd6xaoE+iFyozAhRGOsBQcr74xSbt71ARVzPkBFYYX5XMPrmOSaKeDwB
175+jxnvXd+DiWLRAmmve11ACZf4Bgn3M5oUhHNsIglfmF2m2JwWSkY3IBAq7uifRi/MJkTmEOKgDe3k
176+oI0uodXQPAmthrbtEXlxaKdLwmkH0gCr/oID0ZfrAbTiE65x4QMZBI5HD1xaPfOGTv5wEpz8FpMW
177+PqQNRLjQ5LBwRhZYyBKEdkGoOEMAFSWQPmikG5QEvSgIGHTYTyqjI9NI0AjiZqQ3I5CB3vbBTxkk
178+VxkZpAsE99gsjy6+Uc+tkBPpgDzXxkMEDsOFRc+dJnB51CWPMh34Vvmlksa88sewMAlGS0EtKiBI
179+Ag6j2Hk+aALbxnCCkFYxMKgQwgKDS1xpRH1EmFPbOuCGBB4HApcZMPAUWUcP3CrNpl8AqgIIpQam
180+JfpIfQNCS/NBAgQ2fpLDozRvW6EooHzRto4LjCRGmkM0BB0hVHwU8+uYSGwk3LZDNoE0wx2h4ocR
181+qfAeWB0nBJoCpCoIbQVLQqJV4qsCve1WU6hVAlGrio1CxItYx0mXBzMIZirQFxLmMzpglDalEYpJ
182+TzxTUUgS/l3nl2iCwQ6LqUVgIfA/kpqXnEDgPfq/EkQEjpcu8ZHUWCWUuEjatqoCRwmoKI4kWFya
183+0uIANODbLpUKEEypJOMgecLT1Khg0IFJiGsOtr3WBfZMwxAnqAurCfQo9NXs4lBQ4SKDYKRVwsVO
184+FigiQFE/23d4hIoL/I37HDimQAvIAyC+HqBOBa0OC06Atq2JOR7FwuCAoK0MJGISCoEp2962iDnF
185+Zjiz7UxL4lEhLcYAQgkRDsqA+HFhVrnRkDq/bQ+EZfHvNpDxEqAMUs6BEOJbDKYHBcMtNhSRqu08
186+BRaK1Ye77RJqse2CSyh0Bbhtb3vbmITn0AysQ+FBADW0WAKWMTeUi8FjxVdz5cI3EBWnhGVMF4VU
187+lDLetjuZDkbhkRWnNMAHvdElqlMuRRD6CtROJKK65aBavu0GZLLtR2qiE+o20R/nvNj2tguhyDxv
188+VmGl1IyX0tk5Fj/kuEpzCgshuOEBYUi9RcusuCv1yXgxh0D5U49b/lJjID76aFy4hbO5cDoyqj35
189+cnfdNonBmaiPUgOSPi4PjKc/jxdrohdIex2sLYmtc9t1m+g1KzJFE+5YHGjuqUh0MDY2iGi0ypHS
190+nsC+pcp4XSa19MCS0WEgUIJaICR8PCWJwZmE295oRJmG1h0cFASqb2hml+LCGiSLnU812NoTIAhB
191+WVEhKDwsYnE8ejK2uqbTgSgyAkKjb3sTS7S6CAUDgRJOll8EhrZtOrZ9haeoS5zIRO4UrJKObrvB
192++Cljgo6gPoFoUKU5hcieFWXbpVo1QBOPuFGuGC6mIz5lqxcKDBfHNDYQBXOgmPzjizMeP0G4rEBE
193+sSS1VGKJyNAlv20J69PoCKy1b3vb2972woJBdUeERWj0rgGZbJuCWEzkysJve+KScBp3jA6tYTIW
194+X2UaV6dFSIY1NM5B4Fr/UqU0vBvE1B+3rclvW8O4iH+yB9THYoSM53kOOOUmzqweUyFqLyA6V3w2
195+wBha7bethjzzKzbiZJ4lCZ8V9yY19Y4O2JGo/bYVKDiyOucTp0NNLRKEwjCl/LZFF9c7U+rEpij0
196+/I9tG2TECi2IubRtJxwqfdsgl8jjiZPW0BrzvNAqokxDU/3SoUl+6Ti4JJymkWEN7fCRE5rGMTo0
197+SKGA0wi6FKeVEgoDTruoTA1N/V5OoygMOI0g4Tk0z0Ebi1SEUT5+PXnGIka9a2RuKGkodlEgqmLt
198+cx/IeA1EaeENoo/7NSsy/bYNNus3rfjr0v22UxoJ4fSUJvT8DxIsfVAOh20rts0dOFDPHTwG+LZJ
199+EnoAfSSVEwiiaomy0ZgwylOG6SM5yCyGRifEDiXBCZd5njIqiUcTTQr1BoPItkdzJabARAkQZUao
200+7rltSsWnZge9lM5ZAyvlwKT2KJiOGUoxKxtDBWqHgACBgeBkmgJhpaSEYaUkM5vSQ2RN5rkTGntZ
201+cEKkOgH3XXzbL4zM8TwGBIjvQnlAyqxYuKWFNtj+AQG2eBYjhjUwdtsuqs3l32gW41WA+m1HWI5U
202+fylSBZfHt/11SGl/lZWvS9Q8tEo4RUMEwRRw6IIVevhQT4kRYGlKQ6VhUlua8JRqntqkbtsSGQBR
203+WhDN+XhYcM5wqnCJ6rPi2yiy8AgJZMJxXSCUXqpNakig61AfSgiU388hkKdsGbhcShu2Dfk8Ge91
204+ASWcRHuZ/DwCJZ5J9fhZijetFXIiXKugMki7BMumGE4FJra0WKfctmsmWwjso57SFVlXlIQeBiAS
205+DRGTcAWSgPbzXHM+j7uo2V9Upd2XBS29Ekbp7qaSFigULtNt0weFg3kYwoVJ9bjjldp+wisZfURs
206+21ycGjjDW8uDdepEgFJQxDrlJTywoIoEiKcccRIgysmDwRRXemJTSu2ZfIjoEnk8ppDS7hAwSDiF
207+u0paMu1R+AFYKUki0LtKYIwBBOGBMKeN1JiSZyhzMkfixKMuKHGj3PYF5CaoSlCQKilcbpQEIzOU
208+et6Z58EigUsZbrwUNKEh/gth4eJzW+olTI0zXv0ZXfimU2m9YrKBKF4EcwIl7wqWcqv8X4Kp/Nv+
209+KlDpETLl904iXXuchLlSKWJzEV9RsEo4sARKPtFEgOKhtxX6Vl4GYcqNTP9ZkfPAchdS2ruyZPTO
210+cKpw76AWwHhEgWglJYmELxVQPwmY9UAIsB7qMKion8lHgQag5GO5Jh8D06M864qcB7YrSlLaHWPJ
211+6H0tsL37uBwgC2URiJX8SKWQJZVvYDI6kYR3gApsb6CktDcMpwrvOCiPvzqEirMNDOr0PaCEmzUM
212+hOKKUgsExoHpSYynvxBcekp5QGydJwjiU277fEQ+If+MPO5xRsP4mho1bJ2rBUIL6TQjSD8ZnbOM
213+PL7tRXdYdLBn8kUbj9MquuQ7ii55ztl4nBZFEr7DbDwec1g2HofFktEbYMno3LnZNlmzFc4wnCrc
214+f1aP1y/y8DmwZHSuWT0Ps3ocwaGuCBxlXRgWj5VjKAixUqdKMJOEb1AEHghp3zbj8VAoVLyk+CQe
215+7x7rnqYMmnxSKOR1XXc2KqCEaxT6ijMqoIRjKBIV0DOcKpwmgRKH4VThDZPI9Ae0bXngKJLwAwcL
216+k0p6HdhusVQUamxroBxCKDRQ0pj4VY4UEvM7sktxGqkAdmiS111oCAjPoW1+6dAgLgmnXVwSTiuw
217+DoUmCmUaWooAamiihFZDi6klhqhEIb4m1Rh+25tK2ujwVvFlZvQEpYwmNpRSbRB4ilFy8gdYH+Av
218+xaniaDUeTzUCKV+/5ERdOCpEMNAax1T4tlsj0cpfKynptEpns5kvZDwYIEg6FYgETROczGJoCBHe
219+NNGlSDrRo/RKSJvYyjlNfeHbriUdh3b5pUPDJLQaGu0pPRtKxl25KLMFdeHbzgwkNhQMiMXxEqcl
220+1SnkP3mC8fUqEZ+2832FMZCY30FiEj17CWnKCw4vwnnk+JCgVaGRnjeUL7UyZQN9UD9iswUR03NY
221+Kum5QJE5cQSHceItOAHinFhj5ZVSSeWUlFT5fzgEBLjR4iv4Xk4jX3dhATsYhQa5a/+gssVrLKnz
222+aoLc6C4I+1Hq2IHAix00xL+EBwvfajxuEkEp10xqCpOgCBoJOiFpxWbHxJ3nFoFm5QSxYeVqyKNy
223+yYSrfNuULwXhXo3ptcxaYmibx2SeUXhTcczrAJMoMhzJgVIYgwWkdeCbF7dxQTv8eU4oOttcUww4
224+eQXhNi9NAjhKWHCnyaRYrCZQLOOtn9ctaHVWA3LvbBsEq5AISLLTDrQITi4KC6NyiSYYphM65Fab
225+wHRg14YaQp3DI0QYFTyOWmqL2qIVDA4HEwY5tpUEG4s9S4vmQrAEM6GPeGwOr2BmMbSS9pnY4kCR
226+WMQLDzv4rJ2CwEJ1emucvOX0eFAqBKaLQumejGfIQAjKjjPF8oQLbDfjTo5IPCoFg3SNuj2bFI8V
227+jAQjwUgwEowUEhlQBbafZ6Gv+ALB0W0zYIkVImaKQXAH7ngQMRWhqk+E6mwMbPsyZnyqvi6gpHIi
228+FieHxsBFA2VFBEq5RcPHPkZsEBs0PtFIyejomZgRYoJGIFSbR8GBJgC/YggvlcG5qIyVcd46PQts
229+1lTpYDnh6kEbAgGEmGiIwKerv3U8ODsIH1zHMxP5tq3ZQEpzh1hHEQ0Ja3D76/gHxpc0M2J19GhE
230+KQLMEJJtZdx2xyRoRx+rQ1kShhB0aoCaic24mm3bnEqJs0ijbbvQ0oIjegJOqg6E0uL7hAaSZggR
231+lsWh8y0CmR6opHS3wSIpIUMjIyACAIAGAxNgIBgYFI+IRhMKtdYDFAADTUIsPkZCMCggKhFHI3Fo
232+HBKJYzGMojgKozCSYwoiyIwoACC8xQvuQenZLDoEQxstGu6mSSstBZCIciPRgDcXmPsXA6GDsDDS
233+rrvXTsvFSFPEXI5E3thmyJRL1wpvZ5DhWDpLQvQEl4njg+5uA7xDlU1GD6a7RQRvzcNvKQLjiF0s
234+w9XH4ur+SLBxNzKwu9rmmp50CudoIvTi7j5wSzRyQTtbgaE8SdI2j6jJuOb2PTKMf2rSrNbaVsQ/
235+cjWDIyObEKGjBFBF5ekxhl8zAGh18+NF271dgjJ4e6XOqyb810thn3PTdlZuTzvdmlDba8xSJ6K2
236+8YaOWcJOeYsunZPF33a3NPxbJrQNCAqA7HpFity5UJjSImp7JtYgUhLEG7pPuZ2/43iwlOdpMli+
237+/BRevKjtx8VtI4VNkBln4sXv2EudffbsnHVsZ/zoUeVuBj3213T25BC6smchzWCLbNqxK9APKXJX
238+GJGPMtYeZkf2RfCNNP6EyMF79ZGeEgg57lktivnqo7ZqV4b0fTLYnYGz3mL18y/NxmY4mpR1iAcf
239+8reGfJKHnCSwJCVx4Be0AmLwFtVpxLZQEVJfgcM9qxSDH6KlsjJzOEzh32hbBbBi6+b34ZwpZlan
240+84R47Fk8QSxr4qtJ9s08MXkNeiAj0cvOVo4fy5VLP67HM5yb8T06qEZ4MeGC7fBTsBPtAObvg1nT
241+14nm4/jhVjjJ32CMSjuSzARbyXJI1gT0SErVRfZ4rhkvMqgjl+zIqg5MfwcXR2od1CF9snrbCsg8
242+zKUUgV8HBGjN6DiM2eFguxaeCPUHSy/FlL4n+W/zGsJco/UpwrpGwUknlsTZyNHkg/MmdiuKbI63
243+g8Tu13khMFvWGs2qtW7DSUfuVh9Dit+3VqXWBFkDkEkOWKQWo/Vo+osYIlmipx4eVwVXW0M6skMN
244+Mi6UUVyxYNTUy6j2ZiXHrtRx0OxeoYACHPgtM3MRdENuNnUc+l/B+wuk7WYI4SWPg9PfkNbt6TOi
245+4iQ1GMxeYrsjkiQnaXjqRs5ag5M8bNjQFknwJwmR5wKAmxUmWh5clHn7b4xQ7QfOpDjEaVchBanG
246+8qdlzNIGsokk59UfdfKmThrMVqlIk1iO3UVdawqkl5lmmcyNxSuoRU6iVxao2CNi3Yr1B3nzuu8c
247+9cudKCOejbCrqdjjO+HGfpwowgeDFHxGTxt1t2WjtPCRQ/owHJeKFQLtQWlo/CDF+qQoHW9Tf69j
248+/FQbNVdZnn84axLUG+2XC8tCAaar0Tih0iHXFCz3bTLLxHrki+faonNn6n4c3M2uIukrJ1n+K84x
249+LWI7nWvEyWxqbhJIORCVJTa9aLAGLBanxqcUnUNYAYBsY4EwuJZCh3LixN1vuj98de86f6ImjEv7
250+Ew72IyG0Z9rGy9P9U/hU7tCQa7N6Cknl2XUtbO3Zty0a9V89tPrhynEkh7bx82MOEKnJ9Pd3sMUY
251+b+SKm/j7CYJP+h4mjei/agpWnsVGg2FAkwJBCWeRk269I7pIVltfFdJCWuFTJa9ogBpt9LJLCrYd
252+auwB7bDP1xEbPrxQcPHo4Z+4VprXL1nAXIRopZb84lkq4dkfoD91+W/e74xKE+vZszByQ3B/eRce
253+WK6/T21sHvI97VwK5VxkMVma7wwlD9RL39jXSCZ4QbLEwAns9rltecgymNSVvPlHlC26XhU+ef3H
254+RulGf8FAGv3dyxfKH7hkyRKKEsYqV2dhGVuT8qwM+xCvTJmiEDNPK8zZFTcGNSMDA/OywUiIPqLJ
255+NJkO5BC/Htk87TeHRAjVUx0W3GG8JcPBcMYw0KL23xQZ+nwhF2pzmEteiz1GT403Q0a1H5cuMgSq
256+vUWaS0wit5DUgrKmjXwHwsTxVKLNHx+w5Ns4J7FnyI/e15CH28b/oNo+3y+NHBhmoym5blOjiQ9X
257+B8mWdqkl4KQXAcj/PCRbF5Pu7u1LFmYpPNh8TA0k5MLzsZH8Sb4/vrhQgaSY+z5kIt5gaGdMeBeV
258+YdwVUiX3ytr2vctFle/4+2sYk/74fR4jKk5QQ6dCKlY1IR79ocvmZtWFO+jPtS90Rl9sRjdFLG96
259+TCY8O04daYASSXfMVaR2c+84qzYaigTPhVba3mlVq6VmXzoZRujLYYUgd7OKzCdnqIsxVk5HUk/V
260+IVyIDgDH5YeFBTtY1niFRuiIH+6K2a/KqCXoaH1CkMiV+wP6jZGIyErQJ+CJFDgz1p+i7pSTkXJC
261+vYIpypBm5XQTucj3ATFfOdHWUm4T5ngQSqv5ez6U5/f8CoX+k8aSjkFJWABredZbkt96mHK9LaCu
262+CTVFNykTfWa4s956wBhqI0zRYkv1WaHuNSe1OxFqbUu2p5CXuMjLu+6pR1AUSf+fkbIw2U+xXSm/
263+/xVNXwY1j+dM/BxzGb8uLCGANFuFZ43MEIz1uHsn85bdvPk765+hoAUgd2/OhmIm/2NYrjz17GPl
264+lgKyEizQKe5B0Oj+92R3DuVXICGNpnqV+O59tk90jPxw6dNoS7fpferRgICFnLT/t8laXNa3NQ8X
265+Tg++kJHvP0F9OQvkPhXRXYzNOucyYIrnn+HcLlRZnN3UDgf0mXEkeYrIPi2PKoiJuC/UdZKAMl9u
266+KQSgflYV4wVXl2upMzxEgfd6CqBPaLVgbpMCUOLG0G0OMqWQAqiluBfLEOGU1ghNkd4LxowN91lI
267+dAOiQ4nKI5vY6MWO0P8+2CHy6vbgv9BlRcvrEXHEVQHL+DDYc8nSnV7MTY9iKFJipSHG42IxRiIJ
268+7ThvK2+m6OxnudHxcIpuK6OTc3R0dEWH10hRWDcDtdOFQrXH6QYfp+fJCujy81N4B7sj/eG5kjQ8
269+mAL3G937zaIbDkSNSBEILzja9dhjFvbQEYuGkx3wv7JIko0dqa9gPTAu770SZ90Vuzr88ec4sQcZ
270+Vq6umg3+62cLaKaF0lPhyd6j5qetLrel8oaiSTmxWhelI5m0cM2UmHsvWBl9hberDrdsQFPZVu/l
271+fwmxhkoE4RvdIszUULIP4O6NJU9CujLsf65MI6RvYrVPXCZnOEnQXxqysnOQdEVSpcIzPXxNg3RE
272+cuLsjy5u547/PlEVLtcQNP9qBe0XY/WX6VdPxB+mmYXOW+uEtkqEpGNkOnekILw2V6HdyYdlwwvd
273+m6bDRUKxwujQqsx8gsN4RU49zu3dkmPNm7uWj/p7agTszY3yckl+S6EPJ7WGLM4U96IcI0sc0VZJ
274+UtwuwjkElwHiiTuM4Zo6Ke63ZMdFLUwUHkFjM5/ivuwZw3LingiwTlP0k3q7kPKFy+8nV66O8pA4
275+ZI52leKu7FIiFHMtZ1KPjp30uAlPHWkzIZY7fIFlm2Hy4tCvCDp2pNdAyk0ajwqFj7aUDlOGFaLw
276+BPSiKeucsH5pTK+NYJ1XywmRnVCTmIdB15lzPeucU+m+8BUoo3uhzl3OHT/WObLvI1epdRhCeLu9
277+2On904GYusDojTdZeeiZ7u+Emx+ebOHvMqHIkR9kGcjhlXInFAQ3eAeD4cDQnenDgYek466YVs1n
278+5xHgfCEAiOZvTAvkn402eBaJQ+i3GrV5NUduFYmA0I0fug0ZYtKMqSD3/OsjQkdElLSn4jn+Z3BG
279+6LjA2h/gnRiMUNEANwrd/30WpfF0YY575IC59GeG6chXCHOHElrYAMzdEQcg9gntA+ZrvaZl1xvl
280+ZGvEl3Untm7C2+ZNto7+usZL65Ny4To0ctxoE+UOzHt7terCHOOpHhw88snWsasXJ5m3HZjzwhpC
281+mhjnKTLyw81SBOQx4m7D9IuUcsQ9gw0b/Bii/3CLTtFupImLuNleQYEcy+7NIeKu4G0TcXDxeaFo
282+UvKPhZqOuIvm9QMi7h+nRfQTVFOcuj/+bZZ6uMWRpKgk1QFFxJ0rPvx7KdJwJubttJSGsIAvbYyJ
283+RXA1sTITK9YopCnrqYM0GzH8VdOZWCELJjmDY3nK1HlMrHCbiVFmHhlh5kwQxM5MjFBhQNc0QJiC
284+IPcxo67NNHuuX2rDMbrgMsxyhMuJnHaR0RGP2RVmlgu3wlskw7spNkADsGZfx5mYCpvmjf3pN90j
285+9+ohI3Xc7yHZDri45dCDwumMvokXW5Sw86it3SYxTpFSfVYoYdFZwu5v0QpldowiSUOxyLcT44Tj
286+zWmYSIGIoTNBMGlN6ckImWB32zD2trL1yS0n2Mmq+8rKjplg5WoszfjxWLkCWhgtvkvM+p1ghV0H
287+JLjeLRg+0LTF7MlMARNs8q6iT9V4m/NFxSZ9UP/R5NWX5xEmGESec4d/qVN/geogHGQArN8kPt2K
288+KSMVWi61v43utIEaj2Nmgp0Jt5Vk7k9Ybg4knujn+2gmDyBU0KXyQjCN1ThzEx2H7glzuvt5Wk3g
289+RkUI/w8lM3hSR0AN/Vh+S+zXrPHUYEodiY9IADvWIFNSwnVAfZ2LOR3gMFLfZ3rTOyRzmmb3TFuF
290+mUAy/0kVmtxfYguid5U1kZIBkXDLsYmruNtOK02W40fvRbaFnAX4FeL/VrLR2w6I7av9v0C8OT9b
291+V6ICf7gLfIIjtyBja3oLr14pWvRerMNI0KXI2HuGzsrmkfCpeYEQda9V3yzTPi2y8vnfgv6/JRof
292+kU2YdidRBFsUrbY77pVEGJTlCKM/6dfj+2oWQo/kmrvLqpJ2wSjTevvSTPBmpWwtv/4mK3agUogZ
293+Upa2qGYW6zauUo44frpV1VoiwxISoIMQ3lqcH1gHxqacbIU/1yJxaehifSLvhnu3h3WxFBekV7yb
294+FhNbXvb8eOzKO+NKDrgncBVwi/YVzNCylOc9iRYfngZPOmrEpjaKY8HAXMG3VPrNAT0jfxaNYlhA
295+Fn8j2pWsdybNNBIx6MZc0pQnsvYh17tZmDTbqBDQBH8xMH2ALQnlmCPT0hSo7ntfFaj0sPpO6Mo/
296+DldQw14p154oWwvXtECCOK3+fw8ZtQM6QRXes5crccLbRvN1PZAhYTvfyaQTefgqCFG/AcZV/nhk
297+ztetYkfQm01GSCfms3+q0jJZZDvI/Oa9oSgjWt0aAfA1peVB7Iut6I67mD/mkDTJ2Z+n2vZHTEJr
298+MK+MsFx6ebloSDy9B7cL7cuy3D32pn1N332Kj0pfvKySNR9wDJWT2LNre4jXNKhzp7GXtQeSkazH
299+fmaySsvhN0+Dybol6NxvpIJs3SfMrKkJCYwmWk97b2/rsDb1QlKMa2um2xpaVkr2s1VkJvlZkUU/
300+yOnpSWnKMP/JZqgekiMx9ssAWwW5WOk7uBwgQQ48JDUj7BNs0+X5IlxUQIyGCenDUMJq6PU3rzkX
301+EKCKEzkMA+D7Y+DjNhINSsRHyyrm5LfMo41vaEivYgwG0pmwxHZagl26VOMozLh0c0fur7QncC3A
302+oxfkdIXKtibhtUDyNJGnr8nh4dXOV2AoMry1yIImfa3EaIfHvZ0KGVzbkvXJlsPUgoII4ou0JZ5r
303+7QQcpv29w5rXdunqZK6NjazSPUpCMw4tTuvSbQrnpOhY94A8xV47Ep5r+0++vRQDKGs0QSKz91ut
304+DFbAXDg3VrqNGNqK6wjUFWFFXY9RuInYrmKCj/XlksSguwn9zfkC1BUTyzH8uAQHdfW+wfAk6gr6
305+BVEgUNeF+Nv5UPnfYhHUhe5IMvwVddF5Z63TAXXFshwiz4JwLqiLZqKOKqZuAXXdZA1mEnUNldER
306+qt/jUJ/H+jUkcgAHXwqMA8YkQTFxJecTLXEgxj5E8fCKbxCzP8UaltsF++Mk1opTyzFLF/8B/1GF
307+EjEox4qL2eb0pzrGaWHb/ss0ns6730DyrP9dRNjN8mtqhoQC7BY1qHdqN8YY8ZIfSXeKp8pHr/8J
308+yjUar/wpzrXsjxTbLZ6kicz9II0wRx4Lq7zasDbwpl5uE5TtJjIugp7iEkuYxEkYzuLGETeR4dVn
309+UTiLV8b/onayB/DwYnFHJIlAjgS//5fZlbZgrGFTUD2clxlLtUnPybS5DlBkeP0nCYsBrANCjcPy
310+7cS/ZEj47lzj3pzAiRZ5V2A6VPr/rx+d2/0WgrEXz36z8vW2+8umwUMMeKdSjK3rblbZ5rTJ0pfS
311+kWtsp8VK9kE5+MkCI/Fj77TGlzn7jF74MaYL7CwWDwjeGiRzXhjo1cELKs/UzVfLJ/QPmP0ZOW1Q
312+jusSBNxo2+fGRyz59ZOrkDLdvUUGXf9+EaQ9++/4MDOVsnyWFZfIjG5Tt32uIrcnpa7ADq7QWRBa
313+Si3RwcHWpJ1g3agxeeqieBY6Z8EW3nF6KuN39UoNdi4xXeoqTuMvdbnh1LWIMOQApa40vJrsw+Fn
314+qqPUFfVETQ0ePfXsHXDSqSviSqTd4tnJwpe6MNHgF5njv970iBI47YqvJaioQ3kRNdThx4Zm3tfK
315+2/ScA+GqsC1VvRVyZDDyTWMUA3F8jgzy6dzZtOJtFijTph1/m8sY948AgRxz2dEwjXD4ZJdBPBhA
316+L80eYwXVB29yjnZJnNhbNMJCEHS5Ap5SI+n+KxrrtuzXYnkD0Q29XFv7c1CQGqT+hdSlpg5aPnJ/
317+nUDCo2NisiD5YaSqS8yBwNEvfSJE6yJdKP1mCmjqmdGTB7mpuyJ9KJAzME9TA1ZY0S1G0VLCOuY3
318+rEuYk7eWoUBtLiQ+zr0UXu5iSmmtDJe6V1vC4XZO+FAKk8ONsdcc6IFCFgdwBt3rknVqsfUCcUr9
319+Ir5xNowOEaz/EjH/h9G8vjg7YCaytWSEmfek/WTcO8DZVhK2Uk5lDbZ2ZAyP/TFtGWEFnR3y4zoz
320+bqVnjiyVxqRv4UC7OB9qEQsD+1CE+mYzC1Yi/qnnLG2uz49dQ70zlqWBoCDZCVxqRjaHeqFmcmTV
321+5Baiph84x/eA9IsCPhqO9ebKKDykpC8ublKWtURQq7WdRC3r7Vx2aj69bUnHczvrs4ZBYXhVXylQ
322+VwHGhNmzb02PXqUx7c2SS7X84SdHtCMvGj7TicndaGCNjMeSk4vBr3wwIzRRG026J97IIK1WtOiA
323+U+AyC/BXYDHY/qrFXPKXqixYETkqcDBPc2Z5ot3mhF4vGfwP6vBNaTR9RvZcV2Uqr4w3HtGonJNW
324+XgEa92iJ9fif1XQQSlkrEUN/eifPwwkvA5fXsfcFhPqSD717AQ+KkVBMYS7mleQMHObRyCpqURTZ
325+l/Rne5kWV8/KubquxhpY7fj8Hl+NoERVeLAgw4VXMbzr/aL8W4ummIIdHiSWhSDtnKuZFepDLRyE
326+YcTkqFMM2eJF10eMKJIz5so1ZT2BY7rOezZ3jAa5DxYNzZSKvWXFM1y0aZXjVJfJ6HJq5vGmZTAE
327+rmWlo56ahzLcwunJc6VRe4kvG3I1rzPc9lTS4OHFsZwf424bFaRfmSwYEQqM1x7n/tGvpRnwuggj
328+yivEJOKp3FqATmHa1RsrV0W55Shzq3PGkTLoMLdcs90iZOWW52A6AQSwk7m1IuPr7lIot1AcjbkF
329+2ARQbl0HcPqI0Hhf1YpAVG7dwJeV5wxzKzjrfyUyodwydoe5FTssk6ag3OI1vtb31+Ki3Kqzg+1m
330+bgF5gxzd1Qq/cqgyt1gjw3rl1j3MLUf/bGVXSf1HrdzahJK+IWcIKWFR2TLE1XZwd41VAEWkb6wT
331+VAEKWO94HcDSEJ4sXrp778ZnGTyP14qQaFCDr4vcHuPplN66F5Onk9IzInAVFYGqyGAEtGeIazNo
332+i8ntvcCdjHJMzTZtT98W57gC+KLPuf2gjbZLoENYY6t3hTZNzznfRsaMQIJ2SrV2INwWzFWQYIEO
333++i13/v9tAj3ClqXsz4khlpnFTbTNh5lAazpC90JRJxmAJSbQPC84OAq4FDlcM8TebWZL8dOwHITR
334+l+BEqbUpew7JBF3K9sp0W4uZ12jXxpmmTZbGY0lbHUTOObEYY6Fu38MO2olCiaKbw5Y2VG+hhMla
335+pcFX38oiKTVvymAWdeumEr3Apgc7UB2vPe7hMelBAnpCwUmaqio54ZexMap32rNTi3vIsaxGB8q6
336+ojuFGUzoaOaWRD4YGLO54op/Iumqkf63CjWVRTH/IqJ7GTPiAIdiTLQ61CyaH4ssiO1CKGYUuUQJ
337+H6oYJNHPHTz0bZnb9MwjFtAPDyqBEAuvGEtcKjeiKO0fXIXnL+JEO4eK50N5c1pA5SBQTWRe1+e0
338+zKF4BaEkK6RR3p8lejI6wLEJfSn1QcVka2hyvK5g0aWAn2lDeXiqLR5L/6UmeDxJ6UuGY6xzu09K
339+40vagGDnx0xhLGvZmA26CHhciDSNDO0/8Gi8B3Gg1YiEKO2CZpsGFQ60uNCQegV7OdAYRjgIWm5f
340+vdA70CIn8iQEbQ4nwMpHVwcajgaS2r/1EXrMOIogwNXVlfIh2ctwYTnQLlvleMaGaQf6r8ZTIC9n
341+l+LMFA70mFwGQXNxZtDZgaZvs7pTV+Xq9suKK7WvVSYcaLgbK/0/aAR9fW8AtDWou4FJy46JIIO1
342+RSdrmRCtcjQFY1PcyRHy1zop6GUDO0zxcjRvGawckfmpI4XXMoFODt4Syt5o34ylp4BG2W17BZzo
343+1CP661eWazcHH75adCS88fc1eN3ruo1sV/iGS2vU8qQ33BM3Ctam5KVNaG1JLkN8TP9KXQQFzTCo
344+tyMXTVfAcbYKl1ZRN7e1RYZWcSmYr/rH2v4YtEnZXJfaXl1Whdjzh8OygpiF5MpPh30dBWLAD08l
345+6+VfmFkZxRKPVLCjUbLXSCadQXhXQwqJHqonqexny4qCdcWz3VnB/qY14SQvAzxRLkNycThQhpUS
346+YFLQcU406CxcRbMjS1YcOCFByXlgM1ikszEdYXaOjNzcqcDsZHFFTPWCJ9cCdf8j2gBS63qWn7Is
347+KwssGGngqULabMHumHLEypuTjnLQgtJXCZPv9UaZ3HtAjhnCYQmI7OpQhkRcXXb7wgL/epCIrvr1
348+PBHcU8rAqqx1ySDlJtl4JoG7M+3XILwn+6tidcfspz6BmwaWD7ARGAsZB0qXqUTc5SZxyFQZPOd7
349+AhjjJh0MdEdXTHleulpjAH37rA7a5tuFSzVmhWEz3J5LCxdhA9GIhuNnlgyHxGu1pIRDhPctFgRe
350+E5FcaAjezzGvvHXi7ggS2dEgPvNkgMT5+/RFdKmIkqKeR1vJmT+qDTDq/G9uzLwQEYmWdwRW6+4U
351+LtkTRKt7RylylrExphJyhvXz8uhPJFxGsE7tqc6/KDnfamseVGA482WnF128JdhHnWmcDwEHi0Ve
352+pInzVOdsY5YxoL7oZ0KdCW3Y8t/wMo3Ot2gQEnYbduCb9oZF972qAdW5agbw6XAZ6vwV4iiOEThC
353+nTlZXNhlNihEnWEVv9Ay0hEJcDn7a+om9EcLPZsVLi9oBNc9vHIHnCDpu8IgSkJdTnKaBIkMbIBS
354+TkBhUM7bAjEaEuFUgh9ME3C7QV6wwB2BhauJYfPsuonN58mnyHKuAnN/GP24shxWSpQNrtd/E/YC
355+nmkrxQfU8AZ2OGTuSv5COc/01LSaNdAqC4H+LHjhOcYmnpMaYClv+Fa76LA/Vw57WJa1Be2GZvHJ
356+kaqiOCwkdyrTQFUwPQrEZ77HlK7sUqlbquL9tnEcfgWUP4QmheckSvuE1g3qBmzWNBwWxNT3hMKV
357+jpbz8MXNrDKwpNCyQjCg0Ky4NQ39se/8zDrriRQLaVi44bqo6zNTxg2hM75EaAZPnFNLbSCCYTO7
358+Wbee189bw5sNnE2j+cx8VsK6Cs3RyYjjZ25KQ3MA39HLTvszk0JoTk2pWDnzf+ZRDM3O8eGsXfT0
359+mcF0vUChuV+s5bf2k58ZNiBCsy/QZz5FABxDM75bbJnXZ74ortAsrfszDwhgpqGZ3/INBlj5n1lU
360+hWabAOj7zJBiCc3KajUYE8mfGc/r2Uho1r7UF7X4upJRn3kUejNCsy+kUkA6gc+8vFdTa1cRQnPO
361+lQD6M7tjoZm9uYb8zMYiODTfwqprycIchEholrWuiC0IzV8+M/Fj9kBoHjeMX9e/3M+8MAs3+Qkr
362+1GT8oqMOfdpCYNApyYXm0EfqJaH3MydrPBBsFLk3t1Au0+szY9cojgnNSzV+wP6TY4ColOOUf0Nz
363+fl0VoFdFf7Ot+rRQcWGhzT4OWL3FUkxyP3MBwTec4VTLtCmTTQy+yeijJyYz6GbwB/3DijFjEvXD
364+6/odqCo4EnnpYNXm/qbfZBIG3rICVeOM2qGyaOJDhpgb35nEhdRmOuunttP9IfitLLK2x1cOXPDD
365+siC4Y4ByMiIUkM55kw1xUmH1wKoAFBVn0zYNJW4lyheQZWZQ8bbCrWCdluPbzkVTPTD2HyDluZll
366+pkGofCZgy+Nr/nxhWCBKMkwTbiFIbhM1BvPHlqADZKdOhlNCu0uDBq0jNtqMPfZV2gYnU+Zsu8hp
367+dNwdWXdWHS3s6BZqO3O9Z6jjmeyAxGX0Sh/NeLGnToPvUxHqxdZ96HCLFExGoIbjY4n5HwR+n54a
368+tcsCbjyeZ++pMij+k4j9ixsrPlyNwvEjWLMImEW69ocVQEzEMYZeH6I4P3J/laLa0njS8ZjEHeOb
369+Kc7j9Cw/SHjLaxHnEl9XPN7zApk9dEdUxYq7ZW7xKaQZwSGMmmZ4+P2cZUfS3N/3rfgt7u7JTGoq
370+5rAUEZ6zo56bZreH8URnHCTNBJhAgU1zKmIjODG6QXAYv5rmvFi1s7qVCGkeSdNsqb+uMOUOooY1
371+za9sm3VWltKLJQjkYZq9n+Wwj5Yf2yBpBqBGW+kgVLBxObnlnApQxKNvBNhIwB7DGYqcm1qmNM+i
372+nZOVhyLp+Fq47H8BcczRU8UWJyI/lhZ4Xxv/YFPrB9hXjJsaFxovJr90OqQ0ZmvbrN4al83IAS3t
373+j7QgGmhvxwW2VA3wR7x5M9UwYNwfc9uu2/QpR4OVj52pelKIxVJFzR31CRwTj2Vtz+QI497UMBt/
374+3vpndzYEHCWhK4tzwMJbN8SCY0EjMIpH798P1XITKI4aOtcRQ512sBmjiaU71svFvxaPXSrDICQI
375+7ph5h8Cjw28419OfvB/aa9QMRx5dfiM9mRjc3UvNdewMSjEefYbKQbCQgZ8wx831ylcPdFiWQLXx
376+CdUNtZU8lh/fdWFIMJNAw5HZwZVv6VyfuC8W1e6H8e1R92Nmarj/TlGwMwe7j+XX0CDYWnq5J9Ef
377+oCPfY26yS+8zrnDsljFGpy2sUBGsjQ1xgTLiNGQQPKMUOKuZkhmwx20Z7UhlSOjSSIxUwAZtwVMl
378+yqCfkr2xDKMDND6w+fQB1GBiTjxCv6CtMnTnjPOyxOPej/uTtRlU8UBihnfD75+T1nhDOwewNhtV
379+VjnWZM5nM0RFVJtlCVywYrUBMQn+a2cAmr2+LtjbZVsEeKCt6IU1b+Mox3NvI2DMtCsqNet0c2EZ
380+C9gd4r33QoTylxDlMYlEW75pDHRBhCARlQD8Z/4SedZYVJ0LaPk/CJ1Z09m8iYZiofPQt0eXb0KQ
381+W+ewjPETFe4T8ppBA3k7Qv4kzlYTt1tcC8GcEknQwZRxPj1MOK18pL7MBuCbrDlrXUM5F1i/tD3L
382+9n9dYwsh+lZhdaLFNHTVlAfYxt1AnnLkGBU03whR+5yz7LFNRJ8hqOyMFZF9zvh+dGZoowNBCNbF
383+cSXkuxO06xinUlEmhPm8I3AFc9jcL6+FWrxfFsEQ1Z1fYifuT0P4NaBK8BfU57tK8jOApUqlZCtO
384+ETEeXZgxK5HresywXqiojDkKK+i2wjCETCnAg8akPRsk1+CoJjNYoOWqFwnNFp4fw8t+wKIQrDqx
385+2XqHG3CizK5/MUbfSYv69UrCy7qI2uSsZ0832D/6nb0BcjOxi3/IWLQhBismIubIJAsHPOc456sb
386+270q3K3XmP0yQ67Zg6cSjsK5e7oJ6IuZgyKnLpqh1/3cY/dtyfB2xDpT/su9hHalUUUHJReu12Vu
387+BvMikoTAs7Su9CJ7CNlhMKJVUfYmjiKPnYNcI/QyDeRUFRODF6Xurv2dFOcfMH679conNopgBawu
388+SjzkHf/+snfc/2jixg0WFiKuixsEp61AXk+8ATIsTxX1G7e3MxpPRn8nTiKGOdvTCwO+dlz/U4Pl
389+cKmyoLRLYZDUAFRhOzvTmtb9JRZcO+jIOLuNMI6TmaJsx/HXPVdhW1empSu1+9lP4/VuusatfHE9
390+kPM2ei0xDF6A1mnzipLj678usvpo+twc7jWYsJDVrkbm0N/InGk/tNHhunD6Jb7EDlQYtx+kmQ9K
391+Ys8Apqn1wLaX61aRabXWCQH8R4QLtaP8wmkrRkQO5qT09s5EkCdxjF1cUeu09bVNSjTc2jJfdWF4
392+6Knlikx+FSC2X3xlk8ZUOlT5BXRS1cPmFXEW8TioYb5JmrYPvpqXngaoO7DJDHJFylNMtZn3+awM
393+aYz1X1Vuhw78zHZ+6yVtakTzyba2IYUDabGPXHF9HWRTg5oQNG8RU6EB1XcJ6JKy0BiyAA1+bY1F
394+HBNVhQKmLm7d1ywKahO1XqJrlrn5YEB8TrodjbeB/wjd4Ds+w6OJolwwVPJqruHLxG+E0Qnclojo
395+OcuGjjox9IBJxdDZWFIvA8mHqyh5E14SufBLD/+C+OEFMyB+AVtNxAqCQjo9/BYj5g9BBSJjv4Bl
396+dnFI8RoJjQ3Bw2bTjBFHnHIilvZkz2GkFFttW/sulLsIJHw448MNCRk5iZXT4qv87H/q+oZQH762
397+ZX6MLwPZlIDnef54SSdoRxRaZbkGySLdkzsnaPp+SsP0BLGDvkHgmzRKJmu6kMZQZ0SR+dcll/4H
398+UehYIr2r8XlsY+25KScDghrGShsTP1qjdiAh3aCm1eL6uPwVLSzYioQI3zL95JjTEjaWyg9cF/XG
399+bFHfw2Y/xaQPv0nFDXf2E0R8e6Z+AvtMATTjDWmTrQaOQiZJXjlz9L9/NZAWnV9oWVZDxP9HVjWn
400+vZ2sQBIlcym0ryMtUsJlIR6OCTNY5b0FS0JB6WZUA+Lod7Q9YkEBADlN0XHfg+zfKQIDgJ85yQkM
401+Z6zpqaJybjg5iOKAazDmMi9mCbojpwqH2YrLIz2WQAm73iCDW3xcDhgqiXyMOCtkFWVVl02vUV42
402+GbY5PSFc4ovn/+Qs+wuLLAgfHllaL73R1lyHvXpjhPeyaEQ2zBZdfNiQlOIqAvOoNjI9TCg47/6M
403+No0oFei//zM3Izv53R+Rsd2OLWje6pUMLYT83iT3rN51jH/sSzAUFdWTcbSZzATxkhQBU9YVIHwn
404+iFwOg+FcR+Z2SRmdZgADMU7GuLyePTjwmXWrIWrAa9igOoUw4mNLin6FedqC3p5kYzLMUs8PLG8o
405+ARlnr6Q+w6jTbMbqbpIkCHoX930++mBCs1G4OX0MlvwKz6/78aZQjZnsFFIncWc8G5KujizUhWp6
406+ldqVOgJKg8paruYpEb+lNCAOPf4F9HrJqRLW4FkAlg4Phmzg0wjSBxt1qUWIdC8La1lP5JWGIhN9
407+gm4lYSeWZgIA8wE5TsI47mfc0EnGAXIy+dLNZwADDO6C9CjNDwsm2vcT2Uch2jIYMg8ZHSQkpX5N
408+DoAb05mLsXpezPfp2jx5y7RueSq8wFB4xsrzWsZbG3Js6rYAsFxZaFTwJQIcjYlPhQCtpmkzpE2i
409+qIUX+EESSghZ4DEqjA0nPirTREq0B4QdZn4SX4bzKHlKd+HW1fYZ+Y1hO/1Pu3AxYtjWl96eYXIS
410+yI2Q6DEkyKt5zLtjnW2I6TBr5oPGwJ72fCXYoDaQQpBy+YtZ8NHHWU4IfciY5Wpz3pafAzI9ZgNg
411+lga20rQKjswvqYSn8bTzBd15Xc9wsflbRiKvWyeKGO+h13CUez204FuyKl3SeQ3VyrsSVKtJLcPb
412+iuZqmrPDprP2IHqJe58sqOWNWEKdyiQoc4bhyDq/oG9QKNp7PsbjHgQi1eDhXq3DWUzUxE3tfmSf
413+dTglkPTxjbPlSYyVnHVKT+a97BRhWYqcYXcwOye3qP9xBaWFpr84qfFvxdJjjz+rrnWwfaMYRJAY
414+vTfz2fthmhiIaSCy9GDINllZYmqjqfEP7O79Ob8bPxVoqJoXaYIHoA601KZLz2I6YRMIRfjrRy7M
415+/3ysc8z/J85LfyjKez8it8orhQ74hUJJGrVZbqjXosPEdA1LJsMhGk1VNjEccs9E07BZqTtQ17IR
416+LPAv+EcXeKJlBKMObHRUMfjIUi2PQlSLZDW1rDwZYT0aoPWmZj4PLgaV3nf8B3cLbOZXNqF68QET
417+mxYK45lsSjbRTVuDzOPzGBMxuxRGAYCE5Ke3RgBkBCT9cGhJqcIH2g7+xDDLSU9t+HhlvJnyvff1
418+3fT0PPII/TQbeXbZrrY8kzc8rqqH9QnMZ6lvtC3ND2FcRvcwNQyFYupUkSrH5PtQbksnnFH/EYcL
419+lrOczUtIDL1yDOM1/vlqH96+Q8XjvcLAP52CnnLKYIalugwx37EGRtgMPco8NYTI4Iutr2ZDma56
420+DgZofeXkYaaOwLJ6Dhw+cQIV7HIrX1cay6zwEKlsblXc2yT5KLnqSnDiIjm9F+iKjWU8lfd3zDBF
421+Rom9BIgiqR/rQyVZ+kLYjxhTkYkiM/wXMIll51zLJm/JCgf3iIHzC2ThWqj4Gey2wAc6LPToX38f
422+YWkRmS3+MoVgAb4VB+DEpdYdBaknyEOLFrxvl/DIL1uQapnB1rLYwSnATssIdnTXkPotzrTZ2Xtq
423+Z3kVSaRQQzt4rhPfpjPLVbHbs0UefqF6+1/y8CjIYsjtpi5Od3rD/3mND+1TIQi/x9j/+g2HZ334
424+8C93Bxw/A1pmVF3hqmals0V6gOdCbS5MJ/Pb//mnvqha+0FrhXxieren2tbJoGk9av5/1jEt4i/x
425+iacUMoph19PDFATiCoamtn+SQiYCHsvLlaABMEIcz5mby7iCPXWZAwkLolt4AhFw8LODOt2zOj4D
426+6eNimo1RyITnlzIbbPe0Cj7SjCkftUgM6onj9bdv4ibrao80LBxfs8atz5iWPE4B5s/INgaaTvhN
427+CGi4Z3PQY+s/0j3Fzb+DfkqZOANHMjAqT9MY6tM0vkqoMyfdtJW1DMOSTiav1NI7AnAxig/r8oR0
428+XFkxpHjP6Y8OkleUXnNFcrqXQ7kO/IBSeCQ+4Q2SAmhK7x43a5aA2pJuQ6k9kz5s3gO6dQfty7LR
429+9LHHGMZpfcb5xpWSFi3vVjIwLpP7BLBXA2ENcsJ05Y2sGapfQa5ZJ6/4gJ70sSS/pT+m+OHUMnGD
430+rUu1ZZgVUWfvI6Fth/+HSt3cIx0J+SBOu9JBXez30rwh1f/V/keRun4hGo/oz1YPcRepX6DaHaIV
431+EISfT3Cr3+YIidZ1EF1Hd08BoYhnwHiJe2RPFaEl4aLkxiaulEYapriwhIh9Wiex2IIZO5RtXud/
432+RvOReEMdouopmUcFGcUSAbVbEx1B6uvaj3/dFmFWg3SFKiLijP6D+BbQq0aHVOw0gfhP4PK5PAl2
433+wHa4F7M0xWR1Br6TrNywzGnZgUQ0qcRGJJthuhJW2oscCK3xCU49kYTSS6LirzYcu5z3L0oe6pWn
434+9HGsfJnI3ZAywMZlY8iR/ranFEpieDzrlUbcRhcHhZLQhxgWICErAMDVeO4oNIjvgZDM6jBuhITd
435+beIg47vQagjCC525jNqG6FijFK/pYa5CksKFUl+o6OxRjazks0q/O23fMkKo7S972yrMCwg6HPZf
436+j2DO4zbZvn1P+tod1txFsQyfAY68xV1ZuQaxVgn/+8Je4X4w5HVUABbpaRm64rhYfVbQ7AmWErYS
437+X7bSHAx1oVHCKfhdSazEff8Unh/XoVo6L04Jj4AmUmAo3Hew1ySbUcTaHq7o5indja6Z4mNnHzv0
438+3QBq03etOVDZCaP0AMyQjNGNXQ3ibvsnpZ7Gni+qQG4yq+lJuZTcAhpAr78IK6xkD+2dQ1PfgjxS
439+KFdpePlvQvEJLrAyhacnjz4MPeVCjFxySnKyoJRiebDEQ1qFGbh4as05k5Vap68cAK5J2shYrank
440+uQUSzyAPqhpRDLqc1abonpLY8zMYYUjUhx1RP3I6dcidjMUj+RVZ6WqWqOzUbqCKjTbjkZJFz6e8
441+vVU8e84wV45siJl++C45CEpZPrYl1jZTzA0ujIkAQLEC9KRBonQ+PpspDf8Z3Dkpu/33yJ6y/fua
442+pPaIUC0MaNZJ6R5l+CAjLvCWNDVmb1tFa6MntHbVQ+so1V02DUn8ZtL2impmKGLAqoKSlcQgMl30
443+0VUsiUIXQQJ56pBBbGJZLnZwTL4olTxcdf/c/2xE/BOq9dp00VksyndphhOBwsRKffom6qgRdPhC
444+xfBt3h7XvQ3Xios36ArVhSvGCeMc2TL5EDPrn/wmh1xA77YqV/VNdIoL/cuIgz+x8VJPdOwoC4yk
445+qwUUC/DcLSp7rwyOcVQhoPlEsuTgeNLiAA7Kr71HKERwDN/Om54wCAyExjOxxFRmEoEhS05kQw/u
446+cgsEAo2oihrgbAUJEMOCzHCNbvTv//mk6JknEaJiYuTOOZzvdMrDRAraeKel70ipQ1zk8iK8I2AX
447+3qgituA+QP+QlWVJpQG50rpQpTWb0sSaJlEewzJ2qlm473pBP8Y8ILM1MZGwVI46uheChh/gD3fX
448+AIRY6BihiUrXpagqcxe3s1C1aDSinfU17+hMXezPgP68sWwUlMXBA4iDGnlHVwMxkwGAo1UEUdjs
449+uLmvyvtn2cqsdnpob3P1EPZBnB6Md9dXC+UziV9QIzxRhCAOCyylc4gMsykU7S6iC+R6KxtXN4rj
450+wAOB2m2FZCfadA5LoRGvTGR9OLDL6Ra/1UUosK0u2XEa5l9vcmabTlrU1USpgvKOOTlYPtL6ADZk
451+YcFIgapdd3+tjxndKBRKu5GguhKyU/EN2GTVsn1sp4ORTZ1NtXZxd3BSNygHi8c67xvRXWmEiI6u
452+CtphxRr6x3ux8rWSVMZR61CdEQRZCKzW5216L32UWsC3Qo2c1f0PSLvcU7cqGcUEFwe1nsEcDfVH
453+y2XXI9OMs2XghfbzP0SI6yhpFYdNC7eH36Ej8v6qcWwWiYDhT1UN0/j5L6hbtuUq91ie1EpvvuQL
454+DEfZsam7n3wBlsj+BsBmYbTPIjY6rdF/HXF+NrNlQh9817JFFBUcDhSulFMQnxaG40B/ixHJVXGo
455+peD0NYWEwfcFHJP3l5KMUUXRxPFyYh3LS1OPvC98qfz4IwhqRU8JpESQ8bwgK7Os56FPPq3bVO2M
456+XuML24dWafEcDZI+zcnVp509Xz4qwLnK/yCFIDVBVo1D5XkhBM+xpCUjW+F23FHvh7mfxMqGplPj
457+dgeR6HTIMOJMSS9K3rnWuQPv+bfGcwGRg2WwuCRGAgmfmGrxd4/1bxwDECu12iWoFjWtQx78gtRY
458+dQ0SW90ex/oucH5h8WDcg16x3RfgA2cy4jFV+MpuwyNLAHugpUZ6KQObp0lJSeFqCAS2YN0V1LsU
459+GYzYaveEFCD646aNJXTJZhDCgw0U+/qkpVDFVeshwalTczpdbk6MJQKbZUbbWePe/61N78cww+m9
460+dWsYbhNJBrAwctmined7lZ0WN1x8rQcEjYmGHebjLWlqCf2kN7A20AM1FsnfEZJcu/Sok2N+eBcK
461+rPs/2t9j2KChr4L9Ez/xQmSF4qgZmO/zgI9LICR5cURg0E2CrTX+kr9OtR07vtbp7UpXJJE0zHzB
462+/xe6y8ZqUyH4i6m55+gSqEfwfmE/76hWUgF7i/vOf061NBjHqEGCp1Kxh6wOboL22/JGD0PZrj6W
463+a9lYcW7ZfnLGjT8LEl28VhkJawKJ1M/Adynh/vOH/n8aQNBvdQrB0snr6ElToAyP8xkLrqABmyd/
464+drAZwL3MwQF9BEOLOXTA5o3cJg+PCMPGP8JENKzzVGHb6005qM/slHWRwuGKTL5w7OrfDLvReR4c
465+t0epB+yVA7r/4rPpwie0/FQKbUksq0W25KG5TjKPNNg//vTnhJgUflm/4RYVgSFlGCFDKjY9P/3o
466+AYYRSkjYYgrge6lhJWIreXfJfeajFK4o7V2w0z8rwDtL+P1AQ8tlPPHvEJO/Rf7Ak/L+JEWjkIXb
467+s0YJW9ecg2Umu0Q4A1+PpiVLSvJPntC+I9IIuuCuhwVgIlpAqMWtzLZbvjgPso+LtX3v8g2+zY6v
468+r0j5NBvwkVrXUu5m3IYwd3OL8FS5ie4LwjSL2Jz3gIM0BekHgazMKvKQtSQHEUl2U4VFCh8hPFWI
469+xBVCPjTwTmGqUYS3EQPqS8OV0Us9qfsqARipg6rDWQBtqCwfYpHAAYoKLoIwgGkUMkeK6wRZR0FV
470+R5zETxNWUFRIwb1S0C0hzpywMt4zTNaIvAHkFLSTND3onpI/cYNgCpUnUaZvAvZGkHkjxsniiaUo
471+yZnClW3+wiqRlbeFpasWrywwLIj1bw23WdMw98OMClBqTnLnchoZ0+wpzS7SDIxmwUoJSCkOJ4Xw
472+ZwTdM2IhMCRGabYo4ckMUkRxZZnesIZyYTItJRQikRkdlByJ/QqISELw8OSoMx51zbqo4ZCGtd0G
473+/mpqRj6oFlMX2xjgWSoIJZ8vcWDYxJsdLyTTxahPAg5brMw+I8gCSEJf5jxa4c4qPC8V/prCMJy5
474+yUdq/AwKgffEWk5sron9xzA0sE8j0uWC/SAJgR2xRrotZ/84EUdT4W0haHPUGIgc6WC+5PJ8QLwe
475+UsFDanZIzgsLAq2eXf1dx9zgjgBLb4Q0CL5uOJIfWtyvbbxCC6L+HqZsC6l/UaeQXS9Q183ikyEe
476+c4JypReBD+KnPVeP33h8PJgfbEI/TonF8c9dfw1Boy9ht69wjEQ09bK9Nc2ObI+VrTe7tqBkurPR
477+GL9hOQNRSPgjk0SgMuqsHB/HqU9lDpR1bFHimeq+pYa6SwZUiwge0tYPTccdzjFb94hW81hmopo1
478+wdOY8a2ZSdjXuS/ET/te8mwVvTWHiuYIP0z2g0EUUZ1D368qkGgxVxeE6GDq26dt+Lh0Df09/K3W
479++MrR3H4D+gm8D6C4/K29E1Qhp42bNpD/LDicRf6nVXSpNCfIO/ZH+/9uq1FYmQLkm2jthxYncD3O
480+K/qfQ8wPN5Zi6WuIqDydNWuYeArAOfQbKNYZgoRtk+v5IpDUxjyqSzVuvcALtZC/BKa1aTLzRPPN
481+Kdo41kYk0RxIe7dd3pRaWmsuMY5LIv2hsJtqZUpw/mopKx5BfNMdRZ8jHMsNBe3XfbyutLerVzD7
482+/cPkQdYIolryvwhUjOdQGshdbE4AfkTcsFqpVyaGK8dAP0I7Xe8honRNcGumDP/tspoZFYZya3pQ
483+s/Y0qOYALLFLr/EuxbFve6B7k1LO2yy+2+7haIa4rbloJxXNQG0jhrapdR/LgnYP5Ex7Skrt/WAZ
484+IjdPK//9bWOsPftvFUDJAlSle2WBtJRG3CVy95IIy/wOGHhEW9Eg2HN1A4Gbt8fODzi6hyk9bLg+
485+IdzDADJFhBC8+3DsRmA5zf1pyNMuIah/hVCLvM56bvaY2ROOe60lDXoP8B7XPPFkHI6O+xDyTNb+
486+yz5S7plmHJ7LeDzxL06Na25fnf+ZoNwwDuOW48D8ap++whxqT4BDcOjHGF5JfQoennz9jVABJP0q
487+5ymQKC1wgMaSoD5Joh5J3iJJ9CHJmkdy40gQ3UaSe5GsK5IjRYLiRJJyiCQaOSTnUkhMdJDEFSQA
488+QTIbSOolkBABJDP/CKUfGfAjv/YRLH3kaOQjLnsEXfUIdx45WXkEmUcEPXLUIyTskUX4iDE+8uxl
489+rq/if1UDq8XBitSwcibWz1hPOlaEZEWDsqJe1rialXJnPQatLkgrdVoXUus71qrptTayVZBZ1DIL
490+aWbZmTXQrERHmv2GQhpuKljD7cCucCz3PZEuab4guJlPFA2ZamSp96ua6DUg4DwmDh/o0WtueNcB
491+EUAjfETx1PxTvTqA6emSweZj4FrAJMKxk6ceehx6F2+hGvaYQbUAjaEl2YptzagWMTYpQI1VM7H6
492+BVY9CV23CqiV3KxkYqVVB/EFisONz99WP9LpX+g+2F/Z2AwOn2CtIAoygsPGgWe8CBp0ErJjxOJl
493+g09OVWEyfn+Z2BKfBdSV6lJJCjMMUzAt6eNJ1TRJd+G7BK8WjW8WLVd0s6JaFf1HRblI0SuKmh4V
494+dmSqAx9HoWIjzTCQXJRs/A5sbMGcKsQoMOZ4MyZKQUOCv4vQKwS0PtSdh0QOEKuhbotdZ2GeEvK2
495+kYK1wZwEh4bznTktdRvDJpaPw1y4tznxqAqidFM8UAgUKSk0MBMdENPrg8r85zf25OOpZ+c7nTxA
496+TkmcL9SbTG0qr/nrNLlHUy/yZj72X4Yh7nfo/PzdrrqhNBFYAfYVoadAGJUg5EqNc4MiPgxKtPVY
497+1t3fJ+Ct+bHsFYNADWAEXGb9UAy8KDwZCGsS/Ao26lrCh3kPdyhcPnVdes8p3pDAuZd+3RrlIfMS
498+DfT/9j4gDjif/DpNm9A3+H+OPgky4vlJ2md78mOonGUz60eKpEFMUDzMwMjps9S1d/XHBKhJhTBv
499+fNMdMq/N1HWlX6K+KqboYYM5FFz0fOgepKtPmvo/69K9/xVgCLIMq0jNvYKjWYe4Bg75aFLffyzg
500+MV7uoUfrGWdm+wMzyhVbh8ZKLVWCVksP3RN0qUii2mi4pwBOZzjRXl4qH68Waz8WFGmHZp67SZNA
501+d3AsgYHwJVVE/VBjLmsIjnBKa8M5f4qprK8hRoZfvPdzQmKdSnG5rrobqukOYkxsaDSnXjVCunhL
502+SHO0GZFo1V5kR0M0+EZW4vhy7VXISOAt0t1xG5xL08JrwlVqcvtAarGmNxrDygH8LONE6/qkaIpM
503+KXZBX4Olupkhmcp3mZ5E+/d5lUJKr38NpfHf+ZyELcdFW9Nn83+QFiru/OP3GvoldSp1K7LDG2+W
504+FZP+DxwU2AJ0n6YNyfUFkz2Xy78rq7gc3uZDfEqx/ufK1sKz0Vs2aG3xINdvG63FyhX7+0GyxV+h
505+2P6on3/fETVMZIdB1g5vGk9fm+XxKaq5C9jQK9rT1lkykapPE6pcLrr3/KevpxbtI/i0xCSefyBd
506+VlZOvBv2qOLTLtdcfe+WxaDwWH8Icq16q7EfNvqEgZh3SLDiDxJV+MGP3Mw47j/L5u0PtUcCKh3u
507+VDCQZBAnHQAAxsDPRP4Bqri4vWyE/FOmlDQDb9Svhmyym+w+gtmyd8+MSAQAgAAAACBvB24EcQR9
508+a2lmlp+8nr/vl82S02mjTamfuyOamd0m92Q1u0unXYiKrs/njcm02fRU0cz+0mejTrGxdeL//2Om
509+rsXL/TNDS57Nzp+sVhvZOfHtYTKrJSv2XF5b/nw8SyEyqg+1IJSMMiSAkDKUUYZILmgAlpUMEisK
510+kvzNZUvD51PvVb5VR77OS0bFN1wSJKmL2mgwgWUlI0NyQQwyypCHpyiwJtDJU45X35fBAwOSO6Qp
511+QIgLuiCNAisZqXEgS0quZDUYM2CAjOQwhsV0fFiHIJHIvzwo4XhQIAGFHkBDUcFBgWW1A0vGOBnO
512+hCVjExjXcTbCkrFO4oSwSCTupFxAPCghyYgRPMkMKScjKRZSQlIylsCAFAsDmiFNTjKmgg1egyMn
513+Fk4s5CQz4STCiYmaiFyQAZIEKBAPuBCRjGVosHEACgIMjg7/AvyD4i+o5BHJmAEFBjQYzAGrwWSK
514+hAeZtACSsYoJIBnLRACJUMDk/MEQ6icLAJDRQLnA4Co4QEjOgI6MtXQIgQEpLoRoYIWFRAZLDTpG
515+LDYdIws6MpbAJdNAc0EYNhoMCzQUrWnAcjFBg11QRh8NCRJMXGAwIBBQoHRAMRITFMukCbMDGygc
516+QFDYsMHiPkhQASEh4UCJlg8cHw3yYRf0GCAYKSgtKx8LMPzJI0PaaADAhmZQOqBUVFRUhFSMhMAC
517+LmwgiKAIuUBBERLBQssFChEKCpELovAgoicSNjxsYmKiwkPKBQEXJDIxcUETF4QAAYKLCASYtKx0
518+aEgECy0XJITYSNnIaElLYqjgSZqAMCEBk4oKGBUXxCFFJUOFCichMCCmQEoFCBOKlJCM2YaRjptA
519+iZCx1uhQIAISjox56JXQsdAgIzhUFkRERRZERFwQCJCTlpVLiUcFBwpWVi5IgpOBgYQFGBWQkwg+
520+IBkDDQ9myWCArCRAoTGhEgHDRYgBHRg2ISgcCGy0bC6s8VgPDckEjJAPCggZEpvMg3uAAcAdg86B
521+DcRYoPIgYxiFkOGRQMidgwQhxRJcXNAFXRYA4M5AiVPgAQN8aIAbAiIYoEQBCjxkXGAsPiyi4gIh
522+E8Iq3E2w4CEDXlCFDskdBRUJjWxQ4QAQDAmNyMgNmxEDMhQHLjhchw6cCNYBcbAYGAYcLjAMiHBA
523+oXPhcAdYSAlgUBggAQ4ZKiMHNnATooGQ6WhKTu6COhQkj4u4kJBwI0IKimHJg4KywqGSwcOEAZBF
524+GSJNAVQqMEAy1hIxgYA0oAMlA2E1mMzFh467oAQQVoNJkEY6DgOhYkHHyEXQ2OaDxSUHq8EQ4OBk
525+LdNAY8ACBDiBoflw2VhciQezOAcSG4+Mx2owCKSRjksg/kBieKwGYxRCNPCChQfmYil0M5ZCSIAU
526+AEAmFUjJGCYlRAWEAoEEvaALSlFZcEEXhKHzMeFUPrxBPsx7wQmK+XV82MUmBcX84gTlggbYpKBY
527+X8eHvXZ82F+coFhLiIUGDgQ2MCw48BwkDQg4gKPDBM2EhD4aLIHHT1xosAmP1WA+XGgBccLi4STl
528+ZIUDysnIh5MTCRwoIIhAAwYQKNAiErEy4kGEJUUkhIKDyAqKSMgFECciBkJIRFQuiHBEHnhYR6TA
529+SoRKCkjEBQ4gIDYEHKgIgQJiAIGVExAQJCMXQCJIOEZEQEYoRCQQ0YItHEJYUDpEQi6IiHiQcEEh
530+F0A6QiQshNCIFrQgorHCIKMSEeKRLgiCApMLAqFh0WAQgREQWuIxkgGBDcVdnOSKhYoHmAIoETL2
531+IAJngGvBlZWUCJ0qIKuZ0KFAwuCxDig0DPwFYaDQlRUWA66kZaVDC5jcBVxQ0rJSEqHgUsFBAoE0
532+YXZBKxMsGQMhwUKDsUzSXGBwGA8LDSaB5gKDQwgWGowE9ZDwaCngAxGQMBCCgwQCFCzIbAEU65BZ
533+sIL6YAj9gCmxwAABPfAcIRI+MGwsClDg4R4eCjiQmA1IxoYBDqSpKPjYuKAMxgGPSxBWg1nd0HEQ
534+VoOJsKEABeoTEzoelEQgQCkuOjJkpJRsPCi0BmMOUJrDQ4EENFJOQmDAiY0mYx8aFDA5DBgHq8Fg
535+WN7iGlA4WA0mwwGBxW0qEmwuYIxosHAxQYMpaBCUFQoWGgwC+mgwipMFAMgkwFgQExcaTEIBk0PQ
536+m7GJ24yt9IUJBx0aTLKQyGAgKFB8FDChIOHofBj4wLC5oAwGHHgOAhbsYyKAmLRsfDzQqMCAgA8h
537+MhgfClgyGAp0H7NRwZLBoABCowIDRRWJCwRdoCOE4yQMHEgAI0SFgjsQANjwIIOggwkmQbCoRDJ4
538+CBKZselAsQuiEIKSkMPAOkiHBqPkQcqGljy4sGRwA1JAh+aCJAoU0GCEgkXEBQQFFBEhIRkHVERA
539++I8EERUb+II00wAExgRHlmC6IKCAEXGxcEkHVmJAhiOCw8l1yKjQcSoKUBrgRMUAFxghFQ4+Llgw
540+XNAFXdAFWVCILLigDQcucICSIIJDE+AOHCw4cTARHxct6YIqTJCQkKOiOccigYED+9BwuMBY+UDy
541+nIMSAw8yPDojDzIfDCokUkJCC3IEu5ycm7W5k7kRpy8dt7FrMtbbT8ZdqZyO+w/ZULnrcJkbcfr+
542+7Puvu9q2t9k3IWavK7NnQuxGG3UoREbtoZYKKyv8ZIhTiJiMvmnR0bPJc9dM/HRP2HzZaMnuvAwt
543+z1GnTNE36al2vk81ml7iTW3ya8z0NN+/TXh+54hT/pbH2+b1h+2mj5tDTmt+6JjWvJ/d1NyU/xjx
544+/p+Toadqn/thmhsn2cxNmdfcvw/7jdmQvzMTv1G4xG9+uulQMzHioH/2Laffa+ud5Sd8T/eX7g3/
545+Otmfoab3y1XM9N7Iy8m+Oc+U071nwv9O+Zr0uzf5zD/pu6V9PvPcs/6035d3fKaW+FvPGhN/ow3f
546+51l64rdL/f3se2aspnrGn/rbL9PeLC35sb8z3uTfaKOvqb899TfiePJv9PTf5e9+Kc3RJhHNq3uT
547+0xxt+Cyped9bJjVHm9L9blR1/KTmpe+mtpb81tyczb3zcvVTzfqp62PzNde0a87mbe7mqHOuye7n
548+vp3+OBnnvf95Onxv1+TeiNPen3YxKeKZWRtySu+/0rdD5jQzDsCn15Ru+PmovvGr7z9jykvDhJrS
549+OxVxLg3dNP/vdpPbmJdbPfW80ZH1ny2ZN9qwWrbrd9dppuuut2bk3NZP3Y2ev/JUT92u3LmauBN3
550+918fo/N/d/L+Pu9txv/HT+Zdiee+6NbW6I02ep/Quw5PW/35LKV3aWr1Rhts7MTe1e2ImZp8p+bt
551+Xbyp7R79ny+563maWWui/X9icvdzTX6ffJHt0xLTb3My+fL59D4h5uEe2m40GWbuYWIyvDUMQLUb
552+sust45v/v3YydE+2++rZ6MmRvz3frnPN/NJtI45ta9f3sTc+urJnOnqataXWLm61XT1Ojppozr/Z
553+qdESa6P3pzMe7tue2u4mTWxVt022z0U7S0yqjTiemt34Zohp1d3sMLF24d5b31lnau6Ute2H2nbG
554+mVwPLb3WOSb729nuU55cf/iq62bL6bXRxg67mZc5sS17sm206c5025r6tvtyuxZTXy1mPnWb+Oq8
555+zRhTbqONlvurbubl/z9rytLfdN4208NtxMnlTbpdmJx2G21SO/G29napuvJ7Xtpa7O1L3NuoU53c
556+vbqM/Ydm/Mm3UYiMQiTpoCBBA3o2acnzWXed0UwzcSa/T7vb6dmT2ibO5uV+M+PE2Z74yp3VEu/s
557+P3E22pimPm83+1215OfZvLdpx2aLnM5fX7PL58fv9v9vTH6dbN3X/x8x+Z32b2qq++Wf55m9p8vO
558+30t+5/a765781M72NpuTX6km7vGaIW8bbqNt+nNMtpf7jLdm/wm1bSs5EXU7IdYi26fZY+rs6n7P
559+68eE2Gnx+jF702Gp+rv1mfkmzS5F/WX9/19Lhtn1+ciNmvouGz2lV5ksG20609c5evalWesmTUuW
560+vQmzESfP0V3NLC9xdjVarh/j7rX3udmmRZzi87vrbORe09RPXX+omG1mmMzcxnfJS399t//fMqE2
561+2mRy9HLn79M040uoXd4bnpAt2RJxStuys+49db0l2nQ/+uWrY1cXn3Zj13EzFiN6lAsby4+rsRAb
562+680REcexWi2R89CRC61PFRcvmdWbX5/KRa7/R7TZ2sdFxPEtR0e0acfS8satRcTZwu3txfLkZazV
563+On1NxsJkRJvKZExGxKnE8kZE1OlLfMoXldP/DNHuMTvPljVxLYcVG7kOi5EXfxEFoHKRF9HDaIPJ
564+i5oWEeexF8tTEW3qWrEU63aV2bkRPZ3EDf6pYRoaHh7i4eEhIhoaGv79/f35+fn5+a3f/f3f3Rki
565+jqGh4Rm+4T53sjeyX9oh7jce+uEhoiGia+edn/fp+fn5+eXfbV79Zj5vppkl5rUm5k82xzSuxTz9
566+z180rjwu1Ctt49a9T3qshzi8x7XHy6V8nZivK6+auw5tuvYK0/ZeXmXllbY+eOjpbGWe4Sa/ljVh
567+7Rdi6aMNImddXdqhjV0t6um/syrmoae4GRU5U+/4LZnVHjXV/gw98wvTu7E/s7K7rzdb/7930yPO
568+p1dmfTPzWrq7ptevW95vtmF7amoh2hRbfvPq/5bes2on2mxhLZ7ep2dxltud4Tmjo7MjzvMjDn+l
569+Lv+jJTu24ydxGz1paLOld3yHOHzHtdel186Y7I5TV9ohTv/+Iw7nuyNObWd3vXXdH+I4nz8fryPO
570+amniQ5ys7uwsbbTJRnfU+Xw0n401t7nTNqppI44fv3qxZ9rSVa/etGhTvKlfqreZZ6a1eq75t19s
571+6etW/fSUq58TcTgLbxVveb8WEW3qj//KmX+Pkf/rVF2vMY3fC2391BON2VKZU1MX+m5al99ts/u/
572+FZridV8jDqPy/q4jjta66/P6W2nvKtob4682pr2/IU419malaqvjf31u9zPu/+8nLD1k5v90iDhZ
573+7ovFluX+eOmreJb1x7mK1qmF6632ylnLiziVmfz/bkmrsjFpJdqxo9lWt7sm96t7HvP1eVr0sKWv
574+m1miZ4vVEHvN3zQdrRlNVesvaaU2576ZKeLU77a2d2s1vqJimmVtGudffsr9ddxMxFlLWb3Y3lis
575+ncqnija1p/mM6KpmV7i2V753uaZmV2+p3z0VNV25d7Wy2X3a1ZZq7j2q2SGOo5c/5l8nZ8K7vNxF
576+xMlKrzz111uzLPTaTq/m4z818/ps1bXtlF6K/ImciTjl7cXX6dxqSb3cvPF+rbowd78VMSnaeOo6
577+TF0zNa3V0mzcvTdDHdds+9ukyCSkUjfZJit/22TltpasTo97Efs/EzNZvbrqtmL2c6PdpgohRTFR
578+jDKETHg89Ps34+3Uqmdml35mlonL+b+Gto6+9Wpnfdb//HjGi7h3znac62kffR370Pg207+mfdBR
579+p/mQBt3OxNnP/DQ66tTqTqhAGtDzbOzwnm/Tc7sf/vM9N+LsL/v/+3On5nZ/s9TcfIht//3slb51
580+YsZPXEV3Te3MjThrvP9tnazcaNPazt7x+o1HGtDzpqp3ZrjVqobbj7h9uJ1pu9FGe7W7cjMp9iLO
581+c3OKqPN2cl7P5a7uiCMCg8vlckEoG0w+CECFQ4hCWVFhCYGysqFQNph8QGExYVHx4MGkUAJgEmID
582+WkFJAAAmKwckSLCCQgCT59mggehEg4TkG2SQoJyoZOisqGg4oEHGZqJILmgAAFhhMXmgoVGGNGhw
583+NL67E6x6o05IvdU5I95a2b+iDRp1pVaXoKyMgg+daCAKzzt6UL9zj92hjlHorO+z/ozMfOjxzk46
584+HtKgeahz6OGOnd9zHctDG/jpbCjT8Oihp9LP9zYe3Y7nvT+P9/f8oSefQr9+3u8MEXXs+VNEHf37
585+8z/D66ChGt/t4/b2YGo+36edPjTES8TEQ1TEB/ETHfF4FXkvz3XvMeVFnYeRbx9W7wdVV/X53TT0
586+5f1NbX4ONaUu6mAuevxz9bL1uUzk2z5FxEWdvH1s123x720Tl1PbNjHv2eJt3qLOhjKkAT3t70++
587+6uq7mu3Zoo79uvY3o+crurfbK+p8d6fltdZzdEWd64f5knsnq/Y2/1pfGz+7ytysqMN7y4nb+mus
588+qOOqqru8ijqqaqq3uJqqroo6nYqpqaqqmWqqp4o6v8j5HCqmZipqn/p7ni7q6vOmiHZs2qfeaJqn
589+epqmn29qp6jzr2/Ke4+met+e/u/puvqd9veJOubPtrdzY6sn6mDzt3miDitv8z58jZ2oc7zOzpur
590+zLmvfGy7vaynuLmJOqidr+qZq6yJOpppmaiXmRgz0zMzM1MzUSfRLS2TMRsTdfYOMzHx0jIv01Kv
591+91It/+/yLlHHLL8t3ZIfPy01/3H/N8t3Xvx8RJ3zp9v9HVEn29O1n83PEXWsn+XudX6OWx/Zl60R
592+dR7ex46REXVWfRF1VDcfRtRJfTZZWxF1GGlAz5OqiDqJaEMZinD7eLtXt7eIU227x4vFvIue4ly0
593+Rc+iDZYvFu9W4haarnLSRZzVrebSWvTUuy7aXG7dlW/l1RVv7e2izhWv32Yd89gx/z8Xn7u5k225
594+T5+Ny5Wx9m7rdvU23aZbt7VN3H/t/NP75o//v8+Dumz4iqbI7696x9z9jjaP/OxpmqX5l7iod7a8
595+izh+6nh/aa9oebdY5227erdoU32Fm1qoublc54q6qb+IU8pbubi4W27p9hZxbG170aaybW3rXhGn
596+LvW1X/sVPcX8HVe0UYaqqZdUVe20vPn0FG20eBm1unl5eVtZq1W1eKOpqKijuVllu99X1PpnRNVt
597+11Qz08tS1DxbzfLUrEwt/21HdMxE/ScVbTi1C1MxtVpbMRG1UVERB7VPq/kUcVa7TPnbNlerTc00
598+y7R+TRFHa/e0UE9RB3Xjn+nfm/vr6enpyYpo2frJqbao+vmenZna2Ynr2PyZnJzp/u23ZsnJ+Zg4
599+czkXOTkTZ+pEnM7O9NSpfPm61vmNx8uezZ7XnJ552f53uvm5mmqYn4izrNion57p6dmZOjs5c5M3
600+XTM3eXNz8znzYdbSTJiJWbmsjYZZjImJNpWYnZ+YmYlYmmhT3ZpZyZiZurzfnJeZmZWZmZnl71np
601+3VqZlapPfW0m6tQXpoYn0VPe3NHUTV6ur7Jta6ujNuo6rq/nVvumdcRL+4go1O7jFqblU056/Cxm
602+zk7yRt0hDejZNKIjOiIu5qMlZiUGlIColDCL94mcc8wUEQAAAACzEQgAgCgoDkkGgxKt8hQABU9a
603+MjYsKB4uOEBKFo5EagxjgAHGIMQMZNAIIEIAlwPUj3R21ON+OoolweHHyxEec6PUXuHG3tm8FdzV
604+26/Dtr2iBDx65sB//To0b06XgPsn6vi0awiJ9c1TGfpNu24gg8GTTWQ2surHzQ8iOkVMRQ8bqc3T
605+dz23gbqUKb8Do4CprHXpqUS1sxNMxk+nDv2Kx0qUZ3JtEyH5MJyirueANVPNJ8uECmYbTQH4bQxe
606+wOgDhxfHWveLy5GRmr44vxTfqiUCt5VJVHopJlXVsc6W01qnKlfFWVT8AR9BSMtzKKHWSj2dvVF1
607+NKyz89JH4IYLL8nSLYH3pNK+RYY56JNiRDxOnixB8yrPM5QUi+gVnkRCtTo+PX9DETY9CZC0XUiC
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
835+]]>
836+ </i:aipgf>
837+ </metadata>
838+</svg>
internal/cmd/stats/header.svgnew file+673
@@ -0,0 +1,673 @@
1+<?xml version="1.0" encoding="UTF-8"?>
2+<svg id="Layer_2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:i="http://ns.adobe.com/AdobeIllustrator/10.0/" version="1.1" viewBox="0 0 829.5 43">
3+ <!-- Generator: Adobe Illustrator 30.1.0, SVG Export Plug-In . SVG Version: 2.1.1 Build 136) -->
4+ <defs>
5+ <style>
6+ .st0 {
7+ fill: url(#linear-gradient) !important;
8+ }
9+ </style>
10+ <linearGradient id="linear-gradient" x1="0" y1="22.5" x2="829.5" y2="22.5" gradientTransform="translate(0 44) scale(1 -1)" gradientUnits="userSpaceOnUse">
11+ <stop offset="0" stop-color="#6b50ff"/>
12+ <stop offset="1" stop-color="#ff6daa"/>
13+ </linearGradient>
14+ </defs>
15+ <g id="Header_WIP_copy">
16+ <path class="st0" d="M70.2,36.9l-3.3,6h-1.3l4.6-8.2v2.3ZM70.2,24.4l-10.2,18.5h1.3l9-16.2v-2.3ZM70.2,14.1l-15.9,28.7h1.3l14.6-26.4s0-2.3,0-2.3ZM70.2,3.9l-21.5,38.9h1.3L70.2,6.2v-2.3ZM66.7,0l-23.7,42.8h1.3L68,0h-1.3ZM61,0l-23.7,42.8h1.3L62.3,0h-1.3ZM55.4,0l-23.7,42.8h1.3L56.6,0h-1.3ZM49.7,0l-23.7,42.8h1.3L51,0h-1.3ZM44.1,0l-23.7,42.8h1.3L45.3,0h-1.3ZM38.4,0L14.7,42.8h1.3L39.7,0h-1.3ZM32.7,0L9.1,42.8h1.3L34,0h-1.3ZM27.1,0L3.4,42.8h1.3L28.3,0h-1.3ZM21.4,0L0,38.7v2.3L22.7,0h-1.3ZM15.8,0L0,28.5v2.3L17,0h-1.3ZM10.1,0L0,18.3v2.3L11.4,0s-1.3,0-1.3,0ZM4.4,0L0,8v2.3L5.7,0s-1.3,0-1.3,0ZM351,0l-23.7,42.8h1.3L352.2,0h-1.3ZM356.7,0l-23.7,42.8h1.3L357.9,0h-1.3,0ZM362.4,0l-23.7,42.8h1.3L363.6,0h-1.3ZM368.1,0l-23.7,42.8h1.3L369.4,0h-1.3ZM373.8,0l-23.7,42.8h1.3L375,0h-1.3,0ZM379.5,0l-23.7,42.8h1.3L380.8,0h-1.3ZM385.2,0l-23.7,42.8h1.3L386.5,0h-1.3ZM390.9,0l-23.7,42.8h1.3L392.2,0h-1.3,0ZM396.6,0l-23.7,42.8h1.3L397.9,0h-1.3,0ZM402.3,0l-23.7,42.8h1.3L403.6,0h-1.3ZM408,0l-23.7,42.8h1.3L409.3,0h-1.3,0ZM413.8,0l-23.7,42.8h1.3L415,0h-1.3,0ZM419.5,0l-23.7,42.8h1.3L420.7,0h-1.3,0ZM425.2,0l-23.7,42.8h1.3L426.4,0h-1.3ZM430.9,0l-23.7,42.8h1.3L432.1,0h-1.3,0ZM436.6,0l-23.7,42.8h1.3L437.8,0h-1.3,0ZM442.3,0l-23.7,42.8h1.3L443.5,0h-1.3ZM448,0l-23.7,42.8h1.3L449.2,0h-1.3ZM453.7,0l-23.7,42.8h1.3L455,0h-1.3ZM459.4,0l-23.7,42.8h1.3L460.7,0h-1.3ZM465.1,0l-23.7,42.8h1.3L466.4,0h-1.3ZM470.8,0l-23.7,42.8h1.3L472.1,0h-1.3,0ZM476.5,0l-23.7,42.8h1.3L477.8,0h-1.3ZM482.2,0l-23.7,42.8h1.3L483.5,0h-1.3,0ZM487.9,0l-23.7,42.8h1.3L489.2,0h-1.3,0ZM493.6,0l-23.7,42.8h1.3L494.9,0h-1.3,0ZM499.4,0l-23.7,42.8h1.3L500.6,0h-1.3,0ZM505.1,0l-23.7,42.8h1.3L506.3,0h-1.3ZM510.8,0l-23.7,42.8h1.3L512,0h-1.3,0ZM516.5,0l-23.7,42.8h1.3L517.7,0h-1.3ZM522.2,0l-23.7,42.8h1.3L523.4,0h-1.3ZM527.9,0l-23.7,42.8h1.3L529.1,0h-1.3,0ZM533.6,0l-23.7,42.8h1.3L534.8,0h-1.3,0ZM539.3,0l-23.7,42.8h1.3L540.6,0h-1.3ZM545,0l-23.7,42.8h1.3L546.3,0h-1.3,0ZM550.7,0l-23.7,42.8h1.3L552,0h-1.3,0ZM556.4,0l-23.7,42.8h1.3L557.7,0h-1.3ZM562.1,0l-23.7,42.8h1.3L563.4,0h-1.3ZM567.8,0l-23.7,42.8h1.3L569.1,0h-1.3,0ZM573.5,0l-23.7,42.8h1.3L574.8,0h-1.3ZM579.2,0l-23.7,42.8h1.3L580.5,0h-1.3ZM585,0l-23.7,42.8h1.3L586.2,0h-1.3,0ZM590.7,0l-23.7,42.8h1.3L591.9,0h-1.3ZM596.4,0l-23.7,42.8h1.3L597.6,0h-1.3ZM602.1,0l-23.7,42.8h1.3L603.3,0h-1.3,0ZM607.8,0l-23.7,42.8h1.3L609,0h-1.3,0ZM613.5,0l-23.7,42.8h1.3L614.8,0h-1.3ZM619.2,0l-23.7,42.8h1.3L620.5,0h-1.3ZM624.9,0l-23.7,42.8h1.3L626.2,0h-1.3,0ZM630.6,0l-23.7,42.8h1.3L631.9,0h-1.3ZM636.3,0l-23.7,42.8h1.3L637.6,0h-1.3ZM642,0l-23.7,42.8h1.3L643.3,0h-1.3,0ZM647.7,0l-23.7,42.8h1.3L649,0h-1.3ZM653.4,0l-23.7,42.8h1.3L654.7,0h-1.3ZM659.2,0l-23.7,42.8h1.3L660.4,0h-1.3,0ZM664.9,0l-23.7,42.8h1.3L666.1,0h-1.3,0ZM670.6,0l-23.7,42.8h1.3L671.8,0h-1.3ZM676.3,0l-23.7,42.8h1.3L677.5,0h-1.3ZM682,0l-23.7,42.8h1.3L683.2,0h-1.3,0ZM687.7,0l-23.7,42.8h1.3L688.9,0h-1.3ZM693.4,0l-23.7,42.8h1.3L694.7,0h-1.3ZM699.1,0l-23.7,42.8h1.3L700.3,0h-1.3,0ZM704.8,0l-23.7,42.8h1.3L706.1,0h-1.3ZM710.5,0l-23.7,42.8h1.3L711.8,0h-1.3ZM716.2,0l-23.7,42.8h1.3L717.5,0h-1.3ZM721.9,0l-23.7,42.8h1.3L723.2,0h-1.3,0ZM727.6,0l-23.7,42.8h1.3L728.9,0h-1.3ZM733.3,0l-23.7,42.8h1.3L734.6,0h-1.3,0ZM739,0l-23.7,42.8h1.3L740.3,0h-1.3,0ZM744.8,0l-23.7,42.8h1.3L746,0h-1.3ZM750.5,0l-23.7,42.8h1.3L751.7,0h-1.3,0ZM756.2,0l-23.7,42.8h1.3L757.4,0h-1.3,0ZM761.9,0l-23.7,42.8h1.3L763.1,0h-1.3ZM767.6,0l-23.7,42.8h1.3L768.8,0h-1.3ZM773.3,0l-23.7,42.8h1.3L774.5,0h-1.3ZM779,0l-23.7,42.8h1.3L780.2,0h-1.3,0ZM784.7,0l-23.7,42.8h1.3L786,0h-1.3ZM790.4,0l-23.7,42.8h1.3L791.7,0h-1.3ZM796.1,0l-23.7,42.8h1.3L797.4,0h-1.3,0ZM801.8,0l-23.7,42.8h1.3L803.1,0h-1.3ZM807.5,0l-23.7,42.8h1.3L808.8,0h-1.3,0ZM813.2,0l-23.7,42.8h1.3L814.5,0h-1.3ZM818.9,0l-23.7,42.8h1.3L820.2,0h-1.3ZM824.7,0l-23.7,42.8h1.3L825.9,0h-1.3,0ZM829.5,1.6l-22.8,41.2h1.3l21.5-38.9V1.6h0ZM829.5,11.9l-17.1,30.9h1.3l15.8-28.6s0-2.3,0-2.3ZM829.5,22.3l-11.4,20.6h1.3l10.1-18.3v-2.3h0ZM829.5,32.6l-5.7,10.2h1.3l4.4-8v-2.3h0ZM345.3,0l-23.7,42.8h1.3L346.5,0h-1.3,0ZM339.6,0l-23.7,42.8h1.3L340.8,0h-1.3,0ZM333.9,0l-23.7,42.8h1.3L335.1,0h-1.3,0ZM328.1,0l-23.7,42.8h1.3L329.4,0h-1.3,0ZM322.4,0l-23.7,42.8h1.3L323.7,0h-1.3ZM316.7,0l-23.7,42.8h1.3L318,0h-1.3,0ZM311,0l-23.7,42.8h1.3L312.3,0h-1.3ZM305.3,0l-23.7,42.8h1.3L306.6,0h-1.3ZM299.6,0l-23.7,42.8h1.3L300.9,0h-1.3,0ZM293.9,0l-23.7,42.8h1.3L295.1,0h-1.3,0ZM288.2,0l-23.7,42.8h1.3L289.5,0h-1.3ZM282.5,0l-21.6,39v2.3L283.7,0h-1.3,0ZM276.8,0l-15.9,28.7v2.3L278,0h-1.3,0ZM271.1,0l-10.1,18.4v2.3L272.3,0s-1.3,0-1.3,0ZM265.4,0l-4.4,8v2.3L266.6,0s-1.3,0-1.3,0ZM83.3,43v-6.1h24.4v6.1h-24.4ZM119.9,24.7h18.3v6.1h-18.3v12.2h-6.1V12.5h24.4v6.1h-18.3v6.1ZM138.2,43v-12.2h6.1v12.2h-6.1ZM83.3,12.5h24.4v6.1h-24.4v-6.1ZM77.2,18.6h6.1v18.3h-6.1v-18.3ZM138.2,18.6h6.1v6.1h-6.1v-6.1ZM193.1,12.5h24.4v6.1h-24.4v-6.1ZM187.1,18.6h6.1v6.1h24.4v12.2h-6.1v-6.1h-24.4v-12.2ZM156.6,36.9h18.3v6.1h-18.3v-6.1ZM254.2,12.5v30.5h-6.1v-12.2h-18.3v12.2h-6.1V12.5h6.1v12.2h18.3v-12.2s6.1,0,6.1,0ZM156.6,30.8v6.1h-6.1V12.5h6.1v18.3h0ZM187.1,36.9h24.4v6.1h-24.4v-6.1ZM174.9,12.5h6.1v24.4h-6.1V12.5ZM86.8,6.6c.4-.4.6-.8.6-1.5h-.8c0,.4,0,.7-.3.9-.2.2-.5.3-.9.3s-.7-.1-.9-.3-.3-.5-.3-.9V2c0-.4.1-.7.3-.9s.5-.3.9-.3.7.1.9.3c.2.2.3.5.3.9h.8c0-.6-.2-1.1-.6-1.5s-.9-.5-1.5-.5-1.1.2-1.5.5-.6.8-.6,1.5v3.1c0,.6.2,1.1.6,1.5s.9.5,1.5.5,1.1-.2,1.5-.5h0ZM89.9,7v-3.3c0-.4,0-.7.3-.9s.5-.3.8-.3.6.1.8.3.3.5.3.9v3.4h.8v-3.5c0-.6-.2-1-.5-1.3s-.7-.5-1.2-.5-.7.1-1,.3c-.2.2-.4.5-.4.8h0V0h-.8v6.9h.8,0ZM97.3,6.8c.3-.2.4-.4.5-.8h0v.9h.8v-3.6c0-.5-.2-1-.5-1.3s-.8-.5-1.5-.5-1.1.1-1.4.4c-.3.3-.5.6-.6,1h.8c0-.2.1-.4.3-.5.2-.1.5-.2.8-.2.7,0,1.1.3,1.1,1v.4h-1.6c-.3,0-.6,0-.9.2-.3.1-.5.3-.6.6s-.2.5-.2.8c0,.5.2.9.5,1.2.3.3.7.4,1.3.4s.8,0,1.1-.3h0ZM95.6,6.1c-.2-.2-.3-.4-.3-.7s0-.5.3-.7.4-.2.7-.2h1.5v.7c0,.3-.1.6-.4.8-.2.2-.6.3-1,.3s-.6,0-.8-.2ZM101.4,7v-3.3c0-.4,0-.7.3-.9.2-.2.5-.3.8-.3.7,0,1.1.4,1.1,1.1v.4h.8v-.5c0-.6-.2-1.1-.4-1.4-.3-.3-.7-.5-1.3-.5s-.7.1-1,.3c-.2.2-.4.5-.4.8h0v-1h-.8v5.2h.9ZM106.6,7v-4c0-.2,0-.4.2-.5s.2-.2.4-.2.3,0,.4.2c0,.1.2.3.2.5v4h.7v-4c0-.2,0-.4.2-.5s.2-.2.4-.2.3,0,.4.2.2.3.2.5v4h.8v-4c0-.4,0-.7-.3-1s-.5-.4-.8-.4-.4,0-.6.2c-.2.1-.2.3-.3.5h0c0-.2-.2-.4-.3-.5-.2-.1-.3-.2-.6-.2s-.4,0-.6.2c-.2.2-.2.3-.3.6h0v-.7h-.7v5.2h.8,0ZM112.6,3.5V.6h.9V0h-2.5v.5h.9v2.9h.6ZM114.4,3.5V1.4c0-.2,0-.4,0-.6,0-.2,0-.3,0-.5,0,.1,0,.3.1.4s0,.3,0,.3l.3,1h.5l.3-1c0,0,0-.2,0-.3,0-.2,0-.3.1-.4,0,.1,0,.3,0,.5,0,.2,0,.4,0,.6v2.1h.5V0h-.7l-.3,1c0,0,0,.2,0,.3,0,.1,0,.2,0,.3,0,0,0-.2,0-.3s0-.2,0-.3l-.3-1h-.8v3.4h.5Z"/>
17+ </g>
18+ <metadata>
19+ <i:aipgfRef id="adobe_illustrator_pgf"/>
20+ <i:aipgf id="adobe_illustrator_pgf" i:pgfEncoding="zstd/base64" i:pgfVersion="24">
21+<![CDATA[
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
491+ZLeWJV7GvOslXcV1uSx55a7XRf313f5/y6Woalot7UrVP11+iiqdMptz/7Pkq3Nv6b0vvF2c+yth
492+uqme6q02ZV+WjGpnqia+tSip1MtQHx/N0lb/5f6Zda/9VNNfaqL9f0qn675t6pWnm9J6U25NXjRD
493+Xuup9+x76m4q7UrTb+XlzYzYy/6PudCU31e/NnbyYknC713O+bdtaKa4mvGXvaSLvRcy7jpONbXt
494+6q1L5urv1mfmtnoPFbN3U03R+pZUs9G8/11SW9u3eX23/3+3bJ8fv9v/v1f2Pmd2o+aZNa9V5jSz
495+06X63pn8/27LWVNdWS95GfsPzfjXp2eq6RzdFVniPbtH/2cJf/XmIi/3mxnj0sz03mb8/+bFm0pl
496+VYqSHJP97cwSF262rl36me0ux8RXXTezx9WYaspbxjf/VVKkiouHmJ7HfL2/NFkNsVd1qdTNvJzr
497+TknRri7EyJSkGJmalkmd3L1qq09JUR76/eNC31fVpefn7ojcaw9RSVFeZEqKFpdGhrrOUbU5982y
498+bTXm+qsr57Lj4z+1114ofbLd7+uvPUdrRtNT0/vyvFyr1//8qLzOHrOTbamUnIi6/cv2TVUvVyMj
499+IvZ6VVd+z+TFi/v5yG29bldiY+vE///Hha7ul8/Lk3N1auPuva2T9lcz/6/y6/83LlVltlTm/z9b
500+qWqKEBVdn///eTE/9qGhL05rRvb/z1+vvn1r6bxc1RTpv6W/rc/l/F9DM/tdjLd2lRR5Lyqn/5lZ
501+ty+a5tJVU/SLprxnZuzLsZ/1PM3MNhcfLq5jYzVFyssvQXQpSlLcO2fP5a/XmMb/v7yWlRS9HZ62
502+7i2LcvWdz///fjGrKbJjM7O7xVFjq7r9/xsua6US2bVcRKpeIl4U6CIyJQCQyNRFZKoEowy4hC5K
503+LMqUmBkvIj737Rq6reFrW9r9m/cbbuaVYElEESXggOASutiUYJSCi8hUBinKYAShPlLkeNH3Vcig
504+oOQMKE4BWjCqTTYM4yF0kRgD0sTkTJajMQcGLhKFR1aj0WHdUkIgH8PAJIPBw0SENsDJRGREcFkF
505+gMvGUCrcicvGICxO44zEZWPTQgFxIbB4WsFsCH26tsfYdxq9Iut+StFZvjPfqWt3ah/q6oz+M/17
506+1SNudYWi6woFfVkb1yPU9OxeS+N9XX1+5cvXNfYo23mzb3WyR4eojC95u+pE3fb43c6u2fa4Otuj
507+20Z3727njI79UKVI5qcmbWk61WV7E6sU5F30u8Rej6ikqNkVJ13EUynMKKH2qYmXPa/Z7tCzz/HM
508+WMqd2s9VitSHasqfOPm5k727J1NdaCpt3Lp9mNj8aXmnpOhZLZHzUMpTk9/f2ZkU2fZqO54ii9jS
509+7/QwGRmX/e66ERVbsuWNSkLpJm5Mx0tGlxwZlR3dVz7uY6PlP1r29qNk6XgmXTpmrna8k/oylz7m
510+Ix+mpT/qQkzFNDWUNlPXnV2qKVOzL/dSajVX/P5fTcQ8TM13R0dXU3SGuvx+MvRVc8zL49x/z4Xn
511+aoo23fzX1qV+Pm6n+nN2rpMW3dxcTSgZOn9/q0nS82/vPEc3X29vNZlLaf7dk3lndzd/7z2/tMg9
512+ebeSzHl3W00t7dLex5UtOfdqa6tJSs7OVhNvb3Y23+LtXanXbWNjq2kZsSdN0+u9/tyUlmZfW6sp
513+09faWk0oSYn/vPxw+/oZn9V0uPjOnU9i58narHub1bT+JV763PyS+zKryaX093NpV7evXF6+dmVl
514+NbXEjHqqvHrrl5Wky3hPzTh/dS8ZWU3ryos8qaYerz8+VGlXJ688PlbTpRsbqylZkZXEyGh8xvZL
515+UdJlyL+/Xu/+fdV0rH99jM7Gb9zsybreq6U0/t5G4/7s7VWTdI/LmXlX9bLt19mR13Edq+8y591d
516+NUnat6+rpl3ZksSrquqrWcqV/Lm3kKXexVw1nS5e6dft2qfj9rJVRlxclXaZ8u2tmlJKQ1/+d1+a
517+e7n6qXfL36dpqybddcbMx11b28ZN3P/lr7cQV3v16ePzHd66t3Mvu2V0dVXT2lpbzfWvSuJltpv5
518+l2iWv7i1VU3Sr1ue+n/qO3r2pRniutb3d9y1rPyrfVHSla593OZodr5+dVVNLvXqXrrpC1fVxHn2
519+/n+7uH1ZY6vearWWAirDQwEGg8EokMqJBgGwWGiJQCEWlxZQSCUCqZxoALmcRKAAnLSoqBAIw4WT
520+0IOJiRCIACeSRAANLCglHg4JJRoRPiBEKAkgUQYiYhUMVB+MkpLnuCgBfVgqTCGWlAccFx2IqASj
521+BnAh5HLCAAMjMpWCgYIR4cTEd7eaQCKciKw1sshUMKKL1KKbiCyyzJ76YCgp0d1WkTW19cwN+3X3
522+7vR3EeU09dt582+X71r/zvvdf3PVUy3fc08N2dscex23195dd+6itWZH39O9U5Le3S69+2V77kNB
523+VdTttLw+1HtGt9d2S7S+TsSPqIffq37XZ5pL7/gznW0Vj+8u9Y8XdfrEe5WipFuTzpTtOqfcdo3K
524+3srHx4qNypLquJ3hqmnfYX6ee+++qZ3dvd1+mtrperu3Uyj5vJnmdm7niriKbhclKx6yuW/qdSd1
525+V7/l/ea33aFs2yE6nq0fCttp9BNbqhQl2Un3vMp/pme3/K7r/t2u7XbXjnYKpdEu7/A+faWd2pna
526+qdq56nxy2qWdQkE7tPsO9tnZ2fHZ9akUhcL7zG+9b/74/NHbav4h3+prNEPudl7d/J7R+r5C8WTP
527+qO8Mz/X/U9cu7quJc//79xKR+68/DTNN3f+Xjz/i9z40zOVETv3N04+S3dTQc/H87/ws1VPfcz33
528+99k2+ZX0+amYtvtn/W67n2v/f2rsvG37+8YS/vu+6nxGp6amUeorlP3I2TZ9NdEU+X2f+RXKO/Z7
529+v0KJ9H5N8XPRuO9N/aPv20M/M32VPPtVh/P7OXtXv5qid85+VClKsvd3bT5DSXUiXzvtP819j16Z
530+f/3MLLJlrzqRrjvfm0ae9lFmqnKnPeO618gx/z5aVUXzs9M+w2c/U3xXz/b2/c0/w1eS6kTHyfib
531+n7fwI/9L01S0f71DRWM+Q/3z01zs/0de9/cK5T7it77jW2Zv9gol2jRzZ1N7je45vS357KcoTbef
532+9/1UipLO1n3xjLM3c/HWNtU5dc3Z9iw99U5fdS9VJ8r8/OXLftRlw/TXla5Qole93r5UX21fjw49
533+D/tyG3v/X6FE3ajRXzc+H2qEm5h+rDq2/ajcp3ppmdl4C9WNW/tM1aPrTO/jjC+oRDDq9qmmpA4p
534+NDMzAQAAwxIIMGgsOhHLZBIpenYUgAhRWCY2MiocKiBGJojIwxGJJAYxDEOBHAhy2ByBNiAAyAL/
535+Phu9rc3Lusm4Txe/VMlu0perH2P1FGh6m5Kx9wHdkUWQ9sjq6LUDUFeXKuy+LETaWen4en/9wXBB
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
670+]]>
671+ </i:aipgf>
672+ </metadata>
673+</svg>
internal/cmd/stats/heartbit.svgnew file+43
@@ -0,0 +1,43 @@
1+<?xml version="1.0" encoding="UTF-8"?>
2+<svg id="Layer_2" data-name="Layer 2" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 50.47 42.99">
3+ <defs>
4+ <style>
5+ .cls-1 {
6+ fill: #ff6daa;
7+ }
8+
9+ .cls-2 {
10+ fill: #ff13a9;
11+ }
12+
13+ .cls-3 {
14+ fill: #ff388b;
15+ }
16+ </style>
17+ </defs>
18+ <g id="Header_HeartBit_04" data-name="Header HeartBit 04">
19+ <g>
20+ <polygon id="Heart_Pink" data-name="Heart Pink" class="cls-1" points="22.87 7.13 22.87 3.48 20.3 3.48 20.3 0 7.59 0 7.59 3.48 3.66 3.48 3.66 7.13 0 7.13 0 25.24 3.66 25.24 3.66 30.73 7.59 30.73 7.59 35.49 12.99 35.49 12.99 38.05 17.38 38.05 17.38 40.24 20.85 40.24 20.85 42.99 29.62 42.99 29.62 40.24 33.09 40.24 33.09 38.05 37.48 38.05 37.48 35.49 42.88 35.49 42.88 30.73 46.81 30.73 46.81 25.24 50.47 25.24 50.47 7.13 46.81 7.13 46.81 3.48 42.88 3.48 42.88 0 30.17 0 30.17 3.48 27.6 3.48 27.6 7.13 22.87 7.13"/>
21+ <g>
22+ <rect id="Face_02" data-name="Face 02" x="30.32" y="16.07" width="2.16" height="5.85"/>
23+ <path d="M32.53,21.98h-2.27v-5.96h2.27v5.96Z"/>
24+ </g>
25+ <g>
26+ <rect id="Face_02-2" data-name="Face 02" x="17.99" y="16.07" width="2.16" height="5.85"/>
27+ <path d="M20.21,21.98h-2.27v-5.96h2.27v5.96Z"/>
28+ </g>
29+ <g>
30+ <rect id="Face_02-3" data-name="Face 02" class="cls-2" x="14.44" y="22.11" width="2.16" height="2.16"/>
31+ <path class="cls-3" d="M14.5,24.21h2.05v-2.05h-2.05v2.05Z"/>
32+ </g>
33+ <g>
34+ <rect id="Face_02-4" data-name="Face 02" class="cls-2" x="33.87" y="22.11" width="2.16" height="2.16"/>
35+ <path class="cls-3" d="M36.08,24.32h-2.27v-2.27h2.27v2.27Z"/>
36+ </g>
37+ <g>
38+ <rect id="Face_02-5" data-name="Face 02" x="23.43" y="22.11" width="3.62" height="2.16"/>
39+ <path d="M27.1,24.32h-3.73v-2.27h3.73v2.27Z"/>
40+ </g>
41+ </g>
42+ </g>
43+</svg>
internal/cmd/stats/index.cssnew file+275
@@ -0,0 +1,275 @@
1+:root {
2+ /* Dark mode colors - charmtone dark palette */
3+ --bg: #201f26;
4+ --bg-secondary: #2d2c35;
5+ --text: #fffaf1;
6+ --text-muted: #858392;
7+
8+ /* Charmtone colors (global - same in both light and dark modes) */
9+ --charple: #6b50ff;
10+ --cherry: #ff388b;
11+ --julep: #00ffb2;
12+ --urchin: #c337e0;
13+ --butter: #fffaf1;
14+ --squid: #858392;
15+ --pepper: #201f26;
16+ --iron: #4d4c57;
17+ --tuna: #ff6daa;
18+ --uni: #ff937d;
19+ --coral: #ff577d;
20+ --violet: #c259ff;
21+ --malibu: #00a4ff;
22+ --hazy: #8b75ff;
23+}
24+
25+/* Light mode colors - charmtone light palette */
26+@media (prefers-color-scheme: light) {
27+ :root {
28+ --bg: #f0f0f0;
29+ --bg-secondary: #fbfbfb;
30+ --text: #201f26;
31+ --text-muted: #4d4c57;
32+ }
33+}
34+
35+* {
36+ margin: 0;
37+ padding: 0;
38+ box-sizing: border-box;
39+}
40+
41+body {
42+ font-family:
43+ -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu,
44+ sans-serif;
45+ background: var(--bg);
46+ color: var(--text);
47+ line-height: 1.6;
48+ padding: 2rem 1rem;
49+}
50+
51+.container {
52+ max-width: 1200px;
53+ margin: 0 auto;
54+}
55+
56+.header-wrapper {
57+ max-width: 1200px;
58+ margin: 0 auto 2rem;
59+}
60+
61+.header-wrapper a {
62+ display: block;
63+ text-decoration: none;
64+}
65+
66+.header-content {
67+ display: flex;
68+ align-items: center;
69+ width: 100%;
70+}
71+
72+.header-svg {
73+ flex-grow: 1;
74+ flex-shrink: 1;
75+ min-width: 0;
76+ overflow: hidden;
77+ height: 70px;
78+ display: flex;
79+ align-items: center;
80+}
81+
82+.header-svg svg {
83+ height: 70px;
84+ width: auto;
85+ min-width: 1300px;
86+ display: block;
87+ pointer-events: none;
88+}
89+
90+.heartbit-svg {
91+ flex-shrink: 0;
92+ width: 70px;
93+ flex-basis: 70px;
94+ margin-left: 1rem;
95+}
96+
97+.heartbit-svg svg {
98+ width: 100%;
99+ height: auto;
100+ display: block;
101+}
102+
103+.header-info {
104+ margin-bottom: 2rem;
105+ font-size: 0.875rem;
106+ color: var(--hazy);
107+ font-family: "JetBrains Mono", "SF Mono", Consolas, monospace;
108+}
109+
110+.stats-grid {
111+ display: flex;
112+ flex-wrap: wrap;
113+ gap: 1rem;
114+ margin-bottom: 2rem;
115+ width: 100%;
116+}
117+
118+.stat-card {
119+ background: var(--bg-secondary);
120+ border-radius: 12px;
121+ padding: 1.5rem;
122+ flex: 1 1 150px;
123+ max-width: calc((100% - 5rem) / 6);
124+}
125+
126+@media (prefers-color-scheme: light) {
127+ .stat-card {
128+ background: var(--butter);
129+ }
130+}
131+
132+@media (max-width: 1024px) {
133+ .stat-card {
134+ max-width: calc((100% - 2rem) / 3);
135+ }
136+}
137+
138+@media (max-width: 600px) {
139+ .stat-card {
140+ max-width: calc((100% - 1rem) / 2);
141+ }
142+}
143+
144+.stat-card h3 {
145+ font-size: 0.75rem;
146+ color: var(--text-muted);
147+ text-transform: uppercase;
148+ letter-spacing: 0.05em;
149+ margin-bottom: 0.5rem;
150+}
151+
152+.stat-card .value {
153+ font-size: 2rem;
154+ font-weight: 700;
155+ color: var(--butter);
156+ white-space: nowrap;
157+}
158+
159+@media (prefers-color-scheme: light) {
160+ .stat-card .value {
161+ color: var(--pepper);
162+ }
163+}
164+
165+.charts-grid {
166+ display: flex;
167+ flex-direction: column;
168+ gap: 1.5rem;
169+ margin-bottom: 2rem;
170+ width: 100%;
171+}
172+
173+.chart-card {
174+ background: var(--bg-secondary);
175+ border-radius: 12px;
176+ padding: 1.5rem;
177+ width: 100%;
178+ box-sizing: border-box;
179+}
180+
181+@media (prefers-color-scheme: light) {
182+ .chart-card {
183+ background: var(--butter);
184+ }
185+}
186+
187+.chart-card.full-width {
188+ width: 100%;
189+}
190+
191+.chart-row {
192+ display: grid;
193+ grid-template-columns: repeat(2, 1fr);
194+ gap: 1.5rem;
195+ width: 100%;
196+}
197+
198+.chart-row .chart-card {
199+ width: 100%;
200+}
201+
202+@media (max-width: 1024px) {
203+ .chart-row {
204+ grid-template-columns: 1fr;
205+ }
206+}
207+
208+.chart-card h2 {
209+ font-size: 1.25rem;
210+ margin-bottom: 1rem;
211+ color: var(--text);
212+}
213+
214+.chart-container {
215+ position: relative;
216+ height: 300px;
217+}
218+
219+.chart-container.tall {
220+ height: 400px;
221+}
222+
223+table {
224+ width: 100%;
225+ border-collapse: collapse;
226+ margin-top: 1rem;
227+}
228+
229+th,
230+td {
231+ text-align: left;
232+ padding: 0.75rem;
233+ border-bottom: 1px solid var(--border);
234+}
235+
236+th {
237+ color: var(--text-muted);
238+ font-weight: 500;
239+ font-size: 0.875rem;
240+}
241+
242+td {
243+ font-family: "JetBrains Mono", "SF Mono", Consolas, monospace;
244+}
245+
246+.model-tag {
247+ background: var(--bg);
248+ padding: 0.25rem 0.5rem;
249+ border-radius: 4px;
250+ font-size: 0.875rem;
251+}
252+
253+.footer-container {
254+ max-width: 1200px;
255+ margin: 2rem auto 0;
256+}
257+
258+.footer-container svg {
259+ width: 100%;
260+ height: auto;
261+ display: block;
262+}
263+
264+/* Override charm brand colors in footer */
265+.footer-container .st2 {
266+ fill: #fffaf1 !important;
267+}
268+
269+@media (prefers-color-scheme: light) {
270+
271+ /* Override charm brand colors in footer */
272+ .footer-container .st2 {
273+ fill: #644ced !important;
274+ }
275+}
internal/cmd/stats/index.htmlnew file+136
@@ -0,0 +1,136 @@
1+<!doctype html>
2+<html lang="en">
3+ <head>
4+ <meta charset="UTF-8" />
5+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6+ <title>Crush Usage Statistics</title>
7+ <link rel="preconnect" href="https://cdn.jsdelivr.net" />
8+ <link rel="preconnect" href="https://fonts.googleapis.com" />
9+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
10+ <link
11+ href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500&display=swap"
12+ rel="stylesheet"
13+ />
14+ <script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
15+ <style>
16+ {{.CSS}}
17+ </style>
18+ </head>
19+ <body>
20+ <div class="container">
21+ <div class="header-wrapper">
22+ <a href="https://charm.land/crush" class="header-link">
23+ <div class="header-content">
24+ <div class="header-svg">{{.Header}}</div>
25+ <div class="heartbit-svg">{{.Heartbit}}</div>
26+ </div>
27+ </a>
28+ </div>
29+
30+ <div class="header-info">
31+ Generated by {{.Username}} for {{.ProjectName}} in {{.GeneratedAt}}.
32+ </div>
33+
34+ <div class="stats-grid">
35+ <div class="stat-card">
36+ <h3>Total Sessions</h3>
37+ <div class="value" id="total-sessions"></div>
38+ </div>
39+ <div class="stat-card">
40+ <h3>Total Messages</h3>
41+ <div class="value" id="total-messages"></div>
42+ </div>
43+ <div class="stat-card">
44+ <h3>Total Tokens</h3>
45+ <div class="value" id="total-tokens"></div>
46+ </div>
47+ <div class="stat-card">
48+ <h3>Total Cost</h3>
49+ <div class="value cost" id="total-cost"></div>
50+ </div>
51+ <div class="stat-card">
52+ <h3>Tokens/Session</h3>
53+ <div class="value" id="avg-tokens"></div>
54+ </div>
55+ <div class="stat-card">
56+ <h3>Response Time</h3>
57+ <div class="value" id="avg-response"></div>
58+ </div>
59+ </div>
60+
61+ <div class="charts-grid">
62+ <div class="chart-card full-width">
63+ <h2>Activity Heatmap</h2>
64+ <div class="chart-container tall">
65+ <canvas id="heatmapChart"></canvas>
66+ </div>
67+ </div>
68+
69+ <div class="chart-card full-width">
70+ <h2>Activity (Last 30 Days)</h2>
71+ <div class="chart-container tall">
72+ <canvas id="recentActivityChart"></canvas>
73+ </div>
74+ </div>
75+
76+ <div class="chart-card full-width">
77+ <h2>Tool Usage</h2>
78+ <div class="chart-container tall">
79+ <canvas id="toolChart"></canvas>
80+ </div>
81+ </div>
82+
83+ <div class="chart-row">
84+ <div class="chart-card">
85+ <h2>Messages by Provider</h2>
86+ <div class="chart-container">
87+ <canvas id="providerPieChart"></canvas>
88+ </div>
89+ </div>
90+
91+ <div class="chart-card">
92+ <h2>Token Distribution</h2>
93+ <div class="chart-container">
94+ <canvas id="tokenPieChart"></canvas>
95+ </div>
96+ </div>
97+ </div>
98+
99+ <div class="chart-card full-width">
100+ <h2>Usage by Model</h2>
101+ <div class="chart-container tall">
102+ <canvas id="modelChart"></canvas>
103+ </div>
104+ </div>
105+
106+ <div class="chart-card full-width">
107+ <h2>Daily Usage History</h2>
108+ <div style="overflow-x: auto">
109+ <table id="daily-table">
110+ <thead>
111+ <tr>
112+ <th>Date</th>
113+ <th>Sessions</th>
114+ <th>Prompt Tokens</th>
115+ <th>Completion Tokens</th>
116+ <th>Total Tokens</th>
117+ <th>Cost</th>
118+ </tr>
119+ </thead>
120+ <tbody></tbody>
121+ </table>
122+ </div>
123+ </div>
124+ </div>
125+ </div>
126+
127+ <div class="footer-container">
128+ <div class="footer">{{.Footer}}</div>
129+ </div>
130+
131+ <script>
132+ const stats = {{.StatsJSON}};
133+ {{.JS}}
134+ </script>
135+ </body>
136+</html>
internal/cmd/stats/index.jsnew file+356
@@ -0,0 +1,356 @@
1+// Get all charmtone colors once from computed styles
2+const rootStyles = getComputedStyle(document.documentElement);
3+const colors = {
4+ charple: rootStyles.getPropertyValue("--charple").trim(),
5+ cherry: rootStyles.getPropertyValue("--cherry").trim(),
6+ julep: rootStyles.getPropertyValue("--julep").trim(),
7+ urchin: rootStyles.getPropertyValue("--urchin").trim(),
8+ butter: rootStyles.getPropertyValue("--butter").trim(),
9+ squid: rootStyles.getPropertyValue("--squid").trim(),
10+ pepper: rootStyles.getPropertyValue("--pepper").trim(),
11+ tuna: rootStyles.getPropertyValue("--tuna").trim(),
12+ uni: rootStyles.getPropertyValue("--uni").trim(),
13+ coral: rootStyles.getPropertyValue("--coral").trim(),
14+ violet: rootStyles.getPropertyValue("--violet").trim(),
15+ malibu: rootStyles.getPropertyValue("--malibu").trim(),
16+};
17+
18+const easeDuration = 500;
19+const easeType = "easeOutQuart";
20+
21+// Helper functions
22+function formatNumber(n) {
23+ return new Intl.NumberFormat().format(Math.round(n));
24+}
25+
26+function formatCompact(n) {
27+ if (n >= 1000000) return (n / 1000000).toFixed(1) + "M";
28+ if (n >= 1000) return (n / 1000).toFixed(1) + "k";
29+ return Math.round(n).toString();
30+}
31+
32+function formatCost(n) {
33+ return "$" + n.toFixed(2);
34+}
35+
36+function formatTime(ms) {
37+ if (ms < 1000) return Math.round(ms) + "ms";
38+ return (ms / 1000).toFixed(1) + "s";
39+}
40+
41+const charpleColor = { r: 107, g: 80, b: 255 };
42+const tunaColor = { r: 255, g: 109, b: 170 };
43+
44+function interpolateColor(ratio, alpha = 1) {
45+ const r = Math.round(charpleColor.r + (tunaColor.r - charpleColor.r) * ratio);
46+ const g = Math.round(charpleColor.g + (tunaColor.g - charpleColor.g) * ratio);
47+ const b = Math.round(charpleColor.b + (tunaColor.b - charpleColor.b) * ratio);
48+ if (alpha < 1) {
49+ return `rgba(${r}, ${g}, ${b}, ${alpha})`;
50+ }
51+ return `rgb(${r}, ${g}, ${b})`;
52+}
53+
54+function getTopItemsWithOthers(items, countKey, labelKey, topN = 10) {
55+ const topItems = items.slice(0, topN);
56+ const otherItems = items.slice(topN);
57+ const otherCount = otherItems.reduce((sum, item) => sum + item[countKey], 0);
58+ const displayItems = [...topItems];
59+ if (otherItems.length > 0) {
60+ const otherItem = { [countKey]: otherCount, [labelKey]: "others" };
61+ displayItems.push(otherItem);
62+ }
63+ return displayItems;
64+}
65+
66+// Populate summary cards
67+document.getElementById("total-sessions").textContent = formatNumber(
68+ stats.total.total_sessions,
69+);
70+document.getElementById("total-messages").textContent = formatCompact(
71+ stats.total.total_messages,
72+);
73+document.getElementById("total-tokens").textContent = formatCompact(
74+ stats.total.total_tokens,
75+);
76+document.getElementById("total-cost").textContent = formatCost(
77+ stats.total.total_cost,
78+);
79+document.getElementById("avg-tokens").innerHTML =
80+ '<span title="Average">x̅</span> ' +
81+ formatCompact(stats.total.avg_tokens_per_session);
82+document.getElementById("avg-response").innerHTML =
83+ '<span title="Average">x̅</span> ' + formatTime(stats.avg_response_time_ms);
84+
85+// Chart defaults
86+Chart.defaults.color = colors.squid;
87+Chart.defaults.borderColor = colors.squid;
88+
89+if (stats.recent_activity?.length > 0) {
90+ new Chart(document.getElementById("recentActivityChart"), {
91+ type: "bar",
92+ data: {
93+ labels: stats.recent_activity.map((d) => d.day),
94+ datasets: [
95+ {
96+ label: "Sessions",
97+ data: stats.recent_activity.map((d) => d.session_count),
98+ backgroundColor: colors.charple,
99+ borderRadius: 4,
100+ yAxisID: "y",
101+ },
102+ {
103+ label: "Tokens (K)",
104+ data: stats.recent_activity.map((d) => d.total_tokens / 1000),
105+ backgroundColor: colors.julep,
106+ borderRadius: 4,
107+ yAxisID: "y1",
108+ },
109+ ],
110+ },
111+ options: {
112+ responsive: true,
113+ maintainAspectRatio: false,
114+ animation: { duration: 800, easing: easeType },
115+ interaction: { mode: "index", intersect: false },
116+ scales: {
117+ y: { position: "left", title: { display: true, text: "Sessions" } },
118+ y1: {
119+ position: "right",
120+ title: { display: true, text: "Tokens (K)" },
121+ grid: { drawOnChartArea: false },
122+ },
123+ },
124+ },
125+ });
126+}
127+
128+// Heatmap (Hour × Day of Week) - Bubble Chart
129+const dayLabels = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
130+
131+let maxCount =
132+ stats.hour_day_heatmap?.length > 0
133+ ? Math.max(...stats.hour_day_heatmap.map((h) => h.session_count))
134+ : 0;
135+if (maxCount === 0) maxCount = 1;
136+const scaleFactor = 20 / Math.sqrt(maxCount);
137+
138+if (stats.hour_day_heatmap?.length > 0) {
139+ new Chart(document.getElementById("heatmapChart"), {
140+ type: "bubble",
141+ data: {
142+ datasets: [
143+ {
144+ label: "Sessions",
145+ data: stats.hour_day_heatmap
146+ .filter((h) => h.session_count > 0)
147+ .map((h) => ({
148+ x: h.hour,
149+ y: h.day_of_week,
150+ r: Math.sqrt(h.session_count) * scaleFactor,
151+ count: h.session_count,
152+ })),
153+ backgroundColor: (ctx) => {
154+ const count =
155+ ctx.raw?.count || ctx.dataset.data[ctx.dataIndex]?.count || 0;
156+ const ratio = count / maxCount;
157+ return interpolateColor(ratio);
158+ },
159+ borderWidth: 0,
160+ },
161+ ],
162+ },
163+ options: {
164+ responsive: true,
165+ maintainAspectRatio: false,
166+ animation: false,
167+ scales: {
168+ x: {
169+ min: 0,
170+ max: 23,
171+ grid: { display: false },
172+ title: { display: true, text: "Hour of Day" },
173+ ticks: {
174+ stepSize: 1,
175+ callback: (v) => (Number.isInteger(v) ? v : ""),
176+ },
177+ },
178+ y: {
179+ min: 0,
180+ max: 6,
181+ reverse: true,
182+ grid: { display: false },
183+ title: { display: true, text: "Day of Week" },
184+ ticks: { stepSize: 1, callback: (v) => dayLabels[v] || "" },
185+ },
186+ },
187+ plugins: {
188+ legend: { display: false },
189+ tooltip: {
190+ callbacks: {
191+ label: (ctx) =>
192+ dayLabels[ctx.raw.y] +
193+ " " +
194+ ctx.raw.x +
195+ ":00 - " +
196+ ctx.raw.count +
197+ " sessions",
198+ },
199+ },
200+ },
201+ },
202+ });
203+}
204+
205+if (stats.tool_usage?.length > 0) {
206+ const displayTools = getTopItemsWithOthers(
207+ stats.tool_usage,
208+ "call_count",
209+ "tool_name",
210+ );
211+ const maxValue = Math.max(...displayTools.map((t) => t.call_count));
212+ new Chart(document.getElementById("toolChart"), {
213+ type: "bar",
214+ data: {
215+ labels: displayTools.map((t) => t.tool_name),
216+ datasets: [
217+ {
218+ label: "Calls",
219+ data: displayTools.map((t) => t.call_count),
220+ backgroundColor: (ctx) => {
221+ const value = ctx.raw;
222+ const ratio = value / maxValue;
223+ return interpolateColor(ratio);
224+ },
225+ borderRadius: 4,
226+ },
227+ ],
228+ },
229+ options: {
230+ indexAxis: "y",
231+ responsive: true,
232+ maintainAspectRatio: false,
233+ animation: { duration: easeDuration, easing: easeType },
234+ plugins: { legend: { display: false } },
235+ },
236+ });
237+}
238+
239+// Token Distribution Pie
240+new Chart(document.getElementById("tokenPieChart"), {
241+ type: "doughnut",
242+ data: {
243+ labels: ["Prompt Tokens", "Completion Tokens"],
244+ datasets: [
245+ {
246+ data: [
247+ stats.total.total_prompt_tokens,
248+ stats.total.total_completion_tokens,
249+ ],
250+ backgroundColor: [colors.charple, colors.julep],
251+ borderWidth: 0,
252+ },
253+ ],
254+ },
255+ options: {
256+ responsive: true,
257+ maintainAspectRatio: false,
258+ animation: { duration: easeDuration, easing: easeType },
259+ plugins: {
260+ legend: { position: "bottom" },
261+ },
262+ },
263+});
264+
265+// Model Usage Chart (horizontal bar)
266+if (stats.usage_by_model?.length > 0) {
267+ const displayModels = getTopItemsWithOthers(
268+ stats.usage_by_model,
269+ "message_count",
270+ "model",
271+ );
272+ const maxModelValue = Math.max(...displayModels.map((m) => m.message_count));
273+ new Chart(document.getElementById("modelChart"), {
274+ type: "bar",
275+ data: {
276+ labels: displayModels.map((m) =>
277+ m.provider ? `${m.model} (${m.provider})` : m.model,
278+ ),
279+ datasets: [
280+ {
281+ label: "Messages",
282+ data: displayModels.map((m) => m.message_count),
283+ backgroundColor: (ctx) => {
284+ const value = ctx.raw;
285+ const ratio = value / maxModelValue;
286+ return interpolateColor(ratio);
287+ },
288+ borderRadius: 4,
289+ },
290+ ],
291+ },
292+ options: {
293+ indexAxis: "y",
294+ responsive: true,
295+ maintainAspectRatio: false,
296+ animation: { duration: easeDuration, easing: easeType },
297+ plugins: { legend: { display: false } },
298+ },
299+ });
300+}
301+
302+if (stats.usage_by_model?.length > 0) {
303+ const providerData = stats.usage_by_model.reduce((acc, m) => {
304+ acc[m.provider] = (acc[m.provider] || 0) + m.message_count;
305+ return acc;
306+ }, {});
307+ const providerColors = [
308+ colors.malibu,
309+ colors.charple,
310+ colors.violet,
311+ colors.tuna,
312+ colors.coral,
313+ colors.uni,
314+ ];
315+ new Chart(document.getElementById("providerPieChart"), {
316+ type: "doughnut",
317+ data: {
318+ labels: Object.keys(providerData),
319+ datasets: [
320+ {
321+ data: Object.values(providerData),
322+ backgroundColor: Object.keys(providerData).map(
323+ (_, i) => providerColors[i % providerColors.length],
324+ ),
325+ borderWidth: 0,
326+ },
327+ ],
328+ },
329+ options: {
330+ responsive: true,
331+ maintainAspectRatio: false,
332+ animation: { duration: easeDuration, easing: easeType },
333+ plugins: {
334+ legend: { position: "bottom" },
335+ },
336+ },
337+ });
338+}
339+
340+// Daily Usage Table
341+const tableBody = document.querySelector("#daily-table tbody");
342+if (stats.usage_by_day?.length > 0) {
343+ const fragment = document.createDocumentFragment();
344+ stats.usage_by_day.slice(0, 30).forEach((d) => {
345+ const row = document.createElement("tr");
346+ row.innerHTML = `<td>${d.day}</td><td>${d.session_count}</td><td>${formatNumber(
347+ d.prompt_tokens,
348+ )}</td><td>${formatNumber(
349+ d.completion_tokens,
350+ )}</td><td>${formatNumber(d.total_tokens)}</td><td>${formatCost(
351+ d.cost,
352+ )}</td>`;
353+ fragment.appendChild(row);
354+ });
355+ tableBody.appendChild(fragment);
356+}
internal/db/db.go+90
@@ -48,18 +48,45 @@ func Prepare(ctx context.Context, db DBTX) (*Queries, error) {
48 if q.deleteSessionMessagesStmt, err = db.PrepareContext(ctx, deleteSessionMessages); err != nil {
48 if q.deleteSessionMessagesStmt, err = db.PrepareContext(ctx, deleteSessionMessages); err != nil {
49 return nil, fmt.Errorf("error preparing query DeleteSessionMessages: %w", err)
49 return nil, fmt.Errorf("error preparing query DeleteSessionMessages: %w", err)
50 }
50 }
51+ if q.getAverageResponseTimeStmt, err = db.PrepareContext(ctx, getAverageResponseTime); err != nil {
52+ return nil, fmt.Errorf("error preparing query GetAverageResponseTime: %w", err)
53+ }
51 if q.getFileStmt, err = db.PrepareContext(ctx, getFile); err != nil {
54 if q.getFileStmt, err = db.PrepareContext(ctx, getFile); err != nil {
52 return nil, fmt.Errorf("error preparing query GetFile: %w", err)
55 return nil, fmt.Errorf("error preparing query GetFile: %w", err)
53 }
56 }
54 if q.getFileByPathAndSessionStmt, err = db.PrepareContext(ctx, getFileByPathAndSession); err != nil {
57 if q.getFileByPathAndSessionStmt, err = db.PrepareContext(ctx, getFileByPathAndSession); err != nil {
55 return nil, fmt.Errorf("error preparing query GetFileByPathAndSession: %w", err)
58 return nil, fmt.Errorf("error preparing query GetFileByPathAndSession: %w", err)
56 }
59 }
60+ if q.getHourDayHeatmapStmt, err = db.PrepareContext(ctx, getHourDayHeatmap); err != nil {
61+ return nil, fmt.Errorf("error preparing query GetHourDayHeatmap: %w", err)
62+ }
57 if q.getMessageStmt, err = db.PrepareContext(ctx, getMessage); err != nil {
63 if q.getMessageStmt, err = db.PrepareContext(ctx, getMessage); err != nil {
58 return nil, fmt.Errorf("error preparing query GetMessage: %w", err)
64 return nil, fmt.Errorf("error preparing query GetMessage: %w", err)
59 }
65 }
66+ if q.getRecentActivityStmt, err = db.PrepareContext(ctx, getRecentActivity); err != nil {
67+ return nil, fmt.Errorf("error preparing query GetRecentActivity: %w", err)
68+ }
60 if q.getSessionByIDStmt, err = db.PrepareContext(ctx, getSessionByID); err != nil {
69 if q.getSessionByIDStmt, err = db.PrepareContext(ctx, getSessionByID); err != nil {
61 return nil, fmt.Errorf("error preparing query GetSessionByID: %w", err)
70 return nil, fmt.Errorf("error preparing query GetSessionByID: %w", err)
62 }
71 }
72+ if q.getToolUsageStmt, err = db.PrepareContext(ctx, getToolUsage); err != nil {
73+ return nil, fmt.Errorf("error preparing query GetToolUsage: %w", err)
74+ }
75+ if q.getTotalStatsStmt, err = db.PrepareContext(ctx, getTotalStats); err != nil {
76+ return nil, fmt.Errorf("error preparing query GetTotalStats: %w", err)
77+ }
78+ if q.getUsageByDayStmt, err = db.PrepareContext(ctx, getUsageByDay); err != nil {
79+ return nil, fmt.Errorf("error preparing query GetUsageByDay: %w", err)
80+ }
81+ if q.getUsageByDayOfWeekStmt, err = db.PrepareContext(ctx, getUsageByDayOfWeek); err != nil {
82+ return nil, fmt.Errorf("error preparing query GetUsageByDayOfWeek: %w", err)
83+ }
84+ if q.getUsageByHourStmt, err = db.PrepareContext(ctx, getUsageByHour); err != nil {
85+ return nil, fmt.Errorf("error preparing query GetUsageByHour: %w", err)
86+ }
87+ if q.getUsageByModelStmt, err = db.PrepareContext(ctx, getUsageByModel); err != nil {
88+ return nil, fmt.Errorf("error preparing query GetUsageByModel: %w", err)
89+ }
63 if q.listFilesByPathStmt, err = db.PrepareContext(ctx, listFilesByPath); err != nil {
90 if q.listFilesByPathStmt, err = db.PrepareContext(ctx, listFilesByPath); err != nil {
64 return nil, fmt.Errorf("error preparing query ListFilesByPath: %w", err)
91 return nil, fmt.Errorf("error preparing query ListFilesByPath: %w", err)
65 }
92 }
@@ -132,6 +159,11 @@ func (q *Queries) Close() error {
132 err = fmt.Errorf("error closing deleteSessionMessagesStmt: %w", cerr)
159 err = fmt.Errorf("error closing deleteSessionMessagesStmt: %w", cerr)
133 }
160 }
134 }
161 }
162+ if q.getAverageResponseTimeStmt != nil {
163+ if cerr := q.getAverageResponseTimeStmt.Close(); cerr != nil {
164+ err = fmt.Errorf("error closing getAverageResponseTimeStmt: %w", cerr)
165+ }
166+ }
135 if q.getFileStmt != nil {
167 if q.getFileStmt != nil {
136 if cerr := q.getFileStmt.Close(); cerr != nil {
168 if cerr := q.getFileStmt.Close(); cerr != nil {
137 err = fmt.Errorf("error closing getFileStmt: %w", cerr)
169 err = fmt.Errorf("error closing getFileStmt: %w", cerr)
@@ -142,16 +174,56 @@ func (q *Queries) Close() error {
142 err = fmt.Errorf("error closing getFileByPathAndSessionStmt: %w", cerr)
174 err = fmt.Errorf("error closing getFileByPathAndSessionStmt: %w", cerr)
143 }
175 }
144 }
176 }
177+ if q.getHourDayHeatmapStmt != nil {
178+ if cerr := q.getHourDayHeatmapStmt.Close(); cerr != nil {
179+ err = fmt.Errorf("error closing getHourDayHeatmapStmt: %w", cerr)
180+ }
181+ }
145 if q.getMessageStmt != nil {
182 if q.getMessageStmt != nil {
146 if cerr := q.getMessageStmt.Close(); cerr != nil {
183 if cerr := q.getMessageStmt.Close(); cerr != nil {
147 err = fmt.Errorf("error closing getMessageStmt: %w", cerr)
184 err = fmt.Errorf("error closing getMessageStmt: %w", cerr)
148 }
185 }
149 }
186 }
187+ if q.getRecentActivityStmt != nil {
188+ if cerr := q.getRecentActivityStmt.Close(); cerr != nil {
189+ err = fmt.Errorf("error closing getRecentActivityStmt: %w", cerr)
190+ }
191+ }
150 if q.getSessionByIDStmt != nil {
192 if q.getSessionByIDStmt != nil {
151 if cerr := q.getSessionByIDStmt.Close(); cerr != nil {
193 if cerr := q.getSessionByIDStmt.Close(); cerr != nil {
152 err = fmt.Errorf("error closing getSessionByIDStmt: %w", cerr)
194 err = fmt.Errorf("error closing getSessionByIDStmt: %w", cerr)
153 }
195 }
154 }
196 }
197+ if q.getToolUsageStmt != nil {
198+ if cerr := q.getToolUsageStmt.Close(); cerr != nil {
199+ err = fmt.Errorf("error closing getToolUsageStmt: %w", cerr)
200+ }
201+ }
202+ if q.getTotalStatsStmt != nil {
203+ if cerr := q.getTotalStatsStmt.Close(); cerr != nil {
204+ err = fmt.Errorf("error closing getTotalStatsStmt: %w", cerr)
205+ }
206+ }
207+ if q.getUsageByDayStmt != nil {
208+ if cerr := q.getUsageByDayStmt.Close(); cerr != nil {
209+ err = fmt.Errorf("error closing getUsageByDayStmt: %w", cerr)
210+ }
211+ }
212+ if q.getUsageByDayOfWeekStmt != nil {
213+ if cerr := q.getUsageByDayOfWeekStmt.Close(); cerr != nil {
214+ err = fmt.Errorf("error closing getUsageByDayOfWeekStmt: %w", cerr)
215+ }
216+ }
217+ if q.getUsageByHourStmt != nil {
218+ if cerr := q.getUsageByHourStmt.Close(); cerr != nil {
219+ err = fmt.Errorf("error closing getUsageByHourStmt: %w", cerr)
220+ }
221+ }
222+ if q.getUsageByModelStmt != nil {
223+ if cerr := q.getUsageByModelStmt.Close(); cerr != nil {
224+ err = fmt.Errorf("error closing getUsageByModelStmt: %w", cerr)
225+ }
226+ }
155 if q.listFilesByPathStmt != nil {
227 if q.listFilesByPathStmt != nil {
156 if cerr := q.listFilesByPathStmt.Close(); cerr != nil {
228 if cerr := q.listFilesByPathStmt.Close(); cerr != nil {
157 err = fmt.Errorf("error closing listFilesByPathStmt: %w", cerr)
229 err = fmt.Errorf("error closing listFilesByPathStmt: %w", cerr)
@@ -244,10 +316,19 @@ type Queries struct {
244 deleteSessionStmt *sql.Stmt
316 deleteSessionStmt *sql.Stmt
245 deleteSessionFilesStmt *sql.Stmt
317 deleteSessionFilesStmt *sql.Stmt
246 deleteSessionMessagesStmt *sql.Stmt
318 deleteSessionMessagesStmt *sql.Stmt
319+ getAverageResponseTimeStmt *sql.Stmt
247 getFileStmt *sql.Stmt
320 getFileStmt *sql.Stmt
248 getFileByPathAndSessionStmt *sql.Stmt
321 getFileByPathAndSessionStmt *sql.Stmt
322+ getHourDayHeatmapStmt *sql.Stmt
249 getMessageStmt *sql.Stmt
323 getMessageStmt *sql.Stmt
324+ getRecentActivityStmt *sql.Stmt
250 getSessionByIDStmt *sql.Stmt
325 getSessionByIDStmt *sql.Stmt
326+ getToolUsageStmt *sql.Stmt
327+ getTotalStatsStmt *sql.Stmt
328+ getUsageByDayStmt *sql.Stmt
329+ getUsageByDayOfWeekStmt *sql.Stmt
330+ getUsageByHourStmt *sql.Stmt
331+ getUsageByModelStmt *sql.Stmt
251 listFilesByPathStmt *sql.Stmt
332 listFilesByPathStmt *sql.Stmt
252 listFilesBySessionStmt *sql.Stmt
333 listFilesBySessionStmt *sql.Stmt
253 listLatestSessionFilesStmt *sql.Stmt
334 listLatestSessionFilesStmt *sql.Stmt
@@ -271,10 +352,19 @@ func (q *Queries) WithTx(tx *sql.Tx) *Queries {
271 deleteSessionStmt: q.deleteSessionStmt,
352 deleteSessionStmt: q.deleteSessionStmt,
272 deleteSessionFilesStmt: q.deleteSessionFilesStmt,
353 deleteSessionFilesStmt: q.deleteSessionFilesStmt,
273 deleteSessionMessagesStmt: q.deleteSessionMessagesStmt,
354 deleteSessionMessagesStmt: q.deleteSessionMessagesStmt,
355+ getAverageResponseTimeStmt: q.getAverageResponseTimeStmt,
274 getFileStmt: q.getFileStmt,
356 getFileStmt: q.getFileStmt,
275 getFileByPathAndSessionStmt: q.getFileByPathAndSessionStmt,
357 getFileByPathAndSessionStmt: q.getFileByPathAndSessionStmt,
358+ getHourDayHeatmapStmt: q.getHourDayHeatmapStmt,
276 getMessageStmt: q.getMessageStmt,
359 getMessageStmt: q.getMessageStmt,
360+ getRecentActivityStmt: q.getRecentActivityStmt,
277 getSessionByIDStmt: q.getSessionByIDStmt,
361 getSessionByIDStmt: q.getSessionByIDStmt,
362+ getToolUsageStmt: q.getToolUsageStmt,
363+ getTotalStatsStmt: q.getTotalStatsStmt,
364+ getUsageByDayStmt: q.getUsageByDayStmt,
365+ getUsageByDayOfWeekStmt: q.getUsageByDayOfWeekStmt,
366+ getUsageByHourStmt: q.getUsageByHourStmt,
367+ getUsageByModelStmt: q.getUsageByModelStmt,
278 listFilesByPathStmt: q.listFilesByPathStmt,
368 listFilesByPathStmt: q.listFilesByPathStmt,
279 listFilesBySessionStmt: q.listFilesBySessionStmt,
369 listFilesBySessionStmt: q.listFilesBySessionStmt,
280 listLatestSessionFilesStmt: q.listLatestSessionFilesStmt,
370 listLatestSessionFilesStmt: q.listLatestSessionFilesStmt,
internal/db/querier.go+9
@@ -17,10 +17,19 @@ type Querier interface {
17 DeleteSession(ctx context.Context, id string) error
17 DeleteSession(ctx context.Context, id string) error
18 DeleteSessionFiles(ctx context.Context, sessionID string) error
18 DeleteSessionFiles(ctx context.Context, sessionID string) error
19 DeleteSessionMessages(ctx context.Context, sessionID string) error
19 DeleteSessionMessages(ctx context.Context, sessionID string) error
20+ GetAverageResponseTime(ctx context.Context) (int64, error)
20 GetFile(ctx context.Context, id string) (File, error)
21 GetFile(ctx context.Context, id string) (File, error)
21 GetFileByPathAndSession(ctx context.Context, arg GetFileByPathAndSessionParams) (File, error)
22 GetFileByPathAndSession(ctx context.Context, arg GetFileByPathAndSessionParams) (File, error)
23+ GetHourDayHeatmap(ctx context.Context) ([]GetHourDayHeatmapRow, error)
22 GetMessage(ctx context.Context, id string) (Message, error)
24 GetMessage(ctx context.Context, id string) (Message, error)
25+ GetRecentActivity(ctx context.Context) ([]GetRecentActivityRow, error)
23 GetSessionByID(ctx context.Context, id string) (Session, error)
26 GetSessionByID(ctx context.Context, id string) (Session, error)
27+ GetToolUsage(ctx context.Context) ([]GetToolUsageRow, error)
28+ GetTotalStats(ctx context.Context) (GetTotalStatsRow, error)
29+ GetUsageByDay(ctx context.Context) ([]GetUsageByDayRow, error)
30+ GetUsageByDayOfWeek(ctx context.Context) ([]GetUsageByDayOfWeekRow, error)
31+ GetUsageByHour(ctx context.Context) ([]GetUsageByHourRow, error)
32+ GetUsageByModel(ctx context.Context) ([]GetUsageByModelRow, error)
24 ListFilesByPath(ctx context.Context, path string) ([]File, error)
33 ListFilesByPath(ctx context.Context, path string) ([]File, error)
25 ListFilesBySession(ctx context.Context, sessionID string) ([]File, error)
34 ListFilesBySession(ctx context.Context, sessionID string) ([]File, error)
26 ListLatestSessionFiles(ctx context.Context, sessionID string) ([]File, error)
35 ListLatestSessionFiles(ctx context.Context, sessionID string) ([]File, error)
internal/db/sql/stats.sqlnew file+93
@@ -0,0 +1,93 @@
1+-- name: GetUsageByDay :many
2+SELECT
3+ date(created_at, 'unixepoch') as day,
4+ SUM(prompt_tokens) as prompt_tokens,
5+ SUM(completion_tokens) as completion_tokens,
6+ SUM(cost) as cost,
7+ COUNT(*) as session_count
8+FROM sessions
9+WHERE parent_session_id IS NULL
10+GROUP BY date(created_at, 'unixepoch')
11+ORDER BY day DESC;
12+
13+-- name: GetUsageByModel :many
14+SELECT
15+ COALESCE(model, 'unknown') as model,
16+ COALESCE(provider, 'unknown') as provider,
17+ COUNT(*) as message_count
18+FROM messages
19+WHERE role = 'assistant'
20+GROUP BY model, provider
21+ORDER BY message_count DESC;
22+
23+-- name: GetUsageByHour :many
24+SELECT
25+ CAST(strftime('%H', created_at, 'unixepoch') AS INTEGER) as hour,
26+ COUNT(*) as session_count
27+FROM sessions
28+WHERE parent_session_id IS NULL
29+GROUP BY hour
30+ORDER BY hour;
31+
32+-- name: GetUsageByDayOfWeek :many
33+SELECT
34+ CAST(strftime('%w', created_at, 'unixepoch') AS INTEGER) as day_of_week,
35+ COUNT(*) as session_count,
36+ SUM(prompt_tokens) as prompt_tokens,
37+ SUM(completion_tokens) as completion_tokens
38+FROM sessions
39+WHERE parent_session_id IS NULL
40+GROUP BY day_of_week
41+ORDER BY day_of_week;
42+
43+-- name: GetTotalStats :one
44+SELECT
45+ COUNT(*) as total_sessions,
46+ COALESCE(SUM(prompt_tokens), 0) as total_prompt_tokens,
47+ COALESCE(SUM(completion_tokens), 0) as total_completion_tokens,
48+ COALESCE(SUM(cost), 0) as total_cost,
49+ COALESCE(SUM(message_count), 0) as total_messages,
50+ COALESCE(AVG(prompt_tokens + completion_tokens), 0) as avg_tokens_per_session,
51+ COALESCE(AVG(message_count), 0) as avg_messages_per_session
52+FROM sessions
53+WHERE parent_session_id IS NULL;
54+
55+-- name: GetRecentActivity :many
56+SELECT
57+ date(created_at, 'unixepoch') as day,
58+ COUNT(*) as session_count,
59+ SUM(prompt_tokens + completion_tokens) as total_tokens,
60+ SUM(cost) as cost
61+FROM sessions
62+WHERE parent_session_id IS NULL
63+ AND created_at >= strftime('%s', 'now', '-30 days')
64+GROUP BY date(created_at, 'unixepoch')
65+ORDER BY day ASC;
66+
67+-- name: GetAverageResponseTime :one
68+SELECT
69+ CAST(COALESCE(AVG(finished_at - created_at), 0) AS INTEGER) as avg_response_seconds
70+FROM messages
71+WHERE role = 'assistant'
72+ AND finished_at IS NOT NULL
73+ AND finished_at > created_at;
74+
75+-- name: GetToolUsage :many
76+SELECT
77+ json_extract(value, '$.data.name') as tool_name,
78+ COUNT(*) as call_count
79+FROM messages, json_each(parts)
80+WHERE json_extract(value, '$.type') = 'tool_call'
81+ AND json_extract(value, '$.data.name') IS NOT NULL
82+GROUP BY tool_name
83+ORDER BY call_count DESC;
84+
85+-- name: GetHourDayHeatmap :many
86+SELECT
87+ CAST(strftime('%w', created_at, 'unixepoch') AS INTEGER) as day_of_week,
88+ CAST(strftime('%H', created_at, 'unixepoch') AS INTEGER) as hour,
89+ COUNT(*) as session_count
90+FROM sessions
91+WHERE parent_session_id IS NULL
92+GROUP BY day_of_week, hour
93+ORDER BY day_of_week, hour;
internal/db/stats.sql.gonew file+367
@@ -0,0 +1,367 @@
1+// Code generated by sqlc. DO NOT EDIT.
2+// versions:
3+// sqlc v1.30.0
4+// source: stats.sql
5+
6+package db
7+
8+import (
9+ "context"
10+ "database/sql"
11+)
12+
13+const getAverageResponseTime = `-- name: GetAverageResponseTime :one
14+SELECT
15+ CAST(COALESCE(AVG(finished_at - created_at), 0) AS INTEGER) as avg_response_seconds
16+FROM messages
17+WHERE role = 'assistant'
18+ AND finished_at IS NOT NULL
19+ AND finished_at > created_at
20+`
21+
22+func (q *Queries) GetAverageResponseTime(ctx context.Context) (int64, error) {
23+ row := q.queryRow(ctx, q.getAverageResponseTimeStmt, getAverageResponseTime)
24+ var avg_response_seconds int64
25+ err := row.Scan(&avg_response_seconds)
26+ return avg_response_seconds, err
27+}
28+
29+const getHourDayHeatmap = `-- name: GetHourDayHeatmap :many
30+SELECT
31+ CAST(strftime('%w', created_at, 'unixepoch') AS INTEGER) as day_of_week,
32+ CAST(strftime('%H', created_at, 'unixepoch') AS INTEGER) as hour,
33+ COUNT(*) as session_count
34+FROM sessions
35+WHERE parent_session_id IS NULL
36+GROUP BY day_of_week, hour
37+ORDER BY day_of_week, hour
38+`
39+
40+type GetHourDayHeatmapRow struct {
41+ DayOfWeek int64 `json:"day_of_week"`
42+ Hour int64 `json:"hour"`
43+ SessionCount int64 `json:"session_count"`
44+}
45+
46+func (q *Queries) GetHourDayHeatmap(ctx context.Context) ([]GetHourDayHeatmapRow, error) {
47+ rows, err := q.query(ctx, q.getHourDayHeatmapStmt, getHourDayHeatmap)
48+ if err != nil {
49+ return nil, err
50+ }
51+ defer rows.Close()
52+ items := []GetHourDayHeatmapRow{}
53+ for rows.Next() {
54+ var i GetHourDayHeatmapRow
55+ if err := rows.Scan(&i.DayOfWeek, &i.Hour, &i.SessionCount); err != nil {
56+ return nil, err
57+ }
58+ items = append(items, i)
59+ }
60+ if err := rows.Close(); err != nil {
61+ return nil, err
62+ }
63+ if err := rows.Err(); err != nil {
64+ return nil, err
65+ }
66+ return items, nil
67+}
68+
69+const getRecentActivity = `-- name: GetRecentActivity :many
70+SELECT
71+ date(created_at, 'unixepoch') as day,
72+ COUNT(*) as session_count,
73+ SUM(prompt_tokens + completion_tokens) as total_tokens,
74+ SUM(cost) as cost
75+FROM sessions
76+WHERE parent_session_id IS NULL
77+ AND created_at >= strftime('%s', 'now', '-30 days')
78+GROUP BY date(created_at, 'unixepoch')
79+ORDER BY day ASC
80+`
81+
82+type GetRecentActivityRow struct {
83+ Day interface{} `json:"day"`
84+ SessionCount int64 `json:"session_count"`
85+ TotalTokens sql.NullFloat64 `json:"total_tokens"`
86+ Cost sql.NullFloat64 `json:"cost"`
87+}
88+
89+func (q *Queries) GetRecentActivity(ctx context.Context) ([]GetRecentActivityRow, error) {
90+ rows, err := q.query(ctx, q.getRecentActivityStmt, getRecentActivity)
91+ if err != nil {
92+ return nil, err
93+ }
94+ defer rows.Close()
95+ items := []GetRecentActivityRow{}
96+ for rows.Next() {
97+ var i GetRecentActivityRow
98+ if err := rows.Scan(
99+ &i.Day,
100+ &i.SessionCount,
101+ &i.TotalTokens,
102+ &i.Cost,
103+ ); err != nil {
104+ return nil, err
105+ }
106+ items = append(items, i)
107+ }
108+ if err := rows.Close(); err != nil {
109+ return nil, err
110+ }
111+ if err := rows.Err(); err != nil {
112+ return nil, err
113+ }
114+ return items, nil
115+}
116+
117+const getToolUsage = `-- name: GetToolUsage :many
118+SELECT
119+ json_extract(value, '$.data.name') as tool_name,
120+ COUNT(*) as call_count
121+FROM messages, json_each(parts)
122+WHERE json_extract(value, '$.type') = 'tool_call'
123+ AND json_extract(value, '$.data.name') IS NOT NULL
124+GROUP BY tool_name
125+ORDER BY call_count DESC
126+`
127+
128+type GetToolUsageRow struct {
129+ ToolName interface{} `json:"tool_name"`
130+ CallCount int64 `json:"call_count"`
131+}
132+
133+func (q *Queries) GetToolUsage(ctx context.Context) ([]GetToolUsageRow, error) {
134+ rows, err := q.query(ctx, q.getToolUsageStmt, getToolUsage)
135+ if err != nil {
136+ return nil, err
137+ }
138+ defer rows.Close()
139+ items := []GetToolUsageRow{}
140+ for rows.Next() {
141+ var i GetToolUsageRow
142+ if err := rows.Scan(&i.ToolName, &i.CallCount); err != nil {
143+ return nil, err
144+ }
145+ items = append(items, i)
146+ }
147+ if err := rows.Close(); err != nil {
148+ return nil, err
149+ }
150+ if err := rows.Err(); err != nil {
151+ return nil, err
152+ }
153+ return items, nil
154+}
155+
156+const getTotalStats = `-- name: GetTotalStats :one
157+SELECT
158+ COUNT(*) as total_sessions,
159+ COALESCE(SUM(prompt_tokens), 0) as total_prompt_tokens,
160+ COALESCE(SUM(completion_tokens), 0) as total_completion_tokens,
161+ COALESCE(SUM(cost), 0) as total_cost,
162+ COALESCE(SUM(message_count), 0) as total_messages,
163+ COALESCE(AVG(prompt_tokens + completion_tokens), 0) as avg_tokens_per_session,
164+ COALESCE(AVG(message_count), 0) as avg_messages_per_session
165+FROM sessions
166+WHERE parent_session_id IS NULL
167+`
168+
169+type GetTotalStatsRow struct {
170+ TotalSessions int64 `json:"total_sessions"`
171+ TotalPromptTokens interface{} `json:"total_prompt_tokens"`
172+ TotalCompletionTokens interface{} `json:"total_completion_tokens"`
173+ TotalCost interface{} `json:"total_cost"`
174+ TotalMessages interface{} `json:"total_messages"`
175+ AvgTokensPerSession interface{} `json:"avg_tokens_per_session"`
176+ AvgMessagesPerSession interface{} `json:"avg_messages_per_session"`
177+}
178+
179+func (q *Queries) GetTotalStats(ctx context.Context) (GetTotalStatsRow, error) {
180+ row := q.queryRow(ctx, q.getTotalStatsStmt, getTotalStats)
181+ var i GetTotalStatsRow
182+ err := row.Scan(
183+ &i.TotalSessions,
184+ &i.TotalPromptTokens,
185+ &i.TotalCompletionTokens,
186+ &i.TotalCost,
187+ &i.TotalMessages,
188+ &i.AvgTokensPerSession,
189+ &i.AvgMessagesPerSession,
190+ )
191+ return i, err
192+}
193+
194+const getUsageByDay = `-- name: GetUsageByDay :many
195+SELECT
196+ date(created_at, 'unixepoch') as day,
197+ SUM(prompt_tokens) as prompt_tokens,
198+ SUM(completion_tokens) as completion_tokens,
199+ SUM(cost) as cost,
200+ COUNT(*) as session_count
201+FROM sessions
202+WHERE parent_session_id IS NULL
203+GROUP BY date(created_at, 'unixepoch')
204+ORDER BY day DESC
205+`
206+
207+type GetUsageByDayRow struct {
208+ Day interface{} `json:"day"`
209+ PromptTokens sql.NullFloat64 `json:"prompt_tokens"`
210+ CompletionTokens sql.NullFloat64 `json:"completion_tokens"`
211+ Cost sql.NullFloat64 `json:"cost"`
212+ SessionCount int64 `json:"session_count"`
213+}
214+
215+func (q *Queries) GetUsageByDay(ctx context.Context) ([]GetUsageByDayRow, error) {
216+ rows, err := q.query(ctx, q.getUsageByDayStmt, getUsageByDay)
217+ if err != nil {
218+ return nil, err
219+ }
220+ defer rows.Close()
221+ items := []GetUsageByDayRow{}
222+ for rows.Next() {
223+ var i GetUsageByDayRow
224+ if err := rows.Scan(
225+ &i.Day,
226+ &i.PromptTokens,
227+ &i.CompletionTokens,
228+ &i.Cost,
229+ &i.SessionCount,
230+ ); err != nil {
231+ return nil, err
232+ }
233+ items = append(items, i)
234+ }
235+ if err := rows.Close(); err != nil {
236+ return nil, err
237+ }
238+ if err := rows.Err(); err != nil {
239+ return nil, err
240+ }
241+ return items, nil
242+}
243+
244+const getUsageByDayOfWeek = `-- name: GetUsageByDayOfWeek :many
245+SELECT
246+ CAST(strftime('%w', created_at, 'unixepoch') AS INTEGER) as day_of_week,
247+ COUNT(*) as session_count,
248+ SUM(prompt_tokens) as prompt_tokens,
249+ SUM(completion_tokens) as completion_tokens
250+FROM sessions
251+WHERE parent_session_id IS NULL
252+GROUP BY day_of_week
253+ORDER BY day_of_week
254+`
255+
256+type GetUsageByDayOfWeekRow struct {
257+ DayOfWeek int64 `json:"day_of_week"`
258+ SessionCount int64 `json:"session_count"`
259+ PromptTokens sql.NullFloat64 `json:"prompt_tokens"`
260+ CompletionTokens sql.NullFloat64 `json:"completion_tokens"`
261+}
262+
263+func (q *Queries) GetUsageByDayOfWeek(ctx context.Context) ([]GetUsageByDayOfWeekRow, error) {
264+ rows, err := q.query(ctx, q.getUsageByDayOfWeekStmt, getUsageByDayOfWeek)
265+ if err != nil {
266+ return nil, err
267+ }
268+ defer rows.Close()
269+ items := []GetUsageByDayOfWeekRow{}
270+ for rows.Next() {
271+ var i GetUsageByDayOfWeekRow
272+ if err := rows.Scan(
273+ &i.DayOfWeek,
274+ &i.SessionCount,
275+ &i.PromptTokens,
276+ &i.CompletionTokens,
277+ ); err != nil {
278+ return nil, err
279+ }
280+ items = append(items, i)
281+ }
282+ if err := rows.Close(); err != nil {
283+ return nil, err
284+ }
285+ if err := rows.Err(); err != nil {
286+ return nil, err
287+ }
288+ return items, nil
289+}
290+
291+const getUsageByHour = `-- name: GetUsageByHour :many
292+SELECT
293+ CAST(strftime('%H', created_at, 'unixepoch') AS INTEGER) as hour,
294+ COUNT(*) as session_count
295+FROM sessions
296+WHERE parent_session_id IS NULL
297+GROUP BY hour
298+ORDER BY hour
299+`
300+
301+type GetUsageByHourRow struct {
302+ Hour int64 `json:"hour"`
303+ SessionCount int64 `json:"session_count"`
304+}
305+
306+func (q *Queries) GetUsageByHour(ctx context.Context) ([]GetUsageByHourRow, error) {
307+ rows, err := q.query(ctx, q.getUsageByHourStmt, getUsageByHour)
308+ if err != nil {
309+ return nil, err
310+ }
311+ defer rows.Close()
312+ items := []GetUsageByHourRow{}
313+ for rows.Next() {
314+ var i GetUsageByHourRow
315+ if err := rows.Scan(&i.Hour, &i.SessionCount); err != nil {
316+ return nil, err
317+ }
318+ items = append(items, i)
319+ }
320+ if err := rows.Close(); err != nil {
321+ return nil, err
322+ }
323+ if err := rows.Err(); err != nil {
324+ return nil, err
325+ }
326+ return items, nil
327+}
328+
329+const getUsageByModel = `-- name: GetUsageByModel :many
330+SELECT
331+ COALESCE(model, 'unknown') as model,
332+ COALESCE(provider, 'unknown') as provider,
333+ COUNT(*) as message_count
334+FROM messages
335+WHERE role = 'assistant'
336+GROUP BY model, provider
337+ORDER BY message_count DESC
338+`
339+
340+type GetUsageByModelRow struct {
341+ Model string `json:"model"`
342+ Provider string `json:"provider"`
343+ MessageCount int64 `json:"message_count"`
344+}
345+
346+func (q *Queries) GetUsageByModel(ctx context.Context) ([]GetUsageByModelRow, error) {
347+ rows, err := q.query(ctx, q.getUsageByModelStmt, getUsageByModel)
348+ if err != nil {
349+ return nil, err
350+ }
351+ defer rows.Close()
352+ items := []GetUsageByModelRow{}
353+ for rows.Next() {
354+ var i GetUsageByModelRow
355+ if err := rows.Scan(&i.Model, &i.Provider, &i.MessageCount); err != nil {
356+ return nil, err
357+ }
358+ items = append(items, i)
359+ }
360+ if err := rows.Close(); err != nil {
361+ return nil, err
362+ }
363+ if err := rows.Err(); err != nil {
364+ return nil, err
365+ }
366+ return items, nil
367+}