memos/store/seed/sqlite/01__dump.sql

242 lines
56 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- ============================================================================
-- Memos seed data
--
-- Login on the demo instance is SSO-only, so visitors always arrive as a
-- brand-new user with an empty timeline. All seed content is therefore
-- designed to be consumed through Explore:
-- * PUBLIC memos — the logged-out storefront (screenshots, first visit)
-- * PROTECTED memos — the reward for signing in; Explore visibly gains
-- content after login, teaching the visibility model
-- * PRIVATE / SPACE — none seeded: visitors cannot sign in as seed users
-- or access their Space memberships
--
-- Cast (passwords were random and discarded — seed users are NPCs):
-- 1 steven (ADMIN) — Memos maintainer; welcome, sponsors, changelog, tips
-- 2 johnny (USER) — backend dev & reader; TILs, cheat sheets, weekly review
-- 3 bob (USER) — traveling photographer; locations, photo attachment
-- 4 sam (USER) — reader & cook; books, recipes, movie lists
-- ============================================================================
INSERT INTO user (id,username,role,nickname,description,password_hash) VALUES(1,'steven','ADMIN','Steven','Creator & maintainer of Memos. Product updates and notes from building it 🪴','$2y$12$A/8h4XS6hQmRVVSRFQHsR.wWVJbSG40avhuphOBdK5ws99W1kunr6');
INSERT INTO user (id,username,role,nickname,description,password_hash) VALUES(2,'johnny','USER','Johnny','Backend dev. Notes about Git, Go, and whatever I broke today 🔧','$2y$12$CaqLYlvpHjL1qbVNny0lre59ctT2doIvVLh4Pn1yipsDUtbcbeum6');
INSERT INTO user (id,username,role,nickname,description,password_hash) VALUES(3,'bob','USER','Bob','Traveling photographer. Writing places down before I forget them 🌍','$2y$12$A/8h4XS6hQmRVVSRFQHsR.wWVJbSG40avhuphOBdK5ws99W1kunr6');
INSERT INTO user (id,username,role,nickname,description,password_hash) VALUES(4,'sam','USER','Sam','Reader, cook, maker of lists 📚🍜','$2y$12$CaqLYlvpHjL1qbVNny0lre59ctT2doIvVLh4Pn1yipsDUtbcbeum6');
-- ============================================================================
-- Spaces — placement and audience are independent. Public and protected memos
-- remain readable to non-members, but their Space names and icons are only
-- available to their authors and members. New SSO users are not auto-enrolled.
-- ============================================================================
INSERT INTO space (id,uid,title,description,payload) VALUES(1,'updates','Updates','Announcements and tips.','{"icon":{"lucide":"sprout"}}');
INSERT INTO space (id,uid,title,description,payload) VALUES(2,'dev','Dev','Projects and technical notes.','{"icon":{"lucide":"wrench"}}');
INSERT INTO space (id,uid,title,description,payload) VALUES(3,'travel','Travel','Trips and photography.','{"icon":{"emoji":"🌍"}}');
INSERT INTO space (id,uid,title,description,payload) VALUES(4,'reading','Reading','Books and quotes.','{"icon":{"emoji":"📚"}}');
-- Updates: Steven manages announcements; everyone participates.
INSERT INTO space_member (space_id,user_id,status,role) VALUES(1,1,'ACTIVE','ADMIN');
INSERT INTO space_member (space_id,user_id,status,role) VALUES(1,2,'ACTIVE','USER');
INSERT INTO space_member (space_id,user_id,status,role) VALUES(1,3,'ACTIVE','USER');
INSERT INTO space_member (space_id,user_id,status,role) VALUES(1,4,'ACTIVE','USER');
-- Dev: Johnny leads, with Steven and Bob.
INSERT INTO space_member (space_id,user_id,status,role) VALUES(2,2,'ACTIVE','ADMIN');
INSERT INTO space_member (space_id,user_id,status,role) VALUES(2,1,'ACTIVE','USER');
INSERT INTO space_member (space_id,user_id,status,role) VALUES(2,3,'ACTIVE','USER');
-- Travel: Bob leads, with Steven and Sam.
INSERT INTO space_member (space_id,user_id,status,role) VALUES(3,3,'ACTIVE','ADMIN');
INSERT INTO space_member (space_id,user_id,status,role) VALUES(3,1,'ACTIVE','USER');
INSERT INTO space_member (space_id,user_id,status,role) VALUES(3,4,'ACTIVE','USER');
-- Reading: Sam leads, with Steven and Johnny.
INSERT INTO space_member (space_id,user_id,status,role) VALUES(4,4,'ACTIVE','ADMIN');
INSERT INTO space_member (space_id,user_id,status,role) VALUES(4,1,'ACTIVE','USER');
INSERT INTO space_member (space_id,user_id,status,role) VALUES(4,2,'ACTIVE','USER');
-- Recipes and movies stay unassigned; a memo does not need a Space.
-- ============================================================================
-- Pinned memos (Welcome leads — newest created_ts in the pinned section)
-- ============================================================================
-- 1. Welcome (steven, pinned) — orientation + SSO call-to-action + protected teaser
INSERT INTO memo (id,uid,creator_id,created_ts,updated_ts,content,visibility,pinned,payload,space_id) VALUES(1,'welcome0000001',1,strftime('%s','now','-2 days'),strftime('%s','now','-2 days'),replace('# Welcome to Memos 👋\n\nHi, I''m Steven — I build Memos. Welcome to our shared home for product updates, projects, trips, and reading notes.\n\nMemos is an open-source, self-hosted home for short-form thoughts. Capture quickly, organize lightly, own everything.\n\n> Most apps treat notes like documents. Memos treats them like thoughts — small, timestamped, searchable.\n\n## Make yourself at home\n\n- [ ] Scroll this Explore feed — everything here was written with Memos\n- [ ] React to a memo you like (🎉 works great on this one)\n- [ ] **Sign in** to write your own memos. Create a Space for a project or a group.\n- [ ] Write your first memo. One sentence is plenty. That''s the point.\n- [ ] Like it? Star [the repo](https://github.com/usememos/memos) ⭐\n\n🔒 *Psst — a few memos on this instance are hidden until you sign in. Anyone signed in can read them.*\n\n## What Memos can do\n\n| Feature | Where to see it |\n|---------|-----------------|\n| **Markdown** | Everywhere — tables, `code`, task lists, quotes |\n| **Tags** | `#dev/git` — nested tags grow a tree in the sidebar |\n| **Spaces** | Group related memos and invite people to contribute |\n| **Space icons** | Choose an emoji or a symbol for each Space |\n| **Comments & reactions** | Right under this memo 👇 |\n| **Memo references** | Johnny''s weekly review links back to his week |\n| **Attachments** | Bob''s golden-hour art from the coastal trail |\n| **Locations** | Look for the 📍 pins |\n| **Visibility** | Public, protected, private, or Space members — chosen per memo |\n\n## Take it home\n\n```bash\ndocker run -d -p 5230:5230 -v ~/.memos:/var/opt/memos neosmemo/memos:stable\n```\n\nYour data lives in one SQLite file, on your machine. #welcome #getting-started','\n',char(10)),'PUBLIC',1,'{"tags":["welcome","getting-started"],"property":{"hasLink":true,"hasCode":true,"hasTaskList":true,"hasIncompleteTasks":true}}',1);
-- 2. Sponsors (steven, pinned) — sits below Welcome (older created_ts)
INSERT INTO memo (id,uid,creator_id,created_ts,updated_ts,content,visibility,pinned,payload,space_id) VALUES(2,'sponsors000001',1,strftime('%s','now','-6 days'),strftime('%s','now','-6 days'),replace('Memos is free and open source, kept independent by its sponsors — no ads, no telemetry, no paywalls. 🙏 If you build with Memos, please consider supporting them in return.\n\n## ⭐ Sponsors\n\n<a href="https://coderabbit.link/usememos" target="_blank" rel="noopener"><img src="https://victorious-bubble-f69a016683.media.strapiapp.com/Orange_Typemark_43bf516c9d.svg" alt="CodeRabbit" height="44" /></a>\n\nCut code review time & bugs in half, instantly. [coderabbit.link/usememos →](https://coderabbit.link/usememos)\n\n---\n\n**SSD Nodes** — Affordable VPS hosting for self-hosters. [ssdnodes.com →](https://ssdnodes.com/?utm_source=memos&utm_medium=sponsor)\n\n---\n\n**TestMu AI** — The world’s first full-stack Agentic AI Quality Engineering platform. [testmuai.com →](https://www.testmuai.com/?utm_medium=sponsor&utm_source=memos)\n\n---\n\nWant to see your company here? Reach out via [GitHub Sponsors](https://github.com/sponsors/usememos).\n\n#sponsors','\n',char(10)),'PUBLIC',1,'{"tags":["sponsors"],"property":{"hasLink":true}}',1);
-- ============================================================================
-- Public timeline — mixed lengths, four voices, dense in the last 48 hours
-- and thinning out toward -22 days so the feed reads as a living instance
-- ============================================================================
-- 10. Steven: official Chrome extension launch (featured first in Explore)
INSERT INTO memo (id,uid,creator_id,created_ts,updated_ts,content,visibility,payload,space_id) VALUES(10,'webclipper0001',1,strftime('%s','now','-30 minutes'),strftime('%s','now','-30 minutes'),replace('# ✂️ Memos Web Clipper for Chrome\n\nThe ***official*** Memos Web Clipper turns the page you''re reading into a source-linked memo in under five seconds.\n\n[Add Memos Web Clipper to Chrome →](https://chromewebstore.google.com/detail/memos-web-clipper/nebaoebnljalfegiidibihhkebeiklbl)\n\n| Capture from Chrome | What lands in Memos |\n|---------------------|---------------------|\n| Current page | Title, summary, and source link |\n| Text selection | Quoted excerpt with its source |\n| Selected image | A real attachment on your instance |\n\nEdit the generated memo, choose its visibility, or customize the template and default tags before saving.\n\n### Private by design\n\nThe clipper sends captured content only to the self-hosted Memos instance you connect — and only when you save. No analytics, third-party servers, or tracking. #memos/extensions','\n',char(10)),'PUBLIC','{"tags":["memos","memos/extensions"],"property":{"hasLink":true}}',1);
-- 3. Bob: photo memo with an image attachment + location
INSERT INTO memo (id,uid,creator_id,created_ts,updated_ts,content,visibility,payload,space_id) VALUES(3,'goldenhour0001',3,strftime('%s','now','-3 hours'),strftime('%s','now','-3 hours'),'Golden hour on the coastal trail tonight. The camera couldn''t hold the colors, so here''s my minimal-art rendition instead 🎨 #travel/hikes','PUBLIC','{"tags":["travel","travel/hikes"],"property":{"hasLink":false},"location":{"placeholder":"Point Reyes, California, United States","latitude":37.9954,"longitude":-123.0204}}',3);
-- 27. Steven: introducing Spaces and custom icons
INSERT INTO memo (id,uid,creator_id,created_ts,updated_ts,content,visibility,payload,space_id) VALUES(27,'v030changelog1',1,strftime('%s','now','-6 hours'),strftime('%s','now','-6 hours'),replace('## Spaces for the things we share\n\nWe''ve organized our memos into four Spaces:\n\n- **Updates** — announcements and tips\n- **Dev** — projects and technical notes\n- **Travel** — trips and photography\n- **Reading** — books and quotes\n\nEach Space has its own members and an emoji or symbol to help you recognize it. Tags still work inside Spaces, and memos can stay unassigned.\n\nA public memo remains public when placed in a Space. Choose Space visibility to share it only with that Space''s members.\n\nCreate your own Space, or accept an invitation to join an existing one.\n\nMore updates: [release notes](https://github.com/usememos/memos/releases). #memos/changelog','\n',char(10)),'PUBLIC','{"tags":["memos","memos/changelog"],"property":{"hasLink":true}}',1);
-- 4. Sam: one-line book quote
INSERT INTO memo (id,uid,creator_id,created_ts,updated_ts,content,visibility,payload,space_id) VALUES(4,'samquote000001',4,strftime('%s','now','-7 hours'),strftime('%s','now','-7 hours'),replace('> "We tell ourselves stories in order to live." — Joan Didion\n\nBeen thinking about this all morning. #books','\n',char(10)),'PUBLIC','{"tags":["books"],"property":{"hasLink":false}}',4);
-- 5. Johnny: weekly review — REFERENCES his memos from the past week (see memo_relation)
INSERT INTO memo (id,uid,creator_id,created_ts,updated_ts,content,visibility,payload,space_id) VALUES(5,'johnnyweekly001',2,strftime('%s','now','-22 hours'),strftime('%s','now','-22 hours'),replace('## 🗓️ Week 28 review\n\n**Shipped:** v0.2 of the side project finally went out.\n\n**Learned:** the single-file branch diff trick — small thing, saves me daily.\n\n**Reading:** still working through *Deep Work*. The no-Slack-before-11am rule survived its second week.\n\n**Next week:** actually write the digest CLI I keep talking about, or stop talking about it.\n\nLinked the memos below so future me can retrace the week. #weekly','\n',char(10)),'PUBLIC','{"tags":["weekly"],"property":{"hasLink":false}}',2);
-- 6. Steven: short product tip
INSERT INTO memo (id,uid,creator_id,created_ts,updated_ts,content,visibility,payload,space_id) VALUES(6,'tagtipmemo0001',1,strftime('%s','now','-26 hours'),strftime('%s','now','-26 hours'),'Tip: tags are just typed inline — `#like/this` — and nested ones grow a tree in the sidebar. No setup, no tag manager. #getting-started','PUBLIC','{"tags":["getting-started"],"property":{"hasLink":false}}',1);
-- 7. Johnny: shipped-it note
INSERT INTO memo (id,uid,creator_id,created_ts,updated_ts,content,visibility,payload,space_id) VALUES(7,'johnnyshipped01',2,strftime('%s','now','-2 days','+3 hours'),strftime('%s','now','-2 days','+3 hours'),'Shipped v0.2 of my side project tonight 🚀 Rewrote the sync engine and cut startup time in half. Scrolling back through my own #dev/til memos made the changelog write itself.','PUBLIC','{"tags":["dev","dev/til"],"property":{"hasLink":false}}',2);
-- 8. Johnny: short TIL with a code block (referenced by the weekly review)
INSERT INTO memo (id,uid,creator_id,created_ts,updated_ts,content,visibility,payload,space_id) VALUES(8,'johnnytilgit001',2,strftime('%s','now','-3 days'),strftime('%s','now','-3 days'),replace('TIL you can diff a single file between branches — no checkout, no stash dance:\n\n```bash\ngit diff main..feature -- path/to/file.go\n```\n\n#dev/til #dev/git','\n',char(10)),'PUBLIC','{"tags":["dev","dev/til","dev/git"],"property":{"hasLink":false,"hasCode":true}}',2);
-- 29. Johnny: link/bookmark capture — a core Memos use case
INSERT INTO memo (id,uid,creator_id,created_ts,updated_ts,content,visibility,payload,space_id) VALUES(29,'johnnybookmark1',2,strftime('%s','now','-32 hours'),strftime('%s','now','-32 hours'),'Weekend read, bookmarking before I lose it: [SQLite: 35% faster than the filesystem](https://sqlite.org/fasterthanfs.html) — makes me feel better about my entire digital life being one .db file 😄 #dev/reading','PUBLIC','{"tags":["dev","dev/reading"],"property":{"hasLink":true}}',2);
-- 9. Sam: recipe with a task list
INSERT INTO memo (id,uid,creator_id,created_ts,updated_ts,content,visibility,payload) VALUES(9,'samramen000001',4,strftime('%s','now','-4 days'),strftime('%s','now','-4 days'),replace('## 🍜 Midnight miso ramen (15 minutes)\n\nFor nights when the book was too good to stop reading.\n\n- [x] Dashi or veg stock, 500ml\n- [x] Miso paste, 2 big spoons\n- [x] Noodles, one nest\n- [x] Soft egg — 6½ minutes, exactly\n- [ ] Scallions (always forget the scallions)\n\nSteep the miso, don''t boil it. That''s the whole secret. #cooking','\n',char(10)),'PUBLIC','{"tags":["cooking"],"property":{"hasLink":false,"hasTaskList":true,"hasIncompleteTasks":true}}');
-- 30. Steven: compact Markdown rendering check framed as maintainer dogfooding
INSERT INTO memo (id,uid,creator_id,created_ts,updated_ts,content,visibility,payload,space_id) VALUES(30,'rendertest0001',1,strftime('%s','now','-10 days'),strftime('%s','now','-10 days'),replace('## 🧪 Markdown rendering check #memos/dev\n\nA quick smoke test I open after releases:\n\n**Bold**, *italic*, ~~strikethrough~~, `inline code`, and a [docs link](https://www.usememos.com/docs).\n\n> Simple notes should render beautifully.\n\n```go\nfmt.Println("syntax highlighting ✓")\n```\n\n| Check | Status |\n|-------|--------|\n| Text styles | ✅ |\n| Code blocks | ✅ |\n| Tables | ✅ |\n\n- [x] Check desktop\n- [x] Check mobile\n- [ ] Ship the next release','\n',char(10)),'PUBLIC','{"tags":["memos","memos/dev"],"property":{"hasLink":true,"hasCode":true,"hasTaskList":true,"hasIncompleteTasks":true}}',1);
-- 11. Sam: movie watchlist with a table
INSERT INTO memo (id,uid,creator_id,created_ts,updated_ts,content,visibility,payload) VALUES(11,'sammovies00001',4,strftime('%s','now','-9 days'),strftime('%s','now','-9 days'),replace('## 🎬 Movie catch-up #movies\n\nWorking through films I''ve been meaning to watch for, uh, years.\n\n| Movie | Status | Rating |\n|-------|--------|--------|\n| The Grand Budapest Hotel | ✅ Watched | ⭐⭐⭐⭐⭐ |\n| Spirited Away | ✅ Watched | ⭐⭐⭐⭐⭐ |\n| Everything Everywhere All at Once | ✅ Watched | ⭐⭐⭐⭐⭐ |\n| Dune: Part Two | 📅 This weekend | — |\n| Oppenheimer | 📋 Queued | — |\n\n**Spirited Away**: cried twice, no regrets. **Everything Everywhere**: went in cold, did not expect the bagel.\n\nNext month: full Miyazaki marathon 🎨 Taking suggestions for where to start.','\n',char(10)),'PUBLIC','{"tags":["movies"],"property":{"hasLink":false}}');
-- 12. Bob: short travel journal + location
INSERT INTO memo (id,uid,creator_id,created_ts,updated_ts,content,visibility,payload,space_id) VALUES(12,'bobnighttrain1',3,strftime('%s','now','-12 days'),strftime('%s','now','-12 days'),'Overnight train from Oslo to Bergen. Woke at 5am to fjords in fog and couldn''t go back to sleep. Some views are worth the bad coffee ☕ #travel','PUBLIC','{"tags":["travel"],"property":{"hasLink":false},"location":{"placeholder":"Bergen, Vestland, Norway","latitude":60.3913,"longitude":5.3221}}',3);
-- 13. Bob: travel bucket list + location
INSERT INTO memo (id,uid,creator_id,created_ts,updated_ts,content,visibility,payload,space_id) VALUES(13,'bobbucketlist1',3,strftime('%s','now','-13 days'),strftime('%s','now','-13 days'),replace('## 🌍 My travel bucket list #travel/bucketlist\n\n> Writing this from a tiny café near the Seine. Will keep updating after each trip. 📍\n\n### Been\n- [x] Paris, France — the croissants ruined every croissant after\n- [x] Shanghai, China — modern skyline next to thousand-year-old temples, somehow it works\n- [x] Grand Canyon, USA — photos do not do it justice, and I say that professionally\n- [x] Barcelona, Spain — Gaudí''s buildings look grown, not built\n\n### Next\n- [ ] Northern Lights in Iceland — booking for winter, *finally*\n- [ ] Safari in Tanzania\n- [ ] Great Barrier Reef, before it gets worse\n- [ ] New Zealand road trip — south island, two weeks minimum','\n',char(10)),'PUBLIC','{"tags":["travel","travel/bucketlist"],"property":{"hasTaskList":true,"hasIncompleteTasks":true},"location":{"placeholder":"Paris, Île-de-France, France","latitude":48.8566,"longitude":2.3522}}',3);
-- 14. Johnny: git cheat sheet — long-form anchor with code blocks
INSERT INTO memo (id,uid,creator_id,created_ts,updated_ts,content,visibility,payload,space_id) VALUES(14,'johnnygitcheat1',2,strftime('%s','now','-17 days'),strftime('%s','now','-17 days'),replace('## ⚡ Git commands I keep forgetting #dev/git #dev/cheatsheet\n\nWriting these down so I stop googling the same things every week.\n\n```bash\n# Show the last commit in detail\ngit show --stat HEAD\n\n# Undo the last commit, keep changes staged\ngit reset --soft HEAD~1\n\n# Stash including untracked files\ngit stash push -u -m "wip: before refactor"\n\n# Find which commit introduced a string\ngit log -S "function_name" --source --all\n```\n\nThe `-S` one is gold for archaeology — way better than scrolling blame.','\n',char(10)),'PUBLIC','{"tags":["dev","dev/git","dev/cheatsheet"],"property":{"hasLink":false,"hasCode":true}}',2);
-- 15. Johnny: reading note + café location (oldest memo — the back of the feed)
INSERT INTO memo (id,uid,creator_id,created_ts,updated_ts,content,visibility,payload,space_id) VALUES(15,'johnnyreading01',2,strftime('%s','now','-22 days'),strftime('%s','now','-22 days'),replace('## 📖 Reading: Deep Work #books\n\nStarted Cal Newport''s *Deep Work* this week. This passage stopped me:\n\n> "Human beings, it seems, are at their best when immersed deeply in something challenging."\n\nThat''s the whole pitch in one sentence. The rest of the book is evidence.\n\nExperiment for the next two weeks: no Slack or email before 11am. See what shifts when the morning is mine.','\n',char(10)),'PUBLIC','{"tags":["books"],"property":{"hasLink":false},"location":{"placeholder":"Sightglass Coffee, San Francisco, California, United States","latitude":37.7726,"longitude":-122.4099}}',4);
-- ============================================================================
-- Protected memos — invisible when logged out; Explore gains these after SSO
-- sign-in, which is how visitors *experience* the visibility model
-- ============================================================================
-- 16. Steven: self-referential visibility explainer
INSERT INTO memo (id,uid,creator_id,created_ts,updated_ts,content,visibility,payload,space_id) VALUES(16,'protectedintro',1,strftime('%s','now','-20 hours'),strftime('%s','now','-20 hours'),replace('🔓 **If you can read this, you''re signed in.**\n\nThis memo uses **Protected** visibility: anyone signed in to this instance can read it.\n\nEach memo has its own audience:\n\n- **Public** — anyone, including visitors who aren''t signed in.\n- **Protected** — anyone signed in to this instance.\n- **Private** — only its author.\n- **Space** — active members of the Space where the memo is placed.\n\nPlacing a memo in a Space doesn''t automatically make it members-only. Choose **Space** visibility when that''s the audience you want. #getting-started','\n',char(10)),'PROTECTED','{"tags":["getting-started"],"property":{"hasLink":false}}',1);
-- 17. Johnny: half-formed idea — protected memos are naturally rougher
INSERT INTO memo (id,uid,creator_id,created_ts,updated_ts,content,visibility,payload,space_id) VALUES(17,'johnnydigestcli',2,strftime('%s','now','-9 hours'),strftime('%s','now','-9 hours'),'Half-formed idea: a tiny CLI that collects my #dev/til memos into a weekly digest. Memos has a full API with access tokens, so this is one evening of work. Parking it here so future me has no excuses.','PROTECTED','{"tags":["dev","dev/til"],"property":{"hasLink":false}}',2);
-- 18. Bob: packing list for signed-in readers
INSERT INTO memo (id,uid,creator_id,created_ts,updated_ts,content,visibility,payload,space_id) VALUES(18,'bobpacklist001',3,strftime('%s','now','-5 days'),strftime('%s','now','-5 days'),replace('Coast trip packing list — sharing this with everyone signed in, because you deserve to know how much coffee gear I carry:\n\n- [x] Camera + the one lens I''ll actually use\n- [x] AeroPress, hand grinder, scale ☕\n- [x] Rain shell\n- [ ] The second lens I won''t use but will pack anyway\n\n#travel/hikes','\n',char(10)),'PROTECTED','{"tags":["travel","travel/hikes"],"property":{"hasLink":false,"hasTaskList":true,"hasIncompleteTasks":true}}',3);
-- 19. Sam: confession
INSERT INTO memo (id,uid,creator_id,created_ts,updated_ts,content,visibility,payload,space_id) VALUES(19,'sambookpile001',4,strftime('%s','now','-30 hours'),strftime('%s','now','-30 hours'),'Note to self: stop buying books faster than I read them. Current pile: 9. Keeping this memo protected so only people signed in witness my shame 📚 #books','PROTECTED','{"tags":["books"],"property":{"hasLink":false}}',4);
-- ============================================================================
-- Comments (memos linked via memo_relation COMMENT)
-- ============================================================================
-- 20. Sam on Welcome
INSERT INTO memo (id,uid,creator_id,created_ts,updated_ts,content,visibility,payload,space_id) VALUES(20,'cmtwelcome0001',4,strftime('%s','now','-21 hours'),strftime('%s','now','-21 hours'),'Signed in with GitHub and posted my first memo inside a minute. Lowest-friction note app I''ve used 👏','PUBLIC','{"property":{"hasLink":false}}',1);
-- 21–22. Thread on Johnny's git cheat sheet
INSERT INTO memo (id,uid,creator_id,created_ts,updated_ts,content,visibility,payload,space_id) VALUES(21,'cmtgitcheat001',3,strftime('%s','now','-17 days','+5 hours'),strftime('%s','now','-17 days','+5 hours'),'Saving the `git log -S` one. Code archaeology mode unlocked 🔥','PUBLIC','{"property":{"hasLink":false}}',2);
INSERT INTO memo (id,uid,creator_id,created_ts,updated_ts,content,visibility,payload,space_id) VALUES(22,'cmtgitcheat002',2,strftime('%s','now','-17 days','+6 hours'),strftime('%s','now','-17 days','+6 hours'),'Also try `git log -p -- path/to/file` when you want the actual content changes for one file. Same archaeology vibe.','PUBLIC','{"property":{"hasLink":false}}',2);
-- 23–24. Thread on Bob's golden-hour memo
INSERT INTO memo (id,uid,creator_id,created_ts,updated_ts,content,visibility,payload,space_id) VALUES(23,'cmtgolden00001',4,strftime('%s','now','-2 hours'),strftime('%s','now','-2 hours'),'Okay, the gradient sky is gorgeous. Which trail is this?','PUBLIC','{"property":{"hasLink":false}}',3);
INSERT INTO memo (id,uid,creator_id,created_ts,updated_ts,content,visibility,payload,space_id) VALUES(24,'cmtgolden00002',3,strftime('%s','now','-1 hours'),strftime('%s','now','-1 hours'),'Point Reyes, the stretch north of the lighthouse — tap the 📍 on the memo. Golden hour there never misses.','PUBLIC','{"property":{"hasLink":false}}',3);
-- 25. Johnny on Sam's movie list
INSERT INTO memo (id,uid,creator_id,created_ts,updated_ts,content,visibility,payload) VALUES(25,'cmtmovies00001',2,strftime('%s','now','-8 days'),strftime('%s','now','-8 days'),'Start the Miyazaki marathon with *Porco Rosso*. Trust me.','PUBLIC','{"property":{"hasLink":false}}');
-- 28. Johnny on Steven's changelog note
INSERT INTO memo (id,uid,creator_id,created_ts,updated_ts,content,visibility,payload,space_id) VALUES(28,'cmtchangelog01',2,strftime('%s','now','-4 hours'),strftime('%s','now','-4 hours'),'Gave Dev a wrench icon. Much easier to spot when switching between coding notes and Reading 🔧','PUBLIC','{"property":{"hasLink":false}}',1);
-- 31. Johnny on the rendering test memo (includes an @mention)
INSERT INTO memo (id,uid,creator_id,created_ts,updated_ts,content,visibility,payload,space_id) VALUES(31,'cmtrendertest1',2,strftime('%s','now','-10 days','+4 hours'),strftime('%s','now','-10 days','+4 hours'),'Keeping a Markdown checklist right alongside the release notes makes sense, @steven 😄','PUBLIC','{"property":{"hasLink":false}}',1);
-- 26. Johnny on the protected explainer (protected too — consistent visibility)
INSERT INTO memo (id,uid,creator_id,created_ts,updated_ts,content,visibility,payload,space_id) VALUES(26,'cmtprotected01',2,strftime('%s','now','-18 hours'),strftime('%s','now','-18 hours'),'Can confirm: this memo did not exist for me until I signed in. Neat trick 👀','PROTECTED','{"property":{"hasLink":false}}',1);
-- ============================================================================
-- Relations
-- ============================================================================
-- Comments
INSERT INTO memo_relation VALUES(20,1,'COMMENT'); -- Sam → Welcome
INSERT INTO memo_relation VALUES(21,14,'COMMENT'); -- Bob → git cheat sheet
INSERT INTO memo_relation VALUES(22,14,'COMMENT'); -- Johnny → git cheat sheet
INSERT INTO memo_relation VALUES(23,3,'COMMENT'); -- Sam → golden hour
INSERT INTO memo_relation VALUES(24,3,'COMMENT'); -- Bob → golden hour
INSERT INTO memo_relation VALUES(25,11,'COMMENT'); -- Johnny → movie list
INSERT INTO memo_relation VALUES(26,16,'COMMENT'); -- Johnny → protected explainer
INSERT INTO memo_relation VALUES(28,27,'COMMENT'); -- Johnny → Spaces announcement
INSERT INTO memo_relation VALUES(31,30,'COMMENT'); -- Johnny → rendering test
-- References: Johnny's weekly review links back to his week
INSERT INTO memo_relation VALUES(5,7,'REFERENCE'); -- weekly review → shipped v0.2
INSERT INTO memo_relation VALUES(5,8,'REFERENCE'); -- weekly review → git diff TIL
INSERT INTO memo_relation VALUES(5,15,'REFERENCE'); -- weekly review → Deep Work note
-- ============================================================================
-- Reactions (types must come from the MEMO_RELATED reactions list below)
-- ============================================================================
INSERT INTO reaction (id,creator_id,memo_id,reaction_type) VALUES(1,2,1,'🎉');
INSERT INTO reaction (id,creator_id,memo_id,reaction_type) VALUES(2,3,1,'🎉');
INSERT INTO reaction (id,creator_id,memo_id,reaction_type) VALUES(3,4,1,'👍');
INSERT INTO reaction (id,creator_id,memo_id,reaction_type) VALUES(4,2,2,'🚀');
INSERT INTO reaction (id,creator_id,memo_id,reaction_type) VALUES(5,3,2,'👍');
INSERT INTO reaction (id,creator_id,memo_id,reaction_type) VALUES(6,2,3,'🔥');
INSERT INTO reaction (id,creator_id,memo_id,reaction_type) VALUES(7,4,3,'💛');
INSERT INTO reaction (id,creator_id,memo_id,reaction_type) VALUES(8,1,3,'👏');
INSERT INTO reaction (id,creator_id,memo_id,reaction_type) VALUES(9,2,4,'💛');
INSERT INTO reaction (id,creator_id,memo_id,reaction_type) VALUES(10,3,4,'👀');
INSERT INTO reaction (id,creator_id,memo_id,reaction_type) VALUES(11,1,5,'👏');
INSERT INTO reaction (id,creator_id,memo_id,reaction_type) VALUES(12,4,5,'💡');
INSERT INTO reaction (id,creator_id,memo_id,reaction_type) VALUES(13,1,7,'🚀');
INSERT INTO reaction (id,creator_id,memo_id,reaction_type) VALUES(14,4,7,'🎉');
INSERT INTO reaction (id,creator_id,memo_id,reaction_type) VALUES(15,3,7,'🔥');
INSERT INTO reaction (id,creator_id,memo_id,reaction_type) VALUES(16,3,8,'💡');
INSERT INTO reaction (id,creator_id,memo_id,reaction_type) VALUES(17,4,8,'+1');
INSERT INTO reaction (id,creator_id,memo_id,reaction_type) VALUES(18,3,9,'👌');
INSERT INTO reaction (id,creator_id,memo_id,reaction_type) VALUES(19,2,9,'💛');
INSERT INTO reaction (id,creator_id,memo_id,reaction_type) VALUES(20,1,11,'👍');
INSERT INTO reaction (id,creator_id,memo_id,reaction_type) VALUES(21,4,12,'💛');
INSERT INTO reaction (id,creator_id,memo_id,reaction_type) VALUES(22,3,14,'🔥');
INSERT INTO reaction (id,creator_id,memo_id,reaction_type) VALUES(23,4,14,'💡');
INSERT INTO reaction (id,creator_id,memo_id,reaction_type) VALUES(24,4,10,'💡');
INSERT INTO reaction (id,creator_id,memo_id,reaction_type) VALUES(25,1,6,'👍');
INSERT INTO reaction (id,creator_id,memo_id,reaction_type) VALUES(26,2,16,'👀');
INSERT INTO reaction (id,creator_id,memo_id,reaction_type) VALUES(27,3,16,'✅');
INSERT INTO reaction (id,creator_id,memo_id,reaction_type) VALUES(28,4,18,'😂');
INSERT INTO reaction (id,creator_id,memo_id,reaction_type) VALUES(29,3,19,'😂');
INSERT INTO reaction (id,creator_id,memo_id,reaction_type) VALUES(30,2,27,'🎉');
INSERT INTO reaction (id,creator_id,memo_id,reaction_type) VALUES(31,4,27,'🚀');
INSERT INTO reaction (id,creator_id,memo_id,reaction_type) VALUES(32,3,27,'🔥');
INSERT INTO reaction (id,creator_id,memo_id,reaction_type) VALUES(33,1,29,'👀');
INSERT INTO reaction (id,creator_id,memo_id,reaction_type) VALUES(34,2,30,'😂');
INSERT INTO reaction (id,creator_id,memo_id,reaction_type) VALUES(35,4,30,'💡');
-- ============================================================================
-- Attachment: Bob's golden-hour art (stored in the database blob column;
-- empty storage_type = database storage). Size must match the blob length.
-- ============================================================================
INSERT INTO attachment (id,uid,creator_id,created_ts,updated_ts,filename,type,size,memo_id,storage_type,blob) VALUES(1,'goldenhourart1',3,strftime('%s','now','-3 hours'),strftime('%s','now','-3 hours'),'golden-hour-trail.png','image/png',12168,3,'',X'89504E470D0A1A0A0000000D49484452000001E00000012C0802000000949CF70D00002F4F4944415478DAEDDDF79B54C79EDFF1FA2BEC8DF6F3ACBD42BA80AE77D7D77BBDBBBE5E5FEFAEAFC949C421CC0C93330C41E428B2009173CE19869CB31008100A8024945096AE12133BD955DFAA3A7DCE049870CEE93ADD9FE779FF2060A6BBAAE6F4ABAA5BD0CD9EFBAB3E0821840C8CB5FBABDE0821840C8CBDF09F7A2384103230D6FE3FF74608216460ACE35FF74608216460ECD77FDD1B21849081B1BF79AE3742082103637FD7AE374208210363BF79BE3742082103637FFF7C6F84104206C67EFB426F84104206C6FEE157BD1042081918FBA7F6BD1042081918FB5DFB5E0821840C8CFD73875E0821840C8CFDBE632F84104206C6FEE5C55E0821840C8CFDDB8BBD1042081918FBC3AF7B2184103230D6E9BFF44208216460ACF3DFF44208216460ACEBDFF64408216460ACFBDFF64408216460ACE7DFF54408216460ACF77FED891042C8C0D84BBFE9891042C8C058BFDFF444082164606CC07FEB891042C8C0D8A0BFEF891042C8C058DA6F7B228410323036E4B73D11420819181BF6DF7B208410323096F10F3D10420819181BFE8F3D1042081918CBFEC71E0821840C8CE5FE530F84104206C6F2FF470F84104206C60A7FD70321849081B1E2DFF54008216460ACE47FF64008216460ACEC9F7B208410323036F27F7547082164606CD4EFBB238410323036E6F7DD11420819187BF97F7747082164606CFCBF7447082164606CE2BF7647082164606CF2BF7647082164606CEABF7547082164606CDAFFE98E1042C8C0D88C3F744708216460EC953F7447082164606CF6FFED861042C8C0D8DC4EDD10420819189BDFB91B4208210363AF76EE861042C8C0D8A22EDD10420819187BAD6B3784104206C69674EB861042C8C0D8B26EDD10420819185BD1BD1B4208210363AB7A7443082164606C4DCFAE0821840C8CADEBD51521849081B10DBDBA2284103230B6A9775784104206C6B6F4E98A1042C8C0D8B697BA2284103230B6FDA5AE0821840C8CEDECDB1521849081B1DDFDBA2284103230B6B77F5784104206C6F6F7EF821042C8C0D8C1015D10420819183B3CB00B42082103631583BA2084103230766C501784104206C64EA4754108216460ECE4E02E0821840C8C9D1ED20521849081B1B343BA2084103230767E681784104206C62E0EEB8C1042C8C0D8E5F4CE0821840C8C5DCDE88C1042C8C0D8F58CCE0821840C8CDDC8EC8C1042C8C0D81BC33B2384103230762BAB334208210363B7B33A23841032307637BB334208210363F7723A2384103230F64E6E6784104206C6DECBED841042C8C0D883BC4E0821840C8CBD9FDF0921849081B10F0B3A2184103230F6A8A01342082103631F17764208216460ECD3A24E0821840C8C3D2EEE841042C8C0D817259D1042081918FBAAA41342082103635F97764208216460ECEBB24E0821840C8C7D3DA23342E8D98D6C555837D486D837233B23841AA99CD7C5D1A816E6F876BA41AC2A6A49ACFE2588502A574FD8D15D1B69CCB36AF4BB463FC56E841A8FB5F8508050F2355A56DFDF6FC774FB76ECB37A997AE697358E38161F3D2DA62F4D8452320571D76FC776AD6FAEAABB685C1B92B7F07243CAE97EE364E3C781EAC7E4258250CA3556A36CD139AE9B03D6F1B21EB2EF26B43CFDBD14DD9A03EE6E4EB5BB5A64232463FA324528656A2832E9F91DAF9EB013793DEB37A91935FCAE89F5EDFE6E7C77A7DA76AFF1634222E67C36875052374EA32C39B68B3CD1C6B19DDAC9BD5CA871BE7BD8D456E321AFF538F1F34AF958FC6A402879FB6E7C372DB2CC12B987CD62C5F1F7BC29F67A7F3FB5B54D91C56F4DAB4D771727BB87CDEBEE71AFF1B34BEDD877D65102A1644D921717B98725F2F7229BC5537BC56D9D66D527DEF46667FF2E793B0EBB6D775ADF6B6BF3E86EC71AA5604C1F28104AC62676B7A1DC438BDCB31191ED1CDB9D9DD1E78FA2971A6966831AFDB219E2461AD8DDDBA6762FA7D76284E4750F8D357E94291AA32B18A1648C80FB7E720F8D724F2D326511399DD7E78FD325C47D1AC7F795BEAD6C66DFC61057F7A5C9B66D0FD6F004D67A3B99AC3718FC4C532CF63DBF82114ABEA4CB53A838CABDB4C8BD6D22F7715A6CE37896BD7EA2D9CD4E7EBDFD16E270D7235B0F4362ADBCB6ED25721624357EB22915A3EB18A1E44AB9DC53A3DC8B44A694C832C9316593F487D9FD1CCD91F56FBCB954E37FAABFD7766B7F9C5D8F6C3D0081B56DCFA0D112D6BD34D67ABFC1CF376562EA478E5072349522D4FEC85328F77E0ACA3F0891FB3A2DEE1797D76A1E6F400B6B70238DA82D06A0BDB6B0EE63C35A6F2D0DA546C91E5317344249D0B49E843235A3B74A62F74A1F1259A445EEEB10796E3F1BC4368EE78B7E8C3750B4E0A9C9AFD1DF226F214EB6436DDB0066EB5109ACAD5D44EF2B722E426ADA7804D6F889277F4CFEB0110A7C7697673A5CFE611665091817B99F43643BC40B0638CC7DD5DEA067E5FC7A07DFF1BB887B3DAF1ED67D6D588B913722F50C3D5FFCDC933AA67ECC0805BA19BDB4CBBD09E53E3FCCEAA35D269AE75073B5CBC4E28FBCF9FD6D220FA86FF1C241F55B6495D644F4A70B1BABBEDA036C5E8BC168ACFB69ACFB6AACF51E435323A969A676A95132C6E8CA4628C829977BFF60B93CBB3197E7F5FBD18EF2025D9CE381F520FE4994265AFC9406534D7F81BC054BF638D976AFF560E6F7975893D77A3BA92F751F315381B58D69948C3175712314CC7E78859A45344B97E7BCA45D1634FF388F92F02DE8AF511E604359B8FCD3229DDDD6D778831D2D69768E6FA49B72A8ADEE4E491DC7DA29B5C05A8C9FA4D6FB8D9C665C6A5C06491B53D7374201AD21CD73FBFEC86BE8F2ABDA6502F1A74503B5C8836C1C6B941DDA0EF96969FD7E6EA2865F29BEBD3EDC76AF690072240BF5862187AA8ED5526ABDD3CCEDABA5D64F14E40AE04A48C698FAE92214C466F7D12EBFF4A3C3E57EDAE5FE0ABB8503387F3F592E2FD62E5B285B802E1D1CF77799D550D5F266677D8B75234A70BA8BB8D76936AF2DAC07CAD1EA4D65809A4B5CEABE72BE72EEB40EB81E9230A67EB408052EE532D13CAFAF76B99F7659D0FCD3426A91D3E5D706699495CB3F2F95D944AEA7ED0ADEB09647DF581F6EBBD7E27E35D6D66EA1C729872DA416B320A9F5AE23673AAFAF965AEE52B82A922DF623BFC4110A5C732929D4FCBEE4723FE9F24F3CBBCB8B073A5C1628A7FD6CA1BC6CB016798893632DF24A47BFAC4A6F66F5BEB131B2E94E15D67A3C52EA258D49BD688096BABF965AEE497DB5D4B426B8369228A67EA80805A8792F6997FB92CBFDB4CB44F3A201DAE581DAE5418472DACF4BD31C2E2FD72EAFD0498565AB6C1CAFB697D18CF4173BD456B7ACC9D677BA7C880D6BEB382F064C520FD2523B98FE89A6DC80695C1E4915A36B1DA140A569FE89D714CDE4DACF4B066997D308654A6AB862884679A84DE461F5395E9351BFB5B2CC26CA68E45BD664386E53621DF7DADA212CA9076BA9D3A4D47C225A6A9ADDA2015A6A9AFEABFDD4462557065748B2C4D44F14A1A0B4A02FB94C2D249AA5568B0790CB037F562E0FD22EA73574F99795320BE5613691D31BB7785DE69316E650DB01B71D6B3D00392487D47A4759AAF718392F21B5DC870668A9691DE49A2C104B84EB2439623F89CB1DA1E0245C269A17F5D72E0F2097076A9707699789E6E583A5CBBFF0566A9A15CAC36C28A75B223FE1D9A95DCF1B5EBF0D4DD4F02BD73BE15E9B61F33ADD86B5536A81F510A7D4F5981653B631DDBF1ED3280962EAC7E963FFF12F7FDDA2FC1F2132B738CDFD394C3FF314CD03EBD32C5C1EFC8B7299685E25932E0FD328A72B9105CA193691331B409C25DAD8ECC4D737843BD3E6B5BA5FC25A0F468E4D486D1DF3690A2BE44E3358CD4E482D9F280CD452D346255766212D14AE96E0C7D4CFD2ED5AAA70EBF268F0C8D016F52397FB93CBD412A27929D1AC5C4E2397076B976D342B9789E6B5E94F4412E50C1BCA997152370E7780BB4954B929BB99C9AF77AA6DF73AD3867586C6DA3ACBEB5D448EDCC6B4965AEE4383D4DCE53AC8351152DB9846418EA92DB76DF9C3F1B3BD76632EC8D87E5E4C3542B3D0F997E53C49F36045B37279A87679D813E572BA32717D864639B31ECA959BACB22B3737684BCED36AF8F5826C75834AEA38D6D6DEA0770B3942C9B4925AEF31725E728E7CB20EA6073A99166B856B26E83175D1B73043447E7AAD9B1A32B4D788E62544F3524AB83C885C4EFB65451AB94C34AFA25613CD1C65997239BD119789CB4A9E85B2C36227C75B4562306200F2AEE5A996A05C32507E81C8A1B6DD6B9BFE1B876BAC33B5D4195A6ABD97D0F815D3426A9A9D905AEE4672674A93ABA15666092D94661A053746D77DB30A04CA4D62DDEC69224393E81040BF709705CD839AA2F9094FB93C4CBB9CAEEC532E672A942D9737CBA4C8D9768EA95C7EEFE2BE560F132F4AF053F066F19B95DBF22AB7E55379955B729F6CCE16DAAECB10922E4FABDC962BBEC641B6BE7D29B5C25A8DC426B58D6925B5DC69863A991EEC645A2C4B03A671F10438A67E8A4D1468949BC4FAA9534626B67400B94C2D279A5710CD2BD38450AB0693CB43C8656A2DD1BCCE49F3065E66E5C64C4259D6C0E5ADD9714FB7E5546DCBE5F13B12B7B631AB726B5EE5CEC2AA3D2555FBCBAA0F8EAC3E3CAAFAC8E87887CBF96FF23FAADA535CB9A380D3CC8FE7E2358AE583E4EDF01BB461FD34A9F92049EA0C2DB5647A98C5B468B59832492DF7A734B526727D68ADC4BAE1E20972EC97A5031A96942E37ACD1B9231373D03CA81ECD4F56530E9A49E7F5E9D2E54ADE4627CDD2C42D597697AB78DB64B955DB45FC2EF82D883FDA5528503E5C5E736C6CCDC9F1356726D59E9B527B616AEDC569B517A753D36ACF4FAD3D37B9E6F4C49A13E3AA8F8EA93E545EB5AFB4726701BF7D3E183E6C799B84B5B8178DB525B5DE2DE408E580F98EB221434B2DF79B615A6AC5B4907AD56027D3F2E985DED270FD0436A67E84CB06A608CA8D4BAD170199D8726A05D1BC92685E95F664D5E027AB0793CB44F35A6A9D9DE6F44A3BCD9B32C96527CD5BB3AB78DBB4CBDB95CB553BF8A97990B885ADB9557B8AF8B958B87C7A42EDF929759767D45D9B5577636EE8E6FCD09B0B42B75F0DDD5928E2FFC17F79735EDD8D3975D75EA9BD345D607D6ABC90FAC008EEBB607AEDB0AA1D79FCC6E37724EF57EC0DD95A6AC9340D55489DA9A5167391F3B2312D9F31E82D8AAFC9AAC16A891A328D0218F39EBF17DDCE4BA9970F44C6B582745E29747E12A77930D13CC441F3FA6195C265A27923B5C94EF3707239AB4ABA6CD1BC3DC7729900CDE337CB95ACDA5D587D7044CDF1B1B567277170EBAECF0EDD9A1FBABB28FCF692F07BCB230F5646DE5F15F9604DE443EA83D5E2970F5684DF5B167EFB354136C7FADA2C71B2E6676AC17459153F4D6F1ACEC72FEFC526B5DE216854955BE5FED190E90CB5E5F0090AA987A959CB1590AB215746482D9F64C8271CB88A821A33DBE284A9ADCE6BC8809EACE4499AD31AA359E85C19A739DD41F3E64C7259D05C2568269DB7656B9773B4CBB9553BF364FC88CA7FB37A7F69CDD1D1B56726D6719A6FCCE10764EE32F7975B1CFD6443F4F1A6D8175B635F6D8B7DBD23F60DF5F576F1CB2FB6443FDB14FD78BDF0FAFEF2F0BDD7F8B19ACBCE99E607F0EA8A51557B8B2BB7E5F0315B77A7EE5D322DA4A6E109A9C580E34C6FCE543392B39333E553564CCBE710439C4CD38AAD1CA49946C18B792AF27FF80B4FF2D36BD20125AE5583C865A2790DC519E2AD1B5AC95B4F346F18E6A439C3A2B96A0BB5956896F6F12485CA654173356F172F9F1F54AB76E5571F1A5173F2E5DA0B53EAAECF0ADD5E107E67093F1D7376A39F6FE622FFBFEF773FBDD877BBB8D7D1C79BA31FAD8B3C5C290ED4B7E68BD73DCE4FE6E7717194DE91C747CBEF8EDFA983E91D398D302DA416B3B0319DE1649A1661DD5027D3F279469AC5340A62CC45943DE2B8CD64BBC1F4AA412831AD269D6D3457AE1B42340F8DD3BC91DA44340B9733AB780E9A49E7ED44F30E99A059BB2C68AEDE9D2FBE717761CD91F2DAD313EA2E4F0FDD9C1BBEB7980BCB6916E7E5EF763D93E6FA527FBB939B2E98E6A7E9BB8B4237E6D4F1A3F4C9717C03A8129B4106BF53C9B46827ED1676A6B7CB1D25CBCE74154DD0C634CD7D032D85909AF6AD75B487ADD55B9A5C435C4B018CB505E5048ADC5AAFDB2CB5BCD6916FAD219DD70EAE74D03C549164A3B96A7306B94C346F95D969CE9634570B9729C9E2EE3CA1E41EA173F59EC29A8AF2DAB313EBAECE0CBD393FFCEE52F182C6E3CDDCD996D2EC60FA9B1DD1CF36463E58258ED237E771FA6B4F8FAF393C928C4E17F72ECAB39896A98D448E3CCEB47E4EB02593A4964F17D29D4CD3FAACA3E58A338D6B2990B116A16CACC82DF7BAAD5257AE49439EB79637B872DD6061CDFA214E9A49E74DE9558AE60CA23953D1BC8D68DE9E65D15C2D68269D77E56A9715CD42E74D19D57B0A94CED766866E2F88DC5F16FD785DECCBAD6DA1D9C1F4175BA28FD670F439FD7557A4D1FC1C9DC7E722C7E0607A97645A0CDBC6B4DC6FF4F623E72BE71E675A3EAB18EA647AB00897530063CF7439A028B7E464DD06A6E5A58F3C6A1DB59E74E6E8F03612CD9B8655099AD39D3493CEDB865B3457EFA076DA69CE5534EF513457EF2DE037C84DAC3932B2F6CC047E760E0B9D97473F591FFB7ABB5B3A2BA3BFDC1AFD686DC432FAD4B89A4365DC5F3E3B3E0C3D24BD79C8D1CAC18B0D46CC85E665673AD3C9B45813B54492692135AD9E5C495C51418B25C2E58E2DCCF463B5BAFA91EB299A49E78D43AB36729789E6CDD4960CCA4EF370EE57354FD14C3AEFCA71D24C3AEFCDAF1115D4EC2BE044D61C2AAD3D3D8EA319BA3D5F9C9D3DD0591BBD8D1B1D7E7749E8D6DCBA4B536B4F8EAD3E50CCC1E5C31083D92B0666633AD7C1F44EBDE528A669BE5B3335D3F29904ADCC265A28213519BD413EFFC01515BC98672E77F425C3A496A020B7DA30A46A03779992E8D869DE9A216CDAC61B5ECDDB3E9C68CE72D29C2398DB9DAB69CEAB9134EF2B90F15BA8DE5F547B620CE792A319797749F4A375B1AFB679A173FC1CFDE11AF17AF41BB3EB2E4CAE39368A1F9FF9A4AC21C911CAD1DA98A6B9ECCCD64CD33EB47DB883E9AD72C74A77322D568F36395C51C18BB9E47247337257EA56325D2558416D6EE3104D33E9BC9974DE92AE69CEE03457F3B6DB69CE5284299A49E73DB935DCE538CDA4F37E5E21BF6541F6D19175E727866ECC0ABFBD38F2E1EAD8175BBDD35916FD7C73E4FD95E1B71686AECFAC3D3BBEE648191F2D1F0F8D4A322D0FF87972E47A8FC971324DF395D3175B14ED557265E24CCBE71C7A93C34515B458C045F6C46BD7A4DE3804B5BE4D44F3E661AA2DA4F3D68C6A9EA29974DE315CD34C3AEFCAB668AED94371E6F6E6699AF31582070A79FCBB6A0E95D49E7E3974757AF8CE82C8C315D1C79BBCD659FDF5BB4F3744EE2F0BBF39AFEEF2D4DA93636A0E14F123B018559CE97C27D3622E342FC9B47C9690E5607A3B2DCB36B144C434AD985C3DB998426A5C5A418AF986F25FFE795BF31F6B57A48E3F36508BDA4C3A6F11556F4DA732843E8AE64CA27938B96CD19C5DB33B47A468D63A3B68563AF3DBE7FCD51E2BAFBB38297473B67871E3E3751EBDF4DC88D15F6D157FA9E3EDC5A11BAFD49D9F505B3142EC28070BE5D8C420C568F5A62267B1476F398A699AB29A7E965A0DB9329A69BE68C4342DA3901AD755C062AEA3DC7688BD57BB8D52B78AE9CD43518BAAE62E5B346F4B279A339C3493CEBBB284CB8266D2794F4E9CE67DB27C219DA2B9A0F6602155C46FA1E650711D3F3E5F9B1EBEBB20F2FECAD8E79BFDD159BDD0F1D9C6C883E5E1DBF34257E421BA904F900F4C0C4F1AED605A3E0FA0A909A6691FDA2D266E635A3E9FD01B985CB16D726F138B494CE3D20A52AC8D2EFBCCB1DB6427E040ADDC41CF6CEB304D737AF5F60C11A76747A6A67978CDAE2CD1EE6CD51ED25912B64FEBBC9F74E62E0B9AB5CE878A789CB9DA6323EA2E4C0CBD312BF2CE6BD18FD7C6BED9E127D074885E1DBEB728F4FACCBA73E36B2B4A39B5726C7A1711C326A669166A52B99A699AAF9CBBD8A2C46AC895510B2598A675936BA89946018A2507CA6DC6DAEF0335E9839E9A8366D27967660D7759D04C3AEF269DF7583493CEFB48E7FDA2DAFDF9B507F235CD05B5870AA9A2DAC345FC96397C75A746F3D32B3FC3F2936CF4F1463F75966FD911FD747DE4BDA5E15B73429726D79E28E723E7631309A6B5D1C4B49888603ACFC9B47CC6A0B7A8DDB463ED1A2E5749EF67B480DBF55687EB2A5031EF51EEE0769E62EDEB815A3D6650C3B6CB04CD353C417326B94CED269DF7689DF75282E6DC5AE13275807456346B9D257F478AF98DD41E29A93BFB72E8FA8CF0BD85D10F57B9F88F065B60B4F8EB1C2BC2771784AE4EAB3B3D86BBCCE75B7BA448334D633EA8371839239A1D494DBB919CBB5A8A6CB532729504D3B46E3B6887934B8A4B2B50315751EE90B85CC7DABF0375CDF67454BF1DE9358A66D27917E9BCDBA29974DE9BAD69CEA9153493CE07649CE67C27CDA4F311A1B3007A6F4EEDB1B2D08509E19BB322EF26E0F50DFD2AC7B6E8A3D591B717D2AB1CE36A2B4AF81C6984459A6979EAD7461F94CF09F426C4A72C98965B142D88605A3EB7D09BD92E327A67865ACF1DB8BACCAD210EAC6D2E7730B50448DDF6D73D482544EDCC50ED229D776B9DF7507BB36B79C2656A3FE97C40EB7C90743E54A03A4C3A1F29AA1315D75588B86E7527CB43972785DF9C13B9BF34FAE98656BC599D0B407FB323FAF13ABE43F07D22747142DDF1119C5A39421AAD649AC66F4D47CECE9AAC9CBB5C8738D3B44A6AD186AB35B4961457970135D304D672973B042D57A4F6EF758FF8032995DB65D14C3AEFE165D5F2F66611CD5AE7FDA4F301ADF341D2F990D6F97041DDE1C2BA238502BB8A2205DF515E09FFD3BAD3A34357A784EFCC8B3C5C1EF3E5AF3F37F932F4FDA57C9FE0BB45DDC9917C167C78629062B47253291253104C6BA30FC9E707D6D305F9EC416F57FB68F7DA2B968BD64D322D9F85D0C2E2EA4A44AD3BB4B12445B9F5581B72A0568FA5944DB89C59CBDB335CB4374BB58F74DE9FA33A403A1FCC53099AF3EB84CBD411D2B9A2487594743E56C2ABE5BF7F764CF8FAB4C85BF3A31FAC887DB13921400BA31F6F8C3C5C16BE3397EF1675A74789F1F3114AA38F16AB914BA305D3342F69F4A1FCF8C4E53A58CB2257C95A345A43B9A435BB3352FDD2F22B57DE899E250AE5BFF8B367970452B7FD758F5AE954AAB547C669269DF7C938CDA4F30119A759E95C7788C769D63A1F219D2BB4CE4749E7634AE7BAE325FC3743E7C6865F9F1EB9B720FAC1CAD8175B1207F4A6E8FBCB2377E785AF4DAD3B335A9CFA8F97A8714AA38FEA0DA6423E1BD0DB0F9F2C9FF2216DF441F94C421BBD5F3ECFA075134CD33E27577537F22AD73F7B8F79E47273FC6D63BE61ED36D3AD915A839532EDCD249A872B62F66711CDD99AE69CBA83B9A24379AAC3A4F391025585D6F928754CEB7CBC2474BC84DF3E872F747E6CF80607FAD5E8872B635F260EE8CF25D0F3C3D7A786CE8EE604878E970AA305D3346C69F4516D7445A19AA3345A30AD1781D6C45A22B562FBF4F626D7736F66CA5D4B1EE7E9C75833575C6EA1ADED5B986F647BCBB43B076AF5304BF6F6C924CD59B507B2EB44DC6519A759EB7C98743EA275AED03A2B9A85CE21DE719ED03974A294277EF3FCCB0601FD9606BAA2508E508DF678B1DE5DE46653A8F71EB915D1C405D3DAE843B46FC955E2CB75403EE7A035144CD3AAEE452EE4A9CB76A03D42B9BD2F79E4B59F07EA5631BD6F7892B77F78DDFE2CD181AC3AA9B344E7500ED19C4B2E5347B4CE1514278C0A1D2BA224CDA4F309D2F9A488809627E80502E884BE06AD5EE2E0409F23A04F962AA34F28A345629B1133521394465768A38FE4C71744AECF41BD99A9BD2D4BAE275FD8E4BF783CCB1F94ED1F9FC25C12B9BD19B98BB5E9AF7BF0EA0464C9D8812CD5C16C4AD24C3A1F269D8FC8F2EB2A6405A1A3BC42D131ADB3A4ED4431D15C2269169D2AE307D2D0F931E1D7A745EED1FF24FC3C617F8B23F6D986E8C36591BB73C3D7A784CE8E12133955A6875AA2467E5C6F336AD72954333D2AB7255A01C1B4349A9648304D2B2698A635B4963459AF196FF207E2A662AD75B97D100AA2D4AD62DA7AEC254D0765D97587B215348773143D4473885791AF3A4A3A1F2B541D2FA224CDA4F34919A759E82CE25F767E74F8F5A991B7E645DF5F167B9CA0BF07FDED8ED8A7EBA20F9644EECC095F9B1C3A5BCEA9A511D250A5D18A699A8B9C9A345A314D73D74BA1F7AD5CB55687AD8D4DEE73B4AA07D0B34B08C70D3F3B85251DCA9E626D34D342EA835949D2A16C95703927C43B924B719765DC6519A759EB7C5CEB7CA248897652EB2CC93B551A3E5DC613DF756E54F8FA642E23F7912B99987F49F8F5B6E8C76BA2EF2D8EDC9E15BE3A317466249FA01AA11EB09E82B5DF14E91D486E48347DC134AD86609AD6472D57AE5C40925A2E6956F25C241EE4BFC84F67813DCBE5F6C9581BA536FD758FD0A1ECC07758C65D96E5862A72153D47F31446C7F2154FC70B759266D2F9A4AC247C8A572A3AAD740E9F29E3B7133E3B929BC865E43E463F5E1DFB2A11EFC5F1C5E6E8A355D17716466ECD0C5F1E1FE22E1FCEE1C353E33C5DAA467E4A1B7D521B7D421B7D5C1B7D4C1B7D541B5D91AB99A61D4E949D0CD786DBF929724BDF978DA592CBC195BA95178A662E801DC9D634E710CDB99AE63C4D33E97C5C56183A5128D90A9FE4158B4E1513CD25E1D3254473A9A4991AC16F56FCF2CAB8C8AD19D1775E8D7E988097A1C50BD08F37443F581EB9373FF2C6B4F0A5B1213EDAB323F8F0D438A5D182E9125DB19ADD49B90FD1C405D3B40E82695A19C134AD955ABADCF86206F792703B7F506EE3E7F0B1D443D975A94D675A486D3D3E0354852C37745496173A96A7003ACE2B08F34EF00A29497391A6B958D34C3A9F91917A5C4019FF9A4B63236F4C8DDC9B177D7FA9FFAF72C4BEDE16FB646DF4C16B91BB7322AF4F0E5F18CDB5D5C3B3F69252BDBBD05CA4D18A699AAF9A7E61981684A4B63630B99FD1EA09A6693D8FA47AE6A35C0F686FEDFBF33FFD95BB2597D4BE7E46A2262F201DCD91B8848FF1F244C7F3759266D2F9A4AC287CAA48D35CAC692ED134970AF25423C2E728FEED17CA23D72745EECC8ADE5F14FB68B5CF7F1B5AFC0DE8472BA3EF2E8CBC3933726D42F8DC483147393669B4CC9A823529354D9AB2609A5640304D6B22A496AB9427D72D74CCDAE47202760DB8940F87651751F60A68D72D4EA8DAC631EDE2813A7C3427001DCB5571688E6B9D4FE42B864E1628984E152AAA78A78B29EEB24CD2AC753E5716393742757EA4B8E5B36591ABE322B7A647DF991FFD6059ECB3F5BE1DA2C5F1F9D3B5D1874BA2F7E6456E4E8D5C1ECB07CC4725A21192D4D6A6228DA64909A38B55D6C44F5A1B95B57569A365D66206E247EF520144B93E0E2CA022FBE875EBA436FD7F242AA9ADC7AD811D97912F27F255270B749266D2F9B48CCC3A532C218B9CE595AA04CDA4F3791939786124FFAEC8A5D1911B93A3776747EF2F8E7DB4CA9F7FB112FB6E67ECF38D317E7C7E6F61F4CE2B91D727462E96F319F121D1D8689082E932953591B3D6DEA38D9673174CD36A48A3656AD1B4D1723D8F25795E1F96BDB3B8D158D2A0EC31D62E1FA80DF987E371A98FE71AD7895C81CB09D2F9A4AC207C4A46189D2E8C706165678A55674B74DC65191977BE4CEB3C423848F11B17BFBC363EFA261DA2C52BD16B7DF8EB1CB12FB7C43E59137DF85AF4DEDCC8AD6991AB2F8B715E28B706161FEA796DB49C0B192DE23B903565BD087C41F4A6656D63B46E6A19F3C4921E4FC202F20A466B3EE19A2525CA5E62EDDB81FA45FF0FD40AEBF8E339A19DCC8B88F245A778052AE1B28CBB2CE32ECB08AF73259AE6527259EB7C4146025EE4958BF8F75E1E1D796352F4EE2C7E9E8D3D5A117BBC3EF6CD766F5FDCF86C5DEC8365D1771744EFCC14C7E74BE5623A623C3430C5348D561A2DB32675CEDA84B4D1721D04D37A71D472D1D28935148B69CA4FD6A58C3F2C776C7B2CE951F6416A135EF7F042EA88223271495FA4CEA7658591333222E96C91A6B9985CD63A9F97916B1764E4DDC5110A411E6751C6FFF4DACBD15B53A3F7E6441F2C8E7DB452BCFEE0CD8BD14267BE013C5A11BDBF30FAD6ECE8CD2991AB63C580E5482CA345D68E42E31773D1F38ACFD4DA996829C49AD0E208A3F58AC5D7302FF13FD036E7C3DF594E08CA4DC9C052CA650FB076F3406D26D342EAF883DCDF4ECB089A33059AE642E591D4F99C5549E4BC8C14BB50AA692E239747444523459778E5AACBE5E206F97FBC3E217A7B7AF49D79B187AFC53E5E45466FF740E70D620378B038FAF69CE89BD3A2D7C7098B4F17F061E821D1F0E43869D871A345D6DE43339546CBE26B62ED61B46862F5F44A9E0A5EBEFDD33E3F516EFE67F2B144B8FC420B335FEA0EA970A056585B8F761F3A93AF94E17177ACCE15E98AA3BCF3BC12D585525D59F4A26C84EAD208C51FEF72B96E148F6317BD3A3AFAC6C4E8DD99D177E7C7DE97466FE0A4BAF7F9B05BC5D999EBFC7071F49DB96233B83141DCF5B9221A43793C6B909746C4072FE7C227654DD09AF279B108C434AD89345A66ADDE195ACCD3C1C8B737C1F0EDB0DCF20FE0D6401BA370EB32576A4398F64E6A5EF44CBEB79D2DD0158ACEC98A44E78BC865EA42898EE4BA58AA692E8B5E2A2397B5CE97659AC22BBC512AFE5DD7C6446F4EE246C7A4D11C534EEA575B62DFED6CEB3B227DB959BCEEFC6805D739C675BE33436C067C4BE063B60670C5325A8F531A2DB36624B236219AB5345A55A4D647AE955837BD865EFFB0DA90CFEF4CE403CAAD16B9DEC7A7303F39FEB33F696509F13A08AF7BB4E540FDA2BB8F041BA6AE764E46DC9C2F2497B5CE176484D4C512725977A94C47BA5D1E11578F77A55C47325E958D165F7F7D6CF4D6A498307A5EECE1A2D8A3E5B14FD7C4BED8285E9D68F9DBDDC5BEDD290ECEFC24FEC9EAD887CB620F16C6DE9913BD333D7A73A2D80CF838AFEA7B97405BD9477BD9DA60F4A4EC338D6F4EB41AD26895B5A5D11A9E35A584BC81A7D92837C902F342E45643ECB6DD385027406A81F5B902D73A5F68AB287A4146185D2C2697B5CE97AC48B1CB65E4B2EECA481D097855362ADEB5D1A2CBC2E898307A3AC734F6E0D5D8074B621FAF8C7DB65630CDB5FD7647B3DE64E39B1DE2E8FDF946E1FB472B621FBC16BBBF20F6F6ECD89D69B19B13C41DF171CA7BB48FE1AACD686BC0F6595CB6361E3DD9F80A68A345B44AD26855819B3F9496E4E7DBDBFBEFB2BB1CB711E8C473DC06AF1328B56F4C1B27B5C0DA216CCBBB6045E85C2C2297B5CE9754B14BA5A2CBBC32DD88D815AB91AAABBC72DDA8D8357BA3651CC1D8F5319C5181E9DBB362EFD151FAC3A58269AEEDE7EB635F6C12F8F233F537DBC5CB17FC982CDA217EC97F93FF11A7FCF17A45F3874B620F17C6DE9D1BBBF74AECF694D81BE3F97D7158ADBB8B0F808F273EB67231546BD872167C46F1D99589C9D2ACAD4520A6ADC5B136335ABDF37EE4FB078E78F17796BD70B9F59FEEC45A81B25122B7CAEB04336DD481DA37A965B10B852DEE22AF48571CBB242B515D2E2197B5CE57ACB4CE5747DA2A8F5DB3B2E97C7DB4237E53D747C5DE1817BB3D39F6163F4ACF8EDD9F2F9CE5A7E947CB49EAD5E24CFD789D80F8738AFF07FF25FFCD4F568B2F78B44C9C9AF9B770DFB9F2FC3CFEE6A4D88D97C5FDF2C1D7BB3BC73E4163B38C56D9371B3D4169B44AAFC625BD3E7CA1E28B56D89A656FBA44401CACC3B26B1F69CD9AE97280506E09D638503F53EA17BD7EB0D91C69A24B5644CFE56242D9AA347645A6E5BA5A26448B3732764D66D399FBEB88A07C5D3646C4EF887FCB8D31B15BFC283D8598E6A7E9B9B1070B48EAC5E268FC68A98038DE52F19BEF2F165FC0417F774EECED57C43772E56F8E17B7CC07236FFC757D5FCA68DB48EC83BCA6472E8DB68A6F427AEED26855719C696BE92EB62003FCF5E77DE3DC75B98317B1A4392C274A6A1398765D6A9F8FD50EAF2F1535D2E5227259EB7CC54A0B75B5945CB6E97C4D3632DEF5725B1AC4D747C5B9B4037D83E2B7CCBFF88DB1B15BE385B377A7C5EECD88BDF34AECDDD902EBFBF304C40F28FE1FFC97FC37F91F7197F997DD9D1ABB3D497C23BF1D7EEF7CB4F236EB19ADB2EF16B671DAC72F67A498B6265B1A5F046B59E26B556CA4B6897D334FA351AEF7549B798FF2F36EE729D63E4BEDE73B50776CDD059D9063354AC95E4C20CAFEBBFCD48FE16E00B49116FBA7B65B529BF0F2B44752036B64CE87F5F9EEB23F22D7C781055664AFBC76456A1F5FF7304A6A608D122BB25987E51659DC682CE128FFE9BF776408D62976A0EED8968704B0462DB53821EFADECCF61B98D22B70E6817E47537DFB04EDC81BA43220ED4DE610DAF531762DF3E7F2451876517456E3ED00671EC01D90990DADFD73D122C35BC4E4D853DFD803E6FFEE1B571283F1DE8C088EC9ED7A97BA0F64DEA67610DAF8321AF8F107BFAA67146A3DC28D07EA2DCAE85F98675ABA5FE55D00FD4CD96BAA38B8F3D90ED3FA9A62AECCF3B7906C6653BD01EA1DCCE973CC23A48AF7B244EEA8EEE3E2CFDA727654B84B9897ACF7B775F596EEF67DC07E692CBEDCCC85DA993FB40DDA139D777A2B006D9A64A9AB08F4F4DDC61D90F889B8AB516E57641C82DAC93FB40EDBAD41D939415E4F767A7FAF6A6717EBADC2210584B5C6E17E41228B5F99F15D002A98135F2F473AC138A7287848B5C1FE8A446B995581BC274E20ED41D9AFF0869F923108A01625FDFF3DEFFC3B28B9FEBC47C70F94FFE9D6B0551EAC4BDEEE18AD49E620DB293DF5F973E17CA8BF7C13014E5A68036CB627FD56E8BD4E6BFEEE1B7D46DC01A5E07495B8F3F3BD5A33727321DE57A407B2DF2736EE7A9D73E1FA813F969B66D90BA434B1F6C896502196FB1D76FE3D93E582EB71E687F2D76416DDFA5369F6977A5EED08A8722384B61853D79C3FB24382C37FAA929AC6D283F676A2E62ED1BD349207587D63D50015FD2C9EBC74790F8F0D730FCB4B8D158CB5D7E2E68B92275721FA8BD90BA435B1EC910D3606413F9197D4146F91916372A034B52949B8BB5C107EA5F25486A8FB0EE60181FC86888BD7B87651F5D6E31C74D029DD4289B23B5F99F15E08FD4F01A0A7BFB41248973F905773F7D9BA598CBCFC61A07EAE648ED36D6F03A25E44DF831391028370AF473A80D529BFE3F12DD93DA1FAC41760048F5F2E353DB07D4655750AE07345C4EACD4BE32EDAAD47E628D92986353DE99C81094ED1F9F02A053F440EDB6D4ED9B7AEC8127586CD41B781A8972932C00E804486D14D31E48DDFE290F4E10964A10FBFA26F7C1392CB7E003F900B40F527BF5BA4710A46EFFF4472FA44B0A8213F38123FEFCDD389F4506D001623A31076ACFA486D78103D714888376587EBE2DD97100D0EE486DC2EB1E5E48ED31D6C94FB6AB2CFA567BD3F2E79FF6F98FF233DF47134027E1EB1E8195FAD95EA324D0D6B47F72ED1BCAADF8906B009DD803F5F3813B50FB8B354AA17C7E67227F5C6E05CA003AB598F6546A608D0C7E0FCF04A0DC3691EBE300A053E57F24FA2035B04606BCAB72020ECBAE58DC68003A150FD43E480DAC61B18F0502E5D6BC1F3D804E32A6DB2EF50B1E3D8A6016204E31975DF8B854009DACAF7B982B35BC86C2C1FA3BCB3EA30CA071A036486A780D797D7F334F770FCBEDBC0B4027C9BF73F14BEA177C7B6442CFC0926AEC3B2C1BEAF2533EF31A4027DBEB1E5E489D70AC516A8A9C94283F85E3861F9F02A053F640EDAED4C01AF9FA617D3EBAEC83C84DB200A0939C69EFA406D6C8BB4FB30EFA61B9751C03E8D4FDAC004FA506D6A839167BF06EF7CF9BE3B22B2203E8543F507B2D35BC06C4DE7F22D4F386BC88E1BAC8001A07EA1649ED29D6203BF0FEFAF2D17C1EBD3F91A12803E85463DA14A9E17550B44D1CC43EBC699C8B2E7BFEA807D0A9F3BA47BBE65CBECD7E48BCE097D7C8BF7CC4D79DF7BC4FA6C33280C681DA0BA99F77FD810A28834F6D223F8524A08765000DA9BD96FAF980B8809255E4001F960134986E93D4C01A25E483537DFF6B18063DAE0134A4F6076B780D8813F39EF741741940436AD7A46E15D6F03A151576E3A3A1DA25D98B18001A4CFB27756BB186D7C923AFDB9FD4E7C55B6104E6F10BA071A036106B909D78521361B1D7EF4F14BC872D8086D43E61DD66AF51F241ECF27B2B2707CA001AB9F8EA472BB186D72946B0571F4192348765008DFC91BA5DAB1FBA3031B0E6FAFA8950C98D328046BE49DDAE8D0F6FB819A83CFC74BED4411940A3164BED12D6ED9245A214AF9D3F79F10ECB001AE1580DB2E12F4406D028498ED5F03A09B5F5F3A3A1003442FE638D92AA567F762A8046C84DACE1356ACBA75923008D8035F20762880CA05140B086D7C9AE302C06D02889BC06D941C31710036804AF91B7B64261008D509BBD469017402304B2412A02D0082184003442080168841042001A21840034420821008D104208402384108046082104A01142084023841002D0082104A01142080168841042001A21840034420821008D1042001A2184108046082104A01142084023841002D0082104A01142080168841042001A21840034420821008D1042001A21841080460821008D1042084023841002D0082104A01142080168841002D00821840034420821008D1042001A21841080460821008D104208402384108046082104A01142080168841002D008218400344208016884104209EAFF0355DC864BEF8CEF140000000049454E44AE426082');
-- ============================================================================
-- Settings
-- ============================================================================
-- Demo Access Token — log in programmatically with `Authorization: Bearer memos_pat_demo`.
-- Only the SHA-256 hash is stored; the prefix `memos_pat_` is the sole format requirement,
-- so a readable demo value works just as well as a random one.
INSERT INTO user_setting (user_id,key,value) VALUES(1,'PERSONAL_ACCESS_TOKENS','{"tokens":[{"tokenId":"demo-access-token","tokenHash":"7631cdaa5b56a39371dab01d5d186fd73f05602cc8ad29bf72ffef3713badd9d","description":"Demo access token","createdAt":"2024-01-01T00:00:00Z"}]}');
INSERT INTO system_setting VALUES ('MEMO_RELATED', '{"contentLengthLimit":8192,"enableAutoCompact":true,"enableComment":true,"enableLocation":true,"defaultVisibility":"PUBLIC","reactions":["👍","💛","🔥","👏","😂","👌","🚀","👀","🤔","🤡","❓","+1","🎉","💡","✅"]}', '');