[{"data":1,"prerenderedAt":365},["ShallowReactive",2],{"i-lucide:chevron-down":3,"i-lucide:arrow-up-right":8,"i-simple-icons:github":10,"i-simple-icons:x":12,"i-brand:linkedin":14,"i-simple-icons:medium":18,"i-lucide:mail":20,"i-lucide:sun":22,"project:\u002Fprojects\u002Frunarks":24,"project-more:\u002Fprojects\u002Frunarks":323,"i-lucide:globe":345,"i-simple-icons:raspberrypi":347,"i-lucide:briefcase-business":349,"i-lucide:calendar":351,"i-lucide:scroll-text":353,"i-lucide:scan-search":355,"i-lucide:users":357,"i-lucide:flask-conical":359,"i-lucide:venetian-mask":361,"i-lucide:key-round":363},{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":7},0,24,false,"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"m6 9l6 6l6-6\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":9},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M7 7h10v10M7 17L17 7\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":11},"\u003Cpath fill=\"currentColor\" d=\"M12 .297c-6.63 0-12 5.373-12 12c0 5.303 3.438 9.8 8.205 11.385c.6.113.82-.258.82-.577c0-.285-.01-1.04-.015-2.04c-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729c1.205.084 1.838 1.236 1.838 1.236c1.07 1.835 2.809 1.305 3.495.998c.108-.776.417-1.305.76-1.605c-2.665-.3-5.466-1.332-5.466-5.93c0-1.31.465-2.38 1.235-3.22c-.135-.303-.54-1.523.105-3.176c0 0 1.005-.322 3.3 1.23c.96-.267 1.98-.399 3-.405c1.02.006 2.04.138 3 .405c2.28-1.552 3.285-1.23 3.285-1.23c.645 1.653.24 2.873.12 3.176c.765.84 1.23 1.91 1.23 3.22c0 4.61-2.805 5.625-5.475 5.92c.42.36.81 1.096.81 2.22c0 1.606-.015 2.896-.015 3.286c0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":13},"\u003Cpath fill=\"currentColor\" d=\"M14.234 10.162L22.977 0h-2.072l-7.591 8.824L7.251 0H.258l9.168 13.343L.258 24H2.33l8.016-9.318L16.749 24h6.993zm-2.837 3.299l-.929-1.329L3.076 1.56h3.182l5.965 8.532l.929 1.329l7.754 11.09h-3.182z\"\u002F>",{"left":4,"top":15,"width":16,"height":16,"rotate":4,"vFlip":6,"hFlip":6,"body":17},32,448,"\u003Cpath fill=\"currentColor\" d=\"M416 32L31.9 32C14.3 32 0 46.5 0 64.3L0 447.7C0 465.5 14.3 480 31.9 480L416 480c17.6 0 32-14.5 32-32.3l0-383.4C448 46.5 433.6 32 416 32zM135.4 416l-66.4 0 0-213.8 66.5 0 0 213.8-.1 0zM102.2 96a38.5 38.5 0 1 1 0 77 38.5 38.5 0 1 1 0-77zM384.3 416l-66.4 0 0-104c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9l0 105.8-66.4 0 0-213.8 63.7 0 0 29.2 .9 0c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9l0 117.2z\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":19},"\u003Cpath fill=\"currentColor\" d=\"M4.21 0A4.2 4.2 0 0 0 0 4.21v15.58A4.2 4.2 0 0 0 4.21 24h15.58A4.2 4.2 0 0 0 24 19.79v-1.093a5 5 0 0 1-.422.02c-2.577 0-4.027-2.146-4.09-4.832a8 8 0 0 1 .022-.708c.093-1.186.475-2.241 1.105-3.022a3.9 3.9 0 0 1 1.395-1.1c.468-.237 1.127-.367 1.664-.367h.023q.151 0 .303.01V4.211A4.2 4.2 0 0 0 19.79 0Zm.198 5.583h4.165l3.588 8.435l3.59-8.435h3.864v.146l-.019.004c-.705.16-1.063.397-1.063 1.254h-.003l.003 10.274c.06.676.424.885 1.063 1.03l.02.004v.145h-4.923v-.145l.019-.005c.639-.144.994-.353 1.054-1.03V7.267l-4.745 11.15h-.261L6.15 7.569v9.445c0 .857.358 1.094 1.063 1.253l.02.004v.147H4.405v-.147l.019-.004c.705-.16 1.065-.397 1.065-1.253V6.987c0-.857-.358-1.094-1.064-1.254l-.018-.004zm19.25 3.668c-1.086.023-1.733 1.323-1.813 3.124H24V9.298a1.4 1.4 0 0 0-.342-.047m-1.862 3.632c-.1 1.756.86 3.239 2.204 3.634v-3.634z\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":21},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"m22 7l-8.991 5.727a2 2 0 0 1-2.009 0L2 7\"\u002F>\u003Crect width=\"20\" height=\"16\" x=\"2\" y=\"4\" rx=\"2\"\u002F>\u003C\u002Fg>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":23},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Ccircle cx=\"12\" cy=\"12\" r=\"4\"\u002F>\u003Cpath d=\"M12 2v2m0 16v2M4.93 4.93l1.41 1.41m11.32 11.32l1.41 1.41M2 12h2m16 0h2M6.34 17.66l-1.41 1.41M19.07 4.93l-1.41 1.41\"\u002F>\u003C\u002Fg>",{"page":25,"project":303},{"id":26,"title":27,"body":28,"description":294,"extension":295,"meta":296,"navigation":297,"path":298,"seo":299,"sitemap":300,"stem":301,"__hash__":302},"projectPages\u002Fprojects\u002Frunarks.md","Runarks",{"type":29,"value":30,"toc":277},"minimark",[31,36,40,51,55,58,92,96,104,110,116,122,128,132,152,156,160,164,171,174,179,186,202,206,213,216,220,227,230,234,249,253,261,269],[32,33,35],"h2",{"id":34},"overview","Overview",[37,38,39],"p",{},"Runarks is my own SaaS for teams that need to read or fix data in production. Instead of sharing a database password, people raise a request with the statement and a reason, a colleague approves it, and they run it once. I founded it and build it on my own.",[41,42,48],"project-shot",{"alt":43,"height":44,"src":45,"width":46,":bare":47,":single":47},"Three screens of Runarks with demo data. In front, the Requests list: each request with its title, labels, statement, connection, a status such as draft, awaiting approval, approved or failed, and who opened it. Tilted behind it, the Activity feed of submissions, guardrail checks, approvals and bypass sessions on the left, and the New request form with its connection and labels on the right.",660,"\u002Fprojects\u002Frunarks\u002Fscreens.webp",1760,"true",[37,49,50],{},"The requests list in front, with the activity log on the left and the new request form on the right.",[32,52,54],{"id":53},"the-problem","The problem",[37,56,57],{},"Most teams fix production by pasting a query from chat into a database client.",[59,60,61,69,75,81],"ul",{},[62,63,64,68],"li",{},[65,66,67],"strong",{},"No review."," Nobody sees the statement first, so one missing filter can change every row.",[62,70,71,74],{},[65,72,73],{},"No record."," Afterwards nobody can say who ran what, or what changed.",[62,76,77,80],{},[65,78,79],{},"Passwords spread."," Everyone who ever needed production keeps the credential.",[62,82,83,86,87,91],{},[65,84,85],{},"Data leaks by accident."," A quick ",[88,89,90],"code",{},"SELECT *"," puts customers' emails and card details on screen.",[32,93,95],{"id":94},"the-solution","The solution",[97,98,101],"sketch-figure",{"alt":99,"name":100},"Before: a message asks someone with the shared password to run a query, which goes straight to production with no review and no record. With Runarks: a request with a reason is approved by a colleague, run once with masking, every step is logged, and nobody is shown a password.","runarks\u002Fbefore-after",[37,102,103],{},"A query becomes a request that someone else approves, and the password never leaves Runarks.",[37,105,106,109],{},[65,107,108],{},"Review first."," A colleague approves each statement on what it will actually do, and only the requester runs it, once.",[37,111,112,115],{},[65,113,114],{},"A record of everything."," Every step is written to a log that can be added to but never edited.",[37,117,118,121],{},[65,119,120],{},"No passwords to share."," Runarks holds the credentials and opens the connection itself.",[37,123,124,127],{},[65,125,126],{},"Masked by default."," Sensitive fields are masked before rows leave Runarks.",[32,129,131],{"id":130},"what-i-did","What I did",[59,133,134,137,140,143,146,149],{},[62,135,136],{},"Defined the product and its security model: who may ask and approve, what may run and what is never shown.",[62,138,139],{},"Designed the executor, the only component allowed to open a connection to a customer's database.",[62,141,142],{},"Built the analyzer that describes a statement the same way for five database engines.",[62,144,145],{},"Designed masking that follows the data, and the append-only activity log.",[62,147,148],{},"Split the code into domains behind contracts, and wrote down each design decision with its reasons.",[62,150,151],{},"Wrote the skills and agents that the coding agents follow in this codebase.",[32,153,155],{"id":154},"what-it-offers","What it offers",[157,158],"feature-grid",{":items":159},"[{\"icon\":\"lucide:scan-search\",\"title\":\"Every statement is read first\",\"text\":\"Each statement is described and checked against grants before anyone is asked to approve it.\"},{\"icon\":\"lucide:users\",\"title\":\"Two people for every change\",\"text\":\"Reads need one approval and writes two by default, and nobody approves their own request.\"},{\"icon\":\"lucide:flask-conical\",\"title\":\"Writes are measured first\",\"text\":\"A dry run counts the rows a write will change, and that count caps the real run.\"},{\"icon\":\"lucide:venetian-mask\",\"title\":\"Masking that follows the data\",\"text\":\"Sensitive columns stay masked through aliases, functions and joins.\"},{\"icon\":\"lucide:key-round\",\"title\":\"No shared passwords\",\"text\":\"Credentials are encrypted and used only by the executor; nobody is ever shown one.\"},{\"icon\":\"lucide:scroll-text\",\"title\":\"A trail nobody can edit\",\"text\":\"Every step goes to a log that the application and the database both keep append-only.\"}]",[32,161,163],{"id":162},"system-design","System design",[97,165,168],{"alt":166,"name":167},"Architecture: requesters and approvers use the web app, a modular monolith split into domains, each behind a contract, with a dashboard and a back office. The executor is the only code that opens a connection to customer databases over short-lived TLS. A separate analyzer process with no credentials or network describes statements. Behind the app sit the Runarks database, a queue and scheduler, and notifications.","runarks\u002Farchitecture",[37,169,170],{},"One web application, with a single executor at its edge and the analyzer in its own process.",[37,172,173],{},"Its domains talk only through each other's contracts, and the back office sees metadata only. A queue and a scheduler expire lapsed requests, check connections and send notifications.",[175,176,178],"h3",{"id":177},"how-a-request-moves","How a request moves",[97,180,183],{"alt":181,"name":182},"State machine of a query request: draft, pending approval, approved, executing, then executed or failed. A dashed bypass path leads from pending approval to approved for reads only. Rejected, expired and cancelled are exits before anything runs.","runarks\u002Frequest-lifecycle",[37,184,185],{},"Every transition is guarded, and every one writes to the activity log.",[37,187,188,189,193,194,197,198,201],{},"There is no path from ",[190,191,192],"em",{},"pending approval"," straight to ",[190,195,196],{},"executing",", and rejecting takes the same permission as approving. Reads needed during an incident use a separate ",[190,199,200],{},"bypass",": reads only, and flagged in the log.",[175,203,205],{"id":204},"one-door-to-production","One door to production",[97,207,210],{"alt":208,"name":209},"The executor is the only component that opens a database connection. An approved request or a read-only bypass session passes through the analyzer, grants, quota and credential gates, reaches the production database over one short-lived TLS connection, and the rows come back through masking. Every gate writes to the append-only activity log.","runarks\u002Fone-door",[37,211,212],{},"The credential is decrypted last, and the connection closes as soon as the statement finishes.",[37,214,215],{},"Every path to a customer's database goes through the executor, and a test fails the build if anything else opens a connection. The analyzer has no credentials or network, and anything it cannot describe is refused.",[175,217,219],{"id":218},"approving-what-a-write-will-do","Approving what a write will do",[97,221,224],{"alt":222,"name":223},"Write pipeline: scan the raw text, parse it into one description, apply write rules, check grants on every column, run a dry run that is always rolled back, then fingerprint the facts. The approver sees the statement, tables, measured rows and masked columns. The run happens in a transaction with a row cap and timeout; it commits and logs the real count, or rolls back if more rows change than were approved.","runarks\u002Fwrite-gates",[37,225,226],{},"A dry run that is always rolled back sees the triggers and cascades a parser misses.",[37,228,229],{},"The approver judges the rows a write would really change, and that count is a hard cap when it runs: if more rows change, it rolls back.",[175,231,233],{"id":232},"masking-that-follows-the-data","Masking that follows the data",[37,235,236,237,240,241,244,245,248],{},"Masking rules are written per column but follow the data, so ",[88,238,239],{},"SELECT ssn AS x"," and ",[88,242,243],{},"CONCAT(first_name, ssn)"," stay masked. Filtering on a masked column is refused, so nobody can recover a value one ",[88,246,247],{},"LIKE"," at a time.",[32,250,252],{"id":251},"in-the-product","In the product",[41,254,258],{"alt":255,"height":256,"src":257,"width":46},"The Requests list in Runarks, showing requests with their SQL, labels, connection, status and who opened them.",924,"\u002Fprojects\u002Frunarks\u002Fapproval-workflow",[37,259,260],{},"Each request carries its statement, labels and status.",[41,262,266],{"alt":263,"height":264,"src":265,"width":46},"The New request form: a title, the statement editor, the connection, a reason for the reviewer and a Submit for approval button.",1096,"\u002Fprojects\u002Frunarks\u002Fsql-guardrails",[37,267,268],{},"The statement is checked as you submit it, before any reviewer sees it.",[41,270,274],{"alt":271,"height":272,"src":273,"width":46},"The Activity page: a day-by-day feed of submissions, guardrail checks, approvals and bypass sessions, with a filter for bypasses only.",1100,"\u002Fprojects\u002Frunarks\u002Factivity-log",[37,275,276],{},"The activity log can be added to but never edited.",{"title":278,"searchDepth":279,"depth":279,"links":280},"",2,[281,282,283,284,285,286,293],{"id":34,"depth":279,"text":35},{"id":53,"depth":279,"text":54},{"id":94,"depth":279,"text":95},{"id":130,"depth":279,"text":131},{"id":154,"depth":279,"text":155},{"id":162,"depth":279,"text":163,"children":287},[288,290,291,292],{"id":177,"depth":289,"text":178},3,{"id":204,"depth":289,"text":205},{"id":218,"depth":289,"text":219},{"id":232,"depth":289,"text":233},{"id":251,"depth":279,"text":252},"How Runarks reviews, runs and records every query against a production database: one door to the database, approvals based on measured effect, masking that follows the data, and an append-only log.","md",{},true,"\u002Fprojects\u002Frunarks",{"description":294},{"loc":298},"projects\u002Frunarks","UF1aQ-Q5ylEbXcLYi69tovJ91gM0XKkgD6fyCmerZwY",{"id":304,"title":305,"context":306,"description":307,"extension":308,"highlight":309,"links":313,"mark":317,"meta":319,"order":320,"stem":301,"year":321,"__hash__":322},"projects\u002Fprojects\u002Frunarks.yml","Runarks · Governed access to production databases","Founder · Aug 2026 – now","My own product: every query against a production database is reviewed, approved, run once and logged, and nobody sees a password.","yml",{"title":310,"description":311,"period":312,"order":279},"Runarks · Governed database access","My own product: every query against production is reviewed, approved, run once and logged, with sensitive fields masked.","2026 – now",[314],{"label":315,"to":316},"runarks.com","https:\u002F\u002Frunarks.com\u002F",{"logo":318},"runarks",{},1,2026,"L4o4YJnfzBcZ_goIVd4z250VZ5GDC78PILuklLwli5U",[324,331,338],{"path":325,"title":326,"description":327,"mark":328,"year":330},"\u002Fprojects\u002Fsanad","Sanad · Real-estate investment platform","The API and admin dashboard I built for a Saudi real-estate investment platform: verified investors, a wallet, investments and returns paid on a schedule.",{"logo":329},"sanad",2024,{"path":332,"title":333,"description":334,"mark":335,"year":337},"\u002Fprojects\u002Fwinch","WINCH · Saudi logistics platform","The back end of a Saudi logistics platform for businesses and carriers: more than 50 domains, and the integration engine I built for government services, payments and AI.",{"logo":336},"winch",2023,{"path":339,"title":340,"description":341,"mark":342,"year":344},"\u002Fprojects\u002Fiot-wash-stations","IoT car-wash stations","Car-wash bays that start when a Faris card holder scans their card: a Raspberry Pi at every bay, driven by one server I built.",{"icon":343},"simple-icons:raspberrypi",2022,{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":346},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Ccircle cx=\"12\" cy=\"12\" r=\"10\"\u002F>\u003Cpath d=\"M12 2a14.5 14.5 0 0 0 0 20a14.5 14.5 0 0 0 0-20M2 12h20\"\u002F>\u003C\u002Fg>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":348},"\u003Cpath fill=\"currentColor\" d=\"m19.896 10.896l-.173-.303c.007-2.174-1.002-3.06-2.179-3.734c.356-.094.724-.172.825-.619c.611-.156.74-.44.8-.74c.16-.106.696-.406.64-.92c.3-.207.467-.473.382-.85c.322-.35.407-.641.27-.909c.387-.48.215-.73.05-.982c.29-.525.034-1.088-.776-.994c-.322-.473-1.024-.366-1.133-.364c-.121-.152-.281-.282-.775-.219c-.32-.285-.677-.236-1.046-.096c-.438-.34-.727-.068-1.058.036c-.53-.171-.652.063-.912.158c-.578-.12-.754.141-1.03.418l-.323-.006c-.872.506-1.305 1.536-1.459 2.066c-.153-.53-.586-1.56-1.457-2.066l-.323.006C9.942.501 9.766.239 9.19.36C8.927.265 8.806.03 8.276.202C8.059.134 7.86-.007 7.624 0a.7.7 0 0 0-.405.166c-.37-.14-.727-.189-1.046.096c-.494-.063-.654.068-.776.22c-.108-.003-.81-.11-1.133.363c-.81-.094-1.065.47-.776.994c-.165.252-.336.502.05.982c-.136.268-.051.558.27.91c-.084.376.083.642.383.849c-.056.515.48.814.639.92c.061.3.19.584.801.74c.1.448.469.525.825.619c-1.177.673-2.186 1.56-2.18 3.735l-.172.302c-1.349.809-2.562 3.406-.664 5.517c.124.661.332 1.136.517 1.661c.277 2.117 2.084 3.108 2.56 3.226c.699.524 1.443 1.02 2.45 1.37c.948.963 1.976 1.33 3.01 1.33h.046c1.034 0 2.062-.367 3.01-1.33c1.007-.35 1.751-.847 2.45-1.37c.476-.118 2.284-1.109 2.56-3.226c.186-.525.394-1 .517-1.66c1.899-2.112.685-4.71-.664-5.518m-1.04-.371c-.07.876-4.635-3.05-3.846-3.181c2.139-.356 3.919.896 3.847 3.18m-2.015 4.365c-1.148.74-2.802.262-3.695-1.069s-.686-3.01.462-3.75s2.803-.263 3.696 1.068c.892 1.33.686 3.01-.463 3.75M13.66 1.372c.04.197.084.321.135.358c.254-.272.462-.55.788-.813c.001.154-.077.321.117.443a2.3 2.3 0 0 1 .727-.624c-.152.26-.026.34.055.448c.24-.206.468-.414.91-.576c-.12.148-.29.292-.11.461c.247-.154.496-.309 1.083-.418c-.132.147-.406.295-.24.442Q17.59.915 18.158.84c-.182.15-.334.296-.184.412c.332-.102.79-.24 1.237-.121l-.283.285c-.032.038.662.03 1.12.036c-.167.232-.338.456-.437.855c.045.046.272.02.486 0c-.22.462-.6.578-.69.776c.135.101.32.075.524.006c-.158.325-.49.548-.751.812c.066.047.182.075.456.043a4.2 4.2 0 0 1-.88.703c.06.07.272.068.467.072c-.313.307-.717.466-1.095.667c.188.13.323.1.467.097c-.267.22-.722.335-1.144.467c.08.125.16.159.332.194c-.447.247-1.087.134-1.268.26c.044.125.167.206.314.274c-.72.041-2.688-.027-3.065-1.516c.737-.81 2.081-1.76 4.394-2.934c-1.8.602-3.423 1.405-4.782 2.51c-1.598-.744-.496-2.62.283-3.365m-1.613 5.372c1.133-.012 2.536.832 2.53 1.629c-.005.702-.985 1.271-2.52 1.26c-1.505-.017-2.518-.715-2.514-1.395c.002-.56 1.228-1.527 2.504-1.494m-5.764-.6c.172-.036.252-.07.332-.195c-.422-.132-.877-.247-1.145-.466c.145.001.28.031.468-.097c-.378-.201-.782-.36-1.095-.667c.195-.005.406-.002.467-.073a4.2 4.2 0 0 1-.88-.703c.274.032.39.004.456-.043c-.262-.264-.593-.487-.751-.812c.203.069.389.095.523-.006c-.089-.198-.47-.314-.69-.776c.215.02.442.046.487 0c-.1-.399-.27-.623-.437-.855c.458-.007 1.152.002 1.12-.036l-.283-.285c.447-.119.905.019 1.237.121c.15-.116-.002-.263-.184-.412q.569.076 1.034.254C7.106.946 6.833.798 6.7.651c.587.11.836.264 1.083.418c.18-.17.01-.313-.111-.46c.443.161.67.37.911.575c.081-.108.207-.187.055-.448c.315.178.552.389.727.624c.194-.122.116-.289.117-.442c.326.261.534.54.788.812c.05-.037.095-.161.135-.358c.78.745 1.88 2.621.283 3.365C9.33 3.633 7.707 2.83 5.909 2.228c2.312 1.174 3.656 2.124 4.392 2.933c-.377 1.49-2.345 1.558-3.065 1.516c.147-.068.27-.149.314-.273c-.18-.126-.821-.013-1.268-.26m2.817 1.133c.788.13-3.777 4.056-3.847 3.18C5.18 8.174 6.96 6.922 9.1 7.278m-4.847 8.756c-1.109-.879-1.466-3.453.59-4.61c1.24-.327.419 5.052-.59 4.61m4.266 4.6c-.626.371-2.145.218-3.225-1.31c-.729-1.282-.635-2.587-.123-2.97c.765-.46 1.946.16 2.856 1.2c.792.94 1.153 2.592.492 3.08m-1.242-5.61c-1.148-.74-1.355-2.42-.462-3.75s2.547-1.81 3.695-1.068c1.148.74 1.355 2.42.463 3.75c-.893 1.331-2.547 1.81-3.695 1.069m4.795 8.229c-1.376.058-2.726-1.11-2.708-1.516c-.02-.594 1.676-1.058 2.782-1.03c1.113-.049 2.607.352 2.61.884c.018.517-1.355 1.684-2.684 1.662m2.759-5.858c.008 1.39-1.226 2.522-2.757 2.53c-1.53.007-2.777-1.114-2.785-2.504v-.026c-.008-1.39 1.226-2.523 2.756-2.53s2.778 1.113 2.786 2.503zm3.855 2.003c-1.186 1.62-2.792 1.684-3.39 1.232c-.625-.58-.148-2.385.71-3.374c.98-1.092 2.03-1.804 2.76-1.248c.492.483.78 2.301-.08 3.39m1.072-3.43c-1.009.44-1.83-4.938-.59-4.61c2.057 1.157 1.7 3.73.59 4.61m-.026-8.328h.299v-.53h.299c.15 0 .205.062.226.205c.015.108.011.239.048.325h.298c-.053-.076-.052-.236-.057-.321c-.01-.138-.051-.28-.198-.318v-.004c.15-.06.215-.18.215-.34c0-.206-.154-.375-.397-.375h-.732zm.299-1.126h.327c.133 0 .205.058.205.188c0 .137-.072.194-.205.194h-.327zm-1.034.464a1.27 1.27 0 1 0 2.54 0a1.27 1.27 0 0 0-2.54 0m2.328 0a1.058 1.058 0 1 1-2.116 0a1.058 1.058 0 0 1 2.116 0\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":350},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"M12 12h.01M16 6V4a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v2m14 7a18.15 18.15 0 0 1-20 0\"\u002F>\u003Crect width=\"20\" height=\"14\" x=\"2\" y=\"6\" rx=\"2\"\u002F>\u003C\u002Fg>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":352},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"M8 2v3m8-3v3\"\u002F>\u003Crect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\"\u002F>\u003Cpath d=\"M3 9h18\"\u002F>\u003C\u002Fg>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":354},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"M15 12h-5m5-4h-5m9 9V5a2 2 0 0 0-2-2H4\"\u002F>\u003Cpath d=\"M8 21h12a2 2 0 0 0 2-2v-1a1 1 0 0 0-1-1H11a1 1 0 0 0-1 1v1a2 2 0 1 1-4 0V5a2 2 0 1 0-4 0v2a1 1 0 0 0 1 1h3\"\u002F>\u003C\u002Fg>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":356},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"M3 7V5a2 2 0 0 1 2-2h2m10 0h2a2 2 0 0 1 2 2v2m0 10v2a2 2 0 0 1-2 2h-2M7 21H5a2 2 0 0 1-2-2v-2\"\u002F>\u003Ccircle cx=\"12\" cy=\"12\" r=\"3\"\u002F>\u003Cpath d=\"m16 16l-1.9-1.9\"\u002F>\u003C\u002Fg>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":358},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2M16 3.128a4 4 0 0 1 0 7.744M22 21v-2a4 4 0 0 0-3-3.87\"\u002F>\u003Ccircle cx=\"9\" cy=\"7\" r=\"4\"\u002F>\u003C\u002Fg>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":360},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M14 2v6a2 2 0 0 0 .245.96l5.51 10.08A2 2 0 0 1 18 22H6a2 2 0 0 1-1.755-2.96l5.51-10.08A2 2 0 0 0 10 8V2M6.453 15h11.094M8.5 2h7\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":362},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"M18 11c-1.5 0-2.5.5-3 2\"\u002F>\u003Cpath d=\"M4 6a2 2 0 0 0-2 2v4a5 5 0 0 0 5 5a8 8 0 0 1 5 2a8 8 0 0 1 5-2a5 5 0 0 0 5-5V8a2 2 0 0 0-2-2h-3a8 8 0 0 0-5 2a8 8 0 0 0-5-2z\"\u002F>\u003Cpath d=\"M6 11c1.5 0 2.5.5 3 2\"\u002F>\u003C\u002Fg>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":364},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z\"\u002F>\u003Ccircle cx=\"16.5\" cy=\"7.5\" r=\".5\" fill=\"currentColor\"\u002F>\u003C\u002Fg>",1791781460908]