<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="/pretty-feed-v3.xsl" type="text/xsl"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>msfjarvis.dev</title>
    <description>Systems Engineer at Cloudflare. Recovering Android developer, amateur Rustacean.</description>
    <link>https://msfjarvis.dev/</link>
    <atom:link href="https://msfjarvis.dev/rss.xml" rel="self" type="application/rss+xml"/>
    <lastBuildDate>Sun, 18 Oct 2026 13:52:34 GMT</lastBuildDate>
    <language>en-us</language>
    <item>
      <title>Weeknotes: Week #42 (2026)</title>
      <link>https://msfjarvis.dev/weeknotes/week-42-2026/</link>
      <guid>https://msfjarvis.dev/weeknotes/week-42-2026/</guid>
      <description>Big things at work and entirely too many social activities</description>
      <pubDate>Sat, 17 Oct 2026 17:19:28 GMT</pubDate>
      <content:encoded><![CDATA[<p>Most of my week went into work as you’ll read below. It has also rained for most of the week which is making me a bit cranky even if I do welcome the slightly cooler weather.</p>
<p>I had a rather surprising interaction over email when the author of <a href="https://macmdviewer.com/">MacMD Viewer</a> reached out to offer a free licence after reading <a href="https://msfjarvis.dev/notes/collating-entries-in-my-obsidian-journal-for-week-notes/">about my Obsidian to week notes</a> setup. I accepted, but admittedly have not had much opportunity to test the tool yet. With Obsidian also gaining support for <a href="https://obsidian.md/changelog/2026-10-05-desktop-v1.14.4/">standalone Markdown files and macOS Quick Look</a> very recently I fear there’s not enough of a moat with this app for me to use it over Obsidian. I’m very evidently not being paid by the author :)</p>
<h1 id="social">Social</h1>
<p>We tried a couple of South Indian breakfast joints this week. On Monday <a href="https://yashgarg.dev">Yash</a>, <a href="https://fknil.com">Fenil</a>, Mayank and I went to <a href="https://www.ammaandappaidlistall.com/Default.aspx">Amma and Appa Idli Stall</a> to sample it before they move at the end of this week to be ~2.5 kilometres further from us. I can’t remember the last time I had a dosa this soft! They will continue to offer free deliveries in Indiranagar, so I hope to make use of the service sometime soon.</p>
<p>On Saturday <a href="https://yashgarg.dev">Yash</a>, <a href="https://fknil.com">Fenil</a> and I went to <a href="https://babaitiffins.com/">Babai Tiffins</a> in HSR for breakfast. The food was good but not enough to justify making the long trip more often.</p>
<div class="gallery" data-pswp-gallery="" style="--gallery-min-width: 250px; --gallery-gap: 1.5rem" data-astro-cid-rj65ajc3=""><figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/dosa-at-babai-tiffins.BVsr8_GA.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/dosa-at-babai-tiffins.BVsr8_GA.webp" data-pswp-width="3072" data-pswp-height="4080" data-pswp-caption="Their chutneys are absolute fire, the visit was worthwhile just for them" aria-label="Golden dosas served with chutneys on banana leaves." data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/dosa-at-babai-tiffins.BVsr8_GA.webp" alt="Golden dosas served with chutneys on banana leaves." loading="lazy" decoding="async" width="3072" height="4080" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">Their chutneys are absolute fire, the visit was worthwhile just for them</figcaption></figure><figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/idli-at-babai-tiffins.B7It7vop.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/idli-at-babai-tiffins.B7It7vop.webp" data-pswp-width="3072" data-pswp-height="4080" data-pswp-caption="The idlis were great but I can't say enough about the chutneys" aria-label="Idlis and vada with chutney on banana leaves." data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/idli-at-babai-tiffins.B7It7vop.webp" alt="Idlis and vada with chutney on banana leaves." loading="lazy" decoding="async" width="3072" height="4080" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">The idlis were great but I can't say enough about the chutneys</figcaption></figure></div>
<p>Fenil took us to a park nearby which <em>almost</em> redeemed the trip. Rain from the day before made moving around the park a bit difficult, but it was still quite beautiful and relaxing.</p>
<div class="gallery" data-pswp-gallery="" style="--gallery-min-width: 250px; --gallery-gap: 1.5rem" data-astro-cid-rj65ajc3=""><figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/park-1.BgexARd2.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/park-1.BgexARd2.webp" data-pswp-width="4080" data-pswp-height="3072" data-pswp-caption="" aria-label="A shaded path runs through a leafy park." data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/park-1.BgexARd2.webp" alt="A shaded path runs through a leafy park." loading="lazy" decoding="async" width="4080" height="3072" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a></figure><figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/park-2.BFmcVBhu.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/park-2.BFmcVBhu.webp" data-pswp-width="4080" data-pswp-height="3072" data-pswp-caption="" aria-label="Dense green plants fill a sunny park garden." data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/park-2.BFmcVBhu.webp" alt="Dense green plants fill a sunny park garden." loading="lazy" decoding="async" width="4080" height="3072" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a></figure><figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/park-3.CAIEmZlr.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/park-3.CAIEmZlr.webp" data-pswp-width="4080" data-pswp-height="3072" data-pswp-caption="" aria-label="A park bench sits beneath tall trees." data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/park-3.CAIEmZlr.webp" alt="A park bench sits beneath tall trees." loading="lazy" decoding="async" width="4080" height="3072" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a></figure></div>
<p><a href="https://underline.center/t/indiewebclub-36/895">IndieWebClub #36</a> was this weekend and I don’t think I did anything at all. I wasn’t really feeling it, so I mostly just poked around at my site and didn’t end up writing anything. Fenil was also trying to work on his site’s CSS during that period, and I was constantly just noticing him thinking out loud with his hands in my peripheral vision. If this was happening at work his ass is being sent into a cubicle, but it was just funny to see in the IWC setting.</p>
<p>I also got my long overdue haircut done, and was promptly punished for it with rain on the way back and a 2-hour power cut to follow it up. Apologies to the Lord above, I’ll grow back the rat’s nest 🙇</p>
<h1 id="reading">Reading</h1>
<p>The power cut was utilized to finish reading <a href="https://msfjarvis.dev/reading/when-we-cease-to-understand-the-world/">When We Cease to Understand the World</a> which was <em>okay</em>, but I definitely have some qualms about the creative liberties taken by the author. Once that was done I started reading <a href="https://msfjarvis.dev/reading/city-of-bones/">City of Bones</a> so I can round off my Martha Wells “<a href="https://matthewdicks.com/what-is-an-authors-filmography-or-discography-called/">bookgraphy</a>”. After this I’ll pick up Witch King and hope Ms Wells does not publish something in the upcoming weeks.</p>
<h1 id="work">Work</h1>
<p>The new office finally opened this week after multiple delays, and I’d definitely say it was worth it. The new space is probably 3 times bigger than what we had, the layout is much more spacious, and the pantry stays stocked (if you see this Jyothi, I’m joking). The downside that we were already aware of was the fact that it’s no longer Metro accessible. The gang decided to validate that by trying to walk to the closest Metro station, and were almost run over by vehicles only twice. Suffice to say we’ll be availing our commuter benefits much more frequently.</p>
<div class="gallery" data-pswp-gallery="" style="--gallery-min-width: 250px; --gallery-gap: 1.5rem" data-astro-cid-rj65ajc3=""><figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/new-office-1.DXFj3y9T.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/new-office-1.DXFj3y9T.webp" data-pswp-width="4080" data-pswp-height="3072" data-pswp-caption="With only 5 floors to the building I consider the self-proclaimed 'Tower B' an unearned label" aria-label="Palm trees stand in front of a modern office building." data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/new-office-1.DXFj3y9T.webp" alt="Palm trees stand in front of a modern office building." loading="lazy" decoding="async" width="4080" height="3072" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">With only 5 floors to the building I consider the self-proclaimed 'Tower B' an unearned label</figcaption></figure><figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/new-office-reception.Cc9xsCgP.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/new-office-reception.Cc9xsCgP.webp" data-pswp-width="4080" data-pswp-height="3072" data-pswp-caption="Having a reception in an office is actually a brand new experience for me" aria-label="The Cloudflare logo hangs above the office reception desk." data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/new-office-reception.Cc9xsCgP.webp" alt="The Cloudflare logo hangs above the office reception desk." loading="lazy" decoding="async" width="4080" height="3072" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">Having a reception in an office is actually a brand new experience for me</figcaption></figure><figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/new-office-2.D1zh-dRv.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/new-office-2.D1zh-dRv.webp" data-pswp-width="4080" data-pswp-height="3072" data-pswp-caption="You wouldn't guess at a first glance, but this building is actually a mall opposite the office" aria-label="A domed building rises behind a leafy garden." data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/new-office-2.D1zh-dRv.webp" alt="A domed building rises behind a leafy garden." loading="lazy" decoding="async" width="4080" height="3072" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">You wouldn't guess at a first glance, but this building is actually a mall opposite the office</figcaption></figure></div>
<p>I’ve been helping out with the <a href="https://developers.cloudflare.com/realtime/realtimekit/">RealtimeKit</a> backend for the past couple of weeks as work on the mobile SDKs was in a bit of a lull. Unsurprisingly I broke something and got to hold the pieces; thankfully this was only to an internal observability system that didn’t cause any customer facing impact. Thanks to debugging from the folks working full-time on the backend the bug was identified quickly, and I was able to submit a follow-up to resolve it. Learning experience and all that!</p>
<p>I saw a new opening in the DevTools team float by on the internal job board that was very tempting, but I’m still not sure if I want to apply and leave the RealtimeKit team. Things are going rather well here, and I still like being a mobile engineer. We’ll see!</p>
<p>Speaking of changes at work, my promotion finally went through this week! I’ve been working towards this for a while now so it feels quite satisfying for this to finally be done. I also got a hefty pay raise to go with it, since I was apparently near the bottom of my existing pay band. As is tradition at this point, my mother’s first question after hearing of the news was asking how much of my new pay will be going away in Income Tax then promptly cursing <a href="https://en.wikipedia.org/wiki/Nirmala_Sitharaman">Nirmala Tai’s</a> entire bloodline.</p>
<h2 id="tangent-about-tangents">Tangent about tangents</h2>
<p>How do people cope with their work just decomposing into a series of tangents? This is a real breakdown of how I started working on a fundamental rearchitecture of the Mobile SDK’s handling of reconnections (modelled after recent changes in the Web SDK) and ended up spending two days doing NONE of it.</p>
<style>
  .mermaid-modal {
    margin: 1.5rem 0;
  }

  .mermaid-modal__figure {
    margin: 0;
  }

  .mermaid-modal__preview {
    display: block;
    overflow-x: auto;
  }

  .mermaid-modal__preview svg {
    display: block;
    max-width: 100%;
    height: auto;
    margin-inline: auto;
  }

  .mermaid-modal__actions {
    display: flex;
    justify-content: center;
    margin-top: 0.75rem;
  }

  .mermaid-modal__open-button {
    appearance: none;
    border: 1px solid var(--border);
    background: var(--bg-subtle);
    color: var(--text);
    border-radius: 999px;
    padding: 0.45rem 0.8rem;
    font: inherit;
    cursor: pointer;
  }

  .mermaid-modal__open-button:hover {
    border-color: var(--accent);
    color: var(--accent);
  }

  .mermaid-modal__dialog {
    position: fixed;
    inset: 0;
    z-index: 40000;
    display: grid;
    place-items: center;
    padding: 1.5rem;
    opacity: 0;
    visibility: hidden;
    pointer-events: none;
    transition: opacity 220ms ease, visibility 220ms ease;
  }

  .mermaid-modal__dialog[data-open='true'] {
    opacity: 1;
    visibility: visible;
    pointer-events: auto;
  }

  .mermaid-modal__overlay {
    position: absolute;
    inset: 0;
    border: 0;
    background: rgb(0 0 0 / 0.72);
    backdrop-filter: blur(10px);
    cursor: pointer;
  }

  .mermaid-modal__sheet {
    position: relative;
    width: min(100%, 1400px);
    max-height: calc(100vh - 3rem);
    display: grid;
    gap: 0.85rem;
    transform: translateY(1rem) scale(0.985);
    opacity: 0;
    transition: transform 260ms ease, opacity 260ms ease;
  }

  .mermaid-modal__dialog[data-open='true'] .mermaid-modal__sheet {
    transform: translateY(0) scale(1);
    opacity: 1;
  }

  .mermaid-modal__content {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 100%;
  }

  .mermaid-modal__content svg {
    display: block;
    width: min(100%, 1400px);
    max-width: 100%;
    max-height: calc(100vh - 8rem);
    height: auto;
    margin-inline: auto;
  }

  .mermaid-modal__close {
    position: absolute;
    top: 0.75rem;
    right: 0.75rem;
    z-index: 1;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    border: 1px solid color-mix(in srgb, white 24%, transparent);
    border-radius: 999px;
    background: rgb(17 17 17 / 0.55);
    color: white;
    padding: 0.6rem;
    cursor: pointer;
    backdrop-filter: blur(12px);
  }

  .mermaid-modal__close:focus-visible,
  .mermaid-modal__open-button:focus-visible {
    outline: 2px solid var(--accent);
    outline-offset: 2px;
  }
</style><img src="data:image/svg+xml;base64,PHN2ZyBpZD0ic2F0dGVyaS1tZXJtYWlkLTAiIHdpZHRoPSIxMDAlIiA6eG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBzdHlsZT0iY29sb3Itc2NoZW1lOmxpZ2h0IGRhcms7bWF4LXdpZHRoOjUxOC45MjJweDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYiIHZpZXdCb3g9IjAgMCA1MTguOTIxODc1IDU0MC41OTk5NzU1ODU5Mzc1IiByb2xlPSJncmFwaGljcy1kb2N1bWVudCBkb2N1bWVudCIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIGNsYXNzPSJmbG93Y2hhcnQgbWVybWFpZC1kaWFncmFtIiBhcmlhLXJvbGVkZXNjcmlwdGlvbj0iZmxvd2NoYXJ0LXYyIj48c3R5bGU+I3NhdHRlcmktbWVybWFpZC0we2ZvbnQtZmFtaWx5OiJ0cmVidWNoZXQgbXMiLHZlcmRhbmEsYXJpYWwsc2Fucy1zZXJpZjtmb250LXNpemU6MTZweDtmaWxsOiM0NDQ0NDQ7fUBrZXlmcmFtZXMgZWRnZS1hbmltYXRpb24tZnJhbWV7ZnJvbXtzdHJva2UtZGFzaG9mZnNldDowO319QGtleWZyYW1lcyBkYXNoe3Rve3N0cm9rZS1kYXNob2Zmc2V0OjA7fX0jc2F0dGVyaS1tZXJtYWlkLTAgLmVkZ2UtYW5pbWF0aW9uLXNsb3d7c3Ryb2tlLWRhc2hhcnJheTo5LDUhaW1wb3J0YW50O3N0cm9rZS1kYXNob2Zmc2V0OjkwMDthbmltYXRpb246ZGFzaCA1MHMgbGluZWFyIGluZmluaXRlO3N0cm9rZS1saW5lY2FwOnJvdW5kO30jc2F0dGVyaS1tZXJtYWlkLTAgLmVkZ2UtYW5pbWF0aW9uLWZhc3R7c3Ryb2tlLWRhc2hhcnJheTo5LDUhaW1wb3J0YW50O3N0cm9rZS1kYXNob2Zmc2V0OjkwMDthbmltYXRpb246ZGFzaCAyMHMgbGluZWFyIGluZmluaXRlO3N0cm9rZS1saW5lY2FwOnJvdW5kO30jc2F0dGVyaS1tZXJtYWlkLTAgLmVycm9yLWljb257ZmlsbDojNTUyMjIyO30jc2F0dGVyaS1tZXJtYWlkLTAgLmVycm9yLXRleHR7ZmlsbDojNTUyMjIyO3N0cm9rZTojNTUyMjIyO30jc2F0dGVyaS1tZXJtYWlkLTAgLmVkZ2UtdGhpY2tuZXNzLW5vcm1hbHtzdHJva2Utd2lkdGg6MXB4O30jc2F0dGVyaS1tZXJtYWlkLTAgLmVkZ2UtdGhpY2tuZXNzLXRoaWNre3N0cm9rZS13aWR0aDozLjVweDt9I3NhdHRlcmktbWVybWFpZC0wIC5lZGdlLXBhdHRlcm4tc29saWR7c3Ryb2tlLWRhc2hhcnJheTowO30jc2F0dGVyaS1tZXJtYWlkLTAgLmVkZ2UtdGhpY2tuZXNzLWludmlzaWJsZXtzdHJva2Utd2lkdGg6MDtmaWxsOm5vbmU7fSNzYXR0ZXJpLW1lcm1haWQtMCAuZWRnZS1wYXR0ZXJuLWRhc2hlZHtzdHJva2UtZGFzaGFycmF5OjM7fSNzYXR0ZXJpLW1lcm1haWQtMCAuZWRnZS1wYXR0ZXJuLWRvdHRlZHtzdHJva2UtZGFzaGFycmF5OjI7fSNzYXR0ZXJpLW1lcm1haWQtMCAubWFya2Vye2ZpbGw6IzQ0NDQ0NDtzdHJva2U6IzQ0NDQ0NDt9I3NhdHRlcmktbWVybWFpZC0wIC5tYXJrZXIuY3Jvc3N7c3Ryb2tlOiM0NDQ0NDQ7fSNzYXR0ZXJpLW1lcm1haWQtMCBzdmd7Zm9udC1mYW1pbHk6InRyZWJ1Y2hldCBtcyIsdmVyZGFuYSxhcmlhbCxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4O30jc2F0dGVyaS1tZXJtYWlkLTAgcHttYXJnaW46MDt9I3NhdHRlcmktbWVybWFpZC0wIC5sYWJlbHtmb250LWZhbWlseToidHJlYnVjaGV0IG1zIix2ZXJkYW5hLGFyaWFsLHNhbnMtc2VyaWY7Y29sb3I6IzExMTExMTt9I3NhdHRlcmktbWVybWFpZC0wIC5jbHVzdGVyLWxhYmVsIHRleHR7ZmlsbDojNDQ0NDQ0O30jc2F0dGVyaS1tZXJtYWlkLTAgLmNsdXN0ZXItbGFiZWwgc3Bhbntjb2xvcjojNDQ0NDQ0O30jc2F0dGVyaS1tZXJtYWlkLTAgLmNsdXN0ZXItbGFiZWwgc3BhbiBwe2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7fSNzYXR0ZXJpLW1lcm1haWQtMCAubGFiZWwgdGV4dCwjc2F0dGVyaS1tZXJtYWlkLTAgc3BhbntmaWxsOiMxMTExMTE7Y29sb3I6IzExMTExMTt9I3NhdHRlcmktbWVybWFpZC0wIC5ub2RlIHJlY3QsI3NhdHRlcmktbWVybWFpZC0wIC5ub2RlIGNpcmNsZSwjc2F0dGVyaS1tZXJtYWlkLTAgLm5vZGUgZWxsaXBzZSwjc2F0dGVyaS1tZXJtYWlkLTAgLm5vZGUgcG9seWdvbiwjc2F0dGVyaS1tZXJtYWlkLTAgLm5vZGUgcGF0aHtmaWxsOiNmN2Y3Zjc7c3Ryb2tlOiM3YTNkNmU7c3Ryb2tlLXdpZHRoOjFweDt9I3NhdHRlcmktbWVybWFpZC0wIC5yb3VnaC1ub2RlIC5sYWJlbCB0ZXh0LCNzYXR0ZXJpLW1lcm1haWQtMCAubm9kZSAubGFiZWwgdGV4dCwjc2F0dGVyaS1tZXJtYWlkLTAgLmltYWdlLXNoYXBlIC5sYWJlbCwjc2F0dGVyaS1tZXJtYWlkLTAgLmljb24tc2hhcGUgLmxhYmVse3RleHQtYW5jaG9yOm1pZGRsZTt9I3NhdHRlcmktbWVybWFpZC0wIC5ub2RlIC5rYXRleCBwYXRoe2ZpbGw6IzAwMDtzdHJva2U6IzAwMDtzdHJva2Utd2lkdGg6MXB4O30jc2F0dGVyaS1tZXJtYWlkLTAgLnJvdWdoLW5vZGUgLmxhYmVsLCNzYXR0ZXJpLW1lcm1haWQtMCAubm9kZSAubGFiZWwsI3NhdHRlcmktbWVybWFpZC0wIC5pbWFnZS1zaGFwZSAubGFiZWwsI3NhdHRlcmktbWVybWFpZC0wIC5pY29uLXNoYXBlIC5sYWJlbHt0ZXh0LWFsaWduOmNlbnRlcjt9I3NhdHRlcmktbWVybWFpZC0wIC5ub2RlLmNsaWNrYWJsZXtjdXJzb3I6cG9pbnRlcjt9I3NhdHRlcmktbWVybWFpZC0wIC5yb290IC5hbmNob3IgcGF0aHtmaWxsOiM0NDQ0NDQhaW1wb3J0YW50O3N0cm9rZS13aWR0aDowO3N0cm9rZTojNDQ0NDQ0O30jc2F0dGVyaS1tZXJtYWlkLTAgLmFycm93aGVhZFBhdGh7ZmlsbDojNDQ0NDQ0O30jc2F0dGVyaS1tZXJtYWlkLTAgLmVkZ2VQYXRoIC5wYXRoe3N0cm9rZTojNDQ0NDQ0O3N0cm9rZS13aWR0aDoxcHg7fSNzYXR0ZXJpLW1lcm1haWQtMCAuZmxvd2NoYXJ0LWxpbmt7c3Ryb2tlOiM0NDQ0NDQ7ZmlsbDpub25lO30jc2F0dGVyaS1tZXJtYWlkLTAgLmVkZ2VMYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmY7dGV4dC1hbGlnbjpjZW50ZXI7fSNzYXR0ZXJpLW1lcm1haWQtMCAuZWRnZUxhYmVsIHB7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmO30jc2F0dGVyaS1tZXJtYWlkLTAgLmVkZ2VMYWJlbCByZWN0e29wYWNpdHk6MC41O2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjtmaWxsOiNmZmZmZmY7fSNzYXR0ZXJpLW1lcm1haWQtMCAubGFiZWxCa2d7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDIzMiwgMjMyLCAyMzIsIDAuNSk7fSNzYXR0ZXJpLW1lcm1haWQtMCAuY2x1c3RlciByZWN0e2ZpbGw6I2Y3ZjdmNztzdHJva2U6I2U4ZThlODtzdHJva2Utd2lkdGg6MXB4O30jc2F0dGVyaS1tZXJtYWlkLTAgLmNsdXN0ZXIgdGV4dHtmaWxsOiM0NDQ0NDQ7fSNzYXR0ZXJpLW1lcm1haWQtMCAuY2x1c3RlciBzcGFue2NvbG9yOiM0NDQ0NDQ7fSNzYXR0ZXJpLW1lcm1haWQtMCBkaXYubWVybWFpZFRvb2x0aXB7cG9zaXRpb246YWJzb2x1dGU7dGV4dC1hbGlnbjpjZW50ZXI7bWF4LXdpZHRoOjIwMHB4O3BhZGRpbmc6MnB4O2ZvbnQtZmFtaWx5OiJ0cmVidWNoZXQgbXMiLHZlcmRhbmEsYXJpYWwsc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtiYWNrZ3JvdW5kOiNmN2Y3Zjc7Ym9yZGVyOjFweCBzb2xpZCAjZThlOGU4O2JvcmRlci1yYWRpdXM6MnB4O3BvaW50ZXItZXZlbnRzOm5vbmU7ei1pbmRleDoxMDA7fSNzYXR0ZXJpLW1lcm1haWQtMCAuZmxvd2NoYXJ0VGl0bGVUZXh0e3RleHQtYW5jaG9yOm1pZGRsZTtmb250LXNpemU6MThweDtmaWxsOiM0NDQ0NDQ7fSNzYXR0ZXJpLW1lcm1haWQtMCByZWN0LnRleHR7ZmlsbDpub25lO3N0cm9rZS13aWR0aDowO30jc2F0dGVyaS1tZXJtYWlkLTAgLmljb24tc2hhcGUsI3NhdHRlcmktbWVybWFpZC0wIC5pbWFnZS1zaGFwZXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmY7dGV4dC1hbGlnbjpjZW50ZXI7fSNzYXR0ZXJpLW1lcm1haWQtMCAuaWNvbi1zaGFwZSBwLCNzYXR0ZXJpLW1lcm1haWQtMCAuaW1hZ2Utc2hhcGUgcHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmY7cGFkZGluZzoycHg7fSNzYXR0ZXJpLW1lcm1haWQtMCAuaWNvbi1zaGFwZSAubGFiZWwgcmVjdCwjc2F0dGVyaS1tZXJtYWlkLTAgLmltYWdlLXNoYXBlIC5sYWJlbCByZWN0e29wYWNpdHk6MC41O2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjtmaWxsOiNmZmZmZmY7fSNzYXR0ZXJpLW1lcm1haWQtMCAubGFiZWwtaWNvbntkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MWVtO292ZXJmbG93OnZpc2libGU7dmVydGljYWwtYWxpZ246LTAuMTI1ZW07fSNzYXR0ZXJpLW1lcm1haWQtMCAubm9kZSAubGFiZWwtaWNvbiBwYXRoe2ZpbGw6Y3VycmVudENvbG9yO3N0cm9rZTpyZXZlcnQ7c3Ryb2tlLXdpZHRoOnJldmVydDt9I3NhdHRlcmktbWVybWFpZC0wIDpyb290ey0tbWVybWFpZC1mb250LWZhbWlseToidHJlYnVjaGV0IG1zIix2ZXJkYW5hLGFyaWFsLHNhbnMtc2VyaWY7fTwvc3R5bGU+PGRlZnM+PGZpbHRlciBpZD0ic2F0dGVyaS1tZXJtYWlkLTAtZHJvcC1zaGFkb3ciIGhlaWdodD0iMTMwJSIgd2lkdGg9IjEzMCUiPjxmZWRyb3BzaGFkb3cgZHg9IjQiIGR5PSI0IiBzdGREZXZpYXRpb249IjAiIGZsb29kLW9wYWNpdHk9IjAuMDYiIGZsb29kLWNvbG9yPSIjMTExMTExIj48L2ZlZHJvcHNoYWRvdz48L2ZpbHRlcj48L2RlZnM+PGRlZnM+PGZpbHRlciBpZD0ic2F0dGVyaS1tZXJtYWlkLTAtZHJvcC1zaGFkb3ctc21hbGwiIGhlaWdodD0iMTUwJSIgd2lkdGg9IjE1MCUiPjxmZWRyb3BzaGFkb3cgZHg9IjIiIGR5PSIyIiBzdGREZXZpYXRpb249IjAiIGZsb29kLW9wYWNpdHk9IjAuMDYiIGZsb29kLWNvbG9yPSIjMTExMTExIj48L2ZlZHJvcHNoYWRvdz48L2ZpbHRlcj48L2RlZnM+PGc+PG1hcmtlciBpZD0ic2F0dGVyaS1tZXJtYWlkLTBfZmxvd2NoYXJ0LXYyLXBvaW50RW5kIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjUiIHJlZlk9IjUiIG1hcmtlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgbWFya2VyV2lkdGg9IjgiIG1hcmtlckhlaWdodD0iOCIgb3JpZW50PSJhdXRvIiBjbGFzcz0ibWFya2VyIGZsb3djaGFydC12MiI+PHBhdGggZD0iTSAwIDAgTCAxMCA1IEwgMCAxMCB6IiBzdHlsZT0ic3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWRhc2hhcnJheToxLCAwIiBjbGFzcz0iYXJyb3dNYXJrZXJQYXRoIj48L3BhdGg+PC9tYXJrZXI+PG1hcmtlciBpZD0ic2F0dGVyaS1tZXJtYWlkLTBfZmxvd2NoYXJ0LXYyLXBvaW50U3RhcnQiIHZpZXdCb3g9IjAgMCAxMCAxMCIgcmVmWD0iNC41IiByZWZZPSI1IiBtYXJrZXJVbml0cz0idXNlclNwYWNlT25Vc2UiIG1hcmtlcldpZHRoPSI4IiBtYXJrZXJIZWlnaHQ9IjgiIG9yaWVudD0iYXV0byIgY2xhc3M9Im1hcmtlciBmbG93Y2hhcnQtdjIiPjxwYXRoIGQ9Ik0gMCA1IEwgMTAgMTAgTCAxMCAwIHoiIHN0eWxlPSJzdHJva2Utd2lkdGg6MTtzdHJva2UtZGFzaGFycmF5OjEsIDAiIGNsYXNzPSJhcnJvd01hcmtlclBhdGgiPjwvcGF0aD48L21hcmtlcj48bWFya2VyIGlkPSJzYXR0ZXJpLW1lcm1haWQtMF9mbG93Y2hhcnQtdjItcG9pbnRFbmQtbWFyZ2luIiB2aWV3Qm94PSIwIDAgMTEuNSAxNCIgcmVmWD0iMTEuNSIgcmVmWT0iNyIgbWFya2VyVW5pdHM9InVzZXJTcGFjZU9uVXNlIiBtYXJrZXJXaWR0aD0iMTAuNSIgbWFya2VySGVpZ2h0PSIxNCIgb3JpZW50PSJhdXRvIiBjbGFzcz0ibWFya2VyIGZsb3djaGFydC12MiI+PHBhdGggZD0iTSAwIDAgTCAxMS41IDcgTCAwIDE0IHoiIHN0eWxlPSJzdHJva2Utd2lkdGg6MDtzdHJva2UtZGFzaGFycmF5OjEsIDAiIGNsYXNzPSJhcnJvd01hcmtlclBhdGgiPjwvcGF0aD48L21hcmtlcj48bWFya2VyIGlkPSJzYXR0ZXJpLW1lcm1haWQtMF9mbG93Y2hhcnQtdjItcG9pbnRTdGFydC1tYXJnaW4iIHZpZXdCb3g9IjAgMCAxMS41IDE0IiByZWZYPSIxIiByZWZZPSI3IiBtYXJrZXJVbml0cz0idXNlclNwYWNlT25Vc2UiIG1hcmtlcldpZHRoPSIxMS41IiBtYXJrZXJIZWlnaHQ9IjE0IiBvcmllbnQ9ImF1dG8iIGNsYXNzPSJtYXJrZXIgZmxvd2NoYXJ0LXYyIj48cG9seWdvbiBwb2ludHM9IjAsNyAxMS41LDE0IDExLjUsMCIgc3R5bGU9InN0cm9rZS13aWR0aDowO3N0cm9rZS1kYXNoYXJyYXk6MSwgMCIgY2xhc3M9ImFycm93TWFya2VyUGF0aCI+PC9wb2x5Z29uPjwvbWFya2VyPjxtYXJrZXIgaWQ9InNhdHRlcmktbWVybWFpZC0wX2Zsb3djaGFydC12Mi1jaXJjbGVFbmQiIHZpZXdCb3g9IjAgMCAxMCAxMCIgcmVmWD0iMTEiIHJlZlk9IjUiIG1hcmtlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgbWFya2VyV2lkdGg9IjExIiBtYXJrZXJIZWlnaHQ9IjExIiBvcmllbnQ9ImF1dG8iIGNsYXNzPSJtYXJrZXIgZmxvd2NoYXJ0LXYyIj48Y2lyY2xlIGN4PSI1IiBjeT0iNSIgcj0iNSIgc3R5bGU9InN0cm9rZS13aWR0aDoxO3N0cm9rZS1kYXNoYXJyYXk6MSwgMCIgY2xhc3M9ImFycm93TWFya2VyUGF0aCI+PC9jaXJjbGU+PC9tYXJrZXI+PG1hcmtlciBpZD0ic2F0dGVyaS1tZXJtYWlkLTBfZmxvd2NoYXJ0LXYyLWNpcmNsZVN0YXJ0IiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9Ii0xIiByZWZZPSI1IiBtYXJrZXJVbml0cz0idXNlclNwYWNlT25Vc2UiIG1hcmtlcldpZHRoPSIxMSIgbWFya2VySGVpZ2h0PSIxMSIgb3JpZW50PSJhdXRvIiBjbGFzcz0ibWFya2VyIGZsb3djaGFydC12MiI+PGNpcmNsZSBjeD0iNSIgY3k9IjUiIHI9IjUiIHN0eWxlPSJzdHJva2Utd2lkdGg6MTtzdHJva2UtZGFzaGFycmF5OjEsIDAiIGNsYXNzPSJhcnJvd01hcmtlclBhdGgiPjwvY2lyY2xlPjwvbWFya2VyPjxtYXJrZXIgaWQ9InNhdHRlcmktbWVybWFpZC0wX2Zsb3djaGFydC12Mi1jaXJjbGVFbmQtbWFyZ2luIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlk9IjUiIHJlZlg9IjEyLjI1IiBtYXJrZXJVbml0cz0idXNlclNwYWNlT25Vc2UiIG1hcmtlcldpZHRoPSIxNCIgbWFya2VySGVpZ2h0PSIxNCIgb3JpZW50PSJhdXRvIiBjbGFzcz0ibWFya2VyIGZsb3djaGFydC12MiI+PGNpcmNsZSBjeD0iNSIgY3k9IjUiIHI9IjUiIHN0eWxlPSJzdHJva2Utd2lkdGg6MDtzdHJva2UtZGFzaGFycmF5OjEsIDAiIGNsYXNzPSJhcnJvd01hcmtlclBhdGgiPjwvY2lyY2xlPjwvbWFya2VyPjxtYXJrZXIgaWQ9InNhdHRlcmktbWVybWFpZC0wX2Zsb3djaGFydC12Mi1jaXJjbGVTdGFydC1tYXJnaW4iIHZpZXdCb3g9IjAgMCAxMCAxMCIgcmVmWD0iLTIiIHJlZlk9IjUiIG1hcmtlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgbWFya2VyV2lkdGg9IjE0IiBtYXJrZXJIZWlnaHQ9IjE0IiBvcmllbnQ9ImF1dG8iIGNsYXNzPSJtYXJrZXIgZmxvd2NoYXJ0LXYyIj48Y2lyY2xlIGN4PSI1IiBjeT0iNSIgcj0iNSIgc3R5bGU9InN0cm9rZS13aWR0aDowO3N0cm9rZS1kYXNoYXJyYXk6MSwgMCIgY2xhc3M9ImFycm93TWFya2VyUGF0aCI+PC9jaXJjbGU+PC9tYXJrZXI+PG1hcmtlciBpZD0ic2F0dGVyaS1tZXJtYWlkLTBfZmxvd2NoYXJ0LXYyLWNyb3NzRW5kIiB2aWV3Qm94PSIwIDAgMTEgMTEiIHJlZlg9IjEyIiByZWZZPSI1LjIiIG1hcmtlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgbWFya2VyV2lkdGg9IjExIiBtYXJrZXJIZWlnaHQ9IjExIiBvcmllbnQ9ImF1dG8iIGNsYXNzPSJtYXJrZXIgY3Jvc3MgZmxvd2NoYXJ0LXYyIj48cGF0aCBkPSJNIDEsMSBsIDksOSBNIDEwLDEgbCAtOSw5IiBzdHlsZT0ic3Ryb2tlLXdpZHRoOjI7c3Ryb2tlLWRhc2hhcnJheToxLCAwIiBjbGFzcz0iYXJyb3dNYXJrZXJQYXRoIj48L3BhdGg+PC9tYXJrZXI+PG1hcmtlciBpZD0ic2F0dGVyaS1tZXJtYWlkLTBfZmxvd2NoYXJ0LXYyLWNyb3NzU3RhcnQiIHZpZXdCb3g9IjAgMCAxMSAxMSIgcmVmWD0iLTEiIHJlZlk9IjUuMiIgbWFya2VyVW5pdHM9InVzZXJTcGFjZU9uVXNlIiBtYXJrZXJXaWR0aD0iMTEiIG1hcmtlckhlaWdodD0iMTEiIG9yaWVudD0iYXV0byIgY2xhc3M9Im1hcmtlciBjcm9zcyBmbG93Y2hhcnQtdjIiPjxwYXRoIGQ9Ik0gMSwxIGwgOSw5IE0gMTAsMSBsIC05LDkiIHN0eWxlPSJzdHJva2Utd2lkdGg6MjtzdHJva2UtZGFzaGFycmF5OjEsIDAiIGNsYXNzPSJhcnJvd01hcmtlclBhdGgiPjwvcGF0aD48L21hcmtlcj48bWFya2VyIGlkPSJzYXR0ZXJpLW1lcm1haWQtMF9mbG93Y2hhcnQtdjItY3Jvc3NFbmQtbWFyZ2luIiB2aWV3Qm94PSIwIDAgMTUgMTUiIHJlZlg9IjE3LjciIHJlZlk9IjcuNSIgbWFya2VyVW5pdHM9InVzZXJTcGFjZU9uVXNlIiBtYXJrZXJXaWR0aD0iMTIiIG1hcmtlckhlaWdodD0iMTIiIG9yaWVudD0iYXV0byIgY2xhc3M9Im1hcmtlciBjcm9zcyBmbG93Y2hhcnQtdjIiPjxwYXRoIGQ9Ik0gMSwxIEwgMTQsMTQgTSAxLDE0IEwgMTQsMSIgc3R5bGU9InN0cm9rZS13aWR0aDoyLjUiIGNsYXNzPSJhcnJvd01hcmtlclBhdGgiPjwvcGF0aD48L21hcmtlcj48bWFya2VyIGlkPSJzYXR0ZXJpLW1lcm1haWQtMF9mbG93Y2hhcnQtdjItY3Jvc3NTdGFydC1tYXJnaW4iIHZpZXdCb3g9IjAgMCAxNSAxNSIgcmVmWD0iLTMuNSIgcmVmWT0iNy41IiBtYXJrZXJVbml0cz0idXNlclNwYWNlT25Vc2UiIG1hcmtlcldpZHRoPSIxMiIgbWFya2VySGVpZ2h0PSIxMiIgb3JpZW50PSJhdXRvIiBjbGFzcz0ibWFya2VyIGNyb3NzIGZsb3djaGFydC12MiI+PHBhdGggZD0iTSAxLDEgTCAxNCwxNCBNIDEsMTQgTCAxNCwxIiBzdHlsZT0ic3Ryb2tlLXdpZHRoOjIuNTtzdHJva2UtZGFzaGFycmF5OjEsIDAiIGNsYXNzPSJhcnJvd01hcmtlclBhdGgiPjwvcGF0aD48L21hcmtlcj48ZyBjbGFzcz0icm9vdCI+PGcgY2xhc3M9ImNsdXN0ZXJzIj48L2c+PGcgY2xhc3M9ImVkZ2VQYXRocyI+PHBhdGggZD0iTTE4MS40NDIsNzcuMTMzTDE3MS40NzYsODEuMzExQzE2MS41MSw4NS40ODksMTQxLjU3Nyw5My44NDQsMTMxLjY4MSwxMDEuNjA2QzEyMS43ODUsMTA5LjM2NywxMjEuOTI2LDExNi41MzQsMTIxLjk5NiwxMjAuMTE3TDEyMi4wNjYsMTIzLjcwMSIgaWQ9InNhdHRlcmktbWVybWFpZC0wLUxfVGFza19UYW5nZW50MV8wIiBzdHlsZT0iIiBjbGFzcz0iZWRnZS10aGlja25lc3Mtbm9ybWFsIGVkZ2UtcGF0dGVybi1zb2xpZCBlZGdlLXRoaWNrbmVzcy1ub3JtYWwgZWRnZS1wYXR0ZXJuLXNvbGlkIGZsb3djaGFydC1saW5rIiBkYXRhLWVkZ2U9InRydWUiIGRhdGEtZXQ9ImVkZ2UiIGRhdGEtaWQ9IkxfVGFza19UYW5nZW50MV8wIiBkYXRhLXBvaW50cz0iVzNzaWVDSTZNVGd4TGpRME1qUTROalV6TXpnMU1ERXNJbmtpT2pjM0xqRXpNamcxTkRjNU5UQXpNekU0ZlN4N0luZ2lPakV5TVM0Mk5EUTFNekV5TlN3aWVTSTZNVEF5TGpFNU9UazVOamswT0RJME1qRTVmU3g3SW5naU9qRXlNaTR4TkRRMU16RXlOU3dpZVNJNk1USTNMalk1T1RrNU5qazBPREkwTWpFNWZWMD0iIGRhdGEtbG9vaz0iY2xhc3NpYyIgbWFya2VyLWVuZD0idXJsKCNzYXR0ZXJpLW1lcm1haWQtMF9mbG93Y2hhcnQtdjItcG9pbnRFbmQpIj48L3BhdGg+PHBhdGggZD0iTTEyMi4xNDUsMjExLjlMMTIyLjA2MSwyMTUuOTgzQzEyMS45NzgsMjIwLjA2NywxMjEuODExLDIyOC4yMzMsMTIxLjgwMSwyMzcuMzY3QzEyMS43OTIsMjQ2LjUsMTIxLjkzOSwyNTYuNiwxMjIuMDEzLDI2MS42NUwxMjIuMDg2LDI2Ni43IiBpZD0ic2F0dGVyaS1tZXJtYWlkLTAtTF9UYW5nZW50MV9UYW5nZW50MV81XzAiIHN0eWxlPSIiIGNsYXNzPSJlZGdlLXRoaWNrbmVzcy1ub3JtYWwgZWRnZS1wYXR0ZXJuLXNvbGlkIGVkZ2UtdGhpY2tuZXNzLW5vcm1hbCBlZGdlLXBhdHRlcm4tc29saWQgZmxvd2NoYXJ0LWxpbmsiIGRhdGEtZWRnZT0idHJ1ZSIgZGF0YS1ldD0iZWRnZSIgZGF0YS1pZD0iTF9UYW5nZW50MV9UYW5nZW50MV81XzAiIGRhdGEtcG9pbnRzPSJXM3NpZUNJNk1USXlMakUwTkRVek1USTFMQ0o1SWpveU1URXVPRGs1T1RrMk9UUTRNalF5TVRoOUxIc2llQ0k2TVRJeExqWTBORFV6TVRJMUxDSjVJam95TXpZdU16azVPVGsyT1RRNE1qUXlNVGg5TEhzaWVDSTZNVEl5TGpFME5EVXpNVEkxTENKNUlqb3lOekF1TmprNU9UazJPVFE0TWpReU1uMWQiIGRhdGEtbG9vaz0iY2xhc3NpYyIgbWFya2VyLWVuZD0idXJsKCNzYXR0ZXJpLW1lcm1haWQtMF9mbG93Y2hhcnQtdjItcG9pbnRFbmQpIj48L3BhdGg+PHBhdGggZD0iTTEyMi4xNDUsMzcyLjVMMTIyLjA2MSwzNzguMDVDMTIxLjk3OCwzODMuNiwxMjEuODExLDM5NC43LDEyMS43OTgsNDAzLjgzM0MxMjEuNzg1LDQxMi45NjcsMTIxLjkyNiw0MjAuMTM0LDEyMS45OTYsNDIzLjcxN0wxMjIuMDY2LDQyNy4zMDEiIGlkPSJzYXR0ZXJpLW1lcm1haWQtMC1MX1RhbmdlbnQxXzVfVGFuZ2VudDFfOV8wIiBzdHlsZT0iIiBjbGFzcz0iZWRnZS10aGlja25lc3Mtbm9ybWFsIGVkZ2UtcGF0dGVybi1zb2xpZCBlZGdlLXRoaWNrbmVzcy1ub3JtYWwgZWRnZS1wYXR0ZXJuLXNvbGlkIGZsb3djaGFydC1saW5rIiBkYXRhLWVkZ2U9InRydWUiIGRhdGEtZXQ9ImVkZ2UiIGRhdGEtaWQ9IkxfVGFuZ2VudDFfNV9UYW5nZW50MV85XzAiIGRhdGEtcG9pbnRzPSJXM3NpZUNJNk1USXlMakUwTkRVek1USTFMQ0o1SWpvek56SXVORGs1T1RrMk9UUTRNalF5TVRSOUxIc2llQ0k2TVRJeExqWTBORFV6TVRJMUxDSjVJam8wTURVdU56azVPVGsyT1RRNE1qUXlNbjBzZXlKNElqb3hNakl1TVRRME5UTXhNalVzSW5raU9qUXpNUzR5T1RrNU9UWTVORGd5TkRJeWZWMD0iIGRhdGEtbG9vaz0iY2xhc3NpYyIgbWFya2VyLWVuZD0idXJsKCNzYXR0ZXJpLW1lcm1haWQtMF9mbG93Y2hhcnQtdjItcG9pbnRFbmQpIj48L3BhdGg+PHBhdGggZD0iTTMzOS4zMDgsNzcuMTMzTDM0OS4xMDcsODEuMzExQzM1OC45MDcsODUuNDg5LDM3OC41MDYsOTMuODQ0LDM4OC4zNzYsMTAxLjYwNkMzOTguMjQ2LDEwOS4zNjcsMzk4LjM4NywxMTYuNTM0LDM5OC40NTcsMTIwLjExN0wzOTguNTI3LDEyMy43MDEiIGlkPSJzYXR0ZXJpLW1lcm1haWQtMC1MX1Rhc2tfVGFuZ2VudDJfMCIgc3R5bGU9IiIgY2xhc3M9ImVkZ2UtdGhpY2tuZXNzLW5vcm1hbCBlZGdlLXBhdHRlcm4tc29saWQgZWRnZS10aGlja25lc3Mtbm9ybWFsIGVkZ2UtcGF0dGVybi1zb2xpZCBmbG93Y2hhcnQtbGluayIgZGF0YS1lZGdlPSJ0cnVlIiBkYXRhLWV0PSJlZGdlIiBkYXRhLWlkPSJMX1Rhc2tfVGFuZ2VudDJfMCIgZGF0YS1wb2ludHM9Ilczc2llQ0k2TXpNNUxqTXdOelV4TXpJek1UazBNRFUyTENKNUlqbzNOeTR4TXpJNE5UUTJPVFF3TlRBMU1YMHNleUo0SWpvek9UZ3VNVEExTkRZNE56VXNJbmtpT2pFd01pNHhPVGs1T1RZNU5EZ3lOREl4T1gwc2V5SjRJam96T1RndU5qQTFORFk0TnpVc0lua2lPakV5Tnk0Mk9UazVPVFk1TkRneU5ESXhPWDFkIiBkYXRhLWxvb2s9ImNsYXNzaWMiIG1hcmtlci1lbmQ9InVybCgjc2F0dGVyaS1tZXJtYWlkLTBfZmxvd2NoYXJ0LXYyLXBvaW50RW5kKSI+PC9wYXRoPjxwYXRoIGQ9Ik0zOTguNjA1LDIxMS45TDM5OC41MjIsMjE1Ljk4M0MzOTguNDM5LDIyMC4wNjcsMzk4LjI3MiwyMjguMjMzLDM5OC4yNTksMjM1LjlDMzk4LjI0NiwyNDMuNTY3LDM5OC4zODcsMjUwLjczNCwzOTguNDU3LDI1NC4zMTdMMzk4LjUyNywyNTcuOTAxIiBpZD0ic2F0dGVyaS1tZXJtYWlkLTAtTF9UYW5nZW50Ml9UYW5nZW50Ml81XzAiIHN0eWxlPSIiIGNsYXNzPSJlZGdlLXRoaWNrbmVzcy1ub3JtYWwgZWRnZS1wYXR0ZXJuLXNvbGlkIGVkZ2UtdGhpY2tuZXNzLW5vcm1hbCBlZGdlLXBhdHRlcm4tc29saWQgZmxvd2NoYXJ0LWxpbmsiIGRhdGEtZWRnZT0idHJ1ZSIgZGF0YS1ldD0iZWRnZSIgZGF0YS1pZD0iTF9UYW5nZW50Ml9UYW5nZW50Ml81XzAiIGRhdGEtcG9pbnRzPSJXM3NpZUNJNk16azRMall3TlRRMk9EYzFMQ0o1SWpveU1URXVPRGs1T1RrMk9UUTRNalF5TVRoOUxIc2llQ0k2TXprNExqRXdOVFEyT0RjMUxDSjVJam95TXpZdU16azVPVGsyT1RRNE1qUXlNVGg5TEhzaWVDSTZNems0TGpZd05UUTJPRGMxTENKNUlqb3lOakV1T0RrNU9UazJPVFE0TWpReU1uMWQiIGRhdGEtbG9vaz0iY2xhc3NpYyIgbWFya2VyLWVuZD0idXJsKCNzYXR0ZXJpLW1lcm1haWQtMF9mbG93Y2hhcnQtdjItcG9pbnRFbmQpIj48L3BhdGg+PHBhdGggZD0iTTM5OC42MDUsMzgxLjNMMzk4LjUyMiwzODUuMzgzQzM5OC40MzksMzg5LjQ2NywzOTguMjcyLDM5Ny42MzMsMzk4LjI1OSw0MDUuM0MzOTguMjQ2LDQxMi45NjcsMzk4LjM4Nyw0MjAuMTM0LDM5OC40NTcsNDIzLjcxN0wzOTguNTI3LDQyNy4zMDEiIGlkPSJzYXR0ZXJpLW1lcm1haWQtMC1MX1RhbmdlbnQyXzVfVGFuZ2VudDJfOV8wIiBzdHlsZT0iIiBjbGFzcz0iZWRnZS10aGlja25lc3Mtbm9ybWFsIGVkZ2UtcGF0dGVybi1zb2xpZCBlZGdlLXRoaWNrbmVzcy1ub3JtYWwgZWRnZS1wYXR0ZXJuLXNvbGlkIGZsb3djaGFydC1saW5rIiBkYXRhLWVkZ2U9InRydWUiIGRhdGEtZXQ9ImVkZ2UiIGRhdGEtaWQ9IkxfVGFuZ2VudDJfNV9UYW5nZW50Ml85XzAiIGRhdGEtcG9pbnRzPSJXM3NpZUNJNk16azRMall3TlRRMk9EYzFMQ0o1SWpvek9ERXVNams1T1RrMk9UUTRNalF5TVRWOUxIc2llQ0k2TXprNExqRXdOVFEyT0RjMUxDSjVJam8wTURVdU56azVPVGsyT1RRNE1qUXlNbjBzZXlKNElqb3pPVGd1TmpBMU5EWTROelVzSW5raU9qUXpNUzR5T1RrNU9UWTVORGd5TkRJeWZWMD0iIGRhdGEtbG9vaz0iY2xhc3NpYyIgbWFya2VyLWVuZD0idXJsKCNzYXR0ZXJpLW1lcm1haWQtMF9mbG93Y2hhcnQtdjItcG9pbnRFbmQpIj48L3BhdGg+PC9nPjxnIGNsYXNzPSJlZGdlTGFiZWxzIj48Zz48cmVjdCBzdHlsZT0ic3Ryb2tlOm5vbmUiIGNsYXNzPSJiYWNrZ3JvdW5kIj48L3JlY3Q+PC9nPjxnPjxyZWN0IHN0eWxlPSJzdHJva2U6bm9uZSIgY2xhc3M9ImJhY2tncm91bmQiPjwvcmVjdD48L2c+PGc+PHJlY3Qgc3R5bGU9InN0cm9rZTpub25lIiBjbGFzcz0iYmFja2dyb3VuZCI+PC9yZWN0PjwvZz48Zz48cmVjdCBzdHlsZT0ic3Ryb2tlOm5vbmUiIGNsYXNzPSJiYWNrZ3JvdW5kIj48L3JlY3Q+PC9nPjxnPjxyZWN0IHN0eWxlPSJzdHJva2U6bm9uZSIgY2xhc3M9ImJhY2tncm91bmQiPjwvcmVjdD48L2c+PGc+PHJlY3Qgc3R5bGU9InN0cm9rZTpub25lIiBjbGFzcz0iYmFja2dyb3VuZCI+PC9yZWN0PjwvZz48ZyBjbGFzcz0iZWRnZUxhYmVsIj48ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLDApIiBjbGFzcz0ibGFiZWwiIGRhdGEtaWQ9IkxfVGFza19UYW5nZW50MV8wIj48dGV4dCB5PSItMTAuMSIgdGV4dC1hbmNob3I9Im1pZGRsZSI+PHRzcGFuIHg9IjAiIHk9Ii0wLjFlbSIgZHk9IjEuMWVtIiBjbGFzcz0icm93IHRleHQtb3V0ZXItdHNwYW4iIHRleHQtYW5jaG9yPSJtaWRkbGUiPjwvdHNwYW4+PC90ZXh0PjwvZz48L2c+PGcgY2xhc3M9ImVkZ2VMYWJlbCI+PGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCwwKSIgY2xhc3M9ImxhYmVsIiBkYXRhLWlkPSJMX1RhbmdlbnQxX1RhbmdlbnQxXzVfMCI+PHRleHQgeT0iLTEwLjEiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjx0c3BhbiB4PSIwIiB5PSItMC4xZW0iIGR5PSIxLjFlbSIgY2xhc3M9InJvdyB0ZXh0LW91dGVyLXRzcGFuIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj48L3RzcGFuPjwvdGV4dD48L2c+PC9nPjxnIGNsYXNzPSJlZGdlTGFiZWwiPjxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsMCkiIGNsYXNzPSJsYWJlbCIgZGF0YS1pZD0iTF9UYW5nZW50MV81X1RhbmdlbnQxXzlfMCI+PHRleHQgeT0iLTEwLjEiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjx0c3BhbiB4PSIwIiB5PSItMC4xZW0iIGR5PSIxLjFlbSIgY2xhc3M9InJvdyB0ZXh0LW91dGVyLXRzcGFuIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj48L3RzcGFuPjwvdGV4dD48L2c+PC9nPjxnIGNsYXNzPSJlZGdlTGFiZWwiPjxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsMCkiIGNsYXNzPSJsYWJlbCIgZGF0YS1pZD0iTF9UYXNrX1RhbmdlbnQyXzAiPjx0ZXh0IHk9Ii0xMC4xIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj48dHNwYW4geD0iMCIgeT0iLTAuMWVtIiBkeT0iMS4xZW0iIGNsYXNzPSJyb3cgdGV4dC1vdXRlci10c3BhbiIgdGV4dC1hbmNob3I9Im1pZGRsZSI+PC90c3Bhbj48L3RleHQ+PC9nPjwvZz48ZyBjbGFzcz0iZWRnZUxhYmVsIj48ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLDApIiBjbGFzcz0ibGFiZWwiIGRhdGEtaWQ9IkxfVGFuZ2VudDJfVGFuZ2VudDJfNV8wIj48dGV4dCB5PSItMTAuMSIgdGV4dC1hbmNob3I9Im1pZGRsZSI+PHRzcGFuIHg9IjAiIHk9Ii0wLjFlbSIgZHk9IjEuMWVtIiBjbGFzcz0icm93IHRleHQtb3V0ZXItdHNwYW4iIHRleHQtYW5jaG9yPSJtaWRkbGUiPjwvdHNwYW4+PC90ZXh0PjwvZz48L2c+PGcgY2xhc3M9ImVkZ2VMYWJlbCI+PGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCwwKSIgY2xhc3M9ImxhYmVsIiBkYXRhLWlkPSJMX1RhbmdlbnQyXzVfVGFuZ2VudDJfOV8wIj48dGV4dCB5PSItMTAuMSIgdGV4dC1hbmNob3I9Im1pZGRsZSI+PHRzcGFuIHg9IjAiIHk9Ii0wLjFlbSIgZHk9IjEuMWVtIiBjbGFzcz0icm93IHRleHQtb3V0ZXItdHNwYW4iIHRleHQtYW5jaG9yPSJtaWRkbGUiPjwvdHNwYW4+PC90ZXh0PjwvZz48L2c+PC9nPjxnIGNsYXNzPSJub2RlcyI+PGcgaWQ9InNhdHRlcmktbWVybWFpZC0wLWZsb3djaGFydC1UYXNrLTAiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDI1OS44NzUsNDIuNTk5OTk4NDc0MTIxMDk0KSIgY2xhc3M9Im5vZGUgZGVmYXVsdCIgZGF0YS1sb29rPSJjbGFzc2ljIj48ZyBjbGFzcz0iYmFzaWMgbGFiZWwtY29udGFpbmVyIG91dGVyLXBhdGgiPjxwYXRoIGQ9Ik0tNzIuNzU3MDMxMjUwMDAwMDEgLTM0LjYgQy0zNC4zODc0MjEwMzM0MDQ3NyAtMzQuNiwgMy45ODIxODkxODMxOTA0NzA4IC0zNC42LCA3Mi43NTcwMzEyNTAwMDAwMSAtMzQuNiBDNzIuNzU3MDMxMjUwMDAwMDEgLTM0LjYsIDcyLjc1NzAzMTI1MDAwMDAxIC0zNC42LCA3Mi43NTcwMzEyNTAwMDAwMSAtMzQuNiBDNzMuMzQwNjcyNzI0ODk3NTIgLTM0LjU4MTI4Mzc1Mzg4OTI1LCA3My45MjQzMTQxOTk3OTUwMiAtMzQuNTYyNTY3NTA3Nzc4NSwgNzQuOTczODYwODYxMzMyNjggLTM0LjUyODkxMDU4OTE2MTY0IEM3NS41MTQ1ODQ1MTA2MDA0MSAtMzQuNDc2NzQ3NjI5MDMyMTEsIDc2LjA1NTMwODE1OTg2ODE1IC0zNC40MjQ1ODQ2Njg5MDI1OSwgNzcuMTgxNTgxMDQ0MjgzOTIgLTM0LjMxNTkzNDQ3ODI4NDMyIEM3OC4wMDE4MTQ4ODUxNTE1IC0zNC4xODMzMjU0MzE5MDEyOSwgNzguODIyMDQ4NzI2MDE5MDkgLTM0LjA1MDcxNjM4NTUxODI1LCA3OS4zNzExMTk4MDMwNjc0OSAtMzMuOTYxOTQ2ODMxODkwODYgQzgwLjExODczNDc4NzY3NzYgLTMzLjc5MTMwODU5MDI5NzMxLCA4MC44NjYzNDk3NzIyODc3IC0zMy42MjA2NzAzNDg3MDM3NiwgODEuNTMzNDc5ODUzMjY4OTYgLTMzLjQ2ODQwMjI2MTE1MDQyIEM4Mi4zMzczNTczMzAwOTk5NiAtMzMuMjI5ODE1NjQ1NjY1OTY1LCA4My4xNDEyMzQ4MDY5MzA5NSAtMzIuOTkxMjI5MDMwMTgxNTEsIDgzLjY1OTc3NTU5MzYxNzI4IC0zMi44MzczMjg4NDY1NjkxMzYgQzg0LjE5NjkzNDEzMTk5NTU1IC0zMi42Mzk2NDk1MzkwMDY4NCwgODQuNzM0MDkyNjcwMzczOCAtMzIuNDQxOTcwMjMxNDQ0NTQsIDg1Ljc0MTI2OTYxODgyNjM1IC0zMi4wNzEzMTk4MDQxNzIzNTQgQzg2LjUwOTc4Mjc4NTUwMTc4IC0zMS43MzExMjE4MjI0MTgyNDUsIDg3LjI3ODI5NTk1MjE3NzIyIC0zMS4zOTA5MjM4NDA2NjQxNCwgODcuNzY5NDA4NjIzNDY3NTMgLTMxLjE3MzUyMjgyOTQyMzcwMyBDODguNDk5MTM2NjIyNTM0MjcgLTMwLjc5MjgyNDE5OTcyMzY4LCA4OS4yMjg4NjQ2MjE2MDA5OSAtMzAuNDEyMTI1NTcwMDIzNjU1LCA4OS43MzU4NTg1NDkzMzYyNiAtMzAuMTQ3NjI3MTYyNjY5Mjc3IEM5MC4yNjk0NzUwMTk5MTIwMiAtMjkuODI0MTQ1NzIyMzI3NzkyLCA5MC44MDMwOTE0OTA0ODc3OSAtMjkuNTAwNjY0MjgxOTg2MzEsIDkxLjYzMjUzODgzMTg4NSAtMjguOTk3ODQ4NDI5MjU3NjkgQzkyLjE0MDkyOTY3NjU1NzMyIC0yOC42NDMyMTY5ODM4OTkyMzcsIDkyLjY0OTMyMDUyMTIyOTY1IC0yOC4yODg1ODU1Mzg1NDA3ODcsIDkzLjQ1MTY1NTYwNDk5NjA5IC0yNy43Mjg5MTEzMTY2MzEzIEM5My45NDc2MzYwMjM3MDQ1NSAtMjcuMzMzMzgwMTMxMzA0NTUsIDk0LjQ0MzYxNjQ0MjQxMyAtMjYuOTM3ODQ4OTQ1OTc3Nzk4LCA5NS4xODU3MzM3Mjc2NDk0OCAtMjYuMzQ2MDMwMTU5NTcyMDU2IEM5NS43MTA3NTE3MTQyNzM1MSAtMjUuODY5MjIyNzE1MzM0ODIsIDk2LjIzNTc2OTcwMDg5NzU1IC0yNS4zOTI0MTUyNzEwOTc1ODMsIDk2LjgyNzY0NzUwMDg4MDY0IC0yNC44NTQ4ODc1MTMzODEzNzQgQzk3LjE3NDU0MTAyMzU5NiAtMjQuNDk2NjkxNDcwNjg5ODg2LCA5Ny41MjE0MzQ1NDYzMTEzNSAtMjQuMTM4NDk1NDI3OTk4NCwgOTguMzcwNjQ5OTQ4ODA1OTIgLTIzLjI2MTYxMDgwMzA0MTU3IEM5OC44NDgyNTAyNTQxNzY0MiAtMjIuNzAwNTk0MzA4MTI2MTM1LCA5OS4zMjU4NTA1NTk1NDY5NCAtMjIuMTM5NTc3ODEzMjEwNjk2LCA5OS44MDg0MDA1NDMzOTM4NCAtMjEuNTcyNzQ3MTQ0MzEyMTg1IEMxMDAuMjA4ODMzOTA3MTI1MDMgLTIxLjAzNjIwMjkxNzE0MjMwOCwgMTAwLjYwOTI2NzI3MDg1NjIxIC0yMC40OTk2NTg2ODk5NzI0MjgsIDEwMS4xMzQ5OTEyNTkwNTQ2OSAtMTkuNzk1MjM2NDQwMjI3MDggQzEwMS40MjEyMDM2MDA3MDQ1NCAtMTkuMzU1NTM3NDI0Njc3OTIzLCAxMDEuNzA3NDE1OTQyMzU0NCAtMTguOTE1ODM4NDA5MTI4NzY3LCAxMDIuMzQ0OTcwODQ5OTg0OTkgLTE3LjkzNjM4Mjg2MzU0NDE3IEMxMDIuNjY5NjE5NzUzMDQzODggLTE3LjM1OTkzNTg2MTg5NjkzLCAxMDIuOTk0MjY4NjU2MTAyNzYgLTE2Ljc4MzQ4ODg2MDI0OTY4MywgMTAzLjQzMzM2NzI1MDUwNTgyIC0xNi4wMDM4MjQ4NDIzMzI5IEMxMDMuNjgwNDQ1OTY5NjU1NzEgLTE1LjQ5MDc2MDU5NTM4MDQ4NiwgMTAzLjkyNzUyNDY4ODgwNTU4IC0xNC45Nzc2OTYzNDg0MjgwNywgMTA0LjM5NTcwODAwNjM0NzEyIC0xNC4wMDU1MDM2NzIwMzQ4MzYgQzEwNC42MDcwNjAyMTA3NTM3MiAtMTMuNDgzNDU5NjQwOTMzNjU0LCAxMDQuODE4NDEyNDE1MTYwMzEgLTEyLjk2MTQxNTYwOTgzMjQ3MywgMTA1LjIyODAzODY1MjkyMTczIC0xMS45NDk2MzA4ODI5NzcyNiBDMTA1LjQ5MzAzNTU1MDkzODM3IC0xMS4xNTE1MDI0NDc2NzMwMjMsIDEwNS43NTgwMzI0NDg5NTUwMiAtMTAuMzUzMzc0MDEyMzY4Nzg3LCAxMDUuOTI2OTM4OTY1MDY4NDcgLTkuODQ0NjU0NDk3NDMzNzM0IEMxMDYuMTE3NTIxNDU0OTk5MDUgLTkuMTE3ODgwODY0MzU0NzkyLCAxMDYuMzA4MTAzOTQ0OTI5NjQgLTguMzkxMTA3MjMxMjc1ODUsIDEwNi40ODk1MzcwMTE0OTExMSAtNy42OTkyMjQzMTQ4ODg0ODI1IEMxMDYuNjI0OTg0MzQxMTY4MDIgLTcuMDAzNzMwOTAzODAwODU5LCAxMDYuNzYwNDMxNjcwODQ0OTEgLTYuMzA4MjM3NDkyNzEzMjM2NSwgMTA2LjkxMzUyMDk1NjEzOTk5IC01LjUyMjE1NjM2ODE1NDkzNCBDMTA3LjAxNTQ1NzQxNjA5MDIzIC00LjczMTU1NzMxNDQxMTcyLCAxMDcuMTE3MzkzODc2MDQwNDcgLTMuOTQwOTU4MjYwNjY4NTA2LCAxMDcuMTk3MTQ4NTU4MDQyMjcgLTMuMzIyMzk2Njk2NDA1Nzk1IEMxMDcuMjQ5NDgxNzM0Njg5MjggLTIuNTA3MjY1MjI3NTQ4NzI0NiwgMTA3LjMwMTgxNDkxMTMzNjMgLTEuNjkyMTMzNzU4NjkxNjU0MywgMTA3LjMzOTI1NDMzMDU0MzgxIC0xLjEwODk4NDU4Mzk3OTI2ODcgQzEwNy4zMzkyNTQzMzA1NDM4MSAtMC40MDI3MjgxMTU5MDk3ODAzLCAxMDcuMzM5MjU0MzMwNTQzODEgMC4zMDM1MjgzNTIxNTk3MDgxLCAxMDcuMzM5MjU0MzMwNTQzODEgMS4xMDg5ODQ1ODM5NzkyNjA1IEMxMDcuMzA0NjM4NzEzODY0NyAxLjY0ODE1MDc1NDk3OTI4MDcsIDEwNy4yNzAwMjMwOTcxODU1OSAyLjE4NzMxNjkyNTk3OTMwMDQsIDEwNy4xOTcxNDg1NTgwNDIyNyAzLjMyMjM5NjY5NjQwNTc3MTYgQzEwNy4xMjg4NjgzNDM2ODA3IDMuODUxOTY0NTU1NTQwNzQ1LCAxMDcuMDYwNTg4MTI5MzE5MTMgNC4zODE1MzI0MTQ2NzU3MTksIDEwNi45MTM1MjA5NTYxMzk5OSA1LjUyMjE1NjM2ODE1NDkxIEMxMDYuNzU2MjUwNjk4MDU5MzIgNi4zMjk3MDU5MDQzMTgzNDEsIDEwNi41OTg5ODA0Mzk5Nzg2NSA3LjEzNzI1NTQ0MDQ4MTc3MiwgMTA2LjQ4OTUzNzAxMTQ5MTExIDcuNjk5MjI0MzE0ODg4NDc0NSBDMTA2LjM3NTgzMTc2OTE5MzMgOC4xMzI4MzE2ODM5MzM3NzcsIDEwNi4yNjIxMjY1MjY4OTU0OSA4LjU2NjQzOTA1Mjk3OTA4LCAxMDUuOTI2OTM4OTY1MDY4NDcgOS44NDQ2NTQ0OTc0MzM3MSBDMTA1LjY4NTQyODQ5OTYwMDIyIDEwLjU3MjA0NTUzOTk1NzAzMSwgMTA1LjQ0MzkxODAzNDEzMTk3IDExLjI5OTQzNjU4MjQ4MDM1MiwgMTA1LjIyODAzODY1MjkyMTczIDExLjk0OTYzMDg4Mjk3NzIzNyBDMTA0LjkxMTM3ODg0NzI3OTkzIDEyLjczMTc4NjcyNTExMzMyNCwgMTA0LjU5NDcxOTA0MTYzODEzIDEzLjUxMzk0MjU2NzI0OTQxLCAxMDQuMzk1NzA4MDA2MzQ3MTIgMTQuMDA1NTAzNjcyMDM0ODI1IEMxMDQuMTU1MDk1MjIxMjM5NjYgMTQuNTA1MTQxMjY4NTk5MzI0LCAxMDMuOTE0NDgyNDM2MTMyMiAxNS4wMDQ3Nzg4NjUxNjM4MjUsIDEwMy40MzMzNjcyNTA1MDU4MiAxNi4wMDM4MjQ4NDIzMzI4OTMgQzEwMy4xNTY5Nzk1NzU1NzUxMSAxNi40OTQ1NzkxNDY0NTkzMTIsIDEwMi44ODA1OTE5MDA2NDQzOCAxNi45ODUzMzM0NTA1ODU3MzUsIDEwMi4zNDQ5NzA4NDk5ODQ5OSAxNy45MzYzODI4NjM1NDQxNjQgQzEwMi4wODY5MTIwODQ3OTcgMTguMzMyODMwNDI1MzU0MDcsIDEwMS44Mjg4NTMzMTk2MDkwMSAxOC43MjkyNzc5ODcxNjM5NzUsIDEwMS4xMzQ5OTEyNTkwNTQ2OSAxOS43OTUyMzY0NDAyMjcwNiBDMTAwLjY0MTQ0MDQyOTg4MzIgMjAuNDU2NTQ5NTg3OTExMzIsIDEwMC4xNDc4ODk2MDA3MTE3NCAyMS4xMTc4NjI3MzU1OTU1NzMsIDk5LjgwODQwMDU0MzM5Mzg0IDIxLjU3Mjc0NzE0NDMxMjE3NCBDOTkuMzg3OTIzNTE5MTA1NDMgMjIuMDY2NjYzMzgyODYxODI2LCA5OC45Njc0NDY0OTQ4MTcwMSAyMi41NjA1Nzk2MjE0MTE0NzQsIDk4LjM3MDY0OTk0ODgwNTk1IDIzLjI2MTYxMDgwMzA0MTU1IEM5OC4wMTg1Njc3ODcxNTQgMjMuNjI1MTY0NTQxNDMwMjQ4LCA5Ny42NjY0ODU2MjU1MDIwNSAyMy45ODg3MTgyNzk4MTg5NDQsIDk2LjgyNzY0NzUwMDg4MDY0IDI0Ljg1NDg4NzUxMzM4MTM2NyBDOTYuMjM3ODIxNzgyNTEzNDkgMjUuMzkwNTUxNjI0ODY5MDgsIDk1LjY0Nzk5NjA2NDE0NjM1IDI1LjkyNjIxNTczNjM1Njc5NSwgOTUuMTg1NzMzNzI3NjQ5NSAyNi4zNDYwMzAxNTk1NzIwMzUgQzk0LjY3NDgyNDE3MDY1OTUyIDI2Ljc1MzQ2NjkzNTM5NzI1LCA5NC4xNjM5MTQ2MTM2Njk1MyAyNy4xNjA5MDM3MTEyMjI0NiwgOTMuNDUxNjU1NjA0OTk2MDkgMjcuNzI4OTExMzE2NjMxMjk3IEM5Mi45NzEzOTE4OTMyMzk4MyAyOC4wNjM5MjI0OTE2NzE0NjYsIDkyLjQ5MTEyODE4MTQ4MzU3IDI4LjM5ODkzMzY2NjcxMTYzLCA5MS42MzI1Mzg4MzE4ODUwMSAyOC45OTc4NDg0MjkyNTc2OCBDOTEuMTA0MjU0NjkyNjM0NTYgMjkuMzE4MDk3Mzc5MDEzNTEsIDkwLjU3NTk3MDU1MzM4NDEgMjkuNjM4MzQ2MzI4NzY5MzM0LCA4OS43MzU4NTg1NDkzMzYyNiAzMC4xNDc2MjcxNjI2NjkyNzQgQzg5LjE2MDgyMDM2ODI5ODQ1IDMwLjQ0NzYyNDIxMzM4NzE3LCA4OC41ODU3ODIxODcyNjA2MiAzMC43NDc2MjEyNjQxMDUwNjcsIDg3Ljc2OTQwODYyMzQ2NzUzIDMxLjE3MzUyMjgyOTQyMzcgQzg3LjE4OTU3OTAyNDcwNDYgMzEuNDMwMTk2MTkyNzYyMTE4LCA4Ni42MDk3NDk0MjU5NDE2NyAzMS42ODY4Njk1NTYxMDA1MzYsIDg1Ljc0MTI2OTYxODgyNjM3IDMyLjA3MTMxOTgwNDE3MjM1IEM4NS4zMjMyNjQ5NTkxMzM5NSAzMi4yMjUxNDkzODI5MzE4NzUsIDg0LjkwNTI2MDI5OTQ0MTU0IDMyLjM3ODk3ODk2MTY5MTQsIDgzLjY1OTc3NTU5MzYxNzMxIDMyLjgzNzMyODg0NjU2OTEzIEM4Mi44NDU0MzAxMDM1ODU4OCAzMy4wNzkwMjIzMTM0MjM3NTYsIDgyLjAzMTA4NDYxMzU1NDQ2IDMzLjMyMDcxNTc4MDI3ODM4LCA4MS41MzM0Nzk4NTMyNjkgMzMuNDY4NDAyMjYxMTUwNDE2IEM4MC44NzMwNDAyMDY3MjI5OSAzMy42MTkxNDMzMDA3MDMwOCwgODAuMjEyNjAwNTYwMTc2OTcgMzMuNzY5ODg0MzQwMjU1NzQsIDc5LjM3MTExOTgwMzA2NzUgMzMuOTYxOTQ2ODMxODkwODYgQzc4LjY5Njg1ODI1OTM3MTA3IDM0LjA3MDk1NjIwOTI5OTMzLCA3OC4wMjI1OTY3MTU2NzQ2NCAzNC4xNzk5NjU1ODY3MDc4MSwgNzcuMTgxNTgxMDQ0MjgzOTQgMzQuMzE1OTM0NDc4Mjg0MzEgQzc2LjU0ODY4MDUxMTczMjczIDM0LjM3Njk4OTYzMTQ4NTI3LCA3NS45MTU3Nzk5NzkxODE1MSAzNC40MzgwNDQ3ODQ2ODYyNCwgNzQuOTczODYwODYxMzMyNjggMzQuNTI4OTEwNTg5MTYxNjQgQzc0LjQ3NjY3NTAxNTgwMzE0IDM0LjU0NDg1NDM3MTUxNDIzLCA3My45Nzk0ODkxNzAyNzM2IDM0LjU2MDc5ODE1Mzg2NjgyLCA3Mi43NTcwMzEyNTAwMDAwMSAzNC42IEM3Mi43NTcwMzEyNTAwMDAwMSAzNC42LCA3Mi43NTcwMzEyNTAwMDAwMSAzNC42LCA3Mi43NTcwMzEyNTAwMDAwMSAzNC42IEMxNi44MDE1MTY4NDQzNjY1MDMgMzQuNiwgLTM5LjE1Mzk5NzU2MTI2NzAwNSAzNC42LCAtNzIuNzU3MDMxMjUwMDAwMDEgMzQuNiBDLTczLjI0MzEyMjI2ODU0MjQyIDM0LjU4NDQxMjAwNzE1NDExNCwgLTczLjcyOTIxMzI4NzA4NDgyIDM0LjU2ODgyNDAxNDMwODIzNCwgLTc0Ljk3Mzg2MDg2MTMzMjY3IDM0LjUyODkxMDU4OTE2MTY0IEMtNzUuNDc5NzgxNDg2NTE2NSAzNC40ODAxMDUwMzQ5MDg3MjUsIC03NS45ODU3MDIxMTE3MDAzMyAzNC40MzEyOTk0ODA2NTU4MiwgLTc3LjE4MTU4MTA0NDI4MzkzIDM0LjMxNTkzNDQ3ODI4NDMxIEMtNzcuODE2NzA1NTIwMzY3NzYgMzQuMjEzMjUyNDc4NDU0OTU1LCAtNzguNDUxODI5OTk2NDUxNTggMzQuMTEwNTcwNDc4NjI1NiwgLTc5LjM3MTExOTgwMzA2NzQ5IDMzLjk2MTk0NjgzMTg5MDg2IEMtNzkuOTY0OTUwNTcwNDMwNDUgMzMuODI2NDA4ODM0MzQ4MTcsIC04MC41NTg3ODEzMzc3OTM0IDMzLjY5MDg3MDgzNjgwNTQ4LCAtODEuNTMzNDc5ODUzMjY4OTYgMzMuNDY4NDAyMjYxMTUwNDIgQy04Mi4wNzI0NjczMTI2MzQxMyAzMy4zMDg0MzM2MTI0MTM3NSwgLTgyLjYxMTQ1NDc3MTk5OTI5IDMzLjE0ODQ2NDk2MzY3NzA4LCAtODMuNjU5Nzc1NTkzNjE3MjcgMzIuODM3MzI4ODQ2NTY5MTQgQy04NC4zMjM1MjMxNTM2Njk4NyAzMi41OTMwNjM2MDg4NTQ2LCAtODQuOTg3MjcwNzEzNzIyNDggMzIuMzQ4Nzk4MzcxMTQwMDU2LCAtODUuNzQxMjY5NjE4ODI2MzcgMzIuMDcxMzE5ODA0MTcyMzU0IEMtODYuMTU2MDk4ODE5MDQ2IDMxLjg4NzY4NzIyMjcwNjEzLCAtODYuNTcwOTI4MDE5MjY1NjQgMzEuNzA0MDU0NjQxMjM5OTEsIC04Ny43Njk0MDg2MjM0Njc1MSAzMS4xNzM1MjI4Mjk0MjM3MDcgQy04OC4zMDI5NzM4ODEwNjg5NyAzMC44OTUxNjIxNzYyOTc4OSwgLTg4LjgzNjUzOTEzODY3MDQyIDMwLjYxNjgwMTUyMzE3MjA3NSwgLTg5LjczNTg1ODU0OTMzNjI2IDMwLjE0NzYyNzE2MjY2OTI4NCBDLTkwLjI3NDM1OTg4NDcwMjE1IDI5LjgyMTE4NDQ4ODU4NTM3LCAtOTAuODEyODYxMjIwMDY4MDMgMjkuNDk0NzQxODE0NTAxNDU2LCAtOTEuNjMyNTM4ODMxODg0OTcgMjguOTk3ODQ4NDI5MjU3NyBDLTkyLjI2ODQ3MzczNTQxOTI0IDI4LjU1NDI0Nzc2OTczMDQ4LCAtOTIuOTA0NDA4NjM4OTUzNSAyOC4xMTA2NDcxMTAyMDMyNjQsIC05My40NTE2NTU2MDQ5OTYwOCAyNy43Mjg5MTEzMTY2MzEzMDQgQy05My44MTcyMDY2NDg2NDEgMjcuNDM3Mzk0MDg3MDQ2MjgsIC05NC4xODI3NTc2OTIyODU5NSAyNy4xNDU4NzY4NTc0NjEyNTcsIC05NS4xODU3MzM3Mjc2NDk0OCAyNi4zNDYwMzAxNTk1NzIwNiBDLTk1Ljc0NjM3OTY3NzI0NTg4IDI1LjgzNjg2NjM0MjAyNzU2MiwgLTk2LjMwNzAyNTYyNjg0MjI5IDI1LjMyNzcwMjUyNDQ4MzA2NSwgLTk2LjgyNzY0NzUwMDg4MDYzIDI0Ljg1NDg4NzUxMzM4MTM5MiBDLTk3LjM0NzAwMzMxNDAzNDIzIDI0LjMxODYwOTk5NjM5NTA1NCwgLTk3Ljg2NjM1OTEyNzE4NzgyIDIzLjc4MjMzMjQ3OTQwODcxNiwgLTk4LjM3MDY0OTk0ODgwNTkzIDIzLjI2MTYxMDgwMzA0MTU2MyBDLTk4Ljc4MDY4OTUyNjA4MzIyIDIyLjc3OTk1NDk4MzY1ODc1NCwgLTk5LjE5MDcyOTEwMzM2MDUgMjIuMjk4Mjk5MTY0Mjc1OTQ2LCAtOTkuODA4NDAwNTQzMzkzODQgMjEuNTcyNzQ3MTQ0MzEyMTkgQy0xMDAuMDgzMjY1Mzk3MDIzMDEgMjEuMjA0NDUzMjgxMTUyNDE0LCAtMTAwLjM1ODEzMDI1MDY1MjE3IDIwLjgzNjE1OTQxNzk5MjY0LCAtMTAxLjEzNDk5MTI1OTA1NDY5IDE5Ljc5NTIzNjQ0MDIyNzA4MiBDLTEwMS4zODMyOTgwMjg0Mzc1OCAxOS40MTM3NzA1NjI3NTEzMywgLTEwMS42MzE2MDQ3OTc4MjA0OSAxOS4wMzIzMDQ2ODUyNzU1NzcsIC0xMDIuMzQ0OTcwODQ5OTg0OTcgMTcuOTM2MzgyODYzNTQ0MTg2IEMtMTAyLjY3MzM1NjczNTE4OTE1IDE3LjM1MzMwMDQ3MTY4NzUsIC0xMDMuMDAxNzQyNjIwMzkzMzMgMTYuNzcwMjE4MDc5ODMwODE2LCAtMTAzLjQzMzM2NzI1MDUwNTgxIDE2LjAwMzgyNDg0MjMzMjkwNCBDLTEwMy42OTI3OTcwNzc5MDEzMyAxNS40NjUxMTMyNTQ4MzcwMzQsIC0xMDMuOTUyMjI2OTA1Mjk2ODUgMTQuOTI2NDAxNjY3MzQxMTY2LCAtMTA0LjM5NTcwODAwNjM0NzEyIDE0LjAwNTUwMzY3MjAzNDg0IEMtMTA0LjYzNTY1Njc0MTE3NTE4IDEzLjQxMjgyNTY1NzkxNjMzMSwgLTEwNC44NzU2MDU0NzYwMDMyNCAxMi44MjAxNDc2NDM3OTc4MjQsIC0xMDUuMjI4MDM4NjUyOTIxNzMgMTEuOTQ5NjMwODgyOTc3MjY2IEMtMTA1LjQzNjc0OTQ2MDE3MDc3IDExLjMyMTAyNzE4NTA5NDM1NSwgLTEwNS42NDU0NjAyNjc0MTk4MSAxMC42OTI0MjM0ODcyMTE0NDMsIC0xMDUuOTI2OTM4OTY1MDY4NDcgOS44NDQ2NTQ0OTc0MzM3MjMgQy0xMDYuMDY3MTEyNzQyNDMwMjggOS4zMTAxMTExMzI2NTM3MjUsIC0xMDYuMjA3Mjg2NTE5NzkyMDkgOC43NzU1Njc3Njc4NzM3MjgsIC0xMDYuNDg5NTM3MDExNDkxMTEgNy42OTkyMjQzMTQ4ODg0ODcgQy0xMDYuNjMyMDA1MzczMjI1NDEgNi45Njc2NzkzODgwODE3NCwgLTEwNi43NzQ0NzM3MzQ5NTk3MyA2LjIzNjEzNDQ2MTI3NDk5MywgLTEwNi45MTM1MjA5NTYxMzk5OSA1LjUyMjE1NjM2ODE1NDkzOCBDLTEwNi45NzQ3MTg3NjM3MDM0OCA1LjA0NzUxODI1NzU2NjUwMywgLTEwNy4wMzU5MTY1NzEyNjY5NyA0LjU3Mjg4MDE0Njk3ODA2NzYsIC0xMDcuMTk3MTQ4NTU4MDQyMjcgMy4zMjIzOTY2OTY0MDU4MTUgQy0xMDcuMjM5OTYzMzE3ODQ0NzggMi42NTU1MjIyNTMwMjk2NTEsIC0xMDcuMjgyNzc4MDc3NjQ3MyAxLjk4ODY0NzgwOTY1MzQ4NjUsIC0xMDcuMzM5MjU0MzMwNTQzODEgMS4xMDg5ODQ1ODM5NzkyNzMxIEMtMTA3LjMzOTI1NDMzMDU0MzgxIDAuMzI3MDE1MDU4OTE4NzU0MDQsIC0xMDcuMzM5MjU0MzMwNTQzODEgLTAuNDU0OTU0NDY2MTQxNzY1MDUsIC0xMDcuMzM5MjU0MzMwNTQzODEgLTEuMTA4OTg0NTgzOTc5MjU2MyBDLTEwNy4zMDM4MTM5MzI3Njk5NCAtMS42NjA5OTczODYyODEzNjYzLCAtMTA3LjI2ODM3MzUzNDk5NjA5IC0yLjIxMzAxMDE4ODU4MzQ3NjUsIC0xMDcuMTk3MTQ4NTU4MDQyMjcgLTMuMzIyMzk2Njk2NDA1NzY3NiBDLTEwNy4xMDE3MTQ5MzkzMzMyOCAtNC4wNjI1NjA5OTc2MTMxNywgLTEwNy4wMDYyODEzMjA2MjQyOCAtNC44MDI3MjUyOTg4MjA1NzMsIC0xMDYuOTEzNTIwOTU2MTM5OTkgLTUuNTIyMTU2MzY4MTU0OTIxNSBDLTEwNi44MDE1NDM1MzU0MzYyNyAtNi4wOTcxMzY3NTcwMzIyNTUsIC0xMDYuNjg5NTY2MTE0NzMyNTYgLTYuNjcyMTE3MTQ1OTA5NTg4NSwgLTEwNi40ODk1MzcwMTE0OTExMSAtNy42OTkyMjQzMTQ4ODg0NzEgQy0xMDYuMzIzNTcyNjI0NzA5NDcgLTguMzMyMTE4NDUxMTA3MTAzLCAtMTA2LjE1NzYwODIzNzkyNzgzIC04Ljk2NTAxMjU4NzMyNTczNCwgLTEwNS45MjY5Mzg5NjUwNjg0NyAtOS44NDQ2NTQ0OTc0MzM3MDUgQy0xMDUuNzcxMjAwNjgyNTE2NTIgLTEwLjMxMzcxMzM5MDk1NDU4MiwgLTEwNS42MTU0NjIzOTk5NjQ1OCAtMTAuNzgyNzcyMjg0NDc1NDYsIC0xMDUuMjI4MDM4NjUyOTIxNzMgLTExLjk0OTYzMDg4Mjk3NzIyMSBDLTEwNS4wMjQ4NzMwNDczNDAyNCAtMTIuNDUxNDUzODU2NzAzMjYsIC0xMDQuODIxNzA3NDQxNzU4NzUgLTEyLjk1MzI3NjgzMDQyOTMwMSwgLTEwNC4zOTU3MDgwMDYzNDcxMiAtMTQuMDA1NTAzNjcyMDM0ODIyIEMtMTA0LjA3OTUwMTc5NTQzOTg0IC0xNC42NjIxMTI2MzQ3MTI4NTcsIC0xMDMuNzYzMjk1NTg0NTMyNTYgLTE1LjMxODcyMTU5NzM5MDg5NCwgLTEwMy40MzMzNjcyNTA1MDU4MiAtMTYuMDAzODI0ODQyMzMyODkgQy0xMDMuMDk4OTE3NDg1MzQ0MzQgLTE2LjU5NzY3NDI2NzA4ODE5NSwgLTEwMi43NjQ0Njc3MjAxODI4NiAtMTcuMTkxNTIzNjkxODQzNTAzLCAtMTAyLjM0NDk3MDg0OTk4NDk5IC0xNy45MzYzODI4NjM1NDQxNzUgQy0xMDEuODc5MzU1NzEzNjUxMzQgLTE4LjY1MTY5Mjc0ODEyMzM0NSwgLTEwMS40MTM3NDA1NzczMTc2OCAtMTkuMzY3MDAyNjMyNzAyNTE2LCAtMTAxLjEzNDk5MTI1OTA1NDY5IC0xOS43OTUyMzY0NDAyMjcwNyBDLTEwMC43NTEyOTkyMTMxMjIgLTIwLjMwOTM0ODgyNjcxMjM5LCAtMTAwLjM2NzYwNzE2NzE4OTMyIC0yMC44MjM0NjEyMTMxOTc3MDcsIC05OS44MDg0MDA1NDMzOTM4NCAtMjEuNTcyNzQ3MTQ0MzEyMTc0IEMtOTkuMzUzMzcxODE1MDEgLTIyLjEwNzI0OTc4MDUzOTk4OCwgLTk4Ljg5ODM0MzA4NjYyNjEzIC0yMi42NDE3NTI0MTY3Njc4LCAtOTguMzcwNjQ5OTQ4ODA1OTUgLTIzLjI2MTYxMDgwMzA0MTU1IEMtOTcuODg4MDAyMzk1NTAyNjcgLTIzLjc1OTk4NDAyNzkyODI1NSwgLTk3LjQwNTM1NDg0MjE5OTM5IC0yNC4yNTgzNTcyNTI4MTQ5NTcsIC05Ni44Mjc2NDc1MDA4ODA2NiAtMjQuODU0ODg3NTEzMzgxMzU3IEMtOTYuMzE2NDYyNzM0MTg3MjMgLTI1LjMxOTEzMTk5MzI4NDU2OCwgLTk1LjgwNTI3Nzk2NzQ5MzggLTI1Ljc4MzM3NjQ3MzE4Nzc4LCAtOTUuMTg1NzMzNzI3NjQ5NTIgLTI2LjM0NjAzMDE1OTU3MjAyNyBDLTk0LjU4Mjk4MjA3NTUwMDExIC0yNi44MjY3MDg1NjIyNjYwODgsIC05My45ODAyMzA0MjMzNTA2OSAtMjcuMzA3Mzg2OTY0OTYwMTUsIC05My40NTE2NTU2MDQ5OTYwOSAtMjcuNzI4OTExMzE2NjMxMjk0IEMtOTIuOTA4OTM3Mzk2MDU5NTMgLTI4LjEwNzQ4ODA0NTI5MjgzMywgLTkyLjM2NjIxOTE4NzEyMjk3IC0yOC40ODYwNjQ3NzM5NTQzNjgsIC05MS42MzI1Mzg4MzE4ODUwMSAtMjguOTk3ODQ4NDI5MjU3Njc2IEMtOTEuMjQ0MjIyNDY5OTQyMDkgLTI5LjIzMzI0ODA4OTg2NzcyLCAtOTAuODU1OTA2MTA3OTk5MTYgLTI5LjQ2ODY0Nzc1MDQ3Nzc2NCwgLTg5LjczNTg1ODU0OTMzNjI2IC0zMC4xNDc2MjcxNjI2NjkyNyBDLTg5LjA1NzI3MzA1NjczMjY4IC0zMC41MDE2NDQ3Nzk1MDU4LCAtODguMzc4Njg3NTY0MTI5MTIgLTMwLjg1NTY2MjM5NjM0MjMzMiwgLTg3Ljc2OTQwODYyMzQ2NzUzIC0zMS4xNzM1MjI4Mjk0MjM3IEMtODcuMzEzMTAzMDMzNjg3NDUgLTMxLjM3NTUxNTc3ODE5NDk0NSwgLTg2Ljg1Njc5NzQ0MzkwNzM4IC0zMS41Nzc1MDg3MjY5NjYxOSwgLTg1Ljc0MTI2OTYxODgyNjM4IC0zMi4wNzEzMTk4MDQxNzIzNSBDLTg1LjI4NzQyODk5MDEyMTQ0IC0zMi4yMzgzMzczNTA3OTI1NSwgLTg0LjgzMzU4ODM2MTQxNjUgLTMyLjQwNTM1NDg5NzQxMjc1LCAtODMuNjU5Nzc1NTkzNjE3MzEgLTMyLjgzNzMyODg0NjU2OTEzIEMtODIuOTM5NzMyMjE3OTQyMjkgLTMzLjA1MTAzMzk0MDg4NDY2NSwgLTgyLjIxOTY4ODg0MjI2NzI5IC0zMy4yNjQ3MzkwMzUyMDAyLCAtODEuNTMzNDc5ODUzMjY5IC0zMy40Njg0MDIyNjExNTA0MSBDLTgxLjA1NTk2NDI2MTQ2Mzg2IC0zMy41NzczOTIwNzg4OTk0ODYsIC04MC41Nzg0NDg2Njk2NTg3IC0zMy42ODYzODE4OTY2NDg1NiwgLTc5LjM3MTExOTgwMzA2NzUgLTMzLjk2MTk0NjgzMTg5MDg1NiBDLTc4Ljc3NTMwNDk2OTQ0MDgyIC0zNC4wNTgyNzM1NTM1Nzg1NywgLTc4LjE3OTQ5MDEzNTgxNDE1IC0zNC4xNTQ2MDAyNzUyNjYyOSwgLTc3LjE4MTU4MTA0NDI4Mzk0IC0zNC4zMTU5MzQ0NzgyODQzMSBDLTc2LjM1ODQ0MzY0OTE5MjY1IC0zNC4zOTUzNDE1NTI4MjEyMTUsIC03NS41MzUzMDYyNTQxMDEzNCAtMzQuNDc0NzQ4NjI3MzU4MTI1LCAtNzQuOTczODYwODYxMzMyNjggLTM0LjUyODkxMDU4OTE2MTY0IEMtNzQuMjU3NjA5MjY4NTI4NyAtMzQuNTUxODc5MzgzNjQzNzE1LCAtNzMuNTQxMzU3Njc1NzI0NzEgLTM0LjU3NDg0ODE3ODEyNTc4NCwgLTcyLjc1NzAzMTI1MDAwMDAzIC0zNC42IEMtNzIuNzU3MDMxMjUwMDAwMDMgLTM0LjYsIC03Mi43NTcwMzEyNTAwMDAwMSAtMzQuNiwgLTcyLjc1NzAzMTI1MDAwMDAxIC0zNC42IiBzdHJva2U9Im5vbmUiIGZpbGw9IiNmN2Y3ZjciIHN0eWxlPSIiIHN0cm9rZS13aWR0aD0iMCI+PC9wYXRoPjxwYXRoIGQ9Ik0tNzIuNzU3MDMxMjUwMDAwMDEgLTM0LjYgQy00MC45MTM2MDM4MTU3MjgxMiAtMzQuNiwgLTkuMDcwMTc2MzgxNDU2MjI4IC0zNC42LCA3Mi43NTcwMzEyNTAwMDAwMSAtMzQuNiBNLTcyLjc1NzAzMTI1MDAwMDAxIC0zNC42IEMtMjkuNjI5OTY2MjYyNjk3NjM2IC0zNC42LCAxMy40OTcwOTg3MjQ2MDQ3NCAtMzQuNiwgNzIuNzU3MDMxMjUwMDAwMDEgLTM0LjYgTTcyLjc1NzAzMTI1MDAwMDAxIC0zNC42IEM3Mi43NTcwMzEyNTAwMDAwMSAtMzQuNiwgNzIuNzU3MDMxMjUwMDAwMDEgLTM0LjYsIDcyLjc1NzAzMTI1MDAwMDAxIC0zNC42IE03Mi43NTcwMzEyNTAwMDAwMSAtMzQuNiBDNzIuNzU3MDMxMjUwMDAwMDEgLTM0LjYsIDcyLjc1NzAzMTI1MDAwMDAxIC0zNC42LCA3Mi43NTcwMzEyNTAwMDAwMSAtMzQuNiBNNzIuNzU3MDMxMjUwMDAwMDEgLTM0LjYgQzczLjU5Njg5NDE3OTA3NDg0IC0zNC41NzMwNjcyMzA1NTg1OSwgNzQuNDM2NzU3MTA4MTQ5NjYgLTM0LjU0NjEzNDQ2MTExNzE4NCwgNzQuOTczODYwODYxMzMyNjggLTM0LjUyODkxMDU4OTE2MTY0IE03Mi43NTcwMzEyNTAwMDAwMSAtMzQuNiBDNzMuNjIzMTA4ODM4MzkyMyAtMzQuNTcyMjI2NTc3NDU4MDIsIDc0LjQ4OTE4NjQyNjc4NDYgLTM0LjU0NDQ1MzE1NDkxNjA0LCA3NC45NzM4NjA4NjEzMzI2OCAtMzQuNTI4OTEwNTg5MTYxNjQgTTc0Ljk3Mzg2MDg2MTMzMjY4IC0zNC41Mjg5MTA1ODkxNjE2NCBDNzUuNjQwNjM1NjAzNTgyMjggLTM0LjQ2NDU4NzYzMTY5MDc3NiwgNzYuMzA3NDEwMzQ1ODMxODggLTM0LjQwMDI2NDY3NDIxOTkwNSwgNzcuMTgxNTgxMDQ0MjgzOTIgLTM0LjMxNTkzNDQ3ODI4NDMyIE03NC45NzM4NjA4NjEzMzI2OCAtMzQuNTI4OTEwNTg5MTYxNjQgQzc1LjU3NDg3MTA1NTA5NTc0IC0zNC40NzA5MzE4NTg1ODk4MywgNzYuMTc1ODgxMjQ4ODU4NzkgLTM0LjQxMjk1MzEyODAxODAyLCA3Ny4xODE1ODEwNDQyODM5MiAtMzQuMzE1OTM0NDc4Mjg0MzIgTTc3LjE4MTU4MTA0NDI4MzkyIC0zNC4zMTU5MzQ0NzgyODQzMiBDNzcuNzcwMjcxNTQxMDkyOTUgLTM0LjIyMDc1OTU2NDEyMzIyLCA3OC4zNTg5NjIwMzc5MDE5NyAtMzQuMTI1NTg0NjQ5OTYyMTIsIDc5LjM3MTExOTgwMzA2NzQ5IC0zMy45NjE5NDY4MzE4OTA4NiBNNzcuMTgxNTgxMDQ0MjgzOTIgLTM0LjMxNTkzNDQ3ODI4NDMyIEM3Ny45NTQwMTMyNzEyODExMSAtMzQuMTkxMDUzNjI2MTI0OCwgNzguNzI2NDQ1NDk4Mjc4MzEgLTM0LjA2NjE3Mjc3Mzk2NTI4LCA3OS4zNzExMTk4MDMwNjc0OSAtMzMuOTYxOTQ2ODMxODkwODYgTTc5LjM3MTExOTgwMzA2NzQ5IC0zMy45NjE5NDY4MzE4OTA4NiBDNzkuOTQyNDQyNTk5OTcwNTIgLTMzLjgzMTU0NjEzMTcyNzQyLCA4MC41MTM3NjUzOTY4NzM1NCAtMzMuNzAxMTQ1NDMxNTYzOTcsIDgxLjUzMzQ3OTg1MzI2ODk2IC0zMy40Njg0MDIyNjExNTA0MiBNNzkuMzcxMTE5ODAzMDY3NDkgLTMzLjk2MTk0NjgzMTg5MDg2IEM3OS45MTkwMzg5Mjg4MTcyIC0zMy44MzY4ODc4NjY5NDQ5MzQsIDgwLjQ2Njk1ODA1NDU2NjkzIC0zMy43MTE4Mjg5MDE5OTkwMDYsIDgxLjUzMzQ3OTg1MzI2ODk2IC0zMy40Njg0MDIyNjExNTA0MiBNODEuNTMzNDc5ODUzMjY4OTYgLTMzLjQ2ODQwMjI2MTE1MDQyIEM4Mi4zMDM1OTAyMzU5MDgwNiAtMzMuMjM5ODM3NTQxOTc1MDIsIDgzLjA3MzcwMDYxODU0NzE2IC0zMy4wMTEyNzI4MjI3OTk2MjYsIDgzLjY1OTc3NTU5MzYxNzI4IC0zMi44MzczMjg4NDY1NjkxMzYgTTgxLjUzMzQ3OTg1MzI2ODk2IC0zMy40Njg0MDIyNjExNTA0MiBDODIuMDA5MjY3NzcwMDY3OTQgLTMzLjMyNzE5MDkwNDkwNjIyNCwgODIuNDg1MDU1Njg2ODY2OTEgLTMzLjE4NTk3OTU0ODY2MjAyNiwgODMuNjU5Nzc1NTkzNjE3MjggLTMyLjgzNzMyODg0NjU2OTEzNiBNODMuNjU5Nzc1NTkzNjE3MjggLTMyLjgzNzMyODg0NjU2OTEzNiBDODQuMjMzMTMyMDQ5Nzc0MDQgLTMyLjYyNjMyODM3MDY1NDQ3LCA4NC44MDY0ODg1MDU5MzA4IC0zMi40MTUzMjc4OTQ3Mzk4LCA4NS43NDEyNjk2MTg4MjYzNSAtMzIuMDcxMzE5ODA0MTcyMzU0IE04My42NTk3NzU1OTM2MTcyOCAtMzIuODM3MzI4ODQ2NTY5MTM2IEM4NC4yMzU3ODk0NjUwODc1NSAtMzIuNjI1MzUwNDE3MjU0MjIsIDg0LjgxMTgwMzMzNjU1NzgzIC0zMi40MTMzNzE5ODc5MzkzLCA4NS43NDEyNjk2MTg4MjYzNSAtMzIuMDcxMzE5ODA0MTcyMzU0IE04NS43NDEyNjk2MTg4MjYzNSAtMzIuMDcxMzE5ODA0MTcyMzU0IEM4Ni40MTk4MTM1ODY3MjQxMiAtMzEuNzcwOTQ4NTE3ODc1NjYzLCA4Ny4wOTgzNTc1NTQ2MjE4OCAtMzEuNDcwNTc3MjMxNTc4OTY4LCA4Ny43Njk0MDg2MjM0Njc1MyAtMzEuMTczNTIyODI5NDIzNzAzIE04NS43NDEyNjk2MTg4MjYzNSAtMzIuMDcxMzE5ODA0MTcyMzU0IEM4Ni4yNDAyNTUxNjc5NTAyNyAtMzEuODUwNDMzNzAzNDU1NjA0LCA4Ni43MzkyNDA3MTcwNzQxNyAtMzEuNjI5NTQ3NjAyNzM4ODUzLCA4Ny43Njk0MDg2MjM0Njc1MyAtMzEuMTczNTIyODI5NDIzNzAzIE04Ny43Njk0MDg2MjM0Njc1MyAtMzEuMTczNTIyODI5NDIzNzAzIEM4OC40OTg0MjY3NjE4Mjk4IC0zMC43OTMxOTQ1MzM1OTg1MDYsIDg5LjIyNzQ0NDkwMDE5MjA4IC0zMC40MTI4NjYyMzc3NzMzMDgsIDg5LjczNTg1ODU0OTMzNjI2IC0zMC4xNDc2MjcxNjI2NjkyNzcgTTg3Ljc2OTQwODYyMzQ2NzUzIC0zMS4xNzM1MjI4Mjk0MjM3MDMgQzg4LjIzNTY5NjgxNDQ3NTMyIC0zMC45MzAyNjA1Nzg4NDY3NzcsIDg4LjcwMTk4NTAwNTQ4MzEyIC0zMC42ODY5OTgzMjgyNjk4NSwgODkuNzM1ODU4NTQ5MzM2MjYgLTMwLjE0NzYyNzE2MjY2OTI3NyBNODkuNzM1ODU4NTQ5MzM2MjYgLTMwLjE0NzYyNzE2MjY2OTI3NyBDOTAuMzYxMzEzNDA3MjI3OTggLTI5Ljc2ODQ3Mjc1MjIzNDU4NywgOTAuOTg2NzY4MjY1MTE5NzEgLTI5LjM4OTMxODM0MTc5OTg5MywgOTEuNjMyNTM4ODMxODg1IC0yOC45OTc4NDg0MjkyNTc2OSBNODkuNzM1ODU4NTQ5MzM2MjYgLTMwLjE0NzYyNzE2MjY2OTI3NyBDOTAuNDA3MTA1OTYyNjc4NjYgLTI5Ljc0MDcxMzAzNjAxMzQ1NywgOTEuMDc4MzUzMzc2MDIxMDcgLTI5LjMzMzc5ODkwOTM1NzYzNiwgOTEuNjMyNTM4ODMxODg1IC0yOC45OTc4NDg0MjkyNTc2OSBNOTEuNjMyNTM4ODMxODg1IC0yOC45OTc4NDg0MjkyNTc2OSBDOTIuMjc1MjQwMTI2NTUzNTMgLTI4LjU0OTUyNzgyODE4NzU2LCA5Mi45MTc5NDE0MjEyMjIwNCAtMjguMTAxMjA3MjI3MTE3NDM1LCA5My40NTE2NTU2MDQ5OTYwOSAtMjcuNzI4OTExMzE2NjMxMyBNOTEuNjMyNTM4ODMxODg1IC0yOC45OTc4NDg0MjkyNTc2OSBDOTIuMTM1OTA3MzE4OTI4ODYgLTI4LjY0NjcyMDM2MzE2NjUsIDkyLjYzOTI3NTgwNTk3MjcgLTI4LjI5NTU5MjI5NzA3NTMxMywgOTMuNDUxNjU1NjA0OTk2MDkgLTI3LjcyODkxMTMxNjYzMTMgTTkzLjQ1MTY1NTYwNDk5NjA5IC0yNy43Mjg5MTEzMTY2MzEzIEM5NC4wNTkxMDIwNTA4MjMxNiAtMjcuMjQ0NDg4OTQwOTEzMDE2LCA5NC42NjY1NDg0OTY2NTAyMiAtMjYuNzYwMDY2NTY1MTk0NzI3LCA5NS4xODU3MzM3Mjc2NDk0OCAtMjYuMzQ2MDMwMTU5NTcyMDU2IE05My40NTE2NTU2MDQ5OTYwOSAtMjcuNzI4OTExMzE2NjMxMyBDOTQuMTMxMzIxNDY4ODg3MDQgLTI3LjE4Njg5NTg3Njg0NjQ5NiwgOTQuODEwOTg3MzMyNzc3OTggLTI2LjY0NDg4MDQzNzA2MTY5NCwgOTUuMTg1NzMzNzI3NjQ5NDggLTI2LjM0NjAzMDE1OTU3MjA1NiBNOTUuMTg1NzMzNzI3NjQ5NDggLTI2LjM0NjAzMDE1OTU3MjA1NiBDOTUuNTg1Njg5MzIyMDgzODggLTI1Ljk4MjgwMTA3MDk1MTg3MiwgOTUuOTg1NjQ0OTE2NTE4MjggLTI1LjYxOTU3MTk4MjMzMTY5MiwgOTYuODI3NjQ3NTAwODgwNjQgLTI0Ljg1NDg4NzUxMzM4MTM3NCBNOTUuMTg1NzMzNzI3NjQ5NDggLTI2LjM0NjAzMDE1OTU3MjA1NiBDOTUuNTg0MjUxNjE1MTA2NzggLTI1Ljk4NDEwNjc1ODM4ODgzLCA5NS45ODI3Njk1MDI1NjQxIC0yNS42MjIxODMzNTcyMDU2MDMsIDk2LjgyNzY0NzUwMDg4MDY0IC0yNC44NTQ4ODc1MTMzODEzNzQgTTk2LjgyNzY0NzUwMDg4MDY0IC0yNC44NTQ4ODc1MTMzODEzNzQgQzk3LjIxNzUyMzUwNDgyMzQ5IC0yNC40NTIzMDg1Mjk4OTUxNzMsIDk3LjYwNzM5OTUwODc2NjMyIC0yNC4wNDk3Mjk1NDY0MDg5NzYsIDk4LjM3MDY0OTk0ODgwNTkyIC0yMy4yNjE2MTA4MDMwNDE1NyBNOTYuODI3NjQ3NTAwODgwNjQgLTI0Ljg1NDg4NzUxMzM4MTM3NCBDOTcuMjA2MTg0NTUxMjEyODEgLTI0LjQ2NDAxNjkzMDQ0MzU5NSwgOTcuNTg0NzIxNjAxNTQ0OTggLTI0LjA3MzE0NjM0NzUwNTgyLCA5OC4zNzA2NDk5NDg4MDU5MiAtMjMuMjYxNjEwODAzMDQxNTcgTTk4LjM3MDY0OTk0ODgwNTkyIC0yMy4yNjE2MTA4MDMwNDE1NyBDOTguOTExNTEzMjE2NDg5MzEgLTIyLjYyNjI4MjAzMjgyODg4NiwgOTkuNDUyMzc2NDg0MTcyNyAtMjEuOTkwOTUzMjYyNjE2MiwgOTkuODA4NDAwNTQzMzkzODQgLTIxLjU3Mjc0NzE0NDMxMjE4NSBNOTguMzcwNjQ5OTQ4ODA1OTIgLTIzLjI2MTYxMDgwMzA0MTU3IEM5OC44NDk5NDk1MDk0NjQ5NSAtMjIuNjk4NTk4MjY2MTczODY0LCA5OS4zMjkyNDkwNzAxMjM5OSAtMjIuMTM1NTg1NzI5MzA2MTU0LCA5OS44MDg0MDA1NDMzOTM4NCAtMjEuNTcyNzQ3MTQ0MzEyMTg1IE05OS44MDg0MDA1NDMzOTM4NCAtMjEuNTcyNzQ3MTQ0MzEyMTg1IEMxMDAuMDk2OTQ0NTc4ODgwODIgLTIxLjE4NjEyNDQyMzY2MjA0NCwgMTAwLjM4NTQ4ODYxNDM2NzggLTIwLjc5OTUwMTcwMzAxMTkwMiwgMTAxLjEzNDk5MTI1OTA1NDY5IC0xOS43OTUyMzY0NDAyMjcwOCBNOTkuODA4NDAwNTQzMzkzODQgLTIxLjU3Mjc0NzE0NDMxMjE4NSBDMTAwLjA3NDU0NTkzMzYxOTQzIC0yMS4yMTYxMzY1Njc3NTM3NDcsIDEwMC4zNDA2OTEzMjM4NDUwMSAtMjAuODU5NTI1OTkxMTk1MzEsIDEwMS4xMzQ5OTEyNTkwNTQ2OSAtMTkuNzk1MjM2NDQwMjI3MDggTTEwMS4xMzQ5OTEyNTkwNTQ2OSAtMTkuNzk1MjM2NDQwMjI3MDggQzEwMS40Mjc2MjQ1ODA5MTY1NiAtMTkuMzQ1NjczMDc0Nzk3NjYzLCAxMDEuNzIwMjU3OTAyNzc4NDMgLTE4Ljg5NjEwOTcwOTM2ODI0MywgMTAyLjM0NDk3MDg0OTk4NDk5IC0xNy45MzYzODI4NjM1NDQxNyBNMTAxLjEzNDk5MTI1OTA1NDY5IC0xOS43OTUyMzY0NDAyMjcwOCBDMTAxLjUxNDE5NjM5ODA1MjMyIC0xOS4yMTI2NzU1MTU4ODkyMzgsIDEwMS44OTM0MDE1MzcwNDk5NCAtMTguNjMwMTE0NTkxNTUxMzk3LCAxMDIuMzQ0OTcwODQ5OTg0OTkgLTE3LjkzNjM4Mjg2MzU0NDE3IE0xMDIuMzQ0OTcwODQ5OTg0OTkgLTE3LjkzNjM4Mjg2MzU0NDE3IEMxMDIuNjEyMTQxODY3Mjk1NCAtMTcuNDYxOTkzNjY4MzEwMzksIDEwMi44NzkzMTI4ODQ2MDU4MiAtMTYuOTg3NjA0NDczMDc2NjEyLCAxMDMuNDMzMzY3MjUwNTA1ODIgLTE2LjAwMzgyNDg0MjMzMjkgTTEwMi4zNDQ5NzA4NDk5ODQ5OSAtMTcuOTM2MzgyODYzNTQ0MTcgQzEwMi43NTk1MDMxOTYxNTcwNiAtMTcuMjAwMzM4NzA2OTYzOTIsIDEwMy4xNzQwMzU1NDIzMjkxMSAtMTYuNDY0Mjk0NTUwMzgzNjY2LCAxMDMuNDMzMzY3MjUwNTA1ODIgLTE2LjAwMzgyNDg0MjMzMjkgTTEwMy40MzMzNjcyNTA1MDU4MiAtMTYuMDAzODI0ODQyMzMyOSBDMTAzLjY3MjkzNTkyMDc2ODUyIC0xNS41MDYzNTUzNzI1ODQwMzIsIDEwMy45MTI1MDQ1OTEwMzEyMSAtMTUuMDA4ODg1OTAyODM1MTY0LCAxMDQuMzk1NzA4MDA2MzQ3MTIgLTE0LjAwNTUwMzY3MjAzNDgzNiBNMTAzLjQzMzM2NzI1MDUwNTgyIC0xNi4wMDM4MjQ4NDIzMzI5IEMxMDMuNzk5MjAwNDM0OTc2MiAtMTUuMjQ0MTY0NDA3MjAzOTcxLCAxMDQuMTY1MDMzNjE5NDQ2NTggLTE0LjQ4NDUwMzk3MjA3NTA0MywgMTA0LjM5NTcwODAwNjM0NzEyIC0xNC4wMDU1MDM2NzIwMzQ4MzYgTTEwNC4zOTU3MDgwMDYzNDcxMiAtMTQuMDA1NTAzNjcyMDM0ODM2IEMxMDQuNjIwNzA1NjM0NjU0MSAtMTMuNDQ5NzU1MTgwMDgzMzkxLCAxMDQuODQ1NzAzMjYyOTYxMDggLTEyLjg5NDAwNjY4ODEzMTk0NSwgMTA1LjIyODAzODY1MjkyMTczIC0xMS45NDk2MzA4ODI5NzcyNiBNMTA0LjM5NTcwODAwNjM0NzEyIC0xNC4wMDU1MDM2NzIwMzQ4MzYgQzEwNC42ODMyNDA0MzQ1NDUzMSAtMTMuMjk1MjkzMDE1MzIzOTg4LCAxMDQuOTcwNzcyODYyNzQzNSAtMTIuNTg1MDgyMzU4NjEzMTQsIDEwNS4yMjgwMzg2NTI5MjE3MyAtMTEuOTQ5NjMwODgyOTc3MjYgTTEwNS4yMjgwMzg2NTI5MjE3MyAtMTEuOTQ5NjMwODgyOTc3MjYgQzEwNS40NDYyMTA2MDc3NDgyNCAtMTEuMjkyNTMxNzE2MDIwMTY4LCAxMDUuNjY0MzgyNTYyNTc0NzYgLTEwLjYzNTQzMjU0OTA2MzA3NywgMTA1LjkyNjkzODk2NTA2ODQ3IC05Ljg0NDY1NDQ5NzQzMzczNCBNMTA1LjIyODAzODY1MjkyMTczIC0xMS45NDk2MzA4ODI5NzcyNiBDMTA1LjM3Mjc4OTQwNjk5NDc0IC0xMS41MTM2NjQ2NzQ2MTAwMDQsIDEwNS41MTc1NDAxNjEwNjc3NiAtMTEuMDc3Njk4NDY2MjQyNzQ3LCAxMDUuOTI2OTM4OTY1MDY4NDcgLTkuODQ0NjU0NDk3NDMzNzM0IE0xMDUuOTI2OTM4OTY1MDY4NDcgLTkuODQ0NjU0NDk3NDMzNzM0IEMxMDYuMDQ3MTA4MzA1MTk0NTEgLTkuMzg2Mzk2NzIxODExNjg1LCAxMDYuMTY3Mjc3NjQ1MzIwNTUgLTguOTI4MTM4OTQ2MTg5NjM2LCAxMDYuNDg5NTM3MDExNDkxMTEgLTcuNjk5MjI0MzE0ODg4NDgyNSBNMTA1LjkyNjkzODk2NTA2ODQ3IC05Ljg0NDY1NDQ5NzQzMzczNCBDMTA2LjEyMzg3MTQ2OTk2MzkyIC05LjA5MzY2NTUwNTE3OTg2MiwgMTA2LjMyMDgwMzk3NDg1OTM3IC04LjM0MjY3NjUxMjkyNTk5LCAxMDYuNDg5NTM3MDExNDkxMTEgLTcuNjk5MjI0MzE0ODg4NDgyNSBNMTA2LjQ4OTUzNzAxMTQ5MTExIC03LjY5OTIyNDMxNDg4ODQ4MjUgQzEwNi42MzAwODc3NzI4MjcyNCAtNi45Nzc1MjU4NjA4NDE0MDQsIDEwNi43NzA2Mzg1MzQxNjMzNyAtNi4yNTU4Mjc0MDY3OTQzMjUsIDEwNi45MTM1MjA5NTYxMzk5OSAtNS41MjIxNTYzNjgxNTQ5MzQgTTEwNi40ODk1MzcwMTE0OTExMSAtNy42OTkyMjQzMTQ4ODg0ODI1IEMxMDYuNTc2MTM3MTcwMDkyNzIgLTcuMjU0NTUwODAzNDE5MTc2LCAxMDYuNjYyNzM3MzI4Njk0MzUgLTYuODA5ODc3MjkxOTQ5ODY5LCAxMDYuOTEzNTIwOTU2MTM5OTkgLTUuNTIyMTU2MzY4MTU0OTM0IE0xMDYuOTEzNTIwOTU2MTM5OTkgLTUuNTIyMTU2MzY4MTU0OTM0IEMxMDcuMDA1Njg5NDEwNDI4OTcgLTQuODA3MzE2MDM3NDA5NTgxLCAxMDcuMDk3ODU3ODY0NzE3OTQgLTQuMDkyNDc1NzA2NjY0MjI5LCAxMDcuMTk3MTQ4NTU4MDQyMjcgLTMuMzIyMzk2Njk2NDA1Nzk1IE0xMDYuOTEzNTIwOTU2MTM5OTkgLTUuNTIyMTU2MzY4MTU0OTM0IEMxMDYuOTczNDQ5NDUwMTQzMjQgLTUuMDU3MzYyODAyODg1NDY2LCAxMDcuMDMzMzc3OTQ0MTQ2NDggLTQuNTkyNTY5MjM3NjE1OTk5LCAxMDcuMTk3MTQ4NTU4MDQyMjcgLTMuMzIyMzk2Njk2NDA1Nzk1IE0xMDcuMTk3MTQ4NTU4MDQyMjcgLTMuMzIyMzk2Njk2NDA1Nzk1IEMxMDcuMjI5NDA1MTkzOTYyNDIgLTIuODE5OTczNTU0ODYxNjE4NSwgMTA3LjI2MTY2MTgyOTg4MjU3IC0yLjMxNzU1MDQxMzMxNzQ0MjMsIDEwNy4zMzkyNTQzMzA1NDM4MSAtMS4xMDg5ODQ1ODM5NzkyNjg3IE0xMDcuMTk3MTQ4NTU4MDQyMjcgLTMuMzIyMzk2Njk2NDA1Nzk1IEMxMDcuMjMzNTc0MjY4ODA2OCAtMi43NTUwMzY4NDg5NDM1NTIsIDEwNy4yNjk5OTk5Nzk1NzEzNSAtMi4xODc2NzcwMDE0ODEzMDksIDEwNy4zMzkyNTQzMzA1NDM4MSAtMS4xMDg5ODQ1ODM5NzkyNjg3IE0xMDcuMzM5MjU0MzMwNTQzODEgLTEuMTA4OTg0NTgzOTc5MjY4NyBDMTA3LjMzOTI1NDMzMDU0MzgxIC0wLjI5MDc0MDQyNjMwNzc1MDQzLCAxMDcuMzM5MjU0MzMwNTQzODEgMC41Mjc1MDM3MzEzNjM3Njc4LCAxMDcuMzM5MjU0MzMwNTQzODEgMS4xMDg5ODQ1ODM5NzkyNjA1IE0xMDcuMzM5MjU0MzMwNTQzODEgLTEuMTA4OTg0NTgzOTc5MjY4NyBDMTA3LjMzOTI1NDMzMDU0MzgxIC0wLjYxMzc3MzU4OTQ1ODg1MDIsIDEwNy4zMzkyNTQzMzA1NDM4MSAtMC4xMTg1NjI1OTQ5Mzg0MzE2OSwgMTA3LjMzOTI1NDMzMDU0MzgxIDEuMTA4OTg0NTgzOTc5MjYwNSBNMTA3LjMzOTI1NDMzMDU0MzgxIDEuMTA4OTg0NTgzOTc5MjYwNSBDMTA3LjMwODExMjg5MDY2NTUzIDEuNTk0MDM3NjQ3MDAxMzY4NCwgMTA3LjI3Njk3MTQ1MDc4NzI0IDIuMDc5MDkwNzEwMDIzNDc2MywgMTA3LjE5NzE0ODU1ODA0MjI3IDMuMzIyMzk2Njk2NDA1NzcxNiBNMTA3LjMzOTI1NDMzMDU0MzgxIDEuMTA4OTg0NTgzOTc5MjYwNSBDMTA3LjMwNTAxNDI2NDY3ODY5IDEuNjQyMzAxMjQ3OTEyMjY4NywgMTA3LjI3MDc3NDE5ODgxMzU3IDIuMTc1NjE3OTExODQ1Mjc3NCwgMTA3LjE5NzE0ODU1ODA0MjI3IDMuMzIyMzk2Njk2NDA1NzcxNiBNMTA3LjE5NzE0ODU1ODA0MjI3IDMuMzIyMzk2Njk2NDA1NzcxNiBDMTA3LjA4NTIwMjIzMDEzMDExIDQuMTkwNjMwMzA5Mzg5NzM5LCAxMDYuOTczMjU1OTAyMjE3OTMgNS4wNTg4NjM5MjIzNzM3MDYsIDEwNi45MTM1MjA5NTYxMzk5OSA1LjUyMjE1NjM2ODE1NDkxIE0xMDcuMTk3MTQ4NTU4MDQyMjcgMy4zMjIzOTY2OTY0MDU3NzE2IEMxMDcuMTI1MTg1NjIxOTU1IDMuODgwNTI3MDE4MDA5NTY5LCAxMDcuMDUzMjIyNjg1ODY3NzQgNC40Mzg2NTczMzk2MTMzNjYsIDEwNi45MTM1MjA5NTYxMzk5OSA1LjUyMjE1NjM2ODE1NDkxIE0xMDYuOTEzNTIwOTU2MTM5OTkgNS41MjIxNTYzNjgxNTQ5MSBDMTA2Ljc4Njg4NTI4MTE5NzI2IDYuMTcyNDAzNzk0NTI2NDk3LCAxMDYuNjYwMjQ5NjA2MjU0NTEgNi44MjI2NTEyMjA4OTgwODUsIDEwNi40ODk1MzcwMTE0OTExMSA3LjY5OTIyNDMxNDg4ODQ3NDUgTTEwNi45MTM1MjA5NTYxMzk5OSA1LjUyMjE1NjM2ODE1NDkxIEMxMDYuNzk3NTA5OTk4ODc1NCA2LjExNzg0ODExNDc4NDEwNywgMTA2LjY4MTQ5OTA0MTYxMDc5IDYuNzEzNTM5ODYxNDEzMzA0LCAxMDYuNDg5NTM3MDExNDkxMTEgNy42OTkyMjQzMTQ4ODg0NzQ1IE0xMDYuNDg5NTM3MDExNDkxMTEgNy42OTkyMjQzMTQ4ODg0NzQ1IEMxMDYuMjgxODk2NDk2MDU3OTcgOC40OTEwNDc1OTIyMDM3MTIsIDEwNi4wNzQyNTU5ODA2MjQ4MSA5LjI4Mjg3MDg2OTUxODk0OCwgMTA1LjkyNjkzODk2NTA2ODQ3IDkuODQ0NjU0NDk3NDMzNzEgTTEwNi40ODk1MzcwMTE0OTExMSA3LjY5OTIyNDMxNDg4ODQ3NDUgQzEwNi4yNjc5NzI1NjE0NTQyMSA4LjU0NDE0NTU4OTUxOTIyNywgMTA2LjA0NjQwODExMTQxNzMyIDkuMzg5MDY2ODY0MTQ5OTgsIDEwNS45MjY5Mzg5NjUwNjg0NyA5Ljg0NDY1NDQ5NzQzMzcxIE0xMDUuOTI2OTM4OTY1MDY4NDcgOS44NDQ2NTQ0OTc0MzM3MSBDMTA1LjY1NjkyMDkzMTQwMDU5IDEwLjY1NzkwNTc5MzMxMDEyOCwgMTA1LjM4NjkwMjg5NzczMjcyIDExLjQ3MTE1NzA4OTE4NjU0OCwgMTA1LjIyODAzODY1MjkyMTczIDExLjk0OTYzMDg4Mjk3NzIzNyBNMTA1LjkyNjkzODk2NTA2ODQ3IDkuODQ0NjU0NDk3NDMzNzEgQzEwNS43MDcyNzQ1NzkwODEzOSAxMC41MDYyNDg2MjkyNTk4NDUsIDEwNS40ODc2MTAxOTMwOTQzIDExLjE2Nzg0Mjc2MTA4NTk4LCAxMDUuMjI4MDM4NjUyOTIxNzMgMTEuOTQ5NjMwODgyOTc3MjM3IE0xMDUuMjI4MDM4NjUyOTIxNzMgMTEuOTQ5NjMwODgyOTc3MjM3IEMxMDQuOTc1MDgyMTg2NzM4MzYgMTIuNTc0NDM4MjQ1MDMwNzA2LCAxMDQuNzIyMTI1NzIwNTU1IDEzLjE5OTI0NTYwNzA4NDE3NiwgMTA0LjM5NTcwODAwNjM0NzEyIDE0LjAwNTUwMzY3MjAzNDgyNSBNMTA1LjIyODAzODY1MjkyMTczIDExLjk0OTYzMDg4Mjk3NzIzNyBDMTA0LjkzMjQ0MDk5OTc0MTIyIDEyLjY3OTc2MjgwMTMyNDk0MywgMTA0LjYzNjg0MzM0NjU2MDcgMTMuNDA5ODk0NzE5NjcyNjQ4LCAxMDQuMzk1NzA4MDA2MzQ3MTIgMTQuMDA1NTAzNjcyMDM0ODI1IE0xMDQuMzk1NzA4MDA2MzQ3MTIgMTQuMDA1NTAzNjcyMDM0ODI1IEMxMDQuMTA0MDM3NjAwMjcwMzIgMTQuNjExMTYzNTExMDAwMjY2LCAxMDMuODEyMzY3MTk0MTkzNSAxNS4yMTY4MjMzNDk5NjU3MDYsIDEwMy40MzMzNjcyNTA1MDU4MiAxNi4wMDM4MjQ4NDIzMzI4OTMgTTEwNC4zOTU3MDgwMDYzNDcxMiAxNC4wMDU1MDM2NzIwMzQ4MjUgQzEwNC4wNDcxMTA3MjU2NjQ4IDE0LjcyOTM3MzM4NDE1ODYwOCwgMTAzLjY5ODUxMzQ0NDk4MjQ4IDE1LjQ1MzI0MzA5NjI4MjM5MiwgMTAzLjQzMzM2NzI1MDUwNTgyIDE2LjAwMzgyNDg0MjMzMjg5MyBNMTAzLjQzMzM2NzI1MDUwNTgyIDE2LjAwMzgyNDg0MjMzMjg5MyBDMTAzLjE2NTI1MjI2NzMxNjIyIDE2LjQ3OTg5MDE0NDU3MjA4LCAxMDIuODk3MTM3Mjg0MTI2NjEgMTYuOTU1OTU1NDQ2ODExMjcsIDEwMi4zNDQ5NzA4NDk5ODQ5OSAxNy45MzYzODI4NjM1NDQxNjQgTTEwMy40MzMzNjcyNTA1MDU4MiAxNi4wMDM4MjQ4NDIzMzI4OTMgQzEwMy4wMTUyMjA3MzQyMTUwOCAxNi43NDYyODYzMjM5MzMyOTQsIDEwMi41OTcwNzQyMTc5MjQzMiAxNy40ODg3NDc4MDU1MzM2OSwgMTAyLjM0NDk3MDg0OTk4NDk5IDE3LjkzNjM4Mjg2MzU0NDE2NCBNMTAyLjM0NDk3MDg0OTk4NDk5IDE3LjkzNjM4Mjg2MzU0NDE2NCBDMTAyLjA0ODg3ODI3MjkwMzE3IDE4LjM5MTI2MDU3MzkzMTUxLCAxMDEuNzUyNzg1Njk1ODIxMzYgMTguODQ2MTM4Mjg0MzE4ODU1LCAxMDEuMTM0OTkxMjU5MDU0NjkgMTkuNzk1MjM2NDQwMjI3MDYgTTEwMi4zNDQ5NzA4NDk5ODQ5OSAxNy45MzYzODI4NjM1NDQxNjQgQzEwMi4wNDE3NTI2OTM2ODc4MyAxOC40MDIyMDczNzcwOTIyMDMsIDEwMS43Mzg1MzQ1MzczOTA2OCAxOC44NjgwMzE4OTA2NDAyNDMsIDEwMS4xMzQ5OTEyNTkwNTQ2OSAxOS43OTUyMzY0NDAyMjcwNiBNMTAxLjEzNDk5MTI1OTA1NDY5IDE5Ljc5NTIzNjQ0MDIyNzA2IEMxMDAuODQyNTExNDc5NDI1NjggMjAuMTg3MTMyNjk5NDczODQ2LCAxMDAuNTUwMDMxNjk5Nzk2NjkgMjAuNTc5MDI4OTU4NzIwNjM1LCA5OS44MDg0MDA1NDMzOTM4NCAyMS41NzI3NDcxNDQzMTIxNzQgTTEwMS4xMzQ5OTEyNTkwNTQ2OSAxOS43OTUyMzY0NDAyMjcwNiBDMTAwLjY0MzM3MTc3Mzc4MTU0IDIwLjQ1Mzk2MTc2MzAzNjYwNiwgMTAwLjE1MTc1MjI4ODUwODM5IDIxLjExMjY4NzA4NTg0NjE1NCwgOTkuODA4NDAwNTQzMzkzODQgMjEuNTcyNzQ3MTQ0MzEyMTc0IE05OS44MDg0MDA1NDMzOTM4NCAyMS41NzI3NDcxNDQzMTIxNzQgQzk5LjQ1OTA2NjE3ODc0ODEyIDIxLjk4MzA5NTE2NjcxMzUxLCA5OS4xMDk3MzE4MTQxMDIzOSAyMi4zOTM0NDMxODkxMTQ4NDgsIDk4LjM3MDY0OTk0ODgwNTk1IDIzLjI2MTYxMDgwMzA0MTU1IE05OS44MDg0MDA1NDMzOTM4NCAyMS41NzI3NDcxNDQzMTIxNzQgQzk5LjUxODA3OTM3NjMzNjIyIDIxLjkxMzc3NDkwNjg4MDQ0OCwgOTkuMjI3NzU4MjA5Mjc4NiAyMi4yNTQ4MDI2Njk0NDg3MiwgOTguMzcwNjQ5OTQ4ODA1OTUgMjMuMjYxNjEwODAzMDQxNTUgTTk4LjM3MDY0OTk0ODgwNTk1IDIzLjI2MTYxMDgwMzA0MTU1IEM5OC4wMjk1MzEzNDY2NTM4OCAyMy42MTM4NDM3NjYxMjE2MywgOTcuNjg4NDEyNzQ0NTAxODMgMjMuOTY2MDc2NzI5MjAxNzEzLCA5Ni44Mjc2NDc1MDA4ODA2NCAyNC44NTQ4ODc1MTMzODEzNjcgTTk4LjM3MDY0OTk0ODgwNTk1IDIzLjI2MTYxMDgwMzA0MTU1IEM5Ny45Njc1MDI5NzU5Mjk5NiAyMy42Nzc4OTMxNTE1MTgwMywgOTcuNTY0MzU2MDAzMDUzOTcgMjQuMDk0MTc1NDk5OTk0NTEzLCA5Ni44Mjc2NDc1MDA4ODA2NCAyNC44NTQ4ODc1MTMzODEzNjcgTTk2LjgyNzY0NzUwMDg4MDY0IDI0Ljg1NDg4NzUxMzM4MTM2NyBDOTYuMjAyMjY1MjY0MTA4MTkgMjUuNDIyODQzMTE0MTEwODU4LCA5NS41NzY4ODMwMjczMzU3NCAyNS45OTA3OTg3MTQ4NDAzNSwgOTUuMTg1NzMzNzI3NjQ5NSAyNi4zNDYwMzAxNTk1NzIwMzUgTTk2LjgyNzY0NzUwMDg4MDY0IDI0Ljg1NDg4NzUxMzM4MTM2NyBDOTYuMjU4OTIyNDkzNTU3MzkgMjUuMzcxMzg4NTE3MzkzMjQsIDk1LjY5MDE5NzQ4NjIzNDE0IDI1Ljg4Nzg4OTUyMTQwNTEwNywgOTUuMTg1NzMzNzI3NjQ5NSAyNi4zNDYwMzAxNTk1NzIwMzUgTTk1LjE4NTczMzcyNzY0OTUgMjYuMzQ2MDMwMTU5NTcyMDM1IEM5NC43Nzk5ODUxODk3MjEwNSAyNi42Njk2MDM4MjExNDc5MjMsIDk0LjM3NDIzNjY1MTc5MjYgMjYuOTkzMTc3NDgyNzIzODEsIDkzLjQ1MTY1NTYwNDk5NjA5IDI3LjcyODkxMTMxNjYzMTI5NyBNOTUuMTg1NzMzNzI3NjQ5NSAyNi4zNDYwMzAxNTk1NzIwMzUgQzk0LjcxMjExOTMzMjUwNTU0IDI2LjcyMzcyNTAzNjI5MDk4NiwgOTQuMjM4NTA0OTM3MzYxNTcgMjcuMTAxNDE5OTEzMDA5OTM4LCA5My40NTE2NTU2MDQ5OTYwOSAyNy43Mjg5MTEzMTY2MzEyOTcgTTkzLjQ1MTY1NTYwNDk5NjA5IDI3LjcyODkxMTMxNjYzMTI5NyBDOTIuODIzMTczOTc5MzkwNDMgMjguMTY3MzEyODkyMTIyNzIsIDkyLjE5NDY5MjM1Mzc4NDc5IDI4LjYwNTcxNDQ2NzYxNDE0NSwgOTEuNjMyNTM4ODMxODg1MDEgMjguOTk3ODQ4NDI5MjU3NjggTTkzLjQ1MTY1NTYwNDk5NjA5IDI3LjcyODkxMTMxNjYzMTI5NyBDOTIuOTE0NzUzMDM4ODk2MTggMjguMTAzNDMxMzA0NjA1MTA2LCA5Mi4zNzc4NTA0NzI3OTYyNyAyOC40Nzc5NTEyOTI1Nzg5MTUsIDkxLjYzMjUzODgzMTg4NTAxIDI4Ljk5Nzg0ODQyOTI1NzY4IE05MS42MzI1Mzg4MzE4ODUwMSAyOC45OTc4NDg0MjkyNTc2OCBDOTEuMjA5MDA5MDAwNjkxNTEgMjkuMjU0NTk0NzAxODY0NzM2LCA5MC43ODU0NzkxNjk0OTgwMiAyOS41MTEzNDA5NzQ0NzE3OSwgODkuNzM1ODU4NTQ5MzM2MjYgMzAuMTQ3NjI3MTYyNjY5Mjc0IE05MS42MzI1Mzg4MzE4ODUwMSAyOC45OTc4NDg0MjkyNTc2OCBDOTEuMDA2MjIxODQ0MzEwMyAyOS4zNzc1MjU0Njc3NzI2MzUsIDkwLjM3OTkwNDg1NjczNTU5IDI5Ljc1NzIwMjUwNjI4NzU5LCA4OS43MzU4NTg1NDkzMzYyNiAzMC4xNDc2MjcxNjI2NjkyNzQgTTg5LjczNTg1ODU0OTMzNjI2IDMwLjE0NzYyNzE2MjY2OTI3NCBDODkuMjE3MzcxNDk4MDU1MTcgMzAuNDE4MTIxNTI1MjE1ODEzLCA4OC42OTg4ODQ0NDY3NzQwNyAzMC42ODg2MTU4ODc3NjIzNTMsIDg3Ljc2OTQwODYyMzQ2NzUzIDMxLjE3MzUyMjgyOTQyMzcgTTg5LjczNTg1ODU0OTMzNjI2IDMwLjE0NzYyNzE2MjY2OTI3NCBDODguOTc1NzcxMjkwMDM1ODggMzAuNTQ0MTY0MTk4OTg3MTU0LCA4OC4yMTU2ODQwMzA3MzU1IDMwLjk0MDcwMTIzNTMwNTAzNSwgODcuNzY5NDA4NjIzNDY3NTMgMzEuMTczNTIyODI5NDIzNyBNODcuNzY5NDA4NjIzNDY3NTMgMzEuMTczNTIyODI5NDIzNyBDODcuMTgwNjg3ODU4NDM0OTIgMzEuNDM0MTMyMDQ4MzIyNjI0LCA4Ni41OTE5NjcwOTM0MDIzMyAzMS42OTQ3NDEyNjcyMjE1NSwgODUuNzQxMjY5NjE4ODI2MzcgMzIuMDcxMzE5ODA0MTcyMzUgTTg3Ljc2OTQwODYyMzQ2NzUzIDMxLjE3MzUyMjgyOTQyMzcgQzg3LjM2MTAxMjI3NDM5NzE3IDMxLjM1NDMwNzc3ODUwOTg4OCwgODYuOTUyNjE1OTI1MzI2ODEgMzEuNTM1MDkyNzI3NTk2MDczLCA4NS43NDEyNjk2MTg4MjYzNyAzMi4wNzEzMTk4MDQxNzIzNSBNODUuNzQxMjY5NjE4ODI2MzcgMzIuMDcxMzE5ODA0MTcyMzUgQzg1LjE0NDkxMjMzODk4OTIyIDMyLjI5MDc4NDc5NTgxODY5LCA4NC41NDg1NTUwNTkxNTIwNiAzMi41MTAyNDk3ODc0NjUwMiwgODMuNjU5Nzc1NTkzNjE3MzEgMzIuODM3MzI4ODQ2NTY5MTMgTTg1Ljc0MTI2OTYxODgyNjM3IDMyLjA3MTMxOTgwNDE3MjM1IEM4NC45ODUzNDIzMjc5OTA1OCAzMi4zNDk1MDgwMzQ5MTUxOTYsIDg0LjIyOTQxNTAzNzE1NDggMzIuNjI3Njk2MjY1NjU4MDQ1LCA4My42NTk3NzU1OTM2MTczMSAzMi44MzczMjg4NDY1NjkxMyBNODMuNjU5Nzc1NTkzNjE3MzEgMzIuODM3MzI4ODQ2NTY5MTMgQzgyLjg4MDE3OTA1NTI3NjU5IDMzLjA2ODcwOTAwNjk2MjkyNiwgODIuMTAwNTgyNTE2OTM1ODYgMzMuMzAwMDg5MTY3MzU2NzIsIDgxLjUzMzQ3OTg1MzI2OSAzMy40Njg0MDIyNjExNTA0MTYgTTgzLjY1OTc3NTU5MzYxNzMxIDMyLjgzNzMyODg0NjU2OTEzIEM4My4wODU3NDEyOTgzMzMyMiAzMy4wMDc2OTkyMTIyNDE5NDUsIDgyLjUxMTcwNzAwMzA0OTEyIDMzLjE3ODA2OTU3NzkxNDc2LCA4MS41MzM0Nzk4NTMyNjkgMzMuNDY4NDAyMjYxMTUwNDE2IE04MS41MzM0Nzk4NTMyNjkgMzMuNDY4NDAyMjYxMTUwNDE2IEM4MC45NTc2NjY3NzEwODMzOCAzMy41OTk4Mjc4Mzk2Mjc3NjQsIDgwLjM4MTg1MzY4ODg5Nzc2IDMzLjczMTI1MzQxODEwNTEwNSwgNzkuMzcxMTE5ODAzMDY3NSAzMy45NjE5NDY4MzE4OTA4NiBNODEuNTMzNDc5ODUzMjY5IDMzLjQ2ODQwMjI2MTE1MDQxNiBDODAuOTIzNDU4MDIyNjU5NCAzMy42MDc2MzU3NjMyMjI1OSwgODAuMzEzNDM2MTkyMDQ5NzkgMzMuNzQ2ODY5MjY1Mjk0NzYsIDc5LjM3MTExOTgwMzA2NzUgMzMuOTYxOTQ2ODMxODkwODYgTTc5LjM3MTExOTgwMzA2NzUgMzMuOTYxOTQ2ODMxODkwODYgQzc4LjYzNzAwNzc4MjE3NjA4IDM0LjA4MDYzMjM3MDMwNDgzLCA3Ny45MDI4OTU3NjEyODQ2NyAzNC4xOTkzMTc5MDg3MTg4MSwgNzcuMTgxNTgxMDQ0MjgzOTQgMzQuMzE1OTM0NDc4Mjg0MzEgTTc5LjM3MTExOTgwMzA2NzUgMzMuOTYxOTQ2ODMxODkwODYgQzc4Ljc2NDg3MzY4NzIyODEgMzQuMDU5OTYwMDAyMzkwOTMsIDc4LjE1ODYyNzU3MTM4ODcgMzQuMTU3OTczMTcyODkxLCA3Ny4xODE1ODEwNDQyODM5NCAzNC4zMTU5MzQ0NzgyODQzMSBNNzcuMTgxNTgxMDQ0MjgzOTQgMzQuMzE1OTM0NDc4Mjg0MzEgQzc2LjQxMjc1MDkyMDkwNTk1IDM0LjM5MDEwMjU5NTYzMzA4LCA3NS42NDM5MjA3OTc1Mjc5NCAzNC40NjQyNzA3MTI5ODE4NiwgNzQuOTczODYwODYxMzMyNjggMzQuNTI4OTEwNTg5MTYxNjQgTTc3LjE4MTU4MTA0NDI4Mzk0IDM0LjMxNTkzNDQ3ODI4NDMxIEM3Ni4zNjQ2MDM4OTA5MDUxNyAzNC4zOTQ3NDcyODE3MTE5ODYsIDc1LjU0NzYyNjczNzUyNjQxIDM0LjQ3MzU2MDA4NTEzOTY1LCA3NC45NzM4NjA4NjEzMzI2OCAzNC41Mjg5MTA1ODkxNjE2NCBNNzQuOTczODYwODYxMzMyNjggMzQuNTI4OTEwNTg5MTYxNjQgQzc0LjMzODA4NTQwODI1NTA0IDM0LjU0OTI5ODY3MDQ3OTk5LCA3My43MDIzMDk5NTUxNzc0IDM0LjU2OTY4Njc1MTc5ODM0LCA3Mi43NTcwMzEyNTAwMDAwMSAzNC42IE03NC45NzM4NjA4NjEzMzI2OCAzNC41Mjg5MTA1ODkxNjE2NCBDNzQuMzkwMjI0MDUzOTEwOCAzNC41NDc2MjY2ODU1OTU1MywgNzMuODA2NTg3MjQ2NDg4OTMgMzQuNTY2MzQyNzgyMDI5NDE2LCA3Mi43NTcwMzEyNTAwMDAwMSAzNC42IE03Mi43NTcwMzEyNTAwMDAwMSAzNC42IEM3Mi43NTcwMzEyNTAwMDAwMSAzNC42LCA3Mi43NTcwMzEyNTAwMDAwMSAzNC42LCA3Mi43NTcwMzEyNTAwMDAwMSAzNC42IE03Mi43NTcwMzEyNTAwMDAwMSAzNC42IEM3Mi43NTcwMzEyNTAwMDAwMSAzNC42LCA3Mi43NTcwMzEyNTAwMDAwMSAzNC42LCA3Mi43NTcwMzEyNTAwMDAwMSAzNC42IE03Mi43NTcwMzEyNTAwMDAwMSAzNC42IEMzMC4yOTc5NTQ1MDA4NjM0NyAzNC42LCAtMTIuMTYxMTIyMjQ4MjczMDc0IDM0LjYsIC03Mi43NTcwMzEyNTAwMDAwMSAzNC42IE03Mi43NTcwMzEyNTAwMDAwMSAzNC42IEMyMi40NjU1NzA4ODAwNDU4NDYgMzQuNiwgLTI3LjgyNTg4OTQ4OTkwODMyIDM0LjYsIC03Mi43NTcwMzEyNTAwMDAwMSAzNC42IE0tNzIuNzU3MDMxMjUwMDAwMDEgMzQuNiBDLTczLjYwMzU4OTMwODMxODMgMzQuNTcyODUyNTMwNzk1MDMsIC03NC40NTAxNDczNjY2MzY2MSAzNC41NDU3MDUwNjE1OTAwNiwgLTc0Ljk3Mzg2MDg2MTMzMjY3IDM0LjUyODkxMDU4OTE2MTY0IE0tNzIuNzU3MDMxMjUwMDAwMDEgMzQuNiBDLTczLjY0MTQ0MTA2OTU2MzMzIDM0LjU3MTYzODY5ODQ4NTg5LCAtNzQuNTI1ODUwODg5MTI2NjQgMzQuNTQzMjc3Mzk2OTcxNzc0LCAtNzQuOTczODYwODYxMzMyNjcgMzQuNTI4OTEwNTg5MTYxNjQgTS03NC45NzM4NjA4NjEzMzI2NyAzNC41Mjg5MTA1ODkxNjE2NCBDLTc1LjgxNDIxNjg2Njc0ODExIDM0LjQ0Nzg0MjQ1NTk5NTE3LCAtNzYuNjU0NTcyODcyMTYzNTYgMzQuMzY2Nzc0MzIyODI4NzEsIC03Ny4xODE1ODEwNDQyODM5MyAzNC4zMTU5MzQ0NzgyODQzMSBNLTc0Ljk3Mzg2MDg2MTMzMjY3IDM0LjUyODkxMDU4OTE2MTY0IEMtNzUuNjQxNjA2MTQzNDg3NDIgMzQuNDY0NDk0MDA0ODczMzY2LCAtNzYuMzA5MzUxNDI1NjQyMTkgMzQuNDAwMDc3NDIwNTg1MDksIC03Ny4xODE1ODEwNDQyODM5MyAzNC4zMTU5MzQ0NzgyODQzMSBNLTc3LjE4MTU4MTA0NDI4MzkzIDM0LjMxNTkzNDQ3ODI4NDMxIEMtNzcuOTIyNzczMTM2NDEyOTYgMzQuMTk2MTA0Mjg4ODU5NDEsIC03OC42NjM5NjUyMjg1NDIgMzQuMDc2Mjc0MDk5NDM0NTE0LCAtNzkuMzcxMTE5ODAzMDY3NDkgMzMuOTYxOTQ2ODMxODkwODYgTS03Ny4xODE1ODEwNDQyODM5MyAzNC4zMTU5MzQ0NzgyODQzMSBDLTc4LjA1NTE1NTMzODE2MjIyIDM0LjE3NDcwMTc2MTExOTksIC03OC45Mjg3Mjk2MzIwNDA1MSAzNC4wMzM0NjkwNDM5NTU0ODUsIC03OS4zNzExMTk4MDMwNjc0OSAzMy45NjE5NDY4MzE4OTA4NiBNLTc5LjM3MTExOTgwMzA2NzQ5IDMzLjk2MTk0NjgzMTg5MDg2IEMtNzkuODM4OTE1MTA2MTg4NSAzMy44NTUxNzU2MDY2MDMxMywgLTgwLjMwNjcxMDQwOTMwOTUgMzMuNzQ4NDA0MzgxMzE1NCwgLTgxLjUzMzQ3OTg1MzI2ODk2IDMzLjQ2ODQwMjI2MTE1MDQyIE0tNzkuMzcxMTE5ODAzMDY3NDkgMzMuOTYxOTQ2ODMxODkwODYgQy04MC4xMTI5OTY5ODQ3OTI3IDMzLjc5MjYxODIwNjM2MzEzLCAtODAuODU0ODc0MTY2NTE3OTIgMzMuNjIzMjg5NTgwODM1MzksIC04MS41MzM0Nzk4NTMyNjg5NiAzMy40Njg0MDIyNjExNTA0MiBNLTgxLjUzMzQ3OTg1MzI2ODk2IDMzLjQ2ODQwMjI2MTE1MDQyIEMtODIuMDU4NDUzNzAwMjEwMjEgMzMuMzEyNTkyNzc5MDIyMjIsIC04Mi41ODM0Mjc1NDcxNTE0NCAzMy4xNTY3ODMyOTY4OTQwMSwgLTgzLjY1OTc3NTU5MzYxNzI3IDMyLjgzNzMyODg0NjU2OTE0IE0tODEuNTMzNDc5ODUzMjY4OTYgMzMuNDY4NDAyMjYxMTUwNDIgQy04Mi4wNzQ2ODU0NzMyNzk1NyAzMy4zMDc3NzUyNzM5Nzc1NCwgLTgyLjYxNTg5MTA5MzI5MDIgMzMuMTQ3MTQ4Mjg2ODA0NjYsIC04My42NTk3NzU1OTM2MTcyNyAzMi44MzczMjg4NDY1NjkxNCBNLTgzLjY1OTc3NTU5MzYxNzI3IDMyLjgzNzMyODg0NjU2OTE0IEMtODQuNDY3NDU3MDI0MzU4ODYgMzIuNTQwMDk0NjEzOTMwOTMsIC04NS4yNzUxMzg0NTUxMDA0NiAzMi4yNDI4NjAzODEyOTI3MywgLTg1Ljc0MTI2OTYxODgyNjM3IDMyLjA3MTMxOTgwNDE3MjM1NCBNLTgzLjY1OTc3NTU5MzYxNzI3IDMyLjgzNzMyODg0NjU2OTE0IEMtODQuMTI2NDk3ODE3MzIzMzMgMzIuNjY1NTcwNzUzOTEyMzgsIC04NC41OTMyMjAwNDEwMjkzOCAzMi40OTM4MTI2NjEyNTU2LCAtODUuNzQxMjY5NjE4ODI2MzcgMzIuMDcxMzE5ODA0MTcyMzU0IE0tODUuNzQxMjY5NjE4ODI2MzcgMzIuMDcxMzE5ODA0MTcyMzU0IEMtODYuMzE5MTg3NDM0NjQ2NCAzMS44MTU0OTI3MzA0MzE3MywgLTg2Ljg5NzEwNTI1MDQ2NjQyIDMxLjU1OTY2NTY1NjY5MTEwNiwgLTg3Ljc2OTQwODYyMzQ2NzUxIDMxLjE3MzUyMjgyOTQyMzcwNyBNLTg1Ljc0MTI2OTYxODgyNjM3IDMyLjA3MTMxOTgwNDE3MjM1NCBDLTg2LjIxMDgwOTczODEwOTUzIDMxLjg2MzQ2ODMyMTc3ODQ2LCAtODYuNjgwMzQ5ODU3MzkyNyAzMS42NTU2MTY4MzkzODQ1NjQsIC04Ny43Njk0MDg2MjM0Njc1MSAzMS4xNzM1MjI4Mjk0MjM3MDcgTS04Ny43Njk0MDg2MjM0Njc1MSAzMS4xNzM1MjI4Mjk0MjM3MDcgQy04OC40MTU1MTc2OTYyMDkxMiAzMC44MzY0NDgxNDAwMjcwMjcsIC04OS4wNjE2MjY3Njg5NTA3MiAzMC40OTkzNzM0NTA2MzAzNDgsIC04OS43MzU4NTg1NDkzMzYyNiAzMC4xNDc2MjcxNjI2NjkyODQgTS04Ny43Njk0MDg2MjM0Njc1MSAzMS4xNzM1MjI4Mjk0MjM3MDcgQy04OC40MzQ4MDU3MDQwMjQyNiAzMC44MjYzODU1OTg3MDQ0MywgLTg5LjEwMDIwMjc4NDU4MSAzMC40NzkyNDgzNjc5ODUxNSwgLTg5LjczNTg1ODU0OTMzNjI2IDMwLjE0NzYyNzE2MjY2OTI4NCBNLTg5LjczNTg1ODU0OTMzNjI2IDMwLjE0NzYyNzE2MjY2OTI4NCBDLTkwLjM4MzA3MTMyODE4NDcgMjkuNzU1MjgyOTcyNjg2ODk2LCAtOTEuMDMwMjg0MTA3MDMzMTMgMjkuMzYyOTM4NzgyNzA0NTA0LCAtOTEuNjMyNTM4ODMxODg0OTcgMjguOTk3ODQ4NDI5MjU3NyBNLTg5LjczNTg1ODU0OTMzNjI2IDMwLjE0NzYyNzE2MjY2OTI4NCBDLTkwLjM0NDI2MTk0MjMzMDYyIDI5Ljc3ODgwOTQ1MDQ2MDkwNSwgLTkwLjk1MjY2NTMzNTMyNDk3IDI5LjQwOTk5MTczODI1MjUyMiwgLTkxLjYzMjUzODgzMTg4NDk3IDI4Ljk5Nzg0ODQyOTI1NzcgTS05MS42MzI1Mzg4MzE4ODQ5NyAyOC45OTc4NDg0MjkyNTc3IEMtOTIuMjgwMjM1Njc0NjcyOSAyOC41NDYwNDMxNTAwNzMyNjcsIC05Mi45Mjc5MzI1MTc0NjA4MyAyOC4wOTQyMzc4NzA4ODg4MzYsIC05My40NTE2NTU2MDQ5OTYwOCAyNy43Mjg5MTEzMTY2MzEzMDQgTS05MS42MzI1Mzg4MzE4ODQ5NyAyOC45OTc4NDg0MjkyNTc3IEMtOTIuMjcwNDg0NjkzMTQ2NTQgMjguNTUyODQ1MDEyNjcyODcsIC05Mi45MDg0MzA1NTQ0MDgxMSAyOC4xMDc4NDE1OTYwODgwNCwgLTkzLjQ1MTY1NTYwNDk5NjA4IDI3LjcyODkxMTMxNjYzMTMwNCBNLTkzLjQ1MTY1NTYwNDk5NjA4IDI3LjcyODkxMTMxNjYzMTMwNCBDLTk0LjEwMTA0ODQ5MDE0OTYyIDI3LjIxMTAzNzc3MTc5MTc5LCAtOTQuNzUwNDQxMzc1MzAzMTUgMjYuNjkzMTY0MjI2OTUyMjczLCAtOTUuMTg1NzMzNzI3NjQ5NDggMjYuMzQ2MDMwMTU5NTcyMDYgTS05My40NTE2NTU2MDQ5OTYwOCAyNy43Mjg5MTEzMTY2MzEzMDQgQy05My44MDAxMzMyNTg2MzM4NSAyNy40NTEwMDk2NjEyMzUwMDUsIC05NC4xNDg2MTA5MTIyNzE2MSAyNy4xNzMxMDgwMDU4Mzg3MSwgLTk1LjE4NTczMzcyNzY0OTQ4IDI2LjM0NjAzMDE1OTU3MjA2IE0tOTUuMTg1NzMzNzI3NjQ5NDggMjYuMzQ2MDMwMTU5NTcyMDYgQy05NS41NDkyNjc0MjIwMTYwMyAyNi4wMTU4Nzg0NzY5MjI4MzYsIC05NS45MTI4MDExMTYzODI1NyAyNS42ODU3MjY3OTQyNzM2MTMsIC05Ni44Mjc2NDc1MDA4ODA2MyAyNC44NTQ4ODc1MTMzODEzOTIgTS05NS4xODU3MzM3Mjc2NDk0OCAyNi4zNDYwMzAxNTk1NzIwNiBDLTk1Ljc3MDg4MDE2MDA0ODk2IDI1LjgxNDYxNTY1MTc5MzA1NSwgLTk2LjM1NjAyNjU5MjQ0ODQ2IDI1LjI4MzIwMTE0NDAxNDA1LCAtOTYuODI3NjQ3NTAwODgwNjMgMjQuODU0ODg3NTEzMzgxMzkyIE0tOTYuODI3NjQ3NTAwODgwNjMgMjQuODU0ODg3NTEzMzgxMzkyIEMtOTcuMjgxNDc3NDQ4OTc4OSAyNC4zODYyNzA4MzE4MzgyNDIsIC05Ny43MzUzMDczOTcwNzcxOCAyMy45MTc2NTQxNTAyOTUwOTYsIC05OC4zNzA2NDk5NDg4MDU5MyAyMy4yNjE2MTA4MDMwNDE1NjMgTS05Ni44Mjc2NDc1MDA4ODA2MyAyNC44NTQ4ODc1MTMzODEzOTIgQy05Ny4yMzU3MjY0MzY0ODI2IDI0LjQzMzUxMjUwODQ2ODY2LCAtOTcuNjQzODA1MzcyMDg0NTYgMjQuMDEyMTM3NTAzNTU1OTMsIC05OC4zNzA2NDk5NDg4MDU5MyAyMy4yNjE2MTA4MDMwNDE1NjMgTS05OC4zNzA2NDk5NDg4MDU5MyAyMy4yNjE2MTA4MDMwNDE1NjMgQy05OC43ODUwOTMwOTU0MjAxNSAyMi43NzQ3ODIzMDA1NDUzOTMsIC05OS4xOTk1MzYyNDIwMzQzOCAyMi4yODc5NTM3OTgwNDkyMjMsIC05OS44MDg0MDA1NDMzOTM4NCAyMS41NzI3NDcxNDQzMTIxOSBNLTk4LjM3MDY0OTk0ODgwNTkzIDIzLjI2MTYxMDgwMzA0MTU2MyBDLTk4Ljc5ODk1OTIxNDQzMzg5IDIyLjc1ODQ5NDM2ODE0NzMzNiwgLTk5LjIyNzI2ODQ4MDA2MTg1IDIyLjI1NTM3NzkzMzI1MzEwOCwgLTk5LjgwODQwMDU0MzM5Mzg0IDIxLjU3Mjc0NzE0NDMxMjE5IE0tOTkuODA4NDAwNTQzMzkzODQgMjEuNTcyNzQ3MTQ0MzEyMTkgQy0xMDAuMTg4MjA4ODQxNDE0ODIgMjEuMDYzODM4NjI2MjExODM3LCAtMTAwLjU2ODAxNzEzOTQzNTgxIDIwLjU1NDkzMDEwODExMTQ5LCAtMTAxLjEzNDk5MTI1OTA1NDY5IDE5Ljc5NTIzNjQ0MDIyNzA4MiBNLTk5LjgwODQwMDU0MzM5Mzg0IDIxLjU3Mjc0NzE0NDMxMjE5IEMtMTAwLjMxNDU0OTIwODk4MTY1IDIwLjg5NDU1NDA0MzUxNjU2OCwgLTEwMC44MjA2OTc4NzQ1Njk0NSAyMC4yMTYzNjA5NDI3MjA5NDMsIC0xMDEuMTM0OTkxMjU5MDU0NjkgMTkuNzk1MjM2NDQwMjI3MDgyIE0tMTAxLjEzNDk5MTI1OTA1NDY5IDE5Ljc5NTIzNjQ0MDIyNzA4MiBDLTEwMS41NDM0Mjc3Nzc1NDg2NyAxOS4xNjc3NjgyNjcyNTgzNzQsIC0xMDEuOTUxODY0Mjk2MDQyNjYgMTguNTQwMzAwMDk0Mjg5NjY2LCAtMTAyLjM0NDk3MDg0OTk4NDk3IDE3LjkzNjM4Mjg2MzU0NDE4NiBNLTEwMS4xMzQ5OTEyNTkwNTQ2OSAxOS43OTUyMzY0NDAyMjcwODIgQy0xMDEuNDc2MDA4NDE2NTYwNDYgMTkuMjcxMzQyNTEwMzY5NTcsIC0xMDEuODE3MDI1NTc0MDY2MjUgMTguNzQ3NDQ4NTgwNTEyMDYsIC0xMDIuMzQ0OTcwODQ5OTg0OTcgMTcuOTM2MzgyODYzNTQ0MTg2IE0tMTAyLjM0NDk3MDg0OTk4NDk3IDE3LjkzNjM4Mjg2MzU0NDE4NiBDLTEwMi43MjY5MDk4OTY4NzczOSAxNy4yNTgyMTE0MTAyNjQzODcsIC0xMDMuMTA4ODQ4OTQzNzY5OCAxNi41ODAwMzk5NTY5ODQ1ODUsIC0xMDMuNDMzMzY3MjUwNTA1ODEgMTYuMDAzODI0ODQyMzMyOTA0IE0tMTAyLjM0NDk3MDg0OTk4NDk3IDE3LjkzNjM4Mjg2MzU0NDE4NiBDLTEwMi43NDg1ODA5OTA2MTgxNyAxNy4yMTk3MzIxODg4OTE0MjQsIC0xMDMuMTUyMTkxMTMxMjUxMzcgMTYuNTAzMDgxNTE0MjM4NjYsIC0xMDMuNDMzMzY3MjUwNTA1ODEgMTYuMDAzODI0ODQyMzMyOTA0IE0tMTAzLjQzMzM2NzI1MDUwNTgxIDE2LjAwMzgyNDg0MjMzMjkwNCBDLTEwMy43NTM3NDUxNDQxMTQ2MyAxNS4zMzg1NTMyOTEyNjU0MTMsIC0xMDQuMDc0MTIzMDM3NzIzNDUgMTQuNjczMjgxNzQwMTk3OTI0LCAtMTA0LjM5NTcwODAwNjM0NzEyIDE0LjAwNTUwMzY3MjAzNDg0IE0tMTAzLjQzMzM2NzI1MDUwNTgxIDE2LjAwMzgyNDg0MjMzMjkwNCBDLTEwMy42ODgxNTUzNjM1NzkwNyAxNS40NzQ3NTE4NzM5NDM5OTIsIC0xMDMuOTQyOTQzNDc2NjUyMzMgMTQuOTQ1Njc4OTA1NTU1MDgsIC0xMDQuMzk1NzA4MDA2MzQ3MTIgMTQuMDA1NTAzNjcyMDM0ODQgTS0xMDQuMzk1NzA4MDA2MzQ3MTIgMTQuMDA1NTAzNjcyMDM0ODQgQy0xMDQuNzI0NTg2MTE5Mzk1MiAxMy4xOTMxNjgzNzQzODAzNDQsIC0xMDUuMDUzNDY0MjMyNDQzMjggMTIuMzgwODMzMDc2NzI1ODUsIC0xMDUuMjI4MDM4NjUyOTIxNzMgMTEuOTQ5NjMwODgyOTc3MjY2IE0tMTA0LjM5NTcwODAwNjM0NzEyIDE0LjAwNTUwMzY3MjAzNDg0IEMtMTA0LjU4MDkzMDA4MjU1NzEgMTMuNTQ4MDAxNTYyNzcwOTU2LCAtMTA0Ljc2NjE1MjE1ODc2NzA4IDEzLjA5MDQ5OTQ1MzUwNzA3NSwgLTEwNS4yMjgwMzg2NTI5MjE3MyAxMS45NDk2MzA4ODI5NzcyNjYgTS0xMDUuMjI4MDM4NjUyOTIxNzMgMTEuOTQ5NjMwODgyOTc3MjY2IEMtMTA1LjQyODkyMjkxOTg3Njc3IDExLjM0NDU5OTQ3NzQ3MDAyMSwgLTEwNS42Mjk4MDcxODY4MzE4MSAxMC43Mzk1NjgwNzE5NjI3NzksIC0xMDUuOTI2OTM4OTY1MDY4NDcgOS44NDQ2NTQ0OTc0MzM3MjMgTS0xMDUuMjI4MDM4NjUyOTIxNzMgMTEuOTQ5NjMwODgyOTc3MjY2IEMtMTA1LjUwNTU2MzcyNjk0MjEgMTEuMTEzNzY5NTc3NjQzNTgyLCAtMTA1Ljc4MzA4ODgwMDk2MjQ2IDEwLjI3NzkwODI3MjMwOTkwMSwgLTEwNS45MjY5Mzg5NjUwNjg0NyA5Ljg0NDY1NDQ5NzQzMzcyMyBNLTEwNS45MjY5Mzg5NjUwNjg0NyA5Ljg0NDY1NDQ5NzQzMzcyMyBDLTEwNi4wNTM3ODIyMzkyNTAwOCA5LjM2MDk0NjExODc1NjQ0OCwgLTEwNi4xODA2MjU1MTM0MzE3IDguODc3MjM3NzQwMDc5MTc0LCAtMTA2LjQ4OTUzNzAxMTQ5MTExIDcuNjk5MjI0MzE0ODg4NDg3IE0tMTA1LjkyNjkzODk2NTA2ODQ3IDkuODQ0NjU0NDk3NDMzNzIzIEMtMTA2LjEyNTQ1ODEzMTA2MDczIDkuMDg3NjE0ODc4NzU0NDUzLCAtMTA2LjMyMzk3NzI5NzA1Mjk5IDguMzMwNTc1MjYwMDc1MTgsIC0xMDYuNDg5NTM3MDExNDkxMTEgNy42OTkyMjQzMTQ4ODg0ODcgTS0xMDYuNDg5NTM3MDExNDkxMTEgNy42OTkyMjQzMTQ4ODg0ODcgQy0xMDYuNjEwNjg1NDIwODAxMjUgNy4wNzcxNTI4Mzc4MDYyODIsIC0xMDYuNzMxODMzODMwMTExNCA2LjQ1NTA4MTM2MDcyNDA3NywgLTEwNi45MTM1MjA5NTYxMzk5OSA1LjUyMjE1NjM2ODE1NDkzOCBNLTEwNi40ODk1MzcwMTE0OTExMSA3LjY5OTIyNDMxNDg4ODQ4NyBDLTEwNi42MDYxMTc1NTYxNDg1OSA3LjEwMDYwNzg1NzM3OTE1OSwgLTEwNi43MjI2OTgxMDA4MDYwNyA2LjUwMTk5MTM5OTg2OTgzMiwgLTEwNi45MTM1MjA5NTYxMzk5OSA1LjUyMjE1NjM2ODE1NDkzOCBNLTEwNi45MTM1MjA5NTYxMzk5OSA1LjUyMjE1NjM2ODE1NDkzOCBDLTEwNy4wMDMwNDc5MTU5ODc1MiA0LjgyNzgwMjk0NjY3NTI4OSwgLTEwNy4wOTI1NzQ4NzU4MzUwNyA0LjEzMzQ0OTUyNTE5NTY0MDUsIC0xMDcuMTk3MTQ4NTU4MDQyMjcgMy4zMjIzOTY2OTY0MDU4MTUgTS0xMDYuOTEzNTIwOTU2MTM5OTkgNS41MjIxNTYzNjgxNTQ5MzggQy0xMDYuOTc4MTQzNzM1NTc5MiA1LjAyMDk1NDg1MjAzNTYxMSwgLTEwNy4wNDI3NjY1MTUwMTg0MSA0LjUxOTc1MzMzNTkxNjI4MiwgLTEwNy4xOTcxNDg1NTgwNDIyNyAzLjMyMjM5NjY5NjQwNTgxNSBNLTEwNy4xOTcxNDg1NTgwNDIyNyAzLjMyMjM5NjY5NjQwNTgxNSBDLTEwNy4yNDc4OTcxMDIwMTc3IDIuNTMxOTQ3MTYwNTAwOTUxLCAtMTA3LjI5ODY0NTY0NTk5MzE1IDEuNzQxNDk3NjI0NTk2MDg2MywgLTEwNy4zMzkyNTQzMzA1NDM4MSAxLjEwODk4NDU4Mzk3OTI3MzEgTS0xMDcuMTk3MTQ4NTU4MDQyMjcgMy4zMjIzOTY2OTY0MDU4MTUgQy0xMDcuMjM1MzYxOTQ5Nzc5MTkgMi43MjcxOTIyNzQ4MDg3NDM0LCAtMTA3LjI3MzU3NTM0MTUxNjA5IDIuMTMxOTg3ODUzMjExNjcxLCAtMTA3LjMzOTI1NDMzMDU0MzgxIDEuMTA4OTg0NTgzOTc5MjczMSBNLTEwNy4zMzkyNTQzMzA1NDM4MSAxLjEwODk4NDU4Mzk3OTI3MzEgQy0xMDcuMzM5MjU0MzMwNTQzODEgMC4zNzIxNDI2OTcxNDY0NDUxLCAtMTA3LjMzOTI1NDMzMDU0MzgxIC0wLjM2NDY5OTE4OTY4NjM4MjkzLCAtMTA3LjMzOTI1NDMzMDU0MzgxIC0xLjEwODk4NDU4Mzk3OTI1NjMgTS0xMDcuMzM5MjU0MzMwNTQzODEgMS4xMDg5ODQ1ODM5NzkyNzMxIEMtMTA3LjMzOTI1NDMzMDU0MzgxIDAuNjMwNzM4NjY2MzQ2MjYzMSwgLTEwNy4zMzkyNTQzMzA1NDM4MSAwLjE1MjQ5Mjc0ODcxMzI1MzAyLCAtMTA3LjMzOTI1NDMzMDU0MzgxIC0xLjEwODk4NDU4Mzk3OTI1NjMgTS0xMDcuMzM5MjU0MzMwNTQzODEgLTEuMTA4OTg0NTgzOTc5MjU2MyBDLTEwNy4zMDgwNTE0MTczNjUzOSAtMS41OTQ5OTUxNDMyNzEzODM0LCAtMTA3LjI3Njg0ODUwNDE4Njk3IC0yLjA4MTAwNTcwMjU2MzUxMDcsIC0xMDcuMTk3MTQ4NTU4MDQyMjcgLTMuMzIyMzk2Njk2NDA1NzY3NiBNLTEwNy4zMzkyNTQzMzA1NDM4MSAtMS4xMDg5ODQ1ODM5NzkyNTYzIEMtMTA3LjMwNDAwNDgyMjQ2ODk0IC0xLjY1ODAyNDEyNTEzNjA5ODgsIC0xMDcuMjY4NzU1MzE0Mzk0MDggLTIuMjA3MDYzNjY2MjkyOTQxNSwgLTEwNy4xOTcxNDg1NTgwNDIyNyAtMy4zMjIzOTY2OTY0MDU3Njc2IE0tMTA3LjE5NzE0ODU1ODA0MjI3IC0zLjMyMjM5NjY5NjQwNTc2NzYgQy0xMDcuMTIxMzU5MDAwNzA1NDcgLTMuOTEwMjA1NTM2NzY5MTU0NCwgLTEwNy4wNDU1Njk0NDMzNjg2NiAtNC40OTgwMTQzNzcxMzI1NDIsIC0xMDYuOTEzNTIwOTU2MTM5OTkgLTUuNTIyMTU2MzY4MTU0OTIxNSBNLTEwNy4xOTcxNDg1NTgwNDIyNyAtMy4zMjIzOTY2OTY0MDU3Njc2IEMtMTA3LjEzMzA5MjAzNTY2MjI5IC0zLjgxOTIwNjQzNDU5Mzg4NSwgLTEwNy4wNjkwMzU1MTMyODIzIC00LjMxNjAxNjE3Mjc4MjAwMiwgLTEwNi45MTM1MjA5NTYxMzk5OSAtNS41MjIxNTYzNjgxNTQ5MjE1IE0tMTA2LjkxMzUyMDk1NjEzOTk5IC01LjUyMjE1NjM2ODE1NDkyMTUgQy0xMDYuODAyMzEzMzI4MDYwNyAtNi4wOTMxODQwMzQ2MDE1NTgsIC0xMDYuNjkxMTA1Njk5OTgxNCAtNi42NjQyMTE3MDEwNDgxOTQ1LCAtMTA2LjQ4OTUzNzAxMTQ5MTExIC03LjY5OTIyNDMxNDg4ODQ3MSBNLTEwNi45MTM1MjA5NTYxMzk5OSAtNS41MjIxNTYzNjgxNTQ5MjE1IEMtMTA2Ljc1NTQzNzExMTIzNTc0IC02LjMzMzg4MzUwMDcwNTgzOSwgLTEwNi41OTczNTMyNjYzMzE0NyAtNy4xNDU2MTA2MzMyNTY3NTUsIC0xMDYuNDg5NTM3MDExNDkxMTEgLTcuNjk5MjI0MzE0ODg4NDcxIE0tMTA2LjQ4OTUzNzAxMTQ5MTExIC03LjY5OTIyNDMxNDg4ODQ3MSBDLTEwNi4yNzc4OTI2NzE3NzQ5IC04LjUwNjMxNTkwOTQ2MzQ5NCwgLTEwNi4wNjYyNDgzMzIwNTg2NiAtOS4zMTM0MDc1MDQwMzg1MTYsIC0xMDUuOTI2OTM4OTY1MDY4NDcgLTkuODQ0NjU0NDk3NDMzNzA1IE0tMTA2LjQ4OTUzNzAxMTQ5MTExIC03LjY5OTIyNDMxNDg4ODQ3MSBDLTEwNi4zMTU1MTQ2NzkwOTAwNyAtOC4zNjI4NDY4OTAwODk1NzEsIC0xMDYuMTQxNDkyMzQ2Njg5MDMgLTkuMDI2NDY5NDY1MjkwNjcyLCAtMTA1LjkyNjkzODk2NTA2ODQ3IC05Ljg0NDY1NDQ5NzQzMzcwNSBNLTEwNS45MjY5Mzg5NjUwNjg0NyAtOS44NDQ2NTQ0OTc0MzM3MDUgQy0xMDUuNzU5NzA0NzMyNTM3ODQgLTEwLjM0ODMzNzM2MDY1OTQ4NSwgLTEwNS41OTI0NzA1MDAwMDcyMiAtMTAuODUyMDIwMjIzODg1MjY1LCAtMTA1LjIyODAzODY1MjkyMTczIC0xMS45NDk2MzA4ODI5NzcyMjEgTS0xMDUuOTI2OTM4OTY1MDY4NDcgLTkuODQ0NjU0NDk3NDMzNzA1IEMtMTA1LjY4MjE2OTIxMjAxNzQgLTEwLjU4MTg2MTk5NDg1OTUzNywgLTEwNS40MzczOTk0NTg5NjYzMSAtMTEuMzE5MDY5NDkyMjg1MzY3LCAtMTA1LjIyODAzODY1MjkyMTczIC0xMS45NDk2MzA4ODI5NzcyMjEgTS0xMDUuMjI4MDM4NjUyOTIxNzMgLTExLjk0OTYzMDg4Mjk3NzIyMSBDLTEwNC45MjI1NTY5MzQ2NjA5NiAtMTIuNzA0MTc2NjMzMTY4NTU0LCAtMTA0LjYxNzA3NTIxNjQwMDIgLTEzLjQ1ODcyMjM4MzM1OTg4NiwgLTEwNC4zOTU3MDgwMDYzNDcxMiAtMTQuMDA1NTAzNjcyMDM0ODIyIE0tMTA1LjIyODAzODY1MjkyMTczIC0xMS45NDk2MzA4ODI5NzcyMjEgQy0xMDQuOTQ4NTc1MDY4NDU1NTQgLTEyLjYzOTkxMTMzOTY2OTUzMywgLTEwNC42NjkxMTE0ODM5ODkzNSAtMTMuMzMwMTkxNzk2MzYxODQ1LCAtMTA0LjM5NTcwODAwNjM0NzEyIC0xNC4wMDU1MDM2NzIwMzQ4MjIgTS0xMDQuMzk1NzA4MDA2MzQ3MTIgLTE0LjAwNTUwMzY3MjAzNDgyMiBDLTEwNC4wMjkzNDA2MDc1ODQxNSAtMTQuNzY2MjczNDE0NTcyNzA3LCAtMTAzLjY2Mjk3MzIwODgyMTE2IC0xNS41MjcwNDMxNTcxMTA1OTQsIC0xMDMuNDMzMzY3MjUwNTA1ODIgLTE2LjAwMzgyNDg0MjMzMjg5IE0tMTA0LjM5NTcwODAwNjM0NzEyIC0xNC4wMDU1MDM2NzIwMzQ4MjIgQy0xMDQuMTc2OTAyOTA1MDcwMzYgLTE0LjQ1OTg1NzE0NjUxNTE3OCwgLTEwMy45NTgwOTc4MDM3OTM2MiAtMTQuOTE0MjEwNjIwOTk1NTMzLCAtMTAzLjQzMzM2NzI1MDUwNTgyIC0xNi4wMDM4MjQ4NDIzMzI4OSBNLTEwMy40MzMzNjcyNTA1MDU4MiAtMTYuMDAzODI0ODQyMzMyODkgQy0xMDMuMTE0NDgxMjYwMzE4MTcgLTE2LjU3MDAzOTIwODYxOTA2NSwgLTEwMi43OTU1OTUyNzAxMzA1IC0xNy4xMzYyNTM1NzQ5MDUyNDMsIC0xMDIuMzQ0OTcwODQ5OTg0OTkgLTE3LjkzNjM4Mjg2MzU0NDE3NSBNLTEwMy40MzMzNjcyNTA1MDU4MiAtMTYuMDAzODI0ODQyMzMyODkgQy0xMDMuMDIyODkwMjQxMzQ3OTggLTE2LjczMjY2ODMzNzM5NzAyLCAtMTAyLjYxMjQxMzIzMjE5MDEyIC0xNy40NjE1MTE4MzI0NjExNSwgLTEwMi4zNDQ5NzA4NDk5ODQ5OSAtMTcuOTM2MzgyODYzNTQ0MTc1IE0tMTAyLjM0NDk3MDg0OTk4NDk5IC0xNy45MzYzODI4NjM1NDQxNzUgQy0xMDIuMDA5MzgyNTI5MDY3MzQgLTE4LjQ1MTkzNjY0MjU1NTU3MywgLTEwMS42NzM3OTQyMDgxNDk2OSAtMTguOTY3NDkwNDIxNTY2OTc1LCAtMTAxLjEzNDk5MTI1OTA1NDY5IC0xOS43OTUyMzY0NDAyMjcwNyBNLTEwMi4zNDQ5NzA4NDk5ODQ5OSAtMTcuOTM2MzgyODYzNTQ0MTc1IEMtMTAyLjA0NzYxMDQ5NzU1NjM1IC0xOC4zOTMyMDgyMTczMDk1OTYsIC0xMDEuNzUwMjUwMTQ1MTI3NyAtMTguODUwMDMzNTcxMDc1MDEzLCAtMTAxLjEzNDk5MTI1OTA1NDY5IC0xOS43OTUyMzY0NDAyMjcwNyBNLTEwMS4xMzQ5OTEyNTkwNTQ2OSAtMTkuNzk1MjM2NDQwMjI3MDcgQy0xMDAuNjczOTUzNjAyMzI5NCAtMjAuNDEyOTg0ODk4ODQ0MzY4LCAtMTAwLjIxMjkxNTk0NTYwNDEyIC0yMS4wMzA3MzMzNTc0NjE2NjcsIC05OS44MDg0MDA1NDMzOTM4NCAtMjEuNTcyNzQ3MTQ0MzEyMTc0IE0tMTAxLjEzNDk5MTI1OTA1NDY5IC0xOS43OTUyMzY0NDAyMjcwNyBDLTEwMC42ODM5OTI4MjcyNzAxNyAtMjAuMzk5NTMzMjUyMDE1OTQyLCAtMTAwLjIzMjk5NDM5NTQ4NTY2IC0yMS4wMDM4MzAwNjM4MDQ4MTYsIC05OS44MDg0MDA1NDMzOTM4NCAtMjEuNTcyNzQ3MTQ0MzEyMTc0IE0tOTkuODA4NDAwNTQzMzkzODQgLTIxLjU3Mjc0NzE0NDMxMjE3NCBDLTk5LjI1MjA2MDA3MDAyMjIgLTIyLjIyNjI1NjMyMTAwNDI0MywgLTk4LjY5NTcxOTU5NjY1MDU1IC0yMi44Nzk3NjU0OTc2OTYzMSwgLTk4LjM3MDY0OTk0ODgwNTk1IC0yMy4yNjE2MTA4MDMwNDE1NSBNLTk5LjgwODQwMDU0MzM5Mzg0IC0yMS41NzI3NDcxNDQzMTIxNzQgQy05OS40OTgzNjM0NjI3NTgwOCAtMjEuOTM2OTM0MzQwODM2NTk3LCAtOTkuMTg4MzI2MzgyMTIyMzMgLTIyLjMwMTEyMTUzNzM2MTAyLCAtOTguMzcwNjQ5OTQ4ODA1OTUgLTIzLjI2MTYxMDgwMzA0MTU1IE0tOTguMzcwNjQ5OTQ4ODA1OTUgLTIzLjI2MTYxMDgwMzA0MTU1IEMtOTcuOTIxNDAxNjI2OTc1MzQgLTIzLjcyNTQ5NjU3OTMwNDgyLCAtOTcuNDcyMTUzMzA1MTQ0NzMgLTI0LjE4OTM4MjM1NTU2ODA5LCAtOTYuODI3NjQ3NTAwODgwNjYgLTI0Ljg1NDg4NzUxMzM4MTM1NyBNLTk4LjM3MDY0OTk0ODgwNTk1IC0yMy4yNjE2MTA4MDMwNDE1NSBDLTk3Ljk1MzI5MTg2MTUxMzg4IC0yMy42OTI1NjcyOTM5MDY4MywgLTk3LjUzNTkzMzc3NDIyMTgyIC0yNC4xMjM1MjM3ODQ3NzIxMSwgLTk2LjgyNzY0NzUwMDg4MDY2IC0yNC44NTQ4ODc1MTMzODEzNTcgTS05Ni44Mjc2NDc1MDA4ODA2NiAtMjQuODU0ODg3NTEzMzgxMzU3IEMtOTYuNDI2Njg5ODg2OTA2NzEgLTI1LjIxOTAyNjYwOTYzNTM2NCwgLTk2LjAyNTczMjI3MjkzMjc5IC0yNS41ODMxNjU3MDU4ODkzNzUsIC05NS4xODU3MzM3Mjc2NDk1MiAtMjYuMzQ2MDMwMTU5NTcyMDI3IE0tOTYuODI3NjQ3NTAwODgwNjYgLTI0Ljg1NDg4NzUxMzM4MTM1NyBDLTk2LjI4NjU0NTgwMjUyNTEzIC0yNS4zNDYzMDE3NTkwNjE0NDMsIC05NS43NDU0NDQxMDQxNjk2MSAtMjUuODM3NzE2MDA0NzQxNTM0LCAtOTUuMTg1NzMzNzI3NjQ5NTIgLTI2LjM0NjAzMDE1OTU3MjAyNyBNLTk1LjE4NTczMzcyNzY0OTUyIC0yNi4zNDYwMzAxNTk1NzIwMjcgQy05NC42MTc4MTQ1OTQ1MjAwMyAtMjYuNzk4OTMwNTU1Mjc5OTU2LCAtOTQuMDQ5ODk1NDYxMzkwNTUgLTI3LjI1MTgzMDk1MDk4Nzg4OCwgLTkzLjQ1MTY1NTYwNDk5NjA5IC0yNy43Mjg5MTEzMTY2MzEyOTQgTS05NS4xODU3MzM3Mjc2NDk1MiAtMjYuMzQ2MDMwMTU5NTcyMDI3IEMtOTQuNzMwMjI3MTY3NzYzMjUgLTI2LjcwOTI4NDUxOTU0MjcsIC05NC4yNzQ3MjA2MDc4NzY5NyAtMjcuMDcyNTM4ODc5NTEzMzc0LCAtOTMuNDUxNjU1NjA0OTk2MDkgLTI3LjcyODkxMTMxNjYzMTI5NCBNLTkzLjQ1MTY1NTYwNDk5NjA5IC0yNy43Mjg5MTEzMTY2MzEyOTQgQy05Mi43MzA1NzQ5MTYyOTgzNCAtMjguMjMxOTA1OTg5OTg2OTM0LCAtOTIuMDA5NDk0MjI3NjAwNTggLTI4LjczNDkwMDY2MzM0MjU3NSwgLTkxLjYzMjUzODgzMTg4NTAxIC0yOC45OTc4NDg0MjkyNTc2NzYgTS05My40NTE2NTU2MDQ5OTYwOSAtMjcuNzI4OTExMzE2NjMxMjk0IEMtOTIuODgxNDE0MDgzMzc2OTQgLTI4LjEyNjY4NzExNjc1NTIwMywgLTkyLjMxMTE3MjU2MTc1Nzc5IC0yOC41MjQ0NjI5MTY4NzkxMTMsIC05MS42MzI1Mzg4MzE4ODUwMSAtMjguOTk3ODQ4NDI5MjU3Njc2IE0tOTEuNjMyNTM4ODMxODg1MDEgLTI4Ljk5Nzg0ODQyOTI1NzY3NiBDLTkwLjkwODU2Nzg0ODczOTI4IC0yOS40MzY3MjM4OTM3NjYzNiwgLTkwLjE4NDU5Njg2NTU5MzU1IC0yOS44NzU1OTkzNTgyNzUwNDMsIC04OS43MzU4NTg1NDkzMzYyNiAtMzAuMTQ3NjI3MTYyNjY5MjcgTS05MS42MzI1Mzg4MzE4ODUwMSAtMjguOTk3ODQ4NDI5MjU3Njc2IEMtOTEuMTQyMjI3MDY0MzA0OTYgLTI5LjI5NTA3ODMwNDE1NjQ4MywgLTkwLjY1MTkxNTI5NjcyNDkgLTI5LjU5MjMwODE3OTA1NTI4NywgLTg5LjczNTg1ODU0OTMzNjI2IC0zMC4xNDc2MjcxNjI2NjkyNyBNLTg5LjczNTg1ODU0OTMzNjI2IC0zMC4xNDc2MjcxNjI2NjkyNyBDLTg5LjAzODk5NjA3MjM5MzU5IC0zMC41MTExNzk4NzA1Mjg1NDQsIC04OC4zNDIxMzM1OTU0NTA5MiAtMzAuODc0NzMyNTc4Mzg3ODE3LCAtODcuNzY5NDA4NjIzNDY3NTMgLTMxLjE3MzUyMjgyOTQyMzcgTS04OS43MzU4NTg1NDkzMzYyNiAtMzAuMTQ3NjI3MTYyNjY5MjcgQy04OS4yMjY3MDcyMDQ5MDYyNiAtMzAuNDEzMjUxMDkyOTMxNCwgLTg4LjcxNzU1NTg2MDQ3NjI3IC0zMC42Nzg4NzUwMjMxOTM1MywgLTg3Ljc2OTQwODYyMzQ2NzUzIC0zMS4xNzM1MjI4Mjk0MjM3IE0tODcuNzY5NDA4NjIzNDY3NTMgLTMxLjE3MzUyMjgyOTQyMzcgQy04Ni45NzE3MzA4ODgxNTYzNiAtMzEuNTI2NjMxMTAwNTc2NjYsIC04Ni4xNzQwNTMxNTI4NDUxOCAtMzEuODc5NzM5MzcxNzI5NjI0LCAtODUuNzQxMjY5NjE4ODI2MzggLTMyLjA3MTMxOTgwNDE3MjM1IE0tODcuNzY5NDA4NjIzNDY3NTMgLTMxLjE3MzUyMjgyOTQyMzcgQy04Ny4xMjYwNTY3MDc1MDYzMSAtMzEuNDU4MzE1NjM4MjYzMjE1LCAtODYuNDgyNzA0NzkxNTQ1MDkgLTMxLjc0MzEwODQ0NzEwMjcyOCwgLTg1Ljc0MTI2OTYxODgyNjM4IC0zMi4wNzEzMTk4MDQxNzIzNSBNLTg1Ljc0MTI2OTYxODgyNjM4IC0zMi4wNzEzMTk4MDQxNzIzNSBDLTg1LjIyMjcxODczMTc5MTQyIC0zMi4yNjIxNTEzMjQwMzMwNiwgLTg0LjcwNDE2Nzg0NDc1NjQ1IC0zMi40NTI5ODI4NDM4OTM3ODYsIC04My42NTk3NzU1OTM2MTczMSAtMzIuODM3MzI4ODQ2NTY5MTMgTS04NS43NDEyNjk2MTg4MjYzOCAtMzIuMDcxMzE5ODA0MTcyMzUgQy04NS4wNDgyMTQzODA4NzgxIC0zMi4zMjYzNzA1MzgyNjk3MSwgLTg0LjM1NTE1OTE0MjkyOTc5IC0zMi41ODE0MjEyNzIzNjcwNywgLTgzLjY1OTc3NTU5MzYxNzMxIC0zMi44MzczMjg4NDY1NjkxMyBNLTgzLjY1OTc3NTU5MzYxNzMxIC0zMi44MzczMjg4NDY1NjkxMyBDLTgyLjg0NzI4NzA1NjQ5NDE4IC0zMy4wNzg0NzExNzk1NDc5MSwgLTgyLjAzNDc5ODUxOTM3MTA3IC0zMy4zMTk2MTM1MTI1MjY2OSwgLTgxLjUzMzQ3OTg1MzI2OSAtMzMuNDY4NDAyMjYxMTUwNDEgTS04My42NTk3NzU1OTM2MTczMSAtMzIuODM3MzI4ODQ2NTY5MTMgQy04My4xNTc0MjkxODcwNjY1MyAtMzIuOTg2NDIyNjIzMTYzMzEsIC04Mi42NTUwODI3ODA1MTU3NiAtMzMuMTM1NTE2Mzk5NzU3NDgsIC04MS41MzM0Nzk4NTMyNjkgLTMzLjQ2ODQwMjI2MTE1MDQxIE0tODEuNTMzNDc5ODUzMjY5IC0zMy40Njg0MDIyNjExNTA0MSBDLTgwLjc0MDEzODI3NjQ3NDk1IC0zMy42NDk0NzcyOTkwMTYwNCwgLTc5Ljk0Njc5NjY5OTY4MDkgLTMzLjgzMDU1MjMzNjg4MTY3NCwgLTc5LjM3MTExOTgwMzA2NzUgLTMzLjk2MTk0NjgzMTg5MDg1NiBNLTgxLjUzMzQ3OTg1MzI2OSAtMzMuNDY4NDAyMjYxMTUwNDEgQy04MC44Mzg1MzY1OTE5ODcwNyAtMzMuNjI3MDE4NTI1NjA5NDIsIC04MC4xNDM1OTMzMzA3MDUxMyAtMzMuNzg1NjM0NzkwMDY4NDMsIC03OS4zNzExMTk4MDMwNjc1IC0zMy45NjE5NDY4MzE4OTA4NTYgTS03OS4zNzExMTk4MDMwNjc1IC0zMy45NjE5NDY4MzE4OTA4NTYgQy03OC41NDUyMzk0MjU0NTAzIC0zNC4wOTU0Njg3NjY1NDYwMiwgLTc3LjcxOTM1OTA0NzgzMzExIC0zNC4yMjg5OTA3MDEyMDExODQsIC03Ny4xODE1ODEwNDQyODM5NCAtMzQuMzE1OTM0NDc4Mjg0MzEgTS03OS4zNzExMTk4MDMwNjc1IC0zMy45NjE5NDY4MzE4OTA4NTYgQy03OC42NTIyMzU3NTIyNzEwMSAtMzQuMDc4MTcwNDMwMTk0NTU0LCAtNzcuOTMzMzUxNzAxNDc0NSAtMzQuMTk0Mzk0MDI4NDk4MjYsIC03Ny4xODE1ODEwNDQyODM5NCAtMzQuMzE1OTM0NDc4Mjg0MzEgTS03Ny4xODE1ODEwNDQyODM5NCAtMzQuMzE1OTM0NDc4Mjg0MzEgQy03Ni40OTE3MzYyNzQ4MDUzIC0zNC4zODI0ODI5NzM1MzYyLCAtNzUuODAxODkxNTA1MzI2NjUgLTM0LjQ0OTAzMTQ2ODc4ODA4NSwgLTc0Ljk3Mzg2MDg2MTMzMjY4IC0zNC41Mjg5MTA1ODkxNjE2NCBNLTc3LjE4MTU4MTA0NDI4Mzk0IC0zNC4zMTU5MzQ0NzgyODQzMSBDLTc2LjcxMjU2ODUzMDE5MzA0IC0zNC4zNjExNzk1NTE0NDg1ODYsIC03Ni4yNDM1NTYwMTYxMDIxMyAtMzQuNDA2NDI0NjI0NjEyODcsIC03NC45NzM4NjA4NjEzMzI2OCAtMzQuNTI4OTEwNTg5MTYxNjQgTS03NC45NzM4NjA4NjEzMzI2OCAtMzQuNTI4OTEwNTg5MTYxNjQgQy03NC4yMzM3OTU0MjExNDcyOSAtMzQuNTUyNjQzMDQ3Mzc4Mzk2LCAtNzMuNDkzNzI5OTgwOTYxOSAtMzQuNTc2Mzc1NTA1NTk1MTQ1LCAtNzIuNzU3MDMxMjUwMDAwMDMgLTM0LjYgTS03NC45NzM4NjA4NjEzMzI2OCAtMzQuNTI4OTEwNTg5MTYxNjQgQy03NC4yNTQ4NjM3NTQ1NzMzNSAtMzQuNTUxOTY3NDI2OTMyNDQsIC03My41MzU4NjY2NDc4MTQwMyAtMzQuNTc1MDI0MjY0NzAzMjQ1LCAtNzIuNzU3MDMxMjUwMDAwMDMgLTM0LjYgTS03Mi43NTcwMzEyNTAwMDAwMyAtMzQuNiBDLTcyLjc1NzAzMTI1MDAwMDAzIC0zNC42LCAtNzIuNzU3MDMxMjUwMDAwMDEgLTM0LjYsIC03Mi43NTcwMzEyNTAwMDAwMSAtMzQuNiBNLTcyLjc1NzAzMTI1MDAwMDAzIC0zNC42IEMtNzIuNzU3MDMxMjUwMDAwMDMgLTM0LjYsIC03Mi43NTcwMzEyNTAwMDAwMSAtMzQuNiwgLTcyLjc1NzAzMTI1MDAwMDAxIC0zNC42IiBzdHJva2U9IiM3YTNkNmUiIGZpbGw9Im5vbmUiIHN0eWxlPSIiIHN0cm9rZS13aWR0aD0iMS4yOTk5OTk5NTIzMTYyODQyIiBzdHJva2UtZGFzaGFycmF5PSIwIDAiPjwvcGF0aD48L2c+PGcgc3R5bGU9IiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCwtMjcuMSkiIGNsYXNzPSJsYWJlbCI+PHJlY3Q+PC9yZWN0PjxnPjxyZWN0IHN0eWxlPSJzdHJva2U6bm9uZSIgY2xhc3M9ImJhY2tncm91bmQiPjwvcmVjdD48dGV4dCB5PSItMTAuMSIgc3R5bGU9IiI+PHRzcGFuIHg9IjAiIHk9Ii0wLjFlbSIgZHk9IjEuMWVtIiBjbGFzcz0icm93IHRleHQtb3V0ZXItdHNwYW4iPjx0c3BhbiBmb250LXN0eWxlPSJub3JtYWwiIGNsYXNzPSJ0ZXh0LWlubmVyLXRzcGFuIiBmb250LXdlaWdodD0ibm9ybWFsIj5JPC90c3Bhbj48dHNwYW4gZm9udC1zdHlsZT0ibm9ybWFsIiBjbGFzcz0idGV4dC1pbm5lci10c3BhbiIgZm9udC13ZWlnaHQ9Im5vcm1hbCI+IHN0YXJ0PC90c3Bhbj48dHNwYW4gZm9udC1zdHlsZT0ibm9ybWFsIiBjbGFzcz0idGV4dC1pbm5lci10c3BhbiIgZm9udC13ZWlnaHQ9Im5vcm1hbCI+IHdvcmtpbmc8L3RzcGFuPjx0c3BhbiBmb250LXN0eWxlPSJub3JtYWwiIGNsYXNzPSJ0ZXh0LWlubmVyLXRzcGFuIiBmb250LXdlaWdodD0ibm9ybWFsIj4gb248L3RzcGFuPjx0c3BhbiBmb250LXN0eWxlPSJub3JtYWwiIGNsYXNzPSJ0ZXh0LWlubmVyLXRzcGFuIiBmb250LXdlaWdodD0ibm9ybWFsIj4gcG9ydGluZzwvdHNwYW4+PC90c3Bhbj48dHNwYW4geD0iMCIgeT0iMWVtIiBkeT0iMS4xZW0iIGNsYXNzPSJyb3cgdGV4dC1vdXRlci10c3BhbiI+PHRzcGFuIGZvbnQtc3R5bGU9Im5vcm1hbCIgY2xhc3M9InRleHQtaW5uZXItdHNwYW4iIGZvbnQtd2VpZ2h0PSJub3JtYWwiPnJlY29ubmVjdGlvbjwvdHNwYW4+PC90c3Bhbj48dHNwYW4geD0iMCIgeT0iMi4xZW0iIGR5PSIxLjFlbSIgY2xhc3M9InJvdyB0ZXh0LW91dGVyLXRzcGFuIj48dHNwYW4gZm9udC1zdHlsZT0ibm9ybWFsIiBjbGFzcz0idGV4dC1pbm5lci10c3BhbiIgZm9udC13ZWlnaHQ9Im5vcm1hbCI+aW1wcm92ZW1lbnRzPC90c3Bhbj48L3RzcGFuPjwvdGV4dD48L2c+PC9nPjwvZz48ZyBpZD0ic2F0dGVyaS1tZXJtYWlkLTAtZmxvd2NoYXJ0LVRhbmdlbnQxLTEiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEyMS42NDQ1MzEyNSwxNjkuMjk5OTk2OTQ4MjQyMTgpIiBjbGFzcz0ibm9kZSBkZWZhdWx0IiBkYXRhLWxvb2s9ImNsYXNzaWMiPjxyZWN0IHN0eWxlPSIiIHg9Ii0xMDguNzMwNDY4NzUiIHk9Ii00Mi4wOTk5OTk5OTk5OTk5OTQiIHdpZHRoPSIyMTcuNDYwOTM3NSIgaGVpZ2h0PSI4NC4xOTk5OTk5OTk5OTk5OSIgcng9IjUiIHJ5PSI1IiBjbGFzcz0iYmFzaWMgbGFiZWwtY29udGFpbmVyIj48L3JlY3Q+PGcgc3R5bGU9IiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCwtMjcuMSkiIGNsYXNzPSJsYWJlbCI+PHJlY3Q+PC9yZWN0PjxnPjxyZWN0IHN0eWxlPSJzdHJva2U6bm9uZSIgY2xhc3M9ImJhY2tncm91bmQiPjwvcmVjdD48dGV4dCB5PSItMTAuMSIgc3R5bGU9IiI+PHRzcGFuIHg9IjAiIHk9Ii0wLjFlbSIgZHk9IjEuMWVtIiBjbGFzcz0icm93IHRleHQtb3V0ZXItdHNwYW4iPjx0c3BhbiBmb250LXN0eWxlPSJub3JtYWwiIGNsYXNzPSJ0ZXh0LWlubmVyLXRzcGFuIiBmb250LXdlaWdodD0ibm9ybWFsIj5JPC90c3Bhbj48dHNwYW4gZm9udC1zdHlsZT0ibm9ybWFsIiBjbGFzcz0idGV4dC1pbm5lci10c3BhbiIgZm9udC13ZWlnaHQ9Im5vcm1hbCI+IHJlYWxpc2U8L3RzcGFuPjx0c3BhbiBmb250LXN0eWxlPSJub3JtYWwiIGNsYXNzPSJ0ZXh0LWlubmVyLXRzcGFuIiBmb250LXdlaWdodD0ibm9ybWFsIj4gSTwvdHNwYW4+PHRzcGFuIGZvbnQtc3R5bGU9Im5vcm1hbCIgY2xhc3M9InRleHQtaW5uZXItdHNwYW4iIGZvbnQtd2VpZ2h0PSJub3JtYWwiPiBuZWVkPC90c3Bhbj48dHNwYW4gZm9udC1zdHlsZT0ibm9ybWFsIiBjbGFzcz0idGV4dC1pbm5lci10c3BhbiIgZm9udC13ZWlnaHQ9Im5vcm1hbCI+IExMTXM8L3RzcGFuPjx0c3BhbiBmb250LXN0eWxlPSJub3JtYWwiIGNsYXNzPSJ0ZXh0LWlubmVyLXRzcGFuIiBmb250LXdlaWdodD0ibm9ybWFsIj4gdG88L3RzcGFuPjx0c3BhbiBmb250LXN0eWxlPSJub3JtYWwiIGNsYXNzPSJ0ZXh0LWlubmVyLXRzcGFuIiBmb250LXdlaWdodD0ibm9ybWFsIj4gYmU8L3RzcGFuPjwvdHNwYW4+PHRzcGFuIHg9IjAiIHk9IjFlbSIgZHk9IjEuMWVtIiBjbGFzcz0icm93IHRleHQtb3V0ZXItdHNwYW4iPjx0c3BhbiBmb250LXN0eWxlPSJub3JtYWwiIGNsYXNzPSJ0ZXh0LWlubmVyLXRzcGFuIiBmb250LXdlaWdodD0ibm9ybWFsIj5hYmxlPC90c3Bhbj48dHNwYW4gZm9udC1zdHlsZT0ibm9ybWFsIiBjbGFzcz0idGV4dC1pbm5lci10c3BhbiIgZm9udC13ZWlnaHQ9Im5vcm1hbCI+IHRvPC90c3Bhbj48dHNwYW4gZm9udC1zdHlsZT0ibm9ybWFsIiBjbGFzcz0idGV4dC1pbm5lci10c3BhbiIgZm9udC13ZWlnaHQ9Im5vcm1hbCI+IHJlbGlhYmx5PC90c3Bhbj48dHNwYW4gZm9udC1zdHlsZT0ibm9ybWFsIiBjbGFzcz0idGV4dC1pbm5lci10c3BhbiIgZm9udC13ZWlnaHQ9Im5vcm1hbCI+IHRlc3Q8L3RzcGFuPjx0c3BhbiBmb250LXN0eWxlPSJub3JtYWwiIGNsYXNzPSJ0ZXh0LWlubmVyLXRzcGFuIiBmb250LXdlaWdodD0ibm9ybWFsIj4gdGhlPC90c3Bhbj48L3RzcGFuPjx0c3BhbiB4PSIwIiB5PSIyLjFlbSIgZHk9IjEuMWVtIiBjbGFzcz0icm93IHRleHQtb3V0ZXItdHNwYW4iPjx0c3BhbiBmb250LXN0eWxlPSJub3JtYWwiIGNsYXNzPSJ0ZXh0LWlubmVyLXRzcGFuIiBmb250LXdlaWdodD0ibm9ybWFsIj5mbG93PC90c3Bhbj48dHNwYW4gZm9udC1zdHlsZT0ibm9ybWFsIiBjbGFzcz0idGV4dC1pbm5lci10c3BhbiIgZm9udC13ZWlnaHQ9Im5vcm1hbCI+IGFzPC90c3Bhbj48dHNwYW4gZm9udC1zdHlsZT0ibm9ybWFsIiBjbGFzcz0idGV4dC1pbm5lci10c3BhbiIgZm9udC13ZWlnaHQ9Im5vcm1hbCI+IGNoYW5nZXM8L3RzcGFuPjx0c3BhbiBmb250LXN0eWxlPSJub3JtYWwiIGNsYXNzPSJ0ZXh0LWlubmVyLXRzcGFuIiBmb250LXdlaWdodD0ibm9ybWFsIj4gbGFuZDwvdHNwYW4+PC90c3Bhbj48L3RleHQ+PC9nPjwvZz48L2c+PGcgaWQ9InNhdHRlcmktbWVybWFpZC0wLWZsb3djaGFydC1UYW5nZW50MV81LTIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEyMS42NDQ1MzEyNSwzMjEuMDk5OTk2OTQ4MjQyMTYpIiBjbGFzcz0ibm9kZSBkZWZhdWx0IiBkYXRhLWxvb2s9ImNsYXNzaWMiPjxyZWN0IHN0eWxlPSIiIHg9Ii0xMTMuNjQ0NTMxMjUiIHk9Ii01MC44OTk5OTk5OTk5OTk5OCIgd2lkdGg9IjIyNy4yODkwNjI1IiBoZWlnaHQ9IjEwMS43OTk5OTk5OTk5OTk5NSIgcng9IjUiIHJ5PSI1IiBjbGFzcz0iYmFzaWMgbGFiZWwtY29udGFpbmVyIj48L3JlY3Q+PGcgc3R5bGU9IiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCwtMzUuOTAwMDAwMDAwMDAwMDA2KSIgY2xhc3M9ImxhYmVsIj48cmVjdD48L3JlY3Q+PGc+PHJlY3Qgc3R5bGU9InN0cm9rZTpub25lIiBjbGFzcz0iYmFja2dyb3VuZCI+PC9yZWN0Pjx0ZXh0IHk9Ii0xMC4xIiBzdHlsZT0iIj48dHNwYW4geD0iMCIgeT0iLTAuMWVtIiBkeT0iMS4xZW0iIGNsYXNzPSJyb3cgdGV4dC1vdXRlci10c3BhbiI+PHRzcGFuIGZvbnQtc3R5bGU9Im5vcm1hbCIgY2xhc3M9InRleHQtaW5uZXItdHNwYW4iIGZvbnQtd2VpZ2h0PSJub3JtYWwiPkk8L3RzcGFuPjx0c3BhbiBmb250LXN0eWxlPSJub3JtYWwiIGNsYXNzPSJ0ZXh0LWlubmVyLXRzcGFuIiBmb250LXdlaWdodD0ibm9ybWFsIj4gd3JpdGU8L3RzcGFuPjx0c3BhbiBmb250LXN0eWxlPSJub3JtYWwiIGNsYXNzPSJ0ZXh0LWlubmVyLXRzcGFuIiBmb250LXdlaWdodD0ibm9ybWFsIj4gYTwvdHNwYW4+PHRzcGFuIGZvbnQtc3R5bGU9Im5vcm1hbCIgY2xhc3M9InRleHQtaW5uZXItdHNwYW4iIGZvbnQtd2VpZ2h0PSJub3JtYWwiPiBza2lsbDwvdHNwYW4+PHRzcGFuIGZvbnQtc3R5bGU9Im5vcm1hbCIgY2xhc3M9InRleHQtaW5uZXItdHNwYW4iIGZvbnQtd2VpZ2h0PSJub3JtYWwiPiB0bzwvdHNwYW4+PHRzcGFuIGZvbnQtc3R5bGU9Im5vcm1hbCIgY2xhc3M9InRleHQtaW5uZXItdHNwYW4iIGZvbnQtd2VpZ2h0PSJub3JtYWwiPiB0ZWFjaDwvdHNwYW4+PHRzcGFuIGZvbnQtc3R5bGU9Im5vcm1hbCIgY2xhc3M9InRleHQtaW5uZXItdHNwYW4iIGZvbnQtd2VpZ2h0PSJub3JtYWwiPiBMTE1zPC90c3Bhbj48L3RzcGFuPjx0c3BhbiB4PSIwIiB5PSIxZW0iIGR5PSIxLjFlbSIgY2xhc3M9InJvdyB0ZXh0LW91dGVyLXRzcGFuIj48dHNwYW4gZm9udC1zdHlsZT0ibm9ybWFsIiBjbGFzcz0idGV4dC1pbm5lci10c3BhbiIgZm9udC13ZWlnaHQ9Im5vcm1hbCI+aG93PC90c3Bhbj48dHNwYW4gZm9udC1zdHlsZT0ibm9ybWFsIiBjbGFzcz0idGV4dC1pbm5lci10c3BhbiIgZm9udC13ZWlnaHQ9Im5vcm1hbCI+IHRvPC90c3Bhbj48dHNwYW4gZm9udC1zdHlsZT0ibm9ybWFsIiBjbGFzcz0idGV4dC1pbm5lci10c3BhbiIgZm9udC13ZWlnaHQ9Im5vcm1hbCI+IHJlbGlhYmx5PC90c3Bhbj48dHNwYW4gZm9udC1zdHlsZT0ibm9ybWFsIiBjbGFzcz0idGV4dC1pbm5lci10c3BhbiIgZm9udC13ZWlnaHQ9Im5vcm1hbCI+IGVudGVyPC90c3Bhbj48dHNwYW4gZm9udC1zdHlsZT0ibm9ybWFsIiBjbGFzcz0idGV4dC1pbm5lci10c3BhbiIgZm9udC13ZWlnaHQ9Im5vcm1hbCI+IGE8L3RzcGFuPjwvdHNwYW4+PHRzcGFuIHg9IjAiIHk9IjIuMWVtIiBkeT0iMS4xZW0iIGNsYXNzPSJyb3cgdGV4dC1vdXRlci10c3BhbiI+PHRzcGFuIGZvbnQtc3R5bGU9Im5vcm1hbCIgY2xhc3M9InRleHQtaW5uZXItdHNwYW4iIGZvbnQtd2VpZ2h0PSJub3JtYWwiPm1lZXRpbmc8L3RzcGFuPjx0c3BhbiBmb250LXN0eWxlPSJub3JtYWwiIGNsYXNzPSJ0ZXh0LWlubmVyLXRzcGFuIiBmb250LXdlaWdodD0ibm9ybWFsIj4gYW5kPC90c3Bhbj48dHNwYW4gZm9udC1zdHlsZT0ibm9ybWFsIiBjbGFzcz0idGV4dC1pbm5lci10c3BhbiIgZm9udC13ZWlnaHQ9Im5vcm1hbCI+IHNpbXVsYXRlPC90c3Bhbj48dHNwYW4gZm9udC1zdHlsZT0ibm9ybWFsIiBjbGFzcz0idGV4dC1pbm5lci10c3BhbiIgZm9udC13ZWlnaHQ9Im5vcm1hbCI+IGE8L3RzcGFuPjwvdHNwYW4+PHRzcGFuIHg9IjAiIHk9IjMuMmVtIiBkeT0iMS4xZW0iIGNsYXNzPSJyb3cgdGV4dC1vdXRlci10c3BhbiI+PHRzcGFuIGZvbnQtc3R5bGU9Im5vcm1hbCIgY2xhc3M9InRleHQtaW5uZXItdHNwYW4iIGZvbnQtd2VpZ2h0PSJub3JtYWwiPmRpc2Nvbm5lY3Q8L3RzcGFuPjwvdHNwYW4+PC90ZXh0PjwvZz48L2c+PC9nPjxnIGlkPSJzYXR0ZXJpLW1lcm1haWQtMC1mbG93Y2hhcnQtVGFuZ2VudDFfOS0zIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMjEuNjQ0NTMxMjUsNDgxLjY5OTk5Njk0ODI0MjIpIiBjbGFzcz0ibm9kZSBkZWZhdWx0IiBkYXRhLWxvb2s9ImNsYXNzaWMiPjxyZWN0IHN0eWxlPSIiIHg9Ii0xMDUuNDAyMzQzNzUiIHk9Ii01MC44OTk5OTk5OTk5OTk5OCIgd2lkdGg9IjIxMC44MDQ2ODc1IiBoZWlnaHQ9IjEwMS43OTk5OTk5OTk5OTk5NSIgcng9IjUiIHJ5PSI1IiBjbGFzcz0iYmFzaWMgbGFiZWwtY29udGFpbmVyIj48L3JlY3Q+PGcgc3R5bGU9IiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCwtMzUuOTAwMDAwMDAwMDAwMDA2KSIgY2xhc3M9ImxhYmVsIj48cmVjdD48L3JlY3Q+PGc+PHJlY3Qgc3R5bGU9InN0cm9rZTpub25lIiBjbGFzcz0iYmFja2dyb3VuZCI+PC9yZWN0Pjx0ZXh0IHk9Ii0xMC4xIiBzdHlsZT0iIj48dHNwYW4geD0iMCIgeT0iLTAuMWVtIiBkeT0iMS4xZW0iIGNsYXNzPSJyb3cgdGV4dC1vdXRlci10c3BhbiI+PHRzcGFuIGZvbnQtc3R5bGU9Im5vcm1hbCIgY2xhc3M9InRleHQtaW5uZXItdHNwYW4iIGZvbnQtd2VpZ2h0PSJub3JtYWwiPkk8L3RzcGFuPjx0c3BhbiBmb250LXN0eWxlPSJub3JtYWwiIGNsYXNzPSJ0ZXh0LWlubmVyLXRzcGFuIiBmb250LXdlaWdodD0ibm9ybWFsIj4gbmVlZDwvdHNwYW4+PHRzcGFuIGZvbnQtc3R5bGU9Im5vcm1hbCIgY2xhc3M9InRleHQtaW5uZXItdHNwYW4iIGZvbnQtd2VpZ2h0PSJub3JtYWwiPiB0bzwvdHNwYW4+PHRzcGFuIGZvbnQtc3R5bGU9Im5vcm1hbCIgY2xhc3M9InRleHQtaW5uZXItdHNwYW4iIGZvbnQtd2VpZ2h0PSJub3JtYWwiPiBidWlsZDwvdHNwYW4+PHRzcGFuIGZvbnQtc3R5bGU9Im5vcm1hbCIgY2xhc3M9InRleHQtaW5uZXItdHNwYW4iIGZvbnQtd2VpZ2h0PSJub3JtYWwiPiBhPC90c3Bhbj48dHNwYW4gZm9udC1zdHlsZT0ibm9ybWFsIiBjbGFzcz0idGV4dC1pbm5lci10c3BhbiIgZm9udC13ZWlnaHQ9Im5vcm1hbCI+IG5ldzwvdHNwYW4+PC90c3Bhbj48dHNwYW4geD0iMCIgeT0iMWVtIiBkeT0iMS4xZW0iIGNsYXNzPSJyb3cgdGV4dC1vdXRlci10c3BhbiI+PHRzcGFuIGZvbnQtc3R5bGU9Im5vcm1hbCIgY2xhc3M9InRleHQtaW5uZXItdHNwYW4iIGZvbnQtd2VpZ2h0PSJub3JtYWwiPmRlYnVnPC90c3Bhbj48dHNwYW4gZm9udC1zdHlsZT0ibm9ybWFsIiBjbGFzcz0idGV4dC1pbm5lci10c3BhbiIgZm9udC13ZWlnaHQ9Im5vcm1hbCI+IGhvb2s8L3RzcGFuPjx0c3BhbiBmb250LXN0eWxlPSJub3JtYWwiIGNsYXNzPSJ0ZXh0LWlubmVyLXRzcGFuIiBmb250LXdlaWdodD0ibm9ybWFsIj4gYmVjYXVzZTwvdHNwYW4+PHRzcGFuIGZvbnQtc3R5bGU9Im5vcm1hbCIgY2xhc3M9InRleHQtaW5uZXItdHNwYW4iIGZvbnQtd2VpZ2h0PSJub3JtYWwiPiBteTwvdHNwYW4+PC90c3Bhbj48dHNwYW4geD0iMCIgeT0iMi4xZW0iIGR5PSIxLjFlbSIgY2xhc3M9InJvdyB0ZXh0LW91dGVyLXRzcGFuIj48dHNwYW4gZm9udC1zdHlsZT0ibm9ybWFsIiBjbGFzcz0idGV4dC1pbm5lci10c3BhbiIgZm9udC13ZWlnaHQ9Im5vcm1hbCI+YXV0b21hdGlvbjwvdHNwYW4+PHRzcGFuIGZvbnQtc3R5bGU9Im5vcm1hbCIgY2xhc3M9InRleHQtaW5uZXItdHNwYW4iIGZvbnQtd2VpZ2h0PSJub3JtYWwiPiB0b29sczwvdHNwYW4+PHRzcGFuIGZvbnQtc3R5bGU9Im5vcm1hbCIgY2xhc3M9InRleHQtaW5uZXItdHNwYW4iIGZvbnQtd2VpZ2h0PSJub3JtYWwiPiBhcmU8L3RzcGFuPjx0c3BhbiBmb250LXN0eWxlPSJub3JtYWwiIGNsYXNzPSJ0ZXh0LWlubmVyLXRzcGFuIiBmb250LXdlaWdodD0ibm9ybWFsIj4gYmFkPC90c3Bhbj48L3RzcGFuPjx0c3BhbiB4PSIwIiB5PSIzLjJlbSIgZHk9IjEuMWVtIiBjbGFzcz0icm93IHRleHQtb3V0ZXItdHNwYW4iPjx0c3BhbiBmb250LXN0eWxlPSJub3JtYWwiIGNsYXNzPSJ0ZXh0LWlubmVyLXRzcGFuIiBmb250LXdlaWdodD0ibm9ybWFsIj5hdDwvdHNwYW4+PHRzcGFuIGZvbnQtc3R5bGU9Im5vcm1hbCIgY2xhc3M9InRleHQtaW5uZXItdHNwYW4iIGZvbnQtd2VpZ2h0PSJub3JtYWwiPiB0eXBpbmc8L3RzcGFuPjx0c3BhbiBmb250LXN0eWxlPSJub3JtYWwiIGNsYXNzPSJ0ZXh0LWlubmVyLXRzcGFuIiBmb250LXdlaWdodD0ibm9ybWFsIj4gaW50bzwvdHNwYW4+PHRzcGFuIGZvbnQtc3R5bGU9Im5vcm1hbCIgY2xhc3M9InRleHQtaW5uZXItdHNwYW4iIGZvbnQtd2VpZ2h0PSJub3JtYWwiPiBwaG9uZXM8L3RzcGFuPjwvdHNwYW4+PC90ZXh0PjwvZz48L2c+PC9nPjxnIGlkPSJzYXR0ZXJpLW1lcm1haWQtMC1mbG93Y2hhcnQtVGFuZ2VudDItNCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMzk4LjEwNTQ2ODc1LDE2OS4yOTk5OTY5NDgyNDIxOCkiIGNsYXNzPSJub2RlIGRlZmF1bHQiIGRhdGEtbG9vaz0iY2xhc3NpYyI+PHJlY3Qgc3R5bGU9IiIgeD0iLTExMS4yNTM5MDYyNSIgeT0iLTQyLjA5OTk5OTk5OTk5OTk5NCIgd2lkdGg9IjIyMi41MDc4MTI1IiBoZWlnaHQ9Ijg0LjE5OTk5OTk5OTk5OTk5IiByeD0iNSIgcnk9IjUiIGNsYXNzPSJiYXNpYyBsYWJlbC1jb250YWluZXIiPjwvcmVjdD48ZyBzdHlsZT0iIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLC0yNy4xKSIgY2xhc3M9ImxhYmVsIj48cmVjdD48L3JlY3Q+PGc+PHJlY3Qgc3R5bGU9InN0cm9rZTpub25lIiBjbGFzcz0iYmFja2dyb3VuZCI+PC9yZWN0Pjx0ZXh0IHk9Ii0xMC4xIiBzdHlsZT0iIj48dHNwYW4geD0iMCIgeT0iLTAuMWVtIiBkeT0iMS4xZW0iIGNsYXNzPSJyb3cgdGV4dC1vdXRlci10c3BhbiI+PHRzcGFuIGZvbnQtc3R5bGU9Im5vcm1hbCIgY2xhc3M9InRleHQtaW5uZXItdHNwYW4iIGZvbnQtd2VpZ2h0PSJub3JtYWwiPkk8L3RzcGFuPjx0c3BhbiBmb250LXN0eWxlPSJub3JtYWwiIGNsYXNzPSJ0ZXh0LWlubmVyLXRzcGFuIiBmb250LXdlaWdodD0ibm9ybWFsIj4gcHVzaDwvdHNwYW4+PHRzcGFuIGZvbnQtc3R5bGU9Im5vcm1hbCIgY2xhc3M9InRleHQtaW5uZXItdHNwYW4iIGZvbnQtd2VpZ2h0PSJub3JtYWwiPiB1cDwvdHNwYW4+PHRzcGFuIGZvbnQtc3R5bGU9Im5vcm1hbCIgY2xhc3M9InRleHQtaW5uZXItdHNwYW4iIGZvbnQtd2VpZ2h0PSJub3JtYWwiPiBteTwvdHNwYW4+PHRzcGFuIGZvbnQtc3R5bGU9Im5vcm1hbCIgY2xhc3M9InRleHQtaW5uZXItdHNwYW4iIGZvbnQtd2VpZ2h0PSJub3JtYWwiPiBzcGVjPC90c3Bhbj48dHNwYW4gZm9udC1zdHlsZT0ibm9ybWFsIiBjbGFzcz0idGV4dC1pbm5lci10c3BhbiIgZm9udC13ZWlnaHQ9Im5vcm1hbCI+IGFuZDwvdHNwYW4+PHRzcGFuIGZvbnQtc3R5bGU9Im5vcm1hbCIgY2xhc3M9InRleHQtaW5uZXItdHNwYW4iIGZvbnQtd2VpZ2h0PSJub3JtYWwiPiB0YXNrPC90c3Bhbj48L3RzcGFuPjx0c3BhbiB4PSIwIiB5PSIxZW0iIGR5PSIxLjFlbSIgY2xhc3M9InJvdyB0ZXh0LW91dGVyLXRzcGFuIj48dHNwYW4gZm9udC1zdHlsZT0ibm9ybWFsIiBjbGFzcz0idGV4dC1pbm5lci10c3BhbiIgZm9udC13ZWlnaHQ9Im5vcm1hbCI+YnJlYWtkb3duPC90c3Bhbj48dHNwYW4gZm9udC1zdHlsZT0ibm9ybWFsIiBjbGFzcz0idGV4dC1pbm5lci10c3BhbiIgZm9udC13ZWlnaHQ9Im5vcm1hbCI+IGZvcjwvdHNwYW4+PHRzcGFuIGZvbnQtc3R5bGU9Im5vcm1hbCIgY2xhc3M9InRleHQtaW5uZXItdHNwYW4iIGZvbnQtd2VpZ2h0PSJub3JtYWwiPiByZXZpZXc8L3RzcGFuPjx0c3BhbiBmb250LXN0eWxlPSJub3JtYWwiIGNsYXNzPSJ0ZXh0LWlubmVyLXRzcGFuIiBmb250LXdlaWdodD0ibm9ybWFsIj4gYW5kPC90c3Bhbj48L3RzcGFuPjx0c3BhbiB4PSIwIiB5PSIyLjFlbSIgZHk9IjEuMWVtIiBjbGFzcz0icm93IHRleHQtb3V0ZXItdHNwYW4iPjx0c3BhbiBmb250LXN0eWxlPSJub3JtYWwiIGNsYXNzPSJ0ZXh0LWlubmVyLXRzcGFuIiBmb250LXdlaWdodD0ibm9ybWFsIj5maW5kPC90c3Bhbj48dHNwYW4gZm9udC1zdHlsZT0ibm9ybWFsIiBjbGFzcz0idGV4dC1pbm5lci10c3BhbiIgZm9udC13ZWlnaHQ9Im5vcm1hbCI+IENJPC90c3Bhbj48dHNwYW4gZm9udC1zdHlsZT0ibm9ybWFsIiBjbGFzcz0idGV4dC1pbm5lci10c3BhbiIgZm9udC13ZWlnaHQ9Im5vcm1hbCI+IHRvPC90c3Bhbj48dHNwYW4gZm9udC1zdHlsZT0ibm9ybWFsIiBjbGFzcz0idGV4dC1pbm5lci10c3BhbiIgZm9udC13ZWlnaHQ9Im5vcm1hbCI+IGJlPC90c3Bhbj48dHNwYW4gZm9udC1zdHlsZT0ibm9ybWFsIiBjbGFzcz0idGV4dC1pbm5lci10c3BhbiIgZm9udC13ZWlnaHQ9Im5vcm1hbCI+IHRvbzwvdHNwYW4+PHRzcGFuIGZvbnQtc3R5bGU9Im5vcm1hbCIgY2xhc3M9InRleHQtaW5uZXItdHNwYW4iIGZvbnQtd2VpZ2h0PSJub3JtYWwiPiBzbG93PC90c3Bhbj48L3RzcGFuPjwvdGV4dD48L2c+PC9nPjwvZz48ZyBpZD0ic2F0dGVyaS1tZXJtYWlkLTAtZmxvd2NoYXJ0LVRhbmdlbnQyXzUtNSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMzk4LjEwNTQ2ODc1LDMyMS4wOTk5OTY5NDgyNDIxNikiIGNsYXNzPSJub2RlIGRlZmF1bHQiIGRhdGEtbG9vaz0iY2xhc3NpYyI+PHJlY3Qgc3R5bGU9IiIgeD0iLTExMi44MTY0MDYyNSIgeT0iLTU5LjY5OTk5OTk5OTk5OTk5IiB3aWR0aD0iMjI1LjYzMjgxMjUiIGhlaWdodD0iMTE5LjM5OTk5OTk5OTk5OTk4IiByeD0iNSIgcnk9IjUiIGNsYXNzPSJiYXNpYyBsYWJlbC1jb250YWluZXIiPjwvcmVjdD48ZyBzdHlsZT0iIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLC00NC43KSIgY2xhc3M9ImxhYmVsIj48cmVjdD48L3JlY3Q+PGc+PHJlY3Qgc3R5bGU9InN0cm9rZTpub25lIiBjbGFzcz0iYmFja2dyb3VuZCI+PC9yZWN0Pjx0ZXh0IHk9Ii0xMC4xIiBzdHlsZT0iIj48dHNwYW4geD0iMCIgeT0iLTAuMWVtIiBkeT0iMS4xZW0iIGNsYXNzPSJyb3cgdGV4dC1vdXRlci10c3BhbiI+PHRzcGFuIGZvbnQtc3R5bGU9Im5vcm1hbCIgY2xhc3M9InRleHQtaW5uZXItdHNwYW4iIGZvbnQtd2VpZ2h0PSJub3JtYWwiPkFzPC90c3Bhbj48dHNwYW4gZm9udC1zdHlsZT0ibm9ybWFsIiBjbGFzcz0idGV4dC1pbm5lci10c3BhbiIgZm9udC13ZWlnaHQ9Im5vcm1hbCI+IEk8L3RzcGFuPjx0c3BhbiBmb250LXN0eWxlPSJub3JtYWwiIGNsYXNzPSJ0ZXh0LWlubmVyLXRzcGFuIiBmb250LXdlaWdodD0ibm9ybWFsIj4gdHdlYWs8L3RzcGFuPjx0c3BhbiBmb250LXN0eWxlPSJub3JtYWwiIGNsYXNzPSJ0ZXh0LWlubmVyLXRzcGFuIiBmb250LXdlaWdodD0ibm9ybWFsIj4gdGhlPC90c3Bhbj48dHNwYW4gZm9udC1zdHlsZT0ibm9ybWFsIiBjbGFzcz0idGV4dC1pbm5lci10c3BhbiIgZm9udC13ZWlnaHQ9Im5vcm1hbCI+IGJ1aWxkPC90c3Bhbj48dHNwYW4gZm9udC1zdHlsZT0ibm9ybWFsIiBjbGFzcz0idGV4dC1pbm5lci10c3BhbiIgZm9udC13ZWlnaHQ9Im5vcm1hbCI+IHRvb2w8L3RzcGFuPjx0c3BhbiBmb250LXN0eWxlPSJub3JtYWwiIGNsYXNzPSJ0ZXh0LWlubmVyLXRzcGFuIiBmb250LXdlaWdodD0ibm9ybWFsIj4gdG88L3RzcGFuPjwvdHNwYW4+PHRzcGFuIHg9IjAiIHk9IjFlbSIgZHk9IjEuMWVtIiBjbGFzcz0icm93IHRleHQtb3V0ZXItdHNwYW4iPjx0c3BhbiBmb250LXN0eWxlPSJub3JtYWwiIGNsYXNzPSJ0ZXh0LWlubmVyLXRzcGFuIiBmb250LXdlaWdodD0ibm9ybWFsIj5zbGltPC90c3Bhbj48dHNwYW4gZm9udC1zdHlsZT0ibm9ybWFsIiBjbGFzcz0idGV4dC1pbm5lci10c3BhbiIgZm9udC13ZWlnaHQ9Im5vcm1hbCI+IGRvd248L3RzcGFuPjx0c3BhbiBmb250LXN0eWxlPSJub3JtYWwiIGNsYXNzPSJ0ZXh0LWlubmVyLXRzcGFuIiBmb250LXdlaWdodD0ibm9ybWFsIj4gQ0k8L3RzcGFuPjx0c3BhbiBmb250LXN0eWxlPSJub3JtYWwiIGNsYXNzPSJ0ZXh0LWlubmVyLXRzcGFuIiBmb250LXdlaWdodD0ibm9ybWFsIj4gam9iczwvdHNwYW4+PHRzcGFuIGZvbnQtc3R5bGU9Im5vcm1hbCIgY2xhc3M9InRleHQtaW5uZXItdHNwYW4iIGZvbnQtd2VpZ2h0PSJub3JtYWwiPiBJPC90c3Bhbj48dHNwYW4gZm9udC1zdHlsZT0ibm9ybWFsIiBjbGFzcz0idGV4dC1pbm5lci10c3BhbiIgZm9udC13ZWlnaHQ9Im5vcm1hbCI+IG5vdGljZTwvdHNwYW4+PC90c3Bhbj48dHNwYW4geD0iMCIgeT0iMi4xZW0iIGR5PSIxLjFlbSIgY2xhc3M9InJvdyB0ZXh0LW91dGVyLXRzcGFuIj48dHNwYW4gZm9udC1zdHlsZT0ibm9ybWFsIiBjbGFzcz0idGV4dC1pbm5lci10c3BhbiIgZm9udC13ZWlnaHQ9Im5vcm1hbCI+YWxsPC90c3Bhbj48dHNwYW4gZm9udC1zdHlsZT0ibm9ybWFsIiBjbGFzcz0idGV4dC1pbm5lci10c3BhbiIgZm9udC13ZWlnaHQ9Im5vcm1hbCI+IGZpbGVzPC90c3Bhbj48dHNwYW4gZm9udC1zdHlsZT0ibm9ybWFsIiBjbGFzcz0idGV4dC1pbm5lci10c3BhbiIgZm9udC13ZWlnaHQ9Im5vcm1hbCI+IGFyZTwvdHNwYW4+PHRzcGFuIGZvbnQtc3R5bGU9Im5vcm1hbCIgY2xhc3M9InRleHQtaW5uZXItdHNwYW4iIGZvbnQtd2VpZ2h0PSJub3JtYWwiPiBub3Q8L3RzcGFuPjx0c3BhbiBmb250LXN0eWxlPSJub3JtYWwiIGNsYXNzPSJ0ZXh0LWlubmVyLXRzcGFuIiBmb250LXdlaWdodD0ibm9ybWFsIj4gYmVpbmc8L3RzcGFuPjwvdHNwYW4+PHRzcGFuIHg9IjAiIHk9IjMuMmVtIiBkeT0iMS4xZW0iIGNsYXNzPSJyb3cgdGV4dC1vdXRlci10c3BhbiI+PHRzcGFuIGZvbnQtc3R5bGU9Im5vcm1hbCIgY2xhc3M9InRleHQtaW5uZXItdHNwYW4iIGZvbnQtd2VpZ2h0PSJub3JtYWwiPmNvdmVyZWQ8L3RzcGFuPjx0c3BhbiBmb250LXN0eWxlPSJub3JtYWwiIGNsYXNzPSJ0ZXh0LWlubmVyLXRzcGFuIiBmb250LXdlaWdodD0ibm9ybWFsIj4gYnk8L3RzcGFuPjx0c3BhbiBmb250LXN0eWxlPSJub3JtYWwiIGNsYXNzPSJ0ZXh0LWlubmVyLXRzcGFuIiBmb250LXdlaWdodD0ibm9ybWFsIj4gdGhlPC90c3Bhbj48dHNwYW4gZm9udC1zdHlsZT0ibm9ybWFsIiBjbGFzcz0idGV4dC1pbm5lci10c3BhbiIgZm9udC13ZWlnaHQ9Im5vcm1hbCI+IGZvcm1hdHRlcjwvdHNwYW4+PC90c3Bhbj48dHNwYW4geD0iMCIgeT0iNC4zZW0iIGR5PSIxLjFlbSIgY2xhc3M9InJvdyB0ZXh0LW91dGVyLXRzcGFuIj48dHNwYW4gZm9udC1zdHlsZT0ibm9ybWFsIiBjbGFzcz0idGV4dC1pbm5lci10c3BhbiIgZm9udC13ZWlnaHQ9Im5vcm1hbCI+YW55bW9yZTwvdHNwYW4+PC90c3Bhbj48L3RleHQ+PC9nPjwvZz48L2c+PGcgaWQ9InNhdHRlcmktbWVybWFpZC0wLWZsb3djaGFydC1UYW5nZW50Ml85LTYiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDM5OC4xMDU0Njg3NSw0ODEuNjk5OTk2OTQ4MjQyMikiIGNsYXNzPSJub2RlIGRlZmF1bHQiIGRhdGEtbG9vaz0iY2xhc3NpYyI+PHJlY3Qgc3R5bGU9IiIgeD0iLTEwNC4xNTIzNDM3NSIgeT0iLTUwLjg5OTk5OTk5OTk5OTk4IiB3aWR0aD0iMjA4LjMwNDY4NzUiIGhlaWdodD0iMTAxLjc5OTk5OTk5OTk5OTk1IiByeD0iNSIgcnk9IjUiIGNsYXNzPSJiYXNpYyBsYWJlbC1jb250YWluZXIiPjwvcmVjdD48ZyBzdHlsZT0iIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLC0zNS45MDAwMDAwMDAwMDAwMDYpIiBjbGFzcz0ibGFiZWwiPjxyZWN0PjwvcmVjdD48Zz48cmVjdCBzdHlsZT0ic3Ryb2tlOm5vbmUiIGNsYXNzPSJiYWNrZ3JvdW5kIj48L3JlY3Q+PHRleHQgeT0iLTEwLjEiIHN0eWxlPSIiPjx0c3BhbiB4PSIwIiB5PSItMC4xZW0iIGR5PSIxLjFlbSIgY2xhc3M9InJvdyB0ZXh0LW91dGVyLXRzcGFuIj48dHNwYW4gZm9udC1zdHlsZT0ibm9ybWFsIiBjbGFzcz0idGV4dC1pbm5lci10c3BhbiIgZm9udC13ZWlnaHQ9Im5vcm1hbCI+STwvdHNwYW4+PHRzcGFuIGZvbnQtc3R5bGU9Im5vcm1hbCIgY2xhc3M9InRleHQtaW5uZXItdHNwYW4iIGZvbnQtd2VpZ2h0PSJub3JtYWwiPiBub3c8L3RzcGFuPjx0c3BhbiBmb250LXN0eWxlPSJub3JtYWwiIGNsYXNzPSJ0ZXh0LWlubmVyLXRzcGFuIiBmb250LXdlaWdodD0ibm9ybWFsIj4gaGF2ZTwvdHNwYW4+PHRzcGFuIGZvbnQtc3R5bGU9Im5vcm1hbCIgY2xhc3M9InRleHQtaW5uZXItdHNwYW4iIGZvbnQtd2VpZ2h0PSJub3JtYWwiPiB0bzwvdHNwYW4+PHRzcGFuIGZvbnQtc3R5bGU9Im5vcm1hbCIgY2xhc3M9InRleHQtaW5uZXItdHNwYW4iIGZvbnQtd2VpZ2h0PSJub3JtYWwiPiBnbzwvdHNwYW4+PHRzcGFuIGZvbnQtc3R5bGU9Im5vcm1hbCIgY2xhc3M9InRleHQtaW5uZXItdHNwYW4iIGZvbnQtd2VpZ2h0PSJub3JtYWwiPiBmaXg8L3RzcGFuPjx0c3BhbiBmb250LXN0eWxlPSJub3JtYWwiIGNsYXNzPSJ0ZXh0LWlubmVyLXRzcGFuIiBmb250LXdlaWdodD0ibm9ybWFsIj4gdGhlPC90c3Bhbj48L3RzcGFuPjx0c3BhbiB4PSIwIiB5PSIxZW0iIGR5PSIxLjFlbSIgY2xhc3M9InJvdyB0ZXh0LW91dGVyLXRzcGFuIj48dHNwYW4gZm9udC1zdHlsZT0ibm9ybWFsIiBjbGFzcz0idGV4dC1pbm5lci10c3BhbiIgZm9udC13ZWlnaHQ9Im5vcm1hbCI+Zm9ybWF0dGVyPC90c3Bhbj48dHNwYW4gZm9udC1zdHlsZT0ibm9ybWFsIiBjbGFzcz0idGV4dC1pbm5lci10c3BhbiIgZm9udC13ZWlnaHQ9Im5vcm1hbCI+IGFuZDwvdHNwYW4+PHRzcGFuIGZvbnQtc3R5bGU9Im5vcm1hbCIgY2xhc3M9InRleHQtaW5uZXItdHNwYW4iIGZvbnQtd2VpZ2h0PSJub3JtYWwiPiBwcm9wYWdhdGU8L3RzcGFuPjwvdHNwYW4+PHRzcGFuIHg9IjAiIHk9IjIuMWVtIiBkeT0iMS4xZW0iIGNsYXNzPSJyb3cgdGV4dC1vdXRlci10c3BhbiI+PHRzcGFuIGZvbnQtc3R5bGU9Im5vcm1hbCIgY2xhc3M9InRleHQtaW5uZXItdHNwYW4iIGZvbnQtd2VpZ2h0PSJub3JtYWwiPnRoYXQ8L3RzcGFuPjx0c3BhbiBmb250LXN0eWxlPSJub3JtYWwiIGNsYXNzPSJ0ZXh0LWlubmVyLXRzcGFuIiBmb250LXdlaWdodD0ibm9ybWFsIj4gdXBkYXRlPC90c3Bhbj48dHNwYW4gZm9udC1zdHlsZT0ibm9ybWFsIiBjbGFzcz0idGV4dC1pbm5lci10c3BhbiIgZm9udC13ZWlnaHQ9Im5vcm1hbCI+IGJhY2s8L3RzcGFuPjx0c3BhbiBmb250LXN0eWxlPSJub3JtYWwiIGNsYXNzPSJ0ZXh0LWlubmVyLXRzcGFuIiBmb250LXdlaWdodD0ibm9ybWFsIj4gdG88L3RzcGFuPjx0c3BhbiBmb250LXN0eWxlPSJub3JtYWwiIGNsYXNzPSJ0ZXh0LWlubmVyLXRzcGFuIiBmb250LXdlaWdodD0ibm9ybWFsIj4gdGhlPC90c3Bhbj48L3RzcGFuPjx0c3BhbiB4PSIwIiB5PSIzLjJlbSIgZHk9IjEuMWVtIiBjbGFzcz0icm93IHRleHQtb3V0ZXItdHNwYW4iPjx0c3BhbiBmb250LXN0eWxlPSJub3JtYWwiIGNsYXNzPSJ0ZXh0LWlubmVyLXRzcGFuIiBmb250LXdlaWdodD0ibm9ybWFsIj5wcm9qZWN0PC90c3Bhbj48L3RzcGFuPjwvdGV4dD48L2c+PC9nPjwvZz48L2c+PC9nPjwvZz48c3R5bGU+CiAgLmFjdG9yLAogIC5sYWJlbEJveCwKICAubm9kZSByZWN0LAogIC5ub2RlIHBvbHlnb24sCiAgLm5vZGUgY2lyY2xlLAogIC5jbHVzdGVyIHJlY3QsCiAgLnNlY3Rpb24sCiAgLnRhc2ssCiAgLnRhc2tUZXh0T3V0c2lkZVJpZ2h0LAogIC50YXNrVGV4dE91dHNpZGVMZWZ0IHsKICAgIGZpbGw6ICNmN2Y3ZjcgIWltcG9ydGFudDsKICAgIHN0cm9rZTogI2U4ZThlOCAhaW1wb3J0YW50OwogIH0KCiAgLm5vdGUgewogICAgZmlsbDogI2UwYzhkYiAhaW1wb3J0YW50OwogICAgc3Ryb2tlOiAjN2EzZDZlICFpbXBvcnRhbnQ7CiAgfQoKICAuYWN0b3ItbGluZSwKICAubWVzc2FnZUxpbmUwLAogIC5tZXNzYWdlTGluZTEsCiAgLmxvb3BMaW5lLAogIC5lZGdlUGF0aCAucGF0aCwKICAuZmxvd2NoYXJ0LWxpbmssCiAgLm1hcmtlciwKICAubWFya2VyIHBhdGgsCiAgW2lkJD0iLWFycm93aGVhZCJdIHBhdGgsCiAgW2lkJD0iLWZpbGxlZC1oZWFkIl0gcGF0aCwKICBbaWQkPSItY3Jvc3NoZWFkIl0gcGF0aCwKICBbaWQkPSItc3RpY2tUb3BBcnJvd0hlYWQiXSBwYXRoLAogIFtpZCQ9Ii1zdGlja0JvdHRvbUFycm93SGVhZCJdIHBhdGgsCiAgW2lkJD0iLXNvbGlkVG9wQXJyb3dIZWFkIl0gcGF0aCwKICBbaWQkPSItc29saWRCb3R0b21BcnJvd0hlYWQiXSBwYXRoIHsKICAgIHN0cm9rZTogIzQ0NDQ0NCAhaW1wb3J0YW50OwogICAgZmlsbDogIzQ0NDQ0NCAhaW1wb3J0YW50OwogIH0KCiAgLm1lc3NhZ2VUZXh0LAogIC5sYWJlbFRleHQsCiAgLmxhYmVsVGV4dCB0c3BhbiwKICAubG9vcFRleHQsCiAgLmxvb3BUZXh0IHRzcGFuLAogIC5ub3RlVGV4dCwKICAubm90ZVRleHQgdHNwYW4sCiAgLmFjdG9yLWJveCwKICAuYWN0b3ItYm94IHRzcGFuLAogIC5zZWN0aW9uVGl0bGUsCiAgLnNlY3Rpb25UaXRsZSB0c3BhbiwKICB0ZXh0LAogIHRzcGFuIHsKICAgIGZpbGw6ICMxMTExMTEgIWltcG9ydGFudDsKICAgIHN0cm9rZTogbm9uZSAhaW1wb3J0YW50OwogIH0KCiAgLmFjdGl2YXRpb24wLAogIC5hY3RpdmF0aW9uMSwKICAuYWN0aXZhdGlvbjIsCiAgLnNlcXVlbmNlTnVtYmVyIHsKICAgIGZpbGw6ICNmZmZmZmYgIWltcG9ydGFudDsKICAgIHN0cm9rZTogI2U4ZThlOCAhaW1wb3J0YW50OwogIH0KPC9zdHlsZT48L3N2Zz4=" alt="Mermaid diagram" loading="lazy" decoding="async">
<p>Genuinely starts feeling like I’ve actually built nothing of value when the moment I touch it everything starts crumbling to dust. Maybe I’m just being dramatic and having big feelings for no-therapy-in-a-bit reasons. Onwards!</p>
<h1 id="gaming">Gaming</h1>
<p>The gang was not jiving with Helldivers 2 this week so after a very boring run on Monday, I convinced Shreyansh and Prajwal to try <a href="https://crashoutcrew.site/">Crashout Crew</a> which I had purchased some time ago. We gave it a go on Tuesday and were immediately hooked, a couple of hours went by in a flash. We roped in <a href="https://kat.bio">Amogh</a> one of the days and unfortunately had to deal with the hell that is the bee/honey shipment. Absolutely couldn’t get it done, got pissed and just went back to Helldivers 2 for a bit. There Prajwal ended up rage-quitting after being harassed by the clankers a little too much so that spelt the end of this week’s friendslop adventures.</p>
<figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/crashout-crew.zKTVn78k.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/crashout-crew.zKTVn78k.webp" data-pswp-width="2560" data-pswp-height="1440" data-pswp-caption="I've never hated eggs more" aria-label="Screen grab from the game Crashout Crew, showing two loading bays on the right hand side and the cargo being chickens and eggs. Yes." data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/crashout-crew.zKTVn78k.webp" alt="Screen grab from the game Crashout Crew, showing two loading bays on the right hand side and the cargo being chickens and eggs. Yes." loading="lazy" decoding="async" width="2560" height="1440" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">I've never hated eggs more</figcaption></figure>
<p>I continued making steady progress in CONTROL: Resonant this week. Did a few side missions to level up my build, then I ventured further into the Underpass section and got my ass beat a few times by the Resonant there. I got very close to beating it on one attempt, but I started playing too aggressively and got punished. On my fifth try I was able to keep it together and finally secure the kill and move onto the next mission. The game continues to be exceedingly enjoyable and I will start piecing together screenshots for my <a href="https://msfjarvis.dev/games">games reel</a> soon. I wanted to wait for the photo mode to come out before I attempted it, but I don’t think I’ll reach NG+ (New Game Plus) by then to recapture everything from the beginning.</p>
<h1 id="personal-projects">Personal projects</h1>
<p>I put out another release of <a href="https://github.com/msfjarvis/compose-lobsters/">Claw</a> with a few minor fixes to the UI and a crash fix for a rare bug in the new HTML renderer I had shipped last week. The app is very nearly feature complete as far as I’m concerned, so most of the work I do on it these days involves mucking around with new Android tech. I’m itching to start a new project at some point with a broader scope so I can do even more with it.</p>
<h1 id="cooking">Cooking</h1>
<p>Not much in the way of cooking this week as we returned from the 2 days in office rather late and thoroughly exhausted and one or the other thing kept happening on the other days. We made a paneer gravy one night, and threw together this last minute quinoa salad on another. Potato in a veggie salad sounded a little wrong but lightly toasting boiled potatoes with some spices actually worked out nicely. We’ll probably stick with the usual high protein fare of chickpeas next time though.</p>
<figure data-image-modal-root="" class="half" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/quinoa-potato-salad.Cw-FbdrV.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/quinoa-potato-salad.Cw-FbdrV.webp" data-pswp-width="3072" data-pswp-height="4080" data-pswp-caption="" aria-label="A bowl of quinoa and potato salad with chopped vegetables." data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/quinoa-potato-salad.Cw-FbdrV.webp" alt="A bowl of quinoa and potato salad with chopped vegetables." loading="lazy" decoding="async" width="3072" height="4080" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a></figure>]]></content:encoded>
    </item>
    <item>
      <title>Weeknotes: Week #41 (2026)</title>
      <link>https://msfjarvis.dev/weeknotes/week-41-2026/</link>
      <guid>https://msfjarvis.dev/weeknotes/week-41-2026/</guid>
      <description>I been gamin and cookin</description>
      <pubDate>Sun, 11 Oct 2026 15:52:00 GMT</pubDate>
      <content:encoded><![CDATA[<p>Some <em>interesting</em> things at work, lots of good cooking, and a metric ton of <a href="https://controlgame.com/en">CONTROL: Resonant</a> gameplay!</p>
<h1 id="personal">Personal</h1>
<p>After a long, long break I was finally back in the gym this week for a couple of days. Not remotely as good a schedule as I wanna keep but a small victory nonetheless. I’ve been equally lazy about getting a haircut, and it’s starting to get to the point where my mother would’ve started teasing me to tie it up in a ponytail. I might take her up on that offer given I’ll be home in some 20-odd days.</p>
<figure data-image-modal-root="" class="half" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/rats-nest.Ao1OIiG5.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/rats-nest.Ao1OIiG5.webp" data-pswp-width="3072" data-pswp-height="4080" data-pswp-caption="I sent this picture to my younger sister and got the quickest roast reply I've ever seen from her. Little devil..." aria-label="Me with tousled hair taking a mirror selfie while brushing my teeth" data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/rats-nest.Ao1OIiG5.webp" alt="Me with tousled hair taking a mirror selfie while brushing my teeth" loading="lazy" decoding="async" width="3072" height="4080" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">I sent this picture to my younger sister and got the quickest roast reply I've ever seen from her. Little devil...</figcaption></figure>
<p>I saw some Godzilla slander on the interwebs which reminded me that I hadn’t watched <a href="https://www.imdb.com/title/tt3741700">Godzilla: King of the Monsters</a> yet which has now been remedied. I’d say it’s an easy 3 out of 5 Godzilla movie, and a 2.5 in general. Some more monster-on-monster combat and perhaps additional screen time for Mothra could’ve taken it up to 4 stars for me.</p>
<p>I’m trying to figure out how much I can even talk about CONTROL: Resonant since it’s a very new game, but I’ve been playing so much, and it is so cool!! <a href="https://kat.bio/">Amogh</a> is also playing and is down to yap, but he’s pretty far behind and I don’t wanna spoil anything for him so it’s a bit difficult. My <a href="https://msfjarvis.dev/notes/collating-entries-in-my-obsidian-journal-for-week-notes/">Obsidian notes</a> this week are, by line count, mostly about CONTROL :3</p>
<h1 id="random-bullshit">Random bullshit</h1>
<p>Why is there no cash in the ATMs near me?? I’m just trying to pay my maintenance bro</p>
<figure data-image-modal-root="" class="half" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/no-cash.CLzI_GBo.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/no-cash.CLzI_GBo.webp" data-pswp-width="3072" data-pswp-height="4080" data-pswp-caption="This was the 3rd ATM I checked with the exact same error" aria-label="An ATM screen says it cannot dispense cash" data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/no-cash.CLzI_GBo.webp" alt="An ATM screen says it cannot dispense cash" loading="lazy" decoding="async" width="3072" height="4080" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">This was the 3rd ATM I checked with the exact same error</figcaption></figure>
<p>I switched back to the default YouTube app because the Revanced mod I was using stopped sending notifications. This resulted in me regaining the algorithmic feed, and it delivered this truly unskippable title: <a href="https://www.youtube.com/watch?v=9c7wS1vcW9c">Could Pro Speedrunners Zero Cycle The Twin Towers?</a></p>
<p>Maybe the algorithms are alright <em>/s</em>.</p>
<h1 id="work">Work</h1>
<p>Things at work remain on the quieter side. All my current priorities are blocked on other people for one reason or another, so I’ve mostly spent the week racking ye olde brain for future roadmap items. There was an awkward conversation with a colleague who had started overusing Google Chat’s ‘Refine with AI’ button for literally all their messages. They had been given feedback to not do this before as well, but apparently nobody had spent some time to actually explain our problems with it. I linked them to the <a href="https://gruhn.me/blog/2026-08-03/">Meat Proxy</a> blog post, and explained why we much prefer them to use their own words. So far it seems to have stuck, so that’s a win in my book.</p>
<p>Also, the new office finally (re)opens on Monday 🎉</p>
<h1 id="personal-projects">Personal projects</h1>
<p>Busy week for <a href="https://github.com/msfjarvis/compose-lobsters/">Claw</a>, my Android app for the <a href="https://lobste.rs">Lobsters link aggregator community</a> as I shipped fixes for a multitude of UI and UX bugs. <a href="https://github.com/msfjarvis/compose-lobsters/releases/tag/v1.74.0">v1.74.0</a> includes a completely new HTML renderer (used to render comments) which fixes some longstanding bugs <sup>[<a href="https://github.com/cbeyls/HtmlConverterCompose/issues/26">1</a>][<a href="https://github.com/cbeyls/HtmlConverterCompose/issues/20">2</a>]</sup>. It also restores proper support for Android’s new <a href="https://developer.android.com/design/ui/mobile/guides/patterns/predictive-back">predictive back animations</a> which had silently regressed as part of a dependency update some time ago.</p>
<p>As part of this I also discovered that <a href="https://tramline.app/">Tramline</a>, the release automation platform I’ve used for Claw for the past 2-3 years had actually wound down commercial operations. It is now being run by a couple of its original maintainers, so I naturally signed up as a GitHub sponsor to help keep the lights on. If you have mobile apps and hate having to interact with the App Stores, you should sign up too! I’ve never had a single problem with their platform and this “shout out” is mostly because they deserve it for the immense amount of value the service has provided to me for free.</p>
<h2 id="-clank-clank-clank-">🤖 CLANK CLANK CLANK 🤖</h2>
<p>I’ve been wanting to test the new <a href="https://docs.typesafe.ai/concepts/system-one">System One</a> class models for a while, and with Cloudflare releasing its <a href="https://blog.cloudflare.com/clef-decision-models/">own Clef models</a> it was the perfect time to dive in. I built a <a href="https://git.msfjarvis.dev/msfjarvis/acceptable-vibes/src/branch/main/daily-dose">small Worker</a> that sends me a Telegram message with my GitHub notifications classified based on priority and category, so I know what I’m working on before I even open a laptop.</p>
<h2 id="meta">Meta</h2>
<p>This website has had some minor changes. The header now only shows 1 link entry and delegates the rest into the popover to improve the mobile layout. I’ve refactored some build-time stuff to reduce the number of direct dependencies and somewhat lower my risk of beta-testing the next Shai-Hulud.</p>
<h1 id="cooking">Cooking</h1>
<p>Very great week for cooking enjoyers on this here blog as we made many new things and flubbed our way through all of it.</p>
<p>We made biryani this week, and only discovered midway through that we had no Biryani masala in the house. The magic of quick commerce was called upon, where I accidentally ordered a “biryani kit” that you’re supposed to drop rice and chicken into while we already had a full masala base and everything in place. I suspect that contributed to why it tasted so damn amazing.</p>
<div class="gallery" data-pswp-gallery="" style="--gallery-min-width: 250px; --gallery-gap: 1.5rem" data-astro-cid-rj65ajc3=""><figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/biryani-cooker.t7DapJ1X.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/biryani-cooker.t7DapJ1X.webp" data-pswp-width="3072" data-pswp-height="4080" data-pswp-caption="Even while it was cooking we knew we have a winner." aria-label="Chicken biryani cooking in a pressure cooker" data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/biryani-cooker.t7DapJ1X.webp" alt="Chicken biryani cooking in a pressure cooker" loading="lazy" decoding="async" width="3072" height="4080" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">Even while it was cooking we knew we have a winner.</figcaption></figure><figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/biryani-bowl.DDYy8XnU.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/biryani-bowl.DDYy8XnU.webp" data-pswp-width="3072" data-pswp-height="4080" data-pswp-caption="Genuinely tasted like what you'd get at a biryani restaurant." aria-label="A bowl of chicken biryani" data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/biryani-bowl.DDYy8XnU.webp" alt="A bowl of chicken biryani" loading="lazy" decoding="async" width="3072" height="4080" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">Genuinely tasted like what you'd get at a biryani restaurant.</figcaption></figure></div>
<p>Other than that we also had a day of air frying some chicken breasts, making simple vegetable curries, and having yet another comedy of errors while making an egg curry. <a href="https://yashgarg.dev/">Yash</a> only <em>soft</em>-boiled the eggs which made peeling them an absolute pain, and we lost one soldier in the ensuing struggle. Then we realized the recipe we were following was written by some demon who wanted us to use 2 <em>tablespoons</em> of chilli powder. The entire thing was looking positively radioactive by the end so we decided to add a bit of heavy cream to salvage it, and we were rewarded with edible dinner.</p>
<div class="gallery" data-pswp-gallery="" style="--gallery-min-width: 250px; --gallery-gap: 1.5rem" data-astro-cid-rj65ajc3=""><figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/aloo-tamatar.Di2xlk5o.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/aloo-tamatar.Di2xlk5o.webp" data-pswp-width="3072" data-pswp-height="4080" data-pswp-caption="Simple and delicious, came out just like how Mom makes it. Quite proud." aria-label="A bowl of potato and tomato curry" data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/aloo-tamatar.Di2xlk5o.webp" alt="A bowl of potato and tomato curry" loading="lazy" decoding="async" width="3072" height="4080" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">Simple and delicious, came out just like how Mom makes it. Quite proud.</figcaption></figure><figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/gochujang-chicken-breasts.DVs92rQi.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/gochujang-chicken-breasts.DVs92rQi.webp" data-pswp-width="3072" data-pswp-height="4080" data-pswp-caption="Was tasty but gochujang by itself isn't a good marinade, needs some work." aria-label="Spiced chicken breasts cooked until golden" data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/gochujang-chicken-breasts.DVs92rQi.webp" alt="Spiced chicken breasts cooked until golden" loading="lazy" decoding="async" width="3072" height="4080" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">Was tasty but gochujang by itself isn't a good marinade, needs some work.</figcaption></figure><figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/egg-curry.BJKcevdz.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/egg-curry.BJKcevdz.webp" data-pswp-width="3072" data-pswp-height="4080" data-pswp-caption="The whole cooking process was a comedy of errors." aria-label="Boiled eggs in a bowl of creamy curry" data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/egg-curry.BJKcevdz.webp" alt="Boiled eggs in a bowl of creamy curry" loading="lazy" decoding="async" width="3072" height="4080" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">The whole cooking process was a comedy of errors.</figcaption></figure></div>]]></content:encoded>
    </item>
    <item>
      <title>Weeknotes: Week #40 (2026)</title>
      <link>https://msfjarvis.dev/weeknotes/week-40-2026/</link>
      <guid>https://msfjarvis.dev/weeknotes/week-40-2026/</guid>
      <description>Great week for my media consumption </description>
      <pubDate>Sun, 04 Oct 2026 12:42:27 GMT</pubDate>
      <content:encoded><![CDATA[<p>This week was super fun as I got the chance to meet my colleagues for the first time in weeks, played a ton more of <a href="https://controlgame.com/en">CONTROL: Resonant</a>, and watched <strong>two</strong> movies!</p>
<h1 id="social">Social</h1>
<p><a href="https://fknil.com">Fenil</a> pitched <a href="https://yashgarg.dev">Yash</a> and me on a breakfast place nearby, except we chose to go there on Tuesday. Guess the one day in the week they are closed :)</p>
<p>To celebrate Cloudflare’s 16th birthday, we had a team dinner at the Hilton hotel in Embassy GolfLinks. It was nice to chat with everyone again after nearly a month of not having an office. We were given a soft promise of the new office reopening some time in the next 5 to 10 days 🤞. I’m eagerly looking forward to getting some time in there before I leave for home at the end of the month.</p>
<p>Following up on the promise to myself <a href="https://msfjarvis.dev/weeknotes/week-38-2026/">made during the last IndieWebClub</a>, I chose to go a little early to hang out with people; I had a great time yapping with <a href="https://ankursethi.com/">Ankur</a> and a few others who shall go unnamed purely because I am terrible with names 😓</p>
<p>The discussions at IWC itself were quite spirited and engaging. Apparently we all have a lot of strong opinions on archiving! Could be fun to have another session dedicated purely towards it. I ended up using the writing time to <em>delete</em> some drafts instead of working on them, so admittedly the spirit of that exercise was a little lost on me.</p>
<h1 id="media">Media</h1>
<h2 id="writing">Writing</h2>
<p>I published a post about my <a href="https://msfjarvis.dev/posts/my-experience-at-indiafoss-2026/">IndiaFOSS 2026 experience</a> which got reposted by the CEO of FOSS United, admittedly a nice surprise :)</p>
<h2 id="reading">Reading</h2>
<p>I finished reading <a href="https://msfjarvis.dev/reading/wheel-of-the-infinite/">Wheel of the Infinite</a> and picked up <a href="https://msfjarvis.dev/reading/when-we-cease-to-understand-the-world/">When We Cease to Understand The World</a> purely because it was in my eBook collection, having no clue what the theme was. The premise was a bit of a shock, but it’s quite intriguing and rather short, so I’ll read it through.</p>
<h2 id="movies">Movies</h2>
<p>Yash and I watched two movies this week: <a href="https://www.imdb.com/title/tt31450459/">Digger</a> starring Tom Cruise and <a href="https://www.imdb.com/title/tt34206385/">Primetime</a> starring Robert Pattinson.</p>
<p>Digger was deeply weird and often hard to follow, but Tom Cruise really delivers something unique here that we haven’t seen in a long, long while from him. I could go for a re-watch of this <em>today</em> and still have as much fun as I did.</p>
<p>Primetime is significantly less <em>weird</em>, but delivers just as much on the acting front. Robert Pattinson has proved time and again that he’s a phenomenal actor and this was no different. His Chris Hansen is deeply troubled, an obvious hypocrite, and just as fucked up as someone trying to convert paedophilia into TV views would be. Aftermath had an in-depth <a href="https://aftermath.site/primetime-hansen-review-impressions">breakdown</a> of the movie that I quite enjoyed reading and resonated with me.</p>
<h2 id="games">Games</h2>
<p><a href="https://store.steampowered.com/app/3669870/CONTROL_Resonant/">CONTROL: Resonant</a> still has me fully hooked, and I’ve been making steady progress on it all week. I got through two Resonant fights; the Factory Resonant fight was extremely telegraphed and barely had anything to it, so I one-shot it with ease. The Park Resonant was much more fun, and I had to take a few shots at it before I finally got it down. On my final attempt I was so locked in that I forgot to blink and my eyes started burning to remind me of the fact. I need to take this stuff less seriously!</p>
<h1 id="personal-projects">Personal Projects</h1>
<p>Somewhat unsurprisingly, last week’s <a href="https://github.com/msfjarvis/compose-lobsters/releases/tag/v1.72.0">Claw release</a> got rejected by the <a href="https://izzyondroid.org/">IzzyOnDroid</a> repository for its new proprietary dependency on <a href="https://developer.android.com/guide/playcore">Play Core</a>, so I had to create a separate <a href="https://github.com/msfjarvis/compose-lobsters/pull/1291">FOSS-only build</a> to satisfy their requirements again. The team behind IzzyOnDroid do great work on extending the core <a href="https://f-droid.org">F-Droid</a> repository with apps that are still FOSS but might have some other properties that make them unsuitable for core. I’ve donated to them in the past and would encourage others to <a href="https://izzyondroid.org/contributing/Donating/">do the same</a>!</p>
<p>This site received some very minor tweaks; footnotes now render as <a href="https://developer.mozilla.org/en-US/docs/Web/API/Popover_API">popovers</a> on the website (like this<sup><a href="#user-content-fn-1" id="user-content-fnref-1" data-footnote-ref="true" aria-describedby="footnote-label">1</a></sup>), the dark theme for code blocks was changed, and the WebMentions server was tweaked to make it possible to provide per-host renderers so I can tweak how, say, <a href="https://bubbles.town/">bubbles.town</a> webmentions show up under my posts.</p>
<h2 id="-clank-clank-clank-">🤖 CLANK CLANK CLANK 🤖</h2>
<p>Yash and I use an app called <a href="https://spliit.app/">Spliit</a> to manage our shared transactions for the household. I discovered recently that it has an in-built JSON and CSV export, so I added support in <a href="https://git.msfjarvis.dev/msfjarvis/factual-budget">factual-budget</a> to generate a summary of unsettled transactions with proper categories.</p>
<h1 id="cooking">Cooking</h1>
<p>Being at home all week has made cooking much easier, so we’re now cooking most days.</p>
<div class="gallery" data-pswp-gallery="" style="--gallery-min-width: 250px; --gallery-gap: 1.5rem" data-astro-cid-rj65ajc3=""><figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/pasta.CeEw2OS-.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/pasta.CeEw2OS-.webp" data-pswp-width="3072" data-pswp-height="4080" data-pswp-caption="This pasta recipe wasn't great and tasted rather bland so we probably won't be revisiting this." aria-label="A bowl of creamy penne pasta" data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/pasta.CeEw2OS-.webp" alt="A bowl of creamy penne pasta" loading="lazy" decoding="async" width="3072" height="4080" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">This pasta recipe wasn't great and tasted rather bland so we probably won't be revisiting this.</figcaption></figure><figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/paneer.wNH0sxrI.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/paneer.wNH0sxrI.webp" data-pswp-width="4080" data-pswp-height="3072" data-pswp-caption="This paneer was a new recipe we tried, it was delicious and the texture of the veggies was perfect." aria-label="Spiced paneer with peppers and onions on a plate" data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/paneer.wNH0sxrI.webp" alt="Spiced paneer with peppers and onions on a plate" loading="lazy" decoding="async" width="4080" height="3072" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">This paneer was a new recipe we tried, it was delicious and the texture of the veggies was perfect.</figcaption></figure><figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/fried_rice.DBaMp1Km.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/fried_rice.DBaMp1Km.webp" data-pswp-width="3072" data-pswp-height="4080" data-pswp-caption="Made some fried rice to use up leftovers and threw parsley on it because greens make it healthy" aria-label="A bowl of fried rice topped with herbs" data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/fried_rice.DBaMp1Km.webp" alt="A bowl of fried rice topped with herbs" loading="lazy" decoding="async" width="3072" height="4080" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">Made some fried rice to use up leftovers and threw parsley on it because greens make it healthy</figcaption></figure></div>
<div class="gallery" data-pswp-gallery="" style="--gallery-min-width: 250px; --gallery-gap: 1.5rem" data-astro-cid-rj65ajc3=""><figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/paneer_2.C01lw11N.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/paneer_2.C01lw11N.webp" data-pswp-width="3072" data-pswp-height="4080" data-pswp-caption="This was a more traditional matar paneer recipe which is both delicious and rather pain-free to make." aria-label="Paneer and peas simmering in curry sauce" data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/paneer_2.C01lw11N.webp" alt="Paneer and peas simmering in curry sauce" loading="lazy" decoding="async" width="3072" height="4080" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">This was a more traditional matar paneer recipe which is both delicious and rather pain-free to make.</figcaption></figure><figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/chicken.DG0hbnW5.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/chicken.DG0hbnW5.webp" data-pswp-width="3072" data-pswp-height="4080" data-pswp-caption="Remade last week's chicken recipe again with the quantity doubled because it still slaps." aria-label="Chicken curry simmering in a pan on the stove" data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/chicken.DG0hbnW5.webp" alt="Chicken curry simmering in a pan on the stove" loading="lazy" decoding="async" width="3072" height="4080" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">Remade last week's chicken recipe again with the quantity doubled because it still slaps.</figcaption></figure></div>
<section data-footnotes="true" class="footnotes"><h2 class="sr-only" id="footnote-label">Footnotes</h2>
<ol>
<li id="user-content-fn-1">
<p>This is a popover <a href="#user-content-fnref-1" data-footnote-backref="" aria-label="Back to reference 1" class="data-footnote-backref">↩</a></p>
</li>
</ol>
</section>]]></content:encoded>
    </item>
    <item>
      <title>My experience at IndiaFOSS 2026</title>
      <link>https://msfjarvis.dev/posts/my-experience-at-indiafoss-2026/</link>
      <guid>https://msfjarvis.dev/posts/my-experience-at-indiafoss-2026/</guid>
      <description>My first IndiaFOSS ever!</description>
      <pubDate>Tue, 29 Sep 2026 07:37:00 GMT</pubDate>
      <content:encoded><![CDATA[<p>I’ve been making more of an effort this year to show up to meetups and events happening in the area so I eagerly looking forward to IndiaFOSS 2026. A lot of my friends over at the <a href="https://blr.indiewebclub.org">IndieWebClub</a> were also planning to visit so there was going to be no lack of familiar faces, and hopefully some new ones too 😄</p>
<h1 id="day-1">Day 1</h1>
<p><a href="https://fknil.com">Fenil</a>, <a href="https://yashgarg.dev">Yash</a>, and I had decided to leave together bright and early so Fenil biked down to our place and we took a cab together. We made it well in time for breakfast and the welcome keynote, after which we split up with Fenil and Yash heading to the Open Hardware devroom while I headed over to the Documentation &amp; Technical Writing devroom.</p>
<p>The quality of the talks was quite high, and while AI inevitably comes up when talking about documentation; it was refreshing to see <a href="https://www.linkedin.com/in/devgancode">Ganesh Devgan</a> from <a href="https://www.usebruno.com/">Bruno</a> reaffirm that good documentation will continue to be written for humans.</p>
<p><a href="https://vinamraharkar.in/">Vinamra Harkar</a> presented a very engaging talk about discovering the <a href="https://www.nic.gov.in/">National Informatics Center</a>’s newsletter named <a href="https://informatics.nic.in/archive">Informatics</a> that has been running since <strong>July 1992</strong>, and his journey of converting this stack of PDFs into an <a href="https://vinamraharkar.github.io/nic-archives/index.html">indexed, searchable resource</a> spanning 30+ years. I browsed through some of the older issues, and there are some fascinating stories there about the technological advances being made at country-scale to bring up India’s digital capabilities as the Internet started gaining ground. It’s almost like a portal to a time we can scarcely imagine, where computers were a rarity and not something that is now in most people’s pockets.</p>
<p>I decided to ditch the documentation devroom for a bit to roam around the booths and find some friends. After stuffing my pockets with stickers, I joined Yash and Fenil in the Open Hardware devroom right in time for <a href="https://github.com/balub">Balu Babu</a>’s talk about <a href="https://github.com/balub/minnow">Minnow</a>, a swarm robotics project he has been working on and off since college. With an overarching goal of capping the per-unit pricing of the device around the 3000 INR mark, he walked us through the tradeoffs he’s made and how the software architecture has evolved to bring this ambitious goal closer to reality.</p>
<p>Next up was <a href="https://instagram.com/tarab_instruments">Syed Ali</a> walking us through the journey of building <a href="https://fossunited.org/c/indiafoss/2026/cfp/3nr9benq94">Open Source Music Hardware in India</a>. His initial foray was modest, a desire for a cheaper alternative to a prohibitively expensive MIDI controller that he was confident was simple enough electronically to be made for cheap. We walked through his journey of discovering Open Hardware, building his first controller and eventually selling it, and then making a side hustle out of it. He shared his tier lists for vendors to buy parts from, and some more of the custom gear he had since built.</p>
<p>It was time for lunch now, where we saw <a href="https://tanvibhakta.in/">Tanvi</a> and <a href="https://ankursethi.com/">Ankur</a> and chatted for a bit. After the meal we split up again, Yash and Fenil went to the Compilers, Programming Languages &amp; Systems devroom while I headed to the AOSP devroom with <a href="https://kat.bio">Amogh</a>.</p>
<p>My main objective was to meet <a href="https://www.linkedin.com/in/pundiramit">Amit Pundir</a>, who was one of the first people to ever invite me to a conference, all the way back in 2018 and we’ve kept in touch since. The devroom had some interesting talks but most people very obviously used Claude to generate their slides, and the telltale signs of “Claudish”<sup><a href="#user-content-fn-1" id="user-content-fnref-1" data-footnote-ref="true" aria-describedby="footnote-label">1</a></sup> were rather annoying to read through. I grumbled about it on Mastodon and Amit responded saying he’ll be passing the feedback along and try to keep a higher quality gate moving forward. I’m going to try and get involved with the local FOSS United chapter, and hopefully help out with CFP review for next year’s iteration of the AOSP devroom to improve on this.</p>
<blockquote class="mastodon-post" lang="en" cite="https://fantastic.earth/@msfjarvis/117336964230291690" data-source="fediverse" data-astro-cid-hgg3ctr5=""><header class="mastodon-post__author" data-astro-cid-hgg3ctr5=""><span class="mastodon-post__name" data-astro-cid-hgg3ctr5="">Harsh Shandilya</span><span class="mastodon-post__account" data-astro-cid-hgg3ctr5="">@msfjarvis@fantastic.earth</span></header><div class="mastodon-post__content" data-astro-cid-hgg3ctr5=""><p data-astro-cid-hgg3ctr5="">After Amit's opening keynote and lightning talk, almost every session I've seen in the AOSP devroom has had blatantly Claude generated slides. Very disappointing that people continue to delegate prose to LLMs when they're knowledgeable enough about the topic at hand to do it themselves.</p><p data-astro-cid-hgg3ctr5="">#IndiaFOSS</p></div><footer class="mastodon-post__footer" data-astro-cid-hgg3ctr5=""><time datetime="2026-09-26T10:53:06.425Z" data-astro-cid-hgg3ctr5="">26 Sept 2026, 10:53</time><a href="https://fantastic.earth/@msfjarvis/117336964230291690" data-astro-cid-hgg3ctr5="">View original post <span aria-hidden="true" data-astro-cid-hgg3ctr5="">↗</span></a></footer></blockquote>
<p>That said, the talks themselves were mostly quite enjoyable and I learned a lot. Karthikeyan’s talk about porting AOSP to the <a href="https://fossunited.org/c/indiafoss/2026/cfp/d883e2uauk">Allwinner Sunxi</a> platform dove deep into the quirks of the Sunxi SoCs and how they got different components to work on these chips and finally get to AOSP. It was pretty interesting to learn how displays work under the hood, from the Android internals all the way to the kernel drivers.</p>
<p>After the devroom Amogh and I went back to sticker collection, and met a bunch of friends. Amogh’s quite popular over here! Though I imagine being at a debConf and running the FOSS Mumbai event will do that 😄</p>
<p>We reunited with Yash and Fenil to yap for a bit, after which they left for a cafe in Jayanagar with some of Fenil’s friends from the <a href="https://en.wikipedia.org/wiki/Functional_programming">FP</a>/Rust circles, and Amogh and I headed back home.</p>
<h1 id="day-2">Day 2</h1>
<p>I woke up feeling quite tired so I decided to skip most of the day 2 event, and only went for the off-track <a href="https://fossunited.org/c/indiafoss/2026communi-con">Communi-Con</a> event. We had dinner plans for that day so the timing was also going to work out for me. I had voted on the proposals on day 1, and was pleased to find most of my picks had indeed won out and got selected. There were a total of 7 lightning talks but I’ll only highlight a few here.</p>
<p>The FOSS United volunteer team that had taken on the task of having visitor Wi-Fi available for the first time in IndiaFOSS history went through their physical network architecture, and the software stack behind it. They had laid out nearly 4 kilometers of cabling across 2 floors to provide (in my experience) reliable connectivity to all attendees. It was quite impressive, and I hope the tear down was less grueling than installing all of it!</p>
<p><a href="https://nadh.in/">Kailash Nadh</a> had an incendiary talk titled “Say no to JS React garbage” about his story of constantly fighting JS framework churn working on <a href="https://listmonk.app/">listmonk</a> and eventually choosing to build his own NodeJS-free component library called <a href="https://oat.ink">Oat</a> and deleting thousands of line of JavaScript in listmonk while regaining control of his frontend stack. I have been using Oat for my personal web apps since the beginning of this year and share all his frustrations and how relieving it is to simply rely on the platform than invent abstractions on top.</p>
<p><a href="https://www.linkedin.com/in/shreekumar3d">Shree Kumar</a> presented some bold ideas on what he thinks IndiaFOSS 2027 needs to evolve into to achieve its goal of unifying FOSS in India. More devrooms, bigger venues, more student tickets were only the start of what he has in mind. Excitedly waiting to see if the new governing board members share his vision!</p>
<p>Communi-con was probably the most fun part of the event, and I hope it makes a comeback next year.</p>
<p>After the talks we did another round on the proverbial hallway track, then headed out with some of Fenil’s friends to <a href="https://www.zomato.com/bangalore/the-bloom-cafe-patisserie-jayanagar-bangalore">The Bloom</a> cafe for some coffee/food/yapping. My social battery had started to run out by then so I mostly spent that time finishing up <a href="https://msfjarvis.dev/weeknotes/week-39-2026/">my weeknote</a> that I had mercifully pre-written most of on Friday expecting to not be home to publish it.</p>
<hr>
<p>All things considered, IndiaFOSS was extremely fun if exhausting and I would like to visit more FOSS United events in the future! Also check out Fenil’s blog about <a href="https://fknil.com/blog/india-foss-2026/">his IndiaFOSS experience</a>, who decidedly had a more fun time :D</p>
<figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/sticker-haul.BuMVe7Qm.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/sticker-haul.BuMVe7Qm.webp" data-pswp-width="3944" data-pswp-height="2969" data-pswp-caption="My sticker haul!" aria-label="A spread of opensource related stickers on a mouse mat with a cyberpunk anime style female character holding up a paint can. Featured projects include F-Droid, Tangled, Wikimedia Foundation, and FOSS United." data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/sticker-haul.BuMVe7Qm.webp" alt="A spread of opensource related stickers on a mouse mat with a cyberpunk anime style female character holding up a paint can. Featured projects include F-Droid, Tangled, Wikimedia Foundation, and FOSS United." loading="lazy" decoding="async" width="3944" height="2969" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">My sticker haul!</figcaption></figure>
<section data-footnotes="true" class="footnotes"><h2 class="sr-only" id="footnote-label">Footnotes</h2>
<ol>
<li id="user-content-fn-1">
<p>Claudish is the dense, jargon-heavy register Claude and similar coding agents default to — compressed metaphors, invented compound nouns, and objects doing action verbs. <a href="#user-content-fnref-1" data-footnote-backref="" aria-label="Back to reference 1" class="data-footnote-backref">↩</a></p>
</li>
</ol>
</section>]]></content:encoded>
    </item>
    <item>
      <title>Weeknotes: Week #39 (2026)</title>
      <link>https://msfjarvis.dev/weeknotes/week-39-2026/</link>
      <guid>https://msfjarvis.dev/weeknotes/week-39-2026/</guid>
      <description>My ordeal with the Passport Office finally comes to a close, also IndiaFOSS!</description>
      <pubDate>Sun, 27 Sep 2026 12:31:00 GMT</pubDate>
      <content:encoded><![CDATA[<p>HUGE week as I finally managed to wrap up my passport issuance, and it has now shipped out. If I knew I could not count on the Bengaluru Police to do their jobs I would’ve just gone to the police station on day one instead of waiting the stipulated 3 weeks. Anyway, no point raging about that any more.</p>
<p>I’m also writing this week note on my phone because I’m out touching grass and won’t get back home in time to write this on my usual schedule.</p>
<h1 id="social">Social</h1>
<p>Like I mentioned last week, <a href="https://kat.bio">Amogh</a> is in town for IndiaFOSS so <a href="https://yashgarg.dev">Yash</a>, <a href="https://fknil.com">Fenil</a>, him, and I spent most of Saturday there. I was feeling quite tired on Sunday so I opted to stay in for the morning and joined Yash and Fenil in the afternoon for the <a href="https://fossunited.org/c/indiafoss/2026communi-con">Communi-con</a> track.</p>
<p>I’ll write a separate post about it next week, <a href="https://msfjarvis.dev/posts/rss.xml">stay tuned</a>!</p>
<h1 id="media">Media</h1>
<p><a href="https://controlgame.com/">CONTROL: Resonant</a> is finally out! Remedy made a small blunder and a day 1 patch caused Steam users to have to redownload the game even if they preloaded it the day before which was a little annoying, but goddamn they have cooked! It’s been worth the wait, and I’m glad I shelled out for the Deluxe Edition. It’s so good that even the game pirates over on Reddit have been rallying to buy the game instead of pirating it lol.</p>
<p>I’d attach a screenshot here except for the aforementioned distance from computer. The game’s photo mode will launch sometime in November so I’m tempted to pause my playthrough until the update arrives.</p>
<p>Oh, and I also finally watched KPop Demon Hunters; unsurprisingly it was very good. I had listened to all the songs before so it was a surprise when the boy band turns up and starts singing the songs that I had only heard the female renditions of so far.</p>
<h1 id="personal-projects">Personal projects</h1>
<p>I don’t have any big ticket items left to implement in <a href="https://github.com/msfjarvis/compose-lobsters">Claw</a>, so I’ve mostly been focusing on minor quality of life changes for my own needs as a developer. Google Play users now get an in-app UI affordance that an update is available and up to 7 days of leeway before they’re forced to upgrade. <a href="https://developer.android.com/develop/background-work/background-tasks/persistent/getting-started">WorkManager</a> execution metrics are now <a href="https://github.com/msfjarvis/compose-lobsters/commit/1340a311f202f643bf57c3f6ec6dcd21d2013977">reported to Sentry</a>, which I wrote about <a href="https://msfjarvis.dev/posts/tracking-execution-events-for-your-workmanager-workers/">on the blog</a>.</p>
<h2 id="meta">Meta</h2>
<p><a href="https://msfjarvis.dev/weeknotes/week-38-2026">Last week</a>’s promise has been kept, and the first entry in my game screenshots collection is ready to be perceived! The game is called <a href="https://msfjarvis.dev/games/holotrials/">HoloTrials: Case Covered</a>, it’s a short visual novel style game involving a detective protagonist fighting a case in her high school to defend her close friend who’s being framed. You can find it on <a href="https://store.steampowered.com/app/4252960/HoloTrials_Case_Covered/">Steam</a>.</p>
<h2 id="clank-clank-clank-">🤖CLANK CLANK CLANK 🤖</h2>
<p>I’ve been burning tokens left and right on objectively pointless stuff, with the new OpenAI models being as cheap as they are. I recently discovered that <a href="https://github.com/NixOS/nixpkgs">Nixpkgs</a> archives support being compressed as <code>.tar.zst</code> files instead of just <code>.tar.gz</code> and they come down to 20% smaller. I tried naively hosting a static archive but that doesn’t work for reproducibility. I later found that there’s a proper <a href="https://nix.dev/manual/nix/2.25/protocols/tarball-fetcher">specification</a> explaining how to do it correctly. I went back to the stack of Matt Pocock’s skills which I have come to like a lot, and managed to quickly implement a <a href="https://git.msfjarvis.dev/msfjarvis/acceptable-vibes/src/branch/main/nix-channels-worker">Cloudflare Worker</a> that stores tarballs in R2 and correctly implements the Lockable HTTP Tarball protocol.</p>
<h1 id="cooking">Cooking</h1>
<p>We cooked a few times this week but a bunch of our days ended up with us dining outside.</p>
<div class="gallery" data-pswp-gallery="" style="--gallery-min-width: 250px; --gallery-gap: 1.5rem" data-astro-cid-rj65ajc3=""><figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/quinoa-salad.CsVdGGdl.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/quinoa-salad.CsVdGGdl.webp" data-pswp-width="3072" data-pswp-height="4080" data-pswp-caption="Quinoa is annoying to cook but the salads come out so good. " aria-label="A stainless-steel bowl filled with a quinoa and chickpea salad mixed with chopped cucumber, tomato, red onion, corn, and herbs." data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/quinoa-salad.CsVdGGdl.webp" alt="A stainless-steel bowl filled with a quinoa and chickpea salad mixed with chopped cucumber, tomato, red onion, corn, and herbs." loading="lazy" decoding="async" width="3072" height="4080" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">Quinoa is annoying to cook but the salads come out so good. </figcaption></figure><figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/chicken-curry.aHvweYPO.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/chicken-curry.aHvweYPO.webp" data-pswp-width="3072" data-pswp-height="4080" data-pswp-caption="This chicken was so good, I regret only making single servings. " aria-label="A stainless-steel plate holding several folded rotis, a bowl of orange-brown chicken curry, and a dollop of green chutney." data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/chicken-curry.aHvweYPO.webp" alt="A stainless-steel plate holding several folded rotis, a bowl of orange-brown chicken curry, and a dollop of green chutney." loading="lazy" decoding="async" width="3072" height="4080" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">This chicken was so good, I regret only making single servings. </figcaption></figure></div>]]></content:encoded>
    </item>
    <item>
      <title>Tracking execution events for your WorkManager Workers</title>
      <link>https://msfjarvis.dev/posts/tracking-execution-events-for-your-workmanager-workers/</link>
      <guid>https://msfjarvis.dev/posts/tracking-execution-events-for-your-workmanager-workers/</guid>
      <description>WorkManager 2.12.0 introduces brand new APIs for deep introspection of Worker executions</description>
      <pubDate>Fri, 25 Sep 2026 11:05:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><a href="https://developer.android.com/develop/background-work/background-tasks/persistent/getting-started">WorkManager</a> is Android Jetpack’s first party solution to long-running background work. It takes care of dealing with the idiosyncrasies and differences between Android versions, and gives you a very simple API that lets you focus on <em>what</em> needs to happen instead of the <em>how</em>. It’s very well designed, and as someone who’s had to deal with <a href="https://developer.android.com/reference/android/app/job/JobScheduler">JobScheduler</a> and <a href="https://developer.android.com/reference/android/app/AlarmManager">AlarmManager</a> years ago for this class of problems, it’s a boon.</p>
<p>That said, debugging WorkManager is somewhat cumbersome (<a href="https://developer.android.com/develop/background-work/background-tasks/testing/persistent/debug">ref</a>). This also had the limitation that it only lets you debug issues on your own device, and collecting metrics from the field required instrumenting each worker manually to report back metrics which just doesn’t scale all that well.</p>
<p>Enter: <code>ExecutionEventListener</code>. This is a brand new API that was introduced in <a href="https://developer.android.com/jetpack/androidx/releases/work#2.12.0">WorkManager 2.12.0</a>. The WorkManager team has also introduced a new <code>work-analytics</code> library on top of this low-level API to retrieve historical execution data, but we’ll focus on <code>ExecutionEventListener</code>. It is still experimental, so you’ll need to mark your code with <code>@ExperimentalEventsApi</code>.</p>
<p>As of writing, the API looks like this:</p>
<pre><code class="language-kotlin">@ExperimentalEventsApi
public interface ExecutionEventListener {
    public suspend fun onStarted(workInfo: WorkInfo)


    public suspend fun onStopped(@StopReason stopReason: Int, workInfo: WorkInfo)


    public suspend fun onFinished(result: Result, workInfo: WorkInfo)


    public suspend fun onException(throwable: Throwable, workInfo: WorkInfo)
}</code></pre>
<p>You start by creating a subclass of this interface, then pass it to your WorkManager <code>Configuration.Builder</code> like so:</p>
<pre><code class="language-kotlin">WorkManager.initialize(
  application,
  Configuration.Builder()
    .setWorkerFactory(workerFactory)
    .setExecutionEventListener(WorkManagerExecutionTelemetry())
    .setMinimumLoggingLevel(Log.DEBUG)
    .build(),
)</code></pre>
<p>I wired this up in my app <a href="https://github.com/msfjarvis/compose-lobsters">Claw</a> to emit events to Sentry, and can now visualize them via a dashboard to see data like failure rates and p50/p95 of execution duration. Here’s the relatively minimal dashboard I set up which has collected a couple of days of data through my internal testing channel.</p>
<figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/workmanager-metrics-dashboard.CoCHvOPE.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/workmanager-metrics-dashboard.CoCHvOPE.webp" data-pswp-width="2437" data-pswp-height="832" data-pswp-caption="Love me some graphs" aria-label="A set of line graphs showing execution outcomes grouped by started/success, a worker failure graph showing 0% for all workers and a Runtime tail graph plotting p50/p95 latency for worker execution." data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/workmanager-metrics-dashboard.CoCHvOPE.webp" alt="A set of line graphs showing execution outcomes grouped by started/success, a worker failure graph showing 0% for all workers and a Runtime tail graph plotting p50/p95 latency for worker execution." loading="lazy" decoding="async" width="2437" height="832" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">Love me some graphs</figcaption></figure>
<p>Naturally with this still being a new API, there are some quirks to it. The major one is that while you get a <code>ListenableWorker.Result</code> instance in the method parameters, all three subtypes (<code>Success</code>, <code>Failure</code>, and <code>Retry</code>) are marked with <code>@RestrictTo(RestrictTo.LIBRARY_GROUP)</code> which means Lint flags any attempt to use them for determining what the result actually is. I’ve filed <a href="https://issuetracker.google.com/issues/565504491">an issue</a> to provide a solution for this. In the meantime, you can simply suppress the Lint like I do. Another problem is the lack of support for <code>@IntDef</code> and friends in Kotlin, which means the <code>stopReason</code> parameter arrives as a plain Int. When publishing this as a metric, you’ll have to check its values against the <code>WorkInfo.STOP_REASON_*</code> constants yourself and map it to a string.</p>
<p>You can find my implementation <a href="https://github.com/msfjarvis/compose-lobsters/commit/1340a311f202f643bf57c3f6ec6dcd21d2013977">here</a> which deals with both these paper cuts.</p>
<p>Thanks for reading!</p>]]></content:encoded>
    </item>
    <item>
      <title>Weeknotes: Week #38 (2026)</title>
      <link>https://msfjarvis.dev/weeknotes/week-38-2026/</link>
      <guid>https://msfjarvis.dev/weeknotes/week-38-2026/</guid>
      <description>Another lazy week with an exciting end to it</description>
      <pubDate>Sun, 20 Sep 2026 12:55:07 GMT</pubDate>
      <content:encoded><![CDATA[<p>A very slow week, all things considered, with all the excitement concentrated towards the tail end. I wish I could say the same for next week, which is bound to be exciting throughout: new office, <a href="https://kat.bio/">Amogh</a> coming over, <a href="https://controlgame.com">CONTROL: Resonant</a> releasing, and <a href="https://fossunited.org/indiafoss/2026">IndiaFOSS 2026</a>!</p>
<h1 id="social">Social</h1>
<figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/resident-evil.CHkrtMdx.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/resident-evil.CHkrtMdx.webp" data-pswp-width="4080" data-pswp-height="3072" data-pswp-caption="🙌 ABSOLUTE CINEMA 🙌" aria-label="Resident Evil title over a snowy scene" data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/resident-evil.CHkrtMdx.webp" alt="Resident Evil title over a snowy scene" loading="lazy" decoding="async" width="4080" height="3072" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">🙌 ABSOLUTE CINEMA 🙌</figcaption></figure>
<p><a href="https://yashgarg.dev/">Yash</a> made an impromptu plan for him, Mayank, and me to watch <a href="https://www.imdb.com/title/tt35538033">Resident Evil</a> on Friday morning, and it was an absolute riot. The first half had a handful of excellent jump scares that made all of us actually yelp out in terror. Mayank was so jumpy that he kept startling me even when the actual jump scare didn’t get me. Like I said, absolute riot. I’m off to rewatch it with my friend <a href="https://www.devanshbajaj.dev/">Devansh</a> tonight. He recently moved to Bengaluru, and I expect it to be just as fun this time around. I get why #PreggersForCregger was doing the rounds on social media 🙈</p>
<figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/empty-theatre.BkcheXJU.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/empty-theatre.BkcheXJU.webp" data-pswp-width="4080" data-pswp-height="3072" data-pswp-caption="First time we've been early enough to catch an empty theatre" aria-label="Empty IMAX theater with rows of blue seats" data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/empty-theatre.BkcheXJU.webp" alt="Empty IMAX theater with rows of blue seats" loading="lazy" decoding="async" width="4080" height="3072" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">First time we've been early enough to catch an empty theatre</figcaption></figure>
<figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/fuckass-flashbang-warning.ThKlBtak.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/fuckass-flashbang-warning.ThKlBtak.webp" data-pswp-width="4080" data-pswp-height="3072" data-pswp-caption="This bright motherfucker in a dark scene was so distracting" aria-label="Movie screen showing a warning against smoking and alcohol" data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/fuckass-flashbang-warning.ThKlBtak.webp" alt="Movie screen showing a warning against smoking and alcohol" loading="lazy" decoding="async" width="4080" height="3072" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">This bright motherfucker in a dark scene was so distracting</figcaption></figure>
<p>It was Mayank’s birthday on Thursday so we had a night out of definitely non-alcoholic beverages and mediocre bar food. I had a great time hanging out with him and his college friends.</p>
<p><a href="https://blr.indiewebclub.org/">IndieWebClub</a> was on this week, and I mostly used the time to work on the game photography section of my site and help out people who came looking for hosting advice. I’ve made a bad habit of bolting out of the underline center the millisecond after the meetup, which I’d like to change next time. I make the excuse to myself that everyone’s headed for coffee which I don’t drink in the evenings, but it’s just that, an excuse.</p>
<h1 id="games">Games</h1>
<p>I finished off <a href="https://store.steampowered.com/app/4252960/HoloTrials_Case_Covered/">HoloTrials: Case Covered</a> this week with a little cheating from a Steam Community post. I got stuck on the very final sequence where I had the right clue but kept presenting it against the wrong line of the testimony. Either way, the game has beautiful art and pretty decent gameplay for what’s ultimately a visual novel. Hopefully, I’ll be able to showcase it on the site soon.</p>
<h1 id="work">Work</h1>
<p>Work started off quite hectic since I went from a day off on Monday immediately into three hours of meetings on Tuesday, but things are still fairly quiet overall. I put out a release for our SDKs that had been delayed over the past couple of weeks, and things didn’t explode <em>too</em> much. I did have one morning where I couldn’t get into my work laptop because my YubiKey suddenly stopped accepting my PIN, but it turns out that was because I dared to think while typing instead of doing it mindlessly.</p>
<blockquote class="mastodon-post" lang="en" cite="https://fantastic.earth/@msfjarvis/117284587802078178" data-source="fediverse" data-astro-cid-hgg3ctr5=""><header class="mastodon-post__author" data-astro-cid-hgg3ctr5=""><span class="mastodon-post__name" data-astro-cid-hgg3ctr5="">Harsh Shandilya</span><span class="mastodon-post__account" data-astro-cid-hgg3ctr5="">@msfjarvis@fantastic.earth</span></header><div class="mastodon-post__content" data-astro-cid-hgg3ctr5=""><p data-astro-cid-hgg3ctr5="">New facts have come to light in this investigation and the updated hypothesis now states that I am the world's greatest idiot.</p><p data-astro-cid-hgg3ctr5="">Turns out I have been typing in my PIN via muscle memory instead of actual memorization for the past 18 months, and the actual PIN is one digit off than what I had intended/remembered. When I consciously think about it I get the PIN wrong, when I remove my brain from the equation I get it right.</p><p data-astro-cid-hgg3ctr5="">The human brain is a beautiful enigma.</p></div><footer class="mastodon-post__footer" data-astro-cid-hgg3ctr5=""><time datetime="2026-09-17T04:53:05.553Z" data-astro-cid-hgg3ctr5="">17 Sept 2026, 04:53</time><a href="https://fantastic.earth/@msfjarvis/117284587802078178" data-astro-cid-hgg3ctr5="">View original post <span aria-hidden="true" data-astro-cid-hgg3ctr5="">↗</span></a></footer></blockquote>
<h1 id="personal-projects">Personal projects</h1>
<p>I made a <a href="https://github.com/msfjarvis/compose-lobsters/releases/tag/v1.71.0">big release</a> of Claw with some important fixes for the comments UX, and workarounds for dealing with Lobsters now being fronted by Anubis. It also includes a brand-new feature: a daily random saved post as a notification. I’ve found this to be quite nice since it gives me something interesting to read every morning as I’m waking up, and I can always drop it into my browser and have it read aloud podcast style. I have collected over 1,800 saved posts over the years and definitely haven’t read a majority of them, so it also helps me get through that backlog in a drip-fed manner. I opted to not add a “sent posts” log but the data layer does capture this information, so the option is always there. Let me know if you think that’d be useful to have!</p>
<h2 id="-clank-clank-clank-">🤖 CLANK CLANK CLANK 🤖</h2>
<p>I posted about the <a href="https://msfjarvis.dev/posts/brief-experience-report-on-the-deepseek-v4-flash-model/">DeepSeek v4 model</a> that I have been trying out this week via <a href="https://openrouter.ai/">OpenRouter</a>, and it has been quite impressive so far (slightly more detailed opinions in the post). I finished off <a href="https://git.msfjarvis.dev/msfjarvis/factual-budget">factual-budget</a> with its help. I also kicked off work on <a href="https://git.msfjarvis.dev/msfjarvis/factual-budget-android">factual-budget-android</a> which will capture SMSes and submit transactions automatically instead of reconciling at the end of the month. Not quite ready yet, but making good progress :)</p>
<p>I also added support for fetching remote <code>.ics</code> files to <a href="https://git.msfjarvis.dev/msfjarvis/wearos-calendar-sync">wearos-calendar-sync</a> because I was tired of manually importing IndieWebClub BLR’s events to my calendar. This now lets me provide a link to <a href="https://blr.indiewebclub.org/events.ics">their ICS file</a>, and the app will take care of refreshing this every week and automatically feeding the events to my watch. It’s an almost unnecessary feature that I would never have bothered with pre-clankers, but it was quite easy to make once I fully articulated its product and engineering aspects.</p>
<h1 id="meta">Meta</h1>
<p>This site got a major build speed improvement this week as I fixed an inefficiency in how I render Mastodon posts. Previously each Mastodon post would get fetched at build time, coming in at around 6 seconds per post and with the 3 embeds I have so far, making the weeknotes category take 19 seconds to render uncached. I’ve <a href="https://github.com/msfjarvis/msfjarvis.dev/commit/1e9f82551d38ce1cf366a51cea1637976dca00df">now changed</a> this to use a static data store instead which is updated manually by a script that scans the site contents for Mastodon URLs and snapshots them. This adds a bit of manual work for me but in exchange for shaving 18 seconds out of a build that used to take around 25 seconds, I can accept the trade off.</p>
<p>As I mentioned <a href="https://msfjarvis.dev/weeknotes/week-37-2026/#games">last week</a>, I’ve been inspired to add a video game photography section to my website, and the work on it is <em>almost</em> done. I’ll hopefully have it up and running soon, but I don’t know if I’ll have time next week given how much is going on.</p>
<h1 id="cooking">Cooking</h1>
<p>There was very little cooking, as we were lazy/busy for most of this week. We just made the stuff we’d discovered recently since it was quick and easy.</p>
<div class="gallery" data-pswp-gallery="" style="--gallery-min-width: 250px; --gallery-gap: 1.5rem" data-astro-cid-rj65ajc3=""><figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/chana-paneer.DBkkm4Gf.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/chana-paneer.DBkkm4Gf.webp" data-pswp-width="3072" data-pswp-height="4080" data-pswp-caption="Made it properly this time round, still think ours was better" aria-label="Bowl of creamy chickpea and paneer curry" data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/chana-paneer.DBkkm4Gf.webp" alt="Bowl of creamy chickpea and paneer curry" loading="lazy" decoding="async" width="3072" height="4080" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">Made it properly this time round, still think ours was better</figcaption></figure><figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/jolof-rice.DT4EHfFZ.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/jolof-rice.DT4EHfFZ.webp" data-pswp-width="3072" data-pswp-height="4080" data-pswp-caption="This nice and easy one pot jolof rice recipe has been so great" aria-label="Plate of spiced rice with meat" data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/jolof-rice.DT4EHfFZ.webp" alt="Plate of spiced rice with meat" loading="lazy" decoding="async" width="3072" height="4080" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">This nice and easy one pot jolof rice recipe has been so great</figcaption></figure></div>]]></content:encoded>
    </item>
    <item>
      <title>Brief experience report on the DeepSeek v4 Flash model</title>
      <link>https://msfjarvis.dev/posts/brief-experience-report-on-the-deepseek-v4-flash-model/</link>
      <guid>https://msfjarvis.dev/posts/brief-experience-report-on-the-deepseek-v4-flash-model/</guid>
      <description>I tried replacing my use of OpenAI Codex with DeepSeek, and here's how it went.</description>
      <pubDate>Thu, 17 Sep 2026 06:49:00 GMT</pubDate>
      <content:encoded><![CDATA[<div class="markdown-alert markdown-alert-note" dir="auto">
<p class="markdown-alert-title" dir="auto"><svg class="octicon" viewBox="0 0 16 16" width="16" height="16" aria-hidden="true"><path d="M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"></path></svg>NOTE</p>
<p>This is not going to be exhaustive, I didn’t compare them against exactly identical tasks, and this blog post is effectively me turning a somewhat wordy journal entry into a short blog post. Take it with an appropriate amount of salt as per your dietary needs.</p>
</div>
<p>I’ve recently been testing out the famous <a href="https://github.com/mattpocock/skills">Matt Pocock skills</a> package to rebuild a <a href="https://git.msfjarvis.dev/msfjarvis/actual-budget-backfiller">slop tool</a> that had achieved slop singularity and become such a mess not even the clankers could figure it out any more. I’ll probably write a separate thing about that process (early hint: I get why it has 260K stars) but this post is mostly about the swap from Codex to DeepSeek. For access to DeepSeek models, I signed up for <a href="https://openrouter.ai">OpenRouter</a> and paid them $10 for an initial top-up of credits.</p>
<p>I had already built around 70-80% of <a href="https://git.msfjarvis.dev/msfjarvis/factual-budget/">factual-budget</a> with Codex (last pre-DeepSeek commit <a href="https://git.msfjarvis.dev/msfjarvis/factual-budget/src/commit/3a7ed81dd749a22354df4e74635c5e138133fd50">is this</a>), and swapped to DeepSeek to implement the final feature of writing out transactions to Actual Budget. I haven’t figured out how to share the session transcript in Pi’s nice HTML format yet, but 🔜™️</p>
<p>Here are my main takeaways so far</p>
<ul>
<li>DeepSeek models are <strong>thinkers</strong>. I initially <a href="https://git.msfjarvis.dev/msfjarvis/my-pi/commit/b9d27124e255a463a92a521a5fb5a4004a2c3cf1">set up DeepSeek</a> with the <code>high</code> reasoning effort I use with other models but the reasoning going on for aeons started ticking me off and I <a href="https://git.msfjarvis.dev/msfjarvis/my-pi/commit/50e5e57ad3b6d5f34b9db83cd2f3d3f0e84f9743">switched reasoning to <code>off</code></a>. This might not <em>exactly</em> hold true, but since OpenAI redacts thinking traces for Codex users, I might just be overly sensitive to the LLM reasoning word vomit.</li>
<li>They seem extremely averse to tool calls. Maybe it’s something with Pi or my specific setup? The LLM consistently chooses to invoke <code>cat</code>, <code>sed</code>, and <code>find</code> when my system prompt includes specific guidance to use the harness-provided tools instead of shelling out. OpenAI’s and Anthropic’s models do not exhibit this problem in my experience, and Kimi seems to share this drawback with DeepSeek.</li>
<li>The inference speeds were comparable to OpenAI at the start of the session, but were much more unstable as the session reached around the 150K token mark. I think that is an OpenRouter-specific problem because it can send every request to a different provider and cause prompt cache misses. I was able to extract a per-provider split for my current measly $1.75 spend and that backs the theory.</li>
</ul>
<figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/openrouter-provider-breakdown.BZnwLZ3o.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/openrouter-provider-breakdown.BZnwLZ3o.webp" data-pswp-width="2238" data-pswp-height="598" data-pswp-caption="OpenRouter takes its 'routing' bit quite seriously" aria-label="Per-provider breakdown for my $1.75 USD of OpenRouter spend, showing it was spread out over 7 providers in an uneven spread" data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/openrouter-provider-breakdown.BZnwLZ3o.webp" alt="Per-provider breakdown for my $1.75 USD of OpenRouter spend, showing it was spread out over 7 providers in an uneven spread" loading="lazy" decoding="async" width="2238" height="598" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">OpenRouter takes its 'routing' bit quite seriously</figcaption></figure>
<ul>
<li>The token pricing is simply unreal. I used OpenRouter’s <a href="https://openrouter.ai/labs/simulate-price">simulation feature</a> to compare my DeepSeek cost with what it would be on other frontier models and the difference is stark. For <em>very</em> comparable code quality it is a no-brainer to prefer DeepSeek over everything else.</li>
</ul>
<figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/deepseek-cost-comparison.BBI9hIbL.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/deepseek-cost-comparison.BBI9hIbL.webp" data-pswp-width="1898" data-pswp-height="614" data-pswp-caption="DeepSeek's claim to fame was how many orders of magnitude cheaper it is, but it's quality is definitely competitive." aria-label="Price comparison between DeepSeek v4 Flash and other leading frontier models, showing DeepSeek costing $1.16 for my usage which maps to $6.80 on Gemini Flash, $11.28 for Kimi K3, $13.66 for Claude Sonnet 5, $16.07 for GPT 5.6 Sol, and $25.39 for Claude Opus 5." data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/deepseek-cost-comparison.BBI9hIbL.webp" alt="Price comparison between DeepSeek v4 Flash and other leading frontier models, showing DeepSeek costing $1.16 for my usage which maps to $6.80 on Gemini Flash, $11.28 for Kimi K3, $13.66 for Claude Sonnet 5, $16.07 for GPT 5.6 Sol, and $25.39 for Claude Opus 5." loading="lazy" decoding="async" width="1898" height="614" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">DeepSeek's claim to fame was how many orders of magnitude cheaper it is, but it's quality is definitely competitive.</figcaption></figure>
<hr>
<p>All things considered I’m quite impressed with the DeepSeek models, and I can see why OpenAI and Anthropic seem to have found common ground <a href="https://www.axios.com/2026/07/22/openai-anthropic-open-models-trump-china">against open weight models from China</a> when they’re so close in capabilities. So far it doesn’t seem any such regulation is coming, and I hope for other countries to also step up and start competing in the open weight division instead of buying into the Anthropic and OpenAI silos.</p>]]></content:encoded>
    </item>
    <item>
      <title>Weeknotes: Week #37 (2026)</title>
      <link>https://msfjarvis.dev/weeknotes/week-37-2026/</link>
      <guid>https://msfjarvis.dev/weeknotes/week-37-2026/</guid>
      <description>Big cooking week, and a small return to programming things the 'old' way</description>
      <pubDate>Sun, 13 Sep 2026 13:29:27 GMT</pubDate>
      <content:encoded><![CDATA[<p>This week was a bit all over the place with work being a little weird, and me spending most of my free time working on <a href="https://github.com/msfjarvis/compose-lobsters">Claw</a>. Lots of cooking though!</p>
<h2 id="personal">Personal</h2>
<p>Not a <em>lot</em> of socializing this week, since I mostly worked from home and opted to be a homebody. In total, I spent around 2 hours talking to my parents over voice and video calls which is a big change for me. It was rather pleasant! Though I will admit, learning that they’re planning a trip to Bhubaneswar via orders to book their flights was a little annoying.</p>
<p>On Thursday night we picked up a package from one friend for another and chatted a bit, was nice to catch up.</p>
<p>I needed to buy a new pair of shoes so <a href="https://yashgarg.dev">Yash</a> and I did that together on Sunday afternoon to get some time under the sun. 1 PM was a little hot for this but the walk was enjoyable. The Skechers store here in Indirangar didn’t have the best collection, but I was able to find something acceptable.</p>
<h2 id="work">Work</h2>
<p>Things at work have been rather quiet as everyone is in the middle of long duration projects and the day-to-day has slowed down quite a lot. The next Monday being a holiday will be nice, given I have 3 straight hours of meetings on Tuesday, starting at <strong>8:30 AM</strong>. I suppose this is my pre-training for an eventual managerial position, which is not serving its intended purpose as far as I am concerned.</p>
<h2 id="movies">Movies</h2>
<p>With most lunchtimes being at home, the second monitor had some movies going. I watched <a href="https://www.imdb.com/title/tt32430579/">Crime 101</a> which was decent enough but rather formulaic. <a href="https://www.imdb.com/title/tt1745960/">Top Gun: Maverick</a> was up next and once again it’s just Tom Cruise being excellently Tom Cruise. Great movie, good character development, and may Cruise never die but preferably stop being a Scientologist.</p>
<h2 id="games">Games</h2>
<p>A lot of gaming this week, primarily in <a href="https://store.steampowered.com/app/3848900/Sucker_for_Love_Crush_Landing/">Sucker For Love: Crush Landing</a> and <a href="https://store.steampowered.com/app/4252960/HoloTrials_Case_Covered/">HoloTrials: Case Covered</a>. Both games are visual novels, and feature some <em>gorgeous</em> art. The HoloTrials art inspired me so much I am now finally setting up the in-game photography collection on my website so I can share it. It’s technically already live, but it needs a lot more work before I can start sharing it. Next week!</p>
<h2 id="personal-projects">Personal projects</h2>
<p>Inspired by the blog roll replay feature we now have on the <a href="https://indieweb.social/@blr">IWCB Mastodon Bot</a> I wanted to implement something similar for Claw, given I am currently sitting on around 1700+ bookmarked posts. I chose to forego LLMs for this and spent a few nights and mornings to implement it (pull request <a href="https://github.com/msfjarvis/compose-lobsters/pull/1264">here</a>). It was fun to iterate on this over a few days since the notifications were scheduled to be once-a-day. I realized that because I’ve written and reviewed so much LLM authored code in my work project, I’ve kind of started writing new code in a similar style. Initially I was a little distraught, but thinking about it, it’s just an uglier version of the “functional core, imperative shell” paradigm that I already liked before LLMs became any good. Extracting a small bit of pure logic out of a class with complex dependencies and testing it in isolation was something I had been taught way before I had had the misfortune of hearing of OpenAI. Despair conquered 🙃</p>
<h3 id="-clank-clank-clank-">🤖 CLANK CLANK CLANK 🤖</h3>
<p>A few weeks ago I had clanked together a <a href="https://git.msfjarvis.dev/msfjarvis/actual-budget-backfiller">CLI tool</a> to reconcile my Actual Budget account and my credit card statement. I kept tacking on small improvements as I needed them but since this is fully slop coded, the cracks have started to show, and I’m now looking at 8K lines of rubbish. I <em>could</em> rewrite this by hand, but for something I’ll use once a month at most, I chose to try a different approach to clanking to see if it yields any better results. I’ve seen people speak highly of <a href="https://github.com/mattpocock/skills">Matt Pocock’s skills</a> and decided to use them to fully restart this project from scratch. In 3 sessions it has so far fully reconstructed every feature short of actually writing transactions to Actual Budget, and done so with a properly managed issue tracker. All decisions have justifications and a record on <a href="https://linear.app">Linear</a>, and everything is as I wanted it to be. I’ll see if I want to write about this separately, but I’m pretty impressed so far. For all intents and purposes this is still slop, but it’s <strong>significantly</strong> more readable and looks like something I could dive into myself if needed.</p>
<h2 id="cooking">Cooking</h2>
<p>Lots of home cooking this week given both <a href="https://yashgarg.dev/weekly-notes-37-2026/">Yash</a> and I were feeling a little health conscious. Not pictured below: a spicy shahi paneer and a veggie-laden pulav.</p>
<div class="gallery" data-pswp-gallery="" style="--gallery-min-width: 250px; --gallery-gap: 1.5rem" data-astro-cid-rj65ajc3=""><figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/air-fryer-chicken-breasts.B_67VsR8.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/air-fryer-chicken-breasts.B_67VsR8.webp" data-pswp-width="3072" data-pswp-height="4080" data-pswp-caption="We ate these straight out of the air fryer like goblins. 10/10" aria-label="Seasoned chicken breasts in an air fryer" data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/air-fryer-chicken-breasts.B_67VsR8.webp" alt="Seasoned chicken breasts in an air fryer" loading="lazy" decoding="async" width="3072" height="4080" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">We ate these straight out of the air fryer like goblins. 10/10</figcaption></figure><figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/chicken-and-veggie-salad.DI6_k9LA.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/chicken-and-veggie-salad.DI6_k9LA.webp" data-pswp-width="3072" data-pswp-height="4080" data-pswp-caption="Salads are probably my favorite dinner. Get a veggie chopper!" aria-label="Vegetable salad topped with grilled chicken" data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/chicken-and-veggie-salad.DI6_k9LA.webp" alt="Vegetable salad topped with grilled chicken" loading="lazy" decoding="async" width="3072" height="4080" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">Salads are probably my favorite dinner. Get a veggie chopper!</figcaption></figure><figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/foxtail-millet-and-chickpea-salad.CM1NNff3.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/foxtail-millet-and-chickpea-salad.CM1NNff3.webp" data-pswp-width="3072" data-pswp-height="4080" data-pswp-caption="A little too much hassle personally, need a different recipe" aria-label="Foxtail millet and chickpea salad with vegetables" data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/foxtail-millet-and-chickpea-salad.CM1NNff3.webp" alt="Foxtail millet and chickpea salad with vegetables" loading="lazy" decoding="async" width="3072" height="4080" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">A little too much hassle personally, need a different recipe</figcaption></figure></div>]]></content:encoded>
    </item>
    <item>
      <title>Weeknotes: Week #36 (2026)</title>
      <link>https://msfjarvis.dev/weeknotes/week-36-2026/</link>
      <guid>https://msfjarvis.dev/weeknotes/week-36-2026/</guid>
      <description>So much happened!</description>
      <pubDate>Sun, 06 Sep 2026 06:31:18 GMT</pubDate>
      <content:encoded><![CDATA[<p>This week was probably the most social I’ve been in months, it was nice to get out and do things. I also got to spend a bunch of time playing games which was a nice change.</p>
<h1 id="social">Social</h1>
<p>On Monday I messaged <a href="https://www.rohanarthur.com/">Rohan Arthur</a> to meet up, and we ended up having lunch at <a href="https://kobe-sizzlers.in/">Kobe Sizzlers</a> and some dessert at Milano’s.</p>
<p>As mentioned last week we had early morning tickets for Odyssey for Tuesday, so <a href="https://yashgarg.dev">Yash</a>, <a href="https://github.com/swapnilmadavi">Swapnil</a>, and I met up at Nexus Koramangala. The movie was absolutely fucking incredible, my only complaint is that the movie could’ve used a little more Charlize Theron 😜</p>
<figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/odyssey_horsey.CWI2dIhN.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/odyssey_horsey.CWI2dIhN.webp" data-pswp-width="3510" data-pswp-height="1974" data-pswp-caption="Such a cute horsey that will not be part of any nefarious and barbaric activities whatsoever" aria-label="A cinema screen showing people beside a fallen over wooden horse on a beach" data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/odyssey_horsey.CWI2dIhN.webp" alt="A cinema screen showing people beside a fallen over wooden horse on a beach" loading="lazy" decoding="async" width="3510" height="1974" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">Such a cute horsey that will not be part of any nefarious and barbaric activities whatsoever</figcaption></figure>
<p>On our way out we spotted the recently opened LEGO store so we just had to take a peek. My wallet turned to dust looking at some of the price tags but there <em>was</em> some stuff I might be tempted to make a return journey for…</p>
<div class="gallery" data-pswp-gallery="" style="--gallery-min-width: 250px; --gallery-gap: 1.5rem" data-astro-cid-rj65ajc3=""><figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/lego_dino_onesie.BKCo3d4p.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/lego_dino_onesie.BKCo3d4p.webp" data-pswp-width="3072" data-pswp-height="4080" data-pswp-caption="I cannot imagine how much time and effort this display took, just insane" aria-label="A large red LEGO character with chiseled abs holding a small dinosaur egg" data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/lego_dino_onesie.BKCo3d4p.webp" alt="A large red LEGO character with chiseled abs holding a small dinosaur egg" loading="lazy" decoding="async" width="3072" height="4080" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">I cannot imagine how much time and effort this display took, just insane</figcaption></figure><figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/lego_spiderman.CCHecEv8.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/lego_spiderman.CCHecEv8.webp" data-pswp-width="3072" data-pswp-height="4080" data-pswp-caption="The Spider Man case had some cute stuff, I was almost tempted" aria-label="A LEGO Spider-Man figure displayed among other models" data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/lego_spiderman.CCHecEv8.webp" alt="A LEGO Spider-Man figure displayed among other models" loading="lazy" decoding="async" width="3072" height="4080" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">The Spider Man case had some cute stuff, I was almost tempted</figcaption></figure></div>
<p>After the movie we went to a popular chhole bhature joint close by that was on Swapnil’s radar, and it did not disappoint.</p>
<figure data-image-modal-root="" class="half" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/chhole_bhature.BCA8c7F9.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/chhole_bhature.BCA8c7F9.webp" data-pswp-width="4080" data-pswp-height="3072" data-pswp-caption="Simple and delicious, just the way it's meant to be" aria-label="Puffed bhature served with chickpea curry and sliced onions" data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/chhole_bhature.BCA8c7F9.webp" alt="Puffed bhature served with chickpea curry and sliced onions" loading="lazy" decoding="async" width="4080" height="3072" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">Simple and delicious, just the way it's meant to be</figcaption></figure>
<p>Mayank proposed Friday as a work-from-café day so we met up at the old reliable <a href="https://www.bangaloreeats.com/place/cafe-grey-by-dongle-and-co-indiranagar">Café Grey</a>. I can’t yet prove he only did this because he’s currently working on testing noice cancellation solutions, but I have my suspicions. Regardless it was a nice few hours to work from a different setting and I got a bunch of stuff done.</p>
<figure data-image-modal-root="" class="half" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/coffee_at_cafe_grey.CXpWPY63.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/coffee_at_cafe_grey.CXpWPY63.webp" data-pswp-width="3072" data-pswp-height="4080" data-pswp-caption="Had some coffee, 'twas nice." aria-label="A latte with heart-shaped foam art in a white cup" data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/coffee_at_cafe_grey.CXpWPY63.webp" alt="A latte with heart-shaped foam art in a white cup" loading="lazy" decoding="async" width="3072" height="4080" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">Had some coffee, 'twas nice.</figcaption></figure>
<p>On Saturday I joined Swapnil, Yash, Mayank, and Rohan for breakfast at Veg and Veg followed by some coffee at a small and cozy café where we spotted this absolute unit.</p>
<figure data-image-modal-root="" class="half" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/cute_malamute.DIG5-HX7.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/cute_malamute.DIG5-HX7.webp" data-pswp-width="3072" data-pswp-height="4080" data-pswp-caption="What a chonky boi" aria-label="A large fluffy brown-and-white malamute sitting outdoors" data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/cute_malamute.DIG5-HX7.webp" alt="A large fluffy brown-and-white malamute sitting outdoors" loading="lazy" decoding="async" width="3072" height="4080" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">What a chonky boi</figcaption></figure>
<p>We also had <a href="https://blr.indiewebclub.org/">IndieWebClub #33</a> where we talked about people’s writing process — how do we find ideas, how often does something sit in drafts, what even is a draft and if and when do you choose to let one go. Very insightful discussions, and I got to catch up with <a href="https://jatan.space/about">Jatan</a> who was now rocking a <a href="https://www.writerdeck.org/">writerDeck</a> built around his recently jailbroken Kindle and a foldable Bluetooth keyboard. Pretty cool setup IMO and one that I am somewhat interested in, given that while writing this very week note I got distracted and ended up with <a href="https://msfjarvis.dev/notes/til-prettier-mdx-jsx-formatting-quirk-with-nested-elements/">this</a> side quest.</p>
<h1 id="work">Work</h1>
<p>Things at work have been progressing well, I’ve been assigned to an important client and mostly spend my days working around their requirements. Almost feels like I’m back at Obvious doing consulting work 😛. I got some good news this week that I will hopefully be able to share by the next week note. Fingers crossed!</p>
<h1 id="reading">Reading</h1>
<p>I finished <a href="https://msfjarvis.dev/reading/negative-space/">Negative Space</a> this week, and it was honestly a one of one experience. I can’t remember the last time I read anything this moving, with so much sorrow and suffering but one that was still well written enough to keep me hooked throughout. Haven’t picked anything new yet, still looking for what to start next.</p>
<h1 id="gaming">Gaming</h1>
<p>With CONTROL: Resonant coming out at the end of this month I finally had a good excuse to finish out the Horizon Forbidden West story, so I could uninstall the game to make space for CONTROL 😄</p>
<p>I spent around 10 hours during this week on that and got both the main story and the DLC done, obviously nowhere close to 100%. Loved every part of it, the ability to override flying machines that we gain later was incredibly cool. I wasted plenty of time being an amateur video game photographer but didn’t really get anything I was super proud of. I did have a better time with this when I was playing CONTROL, so I expect to also get some gorgeous shots out of Resonant.</p>
<figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/horizon_forbidden_west_epilogue.BlK2OYWS.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/horizon_forbidden_west_epilogue.BlK2OYWS.webp" data-pswp-width="2560" data-pswp-height="1440" data-pswp-caption="These bitches gay! G4Y!" aria-label="A cutscene from the Horizon Forbidden West: Burning Shores DLC showing the protagonist Aloy and the DLC-introduced character Seyka sharing a kiss" data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/horizon_forbidden_west_epilogue.BlK2OYWS.webp" alt="A cutscene from the Horizon Forbidden West: Burning Shores DLC showing the protagonist Aloy and the DLC-introduced character Seyka sharing a kiss" loading="lazy" decoding="async" width="2560" height="1440" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">These bitches gay! G4Y!</figcaption></figure>
<p>I also bought a cozy cyberpunk diorama builder named <a href="https://www.midnightmoments.io/">Midnight Moments</a> and a visual novel called <a href="https://store.steampowered.com/app/3848900/Sucker_for_Love_Crush_Landing/">Sucker for Love: Crush Landing</a> because <a href="https://www.youtube.com/@HakosBaelz">Hakos Baelz</a> has a voice actor role in it. Wasn’t able to try the VN yet because I spent my week in Horizon but hopefully next week.</p>
<h1 id="cooking">Cooking</h1>
<p>Lots of homecooked meals this week which made me quite happy, some pictured below and the others not. We unlocked a new failure mode in the kitchen this week of “adding double the required amount”. The chana paneer gravy recipe turned into a paste because it had twice the paneer than it was supposed to. We were having trouble blending the paneer and didn’t clock why until everything was in the pan. Actual comedy of errors stuff, but at least it still came out tasty.</p>
<div class="gallery" data-pswp-gallery="" style="--gallery-min-width: 250px; --gallery-gap: 1.5rem" data-astro-cid-rj65ajc3=""><figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/kitchen_sink_fried_rice.NZZGdFfs.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/kitchen_sink_fried_rice.NZZGdFfs.webp" data-pswp-width="3072" data-pswp-height="4080" data-pswp-caption="Threw everything into this, came out great. Definitely going to make a smaller batch next time though." aria-label="Vegetable fried rice with peas, corn, and peppers" data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/kitchen_sink_fried_rice.NZZGdFfs.webp" alt="Vegetable fried rice with peas, corn, and peppers" loading="lazy" decoding="async" width="3072" height="4080" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">Threw everything into this, came out great. Definitely going to make a smaller batch next time though.</figcaption></figure><figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/extra_thicc_chana_paneer_gravy.CKCqUepo.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/extra_thicc_chana_paneer_gravy.CKCqUepo.webp" data-pswp-width="3072" data-pswp-height="4080" data-pswp-caption="The gravy portion of this was basically a thick paste but I can't argue with how good it tasted." aria-label="A bowl of creamy curry with some black chana visible under it" data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/extra_thicc_chana_paneer_gravy.CKCqUepo.webp" alt="A bowl of creamy curry with some black chana visible under it" loading="lazy" decoding="async" width="3072" height="4080" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">The gravy portion of this was basically a thick paste but I can't argue with how good it tasted.</figcaption></figure><figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/veg_pulao.BODUNaJv.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/veg_pulao.BODUNaJv.webp" data-pswp-width="3072" data-pswp-height="4080" data-pswp-caption="Having a bag of frozen veggies in the kitchen at all times makes pulao an easy go-to dish." aria-label="Vegetable pulao served on a metal plate with a mixed pickle on the side" data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/veg_pulao.BODUNaJv.webp" alt="Vegetable pulao served on a metal plate with a mixed pickle on the side" loading="lazy" decoding="async" width="3072" height="4080" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">Having a bag of frozen veggies in the kitchen at all times makes pulao an easy go-to dish.</figcaption></figure></div>]]></content:encoded>
    </item>
    <item>
      <title>Weeknotes: Week #35 (2026)</title>
      <link>https://msfjarvis.dev/weeknotes/week-35-2026/</link>
      <guid>https://msfjarvis.dev/weeknotes/week-35-2026/</guid>
      <description>Slowly getting back to a normal schedule</description>
      <pubDate>Sun, 30 Aug 2026 10:00:29 GMT</pubDate>
      <content:encoded><![CDATA[<p>Coming off an extended bout of sickness I mostly took it easy this week, I wasn’t physically feeling up for an early morning gym session and it rained most evenings which I didn’t want to chance so this also ended up being a relatively sedentary week. My sleep schedule has been much better so I’m hoping to try in the upcoming week to get back into the gym in the morning shift.</p>
<p>No better indication of the fact that I was still not a 100% was me falling asleep at 8:30 PM on Monday, which was followed by me waking up at 3:30 AM the next day and ending up in the office at 8:30 AM. Of course the 9:00 AM meeting I wanted to do at the office had been canceled the previous day, so that was egg on my face for not reading my email.</p>
<p>Inspired by Tanvi’s <del>week</del> <a href="https://tanvibhakta.in/weeknotes/week-of-months-of-may-june-july-2026-2026/">quarter note</a> I started writing something about how I struggle with maintaining my relationship with my parents but chickened out around halfway through. Maybe some other day, after sufficient therapy.</p>
<p>I did book my flights back home for Diwali, and the small crater the size of a large crater that it made in my credit card statement made me shed a tear.</p>
<h2 id="media">Media</h2>
<p>The super-early morning on Tuesday was used to watch <a href="https://www.imdb.com/title/tt32565993/">The Sheep Detectives</a> which I absolutely loved, very cute.</p>
<figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/sheep-detectives.Bm-TqStk.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/sheep-detectives.Bm-TqStk.webp" data-pswp-width="2160" data-pswp-height="1077" data-pswp-caption="Almost made me wanna take up shepherding. Almost." aria-label="Hugh Jackman as George Hardy petting a brown sheep named Lily, voiced by Julia Louis-Dreyfus" data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/sheep-detectives.Bm-TqStk.webp" alt="Hugh Jackman as George Hardy petting a brown sheep named Lily, voiced by Julia Louis-Dreyfus" loading="lazy" decoding="async" width="2160" height="1077" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">Almost made me wanna take up shepherding. Almost.</figcaption></figure>
<p>I also watched <a href="https://www.imdb.com/title/tt32338669">Mutiny</a> on a whim, Jason Statham does a great job playing Jason Statham in this one. Extremely forgettable.</p>
<p><a href="https://www.imdb.com/title/tt26545992/">Lanterns</a> kept popping up in my feeds everywhere so I finally checked it out, and I fully get the hype. Shame there’s only 2 episodes out though.</p>
<p><a href="https://yashgarg.dev">Yash</a> and <a href="https://github.com/swapnilmadavi">Swapnil</a> cooked up a plan to watch Odyssey on IMAX at 7:45 AM in the morning this coming Tuesday, so I’m excitedly looking forward to how we’ll be managing that on a work day.</p>
<p>On the <a href="https://msfjarvis.dev/reading/">reading</a> front, I finished The <a href="https://msfjarvis.dev/reading/the-emilie-adventures/">Emilie Adventures</a> and picked up <a href="https://msfjarvis.dev/reading/negative-space/">Negative Space</a>. I don’t remember who recommended it to me, but it’s <em>really</em> dark and I was in for quite the shock. That said, it is quite the departure from what I usually read so I’m okay with the change of pace.</p>
<h1 id="work">Work</h1>
<p>This was my first day back at work after a full week of being out sick so there was expectedly a lot of unread messages to catch up on, but thankfully there were no big fires in my absence. I had a release planned before I got sick which unfortunately did not go out this week either as things kept piling on, will try again next week!</p>
<p>I also fully wrapped up the project I was helping a Product Manager Intern with since his internship is going to end soon, slightly disappointed we didn’t end up with something viable by the end but we did get some useful things out of it so not a total waste.</p>
<h1 id="personal-projects">Personal Projects</h1>
<p>The homelab grew this week as I replaced <a href="https://github.com/janeczku/calibre-web">Calibre-Web</a> with <a href="https://bookorbit.app/">BookOrbit</a>, mostly motivated by its excellent support for Kobo and KOReader. It took a fair bit of hassle to get it going on NixOS since it’s not packaged yet and I chose to run the Docker image but ultimately I’m quite happy with the final result.</p>
<p>I also <a href="https://git.msfjarvis.dev/msfjarvis/wearos-calendar-sync/commit/2875f6a78a53a2d4b70a248196fa993689567984">tweaked</a> the WearOS Calendar app to prefer timed events over all-day ones when they overlap, and to show the date instead of time if an event is more than 24 hours away.</p>
<h2 id="meta">Meta</h2>
<p>While tinkering around with the site I noticed that the RSS feeds take a little <em>too</em> long to generate and actually register as slow in Astro’s build output, so went over it with a fine tooth comb and implemented some small changes that sped up the feed generation by nearly 2x. <a href="https://github.com/msfjarvis/msfjarvis.dev/commit/4521d04a179a39ae96926055b9960da6b1f00d1a">Caching</a> the <a href="https://docs.astro.build/en/reference/container-reference/">AstroContainer</a> object used to render individual feed entries as HTML so that it does not get re-rendered for each format gave the biggest win, and I figured while I was at it I’d also opt into Astro’s experimental <a href="https://github.com/msfjarvis/msfjarvis.dev/commit/4c158e6c19f4545375227a1c2cec6d51708d0fda">build caching</a>.</p>
<h2 id="-clank-clank-clank">🤖 CLANK CLANK CLANK</h2>
<p>I spent some time making the <a href="https://pi.dev">Pi</a> set up more portable and making it easier to hack on with code completion and what not. The trick for it is creating an NPM package at <code>~/.pi/agent</code> and then loading all the other extensions as workspaces which centralises <code>node_modules</code> and gets you dependencies even for the single-file extensions.</p>
<p>I improved the MCP extension to <a href="https://git.msfjarvis.dev/msfjarvis/my-pi/commit/d721fd17ae0a4f7cc9f662e1d5e4ae651ad1f8cb">immediately load the UI</a> and refresh authentication status in the background to improve the user-facing interaction, and implemented a <a href="https://git.msfjarvis.dev/msfjarvis/my-pi/commit/1a1cf169b2579a057e777f53169233b53b765079">command-driven model switcher</a> so I can quickly swap models by running <code>/sol</code> or <code>/claude</code>.</p>
<h1 id="cooking">Cooking</h1>
<p>Nothing super fancy this week, just our usual fare so I didn’t bother with pictures. I did make a simple white sauce pasta on Saturday though.</p>
<figure data-image-modal-root="" class="half" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/cream-pasta.CNj0BCpr.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/cream-pasta.CNj0BCpr.webp" data-pswp-width="3072" data-pswp-height="4080" data-pswp-caption="Dumped everything I could find in the spice cabinet with a bit of cream and voila" aria-label="A simple white sauce penne pasta in a bowl, with dried parsley and caramelized onions visible" data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/cream-pasta.CNj0BCpr.webp" alt="A simple white sauce penne pasta in a bowl, with dried parsley and caramelized onions visible" loading="lazy" decoding="async" width="3072" height="4080" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">Dumped everything I could find in the spice cabinet with a bit of cream and voila</figcaption></figure>]]></content:encoded>
    </item>
    <item>
      <title>Weeknotes: Week #34 (2026)</title>
      <link>https://msfjarvis.dev/weeknotes/week-34-2026/</link>
      <guid>https://msfjarvis.dev/weeknotes/week-34-2026/</guid>
      <description>Recovering from health issues and catching up on TV</description>
      <pubDate>Sun, 23 Aug 2026 14:38:00 GMT</pubDate>
      <content:encoded><![CDATA[<h1 id="life">Life</h1>
<p>On Monday I went to see a doctor about the fever that was destroying me last weekend and got a full week of medicines and a Paracetamol IV drip to help get it out of my system. That ended up taking more than an hour, and I was pretty glad that <a href="https://yashgarg.dev/">Yash</a> came out to help. What wasn’t great was me not taking the house keys since I went ahead of Yash, and him assuming that I did like I always do so we got ourselves locked out at 10 in the morning. One very expensive locksmith later we were inside, and I don’t think this mistake will be repeated anytime soon :P</p>
<p>The rest of my time this week was mostly focused on recovery as I took the whole week off work and did pretty much nothing other than lay in bed.</p>
<p>I did take the opportunity to meet up with some friends towards the end of the week as my strength returned, meeting up with <a href="https://www.devanshbajaj.dev/">Devansh</a> on the 20th and spending nearly 6 hours with <a href="https://fknil.com/">Fenil</a> on the 21st. It was nice to get out of the house after that long period of feeling like shit and yap with friends.</p>
<h1 id="media">Media</h1>
<p>I took advantage of the seemingly infinite rest period to catch up on a bunch of TV shows and the occasional movie.</p>
<ul>
<li>Finished <a href="https://en.wikipedia.org/wiki/The_Legend_of_Korra">The Legend of Korra</a>: still agree with what I said last week, it’s not ATLA but is great in its own right.</li>
<li>Watched <a href="https://en.wikipedia.org/wiki/Batman:_Caped_Crusader">Batman Caped Crusader</a> S2: can’t say anything without it being spoilers, but this was ultimately not that exciting for me. Building up the suspense about the antagonist was done well but I didn’t jive with how it came together.</li>
<li>Started <a href="https://en.wikipedia.org/wiki/Reacher_(TV_series)">Reacher</a> S4: this has started off in typical Reacher fashion so I’m on board so far.</li>
<li>Caught up to <a href="https://en.wikipedia.org/wiki/Silo_(TV_series)">Silo</a> S2: sadly I’ve forgotten most of the book so I can’t say if this is still accurate to the source material but it’s still great so I don’t have anything to complain about.</li>
<li>Watched <a href="https://en.wikipedia.org/wiki/In_the_Grey">In The Grey</a>: this is slop, absolute waste of time. Ship it off to Netflix where it belongs.</li>
<li>Watched <a href="https://en.wikipedia.org/wiki/Masters_of_the_Universe_(2026_film)">Masters of the Universe</a>: also somewhat slop-like but there were some funny moments in there.</li>
</ul>
<h1 id="work">Work</h1>
<p>As I mentioned earlier I took the whole week off. I had initially planned it to be just 3 days so I logged back on in the middle of the week to tack on an extra couple of days. A handful of kind and thoughtful messages were waiting for me when I did, which was nice to see.</p>
<h1 id="cooking">Cooking</h1>
<p>Barely any cooking this week as I was too sick for most of it, and went out for a couple of those days but we still managed to make a simple khichdi and then a shakshouka.</p>]]></content:encoded>
    </item>
    <item>
      <title>Weeknotes: Week #33 (2026)</title>
      <link>https://msfjarvis.dev/weeknotes/week-33-2026/</link>
      <guid>https://msfjarvis.dev/weeknotes/week-33-2026/</guid>
      <description>Capped off a boring week with a debilitating bout of sickness</description>
      <pubDate>Sun, 16 Aug 2026 03:53:00 GMT</pubDate>
      <content:encoded><![CDATA[<p>Now that I’m feeling a lot better, time to actually write this weeknote.</p>
<h1 id="life">Life</h1>
<p>Things were relatively quiet this week, I had been looking forward to IndieWebClub but sadly had to cancel last minute due to a raging viral fever I caught on the day of. I’m not exactly sure why I caught the fever, but getting absolutely fucking drenched on Tuesday while I was making my way back from the gym was probably a contributing factor.</p>
<p>On Thursday I went back in for my second attempt at the Passport Office after being reasssured that the <a href="https://timesofindia.indiatimes.com/city/bengaluru/karnataka-bandh-today-live-updates-bengaluru-schools-whats-open-close-banks-government-offices-ksrtc-bmtc-cauvery-water-latest-news/liveblog/133195762.cms">statewide bandh</a> won’t impact cab availability. I got done with the first two steps quickly enough, after which I was informed the last counter is down due to “server issues” and we’ll just have to wait. That wait lasted a nice 5 hours, and only after I practically harassed one of the workers to demand an explanation did I discover that the step had actually been waived for everyone who had been waiting and the whole thing had just been a colossal waste of time. My disdain for government operations remains fully justified.</p>
<h1 id="media">Media</h1>
<p>Since I finished watching Avatar: The Last Airbender last week it only felt natural to catch up on The Legend of Korra, which was slightly helped by my fever addled brain keeping me glued to my bed for two straight days. Great show though, definitely doesn’t size up to ATLA but it’s nothing to scoff at.</p>
<h1 id="games">Games</h1>
<p>Huge <a href="https://www.reddit.com/r/Helldivers/comments/1vma2by/title_update_devoid_of_liberty_700/">Helldivers 2</a> update came out this week with a Warhammer 40000 collaboration and all the community cares for is that we can hug the SEAF soldiers. Brings a tear to my eye.</p>
<p>I also moved my <a href="https://www.hololive-dreams.com/en">Hololive Dreams</a> account to Steam and while I continue to be an absolute scrub at rhythm games it’s been fun to learn. There are people beating the hardest chart in the game while playing with <a href="https://www.youtube.com/watch?v=E95J2WZs5fI">spoons</a> and then there’s me happily tapping away at the easiest difficulty…</p>
<h1 id="work">Work</h1>
<p>Things at work have been a mixed bag, we’ve finally broken ground on our new project and Mayank’s been doing excellent work here in the initial prototyping phase. I’ve been somewhat slower on my share of the work as I tried to put together a new release of the RealtimeKit SDKs but it kept getting dragged along as we kept uncovering more issues and I had big pile of review comments from the AI reviewer to work through. I do kind of dislike how the AI reviewer decides to take a fine tooth comb onto the codebase specifically in release PRs and not in the 50 PRs that went in before this to create said release. Anyways, I’ll hopefully be able to wrap it up when I return to work.</p>
<h1 id="personal-projects">Personal projects</h1>
<p>I finally scratched my itch of wanting to build something useful on WearOS and ended up with <a href="https://git.msfjarvis.dev/msfjarvis/wearos-calendar-sync">wearos-calendar-sync</a>, the most creativity-free name I could find. The README is still slop because by the time I started picking at the project in earnest I immediately fell sick but this shall be remedied soon. Getting this thing to come into existence was a whole saga that is described below because it deserves its separate rant.</p>
<h2 id="clank-clank-clank-">CLANK CLANK CLANK 🤖</h2>
<p>I had mentioned <a href="https://msfjarvis.dev/weeknotes/week-32-2026/">last week</a> that I had issues with Claude models on my Pi setup, I was finally able to look into it and found it was a result of my bash-permissions extension appending a second <code>system</code> message which Anthropic’s API doesn’t support. That has <a href="https://git.msfjarvis.dev/msfjarvis/my-pi/commit/6fb223750a936812da4c408f62fb03656ecc0a73">now been fixed</a>, so I’ll probably have something to report on the reviewer test in a week or two.</p>
<h3 id="sidebar-codex-cloud-is-a-terrible-product">Sidebar: Codex Cloud is a terrible product</h3>
<p>After struggling to even find where the option for it was, I finally kicked the tires on <a href="https://learn.chatgpt.com/docs/cloud">Codex Cloud</a> to solve a longstanding gripe I have with WearOS version of Google Calendar: it refuses to sync non-Google calendars. This is not a problem shared by the Android counterpart, so I can only assume this is the result of incompetence.</p>
<p>With my gripe about Google Calendar and my unfulfilled cope of learning WearOS development as an excuse to get this expensive Pixel Watch, I decided I’d build my own calendar (with some slop involved). I yapped at the ChatGPT app to explain my problems with Google Calendar, what I wanted out of my ideal replacement and the general architecture I wanted to go for. The clanker suggested making the watch app a simple presenter for JSON encoded calendar events that a companion phone app could periodically send to it, which would significantly reduce complexity and make it much more battery efficient. I couldn’t really find a fault in that since it still checks off all my boxes so that’s what I went with.</p>
<p>Speaking of incompetence, that is also a quality shared by the people who run security at OpenAI and not just because of their recent accomplishments on the <a href="https://www.felonybench.com/">FelonyBench</a> rankings. Codex Cloud does not let you export your changes from their sandbox to GitHub if the changes contain a binary file. OpenAI is aware that people do not want this nonsense <a href="https://github.com/openai/codex/issues/4867">for nearly a year</a> and they’ve not changed anything here. Trying to set up an Android project by necessity means you have a small Gradle wrapper JAR in your source tree, which means you cannot bootstrap an Android app inside Codex Cloud. I deleted the JAR just so I could get the code out and vowed to never use this abomination ever again.</p>
<h1 id="cooking">Cooking</h1>
<p>Honestly I can’t remember why I don’t have any pictures, but we definitely cooked! I think? Anyways, go check out Yash’s <a href="https://yashgarg.dev/weekly-notes-33-2026/">week note</a> for that.</p>]]></content:encoded>
    </item>
    <item>
      <title>Weeknotes: Week #32 (2026)</title>
      <link>https://msfjarvis.dev/weeknotes/week-32-2026/</link>
      <guid>https://msfjarvis.dev/weeknotes/week-32-2026/</guid>
      <description>Bengaluru weather is so overrated</description>
      <pubDate>Sun, 09 Aug 2026 09:27:24 GMT</pubDate>
      <content:encoded><![CDATA[<h1 id="life">Life</h1>
<p>I spent most of this week watching the original Avatar: The Last Airbender show, after watching Drew Gooden’s <a href="https://www.youtube.com/watch?v=7fmyTueYPhw">very eloquent and passionate rant</a> about how the live action remake gets literally everything wrong. I had forgotten a lot of things from the show so the rewatch was quite enjoyable.</p>
<p>The constantly changing weather got to me, and I was down with a cold and fever on Thursday which forced me to take the day off work to lie in bed, and you guessed it, watch ATLA.</p>
<p>My visit to the passport office last month had ended in failure as my rent agreement had some mistakes, which I was finally able to get rectified with mere days left for the next appointment. Hopefully it will be enough and I can be done with this process, and then apply for the visa.</p>
<h2 id="reading">Reading</h2>
<p>I finished reading <a href="https://www.beckyferreira.com/first-contact.html">First Contact</a> earlier this week and picked up <a href="https://books.google.co.in/books/about/The_Emilie_Adventures.html?id=hiAZEQAAQBAJ&amp;redir_esc=y">The Emilie Adventures</a> by Martha Wells. I’ve been slowly working through the full Martha Wells catalogue and this is one of the last few.</p>
<h1 id="work">Work</h1>
<p>Things at work have been hectic. I had to implement an emergency change to prevent an accidental DoS from the SDK allowing users to call an expensive endpoint without any rate limits. After that, I waded through our ever-shrinking backlog for anything that could potentially impact a new customer we’re working super hard to lock down. The new project we were planning to start got pushed slightly down the priority list but Mayank has been making progress on early PoCs so we’ll hopefully start having real</p>
<h1 id="meta">Meta</h1>
<p>I continued the work I <a href="https://msfjarvis.dev/weeknotes/week-31-2026/#meta">outlined last week</a> for moving my reading activity to this site, and out of Bookwyrm. This is almost complete now, after I added the ability to locally host reviews instead of just linking to Bookwyrm and to vendor the cover images in the repo itself. My research has not yielded a much better data source than OpenLibrary.org that can also serve unauthenticated requests, so I’ll just stick with it and manually input books that don’t exist on there.</p>
<p>The new version is not yet in production, but I expect to merge that sometime next week.</p>
<p>I also tweaked the code highlighting a bit, switching to the <a href="https://expressive-code.com/">Expressive Code</a> framework and changing the default themes.</p>
<h1 id="clank-clank-clank-">CLANK CLANK CLANK 🤖</h1>
<p>I decided to do some window shopping on <a href="https://pi.dev/packages">pi.dev/packages</a> and picked up <a href="https://pi.dev/packages/pi-spark">pi-spark</a>, and <a href="https://pi.dev/packages/@howaboua/pi-codex-conversion?name=pi-codex">pi-codex-conversion</a>. My attempt to use the voice input feature failed which honestly I’m happier to not have. The extensions don’t change anything user-facing too dramatically; pi-spark makes the editor and footer a bit more compact and adds the ability to use a ChatGPT Codex reset directly from Pi which is cool. pi-codex-conversion gives Pi LLM tools that match the default Codex harness, making the models more likely to have successful tool calls.</p>
<p>I read the <a href="https://www.greptile.com/blog/model-inversion">Model Inversion study</a> from Greptile some time ago so I tried to give that a go with Sonnet 5 (from GitHub Copilot) as the reviewer subagent but kept running into errors like this</p>
<pre><code class="language-json">{
  "type": "error",
  "error": {
    "type": "invalid_request_error",
    "message": "messages: Unexpected role \"system\". The Messages API accepts a top-level `system` parameter, not \"system\" as an input message role."
  },
  "request_id": "req_vrtx_011CdqjxHaBgstkZwDG1UdcV"
}</code></pre>
<p>I’m reasonably confident Pi doesn’t ship a broken GitHub Copilot provider, so this has to be a result of my setup. I’ll look into it next week if I still care.</p>
<h1 id="cooking">Cooking</h1>
<p>Lots of cooking at home this week despite a string of sickness, which was very helpful for my very aching wallet. I was alone at home on Monday, so I made a small batch of veggie pasta and called it there. Next couple of days we had chhole, after which I got sick and opted to order in a chicken soup. On Friday we made a quick shakshouka, and I was alone again on Saturday so a veggie pasta with some low fat nachos were my dinner. I was craving something sweet right after that, so I tried making the “protein” staple balls of oats/banana/peanut butter/protein powder/honey. I didn’t quite nail the consistency, and they were a little too wet. I opted to stuff it into a glass box and eat them as bars the next day instead, and it was still not quite firm but a great snack regardless.</p>
<div class="gallery" data-pswp-gallery="" style="--gallery-min-width: 250px; --gallery-gap: 1.5rem" data-astro-cid-rj65ajc3=""><figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/kitchen-sink-pasta.sdYHSlfs.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/kitchen-sink-pasta.sdYHSlfs.webp" data-pswp-width="3072" data-pswp-height="4080" data-pswp-caption="Threw together everything I saw in my freezer. Yes that is chicken salami." aria-label="Penne pasta mixed with vegetables in a large pan." data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/kitchen-sink-pasta.sdYHSlfs.webp" alt="Penne pasta mixed with vegetables in a large pan." loading="lazy" decoding="async" width="3072" height="4080" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">Threw together everything I saw in my freezer. Yes that is chicken salami.</figcaption></figure><figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/shakshouka.BPhnZ2KL.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/shakshouka.BPhnZ2KL.webp" data-pswp-width="3072" data-pswp-height="4080" data-pswp-caption="When we decided to make this we had neither enough tomatoes or any eggs, great stuff from us." aria-label="Shakshuka served with toasted bread." data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/shakshouka.BPhnZ2KL.webp" alt="Shakshuka served with toasted bread." loading="lazy" decoding="async" width="3072" height="4080" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">When we decided to make this we had neither enough tomatoes or any eggs, great stuff from us.</figcaption></figure><figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/veggie-salad.7If_2Env.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/veggie-salad.7If_2Env.webp" data-pswp-width="3072" data-pswp-height="4080" data-pswp-caption="Keeping a thing of Feta cheese in the fridge at all times makes impromptu salads so good." aria-label="Creamy mixed vegetable salad in a bowl." data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/veggie-salad.7If_2Env.webp" alt="Creamy mixed vegetable salad in a bowl." loading="lazy" decoding="async" width="3072" height="4080" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">Keeping a thing of Feta cheese in the fridge at all times makes impromptu salads so good.</figcaption></figure></div>]]></content:encoded>
    </item>
    <item>
      <title>Weeknotes: Week #31 (2026)</title>
      <link>https://msfjarvis.dev/weeknotes/week-31-2026/</link>
      <guid>https://msfjarvis.dev/weeknotes/week-31-2026/</guid>
      <description>Why do I bother with Marvel movies any more...</description>
      <pubDate>Sun, 02 Aug 2026 11:29:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Rather slow week for me as I was sick for the first 2 days, but things kept happening anyway 🙃</p>
<h2 id="socializing">Socializing</h2>
<p>The gang had booked tickets for Spider-Man: Brand New Day so we got together to watch that on Friday evening. The movie itself was rather weak, maybe a 6/10 as far as I’m concerned. The characters didn’t really get a chance to develop, and one of the comic arcs I was expecting to see in the movie got written out through the usual “power of friendship and true love” trope.</p>
<div class="gallery" data-pswp-gallery="" style="--gallery-min-width: 250px; --gallery-gap: 1.5rem" data-astro-cid-rj65ajc3=""><figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/spiderman-bnd-poster.CAqLBw4Z.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/spiderman-bnd-poster.CAqLBw4Z.webp" data-pswp-width="3072" data-pswp-height="4080" data-pswp-caption="Got a nice poster at least" aria-label="Spider-Man: Brand New Day movie poster" data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/spiderman-bnd-poster.CAqLBw4Z.webp" alt="Spider-Man: Brand New Day movie poster" loading="lazy" decoding="async" width="3072" height="4080" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">Got a nice poster at least</figcaption></figure><figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/spiderman-bnd-title.BSZ8CnNy.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/spiderman-bnd-title.BSZ8CnNy.webp" data-pswp-width="3120" data-pswp-height="4160" data-pswp-caption="The whole theater was hollering at this" aria-label="Spider-Man: Brand New Day title on a cinema screen" data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/spiderman-bnd-title.BSZ8CnNy.webp" alt="Spider-Man: Brand New Day title on a cinema screen" loading="lazy" decoding="async" width="3120" height="4160" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">The whole theater was hollering at this</figcaption></figure></div>
<p>We reached Indiranagar around 11:30 PM after the movie so our only real option for a meal was the suffocatingly packed <a href="https://toit.in/">Toit Bar and Restaurant</a>. Unfortunately I didn’t bother to get many pictures so you can go check out <a href="https://yashgarg.dev/weekly-notes/">Yash’s week notes</a> for those.</p>
<h1 id="work">Work</h1>
<p>Big week at work! Some high profile departures were announced from our office, and I’ll be starting on a new project next week which should be quite exciting.</p>
<p>Our office manager Jyothi had baked some very delicious brownies and I got to sample a piece, which was honestly the highlight of my week.</p>
<h1 id="meta">Meta</h1>
<p>I’ve been working towards making this website the source of truth for my <a href="https://msfjarvis.dev/reading">reading activity</a>, and it’s been going rather poorly. I’ve managed to make a high fidelity copy of the data from Bookwyrm into MDX files in this repository but the authoring flow of adding a new book is still quite subpar. I might abandon this approach in favour of just switching to a different service and self-host it, since ultimately my real problem with Bookwyrm is just how painfully slow the flagship instance is. My efforts to move to a different Bookwyrm instance have not borne fruit since the book collections vary a lot between servers. Most of the books I imported into <a href="https://linguistic.earth/">linguistic.earth</a> failed because it’s a much smaller server and thus has a very sparse collection of known books.</p>
<p>Other than that, I’ve also migrated the image modals I use to the <a href="https://photoswipe.com/">Photoswipe</a> library instead of my hand rolled version since it offers a lot of niceties I didn’t wish to add or maintain.</p>
<h1 id="personal-projects">Personal Projects</h1>
<p>I threw GPT-5.6 Sol at max thinking on <a href="https://github.com/msfjarvis/compose-lobsters">Claw</a> with a prompt to identify opportunities to improve query performance, push operations down from Kotlin to SQLite, and any other improvements that have become available in the year or so since I last had an LLM audit my miniscule amount of SQL. I mostly do this to find out SQLite features, and got to learn about a few more tricks.</p>
<ul>
<li><code>INSERT OR REPLACE</code> can accidentally trigger cascading deletions via foreign key relations, so it is better spelled out using <code>ON CONFLICT(primaryKey) DO UPDATE SET column1 = new.column1;</code></li>
<li>Specifying <code>WITHOUT ROWID</code> when creating a table skips a hidden column that SQLite uses as a more efficient primary key for searching for the row in the storage engine. This can yield modest storage savings for bigger data sets. More on that <a href="https://sqlite.org/rowidtable.html">here</a>.</li>
<li>Use <code>RETURNING &lt;field&gt;</code> to have a query both update and return data, which can be used to avoid an additional query to read back the updated data.</li>
</ul>
<h2 id="clank-clank-clank">CLANK CLANK CLANK</h2>
<p>This week I changed my <a href="https://pi.dev">Pi</a> setup to ditch the third-party subagent extension and instead go back to the barebones example subagent extension from the main Pi repo. I updated it to <a href="https://git.msfjarvis.dev/msfjarvis/my-pi/commit/fece2293c9795924229ceac59e09ffce884cf696">handle some more of my local tools</a>, and added a config option to <a href="https://git.msfjarvis.dev/msfjarvis/my-pi/commit/bc026882d549c4586d9548657c401534408bb81a">limit nested subagents</a> which was a problem that I had seen with GPT-5.6 models which recursively spawned subagents and racked up massive bills.</p>
<p>I also finally managed to make the <code>websearch</code> tool from <a href="https://github.com/goncalossilva/tau">tau</a> work on my setup. I hadn’t realized that <a href="https://github.com/numtide/llm-agents.nix">llm-agents.nix</a> bundles Pi with the Bun JS runtime which didn’t have the necessary <code>node:sqlite</code> module. Switching that to Node.js solved the problem for me.</p>
<h1 id="food">Food</h1>
<p>Pretty good week for home cooking, though it all fell apart during the weekend :D</p>
<div class="gallery" data-pswp-gallery="" style="--gallery-min-width: 250px; --gallery-gap: 1.5rem" data-astro-cid-rj65ajc3=""><figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/rich-spicy-potato.CrBhqz3s.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/rich-spicy-potato.CrBhqz3s.webp" data-pswp-width="3072" data-pswp-height="4080" data-pswp-caption="The recipe asked for approximately 3 times the oil this actually needed. So very delicious though." aria-label="Bowl of spicy potatoes" data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/rich-spicy-potato.CrBhqz3s.webp" alt="Bowl of spicy potatoes" loading="lazy" decoding="async" width="3072" height="4080" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">The recipe asked for approximately 3 times the oil this actually needed. So very delicious though.</figcaption></figure><figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/simple-chicken-pasta.Dj5TvTL9.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/simple-chicken-pasta.Dj5TvTL9.webp" data-pswp-width="3072" data-pswp-height="4080" data-pswp-caption="I threw together this pasta with some frozen chicken sausages one of the nights, was quite delicious." aria-label="Creamy chicken pasta in a bowl" data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/simple-chicken-pasta.Dj5TvTL9.webp" alt="Creamy chicken pasta in a bowl" loading="lazy" decoding="async" width="3072" height="4080" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">I threw together this pasta with some frozen chicken sausages one of the nights, was quite delicious.</figcaption></figure><figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/tehri-with-paneer.BukSqftE.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/tehri-with-paneer.BukSqftE.webp" data-pswp-width="3072" data-pswp-height="4080" data-pswp-caption="Another IG recipe but at least it reminded me frozen veggies exist, so yay." aria-label="Bowl of vegetable rice with paneer" data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/tehri-with-paneer.BukSqftE.webp" alt="Bowl of vegetable rice with paneer" loading="lazy" decoding="async" width="3072" height="4080" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">Another IG recipe but at least it reminded me frozen veggies exist, so yay.</figcaption></figure></div>]]></content:encoded>
    </item>
    <item>
      <title>Weeknotes: Week #30 (2026)</title>
      <link>https://msfjarvis.dev/weeknotes/week-30-2026/</link>
      <guid>https://msfjarvis.dev/weeknotes/week-30-2026/</guid>
      <description>Reading, sleeping, then reading again. Truly a week of all time.</description>
      <pubDate>Sun, 26 Jul 2026 11:44:25 GMT</pubDate>
      <content:encoded><![CDATA[<h1 id="personal">Personal</h1>
<p>Going through my journal it seems I did little this week outside of read, end up napping since I was reading in bed, then wake up and read again. Solid 9/10 week, no complaints 👌</p>
<h2 id="reading">Reading</h2>
<figure data-image-modal-root="" class="half" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/koreader_stats.D50nsy4A.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/koreader_stats.D50nsy4A.webp" data-pswp-width="1072" data-pswp-height="1448" data-pswp-caption="There are worse problems to have than finishing a new favorite book series but it is up there" aria-label="Reading statistics page in KOReader, showing I've been reading every day since July 3 and finished 4 Mother of Learning books." data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/koreader_stats.D50nsy4A.webp" alt="Reading statistics page in KOReader, showing I've been reading every day since July 3 and finished 4 Mother of Learning books." loading="lazy" decoding="async" width="1072" height="1448" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">There are worse problems to have than finishing a new favorite book series but it is up there</figcaption></figure>
<p>This entire month has gone into reading through the Mother of Learning series which I grew to love immensely, and I’m genuinely a little sad that there’s no more of it 🙃</p>
<p>Given how consistent I’ve been this month, I’ve decided to threaten that with non-fiction once again, hopefully it will go better this time. As part of this refreshed fervour I have also added a <a href="https://msfjarvis.dev/reading/">/reading</a> page to this site that pulls data from my <a href="https://bookwyrm.social/user/msfjarvis">Bookwyrm profile</a>.</p>
<h2 id="socializing">Socializing</h2>
<p>Extremely misleading section header given how little I actually interacted with people this week. On Thursday I started working then quickly decided I wasn’t really feeling it, and took the day off — shockingly — to read. By Sunday, I was off the high having finished MoL, so I went on a solo brunch just to get some time out in the sun. Had a nice time at <a href="https://www.bangaloreeats.com/place/cafe-grey-by-dongle-and-co-indiranagar">Cafe Grey</a> and as usual both their food and coffee were delicious.</p>
<div class="gallery" data-pswp-gallery="" style="--gallery-min-width: 250px; --gallery-gap: 1.5rem" data-astro-cid-rj65ajc3=""><figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/waffles.DrjBJJRd.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/waffles.DrjBJJRd.webp" data-pswp-width="3072" data-pswp-height="4080" data-pswp-caption="The waffles were just the right level of sweet" aria-label="Waffles dusted with powdered sugar, served with syrup and butter" data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/waffles.DrjBJJRd.webp" alt="Waffles dusted with powdered sugar, served with syrup and butter" loading="lazy" decoding="async" width="3072" height="4080" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">The waffles were just the right level of sweet</figcaption></figure><figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/caramel_frappuccino.C4vxA43g.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/caramel_frappuccino.C4vxA43g.webp" data-pswp-width="3072" data-pswp-height="4080" data-pswp-caption="Starbucks could learn a thing or two about how much ice actually goes in one of these" aria-label="A tall glass of frothy coffee on a cafe table" data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/caramel_frappuccino.C4vxA43g.webp" alt="A tall glass of frothy coffee on a cafe table" loading="lazy" decoding="async" width="3072" height="4080" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">Starbucks could learn a thing or two about how much ice actually goes in one of these</figcaption></figure><figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/chicken_toasties.Cm7uvxQB.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/chicken_toasties.Cm7uvxQB.webp" data-pswp-width="3072" data-pswp-height="4080" data-pswp-caption="The toasties were surprisingly filling despite looking like rather small portions" aria-label="Toasted bread topped with chicken, peppers, tomatoes, and melted cheese" data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/chicken_toasties.Cm7uvxQB.webp" alt="Toasted bread topped with chicken, peppers, tomatoes, and melted cheese" loading="lazy" decoding="async" width="3072" height="4080" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">The toasties were surprisingly filling despite looking like rather small portions</figcaption></figure></div>
<h1 id="work">Work</h1>
<p>I have complex feelings about <a href="https://www.seangoedecke.com/about">Sean Goedecke</a>’s writing, but I decided to take some of the advice from the <a href="https://www.seangoedecke.com/doing-nothing-at-work/">doing nothing at work</a> essay to free up my time for interesting opportunities that might turn up. This paid off pretty quickly, and I spent this week mostly focusing on one of those projects. A bulk of the work was already in place, so I’ve been able to move fast on it. Hopefully it’ll be done and dusted by next week, and I can go back to focusing on new feature work for <a href="https://developers.cloudflare.com/realtime/realtimekit/">RealtimeKit</a>.</p>
<p>That said, I did cap off the RealtimeKit <a href="https://en.wikipedia.org/wiki/Monorepo">monorepo</a> side quest by moving the final piece in: the iOS UI Kit. This was a bit of a hassle due to how the dependencies work out, but ultimately everything fell into place. I am fully confident this house of cards will fall apart the second I trigger the release pipeline, but that’s a problem for a later date.</p>
<h1 id="meta">Meta</h1>
<p>The site has had a bunch of changes this week as I mucked around with adding the <a href="https://msfjarvis.dev/reading">/reading</a> page. The nav links at the top are now truncated to be 3 + overflow as I keep adding standalone pages. The resulting UI is still a little too wide for mobile, so I will probably keep iterating on this to make it look nice on all sizes.</p>
<p>The webmentions server that processes outgoing content now uses the hidden <code>p-summary</code> element instead of <code>e-content</code> to populate the body, so people receiving Webmentions from me will start seeing shorter “description” fields instead of the awkwardly HTML-stripped main content.</p>
<h1 id="cooking">Cooking</h1>
<p>Not a lot of cooking this week as we first made a big portion of paneer and ate it over two days, then Yash fell sick so we were down to plain khichdi. I’m also not having the best time with food, so the kitchen was mostly unused this week. The paneer was our first foray into blending roasted veggies to make a curry and the result was exactly as smooth and creamy as promised. Will definitely be doing more of this going forward given how easy it was to put together.</p>
<figure data-image-modal-root="" class="half" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/paneer_curry.B3jREDdC.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/paneer_curry.B3jREDdC.webp" data-pswp-width="4080" data-pswp-height="3072" data-pswp-caption="We decided to make a big portion of this and get two dinners out of it, totally the right call" aria-label="Paneer curry with peas in a large pan" data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/paneer_curry.B3jREDdC.webp" alt="Paneer curry with peas in a large pan" loading="lazy" decoding="async" width="4080" height="3072" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">We decided to make a big portion of this and get two dinners out of it, totally the right call</figcaption></figure>
<h1 id="odin-of-the-week">Odin of the Week</h1>
<p>Seeing Odin on my Mastodon feed gives me infinite joy, so I’ve decided that Odin of the Week can now just be a running segment. Who would not want to see this human-sized Newfoundlander puppy? Here is a handy <a href="https://infosec.exchange/@0xabad1dea/113380498047949124">FAQ</a> about Odin, so you know what you’re getting into :D</p>
<blockquote class="mastodon-post" lang="en" cite="https://infosec.exchange/@0xabad1dea/116980897659510296" data-source="fediverse" data-astro-cid-hgg3ctr5=""><header class="mastodon-post__author" data-astro-cid-hgg3ctr5=""><span class="mastodon-post__name" data-astro-cid-hgg3ctr5="">abadidea</span><span class="mastodon-post__account" data-astro-cid-hgg3ctr5="">@0xabad1dea@infosec.exchange</span></header><div class="mastodon-post__content" data-astro-cid-hgg3ctr5=""><p data-astro-cid-hgg3ctr5="">Someone needed an extra big brushie and wasn’t too thrilled about it</p></div><div class="mastodon-post__media-grid" data-astro-cid-hgg3ctr5=""><figure class="mastodon-post__media" data-astro-cid-hgg3ctr5=""><img src="https://media.infosec.exchange/infosec.exchange/media_attachments/files/116/980/896/851/127/222/original/9b70721014bfd3f1.jpeg" alt="Me sitting on the floor next to Odin the Newfie, holding an enormous quantity of black fur " loading="lazy" data-astro-cid-hgg3ctr5=""></figure><figure class="mastodon-post__media" data-astro-cid-hgg3ctr5=""><img src="https://media.infosec.exchange/infosec.exchange/media_attachments/files/116/980/897/378/887/974/original/8f7032a3ff6e7912.jpeg" alt="Odin making his best attempt at an intimidating face at mommy " loading="lazy" data-astro-cid-hgg3ctr5=""></figure></div><footer class="mastodon-post__footer" data-astro-cid-hgg3ctr5=""><time datetime="2026-07-25T13:40:41.730Z" data-astro-cid-hgg3ctr5="">25 Jul 2026, 13:40</time><a href="https://infosec.exchange/@0xabad1dea/116980897659510296" data-astro-cid-hgg3ctr5="">View original post <span aria-hidden="true" data-astro-cid-hgg3ctr5="">↗</span></a></footer></blockquote>]]></content:encoded>
    </item>
    <item>
      <title>Weeknotes: Week #29 (2026)</title>
      <link>https://msfjarvis.dev/weeknotes/week-29-2026/</link>
      <guid>https://msfjarvis.dev/weeknotes/week-29-2026/</guid>
      <description>This week went by a little too quickly...</description>
      <pubDate>Sun, 19 Jul 2026 10:51:02 GMT</pubDate>
      <content:encoded><![CDATA[<figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/beautiful-rain-sky.CQ5c68hc.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/beautiful-rain-sky.CQ5c68hc.webp" data-pswp-width="4080" data-pswp-height="3072" data-pswp-caption="After seemingly endless teasing, we finally got a bit of welcome rain" aria-label="Dark rain clouds above buildings, power lines, and a streetlight." data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/beautiful-rain-sky.CQ5c68hc.webp" alt="Dark rain clouds above buildings, power lines, and a streetlight." loading="lazy" decoding="async" width="4080" height="3072" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">After seemingly endless teasing, we finally got a bit of welcome rain</figcaption></figure>
<h1 id="personal">Personal</h1>
<p>I had my passport application appointment this week, which got denied due to my landlord leaving the rent agreement incomplete 🙃. Will have to get that fixed then go back mid-August to get it reviewed again, and hopefully not run into any more problems.</p>
<h2 id="reading">Reading</h2>
<p>I’ve continued blazing through the Mother of Learning series, finishing <a href="https://bookwyrm.social/user/msfjarvis/generatednote/12059415">ARC 2</a> on Saturday and immediately <a href="https://bookwyrm.social/user/msfjarvis/generatednote/12059456">picking up ARC 3</a>. These books are too good! I’m fully expecting to finish reading the series in the next 2 weeks, so suggestions are welcome! If you want a vibe check on my interests, <a href="https://bookwyrm.social/user/msfjarvis/books/read">this</a> is the list of everything I’ve read in the past ~18 months.</p>
<h2 id="socializing">Socializing</h2>
<p>Yash and Swapnil dragged me along to watch Dhamaal 4 which was just as terrible as I had expected it to be. The formula has become so repetitive and boring that the jokes have now turned meta. I was hoping they’d stop making these but the movie ends with an announcement for Dhamaal 5, so I suppose that’s not happening anytime soon.</p>
<figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/empty-bengaluru-roads.opBO3YTn.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/empty-bengaluru-roads.opBO3YTn.webp" data-pswp-width="4080" data-pswp-height="3072" data-pswp-caption="While walking back from the movie a VIP forced a road closure, never seen an empty major road in Bengaluru before." aria-label="A mostly empty Bengaluru road beneath a flyover at dusk." data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/empty-bengaluru-roads.opBO3YTn.webp" alt="A mostly empty Bengaluru road beneath a flyover at dusk." loading="lazy" decoding="async" width="4080" height="3072" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">While walking back from the movie a VIP forced a road closure, never seen an empty major road in Bengaluru before.</figcaption></figure>
<p>After the movie we went to Element 3 for food, which redeemed the night.</p>
<p>On Saturday I went to <a href="https://blr.indiewebclub.org/">IndieWebClub</a> and helped out a bit, but I wasn’t feeling super well with the rain coming in, so I bailed a little early.</p>
<h1 id="work">Work</h1>
<p>Things at work have been slow as we’ve all been heads down in debugging and remediation, but those events are starting to bear fruit. Hopefully by the end of next week we’ll be in a much better spot.</p>
<p>I still managed to get <a href="https://developers.cloudflare.com/realtime/realtimekit/release-notes/android-core/#2026-07-17">a release out</a> for the mobile SDKs since we had a customer waiting on some improvements. Our release process has too many moving parts, I clearly haven’t automated enough.</p>
<h1 id="meta">Meta</h1>
<p>The site now has <a href="https://msfjarvis.dev/changelog">a changelog page</a> which contains major changes made to the site. This week has been <em>slightly</em> busy. As part of last week’s fediverse migrations, I’ve now changed all links to my old Mastodon account to instead redirect to an archive I host. In case the <code>androiddev.social</code> server does go down, this will keep them working. The posts and notes lists now group by year so I can feel better/worse about how much more/less I’ve been writing :D</p>
<p>To show off the <code>MastodonPost</code> embed component, here’s the weekly Odin of the Fediverse.</p>
<blockquote class="mastodon-post" lang="en" cite="https://infosec.exchange/@0xabad1dea/116946074763792559" data-source="fediverse" data-astro-cid-hgg3ctr5=""><header class="mastodon-post__author" data-astro-cid-hgg3ctr5=""><span class="mastodon-post__name" data-astro-cid-hgg3ctr5="">abadidea</span><span class="mastodon-post__account" data-astro-cid-hgg3ctr5="">@0xabad1dea@infosec.exchange</span></header><div class="mastodon-post__content" data-astro-cid-hgg3ctr5=""><p data-astro-cid-hgg3ctr5="">Public Transport Odin on his way to say goodbye to the Jesuit scholars before they return to Rome</p></div><div class="mastodon-post__media-grid" data-astro-cid-hgg3ctr5=""><figure class="mastodon-post__media" data-astro-cid-hgg3ctr5=""><img src="https://media.infosec.exchange/infosec.exchange/media_attachments/files/116/946/074/281/497/258/original/b94153dd391a8c26.jpeg" alt="Odin the Newfie pleased about riding the Amsterdam tram " loading="lazy" data-astro-cid-hgg3ctr5=""></figure><figure class="mastodon-post__media" data-astro-cid-hgg3ctr5=""><img src="https://media.infosec.exchange/infosec.exchange/media_attachments/files/116/946/074/555/145/173/original/68f7bada6492ec33.jpeg" alt="Odin the Newfie loitering at the entrance to Vondelpark " loading="lazy" data-astro-cid-hgg3ctr5=""></figure></div><footer class="mastodon-post__footer" data-astro-cid-hgg3ctr5=""><time datetime="2026-07-19T10:04:46.508Z" data-astro-cid-hgg3ctr5="">19 Jul 2026, 10:04</time><a href="https://infosec.exchange/@0xabad1dea/116946074763792559" data-astro-cid-hgg3ctr5="">View original post <span aria-hidden="true" data-astro-cid-hgg3ctr5="">↗</span></a></footer></blockquote>
<h2 id="writing">Writing</h2>
<p>Good week on the writing front, I published a note <a href="https://msfjarvis.dev/notes/how-to-dig-up-historical-execution-logs-from-systemd/">about finding old systemd logs</a>, and another about <a href="https://msfjarvis.dev/notes/debugging-how-i-accidentally-blocked-someone-from-using-my-app/">debugging</a> what part of my network stack had accidentally blocked a Claw user. I finally published the post I had been working on for the past 2 months: <a href="posts/rewriting-claw-html-parser-for-over-the-air-updates/">“Rewriting Claw’s HTML parser for over-the-air updates”</a> recounts my experience of porting my app Claw to use the <a href="https://github.com/cashapp/zipline">Zipline</a> library. I rewrote the post multiple times, but I’m very proud of how it came together in the end. Huge thanks to <a href="https://github.com/swapnilmadavi">Swapnil</a> who reviewed the final draft, it was very nice to see him walk into the office reading it :’D</p>
<h1 id="cooking">Cooking</h1>
<p>Home cooking has been relatively slow this week as I mostly eat breakfast in nearby South Indian restaurants while returning from the gym, and wasn’t feeling up for dinner on multiple nights. Yash’s been making a bunch of Instagram stuff as he tries to figure out a long term solution for breakfast, check out <a href="https://yashgarg.dev/weekly-notes-29-2026/#cooking">his weeknote</a> for some of those. That mousse really is the truth!</p>
<p>We did make these tasty paneer rolls, albeit by getting a little lazy and ordering pre-made parathas 😅</p>
<figure data-image-modal-root="" class="half" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/paneer-rolls.Daq2g3Jf.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/paneer-rolls.Daq2g3Jf.webp" data-pswp-width="3072" data-pswp-height="4080" data-pswp-caption="First time making a mint chutney in this house, I think I'll try to always have a small batch in the fridge going forward" aria-label="Three paneer rolls on a steel plate with green chutney." data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/paneer-rolls.Daq2g3Jf.webp" alt="Three paneer rolls on a steel plate with green chutney." loading="lazy" decoding="async" width="3072" height="4080" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">First time making a mint chutney in this house, I think I'll try to always have a small batch in the fridge going forward</figcaption></figure>
<p>I made a batch of hummus this morning (after putting it off for 2 days…), so hopefully next week will involve some Mediterranean forays :D</p>]]></content:encoded>
    </item>
    <item>
      <title>Rewriting Claw's HTML parser for over-the-air updates</title>
      <link>https://msfjarvis.dev/posts/rewriting-claw-html-parser-for-over-the-air-updates/</link>
      <guid>https://msfjarvis.dev/posts/rewriting-claw-html-parser-for-over-the-air-updates/</guid>
      <description>Struggling through a brand new framework so I can hotfix my app faster</description>
      <pubDate>Fri, 17 Jul 2026 13:34:00 GMT</pubDate>
      <content:encoded><![CDATA[<div class="markdown-alert markdown-alert-note" dir="auto">
<p class="markdown-alert-title" dir="auto"><svg class="octicon" viewBox="0 0 16 16" width="16" height="16" aria-hidden="true"><path d="M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"></path></svg>NOTE</p>
<p>I used LLMs to help debug some of the code explained below, and ended up throwing away a lot of it while re-reviewing that work as part of writing this post. People have strong opinions on the use of LLMs and I don’t want them to feel misled by discovering partway through that this work involved an LLM, so here’s your PSA.</p>
</div>
<p>First, some background. Claw is an Android app for browsing the linkblogging community known as <a href="https://lobste.rs">Lobsters</a>. For years, the app relied on a JSON API to interact with the site. Some months ago, I came across <a href="https://github.com/lobsters/lobsters/issues/1663#issuecomment-3074472781">a GitHub comment</a> from the site admin explaining that the JSON API is considered a Ruby on Rails misfeature and not something he supports for external integrations. I don’t expect it to ever fully disappear since many other third-party integrations rely on it, but I decided I should probably look into options anyway. I <a href="https://github.com/msfjarvis/compose-lobsters/issues/929">filed an issue</a> with my initial findings then pretty much forgot about it for over half a year.</p>
<hr>
<h2 id="the-problems-with-html-parsing">The problems with HTML parsing</h2>
<p>In May 2026 I decided to revisit the problem and make some progress on this front, since I had also added the ability to log into the site through the app now and wanted to start offering more interactive features that would need parsing HTML anyway. The result of it was <a href="https://github.com/msfjarvis/compose-lobsters/pull/1162">this massive PR</a> where my ability to comprehend CSS selectors was tested repeatedly and I did not exactly score passing marks. Unsurprisingly, I broke some things<sub><a href="https://github.com/msfjarvis/compose-lobsters/commit/875b41d0bfa5be82c34807c07f6f7b03877f0a87">[1]</a> <a href="https://github.com/msfjarvis/compose-lobsters/commit/1b6ae68e0d4a27d99709a09b7ef759f6bcda5b17">[2]</a></sub> in the process, but it all came together in the end, and I shipped these changes towards the end of that month.</p>
<p>Anybody who has had to write a scraper can already see the next line coming: Lobsters made a change to the site markup exactly 2 days after I released that code. I scrambled to <a href="https://github.com/msfjarvis/compose-lobsters/commit/7ec580d9c63d56fc863690dbb440a9a9e85bcf36">release a fix</a> (shoutout to Firefox DevTools for introducing me to this horror: <code>div.byline &gt; a[href^=/~]:not([tabindex]):not([aria-hidden=true])</code>), which made me think there had to be a better solution to this problem that didn’t involve waiting hours or days for Google Play Store.</p>
<h2 id="looking-for-a-faster-deployment-model">Looking for a faster deployment model</h2>
<p>The React Native folks have had this solved for years through <a href="https://expo.dev">Expo</a>, which offers a cloud-based service called <a href="https://docs.expo.dev/eas-update/introduction/">EAS Update</a> that can push updated JavaScript, assets and images to an existing build of a React Native app without needing to go through an app store. How do we bring this to native Android apps?</p>
<p>This is the question that Cash App seems to have asked themselves as well, and their answer is called <a href="https://github.com/cashapp/Zipline">Zipline</a>. It’s a Gradle plugin and Kotlin Multiplatform library that enables you to run Kotlin/JS libraries on Kotlin/JVM and Kotlin/Native apps, using the <a href="https://bellard.org/quickjs/">QuickJS</a> embeddable JavaScript engine. If you can compile your code to JavaScript, you can leverage Zipline to update it over the air in a reliable and secure manner.</p>
<p>Zipline offered everything I was looking for, and since I was predominantly using Kotlin/JS-capable libraries for the HTML parsing it seemed like a no-brainer to give this a go. What follows is a deep dive through false leads about code size, stack overflows, and cache invalidation.</p>
<h2 id="the-great-zipline-migration">The great Zipline migration</h2>
<div class="markdown-alert markdown-alert-warning" dir="auto">
<p class="markdown-alert-title" dir="auto"><svg class="octicon" viewBox="0 0 16 16" width="16" height="16" aria-hidden="true"><path d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path></svg>WARNING</p>
<p>This is a novice stumbling his way through an unfamiliar framework and paradigm, who will unsurprisingly be misled by a clanker and make a heroic recovery. Please exercise caution/patience.</p>
</div>
<p>My dependencies were all ready for Kotlin/JS, but my own code was woefully Android-specific and needed some refactoring. Before I started on this, I had to first decide on how I wanted to split the responsibilities between the K/JS “guest” and the Android “host”. This is what I ended up with:</p>
<style>
  .mermaid-modal {
    margin: 1.5rem 0;
  }

  .mermaid-modal__figure {
    margin: 0;
  }

  .mermaid-modal__preview {
    display: block;
    overflow-x: auto;
  }

  .mermaid-modal__preview svg {
    display: block;
    max-width: 100%;
    height: auto;
    margin-inline: auto;
  }

  .mermaid-modal__actions {
    display: flex;
    justify-content: center;
    margin-top: 0.75rem;
  }

  .mermaid-modal__open-button {
    appearance: none;
    border: 1px solid var(--border);
    background: var(--bg-subtle);
    color: var(--text);
    border-radius: 999px;
    padding: 0.45rem 0.8rem;
    font: inherit;
    cursor: pointer;
  }

  .mermaid-modal__open-button:hover {
    border-color: var(--accent);
    color: var(--accent);
  }

  .mermaid-modal__dialog {
    position: fixed;
    inset: 0;
    z-index: 40000;
    display: grid;
    place-items: center;
    padding: 1.5rem;
    opacity: 0;
    visibility: hidden;
    pointer-events: none;
    transition: opacity 220ms ease, visibility 220ms ease;
  }

  .mermaid-modal__dialog[data-open='true'] {
    opacity: 1;
    visibility: visible;
    pointer-events: auto;
  }

  .mermaid-modal__overlay {
    position: absolute;
    inset: 0;
    border: 0;
    background: rgb(0 0 0 / 0.72);
    backdrop-filter: blur(10px);
    cursor: pointer;
  }

  .mermaid-modal__sheet {
    position: relative;
    width: min(100%, 1400px);
    max-height: calc(100vh - 3rem);
    display: grid;
    gap: 0.85rem;
    transform: translateY(1rem) scale(0.985);
    opacity: 0;
    transition: transform 260ms ease, opacity 260ms ease;
  }

  .mermaid-modal__dialog[data-open='true'] .mermaid-modal__sheet {
    transform: translateY(0) scale(1);
    opacity: 1;
  }

  .mermaid-modal__content {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 100%;
  }

  .mermaid-modal__content svg {
    display: block;
    width: min(100%, 1400px);
    max-width: 100%;
    max-height: calc(100vh - 8rem);
    height: auto;
    margin-inline: auto;
  }

  .mermaid-modal__close {
    position: absolute;
    top: 0.75rem;
    right: 0.75rem;
    z-index: 1;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    border: 1px solid color-mix(in srgb, white 24%, transparent);
    border-radius: 999px;
    background: rgb(17 17 17 / 0.55);
    color: white;
    padding: 0.6rem;
    cursor: pointer;
    backdrop-filter: blur(12px);
  }

  .mermaid-modal__close:focus-visible,
  .mermaid-modal__open-button:focus-visible {
    outline: 2px solid var(--accent);
    outline-offset: 2px;
  }
</style><img src="data:image/svg+xml;base64,PHN2ZyBpZD0ic2F0dGVyaS1tZXJtYWlkLTEiIHdpZHRoPSIxMDAlIiA6eG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBzdHlsZT0iY29sb3Itc2NoZW1lOmxpZ2h0IGRhcms7bWF4LXdpZHRoOjk2OHB4O2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZiIgdmlld0JveD0iLTUwIC0xMCA5NjggNjc1IiByb2xlPSJncmFwaGljcy1kb2N1bWVudCBkb2N1bWVudCIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIGFyaWEtcm9sZWRlc2NyaXB0aW9uPSJzZXF1ZW5jZSIgY2xhc3M9Im1lcm1haWQtZGlhZ3JhbSI+PGc+PHJlY3QgeD0iNzE4IiB5PSI1ODkiIGZpbGw9IiNmN2Y3ZjciIHN0cm9rZT0iIzQ0NDQ0NCIgd2lkdGg9IjE1MCIgaGVpZ2h0PSI2NSIgbmFtZT0iU2VydmVyIiByeD0iMyIgcnk9IjMiIGNsYXNzPSJhY3RvciBhY3Rvci1ib3R0b20iPjwvcmVjdD48dGV4dCB4PSI3OTMiIHk9IjYyMS41IiBzdHlsZT0idGV4dC1hbmNob3I6bWlkZGxlO2ZvbnQtc2l6ZToxNnB4O2ZvbnQtd2VpZ2h0OjQwMCIgZG9taW5hbnQtYmFzZWxpbmU9ImNlbnRyYWwiIGFsaWdubWVudC1iYXNlbGluZT0iY2VudHJhbCIgY2xhc3M9ImFjdG9yIGFjdG9yLWJveCI+PHRzcGFuIHg9Ijc5MyIgZHk9IjAiPlNlcnZlcjwvdHNwYW4+PC90ZXh0PjwvZz48Zz48cmVjdCB4PSI1MTgiIHk9IjU4OSIgZmlsbD0iI2Y3ZjdmNyIgc3Ryb2tlPSIjNDQ0NDQ0IiB3aWR0aD0iMTUwIiBoZWlnaHQ9IjY1IiBuYW1lPSJKYXZhU2NyaXB0IiByeD0iMyIgcnk9IjMiIGNsYXNzPSJhY3RvciBhY3Rvci1ib3R0b20iPjwvcmVjdD48dGV4dCB4PSI1OTMiIHk9IjYyMS41IiBzdHlsZT0idGV4dC1hbmNob3I6bWlkZGxlO2ZvbnQtc2l6ZToxNnB4O2ZvbnQtd2VpZ2h0OjQwMCIgZG9taW5hbnQtYmFzZWxpbmU9ImNlbnRyYWwiIGFsaWdubWVudC1iYXNlbGluZT0iY2VudHJhbCIgY2xhc3M9ImFjdG9yIGFjdG9yLWJveCI+PHRzcGFuIHg9IjU5MyIgZHk9IjAiPkphdmFTY3JpcHQ8L3RzcGFuPjwvdGV4dD48L2c+PGc+PHJlY3QgeD0iMjEwIiB5PSI1ODkiIGZpbGw9IiNmN2Y3ZjciIHN0cm9rZT0iIzQ0NDQ0NCIgd2lkdGg9IjE1MCIgaGVpZ2h0PSI2NSIgbmFtZT0iWmlwbGluZSIgcng9IjMiIHJ5PSIzIiBjbGFzcz0iYWN0b3IgYWN0b3ItYm90dG9tIj48L3JlY3Q+PHRleHQgeD0iMjg1IiB5PSI2MjEuNSIgc3R5bGU9InRleHQtYW5jaG9yOm1pZGRsZTtmb250LXNpemU6MTZweDtmb250LXdlaWdodDo0MDAiIGRvbWluYW50LWJhc2VsaW5lPSJjZW50cmFsIiBhbGlnbm1lbnQtYmFzZWxpbmU9ImNlbnRyYWwiIGNsYXNzPSJhY3RvciBhY3Rvci1ib3giPjx0c3BhbiB4PSIyODUiIGR5PSIwIj5aaXBsaW5lPC90c3Bhbj48L3RleHQ+PC9nPjxnPjxyZWN0IHg9IjAiIHk9IjU4OSIgZmlsbD0iI2Y3ZjdmNyIgc3Ryb2tlPSIjNDQ0NDQ0IiB3aWR0aD0iMTUwIiBoZWlnaHQ9IjY1IiBuYW1lPSJBbmRyb2lkIiByeD0iMyIgcnk9IjMiIGNsYXNzPSJhY3RvciBhY3Rvci1ib3R0b20iPjwvcmVjdD48dGV4dCB4PSI3NSIgeT0iNjIxLjUiIHN0eWxlPSJ0ZXh0LWFuY2hvcjptaWRkbGU7Zm9udC1zaXplOjE2cHg7Zm9udC13ZWlnaHQ6NDAwIiBkb21pbmFudC1iYXNlbGluZT0iY2VudHJhbCIgYWxpZ25tZW50LWJhc2VsaW5lPSJjZW50cmFsIiBjbGFzcz0iYWN0b3IgYWN0b3ItYm94Ij48dHNwYW4geD0iNzUiIGR5PSIwIj5BbmRyb2lkPC90c3Bhbj48L3RleHQ+PC9nPjxnPjxsaW5lIGlkPSJhY3RvcjMiIHgxPSI3OTMiIHkxPSI2NSIgeDI9Ijc5MyIgeTI9IjU4OSIgc3Ryb2tlPSIjZThlOGU4IiBuYW1lPSJTZXJ2ZXIiIGNsYXNzPSJhY3Rvci1saW5lIDIwMCIgc3Ryb2tlLXdpZHRoPSIwLjVweCIgZGF0YS1ldD0ibGlmZS1saW5lIiBkYXRhLWlkPSJTZXJ2ZXIiPjwvbGluZT48ZyBpZD0icm9vdC0zIiBkYXRhLWV0PSJwYXJ0aWNpcGFudCIgZGF0YXR5cGU9InBhcnRpY2lwYW50IiBkYXRhLWlkPSJTZXJ2ZXIiPjxyZWN0IHg9IjcxOCIgeT0iMCIgZmlsbD0iI2Y3ZjdmNyIgc3Ryb2tlPSIjNDQ0NDQ0IiB3aWR0aD0iMTUwIiBoZWlnaHQ9IjY1IiBuYW1lPSJTZXJ2ZXIiIHJ4PSIzIiByeT0iMyIgY2xhc3M9ImFjdG9yIGFjdG9yLXRvcCI+PC9yZWN0Pjx0ZXh0IHg9Ijc5MyIgeT0iMzIuNSIgc3R5bGU9InRleHQtYW5jaG9yOm1pZGRsZTtmb250LXNpemU6MTZweDtmb250LXdlaWdodDo0MDAiIGRvbWluYW50LWJhc2VsaW5lPSJjZW50cmFsIiBhbGlnbm1lbnQtYmFzZWxpbmU9ImNlbnRyYWwiIGNsYXNzPSJhY3RvciBhY3Rvci1ib3giPjx0c3BhbiB4PSI3OTMiIGR5PSIwIj5TZXJ2ZXI8L3RzcGFuPjwvdGV4dD48L2c+PC9nPjxnPjxsaW5lIGlkPSJhY3RvcjIiIHgxPSI1OTMiIHkxPSI2NSIgeDI9IjU5MyIgeTI9IjU4OSIgc3Ryb2tlPSIjZThlOGU4IiBuYW1lPSJKYXZhU2NyaXB0IiBjbGFzcz0iYWN0b3ItbGluZSAyMDAiIHN0cm9rZS13aWR0aD0iMC41cHgiIGRhdGEtZXQ9ImxpZmUtbGluZSIgZGF0YS1pZD0iSmF2YVNjcmlwdCI+PC9saW5lPjxnIGlkPSJyb290LTIiIGRhdGEtZXQ9InBhcnRpY2lwYW50IiBkYXRhdHlwZT0icGFydGljaXBhbnQiIGRhdGEtaWQ9IkphdmFTY3JpcHQiPjxyZWN0IHg9IjUxOCIgeT0iMCIgZmlsbD0iI2Y3ZjdmNyIgc3Ryb2tlPSIjNDQ0NDQ0IiB3aWR0aD0iMTUwIiBoZWlnaHQ9IjY1IiBuYW1lPSJKYXZhU2NyaXB0IiByeD0iMyIgcnk9IjMiIGNsYXNzPSJhY3RvciBhY3Rvci10b3AiPjwvcmVjdD48dGV4dCB4PSI1OTMiIHk9IjMyLjUiIHN0eWxlPSJ0ZXh0LWFuY2hvcjptaWRkbGU7Zm9udC1zaXplOjE2cHg7Zm9udC13ZWlnaHQ6NDAwIiBkb21pbmFudC1iYXNlbGluZT0iY2VudHJhbCIgYWxpZ25tZW50LWJhc2VsaW5lPSJjZW50cmFsIiBjbGFzcz0iYWN0b3IgYWN0b3ItYm94Ij48dHNwYW4geD0iNTkzIiBkeT0iMCI+SmF2YVNjcmlwdDwvdHNwYW4+PC90ZXh0PjwvZz48L2c+PGc+PGxpbmUgaWQ9ImFjdG9yMSIgeDE9IjI4NSIgeTE9IjY1IiB4Mj0iMjg1IiB5Mj0iNTg5IiBzdHJva2U9IiNlOGU4ZTgiIG5hbWU9IlppcGxpbmUiIGNsYXNzPSJhY3Rvci1saW5lIDIwMCIgc3Ryb2tlLXdpZHRoPSIwLjVweCIgZGF0YS1ldD0ibGlmZS1saW5lIiBkYXRhLWlkPSJaaXBsaW5lIj48L2xpbmU+PGcgaWQ9InJvb3QtMSIgZGF0YS1ldD0icGFydGljaXBhbnQiIGRhdGF0eXBlPSJwYXJ0aWNpcGFudCIgZGF0YS1pZD0iWmlwbGluZSI+PHJlY3QgeD0iMjEwIiB5PSIwIiBmaWxsPSIjZjdmN2Y3IiBzdHJva2U9IiM0NDQ0NDQiIHdpZHRoPSIxNTAiIGhlaWdodD0iNjUiIG5hbWU9IlppcGxpbmUiIHJ4PSIzIiByeT0iMyIgY2xhc3M9ImFjdG9yIGFjdG9yLXRvcCI+PC9yZWN0Pjx0ZXh0IHg9IjI4NSIgeT0iMzIuNSIgc3R5bGU9InRleHQtYW5jaG9yOm1pZGRsZTtmb250LXNpemU6MTZweDtmb250LXdlaWdodDo0MDAiIGRvbWluYW50LWJhc2VsaW5lPSJjZW50cmFsIiBhbGlnbm1lbnQtYmFzZWxpbmU9ImNlbnRyYWwiIGNsYXNzPSJhY3RvciBhY3Rvci1ib3giPjx0c3BhbiB4PSIyODUiIGR5PSIwIj5aaXBsaW5lPC90c3Bhbj48L3RleHQ+PC9nPjwvZz48Zz48bGluZSBpZD0iYWN0b3IwIiB4MT0iNzUiIHkxPSI2NSIgeDI9Ijc1IiB5Mj0iNTg5IiBzdHJva2U9IiNlOGU4ZTgiIG5hbWU9IkFuZHJvaWQiIGNsYXNzPSJhY3Rvci1saW5lIDIwMCIgc3Ryb2tlLXdpZHRoPSIwLjVweCIgZGF0YS1ldD0ibGlmZS1saW5lIiBkYXRhLWlkPSJBbmRyb2lkIj48L2xpbmU+PGcgaWQ9InJvb3QtMCIgZGF0YS1ldD0icGFydGljaXBhbnQiIGRhdGF0eXBlPSJwYXJ0aWNpcGFudCIgZGF0YS1pZD0iQW5kcm9pZCI+PHJlY3QgeD0iMCIgeT0iMCIgZmlsbD0iI2Y3ZjdmNyIgc3Ryb2tlPSIjNDQ0NDQ0IiB3aWR0aD0iMTUwIiBoZWlnaHQ9IjY1IiBuYW1lPSJBbmRyb2lkIiByeD0iMyIgcnk9IjMiIGNsYXNzPSJhY3RvciBhY3Rvci10b3AiPjwvcmVjdD48dGV4dCB4PSI3NSIgeT0iMzIuNSIgc3R5bGU9InRleHQtYW5jaG9yOm1pZGRsZTtmb250LXNpemU6MTZweDtmb250LXdlaWdodDo0MDAiIGRvbWluYW50LWJhc2VsaW5lPSJjZW50cmFsIiBhbGlnbm1lbnQtYmFzZWxpbmU9ImNlbnRyYWwiIGNsYXNzPSJhY3RvciBhY3Rvci1ib3giPjx0c3BhbiB4PSI3NSIgZHk9IjAiPkFuZHJvaWQ8L3RzcGFuPjwvdGV4dD48L2c+PC9nPjxzdHlsZT4jc2F0dGVyaS1tZXJtYWlkLTF7Zm9udC1mYW1pbHk6InRyZWJ1Y2hldCBtcyIsdmVyZGFuYSxhcmlhbCxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4O2ZpbGw6IzQ0NDQ0NDt9QGtleWZyYW1lcyBlZGdlLWFuaW1hdGlvbi1mcmFtZXtmcm9te3N0cm9rZS1kYXNob2Zmc2V0OjA7fX1Aa2V5ZnJhbWVzIGRhc2h7dG97c3Ryb2tlLWRhc2hvZmZzZXQ6MDt9fSNzYXR0ZXJpLW1lcm1haWQtMSAuZWRnZS1hbmltYXRpb24tc2xvd3tzdHJva2UtZGFzaGFycmF5OjksNSFpbXBvcnRhbnQ7c3Ryb2tlLWRhc2hvZmZzZXQ6OTAwO2FuaW1hdGlvbjpkYXNoIDUwcyBsaW5lYXIgaW5maW5pdGU7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7fSNzYXR0ZXJpLW1lcm1haWQtMSAuZWRnZS1hbmltYXRpb24tZmFzdHtzdHJva2UtZGFzaGFycmF5OjksNSFpbXBvcnRhbnQ7c3Ryb2tlLWRhc2hvZmZzZXQ6OTAwO2FuaW1hdGlvbjpkYXNoIDIwcyBsaW5lYXIgaW5maW5pdGU7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7fSNzYXR0ZXJpLW1lcm1haWQtMSAuZXJyb3ItaWNvbntmaWxsOiM1NTIyMjI7fSNzYXR0ZXJpLW1lcm1haWQtMSAuZXJyb3ItdGV4dHtmaWxsOiM1NTIyMjI7c3Ryb2tlOiM1NTIyMjI7fSNzYXR0ZXJpLW1lcm1haWQtMSAuZWRnZS10aGlja25lc3Mtbm9ybWFse3N0cm9rZS13aWR0aDoxcHg7fSNzYXR0ZXJpLW1lcm1haWQtMSAuZWRnZS10aGlja25lc3MtdGhpY2t7c3Ryb2tlLXdpZHRoOjMuNXB4O30jc2F0dGVyaS1tZXJtYWlkLTEgLmVkZ2UtcGF0dGVybi1zb2xpZHtzdHJva2UtZGFzaGFycmF5OjA7fSNzYXR0ZXJpLW1lcm1haWQtMSAuZWRnZS10aGlja25lc3MtaW52aXNpYmxle3N0cm9rZS13aWR0aDowO2ZpbGw6bm9uZTt9I3NhdHRlcmktbWVybWFpZC0xIC5lZGdlLXBhdHRlcm4tZGFzaGVke3N0cm9rZS1kYXNoYXJyYXk6Mzt9I3NhdHRlcmktbWVybWFpZC0xIC5lZGdlLXBhdHRlcm4tZG90dGVke3N0cm9rZS1kYXNoYXJyYXk6Mjt9I3NhdHRlcmktbWVybWFpZC0xIC5tYXJrZXJ7ZmlsbDojNDQ0NDQ0O3N0cm9rZTojNDQ0NDQ0O30jc2F0dGVyaS1tZXJtYWlkLTEgLm1hcmtlci5jcm9zc3tzdHJva2U6IzQ0NDQ0NDt9I3NhdHRlcmktbWVybWFpZC0xIHN2Z3tmb250LWZhbWlseToidHJlYnVjaGV0IG1zIix2ZXJkYW5hLGFyaWFsLHNhbnMtc2VyaWY7Zm9udC1zaXplOjE2cHg7fSNzYXR0ZXJpLW1lcm1haWQtMSBwe21hcmdpbjowO30jc2F0dGVyaS1tZXJtYWlkLTEgLmFjdG9ye3N0cm9rZTojZThlOGU4O2ZpbGw6I2Y3ZjdmNztzdHJva2Utd2lkdGg6MTt9I3NhdHRlcmktbWVybWFpZC0xIHRleHQuYWN0b3ImZ3Q7dHNwYW57ZmlsbDojMTExMTExO3N0cm9rZTpub25lO30jc2F0dGVyaS1tZXJtYWlkLTEgLmFjdG9yLWxpbmV7c3Ryb2tlOiM0NDQ0NDQ7fSNzYXR0ZXJpLW1lcm1haWQtMSAuaW5uZXJBcmN7c3Ryb2tlLXdpZHRoOjEuNTtzdHJva2UtZGFzaGFycmF5Om5vbmU7fSNzYXR0ZXJpLW1lcm1haWQtMSAubWVzc2FnZUxpbmUwe3N0cm9rZS13aWR0aDoxLjU7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZTojNDQ0NDQ0O30jc2F0dGVyaS1tZXJtYWlkLTEgLm1lc3NhZ2VMaW5lMXtzdHJva2Utd2lkdGg6MS41O3N0cm9rZS1kYXNoYXJyYXk6MiwyO3N0cm9rZTojNDQ0NDQ0O30jc2F0dGVyaS1tZXJtYWlkLTEgW2lkJD0iLWFycm93aGVhZCJdIHBhdGh7ZmlsbDojNDQ0NDQ0O3N0cm9rZTojNDQ0NDQ0O30jc2F0dGVyaS1tZXJtYWlkLTEgLnNlcXVlbmNlTnVtYmVye2ZpbGw6d2hpdGU7fSNzYXR0ZXJpLW1lcm1haWQtMSBbaWQkPSItc2VxdWVuY2VudW1iZXIiXXtmaWxsOiM0NDQ0NDQ7fSNzYXR0ZXJpLW1lcm1haWQtMSBbaWQkPSItY3Jvc3NoZWFkIl0gcGF0aHtmaWxsOiM0NDQ0NDQ7c3Ryb2tlOiM0NDQ0NDQ7fSNzYXR0ZXJpLW1lcm1haWQtMSAubWVzc2FnZVRleHR7ZmlsbDojNDQ0NDQ0O3N0cm9rZTpub25lO30jc2F0dGVyaS1tZXJtYWlkLTEgLmxhYmVsQm94e3N0cm9rZTojN2EzZDZlO2ZpbGw6I2Y3ZjdmNztmaWx0ZXI6bm9uZTt9I3NhdHRlcmktbWVybWFpZC0xIC5sYWJlbFRleHQsI3NhdHRlcmktbWVybWFpZC0xIC5sYWJlbFRleHQmZ3Q7dHNwYW57ZmlsbDojMTExMTExO3N0cm9rZTpub25lO30jc2F0dGVyaS1tZXJtYWlkLTEgLmxvb3BUZXh0LCNzYXR0ZXJpLW1lcm1haWQtMSAubG9vcFRleHQmZ3Q7dHNwYW57ZmlsbDojMTExMTExO3N0cm9rZTpub25lO30jc2F0dGVyaS1tZXJtYWlkLTEgLnNlY3Rpb25UaXRsZSwjc2F0dGVyaS1tZXJtYWlkLTEgLnNlY3Rpb25UaXRsZSZndDt0c3BhbntmaWxsOiMxMTExMTE7c3Ryb2tlOm5vbmU7fSNzYXR0ZXJpLW1lcm1haWQtMSAubG9vcExpbmV7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtZGFzaGFycmF5OjIsMjtzdHJva2U6IzdhM2Q2ZTtmaWxsOiM3YTNkNmU7fSNzYXR0ZXJpLW1lcm1haWQtMSAubm90ZXtzdHJva2U6IzdhM2Q2ZTtmaWxsOiNlMGM4ZGI7fSNzYXR0ZXJpLW1lcm1haWQtMSAubm90ZVRleHQsI3NhdHRlcmktbWVybWFpZC0xIC5ub3RlVGV4dCZndDt0c3BhbntmaWxsOiMxMTExMTE7c3Ryb2tlOm5vbmU7Zm9udC13ZWlnaHQ6bm9ybWFsO30jc2F0dGVyaS1tZXJtYWlkLTEgLmFjdGl2YXRpb24we2ZpbGw6I2ZmZmZmZjtzdHJva2U6I2U4ZThlODt9I3NhdHRlcmktbWVybWFpZC0xIC5hY3RpdmF0aW9uMXtmaWxsOiNmZmZmZmY7c3Ryb2tlOiNlOGU4ZTg7fSNzYXR0ZXJpLW1lcm1haWQtMSAuYWN0aXZhdGlvbjJ7ZmlsbDojZmZmZmZmO3N0cm9rZTojZThlOGU4O30jc2F0dGVyaS1tZXJtYWlkLTEgLmFjdG9yUG9wdXBNZW51e3Bvc2l0aW9uOmFic29sdXRlO30jc2F0dGVyaS1tZXJtYWlkLTEgLmFjdG9yUG9wdXBNZW51UGFuZWx7cG9zaXRpb246YWJzb2x1dGU7ZmlsbDojZjdmN2Y3O2JveC1zaGFkb3c6MHB4IDhweCAxNnB4IDBweCByZ2JhKDAsMCwwLDAuMik7ZmlsdGVyOmRyb3Atc2hhZG93KDNweCA1cHggMnB4IHJnYigwIDAgMCAvIDAuNCkpO30jc2F0dGVyaS1tZXJtYWlkLTEgLmFjdG9yLW1hbiBsaW5le3N0cm9rZTojZThlOGU4O2ZpbGw6I2Y3ZjdmNzt9I3NhdHRlcmktbWVybWFpZC0xIC5hY3Rvci1tYW4gY2lyY2xlLCNzYXR0ZXJpLW1lcm1haWQtMSBsaW5le3N0cm9rZTojZThlOGU4O2ZpbGw6I2Y3ZjdmNztzdHJva2Utd2lkdGg6MnB4O30jc2F0dGVyaS1tZXJtYWlkLTEgZyByZWN0LnJlY3R7ZmlsdGVyOmRyb3Atc2hhZG93KDFweCAycHggMnB4IHJnYmEoMTg1LCAxODUsIDE4NSwgMSkpO3N0cm9rZTojN2EzZDZlO30jc2F0dGVyaS1tZXJtYWlkLTEgOnJvb3R7LS1tZXJtYWlkLWZvbnQtZmFtaWx5OiJ0cmVidWNoZXQgbXMiLHZlcmRhbmEsYXJpYWwsc2Fucy1zZXJpZjt9PC9zdHlsZT48Zz48L2c+PGRlZnM+PHN5bWJvbCBpZD0ic2F0dGVyaS1tZXJtYWlkLTEtY29tcHV0ZXIiIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCI+PHBhdGggdHJhbnNmb3JtPSJzY2FsZSguNSkiIGQ9Ik0yIDJ2MTNoMjB2LTEzaC0yMHptMTggMTFoLTE2di05aDE2djl6bS0xMC4yMjggNmwuNDY2LTFoMy41MjRsLjQ2NyAxaC00LjQ1N3ptMTQuMjI4IDNoLTI0bDItNmgyLjEwNGwtMS4zMyA0aDE4LjQ1bC0xLjI5Ny00aDIuMDczbDIgNnptLTUtMTBoLTE0di03aDE0djd6Ij48L3BhdGg+PC9zeW1ib2w+PC9kZWZzPjxkZWZzPjxzeW1ib2wgaWQ9InNhdHRlcmktbWVybWFpZC0xLWRhdGFiYXNlIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCI+PHBhdGggdHJhbnNmb3JtPSJzY2FsZSguNSkiIGQ9Ik0xMi4yNTguMDAxbC4yNTYuMDA0LjI1NS4wMDUuMjUzLjAwOC4yNTEuMDEuMjQ5LjAxMi4yNDcuMDE1LjI0Ni4wMTYuMjQyLjAxOS4yNDEuMDIuMjM5LjAyMy4yMzYuMDI0LjIzMy4wMjcuMjMxLjAyOC4yMjkuMDMxLjIyNS4wMzIuMjIzLjAzNC4yMi4wMzYuMjE3LjAzOC4yMTQuMDQuMjExLjA0MS4yMDguMDQzLjIwNS4wNDUuMjAxLjA0Ni4xOTguMDQ4LjE5NC4wNS4xOTEuMDUxLjE4Ny4wNTMuMTgzLjA1NC4xOC4wNTYuMTc1LjA1Ny4xNzIuMDU5LjE2OC4wNi4xNjMuMDYxLjE2LjA2My4xNTUuMDY0LjE1LjA2Ni4wNzQuMDMzLjA3My4wMzMuMDcxLjAzNC4wNy4wMzQuMDY5LjAzNS4wNjguMDM1LjA2Ny4wMzUuMDY2LjAzNS4wNjQuMDM2LjA2NC4wMzYuMDYyLjAzNi4wNi4wMzYuMDYuMDM3LjA1OC4wMzcuMDU4LjAzNy4wNTUuMDM4LjA1NS4wMzguMDUzLjAzOC4wNTIuMDM4LjA1MS4wMzkuMDUuMDM5LjA0OC4wMzkuMDQ3LjAzOS4wNDUuMDQuMDQ0LjA0LjA0My4wNC4wNDEuMDQuMDQuMDQxLjAzOS4wNDEuMDM3LjA0MS4wMzYuMDQxLjAzNC4wNDEuMDMzLjA0Mi4wMzIuMDQyLjAzLjA0Mi4wMjkuMDQyLjAyNy4wNDIuMDI2LjA0My4wMjQuMDQzLjAyMy4wNDMuMDIxLjA0My4wMi4wNDMuMDE4LjA0NC4wMTcuMDQzLjAxNS4wNDQuMDEzLjA0NC4wMTIuMDQ0LjAxMS4wNDUuMDA5LjA0NC4wMDcuMDQ1LjAwNi4wNDUuMDA0LjA0NS4wMDIuMDQ1LjAwMS4wNDV2MTdsLS4wMDEuMDQ1LS4wMDIuMDQ1LS4wMDQuMDQ1LS4wMDYuMDQ1LS4wMDcuMDQ1LS4wMDkuMDQ0LS4wMTEuMDQ1LS4wMTIuMDQ0LS4wMTMuMDQ0LS4wMTUuMDQ0LS4wMTcuMDQzLS4wMTguMDQ0LS4wMi4wNDMtLjAyMS4wNDMtLjAyMy4wNDMtLjAyNC4wNDMtLjAyNi4wNDMtLjAyNy4wNDItLjAyOS4wNDItLjAzLjA0Mi0uMDMyLjA0Mi0uMDMzLjA0Mi0uMDM0LjA0MS0uMDM2LjA0MS0uMDM3LjA0MS0uMDM5LjA0MS0uMDQuMDQxLS4wNDEuMDQtLjA0My4wNC0uMDQ0LjA0LS4wNDUuMDQtLjA0Ny4wMzktLjA0OC4wMzktLjA1LjAzOS0uMDUxLjAzOS0uMDUyLjAzOC0uMDUzLjAzOC0uMDU1LjAzOC0uMDU1LjAzOC0uMDU4LjAzNy0uMDU4LjAzNy0uMDYuMDM3LS4wNi4wMzYtLjA2Mi4wMzYtLjA2NC4wMzYtLjA2NC4wMzYtLjA2Ni4wMzUtLjA2Ny4wMzUtLjA2OC4wMzUtLjA2OS4wMzUtLjA3LjAzNC0uMDcxLjAzNC0uMDczLjAzMy0uMDc0LjAzMy0uMTUuMDY2LS4xNTUuMDY0LS4xNi4wNjMtLjE2My4wNjEtLjE2OC4wNi0uMTcyLjA1OS0uMTc1LjA1Ny0uMTguMDU2LS4xODMuMDU0LS4xODcuMDUzLS4xOTEuMDUxLS4xOTQuMDUtLjE5OC4wNDgtLjIwMS4wNDYtLjIwNS4wNDUtLjIwOC4wNDMtLjIxMS4wNDEtLjIxNC4wNC0uMjE3LjAzOC0uMjIuMDM2LS4yMjMuMDM0LS4yMjUuMDMyLS4yMjkuMDMxLS4yMzEuMDI4LS4yMzMuMDI3LS4yMzYuMDI0LS4yMzkuMDIzLS4yNDEuMDItLjI0Mi4wMTktLjI0Ni4wMTYtLjI0Ny4wMTUtLjI0OS4wMTItLjI1MS4wMS0uMjUzLjAwOC0uMjU1LjAwNS0uMjU2LjAwNC0uMjU4LjAwMS0uMjU4LS4wMDEtLjI1Ni0uMDA0LS4yNTUtLjAwNS0uMjUzLS4wMDgtLjI1MS0uMDEtLjI0OS0uMDEyLS4yNDctLjAxNS0uMjQ1LS4wMTYtLjI0My0uMDE5LS4yNDEtLjAyLS4yMzgtLjAyMy0uMjM2LS4wMjQtLjIzNC0uMDI3LS4yMzEtLjAyOC0uMjI4LS4wMzEtLjIyNi0uMDMyLS4yMjMtLjAzNC0uMjItLjAzNi0uMjE3LS4wMzgtLjIxNC0uMDQtLjIxMS0uMDQxLS4yMDgtLjA0My0uMjA0LS4wNDUtLjIwMS0uMDQ2LS4xOTgtLjA0OC0uMTk1LS4wNS0uMTktLjA1MS0uMTg3LS4wNTMtLjE4NC0uMDU0LS4xNzktLjA1Ni0uMTc2LS4wNTctLjE3Mi0uMDU5LS4xNjctLjA2LS4xNjQtLjA2MS0uMTU5LS4wNjMtLjE1NS0uMDY0LS4xNTEtLjA2Ni0uMDc0LS4wMzMtLjA3Mi0uMDMzLS4wNzItLjAzNC0uMDctLjAzNC0uMDY5LS4wMzUtLjA2OC0uMDM1LS4wNjctLjAzNS0uMDY2LS4wMzUtLjA2NC0uMDM2LS4wNjMtLjAzNi0uMDYyLS4wMzYtLjA2MS0uMDM2LS4wNi0uMDM3LS4wNTgtLjAzNy0uMDU3LS4wMzctLjA1Ni0uMDM4LS4wNTUtLjAzOC0uMDUzLS4wMzgtLjA1Mi0uMDM4LS4wNTEtLjAzOS0uMDQ5LS4wMzktLjA0OS0uMDM5LS4wNDYtLjAzOS0uMDQ2LS4wNC0uMDQ0LS4wNC0uMDQzLS4wNC0uMDQxLS4wNC0uMDQtLjA0MS0uMDM5LS4wNDEtLjAzNy0uMDQxLS4wMzYtLjA0MS0uMDM0LS4wNDEtLjAzMy0uMDQyLS4wMzItLjA0Mi0uMDMtLjA0Mi0uMDI5LS4wNDItLjAyNy0uMDQyLS4wMjYtLjA0My0uMDI0LS4wNDMtLjAyMy0uMDQzLS4wMjEtLjA0My0uMDItLjA0My0uMDE4LS4wNDQtLjAxNy0uMDQzLS4wMTUtLjA0NC0uMDEzLS4wNDQtLjAxMi0uMDQ0LS4wMTEtLjA0NS0uMDA5LS4wNDQtLjAwNy0uMDQ1LS4wMDYtLjA0NS0uMDA0LS4wNDUtLjAwMi0uMDQ1LS4wMDEtLjA0NXYtMTdsLjAwMS0uMDQ1LjAwMi0uMDQ1LjAwNC0uMDQ1LjAwNi0uMDQ1LjAwNy0uMDQ1LjAwOS0uMDQ0LjAxMS0uMDQ1LjAxMi0uMDQ0LjAxMy0uMDQ0LjAxNS0uMDQ0LjAxNy0uMDQzLjAxOC0uMDQ0LjAyLS4wNDMuMDIxLS4wNDMuMDIzLS4wNDMuMDI0LS4wNDMuMDI2LS4wNDMuMDI3LS4wNDIuMDI5LS4wNDIuMDMtLjA0Mi4wMzItLjA0Mi4wMzMtLjA0Mi4wMzQtLjA0MS4wMzYtLjA0MS4wMzctLjA0MS4wMzktLjA0MS4wNC0uMDQxLjA0MS0uMDQuMDQzLS4wNC4wNDQtLjA0LjA0Ni0uMDQuMDQ2LS4wMzkuMDQ5LS4wMzkuMDQ5LS4wMzkuMDUxLS4wMzkuMDUyLS4wMzguMDUzLS4wMzguMDU1LS4wMzguMDU2LS4wMzguMDU3LS4wMzcuMDU4LS4wMzcuMDYtLjAzNy4wNjEtLjAzNi4wNjItLjAzNi4wNjMtLjAzNi4wNjQtLjAzNi4wNjYtLjAzNS4wNjctLjAzNS4wNjgtLjAzNS4wNjktLjAzNS4wNy0uMDM0LjA3Mi0uMDM0LjA3Mi0uMDMzLjA3NC0uMDMzLjE1MS0uMDY2LjE1NS0uMDY0LjE1OS0uMDYzLjE2NC0uMDYxLjE2Ny0uMDYuMTcyLS4wNTkuMTc2LS4wNTcuMTc5LS4wNTYuMTg0LS4wNTQuMTg3LS4wNTMuMTktLjA1MS4xOTUtLjA1LjE5OC0uMDQ4LjIwMS0uMDQ2LjIwNC0uMDQ1LjIwOC0uMDQzLjIxMS0uMDQxLjIxNC0uMDQuMjE3LS4wMzguMjItLjAzNi4yMjMtLjAzNC4yMjYtLjAzMi4yMjgtLjAzMS4yMzEtLjAyOC4yMzQtLjAyNy4yMzYtLjAyNC4yMzgtLjAyMy4yNDEtLjAyLjI0My0uMDE5LjI0NS0uMDE2LjI0Ny0uMDE1LjI0OS0uMDEyLjI1MS0uMDEuMjUzLS4wMDguMjU1LS4wMDUuMjU2LS4wMDQuMjU4LS4wMDEuMjU4LjAwMXptLTkuMjU4IDIwLjQ5OXYuMDFsLjAwMS4wMjEuMDAzLjAyMS4wMDQuMDIyLjAwNS4wMjEuMDA2LjAyMi4wMDcuMDIyLjAwOS4wMjMuMDEuMDIyLjAxMS4wMjMuMDEyLjAyMy4wMTMuMDIzLjAxNS4wMjMuMDE2LjAyNC4wMTcuMDIzLjAxOC4wMjQuMDE5LjAyNC4wMjEuMDI0LjAyMi4wMjUuMDIzLjAyNC4wMjQuMDI1LjA1Mi4wNDkuMDU2LjA1LjA2MS4wNTEuMDY2LjA1MS4wNy4wNTEuMDc1LjA1MS4wNzkuMDUyLjA4NC4wNTIuMDg4LjA1Mi4wOTIuMDUyLjA5Ny4wNTIuMTAyLjA1MS4xMDUuMDUyLjExLjA1Mi4xMTQuMDUxLjExOS4wNTEuMTIzLjA1MS4xMjcuMDUuMTMxLjA1LjEzNS4wNS4xMzkuMDQ4LjE0NC4wNDkuMTQ3LjA0Ny4xNTIuMDQ3LjE1NS4wNDcuMTYuMDQ1LjE2My4wNDUuMTY3LjA0My4xNzEuMDQzLjE3Ni4wNDEuMTc4LjA0MS4xODMuMDM5LjE4Ny4wMzkuMTkuMDM3LjE5NC4wMzUuMTk3LjAzNS4yMDIuMDMzLjIwNC4wMzEuMjA5LjAzLjIxMi4wMjkuMjE2LjAyNy4yMTkuMDI1LjIyMi4wMjQuMjI2LjAyMS4yMy4wMi4yMzMuMDE4LjIzNi4wMTYuMjQuMDE1LjI0My4wMTIuMjQ2LjAxLjI0OS4wMDguMjUzLjAwNS4yNTYuMDA0LjI1OS4wMDEuMjYtLjAwMS4yNTctLjAwNC4yNTQtLjAwNS4yNS0uMDA4LjI0Ny0uMDExLjI0NC0uMDEyLjI0MS0uMDE0LjIzNy0uMDE2LjIzMy0uMDE4LjIzMS0uMDIxLjIyNi0uMDIxLjIyNC0uMDI0LjIyLS4wMjYuMjE2LS4wMjcuMjEyLS4wMjguMjEtLjAzMS4yMDUtLjAzMS4yMDItLjAzNC4xOTgtLjAzNC4xOTQtLjAzNi4xOTEtLjAzNy4xODctLjAzOS4xODMtLjA0LjE3OS0uMDQuMTc1LS4wNDIuMTcyLS4wNDMuMTY4LS4wNDQuMTYzLS4wNDUuMTYtLjA0Ni4xNTUtLjA0Ni4xNTItLjA0Ny4xNDgtLjA0OC4xNDMtLjA0OS4xMzktLjA0OS4xMzYtLjA1LjEzMS0uMDUuMTI2LS4wNS4xMjMtLjA1MS4xMTgtLjA1Mi4xMTQtLjA1MS4xMS0uMDUyLjEwNi0uMDUyLjEwMS0uMDUyLjA5Ni0uMDUyLjA5Mi0uMDUyLjA4OC0uMDUzLjA4My0uMDUxLjA3OS0uMDUyLjA3NC0uMDUyLjA3LS4wNTEuMDY1LS4wNTEuMDYtLjA1MS4wNTYtLjA1LjA1MS0uMDUuMDIzLS4wMjQuMDIzLS4wMjUuMDIxLS4wMjQuMDItLjAyNC4wMTktLjAyNC4wMTgtLjAyNC4wMTctLjAyNC4wMTUtLjAyMy4wMTQtLjAyNC4wMTMtLjAyMy4wMTItLjAyMy4wMS0uMDIzLjAxLS4wMjIuMDA4LS4wMjIuMDA2LS4wMjIuMDA2LS4wMjIuMDA0LS4wMjIuMDA0LS4wMjEuMDAxLS4wMjEuMDAxLS4wMjF2LTQuMTI3bC0uMDc3LjA1NS0uMDguMDUzLS4wODMuMDU0LS4wODUuMDUzLS4wODcuMDUyLS4wOS4wNTItLjA5My4wNTEtLjA5NS4wNS0uMDk3LjA1LS4xLjA0OS0uMTAyLjA0OS0uMTA1LjA0OC0uMTA2LjA0Ny0uMTA5LjA0Ny0uMTExLjA0Ni0uMTE0LjA0NS0uMTE1LjA0NS0uMTE4LjA0NC0uMTIuMDQzLS4xMjIuMDQyLS4xMjQuMDQyLS4xMjYuMDQxLS4xMjguMDQtLjEzLjA0LS4xMzIuMDM4LS4xMzQuMDM4LS4xMzUuMDM3LS4xMzguMDM3LS4xMzkuMDM1LS4xNDIuMDM1LS4xNDMuMDM0LS4xNDQuMDMzLS4xNDcuMDMyLS4xNDguMDMxLS4xNS4wMy0uMTUxLjAzLS4xNTMuMDI5LS4xNTQuMDI3LS4xNTYuMDI3LS4xNTguMDI2LS4xNTkuMDI1LS4xNjEuMDI0LS4xNjIuMDIzLS4xNjMuMDIyLS4xNjUuMDIxLS4xNjYuMDItLjE2Ny4wMTktLjE2OS4wMTgtLjE2OS4wMTctLjE3MS4wMTYtLjE3My4wMTUtLjE3My4wMTQtLjE3NS4wMTMtLjE3NS4wMTItLjE3Ny4wMTEtLjE3OC4wMS0uMTc5LjAwOC0uMTc5LjAwOC0uMTgxLjAwNi0uMTgyLjAwNS0uMTgyLjAwNC0uMTg0LjAwMy0uMTg0LjAwMmgtLjM3bC0uMTg0LS4wMDItLjE4NC0uMDAzLS4xODItLjAwNC0uMTgyLS4wMDUtLjE4MS0uMDA2LS4xNzktLjAwOC0uMTc5LS4wMDgtLjE3OC0uMDEtLjE3Ni0uMDExLS4xNzYtLjAxMi0uMTc1LS4wMTMtLjE3My0uMDE0LS4xNzItLjAxNS0uMTcxLS4wMTYtLjE3LS4wMTctLjE2OS0uMDE4LS4xNjctLjAxOS0uMTY2LS4wMi0uMTY1LS4wMjEtLjE2My0uMDIyLS4xNjItLjAyMy0uMTYxLS4wMjQtLjE1OS0uMDI1LS4xNTctLjAyNi0uMTU2LS4wMjctLjE1NS0uMDI3LS4xNTMtLjAyOS0uMTUxLS4wMy0uMTUtLjAzLS4xNDgtLjAzMS0uMTQ2LS4wMzItLjE0NS0uMDMzLS4xNDMtLjAzNC0uMTQxLS4wMzUtLjE0LS4wMzUtLjEzNy0uMDM3LS4xMzYtLjAzNy0uMTM0LS4wMzgtLjEzMi0uMDM4LS4xMy0uMDQtLjEyOC0uMDQtLjEyNi0uMDQxLS4xMjQtLjA0Mi0uMTIyLS4wNDItLjEyLS4wNDQtLjExNy0uMDQzLS4xMTYtLjA0NS0uMTEzLS4wNDUtLjExMi0uMDQ2LS4xMDktLjA0Ny0uMTA2LS4wNDctLjEwNS0uMDQ4LS4xMDItLjA0OS0uMS0uMDQ5LS4wOTctLjA1LS4wOTUtLjA1LS4wOTMtLjA1Mi0uMDktLjA1MS0uMDg3LS4wNTItLjA4NS0uMDUzLS4wODMtLjA1NC0uMDgtLjA1NC0uMDc3LS4wNTR2NC4xMjd6bTAtNS42NTR2LjAxMWwuMDAxLjAyMS4wMDMuMDIxLjAwNC4wMjEuMDA1LjAyMi4wMDYuMDIyLjAwNy4wMjIuMDA5LjAyMi4wMS4wMjIuMDExLjAyMy4wMTIuMDIzLjAxMy4wMjMuMDE1LjAyNC4wMTYuMDIzLjAxNy4wMjQuMDE4LjAyNC4wMTkuMDI0LjAyMS4wMjQuMDIyLjAyNC4wMjMuMDI1LjAyNC4wMjQuMDUyLjA1LjA1Ni4wNS4wNjEuMDUuMDY2LjA1MS4wNy4wNTEuMDc1LjA1Mi4wNzkuMDUxLjA4NC4wNTIuMDg4LjA1Mi4wOTIuMDUyLjA5Ny4wNTIuMTAyLjA1Mi4xMDUuMDUyLjExLjA1MS4xMTQuMDUxLjExOS4wNTIuMTIzLjA1LjEyNy4wNTEuMTMxLjA1LjEzNS4wNDkuMTM5LjA0OS4xNDQuMDQ4LjE0Ny4wNDguMTUyLjA0Ny4xNTUuMDQ2LjE2LjA0NS4xNjMuMDQ1LjE2Ny4wNDQuMTcxLjA0Mi4xNzYuMDQyLjE3OC4wNC4xODMuMDQuMTg3LjAzOC4xOS4wMzcuMTk0LjAzNi4xOTcuMDM0LjIwMi4wMzMuMjA0LjAzMi4yMDkuMDMuMjEyLjAyOC4yMTYuMDI3LjIxOS4wMjUuMjIyLjAyNC4yMjYuMDIyLjIzLjAyLjIzMy4wMTguMjM2LjAxNi4yNC4wMTQuMjQzLjAxMi4yNDYuMDEuMjQ5LjAwOC4yNTMuMDA2LjI1Ni4wMDMuMjU5LjAwMS4yNi0uMDAxLjI1Ny0uMDAzLjI1NC0uMDA2LjI1LS4wMDguMjQ3LS4wMS4yNDQtLjAxMi4yNDEtLjAxNS4yMzctLjAxNi4yMzMtLjAxOC4yMzEtLjAyLjIyNi0uMDIyLjIyNC0uMDI0LjIyLS4wMjUuMjE2LS4wMjcuMjEyLS4wMjkuMjEtLjAzLjIwNS0uMDMyLjIwMi0uMDMzLjE5OC0uMDM1LjE5NC0uMDM2LjE5MS0uMDM3LjE4Ny0uMDM5LjE4My0uMDM5LjE3OS0uMDQxLjE3NS0uMDQyLjE3Mi0uMDQzLjE2OC0uMDQ0LjE2My0uMDQ1LjE2LS4wNDUuMTU1LS4wNDcuMTUyLS4wNDcuMTQ4LS4wNDguMTQzLS4wNDguMTM5LS4wNS4xMzYtLjA0OS4xMzEtLjA1LjEyNi0uMDUxLjEyMy0uMDUxLjExOC0uMDUxLjExNC0uMDUyLjExLS4wNTIuMTA2LS4wNTIuMTAxLS4wNTIuMDk2LS4wNTIuMDkyLS4wNTIuMDg4LS4wNTIuMDgzLS4wNTIuMDc5LS4wNTIuMDc0LS4wNTEuMDctLjA1Mi4wNjUtLjA1MS4wNi0uMDUuMDU2LS4wNTEuMDUxLS4wNDkuMDIzLS4wMjUuMDIzLS4wMjQuMDIxLS4wMjUuMDItLjAyNC4wMTktLjAyNC4wMTgtLjAyNC4wMTctLjAyNC4wMTUtLjAyMy4wMTQtLjAyMy4wMTMtLjAyNC4wMTItLjAyMi4wMS0uMDIzLjAxLS4wMjMuMDA4LS4wMjIuMDA2LS4wMjIuMDA2LS4wMjIuMDA0LS4wMjEuMDA0LS4wMjIuMDAxLS4wMjEuMDAxLS4wMjF2LTQuMTM5bC0uMDc3LjA1NC0uMDguMDU0LS4wODMuMDU0LS4wODUuMDUyLS4wODcuMDUzLS4wOS4wNTEtLjA5My4wNTEtLjA5NS4wNTEtLjA5Ny4wNS0uMS4wNDktLjEwMi4wNDktLjEwNS4wNDgtLjEwNi4wNDctLjEwOS4wNDctLjExMS4wNDYtLjExNC4wNDUtLjExNS4wNDQtLjExOC4wNDQtLjEyLjA0NC0uMTIyLjA0Mi0uMTI0LjA0Mi0uMTI2LjA0MS0uMTI4LjA0LS4xMy4wMzktLjEzMi4wMzktLjEzNC4wMzgtLjEzNS4wMzctLjEzOC4wMzYtLjEzOS4wMzYtLjE0Mi4wMzUtLjE0My4wMzMtLjE0NC4wMzMtLjE0Ny4wMzMtLjE0OC4wMzEtLjE1LjAzLS4xNTEuMDMtLjE1My4wMjgtLjE1NC4wMjgtLjE1Ni4wMjctLjE1OC4wMjYtLjE1OS4wMjUtLjE2MS4wMjQtLjE2Mi4wMjMtLjE2My4wMjItLjE2NS4wMjEtLjE2Ni4wMi0uMTY3LjAxOS0uMTY5LjAxOC0uMTY5LjAxNy0uMTcxLjAxNi0uMTczLjAxNS0uMTczLjAxNC0uMTc1LjAxMy0uMTc1LjAxMi0uMTc3LjAxMS0uMTc4LjAwOS0uMTc5LjAwOS0uMTc5LjAwNy0uMTgxLjAwNy0uMTgyLjAwNS0uMTgyLjAwNC0uMTg0LjAwMy0uMTg0LjAwMmgtLjM3bC0uMTg0LS4wMDItLjE4NC0uMDAzLS4xODItLjAwNC0uMTgyLS4wMDUtLjE4MS0uMDA3LS4xNzktLjAwNy0uMTc5LS4wMDktLjE3OC0uMDA5LS4xNzYtLjAxMS0uMTc2LS4wMTItLjE3NS0uMDEzLS4xNzMtLjAxNC0uMTcyLS4wMTUtLjE3MS0uMDE2LS4xNy0uMDE3LS4xNjktLjAxOC0uMTY3LS4wMTktLjE2Ni0uMDItLjE2NS0uMDIxLS4xNjMtLjAyMi0uMTYyLS4wMjMtLjE2MS0uMDI0LS4xNTktLjAyNS0uMTU3LS4wMjYtLjE1Ni0uMDI3LS4xNTUtLjAyOC0uMTUzLS4wMjgtLjE1MS0uMDMtLjE1LS4wMy0uMTQ4LS4wMzEtLjE0Ni0uMDMzLS4xNDUtLjAzMy0uMTQzLS4wMzMtLjE0MS0uMDM1LS4xNC0uMDM2LS4xMzctLjAzNi0uMTM2LS4wMzctLjEzNC0uMDM4LS4xMzItLjAzOS0uMTMtLjAzOS0uMTI4LS4wNC0uMTI2LS4wNDEtLjEyNC0uMDQyLS4xMjItLjA0My0uMTItLjA0My0uMTE3LS4wNDQtLjExNi0uMDQ0LS4xMTMtLjA0Ni0uMTEyLS4wNDYtLjEwOS0uMDQ2LS4xMDYtLjA0Ny0uMTA1LS4wNDgtLjEwMi0uMDQ5LS4xLS4wNDktLjA5Ny0uMDUtLjA5NS0uMDUxLS4wOTMtLjA1MS0uMDktLjA1MS0uMDg3LS4wNTMtLjA4NS0uMDUyLS4wODMtLjA1NC0uMDgtLjA1NC0uMDc3LS4wNTR2NC4xMzl6bTAtNS42NjZ2LjAxMWwuMDAxLjAyLjAwMy4wMjIuMDA0LjAyMS4wMDUuMDIyLjAwNi4wMjEuMDA3LjAyMi4wMDkuMDIzLjAxLjAyMi4wMTEuMDIzLjAxMi4wMjMuMDEzLjAyMy4wMTUuMDIzLjAxNi4wMjQuMDE3LjAyNC4wMTguMDIzLjAxOS4wMjQuMDIxLjAyNS4wMjIuMDI0LjAyMy4wMjQuMDI0LjAyNS4wNTIuMDUuMDU2LjA1LjA2MS4wNS4wNjYuMDUxLjA3LjA1MS4wNzUuMDUyLjA3OS4wNTEuMDg0LjA1Mi4wODguMDUyLjA5Mi4wNTIuMDk3LjA1Mi4xMDIuMDUyLjEwNS4wNTEuMTEuMDUyLjExNC4wNTEuMTE5LjA1MS4xMjMuMDUxLjEyNy4wNS4xMzEuMDUuMTM1LjA1LjEzOS4wNDkuMTQ0LjA0OC4xNDcuMDQ4LjE1Mi4wNDcuMTU1LjA0Ni4xNi4wNDUuMTYzLjA0NS4xNjcuMDQzLjE3MS4wNDMuMTc2LjA0Mi4xNzguMDQuMTgzLjA0LjE4Ny4wMzguMTkuMDM3LjE5NC4wMzYuMTk3LjAzNC4yMDIuMDMzLjIwNC4wMzIuMjA5LjAzLjIxMi4wMjguMjE2LjAyNy4yMTkuMDI1LjIyMi4wMjQuMjI2LjAyMS4yMy4wMi4yMzMuMDE4LjIzNi4wMTcuMjQuMDE0LjI0My4wMTIuMjQ2LjAxLjI0OS4wMDguMjUzLjAwNi4yNTYuMDAzLjI1OS4wMDEuMjYtLjAwMS4yNTctLjAwMy4yNTQtLjAwNi4yNS0uMDA4LjI0Ny0uMDEuMjQ0LS4wMTMuMjQxLS4wMTQuMjM3LS4wMTYuMjMzLS4wMTguMjMxLS4wMi4yMjYtLjAyMi4yMjQtLjAyNC4yMi0uMDI1LjIxNi0uMDI3LjIxMi0uMDI5LjIxLS4wMy4yMDUtLjAzMi4yMDItLjAzMy4xOTgtLjAzNS4xOTQtLjAzNi4xOTEtLjAzNy4xODctLjAzOS4xODMtLjAzOS4xNzktLjA0MS4xNzUtLjA0Mi4xNzItLjA0My4xNjgtLjA0NC4xNjMtLjA0NS4xNi0uMDQ1LjE1NS0uMDQ3LjE1Mi0uMDQ3LjE0OC0uMDQ4LjE0My0uMDQ5LjEzOS0uMDQ5LjEzNi0uMDQ5LjEzMS0uMDUxLjEyNi0uMDUuMTIzLS4wNTEuMTE4LS4wNTIuMTE0LS4wNTEuMTEtLjA1Mi4xMDYtLjA1Mi4xMDEtLjA1Mi4wOTYtLjA1Mi4wOTItLjA1Mi4wODgtLjA1Mi4wODMtLjA1Mi4wNzktLjA1Mi4wNzQtLjA1Mi4wNy0uMDUxLjA2NS0uMDUxLjA2LS4wNTEuMDU2LS4wNS4wNTEtLjA0OS4wMjMtLjAyNS4wMjMtLjAyNS4wMjEtLjAyNC4wMi0uMDI0LjAxOS0uMDI0LjAxOC0uMDI0LjAxNy0uMDI0LjAxNS0uMDIzLjAxNC0uMDI0LjAxMy0uMDIzLjAxMi0uMDIzLjAxLS4wMjIuMDEtLjAyMy4wMDgtLjAyMi4wMDYtLjAyMi4wMDYtLjAyMi4wMDQtLjAyMi4wMDQtLjAyMS4wMDEtLjAyMS4wMDEtLjAyMXYtNC4xNTNsLS4wNzcuMDU0LS4wOC4wNTQtLjA4My4wNTMtLjA4NS4wNTMtLjA4Ny4wNTMtLjA5LjA1MS0uMDkzLjA1MS0uMDk1LjA1MS0uMDk3LjA1LS4xLjA0OS0uMTAyLjA0OC0uMTA1LjA0OC0uMTA2LjA0OC0uMTA5LjA0Ni0uMTExLjA0Ni0uMTE0LjA0Ni0uMTE1LjA0NC0uMTE4LjA0NC0uMTIuMDQzLS4xMjIuMDQzLS4xMjQuMDQyLS4xMjYuMDQxLS4xMjguMDQtLjEzLjAzOS0uMTMyLjAzOS0uMTM0LjAzOC0uMTM1LjAzNy0uMTM4LjAzNi0uMTM5LjAzNi0uMTQyLjAzNC0uMTQzLjAzNC0uMTQ0LjAzMy0uMTQ3LjAzMi0uMTQ4LjAzMi0uMTUuMDMtLjE1MS4wMy0uMTUzLjAyOC0uMTU0LjAyOC0uMTU2LjAyNy0uMTU4LjAyNi0uMTU5LjAyNC0uMTYxLjAyNC0uMTYyLjAyMy0uMTYzLjAyMy0uMTY1LjAyMS0uMTY2LjAyLS4xNjcuMDE5LS4xNjkuMDE4LS4xNjkuMDE3LS4xNzEuMDE2LS4xNzMuMDE1LS4xNzMuMDE0LS4xNzUuMDEzLS4xNzUuMDEyLS4xNzcuMDEtLjE3OC4wMS0uMTc5LjAwOS0uMTc5LjAwNy0uMTgxLjAwNi0uMTgyLjAwNi0uMTgyLjAwNC0uMTg0LjAwMy0uMTg0LjAwMS0uMTg1LjAwMS0uMTg1LS4wMDEtLjE4NC0uMDAxLS4xODQtLjAwMy0uMTgyLS4wMDQtLjE4Mi0uMDA2LS4xODEtLjAwNi0uMTc5LS4wMDctLjE3OS0uMDA5LS4xNzgtLjAxLS4xNzYtLjAxLS4xNzYtLjAxMi0uMTc1LS4wMTMtLjE3My0uMDE0LS4xNzItLjAxNS0uMTcxLS4wMTYtLjE3LS4wMTctLjE2OS0uMDE4LS4xNjctLjAxOS0uMTY2LS4wMi0uMTY1LS4wMjEtLjE2My0uMDIzLS4xNjItLjAyMy0uMTYxLS4wMjQtLjE1OS0uMDI0LS4xNTctLjAyNi0uMTU2LS4wMjctLjE1NS0uMDI4LS4xNTMtLjAyOC0uMTUxLS4wMy0uMTUtLjAzLS4xNDgtLjAzMi0uMTQ2LS4wMzItLjE0NS0uMDMzLS4xNDMtLjAzNC0uMTQxLS4wMzQtLjE0LS4wMzYtLjEzNy0uMDM2LS4xMzYtLjAzNy0uMTM0LS4wMzgtLjEzMi0uMDM5LS4xMy0uMDM5LS4xMjgtLjA0MS0uMTI2LS4wNDEtLjEyNC0uMDQxLS4xMjItLjA0My0uMTItLjA0My0uMTE3LS4wNDQtLjExNi0uMDQ0LS4xMTMtLjA0Ni0uMTEyLS4wNDYtLjEwOS0uMDQ2LS4xMDYtLjA0OC0uMTA1LS4wNDgtLjEwMi0uMDQ4LS4xLS4wNS0uMDk3LS4wNDktLjA5NS0uMDUxLS4wOTMtLjA1MS0uMDktLjA1Mi0uMDg3LS4wNTItLjA4NS0uMDUzLS4wODMtLjA1My0uMDgtLjA1NC0uMDc3LS4wNTR2NC4xNTN6bTguNzQtOC4xNzlsLS4yNTcuMDA0LS4yNTQuMDA1LS4yNS4wMDgtLjI0Ny4wMTEtLjI0NC4wMTItLjI0MS4wMTQtLjIzNy4wMTYtLjIzMy4wMTgtLjIzMS4wMjEtLjIyNi4wMjItLjIyNC4wMjMtLjIyLjAyNi0uMjE2LjAyNy0uMjEyLjAyOC0uMjEuMDMxLS4yMDUuMDMyLS4yMDIuMDMzLS4xOTguMDM0LS4xOTQuMDM2LS4xOTEuMDM4LS4xODcuMDM4LS4xODMuMDQtLjE3OS4wNDEtLjE3NS4wNDItLjE3Mi4wNDMtLjE2OC4wNDMtLjE2My4wNDUtLjE2LjA0Ni0uMTU1LjA0Ni0uMTUyLjA0OC0uMTQ4LjA0OC0uMTQzLjA0OC0uMTM5LjA0OS0uMTM2LjA1LS4xMzEuMDUtLjEyNi4wNTEtLjEyMy4wNTEtLjExOC4wNTEtLjExNC4wNTItLjExLjA1Mi0uMTA2LjA1Mi0uMTAxLjA1Mi0uMDk2LjA1Mi0uMDkyLjA1Mi0uMDg4LjA1Mi0uMDgzLjA1Mi0uMDc5LjA1Mi0uMDc0LjA1MS0uMDcuMDUyLS4wNjUuMDUxLS4wNi4wNS0uMDU2LjA1LS4wNTEuMDUtLjAyMy4wMjUtLjAyMy4wMjQtLjAyMS4wMjQtLjAyLjAyNS0uMDE5LjAyNC0uMDE4LjAyNC0uMDE3LjAyMy0uMDE1LjAyNC0uMDE0LjAyMy0uMDEzLjAyMy0uMDEyLjAyMy0uMDEuMDIzLS4wMS4wMjItLjAwOC4wMjItLjAwNi4wMjMtLjAwNi4wMjEtLjAwNC4wMjItLjAwNC4wMjEtLjAwMS4wMjEtLjAwMS4wMjEuMDAxLjAyMS4wMDEuMDIxLjAwNC4wMjEuMDA0LjAyMi4wMDYuMDIxLjAwNi4wMjMuMDA4LjAyMi4wMS4wMjIuMDEuMDIzLjAxMi4wMjMuMDEzLjAyMy4wMTQuMDIzLjAxNS4wMjQuMDE3LjAyMy4wMTguMDI0LjAxOS4wMjQuMDIuMDI1LjAyMS4wMjQuMDIzLjAyNC4wMjMuMDI1LjA1MS4wNS4wNTYuMDUuMDYuMDUuMDY1LjA1MS4wNy4wNTIuMDc0LjA1MS4wNzkuMDUyLjA4My4wNTIuMDg4LjA1Mi4wOTIuMDUyLjA5Ni4wNTIuMTAxLjA1Mi4xMDYuMDUyLjExLjA1Mi4xMTQuMDUyLjExOC4wNTEuMTIzLjA1MS4xMjYuMDUxLjEzMS4wNS4xMzYuMDUuMTM5LjA0OS4xNDMuMDQ4LjE0OC4wNDguMTUyLjA0OC4xNTUuMDQ2LjE2LjA0Ni4xNjMuMDQ1LjE2OC4wNDMuMTcyLjA0My4xNzUuMDQyLjE3OS4wNDEuMTgzLjA0LjE4Ny4wMzguMTkxLjAzOC4xOTQuMDM2LjE5OC4wMzQuMjAyLjAzMy4yMDUuMDMyLjIxLjAzMS4yMTIuMDI4LjIxNi4wMjcuMjIuMDI2LjIyNC4wMjMuMjI2LjAyMi4yMzEuMDIxLjIzMy4wMTguMjM3LjAxNi4yNDEuMDE0LjI0NC4wMTIuMjQ3LjAxMS4yNS4wMDguMjU0LjAwNS4yNTcuMDA0LjI2LjAwMS4yNi0uMDAxLjI1Ny0uMDA0LjI1NC0uMDA1LjI1LS4wMDguMjQ3LS4wMTEuMjQ0LS4wMTIuMjQxLS4wMTQuMjM3LS4wMTYuMjMzLS4wMTguMjMxLS4wMjEuMjI2LS4wMjIuMjI0LS4wMjMuMjItLjAyNi4yMTYtLjAyNy4yMTItLjAyOC4yMS0uMDMxLjIwNS0uMDMyLjIwMi0uMDMzLjE5OC0uMDM0LjE5NC0uMDM2LjE5MS0uMDM4LjE4Ny0uMDM4LjE4My0uMDQuMTc5LS4wNDEuMTc1LS4wNDIuMTcyLS4wNDMuMTY4LS4wNDMuMTYzLS4wNDUuMTYtLjA0Ni4xNTUtLjA0Ni4xNTItLjA0OC4xNDgtLjA0OC4xNDMtLjA0OC4xMzktLjA0OS4xMzYtLjA1LjEzMS0uMDUuMTI2LS4wNTEuMTIzLS4wNTEuMTE4LS4wNTEuMTE0LS4wNTIuMTEtLjA1Mi4xMDYtLjA1Mi4xMDEtLjA1Mi4wOTYtLjA1Mi4wOTItLjA1Mi4wODgtLjA1Mi4wODMtLjA1Mi4wNzktLjA1Mi4wNzQtLjA1MS4wNy0uMDUyLjA2NS0uMDUxLjA2LS4wNS4wNTYtLjA1LjA1MS0uMDUuMDIzLS4wMjUuMDIzLS4wMjQuMDIxLS4wMjQuMDItLjAyNS4wMTktLjAyNC4wMTgtLjAyNC4wMTctLjAyMy4wMTUtLjAyNC4wMTQtLjAyMy4wMTMtLjAyMy4wMTItLjAyMy4wMS0uMDIzLjAxLS4wMjIuMDA4LS4wMjIuMDA2LS4wMjMuMDA2LS4wMjEuMDA0LS4wMjIuMDA0LS4wMjEuMDAxLS4wMjEuMDAxLS4wMjEtLjAwMS0uMDIxLS4wMDEtLjAyMS0uMDA0LS4wMjEtLjAwNC0uMDIyLS4wMDYtLjAyMS0uMDA2LS4wMjMtLjAwOC0uMDIyLS4wMS0uMDIyLS4wMS0uMDIzLS4wMTItLjAyMy0uMDEzLS4wMjMtLjAxNC0uMDIzLS4wMTUtLjAyNC0uMDE3LS4wMjMtLjAxOC0uMDI0LS4wMTktLjAyNC0uMDItLjAyNS0uMDIxLS4wMjQtLjAyMy0uMDI0LS4wMjMtLjAyNS0uMDUxLS4wNS0uMDU2LS4wNS0uMDYtLjA1LS4wNjUtLjA1MS0uMDctLjA1Mi0uMDc0LS4wNTEtLjA3OS0uMDUyLS4wODMtLjA1Mi0uMDg4LS4wNTItLjA5Mi0uMDUyLS4wOTYtLjA1Mi0uMTAxLS4wNTItLjEwNi0uMDUyLS4xMS0uMDUyLS4xMTQtLjA1Mi0uMTE4LS4wNTEtLjEyMy0uMDUxLS4xMjYtLjA1MS0uMTMxLS4wNS0uMTM2LS4wNS0uMTM5LS4wNDktLjE0My0uMDQ4LS4xNDgtLjA0OC0uMTUyLS4wNDgtLjE1NS0uMDQ2LS4xNi0uMDQ2LS4xNjMtLjA0NS0uMTY4LS4wNDMtLjE3Mi0uMDQzLS4xNzUtLjA0Mi0uMTc5LS4wNDEtLjE4My0uMDQtLjE4Ny0uMDM4LS4xOTEtLjAzOC0uMTk0LS4wMzYtLjE5OC0uMDM0LS4yMDItLjAzMy0uMjA1LS4wMzItLjIxLS4wMzEtLjIxMi0uMDI4LS4yMTYtLjAyNy0uMjItLjAyNi0uMjI0LS4wMjMtLjIyNi0uMDIyLS4yMzEtLjAyMS0uMjMzLS4wMTgtLjIzNy0uMDE2LS4yNDEtLjAxNC0uMjQ0LS4wMTItLjI0Ny0uMDExLS4yNS0uMDA4LS4yNTQtLjAwNS0uMjU3LS4wMDQtLjI2LS4wMDEtLjI2LjAwMXoiPjwvcGF0aD48L3N5bWJvbD48L2RlZnM+PGRlZnM+PHN5bWJvbCBpZD0ic2F0dGVyaS1tZXJtYWlkLTEtY2xvY2siIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCI+PHBhdGggdHJhbnNmb3JtPSJzY2FsZSguNSkiIGQ9Ik0xMiAyYzUuNTE0IDAgMTAgNC40ODYgMTAgMTBzLTQuNDg2IDEwLTEwIDEwLTEwLTQuNDg2LTEwLTEwIDQuNDg2LTEwIDEwLTEwem0wLTJjLTYuNjI3IDAtMTIgNS4zNzMtMTIgMTJzNS4zNzMgMTIgMTIgMTIgMTItNS4zNzMgMTItMTItNS4zNzMtMTItMTItMTJ6bTUuODQ4IDEyLjQ1OWMuMjAyLjAzOC4yMDIuMzMzLjAwMS4zNzItMS45MDcuMzYxLTYuMDQ1IDEuMTExLTYuNTQ3IDEuMTExLS43MTkgMC0xLjMwMS0uNTgyLTEuMzAxLTEuMzAxIDAtLjUxMi43Ny01LjQ0NyAxLjEyNS03LjQ0NS4wMzQtLjE5Mi4zMTItLjE4MS4zNDMuMDE0bC45ODUgNi4yMzggNS4zOTQgMS4wMTF6Ij48L3BhdGg+PC9zeW1ib2w+PC9kZWZzPjxkZWZzPjxtYXJrZXIgaWQ9InNhdHRlcmktbWVybWFpZC0xLWFycm93aGVhZCIgcmVmWD0iNy45IiByZWZZPSI1IiBtYXJrZXJVbml0cz0idXNlclNwYWNlT25Vc2UiIG1hcmtlcldpZHRoPSIxMiIgbWFya2VySGVpZ2h0PSIxMiIgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiPjxwYXRoIGQ9Ik0gLTEgMCBMIDEwIDUgTCAwIDEwIHoiPjwvcGF0aD48L21hcmtlcj48L2RlZnM+PGRlZnM+PG1hcmtlciBpZD0ic2F0dGVyaS1tZXJtYWlkLTEtY3Jvc3NoZWFkIiBtYXJrZXJXaWR0aD0iMTUiIG1hcmtlckhlaWdodD0iOCIgb3JpZW50PSJhdXRvIiByZWZYPSI0IiByZWZZPSI0LjUiPjxwYXRoIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzExMTExMSIgZD0iTSAxLDIgTCA2LDcgTSA2LDIgTCAxLDciIHN0eWxlPSJzdHJva2UtZGFzaGFycmF5OjAsIDAiIHN0cm9rZS13aWR0aD0iMXB0Ij48L3BhdGg+PC9tYXJrZXI+PC9kZWZzPjxkZWZzPjxtYXJrZXIgaWQ9InNhdHRlcmktbWVybWFpZC0xLWZpbGxlZC1oZWFkIiByZWZYPSIxNS41IiByZWZZPSI3IiBtYXJrZXJXaWR0aD0iMjAiIG1hcmtlckhlaWdodD0iMjgiIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTSAxOCw3IEw5LDEzIEwxNCw3IEw5LDEgWiI+PC9wYXRoPjwvbWFya2VyPjwvZGVmcz48ZGVmcz48bWFya2VyIGlkPSJzYXR0ZXJpLW1lcm1haWQtMS1zZXF1ZW5jZW51bWJlciIgcmVmWD0iMTUiIHJlZlk9IjE1IiBtYXJrZXJXaWR0aD0iNjAiIG1hcmtlckhlaWdodD0iNDAiIG9yaWVudD0iYXV0byI+PGNpcmNsZSBjeD0iMTUiIGN5PSIxNSIgcj0iNiI+PC9jaXJjbGU+PC9tYXJrZXI+PC9kZWZzPjxkZWZzPjxtYXJrZXIgaWQ9InNhdHRlcmktbWVybWFpZC0xLXNvbGlkVG9wQXJyb3dIZWFkIiByZWZYPSI3LjkiIHJlZlk9IjcuMjUiIG1hcmtlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgbWFya2VyV2lkdGg9IjEyIiBtYXJrZXJIZWlnaHQ9IjEyIiBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSI+PHBhdGggZD0iTSAwIDAgTCAxMCA4IEwgMCA4IHoiPjwvcGF0aD48L21hcmtlcj48L2RlZnM+PGRlZnM+PG1hcmtlciBpZD0ic2F0dGVyaS1tZXJtYWlkLTEtc29saWRCb3R0b21BcnJvd0hlYWQiIHJlZlg9IjcuOSIgcmVmWT0iMC43NSIgbWFya2VyVW5pdHM9InVzZXJTcGFjZU9uVXNlIiBtYXJrZXJXaWR0aD0iMTIiIG1hcmtlckhlaWdodD0iMTIiIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIj48cGF0aCBkPSJNIDAgMCBMIDEwIDAgTCAwIDggeiI+PC9wYXRoPjwvbWFya2VyPjwvZGVmcz48ZGVmcz48bWFya2VyIGlkPSJzYXR0ZXJpLW1lcm1haWQtMS1zdGlja1RvcEFycm93SGVhZCIgcmVmWD0iNy41IiByZWZZPSI3IiBtYXJrZXJVbml0cz0idXNlclNwYWNlT25Vc2UiIG1hcmtlcldpZHRoPSIxMiIgbWFya2VySGVpZ2h0PSIxMiIgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiPjxwYXRoIGQ9Ik0gMCAwIEwgNyA3IiBzdHJva2U9IiMxMTExMTEiIGZpbGw9Im5vbmUiIHN0cm9rZS13aWR0aD0iMS41Ij48L3BhdGg+PC9tYXJrZXI+PC9kZWZzPjxkZWZzPjxtYXJrZXIgaWQ9InNhdHRlcmktbWVybWFpZC0xLXN0aWNrQm90dG9tQXJyb3dIZWFkIiByZWZYPSI3LjUiIHJlZlk9IjAiIG1hcmtlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgbWFya2VyV2lkdGg9IjEyIiBtYXJrZXJIZWlnaHQ9IjEyIiBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSI+PHBhdGggZD0iTSAwIDcgTCA3IDAiIHN0cm9rZT0iIzExMTExMSIgZmlsbD0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxLjUiPjwvcGF0aD48L21hcmtlcj48L2RlZnM+PGcgZGF0YS1ldD0ibm90ZSIgZGF0YS1pZD0iaTAiPjxyZWN0IHg9IjI2MCIgeT0iNzUiIGZpbGw9IiNlMGM4ZGIiIHN0cm9rZT0iIzQ0NDQ0NCIgd2lkdGg9IjM1OCIgaGVpZ2h0PSIzOSIgY2xhc3M9Im5vdGUiPjwvcmVjdD48dGV4dCB4PSI0MzkiIHk9IjgwIiBkeT0iMWVtIiBzdHlsZT0iZm9udC1zaXplOjE2cHg7Zm9udC13ZWlnaHQ6NDAwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBkb21pbmFudC1iYXNlbGluZT0ibWlkZGxlIiBhbGlnbm1lbnQtYmFzZWxpbmU9Im1pZGRsZSIgY2xhc3M9Im5vdGVUZXh0Ij48dHNwYW4geD0iNDM5Ij5PbmUtdGltZSBzZXR1cDwvdHNwYW4+PC90ZXh0PjwvZz48ZyBkYXRhLWV0PSJub3RlIiBkYXRhLWlkPSJpNCI+PHJlY3QgeD0iNTAiIHk9IjI1NiIgZmlsbD0iI2UwYzhkYiIgc3Ryb2tlPSIjNDQ0NDQ0IiB3aWR0aD0iNTY4IiBoZWlnaHQ9IjM5IiBjbGFzcz0ibm90ZSI+PC9yZWN0Pjx0ZXh0IHg9IjMzNCIgeT0iMjYxIiBkeT0iMWVtIiBzdHlsZT0iZm9udC1zaXplOjE2cHg7Zm9udC13ZWlnaHQ6NDAwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBkb21pbmFudC1iYXNlbGluZT0ibWlkZGxlIiBhbGlnbm1lbnQtYmFzZWxpbmU9Im1pZGRsZSIgY2xhc3M9Im5vdGVUZXh0Ij48dHNwYW4geD0iMzM0Ij5QZXItcmVxdWVzdCBwYXJzaW5nIGZsb3c8L3RzcGFuPjwvdGV4dD48L2c+PGcgZGF0YS1ldD0ibm90ZSIgZGF0YS1pZD0iaTUiPjxyZWN0IHg9IjAiIHk9IjMwNSIgZmlsbD0iI2UwYzhkYiIgc3Ryb2tlPSIjNDQ0NDQ0IiB3aWR0aD0iMTUwIiBoZWlnaHQ9IjM5IiBjbGFzcz0ibm90ZSI+PC9yZWN0Pjx0ZXh0IHg9Ijc1IiB5PSIzMTAiIGR5PSIxZW0iIHN0eWxlPSJmb250LXNpemU6MTZweDtmb250LXdlaWdodDo0MDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGRvbWluYW50LWJhc2VsaW5lPSJtaWRkbGUiIGFsaWdubWVudC1iYXNlbGluZT0ibWlkZGxlIiBjbGFzcz0ibm90ZVRleHQiPjx0c3BhbiB4PSI3NSI+RmV0Y2ggSFRNTDwvdHNwYW4+PC90ZXh0PjwvZz48ZyBkYXRhLWV0PSJub3RlIiBkYXRhLWlkPSJpMTAiPjxyZWN0IHg9IjAiIHk9IjUzMCIgZmlsbD0iI2UwYzhkYiIgc3Ryb2tlPSIjNDQ0NDQ0IiB3aWR0aD0iMTUwIiBoZWlnaHQ9IjM5IiBjbGFzcz0ibm90ZSI+PC9yZWN0Pjx0ZXh0IHg9Ijc1IiB5PSI1MzUiIGR5PSIxZW0iIHN0eWxlPSJmb250LXNpemU6MTZweDtmb250LXdlaWdodDo0MDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGRvbWluYW50LWJhc2VsaW5lPSJtaWRkbGUiIGFsaWdubWVudC1iYXNlbGluZT0ibWlkZGxlIiBjbGFzcz0ibm90ZVRleHQiPjx0c3BhbiB4PSI3NSI+UmVuZGVyIFVJPC90c3Bhbj48L3RleHQ+PC9nPjx0ZXh0IHg9IjUzOCIgeT0iMTI5IiBkeT0iMWVtIiBzdHlsZT0iZm9udC1zaXplOjE2cHg7Zm9udC13ZWlnaHQ6NDAwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBkb21pbmFudC1iYXNlbGluZT0ibWlkZGxlIiBhbGlnbm1lbnQtYmFzZWxpbmU9Im1pZGRsZSIgY2xhc3M9Im1lc3NhZ2VUZXh0Ij5GZXRjaCBtYW5pZmVzdCBhbmQgbW9kdWxlczwvdGV4dD48bGluZSB4MT0iMjg2IiB5MT0iMTU4IiB4Mj0iNzg5IiB5Mj0iMTU4IiBzdHJva2U9Im5vbmUiIHN0eWxlPSJmaWxsOm5vbmUiIGNsYXNzPSJtZXNzYWdlTGluZTAiIGRhdGEtZXQ9Im1lc3NhZ2UiIGRhdGEtaWQ9ImkxIiBkYXRhLWZyb209IlppcGxpbmUiIGRhdGEtdG89IlNlcnZlciIgc3Ryb2tlLXdpZHRoPSIyIiBtYXJrZXItZW5kPSJ1cmwoI3NhdHRlcmktbWVybWFpZC0xLWFycm93aGVhZCkiPjwvbGluZT48dGV4dCB4PSI1NDEiIHk9IjE3MyIgZHk9IjFlbSIgc3R5bGU9ImZvbnQtc2l6ZToxNnB4O2ZvbnQtd2VpZ2h0OjQwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZG9taW5hbnQtYmFzZWxpbmU9Im1pZGRsZSIgYWxpZ25tZW50LWJhc2VsaW5lPSJtaWRkbGUiIGNsYXNzPSJtZXNzYWdlVGV4dCI+QnVuZGxlIGFzc2V0czwvdGV4dD48bGluZSB4MT0iNzkyIiB5MT0iMjAyIiB4Mj0iMjg5IiB5Mj0iMjAyIiBzdHJva2U9Im5vbmUiIHN0eWxlPSJzdHJva2UtZGFzaGFycmF5OjMsIDM7ZmlsbDpub25lIiBjbGFzcz0ibWVzc2FnZUxpbmUxIiBkYXRhLWV0PSJtZXNzYWdlIiBkYXRhLWlkPSJpMiIgZGF0YS1mcm9tPSJTZXJ2ZXIiIGRhdGEtdG89IlppcGxpbmUiIHN0cm9rZS13aWR0aD0iMiIgbWFya2VyLWVuZD0idXJsKCNzYXR0ZXJpLW1lcm1haWQtMS1hcnJvd2hlYWQpIj48L2xpbmU+PHRleHQgeD0iNDM4IiB5PSIyMTciIGR5PSIxZW0iIHN0eWxlPSJmb250LXNpemU6MTZweDtmb250LXdlaWdodDo0MDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGRvbWluYW50LWJhc2VsaW5lPSJtaWRkbGUiIGFsaWdubWVudC1iYXNlbGluZT0ibWlkZGxlIiBjbGFzcz0ibWVzc2FnZVRleHQiPkluaXRpYWxpemUgcGFyc2VyPC90ZXh0PjxsaW5lIHgxPSIyODYiIHkxPSIyNDYiIHgyPSI1ODkiIHkyPSIyNDYiIHN0cm9rZT0ibm9uZSIgc3R5bGU9ImZpbGw6bm9uZSIgY2xhc3M9Im1lc3NhZ2VMaW5lMCIgZGF0YS1ldD0ibWVzc2FnZSIgZGF0YS1pZD0iaTMiIGRhdGEtZnJvbT0iWmlwbGluZSIgZGF0YS10bz0iSmF2YVNjcmlwdCIgc3Ryb2tlLXdpZHRoPSIyIiBtYXJrZXItZW5kPSJ1cmwoI3NhdHRlcmktbWVybWFpZC0xLWFycm93aGVhZCkiPjwvbGluZT48dGV4dCB4PSIxNzkiIHk9IjM1OSIgZHk9IjFlbSIgc3R5bGU9ImZvbnQtc2l6ZToxNnB4O2ZvbnQtd2VpZ2h0OjQwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZG9taW5hbnQtYmFzZWxpbmU9Im1pZGRsZSIgYWxpZ25tZW50LWJhc2VsaW5lPSJtaWRkbGUiIGNsYXNzPSJtZXNzYWdlVGV4dCI+cGFyc2UoaHRtbCk8L3RleHQ+PGxpbmUgeDE9Ijc2IiB5MT0iMzg4IiB4Mj0iMjgxIiB5Mj0iMzg4IiBzdHJva2U9Im5vbmUiIHN0eWxlPSJmaWxsOm5vbmUiIGNsYXNzPSJtZXNzYWdlTGluZTAiIGRhdGEtZXQ9Im1lc3NhZ2UiIGRhdGEtaWQ9Imk2IiBkYXRhLWZyb209IkFuZHJvaWQiIGRhdGEtdG89IlppcGxpbmUiIHN0cm9rZS13aWR0aD0iMiIgbWFya2VyLWVuZD0idXJsKCNzYXR0ZXJpLW1lcm1haWQtMS1hcnJvd2hlYWQpIj48L2xpbmU+PHRleHQgeD0iNDM4IiB5PSI0MDMiIGR5PSIxZW0iIHN0eWxlPSJmb250LXNpemU6MTZweDtmb250LXdlaWdodDo0MDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGRvbWluYW50LWJhc2VsaW5lPSJtaWRkbGUiIGFsaWdubWVudC1iYXNlbGluZT0ibWlkZGxlIiBjbGFzcz0ibWVzc2FnZVRleHQiPkJyaWRnZSBwYXJzZShodG1sKTwvdGV4dD48bGluZSB4MT0iMjg2IiB5MT0iNDMyIiB4Mj0iNTg5IiB5Mj0iNDMyIiBzdHJva2U9Im5vbmUiIHN0eWxlPSJmaWxsOm5vbmUiIGNsYXNzPSJtZXNzYWdlTGluZTAiIGRhdGEtZXQ9Im1lc3NhZ2UiIGRhdGEtaWQ9Imk3IiBkYXRhLWZyb209IlppcGxpbmUiIGRhdGEtdG89IkphdmFTY3JpcHQiIHN0cm9rZS13aWR0aD0iMiIgbWFya2VyLWVuZD0idXJsKCNzYXR0ZXJpLW1lcm1haWQtMS1hcnJvd2hlYWQpIj48L2xpbmU+PHRleHQgeD0iNDQxIiB5PSI0NDciIGR5PSIxZW0iIHN0eWxlPSJmb250LXNpemU6MTZweDtmb250LXdlaWdodDo0MDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGRvbWluYW50LWJhc2VsaW5lPSJtaWRkbGUiIGFsaWdubWVudC1iYXNlbGluZT0ibWlkZGxlIiBjbGFzcz0ibWVzc2FnZVRleHQiPkpTT04tZW5jb2RlZCBLb3RsaW4gbW9kZWwgY2xhc3M8L3RleHQ+PGxpbmUgeDE9IjU5MiIgeTE9IjQ3NiIgeDI9IjI4OSIgeTI9IjQ3NiIgc3Ryb2tlPSJub25lIiBzdHlsZT0ic3Ryb2tlLWRhc2hhcnJheTozLCAzO2ZpbGw6bm9uZSIgY2xhc3M9Im1lc3NhZ2VMaW5lMSIgZGF0YS1ldD0ibWVzc2FnZSIgZGF0YS1pZD0iaTgiIGRhdGEtZnJvbT0iSmF2YVNjcmlwdCIgZGF0YS10bz0iWmlwbGluZSIgc3Ryb2tlLXdpZHRoPSIyIiBtYXJrZXItZW5kPSJ1cmwoI3NhdHRlcmktbWVybWFpZC0xLWFycm93aGVhZCkiPjwvbGluZT48dGV4dCB4PSIxODIiIHk9IjQ5MSIgZHk9IjFlbSIgc3R5bGU9ImZvbnQtc2l6ZToxNnB4O2ZvbnQtd2VpZ2h0OjQwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZG9taW5hbnQtYmFzZWxpbmU9Im1pZGRsZSIgYWxpZ25tZW50LWJhc2VsaW5lPSJtaWRkbGUiIGNsYXNzPSJtZXNzYWdlVGV4dCI+VHlwZWQgS290bGluIG1vZGVsPC90ZXh0PjxsaW5lIHgxPSIyODQiIHkxPSI1MjAiIHgyPSI3OSIgeTI9IjUyMCIgc3Ryb2tlPSJub25lIiBzdHlsZT0ic3Ryb2tlLWRhc2hhcnJheTozLCAzO2ZpbGw6bm9uZSIgY2xhc3M9Im1lc3NhZ2VMaW5lMSIgZGF0YS1ldD0ibWVzc2FnZSIgZGF0YS1pZD0iaTkiIGRhdGEtZnJvbT0iWmlwbGluZSIgZGF0YS10bz0iQW5kcm9pZCIgc3Ryb2tlLXdpZHRoPSIyIiBtYXJrZXItZW5kPSJ1cmwoI3NhdHRlcmktbWVybWFpZC0xLWFycm93aGVhZCkiPjwvbGluZT48c3R5bGU+CiAgLmFjdG9yLAogIC5sYWJlbEJveCwKICAubm9kZSByZWN0LAogIC5ub2RlIHBvbHlnb24sCiAgLm5vZGUgY2lyY2xlLAogIC5jbHVzdGVyIHJlY3QsCiAgLnNlY3Rpb24sCiAgLnRhc2ssCiAgLnRhc2tUZXh0T3V0c2lkZVJpZ2h0LAogIC50YXNrVGV4dE91dHNpZGVMZWZ0IHsKICAgIGZpbGw6ICNmN2Y3ZjcgIWltcG9ydGFudDsKICAgIHN0cm9rZTogI2U4ZThlOCAhaW1wb3J0YW50OwogIH0KCiAgLm5vdGUgewogICAgZmlsbDogI2UwYzhkYiAhaW1wb3J0YW50OwogICAgc3Ryb2tlOiAjN2EzZDZlICFpbXBvcnRhbnQ7CiAgfQoKICAuYWN0b3ItbGluZSwKICAubWVzc2FnZUxpbmUwLAogIC5tZXNzYWdlTGluZTEsCiAgLmxvb3BMaW5lLAogIC5lZGdlUGF0aCAucGF0aCwKICAuZmxvd2NoYXJ0LWxpbmssCiAgLm1hcmtlciwKICAubWFya2VyIHBhdGgsCiAgW2lkJD0iLWFycm93aGVhZCJdIHBhdGgsCiAgW2lkJD0iLWZpbGxlZC1oZWFkIl0gcGF0aCwKICBbaWQkPSItY3Jvc3NoZWFkIl0gcGF0aCwKICBbaWQkPSItc3RpY2tUb3BBcnJvd0hlYWQiXSBwYXRoLAogIFtpZCQ9Ii1zdGlja0JvdHRvbUFycm93SGVhZCJdIHBhdGgsCiAgW2lkJD0iLXNvbGlkVG9wQXJyb3dIZWFkIl0gcGF0aCwKICBbaWQkPSItc29saWRCb3R0b21BcnJvd0hlYWQiXSBwYXRoIHsKICAgIHN0cm9rZTogIzQ0NDQ0NCAhaW1wb3J0YW50OwogICAgZmlsbDogIzQ0NDQ0NCAhaW1wb3J0YW50OwogIH0KCiAgLm1lc3NhZ2VUZXh0LAogIC5sYWJlbFRleHQsCiAgLmxhYmVsVGV4dCB0c3BhbiwKICAubG9vcFRleHQsCiAgLmxvb3BUZXh0IHRzcGFuLAogIC5ub3RlVGV4dCwKICAubm90ZVRleHQgdHNwYW4sCiAgLmFjdG9yLWJveCwKICAuYWN0b3ItYm94IHRzcGFuLAogIC5zZWN0aW9uVGl0bGUsCiAgLnNlY3Rpb25UaXRsZSB0c3BhbiwKICB0ZXh0LAogIHRzcGFuIHsKICAgIGZpbGw6ICMxMTExMTEgIWltcG9ydGFudDsKICAgIHN0cm9rZTogbm9uZSAhaW1wb3J0YW50OwogIH0KCiAgLmFjdGl2YXRpb24wLAogIC5hY3RpdmF0aW9uMSwKICAuYWN0aXZhdGlvbjIsCiAgLnNlcXVlbmNlTnVtYmVyIHsKICAgIGZpbGw6ICNmZmZmZmYgIWltcG9ydGFudDsKICAgIHN0cm9rZTogI2U4ZThlOCAhaW1wb3J0YW50OwogIH0KPC9zdHlsZT48L3N2Zz4=" alt="Mermaid diagram" loading="lazy" decoding="async">
<p>Step 1: Converted the data model layer to Kotlin Multiplatform, <a href="https://github.com/msfjarvis/compose-lobsters/commit/22f4e542e4ac820be152a16bda2bb650588d7b24">which went relatively fine</a>.</p>
<p>Step 2: Added the <a href="https://github.com/msfjarvis/compose-lobsters/commit/c1b35eb2019799547b53fd8fa4aecfab1b18e11c">actual Zipline-backed parsers</a>. I replaced <a href="https://github.com/burnoo/kspoon">Kspoon</a> with the underlying <a href="https://github.com/fleeksoft/Ksoup">Ksoup</a> library and called it directly instead of through a <code>kotlinx.serialization</code> based parser.</p>
<p>Step 3: Migrated the Android code to using <a href="https://github.com/msfjarvis/compose-lobsters/commit/a015794e1f7c3eabad8a965c4a991b13de0c9be6">the new Zipline-backed parser</a>. I’ve put together a <a href="https://github.com/msfjarvis/compose-lobsters/blob/a015794e1f7c3eabad8a965c4a991b13de0c9be6/api/src/main/kotlin/dev/msfjarvis/claw/api/converters/ZiplineHtmlConverterFactory.kt">terrible kludge</a> to determine when to call which parser method, and I am sure there’s a nicer way to do this that evaded me at the time.</p>
<p>Step 4: Embedded the latest copy of the Zipline assets <a href="https://github.com/msfjarvis/compose-lobsters/commit/3658aafd619cb36997503d0a408571d322531fa4">automatically in the APK</a> to speed up the first-launch experience. Since my app really only works with the internet it’s not a dealbreaker if I skip this, but I felt it’s better to have a fallback in case Cloudflare or I have done something to cause my remote manifest to become inaccessible. I later discovered this logic wasn’t actually falling back to embedded assets like I assumed, which I <a href="https://github.com/msfjarvis/compose-lobsters/commit/2c9fc7e5dc8f210157beaeef0661f11a906160e0">fixed</a> by explicitly loading the embedded assets manually in case of errors.</p>
<p>And that should’ve been it! Except…</p>
<h2 id="the-troubles-begin">The troubles begin</h2>
<p>After the mechanical refactors I tried running the app and immediately ran into <code>stack overflow</code> errors. Zipline helpfully includes a <a href="https://github.com/cashapp/zipline/tree/4fa57be9c61bf2b484a380e23d07e99e9b18f04f/zipline-profiler">sampling profiler</a> to identify bottlenecks, but I wasn’t able to figure out how to make it help with this specific problem. I also didn’t exactly understand what was causing this stack overflow. I flailed around for a fair bit but that’s not really interesting, so here’s a quick summary.</p>
<table>
<thead>
<tr>
<th>Thing tried</th>
<th>Impact</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://github.com/msfjarvis/compose-lobsters/commit/344da065918d09e314ddba4bd8eb8e77bd27a5c2">Cache Regex objects and replace functional chains with simple loops</a></td>
<td>Nothing whatsoever</td>
</tr>
<tr>
<td>Simplifying parser models to drop generated serializable code <small><a href="https://github.com/msfjarvis/compose-lobsters/commit/b2adb282756a6cb02ae20ea8a70fde0b947c6338">[1]</a><a href="https://github.com/msfjarvis/compose-lobsters/commit/fbe6f65e74c978198f1bd91a87db1b67faa3b6b8">[2]</a><a href="https://github.com/msfjarvis/compose-lobsters/commit/fbc0201c1060a7d175f59b4ba034053d798d848a">[3]</a></small></td>
<td>Made the code more annoying to deal with</td>
</tr>
<tr>
<td><a href="https://github.com/msfjarvis/compose-lobsters/commit/8d122636fd023a6596d338ae33760e2cd780037b">Replaced recursive code with a simpler loop</a></td>
<td>Native crash instead of stack overflow!</td>
</tr>
<tr>
<td><a href="https://github.com/msfjarvis/compose-lobsters/commit/c2fd16939bbee04688d248941f8d2c8a7e1b69e4">Lazy initialization</a></td>
<td>Nothing</td>
</tr>
<tr>
<td><a href="https://github.com/msfjarvis/compose-lobsters/commit/a8e9a5bf0f50c21a737adcdfa6e994b9bda53db8">De-duplicating fields</a></td>
<td>Nothing</td>
</tr>
<tr>
<td><a href="https://github.com/msfjarvis/compose-lobsters/commit/c78a003cb9bb7ecf88e7e65cf8335dd6be3e1112">Removing data classes</a></td>
<td>Nothing</td>
</tr>
</tbody>
</table>
<p>At this point it had already been almost two weeks, and I was pretty tired of going from one confusing problem to another and gave up on this adventure for a few days. After having some success at work with giving GPT-5.5 a harness based on the <a href="https://developer.android.com/tools/agents/android-cli"><code>android</code> CLI</a> to let it debug a complex issue by itself, I decided to bring that hammer back to this problem. I wrote out a handoff doc, cloned a local copy of Zipline for the clanker to refer to, and let it attack the problem overnight.</p>
<p>In the morning it claimed to have solved the crash, which I was able to verify myself. However, as is often the case with LLMs, the code was completely inscrutable. I asked it to commit the changes with a proper commit message but <a href="https://github.com/msfjarvis/compose-lobsters/commit/829a6fe4716a20f53560c61e0220eb83e7746b6f">that shed no real light</a>. There were <a href="https://github.com/msfjarvis/compose-lobsters/commit/829a6fe4716a20f53560c61e0220eb83e7746b6f#diff-e0524b31f8f252d91067b8d2101bca80c827aa9282036342bc3a2b914a51acb7">tests</a>, but it was clear the clanker was too lazy and had chosen to invent a separate code path just for tests so it could get away with writing mostly useless fluff. I <a href="https://github.com/msfjarvis/compose-lobsters/commit/ed9ba64162875e61ae42b352922e68c8f2a7273d">deleted the tests</a> and decided I’d add some manually written ones when I understood the code.</p>
<p>GPT-5.5 had also found another source of problems, the stack size. It <a href="https://github.com/msfjarvis/compose-lobsters/commit/4539e0a6b9c13d583e3970044e480457636f5945">raised the stack size limit</a> from the default 6 MB, and changed the code to ensure every Zipline operation ran <a href="https://github.com/msfjarvis/compose-lobsters/commit/13a9d72c35b679da523a436554f39f2e27d01b58">on the same thread/dispatcher</a> that we initialized Zipline with. I had to go look that up, and apparently the bigger stack size is an <a href="https://github.com/cashapp/zipline/blob/4fa57be9c61bf2b484a380e23d07e99e9b18f04f/zipline/src/hostMain/kotlin/app/cash/zipline/Zipline.kt#L199-L202">upstream recommendation</a> buried in a code comment. Also, TIL that <code>Thread</code> has a <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html#Thread-java.lang.ThreadGroup-java.lang.Runnable-java.lang.String-long-">four-argument constructor</a>!</p>
<p>I immediately understood the reason for the increased stack size, but it took a bit to realize that since JavaScript is single-threaded, it only makes sense we confine our reads and writes of JavaScript-exposed memory to that same thread.</p>
<p>Once I verified everything was working, I shipped it to the internal testing track.</p>
<h3 id="that-bit-of-code"><em>That</em> bit of code</h3>
<div class="markdown-alert markdown-alert-note" dir="auto">
<p class="markdown-alert-title" dir="auto"><svg class="octicon" viewBox="0 0 16 16" width="16" height="16" aria-hidden="true"><path d="M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"></path></svg>NOTE</p>
<p>This serializer was ultimately unnecessary and no longer exists. I’m including it because understanding and then removing it was an important part of validating the LLM-generated changes.</p>
</div>
<p>While I did merge the branch without really understanding what the <a href="https://github.com/msfjarvis/compose-lobsters/commit/829a6fe4716a20f53560c61e0220eb83e7746b6f">ParserSerializers code</a> was doing, I was determined to figure it out. To improve my understanding of it, I talked my way through the code to <a href="https://github.com/mayankofficial999">Mayank</a> at work, and eventually put in some <a href="https://github.com/msfjarvis/compose-lobsters/commit/7740177b86e4630b5a48753d18047a4bf5e7ce71">handwritten tests</a> to validate my mental model.</p>
<p>The clanker invented a very rudimentary serialization format that creates a flat string that is smaller than a comparative JSON object but trades that with forcing you to know ahead of time what field names to expect and in what order.</p>
<pre><code class="language-kotlin">private class PacketWriter {
  private val parts = StringBuilder()


  fun string(value: String): PacketWriter {
    parts.append(value.length).append(':').append(value)
    return this
  }


  // Other types skipped for brevity


  fun build(): String = parts.toString()
}




// To go from object to String, you call methods on
// the PacketWriter builder to feed in the fields of your values.
fun encode(value: Tag): String {
  return PacketWriter()
    .string(value.tag)
    .string(value.description)
    .boolean(value.privileged)
    .boolean(value.active)
    .string(value.category)
    .boolean(value.isMedia)
    .double(value.hotnessMod)
    .build()
}</code></pre>
<p>Effectively, what you’re seeing is a classic <a href="https://textbooks.cs.ksu.edu/cc210/05-loops/07-java/07-accumulator/">accumulator pattern</a> but in a String form. Instead of building up a JSON object, we construct a “flat” string that is essentially a concatenation of many <code>len(content):content</code> pairs. Null values are encoded with a length of -1; the colon is retained to keep parsing unambiguous.</p>
<p>The deserialization code will be self-explanatory if you were able to follow the serializer.</p>
<pre><code class="language-kotlin">private class PacketReader(private val payload: String) {
  private var index = 0


  // This code has to be more defensive about invalid
  // inputs, and hence most of the method is just validation.
  fun string(): String {
    val separatorIndex = payload.indexOf(':', index)
    if (separatorIndex == -1) throw SerializationException("Malformed payload")
    val length = payload.substring(index, separatorIndex).toInt()
    index = separatorIndex + 1
    if (length &lt; 0) throw SerializationException("Expected non-null string")
    val endIndex = index + length
    if (endIndex &gt; payload.length) throw SerializationException("Malformed payload")
    return payload.substring(index, endIndex).also { index = endIndex }
  }


  // Other types skipped for brevity
}


// Due to the nature of this scheme, deserialization is sensitive
// to the order in which serialization occurred. Your field ordering
// was already public API for public types, it is now also required
// to be stable for this serialization codec.
fun decodeObject(payload: String): Tag {
  val reader = PacketReader(payload)
  return Tag(
    tag = reader.string(),
    description = reader.string(),
    privileged = reader.boolean(),
    active = reader.boolean(),
    category = reader.string(),
    isMedia = reader.boolean(),
    hotnessMod = reader.double(),
  )
}</code></pre>
<p>To decode individual fields, we hold a top-level <code>index</code> variable and slice out a substring between <code>index</code> and the first <code>:</code> character to determine the length of data to be read. Then we read off that much after the colon, and move <code>index</code> to the first unread position. This is repeated till the decoder has read all fields it wants, and the object is constructed.</p>
<p>This is obviously extremely naive: The decoder reads the fields it expects; it does not ensure that the entire payload was traversed or reject trailing data. Invalid booleans become false, any negative nullable length becomes null, and numeric conversion exceptions are not normalized.</p>
<h2 id="deployment">Deployment</h2>
<p>Once I had the code working, the remaining part was deployment. I didn’t want to make this complicated or rely on GitHub Pages as a CDN which they discourage, so I opted to host it myself. The directory layout I chose is intentionally quite simplified and idiot-proofed against yours truly, who did fuck it up many times. The directory structure is hopefully self-explanatory:</p>
<pre><code class="language-plaintext">/var/lib/claw-deploy
├── current -&gt; /var/lib/claw-deploy/releases/20260712T113110Z
└── releases
    ├── 20260710T065949Z
    │&nbsp;&nbsp; ├── Claw-zipline-parser.zipline
    │&nbsp;&nbsp; ├── fleeksoft-io-charset.zipline
    │&nbsp;&nbsp; ├── fleeksoft-io-io-core.zipline
    │&nbsp;&nbsp; ├── kotlin-kotlin-stdlib.zipline
    │&nbsp;&nbsp; ├── kotlin_org_jetbrains_kotlin_kotlin_dom_api_compat.zipline
    │&nbsp;&nbsp; ├── kotlinx-atomicfu.zipline
    │&nbsp;&nbsp; ├── kotlinx-coroutines-core.zipline
    │&nbsp;&nbsp; ├── kotlinx-serialization-kotlinx-serialization-core.zipline
    │&nbsp;&nbsp; ├── kotlinx-serialization-kotlinx-serialization-json.zipline
    │&nbsp;&nbsp; ├── ksoup.zipline
    │&nbsp;&nbsp; ├── manifest.zipline.json
    │&nbsp;&nbsp; ├── Stately-stately-concurrency.zipline
    │&nbsp;&nbsp; ├── Stately-stately-strict.zipline
    │&nbsp;&nbsp; └── zipline-root-zipline.zipline
    └── 20260712T113110Z
    ...</code></pre>
<p><code>current</code> is a symlink to a timestamped directory containing the compiled Zipline artifacts. The size of individual releases is relatively tiny so I keep all previous releases around, making it easy to roll back during one of those aforementioned fuck ups. The app only ever fetches the <code>/current</code> path, so to the client this bundle is effectively unversioned.</p>
<p>The documented trust model for Zipline states that the host app and the build server are implicitly trusted, so I stuck with the official path of signing the manifest with an Ed25519 key. The app fetches the manifest, validates it is signed with the trusted key that is embedded in the app, then downloads the modules listed in it. Debug builds do not fetch remote assets, only loading the embedded bundle to ease testing. Failing to fetch the remote manifest also gracefully degrades to loading the embedded copy, which means 100% uptime is not a strict requirement. The K/JS bundle is currently only the parser code, but even more functionality could end up in there at some point. Exciting stuff! Unless…</p>
<p>When I went to make my first over-the-air release, I ran into caching problems :) While Zipline takes care of disabling the HTTP client cache when <a href="https://github.com/cashapp/zipline/blob/4fa57be9c61bf2b484a380e23d07e99e9b18f04f/zipline-loader/src/commonMain/kotlin/app/cash/zipline/loader/internal/fetcher/HttpFetcher.kt#L150">downloading <code>.zipline</code> files</a>, it doesn’t do so for <a href="https://github.com/cashapp/zipline/blob/4fa57be9c61bf2b484a380e23d07e99e9b18f04f/zipline-loader/src/commonMain/kotlin/app/cash/zipline/loader/internal/fetcher/HttpFetcher.kt#L142"><code>manifest.zipline.json</code></a>. Thus, a server with caching enabled can cause OkHttp to load its cached and outdated manifest, which results in new <code>.zipline</code> modules being downloaded without an updated manifest, ultimately causing checksum verification to fail. This was a failure state I wasn’t aware of when I first implemented Zipline in the app, and had to patch it on both ends: setting the right <a href="https://github.com/msfjarvis/dotfiles/commit/f6bb04b5e67005c04afe64bef20cd66fb2524d06">Cache-Control headers on the server</a>, and deleting the <a href="https://github.com/msfjarvis/compose-lobsters/commit/a1940881850b4020199667e0b342ac15e6880b2b">manifest URL cache entry in the app</a>. That seems to have done the job, and I have been able to roll out two updates since making these changes without any problems.</p>
<h2 id="what-changes-for-users">What changes for users</h2>
<p>Since I didn’t want to involve any complex server-side logic, my deployment setup is extremely rudimentary which makes some aspects of the in-app behavior suboptimal. The way things are configured right now, the app re-fetches the manifest on each launch, which slows down the initial content load. Every app launch sends at least one network request to my server, which means I was now accidentally collecting user IPs. To mitigate that on the origin server, I have disabled <a href="https://github.com/msfjarvis/dotfiles/commit/c5d73fc7d8f652bd3eedd3f9953e81bce1095201">logging in my webserver</a> and deleted the logs that were already recorded.</p>
<p>The release bundles are also unversioned, which means I do not yet know how I would roll out a breaking change, which I’ve already made as you’ll read in the very next section. This is all very new and exciting to figure out, even if it’s making my app somewhat worse in the short term.</p>
<p>Google Play’s <a href="https://support.google.com/googleplay/android-developer/answer/16559646?hl=en">policy on remote code loading</a> exempts code that is run in interpreters, which means the Zipline approach is compliant.</p>
<h2 id="on-debugging-with-llms">On debugging with LLMs</h2>
<p>I generally take pride in being meticulous and having a good system-level understanding of the code I work on, but here I gave up and deferred to an LLM which felt like admitting defeat. When it solved the problem overnight in a problem space I barely understood I was pretty glad in the moment to be done with it, but eventually that made way for just disappointment. I’d have probably felt better if I didn’t give up at that point and just continued investigating and researching, after all that was the entire reason Claw even exists. I’ve used it for <a href="https://github.com/msfjarvis/compose-lobsters/commit/29c374859b17c5fcef03585b8a01c00070de9097">nearly 5 years</a> to learn new things the hard way and I gave up on that this time just because I had a clanker handy.</p>
<p>The real kicker? All that inscrutable code is also completely useless. The stack size change and confining operations to the shared thread were the actual fixes. As I mentioned at the start, as part of writing this post over the past month I reviewed and validated every bit of that PR again which surfaced these hallucinations. As of writing, the <a href="https://github.com/msfjarvis/compose-lobsters/commit/194ccb540abf74b9ab499bea4a8f94e8725d62ac">custom serializer is gone</a>, and so is the <a href="https://github.com/msfjarvis/compose-lobsters/commit/7e53354a14e72f73a4d17fe28f68bfd06ec52155">zipline-parser-api module</a>. Removing the custom serializer and its model classes is a breaking API change, and my internal testing track <a href="https://github.com/msfjarvis/compose-lobsters/issues/1237">is now broken</a> because I haven’t updated the remote bundle with these changes. Another thing to figure out, sans LLMs this time :)</p>
<p>I’ll try harder to hold off on the LLMs going forward. Massive thanks to <a href="https://publicobject.com/">Jesse Wilson</a> whose writing and public speaking have helped me rediscover the fun of programming. Go check out his talk <a href="https://publicobject.com/2026/05/22/deconstructing-okhttp/">Deconstructing OkHttp</a>, it’s a great use of your time even if you do not know or care about OkHttp! You’ll learn a good deal about evolving a complex library over a period of years and how the benefits of thoughtful API design stack up.</p>
<h2 id="closing-notes">Closing notes</h2>
<p>The effort both taught me more about Zipline and solved a problem I fully expected to encounter. I was able to roll <a href="https://github.com/msfjarvis/compose-lobsters/commit/5c37772226eeba47e703074f3145ca8cb4ec1f95">out a tag parsing fix</a> via Zipline before publishing it to Google Play. I then <a href="https://github.com/msfjarvis/compose-lobsters/commit/4d02c0e29f10e48a7cbd191b5853ce0a54d29780">extended the fix to search</a>, and <a href="https://github.com/msfjarvis/compose-lobsters/commit/1a201a5430ec5d19d467bdd045c403e420e17c56">added OP markers to submitters</a> — things I missed before the release.</p>
<p>All in all, this has been quite the learning experience and I’m excited to once again have fun while programming.</p>]]></content:encoded>
    </item>
    <item>
      <title>Weeknotes: Week #28 (2026)</title>
      <link>https://msfjarvis.dev/weeknotes/week-28-2026/</link>
      <guid>https://msfjarvis.dev/weeknotes/week-28-2026/</guid>
      <description>30th weeknote in a row baby!</description>
      <pubDate>Sat, 11 Jul 2026 07:13:00 GMT</pubDate>
      <content:encoded><![CDATA[<h1 id="personal">Personal</h1>
<p>Relatively quiet week for me as I mostly focused on getting back to exercising which has been going well. I occupied my days with reading and taking evening naps which is making me feel old in a way I haven’t felt before 😄.</p>
<h2 id="socialising">Socialising</h2>
<p>Mayank is back home, and all week we’ve been making plans for one thing or another in the group chat. Genuinely this is how it feels when he hits us with the bombastic side eye while we’re setting up times for basically one movie a week lol</p>
<figure data-image-modal-root="" class="half" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/mayank-meme.Dvd9YJXu.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/mayank-meme.Dvd9YJXu.webp" data-pswp-width="671" data-pswp-height="673" data-pswp-caption="Don't worry buddy we do miss you" aria-label="A meme of a wojak standing alone in the corner at a party while other people around him are having fun and mingling." data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/mayank-meme.Dvd9YJXu.webp" alt="A meme of a wojak standing alone in the corner at a party while other people around him are having fun and mingling." loading="lazy" decoding="async" width="671" height="673" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">Don't worry buddy we do miss you</figcaption></figure>
<p>Speaking of movies, this week we watched <a href="https://www.imdb.com/title/tt37544992/">Baby Do Die Do</a>. Pretty generic plot but the movie had some good moments, enough for a one time watch but nothing really noteworthy. It was quite late by the time we returned from there so dinner was at the Truffles restaurant in Indiranagar.</p>
<div class="gallery" data-pswp-gallery="" style="--gallery-min-width: 250px; --gallery-gap: 1.5rem" data-astro-cid-rj65ajc3=""><figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/truffles-1.nko883QC.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/truffles-1.nko883QC.webp" data-pswp-width="4080" data-pswp-height="3072" data-pswp-caption="These were a little too oily, wouldn't recommend." aria-label="Chicken popcorn with dipping sauce on a black platter." data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/truffles-1.nko883QC.webp" alt="Chicken popcorn with dipping sauce on a black platter." loading="lazy" decoding="async" width="4080" height="3072" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">These were a little too oily, wouldn't recommend.</figcaption></figure><figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/truffles-2.BYZ4UGFr.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/truffles-2.BYZ4UGFr.webp" data-pswp-width="4080" data-pswp-height="3072" data-pswp-caption="This chicken club sandwich was awesome, everyone liked it." aria-label="Grilled sandwich and crisps on a plate, with chicken popcorn behind." data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/truffles-2.BYZ4UGFr.webp" alt="Grilled sandwich and crisps on a plate, with chicken popcorn behind." loading="lazy" decoding="async" width="4080" height="3072" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">This chicken club sandwich was awesome, everyone liked it.</figcaption></figure><figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/truffles-3.DIgMpxcj.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/truffles-3.DIgMpxcj.webp" data-pswp-width="4080" data-pswp-height="3072" data-pswp-caption="The peri peri chicken burger was also great, would recommend." aria-label="Burger and crisps beside fried chicken popcorn with dipping sauce." data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/truffles-3.DIgMpxcj.webp" alt="Burger and crisps beside fried chicken popcorn with dipping sauce." loading="lazy" decoding="async" width="4080" height="3072" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">The peri peri chicken burger was also great, would recommend.</figcaption></figure></div>
<h2 id="reading">Reading</h2>
<p>I’ve been very, very engrossed in reading the Mother of Learning series, so I’ve been trying to steal time for it at pretty much every chance I get. Reading in bed has become my new favorite pastime, and also led to some unplanned naps. All in all I’m reasonably confident about the 24 books a year reading goal now which was looking a little rough a couple of months ago.</p>
<p>The office was shockingly empty on Wednesday, so I stayed back for an extra 2 hours just to read in comfort and managed to <a href="https://bookwyrm.social/user/msfjarvis/generatednote/11975508">finish Mother of Learning: ARC 1</a>. No spoilers, but the ending was a crazy cliffhanger to leave the reader with. I can’t imagine the anxiety of being a web series reader when this story was being written live and having to wait weeks to know what happened to the protagonist.</p>
<p>Thankfully, I can just flip over to the next book, which <a href="https://bookwyrm.social/user/msfjarvis/generatednote/11989593">I did</a>, and it’s just as great.</p>
<h2 id="fediverse-migrations">Fediverse migrations</h2>
<p>I had to deal with some data migrations this week as I switched to <a href="https://fantastic.earth">Abhinav’s Mastodon server</a>, away from <a href="https://androiddev.social">androiddev.social</a> which could be shutting down in December, and I’d rather deal with the associated pains sooner than later. Abhinav runs a <a href="https://stic.earth">bunch of services</a> at cost for friends and family, and I’m grateful he helped me out here.</p>
<p>That said, my new Fediverse account is at <a href="https://fantastic.earth/@msfjarvis">msfjarvis@fantastic.earth</a>! I have my old post history saved which I <em>might</em> put up as a static archive somewhere so I can replace the links to my old posts, but that’s a future yak to shave.</p>
<p>I also tried migrating out of <a href="https://bookwyrm.social">Bookwyrm</a> to Abhinav’s server, but ran into a lot of problems with missing books on this server failing the user import. I’m slowly adding the missing books so I can get my user import done, but it has <a href="https://fantastic.earth/@msfjarvis/116896699738136166">been rather frustrating</a>, so I might stick it out with the old server after all.</p>
<p>One might wonder why I bother dealing with the Fediverse when so much of it is a pain in the ass? Well, the Fediverse has Odin.</p>
<blockquote class="mastodon-post" lang="en" cite="https://infosec.exchange/@0xabad1dea/116900098449254586" data-source="fediverse" data-astro-cid-hgg3ctr5=""><header class="mastodon-post__author" data-astro-cid-hgg3ctr5=""><span class="mastodon-post__name" data-astro-cid-hgg3ctr5="">abadidea</span><span class="mastodon-post__account" data-astro-cid-hgg3ctr5="">@0xabad1dea@infosec.exchange</span></header><div class="mastodon-post__content" data-astro-cid-hgg3ctr5=""><p data-astro-cid-hgg3ctr5="">Odin got a bit hyper this morning when he realized that mommy had *not* snuck out the door at the crack of dawn this time</p></div><div class="mastodon-post__media-grid" data-astro-cid-hgg3ctr5=""><figure class="mastodon-post__media" data-astro-cid-hgg3ctr5=""><img src="https://media.infosec.exchange/infosec.exchange/media_attachments/files/116/900/098/232/693/858/original/306f8447de78adee.jpeg" alt="Odin the Newfie full of love, wonder and drool " loading="lazy" data-astro-cid-hgg3ctr5=""></figure></div><footer class="mastodon-post__footer" data-astro-cid-hgg3ctr5=""><time datetime="2026-07-11T07:12:23.625Z" data-astro-cid-hgg3ctr5="">11 Jul 2026, 07:12</time><a href="https://infosec.exchange/@0xabad1dea/116900098449254586" data-astro-cid-hgg3ctr5="">View original post <span aria-hidden="true" data-astro-cid-hgg3ctr5="">↗</span></a></footer></blockquote>
<h1 id="work">Work</h1>
<p>With two incidents in quick succession we’ve ended up in a deployment freeze and a big list of hardening work to prevent such problems in the future. I’m planning to get involved with the backend side of things to help out as the SDK workload has drastically reduced with all our major roadmap items already shipped out.</p>
<h1 id="meta">Meta</h1>
<p>I resisted the urge to do too much to the site, only working to restore the search feature that I hadn’t ported over from the old Hugo site. It’s still built on <a href="https://pagefind.app">Pagefind</a>, but I’ve styled the UI to match the site a bit better.</p>
<p>On Friday night I accidentally deployed my drafts site to production while working on the site locally and didn’t realize until I saw notifications from my RSS reader picking up duplicate posts. Sorry again for everyone else who got spammed by that mistake 🙇</p>
<h2 id="writing">Writing</h2>
<p>Shockingly productive week on the writing front! I wrote <a href="https://msfjarvis.dev/posts/my-first-spam-webmention/">about a spam Webmention</a> I received some time ago and the moderation UI I had to build to combat future instances, and a <a href="https://msfjarvis.dev/posts/julyreply-re-stuck-in-draft/">reply post</a> as part of the <a href="https://robertbirming.com/julyreply-2026-blog-connecting/">JulyReply blogging event</a>. I also had to write a small <a href="https://msfjarvis.dev/posts/apologies-for-the-rss-mishap/">apology post</a> for the spam I spread via my RSS mishap.</p>
<h1 id="cooking">Cooking</h1>
<p>Yash’s stash of Instagram recipes continues to keep us fed. No blender-based recipes yet, will definitely try to find one soon™.</p>
<div class="gallery" data-pswp-gallery="" style="--gallery-min-width: 250px; --gallery-gap: 1.5rem" data-astro-cid-rj65ajc3=""><figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/instagram-egg-curry.MIUiqfvc.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/instagram-egg-curry.MIUiqfvc.webp" data-pswp-width="3072" data-pswp-height="4080" data-pswp-caption="We flubbed like 4 separate steps on this recipe and it still came out delicious, definitely a candidate for the permanent rotation." aria-label="Egg curry served over rice in a metal bowl." data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/instagram-egg-curry.MIUiqfvc.webp" alt="Egg curry served over rice in a metal bowl." loading="lazy" decoding="async" width="3072" height="4080" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">We flubbed like 4 separate steps on this recipe and it still came out delicious, definitely a candidate for the permanent rotation.</figcaption></figure><figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/veggie-pasta.BwZfBp8c.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/veggie-pasta.BwZfBp8c.webp" data-pswp-width="3072" data-pswp-height="4080" data-pswp-caption="Veggies, spices, some sauces and a carb in a pan. Unbeatable combination every single time." aria-label="Penne pasta with vegetables in a metal bowl." data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/veggie-pasta.BwZfBp8c.webp" alt="Penne pasta with vegetables in a metal bowl." loading="lazy" decoding="async" width="3072" height="4080" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">Veggies, spices, some sauces and a carb in a pan. Unbeatable combination every single time.</figcaption></figure></div>]]></content:encoded>
    </item>
    <item>
      <title>Apologies for the RSS mishap!</title>
      <link>https://msfjarvis.dev/posts/apologies-for-the-rss-mishap/</link>
      <guid>https://msfjarvis.dev/posts/apologies-for-the-rss-mishap/</guid>
      <description>Defeated yet again by an entirely too complicated build pipeline</description>
      <pubDate>Fri, 10 Jul 2026 19:34:00 GMT</pubDate>
      <content:encoded><![CDATA[<p>Just a quick apology to all subscribers of the RSS feed, whom I accidentally sent a <em>lot</em> of duplicate posts to.</p>
<p>I was working on the site and pushed to the wrong deployment, which caused the main site to start behaving like it was the preview site which includes my draft posts. Lots of duplicates and incomplete posts have now been dumped into your feed readers due to this, since it took me over an hour to figure out I had the mistake.</p>
<p>Your best course of action is to just delete and re-add the feeds instead of trying to hunt down the duplicates.</p>
<p>Sorry again!</p>]]></content:encoded>
    </item>
    <item>
      <title>JulyReply - Re: Stuck in draft</title>
      <link>https://msfjarvis.dev/posts/julyreply-re-stuck-in-draft/</link>
      <guid>https://msfjarvis.dev/posts/julyreply-re-stuck-in-draft/</guid>
      <description>On drafts and being okay with them</description>
      <pubDate>Thu, 09 Jul 2026 18:52:00 GMT</pubDate>
      <content:encoded><![CDATA[<div class="markdown-alert markdown-alert-note" dir="auto">
<p class="markdown-alert-title" dir="auto"><svg class="octicon" viewBox="0 0 16 16" width="16" height="16" aria-hidden="true"><path d="M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"></path></svg>NOTE</p>
<p>This post is part of the <a href="https://robertbirming.com/julyreply-2026-blog-connecting/">JulyReply</a> blogging event</p>
</div>
<p>Gordon wrote about his blog posts being <a href="https://www.gordonmclean.co.uk/2026/07/07/stuck-in-draft-3/">stuck in draft</a>, which is a problem I also have to some extent – my drafts site has 75 posts right now compared to the 67 on the main site. At least one of those drafts carries a date from 2020!</p>
<p>I agree with him on <em>urgency</em> being a strong motivator. I’ve turned around similarly sized posts in under an hour and also in <strong>months</strong>. My interest in specific things ebbs and flows quite frequently, and often it will be a very long time before I can summon the requisite curiosity and motivation to wrap up a draft. Many times, it will be someone chancing across that draft and <a href="https://github.com/msfjarvis/msfjarvis.dev/issues/79">posting some feedback</a> which motivates me to finish it off. Other times I’ll simply post about having an incomplete draft and let someone express interest, which then becomes my driving force to deliver that bit of writing.</p>
<p>And yet, in MOST cases, I just no longer care about the topic to finish that draft ¯\<em>(ツ)</em>/¯</p>
<p>I like having ideas written down <em>anywhere</em>, so my blogging process will almost always start with writing down either broad bullet points or a stream of consciousness dump into a draft. Most of these drafts will become something real in a few weeks time, and some of them will sink to the bottom to be forgotten forever. I think I’m okay with that.</p>
<p>That said, I’ll take a page out of Gordon’s metaphorical book and also list some of my (comparatively uninteresting) drafts that I would like to finish. Reach out on <a href="https://fantastic.earth/@msfjarvis">the Fediverse</a>, via <a href="mailto:me@msfjarvis.dev">email</a>, or whatever communication channel you can grab a hold of me through and let me know what looks interesting. I do apologize that this is all technical content since I’m still learning to be a human on this blog outside my weeknotes 😅</p>
<p>I’ll do a count on 17th July, which will give me around 2 weeks to finish up the post.</p>
<ul>
<li>Using <a href="https://github.com/square/retrofit">Retrofit</a> to disguise scraping as a REST API</li>
<li>Rewriting the <a href="https://github.com/msfjarvis/compose-lobsters">Claw</a> HTML parser for over the air updates (PSA: LLMs were used for debugging)</li>
<li>How I use Git</li>
<li>Using Docker containers in NixOS</li>
<li>Building a Webmentions server on top of the Cloudflare Developer Platform (PSA: employer shilling)</li>
<li>Preview-driven Compose UI development with LLMs and the android CLI</li>
</ul>
<p>P.S. <a href="https://abhinavsarkar.net">Abhinav</a> built a <a href="https://abhinavsarkar.net/upcoming/">cool page</a> on his site serving this exact purpose, go cast your vote there too if you enjoy quality technical writing! I wanted to steal the idea and build a voting UI but that would make <em>this</em> post get stuck in draft!</p>]]></content:encoded>
    </item>
    <item>
      <title>My first spam Webmention</title>
      <link>https://msfjarvis.dev/posts/my-first-spam-webmention/</link>
      <guid>https://msfjarvis.dev/posts/my-first-spam-webmention/</guid>
      <description>Finally being forced to build moderation capabilities into my Webmentions server</description>
      <pubDate>Tue, 07 Jul 2026 10:39:00 GMT</pubDate>
      <content:encoded><![CDATA[<p>I finally got my first spam Webmention on this site</p>
<figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/bsky-spam-post-light.CztkskgE.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/bsky-spam-post-light.CztkskgE.webp" data-pswp-dark-src="https://msfjarvis.dev/_astro/bsky-spam-post-dark.D9UhSLjg.webp" data-pswp-width="920" data-pswp-height="167" data-pswp-caption="A spam post from Bluesky that bridged over as a Webmention" aria-label="Screenshot of a Bluesky spam post asking the reader to visit a pinned page." data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><source media="(prefers-color-scheme: dark)" srcset="/_astro/bsky-spam-post-dark.D9UhSLjg.webp" data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/bsky-spam-post-light.CztkskgE.webp" alt="Screenshot of a Bluesky spam post asking the reader to visit a pinned page." loading="lazy" decoding="async" width="920" height="167" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">A spam post from Bluesky that bridged over as a Webmention</figcaption></figure>
<p>I chanced across this on one of my weeknotes, which seems to have already been deleted by Bluesky moderation or the poster by the time I got around to seeing it. I have been coasting along for a few months now without any moderation set up to easily moderate Webmentions, but I clearly should be paying more attention. This is far from being bad as far as spam goes, but I’d like to be prepared for the eventuality of something really terrible showing up in one of these.</p>
<p>So far I had been resorting to manually running queries in the Cloudflare dashboard’s <a href="https://developers.cloudflare.com/d1/get-started/#4-run-a-query-against-your-d1-database">D1 SQL Explorer</a>, but that’s too slow and complex to serve as an actual moderation tool.</p>
<p>To that effect I now have a very brutalist dashboard being served by the Webmentions server (code <a href="https://git.msfjarvis.dev/msfjarvis/acceptable-vibes/src/branch/main/webmentions-server">here</a>) which has a list of all pages that have received Webmentions. To mask my inability to do good web design, it is styled using the <a href="https://oat.ink">Oat</a> CSS library like all my non-blog web projects. I find the minimalist aesthetic of Oat quite nice and it rarely needs any significant changes to a semantically laid out page when you add it.</p>
<figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/pages-with-webmentions-light.C1cp2rAb.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/pages-with-webmentions-light.C1cp2rAb.webp" data-pswp-dark-src="https://msfjarvis.dev/_astro/pages-with-webmentions-dark.DDGPeCD9.webp" data-pswp-width="1280" data-pswp-height="1392" aria-label="Webmentions admin page listing site pages with mention counts and verification times." data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><source media="(prefers-color-scheme: dark)" srcset="/_astro/pages-with-webmentions-dark.DDGPeCD9.webp" data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/pages-with-webmentions-light.C1cp2rAb.webp" alt="Webmentions admin page listing site pages with mention counts and verification times." loading="lazy" decoding="async" width="1280" height="1392" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a></figure>
<p>Clicking on one of these links takes you to this equally terrible UI which could be reduced down to a list with delete buttons and still serve exactly the same purpose. Not exactly rocket science here.</p>
<figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/received-webmentions-light.B3qD9kGF.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/received-webmentions-light.B3qD9kGF.webp" data-pswp-dark-src="https://msfjarvis.dev/_astro/received-webmentions-dark.CCKpzs_9.webp" data-pswp-width="1248" data-pswp-height="2301" aria-label="Admin page showing received webmentions for one post with delete buttons." data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><source media="(prefers-color-scheme: dark)" srcset="/_astro/received-webmentions-dark.CCKpzs_9.webp" data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/received-webmentions-light.B3qD9kGF.webp" alt="Admin page showing received webmentions for one post with delete buttons." loading="lazy" decoding="async" width="1248" height="2301" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a></figure>
<p>I didn’t want to figure out passwords and bearer auth, so the server does not attempt to do any authentication and just relies on Cloudflare Access to guard access to the UI and the endpoints this uses.</p>
<p>Hopefully I never have to use it!</p>]]></content:encoded>
    </item>
    <item>
      <title>Weeknotes: Week #27 (2026)</title>
      <link>https://msfjarvis.dev/weeknotes/week-27-2026/</link>
      <guid>https://msfjarvis.dev/weeknotes/week-27-2026/</guid>
      <description>Lots of socialising, food, and getting back into reading</description>
      <pubDate>Sat, 04 Jul 2026 18:33:17 GMT</pubDate>
      <content:encoded><![CDATA[<figure data-image-modal-root="" class="half" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/da-moon.jvWTltdx.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/da-moon.jvWTltdx.webp" data-pswp-width="3072" data-pswp-height="4080" data-pswp-caption="I don't think I did justice to how pretty the Moon looked that night" aria-label="Bright moon glowing through palm leaves against a dark night sky" data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/da-moon.jvWTltdx.webp" alt="Bright moon glowing through palm leaves against a dark night sky" loading="lazy" decoding="async" width="3072" height="4080" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">I don't think I did justice to how pretty the Moon looked that night</figcaption></figure>
<h1 id="personal">Personal</h1>
<p>My health was finally good enough this week to return to the gym, felt nice to be back in the swing of things. Hopefully the weather does not screw me over and I can work up to my old schedule again.</p>
<h2 id="reading">Reading</h2>
<p>I’ve been ramping up my reading so I can hit my self imposed 24 books a year goal. I finished reading the 3rd book of the Chaos Walking trilogy, <a href="https://en.wikipedia.org/wiki/Monsters_of_Men">Monsters of Men</a>. On <a href="https://kat.bio">Amogh</a>’s recommendation, I’ve now started the <a href="https://www.royalroad.com/fiction/21220/mother-of-learning">Mother of Learning</a> series. I’m 200 pages in already, the story’s great and I’ve found myself choosing to climb into bed with the Kobo at times where I’d usually pull up Steam or a terminal. I’m also making a change and <a href="https://masto-archive.msfjarvis.dev/@msfjarvis/116851965538384554">reading this on KOReader</a> since I’ve had it installed for a while now and never really spent time with it to find what reading settings work for me.</p>
<h2 id="socialising">Socialising</h2>
<p>The group chat had planned a visit to <a href="https://thezaitoon.com/">Zaitoon</a> last week which kept getting put off for one reason or another, but we finally were able to make time this week. The food was excellent, even though I’m not usually a mutton enjoyer I quite liked the curry we got. Will definitely be visiting again!</p>
<div class="gallery" data-pswp-gallery="" style="--gallery-min-width: 250px; --gallery-gap: 1.5rem" data-astro-cid-rj65ajc3=""><figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/curries-at-zaitoon.UJVjEfpo.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/curries-at-zaitoon.UJVjEfpo.webp" data-pswp-width="3072" data-pswp-height="4080" data-pswp-caption="Everything in the main course was delicious" aria-label="Restaurant table with a variety of naan, and two rich curries in white bowls" data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/curries-at-zaitoon.UJVjEfpo.webp" alt="Restaurant table with a variety of naan, and two rich curries in white bowls" loading="lazy" decoding="async" width="3072" height="4080" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">Everything in the main course was delicious</figcaption></figure><figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/kebabs-at-zaitoon.BbjcZ7UY.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/kebabs-at-zaitoon.BbjcZ7UY.webp" data-pswp-width="4080" data-pswp-height="3072" data-pswp-caption="A little drier than I would've liked but still quite tasty" aria-label="Plate of grilled kebabs with dipping sauces, fries, and onions" data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/kebabs-at-zaitoon.BbjcZ7UY.webp" alt="Plate of grilled kebabs with dipping sauces, fries, and onions" loading="lazy" decoding="async" width="4080" height="3072" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">A little drier than I would've liked but still quite tasty</figcaption></figure><figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/faluda-at-zaitoon.CXtswHrY.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/faluda-at-zaitoon.CXtswHrY.webp" data-pswp-width="3072" data-pswp-height="4080" data-pswp-caption="We made a mess trying to split this four ways lol" aria-label="Tall faluda dessert with ice cream, wafers, fruit, and a small paper umbrella" data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/faluda-at-zaitoon.CXtswHrY.webp" alt="Tall faluda dessert with ice cream, wafers, fruit, and a small paper umbrella" loading="lazy" decoding="async" width="3072" height="4080" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">We made a mess trying to split this four ways lol</figcaption></figure></div>
<p>We decided to burn the calories by walking back home, and came across a ClickHouse ad on a billboard, definitely “only in Bengaluru”! Funnily enough the very next day I saw this post on <a href="https://lobste.rs">Lobsters</a> : <a href="https://matduggan.com/clickhouse-is-winning-the-observability-wars/">“ClickHouse is winning the observability wars”</a>.</p>
<figure data-image-modal-root="" class="half" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/clickhouse-ad.wCefYGRZ.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/clickhouse-ad.wCefYGRZ.webp" data-pswp-width="4080" data-pswp-height="3072" data-pswp-caption="Only in Bengaluru am I subjected to database companies advertising on the streets" aria-label="Large ClickHouse billboard above a road at night with streetlights and trees" data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/clickhouse-ad.wCefYGRZ.webp" alt="Large ClickHouse billboard above a road at night with streetlights and trees" loading="lazy" decoding="async" width="4080" height="3072" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">Only in Bengaluru am I subjected to database companies advertising on the streets</figcaption></figure>
<p><a href="https://www.sasikanth.dev/">Sasikanth</a> is back in Bengaluru, he visited me on Saturday to catch up for a bit, then we went for lunch to the nearby <a href="https://maravanthe-coastal-cuisine.eatwithnia.com/">Maravanthe Coastal Cuisine</a> with Yash tagging along.</p>
<figure data-image-modal-root="" class="half" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/chicken-meal-at-maravanthe.CHZJYVcI.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/chicken-meal-at-maravanthe.CHZJYVcI.webp" data-pswp-width="4080" data-pswp-height="3072" data-pswp-caption="Not the best meal we've had but you can't really beat their prices" aria-label="Chicken meal on a banana leaf with rice, curry, papad, and side dishes" data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/chicken-meal-at-maravanthe.CHZJYVcI.webp" alt="Chicken meal on a banana leaf with rice, curry, papad, and side dishes" loading="lazy" decoding="async" width="4080" height="3072" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">Not the best meal we've had but you can't really beat their prices</figcaption></figure>
<h1 id="work">Work</h1>
<p>Work was pretty quiet this week as we continued stumbling through one access problem after another trying to get new releases out for our Flutter SDK. Maybe next week 😔✊</p>
<p>In our weekly sync with the US team I got the chance to talk about some LLM-driven performance improvements I had made to our native SDKs, bringing our meeting join times down by ~20%. I still consider it to be somewhat slower than I’d like, so work on this front will continue.</p>
<p>We had a “minor” <a href="https://new.cloudflarestatus.com/incidents/4sfv79jntx9d">incident</a> on Thursday night, our backend team spent multiple hours mitigating the fallout. Being on call in a company of this size is a scary prospect, and I’m always impressed with how incident response happens at Cloudflare.</p>
<h1 id="meta">Meta</h1>
<p>The site has received some upgrades! The image component now has the ability to have separate images for light/dark mode, which I’ve started using for UI screenshots; light mode users rejoice. There’s now an unobtrusive ToC UI, and mermaid diagrams are now rendered using <a href="https://kroki.io">Kroki</a> instead of the Mermaid JS library. Thanks to <a href="https://yashgarg.dev">Yash</a> for the tip about Kroki!</p>
<h1 id="writing">Writing</h1>
<p>I published a new post on Monday about the changes I made last week to <a href="https://msfjarvis.dev/posts/keeping-ai-crawlers-off-my-forgejo-server/">keep AI crawlers off my Forgejo server</a>. So far all the mitigations have borne fruit, and the number of IPs that need to be banned by my server has stopped going up. Since the penalty for the 404 ban lasts a full month, that graph will hold at that level until the end of July and hopefully never climb back up 🤞</p>
<figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/cloudflare-security-rules-light.BbH5z4KN.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/cloudflare-security-rules-light.BbH5z4KN.webp" data-pswp-dark-src="https://msfjarvis.dev/_astro/cloudflare-security-rules-dark.CFlpA9FG.webp" data-pswp-width="1322" data-pswp-height="452" data-pswp-caption="I still don't know why those two repos specifically are so interesting to the crawlers" aria-label="Cloudflare dashboard showing a series of security rules and the number of individual requests being handled by them" data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><source media="(prefers-color-scheme: dark)" srcset="/_astro/cloudflare-security-rules-dark.CFlpA9FG.webp" data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/cloudflare-security-rules-light.BbH5z4KN.webp" alt="Cloudflare dashboard showing a series of security rules and the number of individual requests being handled by them" loading="lazy" decoding="async" width="1322" height="452" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">I still don't know why those two repos specifically are so interesting to the crawlers</figcaption></figure>
<figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/fail2ban-light.DN8NaTB0.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/fail2ban-light.DN8NaTB0.webp" data-pswp-dark-src="https://msfjarvis.dev/_astro/fail2ban-dark.CTWcRiBM.webp" data-pswp-width="2148" data-pswp-height="1230" data-pswp-caption="The Cloudflare mitigations have taken care of most of the problems so far, I might take off the nuclear 404 -> ban rule from the server" aria-label="Grafana dashboard showing over 30 thousand bans issued by fail2ban" data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><source media="(prefers-color-scheme: dark)" srcset="/_astro/fail2ban-dark.CTWcRiBM.webp" data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/fail2ban-light.DN8NaTB0.webp" alt="Grafana dashboard showing over 30 thousand bans issued by fail2ban" loading="lazy" decoding="async" width="2148" height="1230" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">The Cloudflare mitigations have taken care of most of the problems so far, I might take off the nuclear 404 -&gt; ban rule from the server</figcaption></figure>
<h1 id="cooking">Cooking</h1>
<p>We cooked all nights we were at home, other than one where I fell asleep reading 😬. Nothing new this week, but Prime Day finally had a discount on a blender Yash and I had been eyeing so there are many a blended cottage cheese recipes in our future.</p>
<div class="gallery" data-pswp-gallery="" style="--gallery-min-width: 250px; --gallery-gap: 1.5rem" data-astro-cid-rj65ajc3=""><figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/egg-rice.CZ4qMr5s.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/egg-rice.CZ4qMr5s.webp" data-pswp-width="3072" data-pswp-height="4080" data-pswp-caption="The Instagram egg rice recipe continues to deliver" aria-label="Bowl of egg rice with a spoon, held in one hand" data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/egg-rice.CZ4qMr5s.webp" alt="Bowl of egg rice with a spoon, held in one hand" loading="lazy" decoding="async" width="3072" height="4080" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">The Instagram egg rice recipe continues to deliver</figcaption></figure><figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/chickpea-curry.CK8RAQ1M.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/chickpea-curry.CK8RAQ1M.webp" data-pswp-width="3072" data-pswp-height="4080" data-pswp-caption="TIL baking soda speeds up pressure cooking of chickpeas" aria-label="Steel plate with chapatis, a bowl of chickpea curry, and a glass of buttermilk" data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/chickpea-curry.CK8RAQ1M.webp" alt="Steel plate with chapatis, a bowl of chickpea curry, and a glass of buttermilk" loading="lazy" decoding="async" width="3072" height="4080" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">TIL baking soda speeds up pressure cooking of chickpeas</figcaption></figure></div>]]></content:encoded>
    </item>
    <item>
      <title>Keeping AI crawlers off my Forgejo server</title>
      <link>https://msfjarvis.dev/posts/keeping-ai-crawlers-off-my-forgejo-server/</link>
      <guid>https://msfjarvis.dev/posts/keeping-ai-crawlers-off-my-forgejo-server/</guid>
      <description>The short and bumbling journey to finally giving my tiny VPS some respite</description>
      <pubDate>Mon, 29 Jun 2026 04:53:18 GMT</pubDate>
      <content:encoded><![CDATA[<div class="markdown-alert markdown-alert-note" dir="auto">
<p class="markdown-alert-title" dir="auto"><svg class="octicon" viewBox="0 0 16 16" width="16" height="16" aria-hidden="true"><path d="M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"></path></svg>NOTE</p>
<p>This post will mention Cloudflare. People have a lot of strong opinions about the company’s effective monopoly, myself included, but it was the fastest way for me to solve my immediate problem.
I’m also employed at Cloudflare, and get a free Enterprise account from them, but I believe nothing I have set up here requires one. If someone tries this out and runs into any free-tier limitations, please let me know and I will make a correction.</p>
</div>
<p>Beginning 2026-06-18 I was starting to see a lot of slowness in my Forgejo instance, which I hoped would eventually subside, so I chose to just watch the load dashboards and wait.</p>
<p>The crawlers obviously did not relent, so I started earnestly mitigating it on 2026-06-25 by enabling fail2ban which unfortunately did not do much to help the situation. I had to take a hammer to the problem and put in a Cloudflare <a href="https://developers.cloudflare.com/security/rules/">security rule</a> banning the countries of China and Vietnam where most of the requests were originating. The rule also carried a specific ban for accesses to the <code>oneplus3</code> repository because it was surprisingly a “fan” favorite. The Cloudflare block immediately got to work and within 16 hours mitigated over 130K hits.</p>
<p>However, the site’s availability started dropping over the next few hours and I started seeing a near constant stream of <code>HTTP 521</code> responses which indicates Cloudflare couldn’t reach my server. Turns out the log transformer I enabled for fail2ban to work wasn’t logging the real client IPs, it was logging Cloudflare IPs, so fail2ban had just been banning Cloudflare 😬</p>
<p>Solving that wasn’t too difficult, Caddy has the necessary config knobs to mark <a href="https://caddyserver.com/docs/caddyfile/options#trusted-proxies">reverse proxies as trusted</a> and <a href="https://caddyserver.com/docs/caddyfile/options#client-ip-headers">forward the client IP headers</a> correctly. I unbanned all the IPs in fail2ban, and after that I followed <a href="https://github.com/fail2ban/fail2ban/blob/2c1eb69381796c49e8866bb26fdc057bca159bfd/config/action.d/cloudflare.conf">this example</a> to make fail2ban directly block offenders via Cloudflare’s IP Access Rules.</p>
<p>Within 3 hours I was up to 2200 individual IPs banned, so I decided to do some analysis of banned IPs to figure out if there’s a broader block I can instate and prevent running into the 50,000 limit. Most of them were popular consumer providers like Comcast and Verizon, so I banned the ASNs south of them:</p>
<pre><code class="language-plaintext">- AS4229 Zenlayer
- AS150436 Byteplus
- AS62240 Clouvider
- AS62651 Strong Technology
- AS32934 Facebook</code></pre>
<p>This helped to some degree but not <em>quite</em>, and I was still getting a sustained 50 to a 100 RPS which wasn’t impossible to serve, just very wasteful and causing other things to slow down on this rather weak VPS. After around 12 hours, I realized fail2ban had now banned 31K individual IPs which was coming dangerously close to the 50K IP Access Rules limit from Cloudflare, and was admittedly a rather naive way of addressing the problem.</p>
<p>I turned off fail2ban, and started poring through my Forgejo logs to find patterns I could let Cloudflare handle via a <a href="https://developers.cloudflare.com/ruleset-engine/custom-rulesets/">custom ruleset</a>. This took a bit to figure out, but ultimately I landed on these, in order:</p>
<ol>
<li>Block China and Vietnam. These still have the worst of the residential proxy botnet problem.</li>
<li>Block the known-bad ASNs from before.</li>
<li>Block anyone accessing the <code>/oneplus3</code> and <code>/revanced-patches</code> repositories since they had become super attractive scraper honeypots for some reason, I don’t really need either to be available so this was fine.</li>
<li>Block fetches of <code>.bundle</code> archives, since I don’t use them and they’re expensive to generate.</li>
<li>Block (downgraded to Managed Challenge later) paginated history crawling:
<pre><code class="language-plaintext">http.request.method eq "GET" and
http.request.uri.path strict wildcard "/*/*/commits/commit/*" and
http.request.uri.query contains "page="</code></pre>
</li>
<li>Managed Challenge for all other anonymous history crawling
<pre><code class="language-plaintext">http.request.method eq "GET" and
not cf.client.bot and
(
  http.request.uri.path strict wildcard "/*/*/blame/commit/*" or
  http.request.uri.path strict wildcard "/*/*/commits/commit/*" or
  http.request.uri.path strict wildcard "/*/*/src/commit/*" or
  http.request.uri.path strict wildcard "/*/*/blame/tag/*" or
  http.request.uri.path strict wildcard "/*/*/commits/tag/*" or
  http.request.uri.path strict wildcard "/*/*/src/tag/*" or
  http.request.uri.path strict wildcard "/*/*/find/tag/*" or
  http.request.uri.path strict wildcard "/*/*/commit/*.diff" or
  http.request.uri.path strict wildcard "/*/*/commit/*.patch" or
  (
    http.request.uri.path strict wildcard "/*/*/commit/*" and
    (
      http.request.uri.query contains "files=" or
      http.request.uri.query contains "show-outdated=" or
      http.request.uri.query contains "whitespace="
    )
  )
)</code></pre>
</li>
<li>Managed Challenge for reading historical copies of files
<pre><code class="language-plaintext">http.request.method eq "GET" and
not cf.client.bot and
(
  http.request.uri.path strict wildcard "/*/*/raw/commit/*" or
  http.request.uri.path strict wildcard "/*/*/raw/tag/*"
)</code></pre>
</li>
</ol>
<p>With all these in place the Git server is now <em>chilling</em>. I can’t remember the last time it was serving so few spam hits that I could see the Prometheus <code>/metrics</code> query in the journal logs.</p>
<p>According to Cloudflare’s logs it has mitigated 489.65K requests for me since I deployed this rule set, and of the 100K Managed Challenge that have been issued, only 3 have been solved. Go BOTS team!</p>
<p>Of course, I still had the problem of the now-useless IP Access Rules that fail2ban had deployed, which needed to be removed. Here I have some criticism of Cloudflare and the way the whole account/zone authentication situation works, because this took me over an hour to figure out and none of it was documented.</p>
<p>I tried using an account API token to fetch IP Access Rules, and consistently got 0 results from the API. I tried a user API token and got the same result. I switched from the <code>/account</code> API shape to the <code>/zone</code> one, and started getting the completely useless <code>code: 10000 message: Authorization error</code> error. No matter how I tried to call the API, I would either get 0 or an error, while I was staring at 31K of them in the dashboard. Finally, I decided to try the Global API key whose docs has a big <a href="https://developers.cloudflare.com/fundamentals/api/get-started/keys/#limitations">limitations section</a> but no mention that it’s the only way to access the supposed legacy IP Access Rules.</p>
<p>So now that I had wasted an hour and could <em>finally</em> get back these 31K rules, I do a cursory analysis on them with MaxMind and obviously find no country or ASN I can do a simple ban on. To delete all these IP Access Rules I use the Cloudflare Python SDK to write a small script that would remove these serially since I didn’t wanna go for max speed and then have to handle being rate limited. This took a whole 8 hours and 49 minutes to chew through all those IP Access Rules, but given I was effectively doing 1 RPS off my residential Internet connection I’m not mad about it.</p>
<p>Here’s some graphs to spruce up this word salad of a post.</p>
<figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/cloudflare-security-rules.trlGj0cH.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/cloudflare-security-rules.trlGj0cH.webp" data-pswp-width="1349" data-pswp-height="465" data-pswp-caption="The 0% there means nobody hitting the endpoint is solving the challenge, a.k.a that's all bots" aria-label="Cloudflare security rules list for a Forgejo server, showing several active block and challenge rules for crawler traffic." data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/cloudflare-security-rules.trlGj0cH.webp" alt="Cloudflare security rules list for a Forgejo server, showing several active block and challenge rules for crawler traffic." loading="lazy" decoding="async" width="1349" height="465" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">The 0% there means nobody hitting the endpoint is solving the challenge, a.k.a that's all bots</figcaption></figure>
<figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/grafana-cpu-usage.Dx4AyjCa.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/grafana-cpu-usage.Dx4AyjCa.webp" data-pswp-width="1041" data-pswp-height="448" data-pswp-caption="No points for guessing when the ruleset was deployed" aria-label="Grafana CPU usage chart with heavy load over several days, followed by a sharp drop to near idle levels." data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/grafana-cpu-usage.Dx4AyjCa.webp" alt="Grafana CPU usage chart with heavy load over several days, followed by a sharp drop to near idle levels." loading="lazy" decoding="async" width="1041" height="448" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">No points for guessing when the ruleset was deployed</figcaption></figure>]]></content:encoded>
    </item>
    <item>
      <title>Weeknotes: Week #26 (2026)</title>
      <link>https://msfjarvis.dev/weeknotes/week-26-2026/</link>
      <guid>https://msfjarvis.dev/weeknotes/week-26-2026/</guid>
      <description>Another week of bad health days :(</description>
      <pubDate>Sun, 28 Jun 2026 11:51:11 GMT</pubDate>
      <content:encoded><![CDATA[<h1 id="personal">Personal</h1>
<p>I’ve been cooped up at home for most of this week due to health problems and just general ~~<em>vibes</em>~~ so there wasn’t a lot happening to talk about. However, I did manage to, at least, successfully navigate the passport portal and apply for one. Hopefully I’ll be done with the process well in time for the Singapore trip a few friends and I have been planning. I also finally decided to try filing my own taxes and immediately ran into problems, so I’m back to having my CA deal with it. Maybe next year 🫡</p>
<p>On Saturday <a href="https://yashgarg.dev">Yash</a> and I met up with <a href="https://github.com/mayankofficial999">Mayank</a> and <a href="https://github.com/swapnilmadavi">Swapnil</a> to watch Supergirl. The movie was <em>okay</em>, it’s pretty clear that it was a minor subplot setting up for something bigger but DC does not have a good track record on delivering here, so I’m not very hopeful.</p>
<figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/krypto-supergirl.XzIANB5P.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/krypto-supergirl.XzIANB5P.webp" data-pswp-width="4080" data-pswp-height="3072" data-pswp-caption="Krypto is the absolute goodest boy. Give him more screen time!" aria-label="A movie theater screen showing a dog beside a record player and a flying bottle." data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/krypto-supergirl.XzIANB5P.webp" alt="A movie theater screen showing a dog beside a record player and a flying bottle." loading="lazy" decoding="async" width="4080" height="3072" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">Krypto is the absolute goodest boy. Give him more screen time!</figcaption></figure>
<h2 id="getting-into-skin-care">Getting into skin care</h2>
<p>I’ve struggled with oily skin for a long time so this week after going through yet another bout of feeling sorry for myself, I decided to clean up the vanity and order some things. I went back to read some messages I had exchanged with my sister on the topic, and got a nice moisturizer, a salicylic acid thing and a mild face wash. Results are supposed to show up in 6 to 12 weeks, so I guess I’ll know then. Why does everything take so long!!</p>
<h1 id="work">Work</h1>
<p>Had a minor scare at work where I thought I was in trouble but as it turns out I had been doing things fine, and it was someone else causing confusion 😮‍💨. Other than that we finally managed to get our <a href="https://developers.cloudflare.com/realtime/realtimekit/release-notes/android-core/">big 3.x release</a> out! This was a lot of work over multiple months, and I’m glad we can now do something else for a bit :)</p>
<h1 id="personal-projects">Personal Projects</h1>
<p>Most of my week was spent mitigating the well documented constant barrage of AI scrapers doing a number on my <a href="https://git.msfjarvis.dev">Git server</a>. After a few missteps with <a href="https://github.com/fail2ban/fail2ban">fail2ban</a> and Cloudflare’s IP Access Rules, I’ve managed to land on the right rulesets on Cloudflare to keep the worst of it from hitting the server. According to Cloudflare’s statistics, in the past week I’ve <em>blocked</em> over 500K requests and even then I continued seeing problems until this morning when I finally got a comprehensive set of protections in place. I want to write a blog post about this since this was an annoying problem to deal with, but ultimately most of it is just “use Cloudflare” and I don’t want it to come off as shilling. I am easily influenced, so reach out to express your interest if you want to read about it.</p>
<h1 id="meta">Meta</h1>
<p>The site is now running on Astro 7! Nothing user-facing should’ve changed, I’ve tried to not switch to any of the newer stuff like <a href="https://satteri.bruits.org/">Sätteri</a> so I can evaluate it more comfortably. I did try out migrating to Sätteri, and was able to <a href="https://github.com/msfjarvis/msfjarvis.dev/commit/2b1e6c22ae7b801e458a3846e20420d07736b8c9">get it done</a> but ultimately the UnifiedJS/Remark/Rehype ecosystem is much more mature and I don’t currently feel the need for Sätteri’s promised speedups.</p>
<p>I’ve had Atom, RSS and JSON feeds for most taxonomies but was shockingly missing one for posts, so that has now <a href="https://msfjarvis.dev/posts/feed.atom">been added</a> (thanks Yash for letting me know). After some discussion with Yash I’ve also decided to update the main feeds at <code>https://msfjarvis.dev/feed.[extension]</code> to start including my shorter <a href="https://msfjarvis.dev/notes">notes</a> as well, so expect a minor wave of spam in your feed readers. If you want to only follow a specific type of writing, you can provide its listing page to your feed reader (like <code>https://msfjarvis.dev/posts</code>, <code>https://msfjarvis.dev/weeknotes</code>, or <code>https://msfjarvis.dev/tags/NixOS/</code>) and the feed reader will pick up a specialized feed for it.</p>
<p>I had also forgotten to put back my analytics script when the site was moved to Astro, that’s now back so I can continue ignoring the stats it’s recording.</p>
<div class="markdown-alert markdown-alert-note" dir="auto">
<p class="markdown-alert-title" dir="auto"><svg class="octicon" viewBox="0 0 16 16" width="16" height="16" aria-hidden="true"><path d="M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"></path></svg>NOTE</p>
<p>Oh, we also have these now.</p>
</div>
<h1 id="gaming">Gaming</h1>
<p>I played out my Marvel Rivals placement games with <a href="https://akhilnarang.dev">Akhil</a> this week and got placed at Gold 2, then didn’t touch ranked again this week. I’ve been logging in to keep up with the barrage of summer events in-game but not really doing much else. Most of the gaming time has gone into Helldivers with <a href="https://kat.bio">Amogh</a>, <a href="https://staticvar.dev">Shreyansh</a>, and my friend Prajwal. The new Supply FRV has been infinitely fun, and I’ll miss when it inevitably stops being a permanent free stratagem :(</p>
<h1 id="cooking">Cooking</h1>
<p>Cooking this week was a mixed bag, I ate pepperoni and cheese sandwiches for most breakfasts, and dinner ranged from a delectable and rich chicken gravy to the humble khichdi. Regardless, here are some of the highlights.</p>
<div class="gallery" data-pswp-gallery="" style="--gallery-min-width: 250px; --gallery-gap: 1.5rem" data-astro-cid-rj65ajc3=""><figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/salad-nacho-dip.J22A1mTa.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/salad-nacho-dip.J22A1mTa.webp" data-pswp-width="4080" data-pswp-height="3072" data-pswp-caption="Veggies with a non-fat dressing, some Feta cheese on top and nachos on the side. Perfect dinner" aria-label="A bowl of chunky salad with corn, tomatoes, onions, and cheese." data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/salad-nacho-dip.J22A1mTa.webp" alt="A bowl of chunky salad with corn, tomatoes, onions, and cheese." loading="lazy" decoding="async" width="4080" height="3072" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">Veggies with a non-fat dressing, some Feta cheese on top and nachos on the side. Perfect dinner</figcaption></figure><figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/ham-and-cheese-sandwich.D5JXhMIi.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/ham-and-cheese-sandwich.D5JXhMIi.webp" data-pswp-width="4080" data-pswp-height="3072" data-pswp-caption="I like having small things of Greek yogurt in the fridge to make impromptu dips" aria-label="Two toasted sandwiches on a steel plate with a dip and a soda can." data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/ham-and-cheese-sandwich.D5JXhMIi.webp" alt="Two toasted sandwiches on a steel plate with a dip and a soda can." loading="lazy" decoding="async" width="4080" height="3072" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">I like having small things of Greek yogurt in the fridge to make impromptu dips</figcaption></figure><figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/tomato-and-egg-rice.Dt7qAEDG.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/tomato-and-egg-rice.Dt7qAEDG.webp" data-pswp-width="4080" data-pswp-height="3072" data-pswp-caption="This tomato and egg rice dish was delicious, Yash's stash of Instagram recipes continues to deliver" aria-label="A bowl of tomato egg rice next to sliced cucumbers." data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/tomato-and-egg-rice.Dt7qAEDG.webp" alt="A bowl of tomato egg rice next to sliced cucumbers." loading="lazy" decoding="async" width="4080" height="3072" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">This tomato and egg rice dish was delicious, Yash's stash of Instagram recipes continues to deliver</figcaption></figure></div>]]></content:encoded>
    </item>
    <item>
      <title>Weeknotes: Week #25 (2026)</title>
      <link>https://msfjarvis.dev/weeknotes/week-25-2026/</link>
      <guid>https://msfjarvis.dev/weeknotes/week-25-2026/</guid>
      <description>Ow, my neck…</description>
      <pubDate>Sun, 21 Jun 2026 13:27:02 GMT</pubDate>
      <content:encoded><![CDATA[<p>Rough week in the health department but the brain juices have held up against all odds. Also games!</p>
<h1 id="personal">Personal</h1>
<p>I woke up on Monday with a lot of pain in my neck and decided to take the day off for some rest and relaxation. In the midst of aforementioned R&amp;R <a href="https://yashgarg.dev/">Yash</a> asked me if I wanted to meet up with his girlfriend and him for breakfast at Toit, where we got some pancakes and waffles. Not the typical idea of resting an injury, but it was nice to be out and about in the sun. From there we walked the length of the 100 Feet road to end up at Lenskart for some new glasses for Yash. I got one of their complementary eye checkups which confirmed that despite my best efforts to the contrary I still have a 5/5 eyesight, having two bespectacled friends with me and receiving that result was funny.</p>
<p>The neck problem did not improve throughout the day, so I had to get a hot watter bottle and a neck brace, which have helped with the problem as the week progressed. Really starting to feel like a proverbial unc with these random aches, and had to skip the gym for the whole week.</p>
<p>I’m planning to finally take a proper holiday sometime next month, and have already taken some recommendations from <a href="https://rohanarthur.com">Rohan Arthur</a> for lake houses near Bengaluru. Reach out to me if you have ideas for any idyllic places close by where I can be <em>mostly</em> offline for a couple of weeks!</p>
<p>I am also working on my passport application in anticipation of a trip to Singapore for the PGL Counter Strike 2 Major with Yash, <a href="https://github.com/anunaym14">Anunay</a>, and <a href="https://github.com/akhilnarang">Akhil</a>. I have one failed application under my belt and no other real knowledge of the matter to speak of, so I am also open to someone helping me out here as well!</p>
<h1 id="media">Media</h1>
<p>Continued reading <a href="https://bookwyrm.social/book/1586797/s/the-ask-and-the-answer">The Ask and the Answer</a>, no more power cuts to help but illness has covered for that.</p>
<p>Started watching <a href="https://www.imdb.com/title/tt33332385/">Widow’s Bay</a> on Yash’s recommendation as well as an <a href="https://aftermath.site/widows-bay-apple-tv-matthew-rhys/">Aftermath post</a> I had read a month ago. With all the downtime this week I was able to finish the first season quickly, albeit in Italian for 9 of 10 episodes because I am a dumbass. Genuinely could not tell you how I came to think the show is meant to be Italian but at least not understanding the language made me actually watch instead of it being second monitor content.</p>
<p>Watched <a href="https://www.imdb.com/title/tt26657236/">Backrooms</a> with Yash, <a href="https://fknil.pages.dev/">Fenil</a>, and <a href="https://wantguns.dev/">Gunwant</a>. The movie was <em>awesome</em>, I fully get why these new age directors are rocking the boat in the upper echelons of Hollywood. Make some non-horror movies now!!</p>
<figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/backrooms-movie.DL0OUNbu.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/backrooms-movie.DL0OUNbu.webp" data-pswp-width="4080" data-pswp-height="3072" data-pswp-caption="Found footage is one of my favorite narrative devices" aria-label="A tilted shot of a yellow backrooms hallway on a screen" data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/backrooms-movie.DL0OUNbu.webp" alt="A tilted shot of a yellow backrooms hallway on a screen" loading="lazy" decoding="async" width="4080" height="3072" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">Found footage is one of my favorite narrative devices</figcaption></figure>
<h1 id="meta">Meta</h1>
<p>The site has had some minor changes this week. <a href="https://github.com/msfjarvis/msfjarvis.dev/commit/99325e9a151f220e59c80dc2af3de30f700d3bde">Share buttons have been removed</a> since they don’t get used, and all text on the home page is now about <a href="https://github.com/msfjarvis/msfjarvis.dev/commit/db047f21b6101184abacc8dfe8f6fae296d5fafd">1.3x larger</a>, since I was starting to feel very old trying to squint at the text. I also noticed a bunch of my received webmentions were being incorrectly cut off during parsing, and weren’t being rendered as proper HTML; this has been <a href="https://github.com/msfjarvis/msfjarvis.dev/commit/450ec0d14f2f46b4ce6c69b71e85358872233515">fixed retroactively</a> on all posts.</p>
<p>I wrote <a href="https://msfjarvis.dev/weeknotes/week-24-2026">last week</a> about being overwhelmed by my <a href="https://miniflux.app">Miniflux</a> RSS reader, and my attempts at clanking something to identify the problem. That was unsurprisingly useless, but I did find out some good quality of life changes to improve the scenario which have been documented in <a href="https://msfjarvis.dev/posts/taming-my-intimidating-rss-reader-queue/">this blog post</a> I wrote this week.</p>
<h1 id="projects">Projects</h1>
<p><a href="https://github.com/msfjarvis/compose-lobsters">Claw</a> had a minor change to add a smoke-tests JVM-only CLI that runs daily to validate the HTML parsing code, hopefully to catch any regressions early.</p>
<p><a href="https://github.com/android-password-store/kage">kage</a> received an external PR this week <a href="https://github.com/android-password-store/kage/pull/539">to improve memory usage</a> in the streaming API, which motivated me to catch up on some pending work there. Kotlin is <a href="https://github.com/android-password-store/kage/pull/540">upgraded to 2.4.0</a>, the upstream test vectors <a href="https://github.com/android-password-store/kage/pull/541">have been updated</a> and the bugs uncovered by that fixed, and a longstanding TODO to <a href="https://github.com/android-password-store/kage/pull/542">properly handle some invalid inputs</a> been resolved.</p>
<h2 id="-clank-clank-clank-">🤖 CLANK CLANK CLANK 🤖</h2>
<p>The <a href="https://github.com/rohitg00/agentmemory">agentmemory</a> experiment has concluded in <a href="https://git.msfjarvis.dev/msfjarvis/my-pi/commit/44e880d63bf897502f35425ac36e169e7f7ccff0">failure</a>. Clankers failed to find any meaningful information in the saved memories because they couldn’t figure out how to get them in a non-truncated form. I stole some <a href="https://pi.dev">Pi</a> extensions from <a href="https://lucumr.pocoo.org">Armin Ronacher</a>, adding <a href="https://git.msfjarvis.dev/msfjarvis/my-pi/commit/ec1802ee1b8334f8da5ac0790944896507a12363">some whimsy</a>, a <a href="https://git.msfjarvis.dev/msfjarvis/my-pi/commit/b524ccd460a7e94d2984a3639cbed8c901cf1531">session analyser</a>, and a <a href="https://git.msfjarvis.dev/msfjarvis/my-pi/commit/dee979282d5d67997741c627d0c78b349d8199d6">Q&amp;A widget</a>. I also added a <a href="https://git.msfjarvis.dev/msfjarvis/my-pi/commit/82e1980f2c7044fcbb8817d7a2391e27565ebec6">Markdown viewer overlay</a> to make it easier to review specs and plans inline.</p>
<h1 id="gaming">Gaming</h1>
<p><a href="https://store.steampowered.com/app/553850/HELLDIVERS_2/">Helldivers 2</a> had a big update this week with a ton of buffs across the board, had a great time playing the Illuminate faction with the new Supply FRV.</p>
<p>I played even more <a href="https://controlgame.com/">CONTROL</a> this week, and finally finished the Foundation DLC just before writing this weeknote. In celebration of this feat I pre-ordered CONTROL Resonant, something I typically don’t do. The mêlée hack and slash combat simply looks sick, and I am fully invested in the story.</p>
<h1 id="food">Food</h1>
<div class="gallery" data-pswp-gallery="" style="--gallery-min-width: 250px; --gallery-gap: 1.5rem" data-astro-cid-rj65ajc3=""><figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/paper-dosa-the-filter-coffee.BKh2pfIA.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/paper-dosa-the-filter-coffee.BKh2pfIA.webp" data-pswp-width="4080" data-pswp-height="3072" data-pswp-caption="Been a while since I've been back at The Filter Coffee" aria-label="A crisp paper dosa on a banana leaf with chutneys and sambar" data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/paper-dosa-the-filter-coffee.BKh2pfIA.webp" alt="A crisp paper dosa on a banana leaf with chutneys and sambar" loading="lazy" decoding="async" width="4080" height="3072" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">Been a while since I've been back at The Filter Coffee</figcaption></figure><figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/pizza-toast.DdtlO_AW.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/pizza-toast.DdtlO_AW.webp" data-pswp-width="3072" data-pswp-height="4080" data-pswp-caption="The air fryer browns the sausages a little too much for my preference" aria-label="A slice of pizza toast topped with chicken sausages and herbs" data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/pizza-toast.DdtlO_AW.webp" alt="A slice of pizza toast topped with chicken sausages and herbs" loading="lazy" decoding="async" width="3072" height="4080" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">The air fryer browns the sausages a little too much for my preference</figcaption></figure><figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/egg-sandwich.B-m7RANL.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/egg-sandwich.B-m7RANL.webp" data-pswp-width="4080" data-pswp-height="3072" data-pswp-caption="A simple egg sandwich just hits some days" aria-label="Two toasted egg sandwiches on a steel plate with ketchup" data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/egg-sandwich.B-m7RANL.webp" alt="Two toasted egg sandwiches on a steel plate with ketchup" loading="lazy" decoding="async" width="4080" height="3072" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">A simple egg sandwich just hits some days</figcaption></figure></div>
<p>For all the Toit breakfast images, head to <a href="https://yashgarg.dev/weekly-notes-25-2026/">Yash’s weeknote</a> who is much more diligent about these things than I ever will be.</p>
<p>Since I was by myself on Monday I made myself a pretty sloppy salad of corn, cucumbers, onions, and tomatoes all doused in some crumbled feta cheese and a Greek yogurt dressing.</p>
<p>On Tuesday the whole team at work went out to Meghna Foods for lunch since our PM <a href="https://www.linkedin.com/in/korinne-alpers">Korinne Alpers</a> was getting read to head back to the US and wanted to sample some great biryani. For dinner, we just made our regular okra.</p>
<p>Thursday was feeling like a sandwich kind of day, so I just made an egg sandwich at home during our morning standup. Turns out there’s a lot of downtime in a 10-person meeting :P</p>
<p>I had been craving pizza toasts this week, so I decided to make some on Friday morning, I kinda screwed up by accidentally ordering sausages instead of pepperonis, but it was delicious regardless.</p>
<p>This morning I joined Mayank, Yash, and <a href="https://github.com/swapnilmadavi">Swapnil</a> for some dosas at The Filter Coffee which were great.</p>]]></content:encoded>
    </item>
    <item>
      <title>Taming my intimidating RSS reader queue</title>
      <link>https://msfjarvis.dev/posts/taming-my-intimidating-rss-reader-queue/</link>
      <guid>https://msfjarvis.dev/posts/taming-my-intimidating-rss-reader-queue/</guid>
      <description>How I regained control of my reading habits</description>
      <pubDate>Thu, 18 Jun 2026 07:22:00 GMT</pubDate>
      <content:encoded><![CDATA[<p>I talked in <a href="https://msfjarvis.dev/weeknotes/week-24-2026/#:~:text=I%20checked%20my%20Miniflux%20unread%20count%20at%20the%20start%20of%20this%20week">last week’s weeknote</a> about how I was struggling with getting my Miniflux reader situation under control, and what I was attempting to identify the problem. Today, I came across <a href="https://michal.sapka.pl/2026/no-more-rss/">this blog post</a> from Michał Sapka talking about the exact feeling, and choosing to entirely drop RSS and rely on manually checking up on bookmarks instead.</p>
<p>I think that was quite saddening to read, that the thing they had switched to as a way to get out of mindless algorithmic scrolling had ended up feeling like that itself. I’m personally not quite at the giving up stage, and over the weekend ended up making a bunch of changes within <a href="https://miniflux.app">Miniflux</a> that have significantly improved my experience already.</p>
<p>I’m going to preempt the weeknote and say this: the whole data driven analysis approach I was trying out last week was a complete waste of time and mental faculties. I had misdiagnosed my problem of not reading things as being tied to individual feeds which wasn’t <em>quite</em> accurate. “Bad” feeds do contribute to and exacerbate the problem, but ultimately the thing I found to be the real issue was <em>perception</em>.</p>
<hr>
<p>The feeds I subscribe to can broadly be categorized under the following labels</p>
<ol>
<li>News outlets: high volume, mix of intriguing and uninteresting content, leaning towards the latter on most days</li>
<li>Prolific individuals posting multiple times a week, sometimes multiple times a day. <a href="https://unsung.aresluna.org/">Unsung</a> is a perfect fit here.</li>
<li>Slower paced and longer length posters.</li>
<li><a href="https://www.wheresyoured.at/">Ed Zitron</a>. He writes long insightful newsletters at frightening pace, and I am scared to put a label on this madman.</li>
</ol>
<p>The overwhelming feeling for me comes from the first category. It crowds the sorted-by-new unread queue and makes it look like the whole pile is just uninteresting things so you either close the tab/app or mark all as read and move on. The second problem is that cheeky <em>unread</em> count at the top of the screen which keeps reminding you that you’re a failure for not keeping up with this free knowledge you asked for.</p>
<p>At least on Miniflux, these are both solvable problems, and it has helped me immensely in just the 3-4 days since I made these changes.</p>
<p>For the first: Exclude the high volume/low signal feeds from the global unread list. Head over to Feeds &gt; Click ‘Edit’ on the one you want &gt; Check ‘Hide entries in global unread list’</p>
<figure data-image-modal-root="" class="half" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/hide-entries-in-global-queue.2bRLQ3Aq.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/hide-entries-in-global-queue.2bRLQ3Aq.webp" data-pswp-width="398" data-pswp-height="713" data-pswp-caption="Hiding high volume feeds does wonders for your unread page" aria-label="Feed settings page with the option to hide entries in the global unread list checked." data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/hide-entries-in-global-queue.2bRLQ3Aq.webp" alt="Feed settings page with the option to hide entries in the global unread list checked." loading="lazy" decoding="async" width="398" height="713" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">Hiding high volume feeds does wonders for your unread page</figcaption></figure>
<p>You can also hide entire categories if your feeds are already categorized</p>
<figure data-image-modal-root="" class="half" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/hide-category-in-global-queue.DZXgWlo6.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/hide-category-in-global-queue.DZXgWlo6.webp" data-pswp-width="738" data-pswp-height="267" data-pswp-caption="Gone, just like that" aria-label="Category settings page with the option to hide entries in the global unread list checked." data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/hide-category-in-global-queue.DZXgWlo6.webp" alt="Category settings page with the option to hide entries in the global unread list checked." loading="lazy" decoding="async" width="738" height="267" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">Gone, just like that</figcaption></figure>
<p>This removes the feed/category’s entries from the homepage while still letting me browse the posts individually in the feeds/category page when I am ready for my daily dose of Biz &amp; IT.</p>
<p>Now the second problem: the ever looming unread counter haunting your dreams can simply be hidden with a bit of CSS. Click over to the ‘Settings’ option at the top and then paste snippet in the ‘Custom CSS’ section on that page, then click the ‘Update’ button.</p>
<pre><code class="language-css">.unread-counter-wrapper,
#page-header-title &gt; span:nth-child(1) {
  display: none;
}</code></pre>
<p>With these changes you should find your default view of Miniflux a much more approachable space</p>
<div class="gallery" data-pswp-gallery="" style="--gallery-min-width: 250px; --gallery-gap: 1.5rem" data-astro-cid-rj65ajc3=""><figure data-image-modal-root="" class="half" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/unread-before-hiding.DP9Y6Ie_.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/unread-before-hiding.DP9Y6Ie_.webp" data-pswp-width="913" data-pswp-height="1340" data-pswp-caption="The unread feed before changes, a big looming number over your head and a lot of relatively uninteresting things taking up most of your screen" aria-label="Unread list in Miniflux before hiding one feed, showing more articles and a higher unread count." data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/unread-before-hiding.DP9Y6Ie_.webp" alt="Unread list in Miniflux before hiding one feed, showing more articles and a higher unread count." loading="lazy" decoding="async" width="913" height="1340" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">The unread feed before changes, a big looming number over your head and a lot of relatively uninteresting things taking up most of your screen</figcaption></figure><figure data-image-modal-root="" class="half" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/unread-sans-counts.CChK6Ro3.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/unread-sans-counts.CChK6Ro3.webp" data-pswp-width="913" data-pswp-height="1340" data-pswp-caption="A much cleaner experience with more focus on writing by individuals, and more attuned to what you'd like to naturally discover in a casual browsing" aria-label="Unread list in Miniflux with article titles shown and unread count badges removed from the top bar." data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/unread-sans-counts.CChK6Ro3.webp" alt="Unread list in Miniflux with article titles shown and unread count badges removed from the top bar." loading="lazy" decoding="async" width="913" height="1340" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">A much cleaner experience with more focus on writing by individuals, and more attuned to what you'd like to naturally discover in a casual browsing</figcaption></figure></div>
<p>No unread counter screaming at you, and your default view now has a significantly better signal-to-noise ratio. Hope this helps someone out in creating a more approachable feed reader experience for themselves!</p>]]></content:encoded>
    </item>
    <item>
      <title>Weeknotes: Week #24 (2026)</title>
      <link>https://msfjarvis.dev/weeknotes/week-24-2026/</link>
      <guid>https://msfjarvis.dev/weeknotes/week-24-2026/</guid>
      <description>Another lazy week dedicated entirely to gaming and programming</description>
      <pubDate>Sun, 14 Jun 2026 12:22:08 GMT</pubDate>
      <content:encoded><![CDATA[<figure data-image-modal-root="" class="half" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/angy-cat.C9v_lvFD.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/angy-cat.C9v_lvFD.webp" data-pswp-width="4080" data-pswp-height="3072" data-pswp-caption="Saw this angry fuzzball after a long while" aria-label="Ginger cat resting on a mat beside a plaid cushion." data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/angy-cat.C9v_lvFD.webp" alt="Ginger cat resting on a mat beside a plaid cushion." loading="lazy" decoding="async" width="4080" height="3072" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">Saw this angry fuzzball after a long while</figcaption></figure>
<h1 id="life">Life</h1>
<p>I didn’t do much this week, owing to busy times at $DAYJOB and then having my semiannual burst of motivation which had me doing a lot of work on <a href="https://git.msfjarvis.dev/msfjarvis/compose-lobsters">Claw</a>.</p>
<p>I finished reading <a href="https://bookwyrm.social/book/192589/s/the-knife-of-never-letting-go">The Knife of Never Letting Go</a>, after which <a href="https://bookwyrm.social">Bookwyrm</a> helpfully reminded me that I was halfway through the year but only a quarter of the way through my reading goal of 24 books a year 😔✊</p>
<p>That said I have been reading more frequently (started the sequel: <a href="https://bookwyrm.social/book/1586797/s/the-ask-and-the-answer">The Ask and The Answer</a>) during the multiple hour-long power cuts throughout the week (thanks Indiranagar) so hopefully I’ll catch up at some point. Or cheat by reading short stories, I don’t know.</p>
<h1 id="meta">Meta</h1>
<p>This site has seen some minor tweaks: the “divider” between the header and the content should be slightly better aligned now, and we can now render Mermaid diagrams!</p>
<p>I’m working on a blog post about the stuff I’ve been doing on Claw where those will come in handy, stay tuned for that to be published soon™ <sub>psst you can read the current draft <a href="https://drafts.msfjarvis.dev/posts/rewriting-claw-html-parser-for-over-the-air-updates/">here</a></sub></p>
<h1 id="work">Work</h1>
<p>I’m finally free of my self-inflicted deadline jail, and went right back to my cosy janitorial duties of refactoring ugly code and accidentally stumbling upon latent bugs. All in all a great week at work!</p>
<h1 id="personal-projects">Personal Projects</h1>
<p>Energized by the aforementioned periodic burst of motivation, I managed to wrap up a handful of large changes to Claw.</p>
<ul>
<li>The search button now expands in-place rather than taking you to a separate full screen destination [<a href="https://github.com/msfjarvis/compose-lobsters/pull/1197">PR</a>]</li>
<li>All the HTML parsing logic is now delegated to a <a href="https://github.com/cashapp/zipline">Zipline</a>-based module, which means I can now do over-the-air updates of that code without a new app release. This will significantly improve the time-to-fix for site markup changes, and also ended up being a pretty interesting exercise in general. The draft post I linked above covers this work, and I hope to finish it off in a few days. <a href="https://github.com/msfjarvis/compose-lobsters/pull/1183">[PR]</a></li>
<li>I <a href="https://masto-archive.msfjarvis.dev/@msfjarvis/116687510122725010">talked on the Fediverse</a> some time ago about how the ability to log into the app was causing my pre-login tagging feature to break down. This week I implemented a simple solution to it after being <a href="https://masto-archive.msfjarvis.dev/@msfjarvis/116692105799028538">massively disappointed by Codex’s</a> attempt at it. [<a href="https://github.com/msfjarvis/compose-lobsters/pull/1203">PR</a>]</li>
</ul>
<p>I checked my <a href="https://miniflux.app">Miniflux</a> unread count at the start of this week: it had breached the 100 posts mark again, which made me wonder how that keeps happening because I look at it at least once a day, often more. To determine the issue, I sketched up a very basic “algorithm” involving gathering all entries for a specified period, calculating the time it takes for them to go from created → read and bucket those based on feed and tags. This gives me a very rough idea of what kinds of posts stay unread for long, which was good enough for what I had in mind. I let Codex loose on the problem, and obviously it was unable to follow a detailed spec and implementation plan, instead writing an empty shell that just had a bunch of no-op methods where the actual analysis would go 🙂</p>
<p>It took a lot of prodding to get it all to a proper spot, and I’m still tweaking it as I’m writing this weeknote because I like to suffer or something. You can find the slop code <a href="https://git.msfjarvis.dev/msfjarvis/acceptable-vibes/src/branch/main/miniflux-analyzer">here</a> if this seems interesting for any reason. My own instance is behind Cloudflare Access because I don’t trust even this fully static HTML by a clanker.</p>
<h1 id="gaming">Gaming</h1>
<p>This week was even more <a href="https://controlgame.com/">CONTROL</a> with <a href="https://kat.bio">Amogh</a> as we finished the base game and explored the DLC, getting my ass kicked by random side missions and continuing to unravel the mysteries of The Oldest House. I enjoyed this playthrough a <em>lot</em> more than any of the previous attempts by a huge margin, who knew companionship makes things more fun. Since Amogh also hasn’t done much of the DLC it’s been a fun time for the both of us to come across abominations beyond mortal comprehension.</p>
<div class="gallery" data-pswp-gallery="" style="--gallery-min-width: 250px; --gallery-gap: 1.5rem" data-astro-cid-rj65ajc3=""><figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/control-warped-rooms.C4hP-eZG.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/control-warped-rooms.C4hP-eZG.webp" data-pswp-width="2560" data-pswp-height="1440" data-pswp-caption="This game has some of the most mindbending visuals I've encountered" aria-label="A character stands in a warped office space with tilted rooms and floating papers." data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/control-warped-rooms.C4hP-eZG.webp" alt="A character stands in a warped office space with tilted rooms and floating papers." loading="lazy" decoding="async" width="2560" height="1440" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">This game has some of the most mindbending visuals I've encountered</figcaption></figure><figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/control-final-boss.Dk39bQSJ.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/control-final-boss.Dk39bQSJ.webp" data-pswp-width="2560" data-pswp-height="1440" data-pswp-caption="The final fight was honestly pretty easy but the atmosphere kept me on my toes the whole time" aria-label="A lone figure walks through a huge red-lit hallway toward a bright opening." data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/control-final-boss.Dk39bQSJ.webp" alt="A lone figure walks through a huge red-lit hallway toward a bright opening." loading="lazy" decoding="async" width="2560" height="1440" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">The final fight was honestly pretty easy but the atmosphere kept me on my toes the whole time</figcaption></figure></div>
<h1 id="food">Food</h1>
<p><a href="https://msfjarvis.dev/weeknotes/week-23-2026/#food">As promised</a>, the pasta from last Sunday in all its glory (I ate a second serving on Monday so it counts as this week, hush). With Yash <a href="https://yashgarg.dev/weekly-notes-23-2026/">back from his Europe trip</a> we were back in the kitchen, and made a big pot of Shakshouka with 6 eggs instead of our usual 4. I was working from home on Friday, so I whipped together some plain ham and cheese sandwiches for breakfast and a simple garlic-based Greek yogurt dip, with a nice Coke Zero to round it all off. Sandwiches are awesome 😄</p>
<div class="gallery" data-pswp-gallery="" style="--gallery-min-width: 250px; --gallery-gap: 1.5rem" data-astro-cid-rj65ajc3=""><figure data-image-modal-root="" class="half" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/chicken-spinach-pasta.oXIogctX.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/chicken-spinach-pasta.oXIogctX.webp" data-pswp-width="4080" data-pswp-height="3072" data-pswp-caption="My first time cooking spinach and I'm blown away by how quickly it wilts and how little you get out of it" aria-label="Pot of creamy chicken and spinach pasta on a stovetop." data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/chicken-spinach-pasta.oXIogctX.webp" alt="Pot of creamy chicken and spinach pasta on a stovetop." loading="lazy" decoding="async" width="4080" height="3072" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">My first time cooking spinach and I'm blown away by how quickly it wilts and how little you get out of it</figcaption></figure><figure data-image-modal-root="" class="half" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/shakshouka.D9QUIlIp.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/shakshouka.D9QUIlIp.webp" data-pswp-width="4080" data-pswp-height="3072" data-pswp-caption="Protein maxxing" aria-label="Bowl of shakshouka topped with herbs, served with toast on the side." data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/shakshouka.D9QUIlIp.webp" alt="Bowl of shakshouka topped with herbs, served with toast on the side." loading="lazy" decoding="async" width="4080" height="3072" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">Protein maxxing</figcaption></figure><figure data-image-modal-root="" class="half" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/ham-and-cheese-sandwich.hu161OHk.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/ham-and-cheese-sandwich.hu161OHk.webp" data-pswp-width="4080" data-pswp-height="3072" data-pswp-caption="Now that I think about it this kind of looks like a struggle meal..." aria-label="Ham sandwich, yogurt, and a can of Coke on a metal plate at a desk." data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/ham-and-cheese-sandwich.hu161OHk.webp" alt="Ham sandwich, yogurt, and a can of Coke on a metal plate at a desk." loading="lazy" decoding="async" width="4080" height="3072" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">Now that I think about it this kind of looks like a struggle meal...</figcaption></figure></div>
<p>I was feeling the feels this morning for some reason so decided to treat myself to a nice breakfast at the nearby Cafe Muziri’s and also get some reading done under the pleasant sunlight. Eternally grateful to <a href="https://rohanarthur.com/">Rohan</a> for introducing me to this place, the vibe is always nice and cosy and the hash browns are to die for.</p>
<figure data-image-modal-root="" class="half" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/breakfast-at-cafe-muziris.CMNU_JK-.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/breakfast-at-cafe-muziris.CMNU_JK-.webp" data-pswp-width="4080" data-pswp-height="3072" data-pswp-caption="The scrambled tofu in the center was just the right amount of rich" aria-label="Cafe breakfast plate with toast, eggs, vegetables, fruit, and coffee on a table." data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/breakfast-at-cafe-muziris.CMNU_JK-.webp" alt="Cafe breakfast plate with toast, eggs, vegetables, fruit, and coffee on a table." loading="lazy" decoding="async" width="4080" height="3072" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">The scrambled tofu in the center was just the right amount of rich</figcaption></figure>
<p>See you next week!</p>]]></content:encoded>
    </item>
    <item>
      <title>Weeknotes: Week #23 (2026)</title>
      <link>https://msfjarvis.dev/weeknotes/week-23-2026/</link>
      <guid>https://msfjarvis.dev/weeknotes/week-23-2026/</guid>
      <description>The most productive yet unhealthy week in a while</description>
      <pubDate>Sun, 07 Jun 2026 11:25:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><a href="https://yashgarg.dev/">Yash</a> has been out this week for his trip to Europe, so I’ve been by myself and mostly filled that time with work and games.</p>
<h2 id="personal">Personal</h2>
<p>With all the free time this week I decided to sort out the discrepancies in my budgeting software and made some rather upsetting discoveries. The egregious one was me having flubbed my SIP changes last month, which meant I hadn’t actually ramped up my investments and was just blindly counting money as invested which was still sitting in my savings account. Thank you, ICICI Direct for a definitely-not-confusing UI.</p>
<p>The other one was mostly just annoying, but was caused by a very subtle interaction within Actual Budget that I wasn’t aware of. To make a long story short; when using enveloped budgeting and overspending a category, even if you add money back in the next month to zero it out, Actual will continue seeing it as overspent until you explicitly roll over the overspent month into the next one where you reimbursed it. I had a very confused 3 days after having to recreate an old account and its transactions.</p>
<p>I also watched the first season of <a href="https://en.wikipedia.org/wiki/Spider-Noir">Spider-Noir</a> this week, was surprised by how good it was. Definitely a little miffed that Amazon dumped it all in one go instead of letting the suspense build week over week but 🤷</p>
<h2 id="projects">Projects</h2>
<p>This website received some important updates:</p>
<ul>
<li>Webmentions are now <a href="https://git.msfjarvis.dev/msfjarvis/msfjarvis.dev/commit/bab9074b33d9a152a08ebc4509916477212d1e6f">grouped by type</a> to make the UI more compact</li>
<li>As part of that change, I discovered that I wasn’t capturing the full content of Fediverse posts being sent via <a href="https://brid.gy">brid.gy</a> in my Webmentions server, which has <a href="https://git.msfjarvis.dev/msfjarvis/acceptable-vibes/commit/b1110c8f115c0dd71d39c9a4d12c6c3becc41460">since been fixed</a>.</li>
<li>I discovered the <a href="https://www.brailleinstitute.org/freefont/">Atkinson Hyperlegible</a> font family last week, and finally <a href="https://git.msfjarvis.dev/msfjarvis/msfjarvis.dev/commit/792f1ae90afe73d43a18428a226951d1689f9152">switched over</a> the site to them. As part of the change I’ve also made the site text a bit bigger since I had started to feel like I needed to squint to read some of it.</li>
<li>The dark theme is now using a <a href="https://git.msfjarvis.dev/msfjarvis/msfjarvis.dev/commit/68b48529e20f3b5e05d1ac84f0ea272920162488">slightly lighter tone</a> to improve readability.</li>
</ul>
<p><a href="https://github.com/msfjarvis/compose-lobsters/">Claw</a> had a new release and some new features added later.</p>
<ul>
<li>The app now has the ability to upvote and reply to comments, provided you’re logged in.</li>
<li>The release also fixed a bug caused by the use of certificate pinning by foolish past me.</li>
<li>The comment UI has been tweaked to match the now-defunct app <a href="https://www.reddit.com/r/BoostForReddit/">Boost for Reddit</a>, which does a far better job of using mobile screen real estate than I ever did.</li>
<li>The search UI is now a proper “search bar” style experience instead of being a separate navigation destination.</li>
</ul>
<h2 id="work">Work</h2>
<p>Things at work were pretty chill. I went to one of the client meetings I <a href="https://msfjarvis.dev/weeknotes/week-22-2026/">mentioned last week</a>, and let <a href="https://github.com/mayankofficial999">Mayank</a> sub in for me on the other one. After my visit we ended up at Burma Burma for lunch, where I focused too much on the food to actually take any pictures. Unsurprisingly, the food was incredible.</p>
<p>Other than that I mostly focused on a bunch of refactoring work and dealing with customer reports.</p>
<h2 id="gaming">Gaming</h2>
<p>I spent a <em>lot</em> of time gaming this week since I was home alone, and it was raining every time I wanted to do anything else.</p>
<p>I found this short and emotionally moving pixel art game called <a href="https://store.steampowered.com/app/4515660/Control_Im_Not_Coming_Back/">Control, I’m Not Coming Home</a> and played through it in around 30-40 minutes which was on par with their 45-minute estimate. The game and its story are too beautiful to not be experienced, so I’m not going to explain anything here. The only thing I can share is that the game does not have a keybind to walk backwards, make of it what you will :)</p>
<div class="gallery" data-pswp-gallery="" style="--gallery-min-width: 250px; --gallery-gap: 1.5rem" data-astro-cid-rj65ajc3=""><figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/control-im-not-coming-back-1.BllL-OZh.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/control-im-not-coming-back-1.BllL-OZh.webp" data-pswp-width="2560" data-pswp-height="1440" data-pswp-caption="&nbsp;" aria-label="Pixel art astronaut gloves reaching toward a floating person near a green planet." data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/control-im-not-coming-back-1.BllL-OZh.webp" alt="Pixel art astronaut gloves reaching toward a floating person near a green planet." loading="lazy" decoding="async" width="2560" height="1440" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">&nbsp;</figcaption></figure><figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/control-im-not-coming-back-2.DM-uO5RA.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/control-im-not-coming-back-2.DM-uO5RA.webp" data-pswp-width="2560" data-pswp-height="1440" data-pswp-caption="&nbsp;" aria-label="Pixel art view of Earth in space with text about drifting farther away." data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/control-im-not-coming-back-2.DM-uO5RA.webp" alt="Pixel art view of Earth in space with text about drifting farther away." loading="lazy" decoding="async" width="2560" height="1440" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">&nbsp;</figcaption></figure><figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/control-im-not-coming-back-3.CpUe6XBu.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/control-im-not-coming-back-3.CpUe6XBu.webp" data-pswp-width="2560" data-pswp-height="1440" data-pswp-caption="&nbsp;" aria-label="Bright pink and teal game scene with a small figure facing a dark tree." data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/control-im-not-coming-back-3.CpUe6XBu.webp" alt="Bright pink and teal game scene with a small figure facing a dark tree." loading="lazy" decoding="async" width="2560" height="1440" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">&nbsp;</figcaption></figure></div>
<p>After seeing the gameplay trailer for <a href="https://store.steampowered.com/app/3669870/CONTROL_Resonant/">CONTROL Resonant</a> I decided to finally best my oldest foe, and beat the original game: <a href="https://store.steampowered.com/app/870780/CONTROL_Ultimate_Edition/">CONTROL</a>.</p>
<p>Some backstory: CONTROL was the first game I bought after being cyberbullied by my friends into getting a GPU, and I was so dogshit at it that I got stuck on a minor boss for <em>weeks</em> until I just gave up. I tried again a few years later, and got my ass beat again by the same boss, and the game was uninstalled in shame once more.</p>
<p>This week I decided to play it on a Discord stream with <a href="https://kat.bio">Amogh</a> watching alongside who could at least help me since he’s beaten the game already. Shockingly I was no longer absolute ass at the game, so things have been smooth sailing so far. Hopefully I’ll be done long before the release of Resonant 🤞</p>
<figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/control.DsZO9y41.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/control.DsZO9y41.webp" data-pswp-width="2560" data-pswp-height="1440" data-pswp-caption="The Mold gives me the creeps" aria-label="Titular character Jesse Faden aims a gun at enemies known as The Mold in a dark green cave." data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/control.DsZO9y41.webp" alt="Titular character Jesse Faden aims a gun at enemies known as The Mold in a dark green cave." loading="lazy" decoding="async" width="2560" height="1440" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">The Mold gives me the creeps</figcaption></figure>
<p>I also got mildly addicted to this spin off on Werewolf called <a href="https://store.steampowered.com/app/3803820/Demon_Bluff_Demo/">Demon Bluff</a>. It’s only available as a demo, but I’ve sunk 5-6 hours into it in less than 10 days, and it makes for a great screen share game in a Discord call.</p>
<figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/demon-bluff.Cq2ebJZO.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/demon-bluff.Cq2ebJZO.webp" data-pswp-width="2560" data-pswp-height="1440" data-pswp-caption="Every character has its own unique abilities, and the game packs in a lot of depth through those even in this limited demo" aria-label="Card-based puzzle game board with numbered characters and speech bubble clues." data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/demon-bluff.Cq2ebJZO.webp" alt="Card-based puzzle game board with numbered characters and speech bubble clues." loading="lazy" decoding="async" width="2560" height="1440" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">Every character has its own unique abilities, and the game packs in a lot of depth through those even in this limited demo</figcaption></figure>
<h2 id="food">Food</h2>
<p>With Yash away I kept finding excuses to not cook since it was boring to just cook for myself. I finally decided today that it was enough dilly-dallying and finally made some air fried chicken nuggets with the chicken breast that had been sitting in the freezer for 5 days.</p>
<figure data-image-modal-root="" class="half" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/chicken-nuggets.E2_tNwhe.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/chicken-nuggets.E2_tNwhe.webp" data-pswp-width="3072" data-pswp-height="4080" data-pswp-caption="I had to do something to remind myself I can cook" aria-label="Breaded chicken nuggets on a steel plate with a bowl of creamy dipping sauce." data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/chicken-nuggets.E2_tNwhe.webp" alt="Breaded chicken nuggets on a steel plate with a bowl of creamy dipping sauce." loading="lazy" decoding="async" width="3072" height="4080" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">I had to do something to remind myself I can cook</figcaption></figure>
<p>I’m also finally cooking a proper dinner tonight, but that’ll be revealed next week :D</p>]]></content:encoded>
    </item>
    <item>
      <title>Weeknotes: Week #22 (2026)</title>
      <link>https://msfjarvis.dev/weeknotes/week-22-2026/</link>
      <guid>https://msfjarvis.dev/weeknotes/week-22-2026/</guid>
      <description>The first anniversary of IndieWebClub!</description>
      <pubDate>Sun, 31 May 2026 13:05:36 GMT</pubDate>
      <content:encoded><![CDATA[<p>Pretty “happening” week this time around! Let’s get right into it…</p>
<p>After a couple of weeks of frustrating silence, <a href="https://yashgarg.dev/">Yash</a> got <a href="https://yashgarg.dev/weekly-notes-22-2026/">his Visa</a> and will be heading out to Europe for a couple of weeks. Last time he was away for a similar trip I found myself somewhat struggling being by myself, but I’m much better prepared this time around so hopefully things will go smoothly back here. I got a sneak peek at his itinerary, and you should definitely be keeping an eye out for his next weeknote!</p>
<p>My colleague Tarush is leaving Cloudflare at the end of this week, so we had an impromptu farewell party followed by a trip to Karachi Bakery with the boys on our way back.</p>
<p>In some more fun news, it was the first anniversary of <a href="https://blr.indiewebclub.org">IndieWebClub</a> this week! There was a <a href="https://blr.indiewebclub.org/2026-se/">special session</a> on Saturday where we had a series of 13 lightning talks across the whole spectrum of the IndieWeb. Most talks were recorded, so hopefully there will be a public playlist on YouTube or PeerTube at some point 🤞</p>
<p>I took some awful pictures which I’ll attach here, but you can find the ones taken by smarter people in the <a href="https://photos.app.goo.gl/YNR9iQCzWV3kaD6X6">shared Google Photos album</a> and this <a href="https://lightroom.adobe.com/shares/836ab564df1e468c80ed1d3570dd66b5">Adobe Lightroom album</a>.</p>
<div class="gallery" data-pswp-gallery="" style="--gallery-min-width: 250px; --gallery-gap: 1.5rem" data-astro-cid-rj65ajc3=""><figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/iwc_arpit.Dpwroror.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/iwc_arpit.Dpwroror.webp" data-pswp-width="4080" data-pswp-height="3072" data-pswp-caption="Arpit talking about obsessively building a website with Claude but forgetting to actually use it" aria-label="Arpit speaking at IndieWebClub, standing beside a projected slide showing his website." data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/iwc_arpit.Dpwroror.webp" alt="Arpit speaking at IndieWebClub, standing beside a projected slide showing his website." loading="lazy" decoding="async" width="4080" height="3072" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">Arpit talking about obsessively building a website with Claude but forgetting to actually use it</figcaption></figure><figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/iwc_sagrika_1.D-IMsmVC.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/iwc_sagrika_1.D-IMsmVC.webp" data-pswp-width="4080" data-pswp-height="3072" data-pswp-caption="Sagrika's guide to finding your writing voice. Let the hate flow through you..." aria-label="Slide from Sagrika Padha’s talk about finding one’s writing voice, with notes on collecting sentences and writing in a continuous flow." data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/iwc_sagrika_1.D-IMsmVC.webp" alt="Slide from Sagrika Padha’s talk about finding one’s writing voice, with notes on collecting sentences and writing in a continuous flow." loading="lazy" decoding="async" width="4080" height="3072" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">Sagrika's guide to finding your writing voice. Let the hate flow through you...</figcaption></figure><figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/iwc_sagrika_2.w6K1nr2h.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/iwc_sagrika_2.w6K1nr2h.webp" data-pswp-width="4080" data-pswp-height="3072" data-pswp-caption="The importance of honesty in writing feels very underappreciated these days" aria-label="Sagrika Padha speaking into a microphone beside a slide about specific, emotional writing and developing a distinct voice." data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/iwc_sagrika_2.w6K1nr2h.webp" alt="Sagrika Padha speaking into a microphone beside a slide about specific, emotional writing and developing a distinct voice." loading="lazy" decoding="async" width="4080" height="3072" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">The importance of honesty in writing feels very underappreciated these days</figcaption></figure><figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/iwc_yash.DqHnR1sg.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/iwc_yash.DqHnR1sg.webp" data-pswp-width="4080" data-pswp-height="3072" data-pswp-caption="That's my roommate!" aria-label="Yash giving a talk titled “Owning Conversations on the Open Web” at IndieWebClub." data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/iwc_yash.DqHnR1sg.webp" alt="Yash giving a talk titled “Owning Conversations on the Open Web” at IndieWebClub." loading="lazy" decoding="async" width="4080" height="3072" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">That's my roommate!</figcaption></figure></div>
<p>After the talks everyone got together to hang out on the terrace and there was cake! And also some very ominous clouds, forcing Yash and I to dip back home to avoid getting stuck in the rain.</p>
<figure data-image-modal-root="" class="half" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/post_iwc_rain.C0QCfE5o.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/post_iwc_rain.C0QCfE5o.webp" data-pswp-width="4080" data-pswp-height="3072" data-pswp-caption="Anything for some rain in the AM instead of evenings..." aria-label="Very gray clouds overhead, some light gray buildings and the top of a very lush tree are visible towards the bottom of the image" data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/post_iwc_rain.C0QCfE5o.webp" alt="Very gray clouds overhead, some light gray buildings and the top of a very lush tree are visible towards the bottom of the image" loading="lazy" decoding="async" width="4080" height="3072" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">Anything for some rain in the AM instead of evenings...</figcaption></figure>
<h2 id="work-stuff">Work Stuff™</h2>
<p>Work has been somewhat chaotic this week as I chased self-imposed tight deadlines, but I was ultimately able to get everything that was within my control to the finish line. I did however fully exhaust myself due to compulsively working late nights, and by Friday I just needed to take an afternoon nap or risk falling asleep at my home desk. Definitely not the healthiest week I’ve had with respect to work but these should be very rare, since it was my own decision to take on just a <em>little</em> more than I was really capable of delivering 😅</p>
<p>Next week is going to involve visiting some clients which has the potential to be interesting, looking forward to the experience.</p>
<h2 id="personal-projects">Personal Projects</h2>
<p>Big week for the tens of users of my <a href="https://lobste.rs">lobsters</a> app <a href="https://msfjarvis.dev/g/compose-lobsters">Claw</a> as I had to make two releases in quick succession. The first release had been baking for nearly 2 months, and added the ability to log into the app to lay the groundwork for building interactive features in the future. I also switched the app over to not rely on the JSON API the site exposes due to a Ruby on Rails misfeature (according to the site admin) and instead just scrape the HTML itself. As my luck would have it, the markup changed literally 2 days after I made the release after having been perfectly stable for <em>weeks</em> since I made the initial swap, so I had to do an emergency hotfix. Grrr</p>
<p>I’ve continued hacking on the app, making a big range of changes to bring it up to parity with the website experience. In no particular order:</p>
<ul>
<li>Screenshot testing to make it easier to do iterative improvements</li>
<li>Changed the comments UI and UX to closely resemble the defunct Reddit client <em>Boost</em> — big thanks to Yash for that suggestion</li>
<li>(Unsuccessfully) <a href="https://github.com/msfjarvis/compose-lobsters/pull/1183">attempt</a> to move the parsing logic to a <a href="https://github.com/cashapp/zipline">Zipline</a>-backed module that would let me hot patch it without making users update the app</li>
<li>(In progress) add the ability for users to <a href="https://github.com/msfjarvis/compose-lobsters/pull/1184">reply to comments</a>. I paused work on it to write this weeknote!</li>
</ul>
<h2 id="clanker-things">Clanker things</h2>
<p>I talked <a href="https://msfjarvis.dev/weeknotes/week-21-2026">last week</a> about experimenting with <code>agentmemory</code> to remove the need for <code>AGENTS.md</code> files, so far that has yielded exactly 0 value. I haven’t had any luck in steering LLMs into autonomously persisting facts and decisions into memory, and <code>AGENTS.md</code> files themselves have been feeling useless as LLMs seem to mostly ignore them even in projects that do have the files. I did some tweaks to the prompt today to improve <code>agentmemory</code> usage, and will report back next week on how that went.</p>
<p>I also made one major-but-not-really change to the harness by <a href="https://git.msfjarvis.dev/msfjarvis/my-pi/commit/3045be0afc8bff4cea4fb148e39840bd360b9861">vendoring every single skill I use</a> into the Git repository itself rather than having them be symlinks to an untracked <code>~/.agents</code> directory. This makes the setup more portable and easier to make modifications to should I need to.</p>
<p>I don’t always agree with <a href="https://lucumr.pocoo.org">Armin Ronacher</a>, but I like to keep up with his excellent writing regardless. This week he posted a <a href="https://lucumr.pocoo.org/2026/5/26/clankers/">great article</a> about his persistent use of the word “Clankers” for what the AI pilled call <em>agents</em>, and I found myself nodding along to everything he was saying. I’m not going to do him the injustice of distilling his argument down to a couple of lines, so please go give it a read.</p>
<h2 id="the-obligatory-food-section">The obligatory food section</h2>
<p>This week had more Instagram recipes and me finally going back to my scoopable veggie salad. Expect more salads in coming weeks when I only have myself to feed :D</p>
<div class="gallery" data-pswp-gallery="" style="--gallery-min-width: 250px; --gallery-gap: 1.5rem" data-astro-cid-rj65ajc3=""><figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/instagram_recipe_onions.D5d5_RCN.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/instagram_recipe_onions.D5d5_RCN.webp" data-pswp-width="3072" data-pswp-height="4080" data-pswp-caption="Still can't believe this was just onions in a pan" aria-label="Creamy onion gravy or masala cooking in a frying pan with a spoon and spatula." data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/instagram_recipe_onions.D5d5_RCN.webp" alt="Creamy onion gravy or masala cooking in a frying pan with a spoon and spatula." loading="lazy" decoding="async" width="3072" height="4080" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">Still can't believe this was just onions in a pan</figcaption></figure><figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/instagram_recipe_chicken.SJCbKqKM.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/instagram_recipe_chicken.SJCbKqKM.webp" data-pswp-width="3072" data-pswp-height="4080" data-pswp-caption="For how few steps were involved in this recipe it was incredibly delicious, can't do better in <15 minutes" aria-label="Chicken pieces browning in a frying pan on a stovetop during cooking" data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/instagram_recipe_chicken.SJCbKqKM.webp" alt="Chicken pieces browning in a frying pan on a stovetop during cooking" loading="lazy" decoding="async" width="3072" height="4080" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">For how few steps were involved in this recipe it was incredibly delicious, can't do better in &lt;15 minutes</figcaption></figure><figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/veggie_salad.BeNa7W3q.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/veggie_salad.BeNa7W3q.webp" data-pswp-width="3072" data-pswp-height="4080" data-pswp-caption="My beloved bowl of chopped veggies..." aria-label="A bowl of chopped vegetable salad with cucumber, tomato, onion, and sweet corn, held in one hand with a spoon inside." data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/veggie_salad.BeNa7W3q.webp" alt="A bowl of chopped vegetable salad with cucumber, tomato, onion, and sweet corn, held in one hand with a spoon inside." loading="lazy" decoding="async" width="3072" height="4080" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">My beloved bowl of chopped veggies...</figcaption></figure></div>]]></content:encoded>
    </item>
    <item>
      <title>Weeknotes: Week #21 (2026)</title>
      <link>https://msfjarvis.dev/weeknotes/week-21-2026/</link>
      <guid>https://msfjarvis.dev/weeknotes/week-21-2026/</guid>
      <description>Honestly not even sure how I feel about this week</description>
      <pubDate>Sun, 24 May 2026 12:58:09 GMT</pubDate>
      <content:encoded><![CDATA[<p>As I’m sitting down to write this weeknote and looking through <a href="https://msfjarvis.dev/notes/collating-entries-in-my-obsidian-journal-for-week-notes/">my outline</a>, I’m realizing that I remember basically nothing I am reading. I can’t remember the last time a week has felt this long, but hey at least it’s over and I have words to prove it happened.</p>
<p>This week I had decided to be in the office every single day instead of our usual 3, so obviously I got rewarded for it on day 1 itself with very heavy rains. Thankfully an expensive taxi saved my hide before the traffic jams really started to materialize, and I was very grateful to be back inside before it really started pouring.</p>
<video controls="" loading="lazy"><source src="https://media.msfjarvis.dev/rain_on_monday-2026-05-24.mp4" type="video/mp4"></video>
<p>This was admittedly a little scary, but I came back home to the news that <a href="https://yashgarg.dev">Yash</a> had finished printing the Rocktopus I had requested last week. Here it is, guarding my workstation at the office the next day.</p>
<figure data-image-modal-root="" class="half" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/the_rocktopus.9DfEGoKi.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/the_rocktopus.9DfEGoKi.webp" data-pswp-width="3072" data-pswp-height="4080" data-pswp-caption="He's perfect" aria-label="A 3D printed octopus with the head of Dwayne 'The Rock' Johnson, perched neatly on top of my monitor" data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/the_rocktopus.9DfEGoKi.webp" alt="A 3D printed octopus with the head of Dwayne 'The Rock' Johnson, perched neatly on top of my monitor" loading="lazy" decoding="async" width="3072" height="4080" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">He's perfect</figcaption></figure>
<p>A few weeks ago, Yash had come across a Reddit post from someone wanting to sell the mangoes they were growing, and we had decided to get some. They got delivered on Wednesday and goddamn were they huge. Unfortunately still raw and will take a few days to be ready to eat, but I feel it’ll be worth the wait.</p>
<figure data-image-modal-root="" class="half" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/massive_mango.BT1tpmnj.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/massive_mango.BT1tpmnj.webp" data-pswp-width="960" data-pswp-height="1280" data-pswp-caption="That's a thick boy" aria-label="A large raw mango in Yash's hand, him barely managing to hold on to it because of how huge it is" data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/massive_mango.BT1tpmnj.webp" alt="A large raw mango in Yash's hand, him barely managing to hold on to it because of how huge it is" loading="lazy" decoding="async" width="960" height="1280" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">That's a thick boy</figcaption></figure>
<p><a href="https://github.com/swapnilmadavi">Swapnil</a> and I got stuck debugging something after a late work meeting, after wrapping it up Swapnil decided to start a group call with the lads. We did a solid half hour plus of just shooting the shit which was a nice way to wind down before bed. I had forgotten how much I love group calls with friends, it’s so hard to get people together these days. Damn you capitalism!</p>
<p>On Friday the entire RealtimeKit team got together for lunch at <a href="https://thepizzabakery.in/">Pizza Bakery</a>, where I was too focused on the pizza to actually take more than one picture. As usual, Yash <a href="https://yashgarg.dev/weekly-notes-21-2026/">has you covered</a> on that front.</p>
<p>I try to keep Sundays free so I can just exist for a day, no thoughts head empty. Unfortunately Mayank had other plans, so we went and watched The Mandalorian and Grogu today. I found the movie to be a fine spectacle, but it doesn’t really advance the wider world too much which seems to be my constant problem with Star Wars.</p>
<figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/the_mandalorian_and_grogu.BNOxHuqB.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/the_mandalorian_and_grogu.BNOxHuqB.webp" data-pswp-width="4064" data-pswp-height="3056" data-pswp-caption="I am convinced Grogu being a puppet instead of CGI is the entire reason this character ever got traction" aria-label="A frame from the movie The Mandalorian And Grogu" data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/the_mandalorian_and_grogu.BNOxHuqB.webp" alt="A frame from the movie The Mandalorian And Grogu" loading="lazy" decoding="async" width="4064" height="3056" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">I am convinced Grogu being a puppet instead of CGI is the entire reason this character ever got traction</figcaption></figure>
<h2 id="reading">Reading</h2>
<p>It took me 2 months of <em>very</em> distracted reading, but I managed to finishing reading <a href="https://www.couldshouldmightdont.com">Could Should Might Don’t</a>. I think the book itself is great, but with so many distractions available I found myself struggling to read it regularly. According to the statistics on my Kobo I averaged 9 minutes per session on the book which is significantly lower than my usual of 15-20 minutes. My usual fare of Science Fiction works better here by having continual suspense drawing me in, so I started reading <a href="https://bookwyrm.social/user/msfjarvis/generatednote/11327057">The Knife of Never Letting Go</a> instead of going for more non-fiction books. I’ll see if I can piece together a book review for Could Should Might Don’t, and definitely see what I can change to make non-fiction stick better. I can’t have great books take me 2 months to go through 400 pages when I typically manage that in under 2 weeks.</p>
<h2 id="food">Food</h2>
<p>With a lot of busy evenings we didn’t get to cook a lot this week. Yash has finally started whipping out the Instagram reels, and we had a couple of successes. It was nice to break up our usual cycle of the same 4-5 dishes in rotation, I think we’ll keep pulling one or two items off his evergrowing list every week.</p>
<div class="gallery" data-pswp-gallery="" style="--gallery-min-width: 250px; --gallery-gap: 1.5rem" data-astro-cid-rj65ajc3=""><figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/classic_chhole_rice.C4df4Q6D.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/classic_chhole_rice.C4df4Q6D.webp" data-pswp-width="3072" data-pswp-height="4080" data-pswp-caption="Another staple of this household, just can't beat the ease." aria-label="A bowl of chickpea curry and rice" data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/classic_chhole_rice.C4df4Q6D.webp" alt="A bowl of chickpea curry and rice" loading="lazy" decoding="async" width="3072" height="4080" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">Another staple of this household, just can't beat the ease.</figcaption></figure><figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/instagram_egg_rice_recipe.Cyfv1uXm.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/instagram_egg_rice_recipe.Cyfv1uXm.webp" data-pswp-width="3072" data-pswp-height="4080" data-pswp-caption="This one's off Instagram and a bit of a sleeper hit, go pester Yash for a link" aria-label="A pan with rice that has been cooked in a bunch of spices to an almost biryani like appearance" data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/instagram_egg_rice_recipe.Cyfv1uXm.webp" alt="A pan with rice that has been cooked in a bunch of spices to an almost biryani like appearance" loading="lazy" decoding="async" width="3072" height="4080" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">This one's off Instagram and a bit of a sleeper hit, go pester Yash for a link</figcaption></figure></div>
<h2 id="random-llm-experiments">Random LLM experiments</h2>
<p>Just wanted to have some place to dump info about what shenanigans I have been up to, so I’ll probably just make this an ongoing section.</p>
<p>I’ve written previously about <a href="https://msfjarvis.dev/weeknotes/week-19-2026/">switching to OpenAI Codex</a> and the associated GPT-5 laziness problems that I had to deal with. In the two weeks since, I’ve had multiple incidents of the extension I wrote either not firing when it should or misfiring when it shouldn’t so I decided to make it entirely too complicated. As I say <a href="https://git.msfjarvis.dev/msfjarvis/my-pi/commit/b243e6caf15ae2bfd648a65a2143429e9da1eda7">in the commit message</a>; what more RegEx can’t solve, more AI definitely can. Now instead of putting every message through an impenetrably complicated RegEx, the extension instead pipes it through an impenetrably complicated text classifier LLM. This approach also hasn’t been foolproof so far either, but iterating over the prompt (<a href="https://git.msfjarvis.dev/msfjarvis/my-pi/commit/7347bf2b607ca71d8682e853f0db95844660422a">here</a> and <a href="https://git.msfjarvis.dev/msfjarvis/my-pi/commit/59d79e9892ac6c04c9ee02a0e09daf2db300dc71">here</a>), has been helpful when paired with a proper test suite.</p>
<p><a href="https://agents.md/">AGENTS.md</a> files have been the de-facto way of giving LLMs persistent knowledge of codebases, but I find it somewhat annoying to have a bunch of them in my repositories. This week I’ve been looking at alternatives, and unfortunately mostly came up empty. Only one thing stood out to me, which was <a href="https://github.com/rohitg00/agentmemory">agentmemory</a>. So far I’ve only put “memories” into it, and I’ll see if during the next week LLMs actually use this or continue reading all files from scratch.</p>
<p>I’ve been going all in on <a href="https://agentskills.io">skills</a> as a way of steering LLMs, and found an adversarial reviewer skill from my colleague <a href="https://mk.gg/">Matt Kane</a> in the <a href="https://github.com/emdash-cms/emdash/blob/283bcf059e8c6889d14292e822953f13eaf6a6b0/skills/adversarial-reviewer/SKILL.md">EmDash CMS repo</a>. I had it run across the full diff of <a href="https://github.com/msfjarvis/compose-lobsters">Claw</a> since the last release, and it was able to identify <a href="https://git.msfjarvis.dev/msfjarvis/compose-lobsters/commit/1b6ae68e0d4a27d99709a09b7ef759f6bcda5b17">a couple of valid problems</a>. Obviously like any LLM usage, it also fully made up how to properly detect login sessions but that wasn’t too difficult to rectify early on.</p>]]></content:encoded>
    </item>
    <item>
      <title>Weeknotes: Week #20 (2026)</title>
      <link>https://msfjarvis.dev/weeknotes/week-20-2026/</link>
      <guid>https://msfjarvis.dev/weeknotes/week-20-2026/</guid>
      <description>Ignorance is bliss</description>
      <pubDate>Sun, 17 May 2026 12:10:00 GMT</pubDate>
      <content:encoded><![CDATA[<p>This week was relatively quiet all things considered, all the “excitement” was at work related to things I cannot share yet :)</p>
<p>We had two big meetings this week with leadership, first the R&amp;D All Hands with our engineering leadership and then celebrating the Bengaluru office’s 1st year with the people who helped make it happen. The All Hands was used to peddle some more apologia for the <a href="https://msfjarvis.dev/weeknotes/week-19-2026/#work">layoffs</a> last week and lay the path forward. Wasn’t super convincing, and I think I was better off not hearing any of it. The other call was less depressing, but I could’ve done without that one too. Not great for the brainworms :)</p>
<p>What I can share though, is that our Product Manager <a href="https://www.linkedin.com/in/korinne-alpers">Korinne Alpers</a> is visiting the India office, and we’ve been having a lot of productive discussions about the team and product’s future. I’ve come out of the week feeling much more hopeful about what’s in store for my team and I.</p>
<p>Other than that, I started the week off by discovering the <a href="https://www.genesispc.in/products/wobkey-rainy75-mechanical-keyboard?variant=43852369068085">keyboard</a> that I <a href="https://msfjarvis.dev/weeknotes/week-12-2026/">bought for my birthday</a> did have wireless support, hidden behind a switch whose position I can only describe as chaotic evil.</p>
<figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/the-betrayal-of-the-keyboard.BxcfvAPL.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/the-betrayal-of-the-keyboard.BxcfvAPL.webp" data-pswp-width="3278" data-pswp-height="3072" data-pswp-caption="I was so mad at this" aria-label="A keyboard with a light blue aluminium frame, with its Caps Lock keycap removed. Below where the key would sit, next to the key switch there is a physical on/off switch that enables the keyboard's wireless features." data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/the-betrayal-of-the-keyboard.BxcfvAPL.webp" alt="A keyboard with a light blue aluminium frame, with its Caps Lock keycap removed. Below where the key would sit, next to the key switch there is a physical on/off switch that enables the keyboard's wireless features." loading="lazy" decoding="async" width="3278" height="3072" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">I was so mad at this</figcaption></figure>
<p>Surprisingly I received <a href="http://msfjarvis.dev/apsg/kage/pull/517">a pull request</a> for a project of mine: <a href="https://msfjarvis.dev/apsg/kage">kage</a>. It’s a Kotlin library that implements the <a href="https://c2sp.org/age">age</a> cryptography protocol, originally written for use in <a href="https://passwordstore.app">Android Password Store</a>. <em>Unsurprisingly</em>, the CI pipeline needed some fixing :) Glad to see people using this library though, given I don’t get to work on this too much.</p>
<p>On Friday, the boys got together for a movie in a very long time! <a href="https://yashgarg.dev">Yash</a>, <a href="https://github.com/mayankofficial999">Mayank</a>, <a href="https://github.com/swapnilmadavi">Swapnil</a> and I went to see <a href="https://en.wikipedia.org/wiki/Hokum_(film)">Hokum</a>. We all liked it a lot, the horror elements felt very well done without relying too much on the trite jumpscares that seem to be the only way horror gets done these days.</p>
<p>Having read the <a href="https://en.wikipedia.org/wiki/Silo_(series)">Silo books</a> this year I was excited to finally pick up the <a href="https://en.wikipedia.org/wiki/Silo_(TV_series)">Silo TV series</a> this week. I got through a couple of episodes, and I’m starting to realise why so many people say they felt checked out pretty quickly. Already knowing the story makes it easy to maintain some suspense for what’s coming but for someone who hasn’t read the books there seems to be next to nothing to hook them into it. I’m told Season 2 is even worse at this so maybe I won’t end up finishing the whole thing.</p>
<p>Not a lot of cooking this week, contributed in part by cooking bigger portions, being lazy, and just not being home on time. You’re still owed pictures though :)</p>
<div class="gallery" data-pswp-gallery="" style="--gallery-min-width: 250px; --gallery-gap: 1.5rem" data-astro-cid-rj65ajc3=""><figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/good-old-dal-chawal.CGxAEXbC.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/good-old-dal-chawal.CGxAEXbC.webp" data-pswp-width="3072" data-pswp-height="4080" data-pswp-caption="Some days a good old bowl of dal chawal just hits right" aria-label="A bowl of hearty lentils and white rice. The lentils were cooked with some sauted onions and tomatoes." data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/good-old-dal-chawal.CGxAEXbC.webp" alt="A bowl of hearty lentils and white rice. The lentils were cooked with some sauted onions and tomatoes." loading="lazy" decoding="async" width="3072" height="4080" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">Some days a good old bowl of dal chawal just hits right</figcaption></figure><figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/rajma-makes-a-return.0YMKhsLs.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/rajma-makes-a-return.0YMKhsLs.webp" data-pswp-width="3072" data-pswp-height="4080" data-pswp-caption="The rajma is just a staple at this point" aria-label="A spicy curry made with red kidney beans, sitting in a big saucepot. It clearly looks half empty, since we had already served ourselves." data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/rajma-makes-a-return.0YMKhsLs.webp" alt="A spicy curry made with red kidney beans, sitting in a big saucepot. It clearly looks half empty, since we had already served ourselves." loading="lazy" decoding="async" width="3072" height="4080" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">The rajma is just a staple at this point</figcaption></figure></div>]]></content:encoded>
    </item>
    <item>
      <title>Weeknotes: Week #19 (2026)</title>
      <link>https://msfjarvis.dev/weeknotes/week-19-2026/</link>
      <guid>https://msfjarvis.dev/weeknotes/week-19-2026/</guid>
      <description>Super busy week of work, fun, not-fun work and a lot in between.</description>
      <pubDate>Sun, 10 May 2026 13:12:00 GMT</pubDate>
      <content:encoded><![CDATA[<p>I’m dreading starting this weeknote because the cliff notes I auto-generate from my daily journal (explained <a href="https://msfjarvis.dev/notes/collating-entries-in-my-obsidian-journal-for-week-notes/">here</a>) are effectively two pages long. Either a lot more happened than I remember or I was feeling <em>very</em> strongly about a lot of inane things at the start of the week. Only one way to find out…</p>
<h1 id="meta">Meta</h1>
<p>The week started with an RSS feed mishap on this very site that caused mismatched GUIDs to spam all subscribers of the feed. I got rather fed up with trying to patch this all, so I took <a href="https://yashgarg.dev">Yash’s</a> help and copied the code for his RSS feeds. Massive thank you to him for that, I was at the end of my rope.</p>
<p>Since then, I’ve also added Atom and JSONFeed support, and brought back the per-category and per-tag feeds that had gone missing in the transition away from Hugo. I’ve manually checked as much as I could, please reach out if things are still out of place.</p>
<h1 id="life-and-people">Life and People</h1>
<p>This week I’ve been trying out going to the gym early in the morning instead of the evening. So far that has made a very positive impact in both my schedule for the day and how I feel at the gym itself, so I intend to stick with it. This also forces me to sleep at a better time which is always a win.</p>
<p>I did however roll my ankle <em>pretty</em> badly on my way back from the gym on Wednesday, which continued to be a problem well into Friday. Never felt older in my life.</p>
<p><a href="https://rohanarthur.com/">Rohan Arthur</a> took us out this week to <a href="https://rageroom.in/">Rage Room</a> which was shockingly close to our house in a rather secluded corner. Wrecking some shit on Friday evening (context in next section) was very cathartic and couldn’t have been any more well-timed, despite being a complete accident.</p>
<h1 id="work">Work</h1>
<p>Hoo boy, was this a week. I spent the first half of the week debugging what seemed like an endless stream of bugs while trying to cut a new release. One of these debugging sessions ran for a full 5 hours focused on a single bug, which I thought was gonna be my worst problem this week…</p>
<p>Lo and behold, <a href="https://blog.cloudflare.com/building-for-the-future">Cloudflare announces layoffs</a> for nearly 20% of the workforce bright and early on Friday. Nobody in my team was affected, but holy fuck did this completely annihilate the vibes in the office and company chat room. Seeing so many profile pictures just disappear overnight felt like walking through a graveyard. My heart goes out to everyone affected, they’re all incredibly talented people who did not deserve this treatment.</p>
<h1 id="personal-projects">Personal projects</h1>
<p>Talking about AI and LLMs after Cloudflare cited it as the reason for decimating the workforce and organisational structure feels rather tone-deaf, but I wanted to come out and be honest about where my own head is at. It’s a well accepted sentiment that continued usage of AI and LLMs causes some amount of skill atrophy and the formation of unhealthy dependence, and I never felt that more than I did this week.</p>
<p>So far I’ve been relying on unsustainably subsidised access to GitHub Copilot Pro via GitHub’s Open Source program for coding-related LLM usage, which recently received <a href="https://github.blog/news-insights/company-news/changes-to-github-copilot-individual-plans/">changes</a> that reduce usage limits significantly. While working on this very site I ran afoul of those limits pretty quickly in the first week, and then again in the second week. I had to go without access to an LLM for a few days, and I found myself being unreasonably anxious about not having this tool that I’ve lived without just fine for nearly a decade of programming.</p>
<p>I wasn’t liking how this made me feel, and the layoffs didn’t exactly help, but I did ultimately concede and admit to myself that like a rat to cheese, I have been trapped. For the first time, I had to take out my wallet and shell out the cash for a monthly subscription to OpenAI’s Codex. My sole reason for preferring it over Claude was that it lets you use third-party harnesses, so that I could use it with <a href="https://pi.dev">pi</a>. Pi is far from the most featureful coding agent you will come across, but it does that by choice and instead focuses on being incredibly extensible so you can build something exactly as per your needs. You can check out my customisations on top of pi in <a href="https://git.msfjarvis.dev/msfjarvis/my-pi">this repository</a>.</p>
<p>This transition was obviously not sunshine and rainbows, after all there’s a reason Claude Sonnet is my consistent workhorse choice at work over GPT models. GPT-5 has a widely known problem of not executing tasks and just kind of sitting around, which is something OpenClaw has worked around, so I <a href="https://git.msfjarvis.dev/msfjarvis/my-pi/src/commit/90b58cf63a7d3a411b0f84ba1d1fef0517a27214/pi/extensions/openai-codex-execution-bias.ts">implemented a Pi extension</a> to replicate those fixes. Since adding this, things have been much more reliable on longer sessions.</p>
<p>This week I’ve shipped changes in <a href="https://git.msfjarvis.dev/msfjarvis/compose-lobsters">Claw</a> to switch out the use of unsupported JSON endpoints on lobste.rs to scraping the actual HTML instead, which is hopefully more in line with the site admin’s preferences. I will reach out and verify before doing a wide rollout.</p>
<h1 id="food">Food</h1>
<p>Thankfully this week had rather quiet evenings so a lot of home cooked food was had, but obviously I was terrible at documenting it all. We made pulao one day, a high protein salad the next, and a beautifully executed shakshouka on Thursday. On Saturday we did burritos as per our usual and managed to not make too much of a mess.</p>
<p>On Friday we ate dinner at the Amicii Bar and Restaurant where I had a citrus-y mocktail and a chicken burger that was honestly kind of mid. On Sunday I went to Cafe Mizuri’s to try out their English breakfast platter, which was also very delicious and the portion size was just right. I followed it up with a Vietnamese Coffee as a treat to myself :)</p>
<div class="gallery" data-pswp-gallery="" style="--gallery-min-width: 250px; --gallery-gap: 1.5rem" data-astro-cid-rj65ajc3=""><figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/boring-protein-shake.Cdq3tJp3.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/boring-protein-shake.Cdq3tJp3.webp" data-pswp-width="3072" data-pswp-height="4080" data-pswp-caption="I finally had the totally original idea of blending frozen fruits into my protein shakes, total game changer." aria-label="A lavender colored protein shake in a plastic shaker cup" data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/boring-protein-shake.Cdq3tJp3.webp" alt="A lavender colored protein shake in a plastic shaker cup" loading="lazy" decoding="async" width="3072" height="4080" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">I finally had the totally original idea of blending frozen fruits into my protein shakes, total game changer.</figcaption></figure><figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/usual-burrito-bowl.B-kt3nE7.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/usual-burrito-bowl.B-kt3nE7.webp" data-pswp-width="3072" data-pswp-height="4080" data-pswp-caption="Nothing super exciting about this burrito bowl, but it keeps me fed and that's all that matters." aria-label="A simple burrito bowl of rice, beans, corn, salsa and jalapeno and some cilantro" data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/usual-burrito-bowl.B-kt3nE7.webp" alt="A simple burrito bowl of rice, beans, corn, salsa and jalapeno and some cilantro" loading="lazy" decoding="async" width="3072" height="4080" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">Nothing super exciting about this burrito bowl, but it keeps me fed and that's all that matters.</figcaption></figure><figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/shakshuka.BFcAOjRH.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/shakshuka.BFcAOjRH.webp" data-pswp-width="3072" data-pswp-height="4080" data-pswp-caption="I only remembered to take a picture after Yash had served himself :'D" aria-label="A pan of bright red shakshouka and two eggs nestled into it. The pan is clearly half empty." data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/shakshuka.BFcAOjRH.webp" alt="A pan of bright red shakshouka and two eggs nestled into it. The pan is clearly half empty." loading="lazy" decoding="async" width="3072" height="4080" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">I only remembered to take a picture after Yash had served himself :'D</figcaption></figure><figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/mocktail-at-amicii.DV3X7-RX.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/mocktail-at-amicii.DV3X7-RX.webp" data-pswp-width="3072" data-pswp-height="4080" data-pswp-caption="This hit all the right citrus notes but was a little too sweet for my liking. The branding on the basil leaf was a nice touch!" aria-label="A pink/red drink in a short glass cup. There's a single basil leaf on top with the name Amicii branded onto it" data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/mocktail-at-amicii.DV3X7-RX.webp" alt="A pink/red drink in a short glass cup. There's a single basil leaf on top with the name Amicii branded onto it" loading="lazy" decoding="async" width="3072" height="4080" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">This hit all the right citrus notes but was a little too sweet for my liking. The branding on the basil leaf was a nice touch!</figcaption></figure><figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/english-breakfast-at-mizuri.Z-DseHkM.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/english-breakfast-at-mizuri.Z-DseHkM.webp" data-pswp-width="3072" data-pswp-height="4080" data-pswp-caption="The bread didn't feel like it belonged but everything else on that plate was perfectly done." aria-label="An English breakfast spread of sausages, hashbrows, salami, baked beans, toasted bread, baked tomato, an egg, some fruits and a cappuccino on the side." data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/english-breakfast-at-mizuri.Z-DseHkM.webp" alt="An English breakfast spread of sausages, hashbrows, salami, baked beans, toasted bread, baked tomato, an egg, some fruits and a cappuccino on the side." loading="lazy" decoding="async" width="3072" height="4080" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">The bread didn't feel like it belonged but everything else on that plate was perfectly done.</figcaption></figure><figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/vietnamese-coffee-at-mizuri.jXlfH9cn.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/vietnamese-coffee-at-mizuri.jXlfH9cn.webp" data-pswp-width="3072" data-pswp-height="4080" data-pswp-caption="Yep, that's white chocolate at the bottom." aria-label="A tall glass of Vietnamese coffee with a thick layer of white chocolate at the bottom, and filled up the rest of the way with an Americano coffee" data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/vietnamese-coffee-at-mizuri.jXlfH9cn.webp" alt="A tall glass of Vietnamese coffee with a thick layer of white chocolate at the bottom, and filled up the rest of the way with an Americano coffee" loading="lazy" decoding="async" width="3072" height="4080" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">Yep, that's white chocolate at the bottom.</figcaption></figure></div>]]></content:encoded>
    </item>
    <item>
      <title>Weeknotes: Week #18 (2026)</title>
      <link>https://msfjarvis.dev/weeknotes/week-18-2026/</link>
      <guid>https://msfjarvis.dev/weeknotes/week-18-2026/</guid>
      <description>A brand new website, powered by Astro and Cloudflare! And a lot of other things...</description>
      <pubDate>Sat, 02 May 2026 21:02:00 GMT</pubDate>
      <content:encoded><![CDATA[<p>Welcome to the new website! It’s powered by <a href="https://astro.build">Astro</a> but still fully static to the highest extent possible, and performs impeccably on synthetic benchmarks. I was growing increasingly frustrated with both Hugo and Netlify, so this was a great opportunity to kill 2 birds with one stone and also move the site to Cloudflare.</p>
<p>I’ve painstakingly tried to keep all old links working even as I reorganized things, but please please let me know if you find anything out of place. There are still missing features due to technical and human limitations, which will be restored slowly over time:</p>
<ul>
<li>Automatically generated OpenGraph images</li>
<li>GitHub Discussions powered comments (Not sure I want to bring this back TBH)</li>
<li><del>The glorius post footer that let you share my writing to LinkedIn, boosting my street cred</del> Back without LinkedIn, RIP my king</li>
<li><del>Incoming Webmentions viewer</del></li>
<li><del>The build-time integration that I had on Netlify to queue pages for outgoing Webmentions</del> Cron is good enough for this.</li>
</ul>
<p>Onwards to the weeknotes!</p>
<h1 id="life-and-people">Life And People</h1>
<p>HOLY SHIT WE FINALLY HAD RAIN BLESSED BY THE GOD WHO RELENTED FOR A SINGLE DAY</p>
<figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/thunderstorms.BtmnEozG.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/thunderstorms.BtmnEozG.webp" data-pswp-width="4080" data-pswp-height="3072" data-pswp-caption="Seeing this right outside the office building felt almost surreal after the incessant heat we've had for the past month" aria-label="A thunderstorm outside my office building, the picture shows trees being buffeted by strong winds and heavy rainfall that's started to waterlog the area a bit" data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/thunderstorms.BtmnEozG.webp" alt="A thunderstorm outside my office building, the picture shows trees being buffeted by strong winds and heavy rainfall that's started to waterlog the area a bit" loading="lazy" decoding="async" width="4080" height="3072" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">Seeing this right outside the office building felt almost surreal after the incessant heat we've had for the past month</figcaption></figure>
<p>This however did cause our taxi back home to take a total of 2.5 hours from being booked to dropping us off, which usually takes 15 minutes to arrive and 15 more to reach our home.</p>
<p>Not a lot of socializing happened during the week until Saturday when <a href="https://yashgarg.dev">Yash</a> and I invited <a href="https://hachyderm.io/@vi_mi">Fenil</a> to IndieWebClub. I was a little reluctant since I didn’t feel that the discussion topics were going to be particularly interesting to me but I was pleasantly surprised and had a great time.</p>
<p>Fenil convinced us to do a watch party of <a href="https://www.imdb.com/title/tt1327035/">Dev D</a> at our apartment, we invited over Kunwar to join us and it ended up being quite the fun night.</p>
<p>Also since there’s no better place than this, my childhood friend Prajwal got a raise, promotion and bonus; go friendo 🎉</p>
<h1 id="work-and-career">Work And Career</h1>
<p>Things at work have been moving along quite well, after a long period of working exclusively on documentation and such we’re back to doing good old engineering and it’s nice to be back. I’ve been managing my increased responsibilities okay so far but it’s barely been 2 weeks so who’s to say things will stay the same.</p>
<p>Our last sprint was planned around culling our backlog and I’m pleased to report it has gone under 100 issues for the first time in maybe 2 or 3 years. A lot of important but low-key improvements have landed and we’re on track to ship in the coming week with a casual 60 or so tickets shuffled out of the backlog.</p>
<p>We had CI problems the whole week with macOS runners failing to boot up which was causing a lot of trouble in merging backlogs, so I had Claude write a bash script that just waits for jobs to fail and retries them until the pipeline is green. I jokingly spun out a side business of lending this service to my colleagues and made my first sale: ₹5 off Mayank to get his release PR through. If I still used LinkedIn this could make an excellent motivational post.</p>
<p>On Thursday Yash, Mayank and I decided to work together out of Cafe Grey again which was a fun and surprisingly productive time. Mayank was shocked we actually got so much shit done! We tried some new items off the menu this time and they were all pretty solid.</p>
<div class="gallery" data-pswp-gallery="" style="--gallery-min-width: 250px; --gallery-gap: 1.5rem" data-astro-cid-rj65ajc3=""><figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/breakfast-sandwiches.CLEwKyIH.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/breakfast-sandwiches.CLEwKyIH.webp" data-pswp-width="4080" data-pswp-height="3072" data-pswp-caption="This sandwich was delicious, and surprisingly the thick cut chips they gave on this plate had more seasoning than the actual Peri Peri fries we ordered later" aria-label="This sandwich was delicious, and surprisingly the thick cut chips they gave on this plate had more seasoning than the actual Peri Peri fries we ordered later" data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/breakfast-sandwiches.CLEwKyIH.webp" alt="" loading="lazy" decoding="async" width="4080" height="3072" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">This sandwich was delicious, and surprisingly the thick cut chips they gave on this plate had more seasoning than the actual Peri Peri fries we ordered later</figcaption></figure><figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/breakfast-french-toast.C0Qg-4Ml.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/breakfast-french-toast.C0Qg-4Ml.webp" data-pswp-width="4080" data-pswp-height="3072" data-pswp-caption="Mayank really wanted french toast and we all sampled the goods, looking at it almost convinced me that I could pull this off at home" aria-label="Mayank really wanted french toast and we all sampled the goods, looking at it almost convinced me that I could pull this off at home" data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/breakfast-french-toast.C0Qg-4Ml.webp" alt="" loading="lazy" decoding="async" width="4080" height="3072" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">Mayank really wanted french toast and we all sampled the goods, looking at it almost convinced me that I could pull this off at home</figcaption></figure></div>
<h1 id="games">Games</h1>
<p><a href="https://www.playstation.com/games/helldivers-2">Helldivers 2</a> dropped a new update this week with a new biome and enemy class, we were getting wiped pretty frequently on difficulty 10 where we usually play so we toned it down to 8 and have been having a much more acceptable time since. The new Bullet Storm stratagem is absolutely busted and will definitely catch a nerf in the next patch.</p>
<p><a href="https://store.steampowered.com/app/3509230/Gambonanza/">Gambonanza</a> also released this week which is a chess roguelike that looks super interesting, I’ve been meaning to give it a try but I already have enough roguelikes taking over my life at the moment…</p>
<h1 id="personal-projects-and-tech-stuff">Personal Projects And Tech Stuff</h1>
<p>Rebuilding this website occupied my whole week and I’m still not remotely done, which is just going to be a constant problem I suppose. No wonder people say rewrites don’t fix anything.</p>
<p>My Forgejo instance was being absolutely pummeled this whole week by spammers which was a problem because I rely on it constantly and can’t afford downtime. I tried using <a href="https://anubis.techaro.lol">Anubis</a> which didn’t make much of a dent and ended up just letting it be and accepting that Cloudflare will have to take care of it.</p>
<p>I finally caved and ordered a new set of earbuds since my existing ones have gotten very unreliable in terms of charging both buds at the same time and pairing properly. I went with the OnePlus Nord Buds 4 Pro which are a massive upgrade from my CMF Buds. The fast pairing feature actually works, they have a Spotify integration and the active noise cancelation blows the CMF Buds out of the water. I am very impressed!</p>
<h1 id="food">Food</h1>
<p>I am writing this weeknote after attempting to pressure cook a batch of chickpeas with no water in the cooker so please excuse my lack of enthusiasm.</p>
<p>On Tuesday I was too tired to cook and Yash too hungry, so we decided to not do any cooking. I still needed to eat though, so I channeled my inner <a href="https://www.youtube.com/@coachjohnnoel/">John Noel</a> and mixed together whatever I could find in the fridge, into a bowl and ripped open a pack of nachos. The beans were pre-boiled and from a packet, which I didn’t know was a thing that was sold here and was pleasantly surprised by.</p>
<p>We had gotten some potatoes after I complained about its lack in our diets so I decided to make a classic aloo bhujia for us, which was also when I discovered how intensely Bihari/Western UP this dish is because Yash had never heard of it. It was hard having to find words for something you’ve gone 27 years assuming people just knew. Came out nice though! Could’ve made Mom proud.</p>
<div class="gallery" data-pswp-gallery="" style="--gallery-min-width: 250px; --gallery-gap: 1.5rem" data-astro-cid-rj65ajc3=""><figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/bean-and-corn-nacho-dip.CFVQqX3Z.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/bean-and-corn-nacho-dip.CFVQqX3Z.webp" data-pswp-width="4080" data-pswp-height="3072" data-pswp-caption="Bar none the coldest nacho dip I've ever eaten, next time I'm throwing some of this shit in a pan." aria-label="A bowl of beans, corns, cheese and some salsa that was used as a nacho dip" data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/bean-and-corn-nacho-dip.CFVQqX3Z.webp" alt="A bowl of beans, corns, cheese and some salsa that was used as a nacho dip" loading="lazy" decoding="async" width="4080" height="3072" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">Bar none the coldest nacho dip I've ever eaten, next time I'm throwing some of this shit in a pan.</figcaption></figure><figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/aloo-bhujia.BEHzPCwW.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/aloo-bhujia.BEHzPCwW.webp" data-pswp-width="3072" data-pswp-height="4080" data-pswp-caption="Next time I'll have to remember to slice the onions instead of dicing them" aria-label="A glass bowl of the aloo bhujia sabzi" data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/aloo-bhujia.BEHzPCwW.webp" alt="A glass bowl of the aloo bhujia sabzi" loading="lazy" decoding="async" width="3072" height="4080" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">Next time I'll have to remember to slice the onions instead of dicing them</figcaption></figure></div>
<p>And that’s kind of all! I will continue fucking around with this site as I find more nooks and crannies where things are broken, but hopefully it all functions well enough for people watching at home. Thanks for reading!</p>]]></content:encoded>
    </item>
    <item>
      <title>Weeknotes: Week #17 (2026)</title>
      <link>https://msfjarvis.dev/posts/weeknotes-week-17-2026/</link>
      <guid>https://msfjarvis.dev/posts/weeknotes-week-17-2026/</guid>
      <description>Adapting to changes at work and doing a bunch of gaming</description>
      <pubDate>Sun, 26 Apr 2026 10:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p>On Wednesday 22nd April this site was down for a few hours in the morning India time thanks to Netlify failing to renew its certificate. Why they thought it was not an operation that should be retried is beyond me, because when I logged into the dashboard and pressed the renew button it was able to provision a certificate in under 2 minutes. Netlify has been a good host for nearly 4 years now (logs say I signed up on Sep&nbsp;23,&nbsp;2022), but at this point I’ve had one too many problems to continue here. I’ve set up a Cloudflare Pages project with this site already, and will cut over the DNS in a week or so when I’ve ported the <a href="https://git.msfjarvis.dev/msfjarvis/acceptable-vibes/src/branch/main/netlify-webmentions-extension">WebMentions Publisher</a> build plugin I wrote to a Cloudflare native solution. Onward to the actual week notes now!</p>
<h1 id="work">Work</h1>
<p>This was my first week assuming full responsibilities of my team as part of the <a href="https://msfjarvis.dev/posts/weeknotes-week-16-2026/#work">transition</a> I talked about last week. There’s still a bit of chaos and new processes we’re having to work up to but it has not been as disruptive as I had expected. I’ve continued to mostly focus on my engineering work and burn down our backlog as part of a bug bash sprint, inspired by a similar thing Lalit Maganti <a href="https://lalitm.com/fixits-are-good-for-the-soul/">wrote about</a> some time ago. LLMs have been quite useful here, both for identifying low hanging fruit to work through as well as actually implementing solutions. One of the tickets I worked on this week was so old that half the code it was meant to change is gone already.</p>
<p>On the flip side I had an absolutely abysmal time getting release PRs through our mandatory AI reviewer since it tries to understandably be extra paranoid for those. The issue is that these are PRs that go from one protected branch to another, so I have to raise <em>another</em> PR to fix its (often benign) complaints for multiple rounds. There’s a lot of complaints across the org about this specific issue so hopefully there’s some improvements on this front soon.</p>
<h1 id="personal-projects">Personal Projects</h1>
<p>I lightly maintain a small Telegram bot named <a href="https://github.com/msfjarvis/linkleaner">linkleaner</a> which rewrites URLs sent by users to have better link previews and optionally redirect to privacy preserving frontends, which saw a <a href="https://github.com/msfjarvis/linkleaner/issues/70">little more</a> <a href="https://github.com/msfjarvis/linkleaner/issues/72">external attention</a> than I’m used to so I took some time to work on addressing the reported issues and fighting the bitrotted deployment pipeline.</p>
<p>Work on <a href="https://git.msfjarvis.dev/msfjarvis/my-pi">my-pi</a> continued this week, I’ve continued adding features to the harness. First up was a robust permissions system for the Bash tool so I can control what commands LLMs can run. I took care to ensure I was learning from the ways OpenCode falls short here, so the extension takes care of handling pipelines, “proxy” commands like `sudo` and `exec`, and much more. I also ported <a href="https://github.com/obra/superpowers">superpowers</a>, and a very rough implementation of the <a href="https://github.com/anthropics/claude-code/tree/main/plugins/ralph-wiggum">Ralph Loop technique</a> that has so far been rather terrible.</p>
<h1 id="people">People</h1>
<p>On Friday I worked out of <a href="https://www.bangaloreeats.com/place/cafe-grey-by-dongle-and-co-indiranagar">Cafe Grey</a> with <a href="https://yashgarg.dev/">Yash</a> and <a href="https://github.com/anunaym14">Anunay</a>, which was pretty nice and let us beat the heat for a few hours. The food was decent, coffees were great and the pricing was not as eye watering as I’ve come to expect from Bengaluru cafes.</p>
<figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/nachos-at-cafe-grey.ChHVbYkf.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/nachos-at-cafe-grey.ChHVbYkf.webp" data-pswp-width="4080" data-pswp-height="3072" data-pswp-caption="These nachos were tasty but also obviously fresh out of a bag." aria-label="A white ceramic plate with a pile of nachos in the middle. There's melty white cheese all over the top." data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/nachos-at-cafe-grey.ChHVbYkf.webp" alt="A white ceramic plate with a pile of nachos in the middle. There's melty white cheese all over the top." loading="lazy" decoding="async" width="4080" height="3072" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">These nachos were tasty but also obviously fresh out of a bag.</figcaption></figure>
<figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/chicken-popcorn-at-cafe-grey.BKv3hfpH.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/chicken-popcorn-at-cafe-grey.BKv3hfpH.webp" data-pswp-width="4080" data-pswp-height="3072" data-pswp-caption="Can't really complain about fried chicken." aria-label="A plate of fried chicken popcorn with small bowls of mayonnaise and ketchup. There's a lemon half sitting on top of the chicken, which itself is on thin bed of lettuce." data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/chicken-popcorn-at-cafe-grey.BKv3hfpH.webp" alt="A plate of fried chicken popcorn with small bowls of mayonnaise and ketchup. There's a lemon half sitting on top of the chicken, which itself is on thin bed of lettuce." loading="lazy" decoding="async" width="4080" height="3072" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">Can't really complain about fried chicken.</figcaption></figure>
<p>On Saturday I went to watch <a href="https://www.imdb.com/title/tt11378946/">Michael</a>, with Yash, Anunay, <a href="https://github.com/mayankofficial999">Mayank</a> and Anunay’s friend Harshit. The movie was great, and I only learned after the movie that Michael Jackson was portrayed by his nephew Jaafar who is also making his debut with this film. One hell of a start to an acting career!</p>
<figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/michael.3Um9NKhl.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/michael.3Um9NKhl.webp" data-pswp-width="4080" data-pswp-height="3072" data-pswp-caption="The picture's a little lopsided because of letterboxing, my positioning and most importantly my ineptitude." aria-label="A scene from the movie Michael showing him singing on stage in a black jacket." data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/michael.3Um9NKhl.webp" alt="A scene from the movie Michael showing him singing on stage in a black jacket." loading="lazy" decoding="async" width="4080" height="3072" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">The picture's a little lopsided because of letterboxing, my positioning and most importantly my ineptitude.</figcaption></figure>
<p>When the movie finished we noticed some ruckus erupting in the front of the theater and apparently it was knock-off mascots just dancing away?!?? We still don’t know what the hell was happening there.</p>
<figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/knock-off-mascots-at-michael.fmzRP3Vz.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/knock-off-mascots-at-michael.fmzRP3Vz.webp" data-pswp-width="4080" data-pswp-height="3072" data-pswp-caption="For how random this was, the mascots were having fun with it." aria-label="A slightly blurry zoomed in photo of the front of a movie theater, showing mascots in costumes: Hello Kitty, Mickey Mouse and a nondescript mouse I cannot identify immediately." data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/knock-off-mascots-at-michael.fmzRP3Vz.webp" alt="A slightly blurry zoomed in photo of the front of a movie theater, showing mascots in costumes: Hello Kitty, Mickey Mouse and a nondescript mouse I cannot identify immediately." loading="lazy" decoding="async" width="4080" height="3072" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">For how random this was, the mascots were having fun with it.</figcaption></figure>
<h1 id="gaming">Gaming</h1>
<p>Big week of games news for me, Hades 2 got a couple of updates adding post end-game content that I checked out and loved being terrible at.</p>
<p>Marvel Rivals got another limited time zombies event which I will be sinking a lot of hours into, like last time. It will also probably be a solo affair, again like last time. Had a chance to play some Rivals ranked with <a href="https://www.sasikanth.dev/">Sasikanth</a> which validated our theory that the correct time to win games are the weeknights when the proverbial electricians and plumbers are playing (people who are too employed to be great at the game, to put it more directly).</p>
<h1 id="food">Food</h1>
<p>We didn’t do anything particularly new this week with food. We had an early mishap with a veggie pulav that we both put too much spice into and also failed to cook that spice out so it was borderline inedible. Yash and I found ourselves quietly eating mangoes right after to soothe our burning palates.</p>
<figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/dangerous-pulav.C7iqMW9y.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/dangerous-pulav.C7iqMW9y.webp" data-pswp-width="4080" data-pswp-height="3072" data-pswp-caption="This thing was genuinely close to being radioactive." aria-label="A bowl containing pulav, an Indian rice dish that's typically pressure cooked rice with misc veggies and spices. Ours doesn't look particularly different from what you'd expect, but the flavor was abysmal. We fucked up big time here." data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/dangerous-pulav.C7iqMW9y.webp" alt="A bowl containing pulav, an Indian rice dish that's typically pressure cooked rice with misc veggies and spices. Ours doesn't look particularly different from what you'd expect, but the flavor was abysmal. We fucked up big time here." loading="lazy" decoding="async" width="4080" height="3072" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">This thing was genuinely close to being radioactive.</figcaption></figure>
<p>On Friday I only had myself to make dinner for so I went for a classic nacho dip/salad thing which was incredibly easy to put together and tasted delicious, validated by resident protein maxxer Yash.</p>
<figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/nacho-dip-at-home.C8w95JLZ.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/nacho-dip-at-home.C8w95JLZ.webp" data-pswp-width="3072" data-pswp-height="4080" data-pswp-caption="I could eat this every day and not tire of it, veggies in a bowl is a pretty versatile canvas." aria-label="A bean nacho dip with red beans, cucumbers, onions, tomatoes, and corn; all wrapped up in a dressing made with a some jarred salsa, olive oil, apple cider vinegar, onion powder, and a bit of hot sauce." data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/nacho-dip-at-home.C8w95JLZ.webp" alt="A bean nacho dip with red beans, cucumbers, onions, tomatoes, and corn; all wrapped up in a dressing made with a some jarred salsa, olive oil, apple cider vinegar, onion powder, and a bit of hot sauce." loading="lazy" decoding="async" width="3072" height="4080" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">I could eat this every day and not tire of it, veggies in a bowl is a pretty versatile canvas.</figcaption></figure>]]></content:encoded>
    </item>
    <item>
      <title>Weeknotes: Week #16 (2026)</title>
      <link>https://msfjarvis.dev/posts/weeknotes-week-16-2026/</link>
      <guid>https://msfjarvis.dev/posts/weeknotes-week-16-2026/</guid>
      <description>Big week for watching movies and being outdoors!</description>
      <pubDate>Sun, 19 Apr 2026 13:42:00 GMT</pubDate>
      <content:encoded><![CDATA[<p>This week was a bit of a roller coaster, lots of fun and not-so-fun things happened but I’ve come out of the other end feeling good and that’s all that really matters.</p>
<h1 id="absolute-cinema">Absolute Cinema</h1>
<p><a href="https://yashgarg.dev/">Yash</a> and I finally managed to grab tickets for an IMAX screening of <a href="https://www.imdb.com/title/tt12042730/">Project Hail Mary</a> for Monday morning. Taking the half day off work felt worthwhile for how long we’ve had to wait for this, and by sheer coincidence I ran into <a href="https://www.rahulgonsalves.com/">Rahul Gonsalves</a> at the theatre who also agreed that Monday mornings are the best show times :P</p>
<p>On Thursday I watched <a href="https://www.imdb.com/title/tt39139925/">Dhurandhar 2</a> with Yash and <a href="https://github.com/swapnilmadavi">Swapnil</a> which was honestly quite a letdown. The first movie was <em>obviously</em> military and BJP propaganda, but the second one in so in-your-face about it that it really dampened my enjoyment of it. Since they were shot together, my complaints about the <a href="https://msfjarvis.dev/posts/weeknotes-week-51-2025/#:~:text=I%20watched%20Dhurandhar">first movie’s CGI</a> also apply to this one. The shock factor of the incredibly gory movie constantly getting interrupted by god awful CGI that fully breaks your immersion makes for a very lame viewing experience.</p>
<h1 id="personal-stuff">Personal stuff</h1>
<p>Not a lot of things happened since I was so busy hopping from one thing to the next.</p>
<p>Anunay and Yash had bought me a mouse pad for my birthday that arrived this week, it’s super cute and pretty high quality.</p>
<figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/mouse-mat.BIZBXVAF.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/mouse-mat.BIZBXVAF.webp" data-pswp-width="4080" data-pswp-height="3072" data-pswp-caption="I fear the day I spill anything on this beauty." aria-label="A cyberpunk style image of a girl with white hair and a can of paint in her hand. She has a lot of temporary tattoos all over her visible arm and a cute black cat reaching for the paint can. My mouse is resting next to her face." data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/mouse-mat.BIZBXVAF.webp" alt="A cyberpunk style image of a girl with white hair and a can of paint in her hand. She has a lot of temporary tattoos all over her visible arm and a cute black cat reaching for the paint can. My mouse is resting next to her face." loading="lazy" decoding="async" width="4080" height="3072" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">I fear the day I spill anything on this beauty.</figcaption></figure>
<p>Getting increasingly frustrated at <a href="https://opencode.ai">OpenCode</a> shipping showstopper bugs that go unfixed for weeks and months I decided to switch to using <a href="https://pi.dev">pi</a> as my coding agent of choice. For the uninitiated, it’s a very robust but minimal coding agent that is also at the heart of OpenClaw. It is designed to be extended by the very LLMs that the harness manages, and users are encouraged to build their own custom UIs, extensions, commands and what not on top of this. I have started my <a href="https://git.msfjarvis.dev/msfjarvis/my-pi">custom distribution of pi</a> where I’m mostly focusing to first implement features that I’ve come to rely on in OpenCode, then go from there as my imagination takes me.</p>
<h2 id="people">People</h2>
<p>The big highlight this week was RustIndia Conference on Saturday, which sadly overlapped with IndieWebClub so I had to ditch this week’s session :(</p>
<p>RustIndia was great, met a lot of people I’ve talked to online for years and generally had a pleasant time. Niko Matsakis’ <a href="https://nikomatsakis.github.io/rusts-big-moment-2026/">keynote</a> was very illuminating, he talked at length about Rust’s current limitations and the work they’re doing to address things not just with the language but at the ecosystem level itself. I’m excited to see how these things shake out over the next year or two!</p>
<p>There were a lot of quizzes and prizes going around at the stalls so I tried my hand at them but massively fumbled on the e6data booth manned by my friend <a href="https://github.com/feniljain">Fenil</a> by knowing enough Rust but being horrible at mathematics.</p>
<h1 id="work">Work</h1>
<p>As I mentioned <a href="https://msfjarvis.dev/posts/weeknotes-week-15-2026/">last week</a>, my manager <a href="https://rohanarthur.com/">Rohan Arthur</a> is leaving the company which has, to put it mildly, caused some problems. I’ve spent the week figuring things out with him, planning next steps, and talking to our director <a href="https://www.linkedin.com/in/willigeiger">Willi</a> about the future of my team. Obviously can’t divulge much here, but things are looking as good as they can be in the circumstances. Rohan prepared us well in making himself redundant in our day to day work but it’s still quite a sad transition to navigate.</p>
<h1 id="games">Games</h1>
<p>With how much I was out gaming ended up being rather sparse, but I managed to eke out a Platinum rank up in Marvel Rivals with <a href="https://github.com/akhilnarang">Akhil</a> right before the season ended. I also tried <a href="https://www.graveyardkeeper.com/">Graveyard Keeper</a> since it was free for a while on Steam but it doesn’t seem like something I’ll go back to. Genuinely just feels like a morbid Stardew Valley and I didn’t quite gel with that game either.</p>
<h1 id="food">Food</h1>
<h2 id="at-home">At home</h2>
<p><a href="https://github.com/anunaym14">Anunay</a> is still in Bengaluru which means we’ve been away more nights than not doing things (what can I say he’s just a fun loving guy), so we’ve only had one night where we really got to cook anything. <a href="https://yashgarg.dev/">Yash</a> pitched that we make a chickpea salad and so that’s what we did. During cooking this somehow became an exercise in how much protein one can fit into a single salad, and that’s how we have this abomination of chicken, chickpeas, cottage cheese, and broccoli.</p>
<figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/how-much-protein.CIGVpRmq.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/how-much-protein.CIGVpRmq.webp" data-pswp-width="4080" data-pswp-height="3072" data-pswp-caption="How much protein could this bowl possibly contain?" aria-label="A chickpea salad bowl containing strips of air fried chicken, some impeccably blanched broccoli, cubes of cottage cheese, corn, onions, and tomatoes. All of this is coated in a greek yogurt based sauce which had some random spices added to it." data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/how-much-protein.CIGVpRmq.webp" alt="A chickpea salad bowl containing strips of air fried chicken, some impeccably blanched broccoli, cubes of cottage cheese, corn, onions, and tomatoes. All of this is coated in a greek yogurt based sauce which had some random spices added to it." loading="lazy" decoding="async" width="4080" height="3072" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">How much protein could this bowl possibly contain?</figcaption></figure>
<h2 id="away-from-home">Away from home</h2>
<p>Got to try lots of fun stuff at great restaurants during the week! On Tuesday we were at Burma Burma:</p>
<figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/burma-burma-lotus-biscoff-boba-tea.D8E5Z0op.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/burma-burma-lotus-biscoff-boba-tea.D8E5Z0op.webp" data-pswp-width="3072" data-pswp-height="4080" data-pswp-caption="Lotus Biscoff Boba Tea, still as good as ever." aria-label="A glass of boba tea with a thick straw in it. The black boba is visible near the bottom, and the drink is a very faded cream color with some biscoff biscuit crumbs on top as a garnish." data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/burma-burma-lotus-biscoff-boba-tea.D8E5Z0op.webp" alt="A glass of boba tea with a thick straw in it. The black boba is visible near the bottom, and the drink is a very faded cream color with some biscoff biscuit crumbs on top as a garnish." loading="lazy" decoding="async" width="3072" height="4080" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">Lotus Biscoff Boba Tea, still as good as ever.</figcaption></figure>
<figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/burma-burma-hummus-thing.a6n8e9TE.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/burma-burma-hummus-thing.a6n8e9TE.webp" data-pswp-width="4080" data-pswp-height="3072" data-pswp-caption="Some hummus thing that I fully forgot the name of, all I know is that it was a banger." aria-label="A basket of pita bread next to a plate of a bowl of hummus that has some big chillies and a red colored seasoning for garnish." data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/burma-burma-hummus-thing.a6n8e9TE.webp" alt="A basket of pita bread next to a plate of a bowl of hummus that has some big chillies and a red colored seasoning for garnish." loading="lazy" decoding="async" width="4080" height="3072" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">Some hummus thing that I fully forgot the name of, all I know is that it was a banger.</figcaption></figure>
<figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/burma-burma-papaya-thing.LrRdIT52.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/burma-burma-papaya-thing.LrRdIT52.webp" data-pswp-width="4080" data-pswp-height="3072" data-pswp-caption="Another papaya thing that I can't remember the name of." aria-label="A plate of small poppers that have a pile of cured papaya shreds on top." data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/burma-burma-papaya-thing.LrRdIT52.webp" alt="A plate of small poppers that have a pile of cured papaya shreds on top." loading="lazy" decoding="async" width="4080" height="3072" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">Another papaya thing that I can't remember the name of.</figcaption></figure>
<figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/burma-burma-khowsuey.BA6kiyXX.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/burma-burma-khowsuey.BA6kiyXX.webp" data-pswp-width="4080" data-pswp-height="3072" data-pswp-caption="A bowl of khowsuey which again I have forgotten the exact name of." aria-label="A bowl of khowsuey next to a condiments platter. The gravy is a bright yellowish orange in color and has regular flour noodles in it." data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/burma-burma-khowsuey.BA6kiyXX.webp" alt="A bowl of khowsuey next to a condiments platter. The gravy is a bright yellowish orange in color and has regular flour noodles in it." loading="lazy" decoding="async" width="4080" height="3072" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">A bowl of khowsuey which again I have forgotten the exact name of.</figcaption></figure>
<p>On Wednesday we had an impromptu company dinner at Amicii, where we mostly chatted around and picked at some starters.</p>
<figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/amicii-pepperoni-pizza-thing.B33oFTTs.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/amicii-pepperoni-pizza-thing.B33oFTTs.webp" data-pswp-width="4080" data-pswp-height="3072" data-pswp-caption="This pizza was delicious." aria-label="A regular pepperoni pizza with a ball of burrata cheese in the middle." data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/amicii-pepperoni-pizza-thing.B33oFTTs.webp" alt="A regular pepperoni pizza with a ball of burrata cheese in the middle." loading="lazy" decoding="async" width="4080" height="3072" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">This pizza was delicious.</figcaption></figure>]]></content:encoded>
    </item>
    <item>
      <title>Weeknotes: Week #15 (2026)</title>
      <link>https://msfjarvis.dev/posts/weeknotes-week-15-2026/</link>
      <guid>https://msfjarvis.dev/posts/weeknotes-week-15-2026/</guid>
      <description>A shockingly eventful week that I was not quite prepared for</description>
      <pubDate>Sun, 12 Apr 2026 15:59:00 GMT</pubDate>
      <content:encoded><![CDATA[<p>It was my birthday this week! I was expecting the weekend to be a little chaotic but my whole week ended up being crazy.</p>
<h1 id="life-and-people">Life and People</h1>
<p><a href="https://github.com/feniljain">Fenil</a> and <a href="https://github.com/anunaym14">Anunay</a> dropped by the office one day to meet with their ex-colleagues (they were both at Dyte for a while). Had a small group hanging out, was a fun time catching up with everyone.</p>
<p><a href="https://yashgarg.dev/">Yash</a> and I met with Anunay a few more times throughout the week, had a work-from-cafe day on Friday. We were at <a href="https://www.concu.in/location/849622919">Concu</a>, which was pleasant other than an obnoxiously loud table that was annoying everyone for half an hour or so.</p>
<p>On Saturday (my birthday) we made the rather painful trip to Meco Kartopia for go karting. I wasn’t originally a big fan but managed to get the hang of it. The worst part of it is definitely the 1 to 1.5 hour long car trip to get to the place, and the lack of a cafeteria. I don’t think I’ll ever go back there, but am open to trying it again somewhere that is a more reasonable distance from me. We tried doing dinner at some of the upscale establishments like Burma Burma, but it being a weekend they were all fully occupied. I ended up just pushing through Yash’s suggestion of <a href="https://www.zomato.com/bangalore/element3-indiranagar-bangalore">Element 3</a>, a pure vegetarian place Yash and I have been to many times and everyone loved the food there. A lot of food related escapades were had, which as usual you can head on over to <a href="https://yashgarg.dev/weekly-notes-15-2026/">Yash’s weeknotes</a> to take a peek at.</p>
<h1 id="work">Work</h1>
<p>My manager <a href="https://rohanarthur.com/">Rohan Arthur</a> informed us that he’s leaving at the end of this month which was a bit of a shock. It’s a massive bummer to have such little time with one of the few leaders who have measurably improved me as an engineer and a person but I’ll focus on making the best of the time we have left. Still feels a bit unreal.</p>
<h1 id="games">Games</h1>
<p>I continued playing through bits and pieces of <a href="https://store.steampowered.com/app/3081840/Chrono_Gear_Warden_of_Time/">Chrono Gear</a> when I could find the time. <a href="https://github.com/akhilnarang">Akhil</a> pulled me back into the dungeons of <a href="https://www.marvelrivals.com/">Marvel Rivals</a> ranked queue where we managed to make a good run at our placement games. As of writing we’ve climbed up from Gold 3 to Gold 1, in touching distance of Platinum 3.</p>
<details><summary>Somewhat frustrating health stuff that you probably don’t care for</summary><h1 id="health">Health</h1><p>The doctor I was seeing for my flu had asked me to come in for another consultation to help me with my weight and sleeping, and I decided to go. Historically doctors have pinned that as a personal failing instead of actually giving any helpful advice so I was willing to give someone earnest a shot. After I got blood tests and a sleep study (<a href="https://www.sleepapnea.org/diagnosis/sleep-studies/">polysomnography</a>) done, the doctor told me to get a C-PAP machine that was gonna set me back by 80K INR and to start on the equivalent of Ozempic next month. Wasn’t really a fan of either options there so I took that prescription to another doctor who had a significantly better take on the issue, and gave me helpful tips on lifestyle changes I could make. I’ve started working on meal plans and such, and hope to start on their suggested plan in a week or so.</p><p>I also got diagnosed with an extremely severe Vitamin D deficiency and had to get a shot for it, that one hurt. Intramuscular injections are no joke!</p></details>]]></content:encoded>
    </item>
    <item>
      <title>Weeknotes: Week #14 (2026)</title>
      <link>https://msfjarvis.dev/posts/weeknotes-week-14-2026/</link>
      <guid>https://msfjarvis.dev/posts/weeknotes-week-14-2026/</guid>
      <description>Finally over my sickness!</description>
      <pubDate>Sun, 05 Apr 2026 18:06:00 GMT</pubDate>
      <content:encoded><![CDATA[<p>Barely managing to squeeze this in thanks to a super packed Sunday.</p>
<h1 id="sickness-update">Sickness Update</h1>
<p>I finally got through the rough week of dealing with the Flu, and used that down time to catch up with TV shows I was behind on. Finished watching <a href="https://www.imdb.com/title/tt27444205">Paradise</a>, and caught up with <a href="https://www.imdb.com/title/tt18923754">Daredevil: Born Again</a> and <a href="https://www.imdb.com/title/tt6741278/">Invincible</a>. I also started reading <a href="https://www.couldshouldmightdont.com/">Could Should Might Don’t</a>, my first non-fiction read in a long time. So far I’m not completely sold on the whole premise, but the topics the author chooses to break down are well presented.</p>
<h1 id="games">Games!</h1>
<p>I’ve also picked up some of my half-completed games while I was sick. I’m almost done beating <a href="https://store.steampowered.com/app/3081840/Chrono_Gear_Warden_of_Time/">Chrono Gear: Warden of Time</a>. I also resumed playing <a href="https://store.steampowered.com/app/2420110/Horizon_Forbidden_West_Complete_Edition/">Horizon Forbidden West</a> but the clunky combat pissed me off again. I love the story too much to let this detract from my enjoyment of it, so I opted to cheese my way using a trainer mod for a boss that was genuinely anti-fun. I’m not no-clipping around the place, just using invulnerability to get past a fight that feels more annoying than skill based. I’ve only used it once so far, maybe in the future I’ll get too lazy and start using it for all bosses, who’s to say. Either way I’d rather enjoy the game this way than not play it at all.</p>
<h1 id="writing">Writing</h1>
<p>In my Flu-stricken stupor I completely forgot about <a href="https://aprilcools.club">April Cools</a> this year, and had to scramble at the last minute to put a <a href="https://msfjarvis.dev/posts/i-guess-i-cook-now/">post together</a>. Admittedly, I tried to cheat my way out of the spirit of the thing by having an LLM convert my rough outline to a post but I found the writing to be so genuinely sickening to read that I threw it all away and just tanked the effort of writing through a fever to get this out.</p>
<h1 id="work-and-career">Work and Career</h1>
<p>I got the increment I was expecting at work, which was nice. I took most days off while recovering from the Flu so not a whole lot got done, but I helped grease things along wherever I could manage to spare some time to review the documentation changes we were working on.</p>
<h1 id="miscellaneous-tech-things">Miscellaneous Tech Things</h1>
<p>I’m planning to redo my room layout to open up some space in the center following Yash’s example, so I had to get a multi-plug extension for my extension so I could neatly tuck away all the power cables that go into my — extension-ception. I didn’t know <a href="https://www.amazon.in/Eveready-Everprotect-Multiplug-i4/dp/B0CQPDT6RT?nsdOptOutParam=true">this</a> was a thing!</p>
<p>I also worked a bit on <a href="https://github.com/msfjarvis/compose-lobsters">Claw</a>, my Android app for <a href="https://lobste.rs">Lobsters</a>. I removed a data migration path that had done its job in the past two releases, and added the very initial bits of login support in the app. Eventually the goal is for the app to be able to let you upvote and save posts directly to Lobsters instead of just the local store, and to maybe let you reply to comments/posts if I take on the daunting task of handling WYSIWYG Markdown input.</p>
<h1 id="people">People!</h1>
<p>The weekend was packed with a lot of socializing. <a href="https://blr.indiewebclub.org">IndieWebClub</a> on Saturday was a discussion focused session and we traded a lot of hot takes about editors, LLMs, writing tools and everything in between. It was a great time! Sadly I was not able to finish my writing draft within the allotted time, but I hope to have it out by next week.</p>
<p>On Sunday Yash and I met up with <a href="https://github.com/anunaym14">Anunay</a> and a friend of his for lunch at <a href="https://www.instagram.com/23rdstreet_pizza/">23rd Street Pizza</a> which was rather underwhelming. We meandered around a fair bit after that for some dessert and much needed steps, then got back to our place to chill for a bit. Aforementioned friend introduced us to <a href="https://boardgamegeek.com/boardgame/420087/flip-7">Flip 7</a>, which was a hilarious time with just 4 players and we fully lost track of time until it had been 3 hours. This game made me fully understand how gambling addictions come to be. The temptation to got for just one more flip is too damn high!</p>
<h1 id="the-food-section">The food section</h1>
<p>For this week I will choose to be lazy and delegate the responsibility for capturing our week’s food to my roommate <a href="https://yashgarg.dev/">Yash</a>, who is far more diligent about this than I can ever hope to be. Check out his <a href="https://yashgarg.dev/weekly-notes-14-2026/">week note</a>!</p>]]></content:encoded>
    </item>
    <item>
      <title>I guess I cook now</title>
      <link>https://msfjarvis.dev/posts/i-guess-i-cook-now/</link>
      <guid>https://msfjarvis.dev/posts/i-guess-i-cook-now/</guid>
      <description>Learning to cook for myself went from necessity to hobby almost overnight</description>
      <pubDate>Wed, 01 Apr 2026 09:26:00 GMT</pubDate>
      <content:encoded><![CDATA[<blockquote>
<p>This is a post for <a href="https://www.aprilcools.club/">April Cools</a>, encouraging people to break out of their standard fare and write something new.</p>
</blockquote>
<p>For the longest time I’ve not had a particularly great inclination for cooking. I had lived at or very close to my home for practically all my life, I was pampered (spoiled) and was never really encouraged to pick it up. That had to change when I moved to Bengaluru as part of being acqui-hired by <a href="https://cloudflare.com">Cloudflare</a> in early 2025.</p>
<p>I moved into a 2 bedroom apartment with old friend and current colleague <a href="https://yashgarg.dev/">Yash</a>, and we decided to get a home cook. Having been in a hotel for a month or so while house-hunting we had landed pretty squarely on not wanting to be dependent on food delivery. Through some neighbourly drama that is not worth unpacking, we had to fire our home cook pretty quickly and we found ourselves in the kitchen with a strong desire to not starve. We started with the basics: simple curries with chapattis. Chickpeas, black beans, paneer (cottage cheese), and potatoes were pretty common.</p>
<p>The progress was honestly pretty slow. We started with using precooked chapattis sold in the supermarket for a few weeks before shame really set in. We bought a food processor (neither of us had the temperament for kneading dough by hand), and started making our own chapattis at home. We made a very early experimental foray into a <a href="https://en.wikipedia.org/wiki/Taro">Taro root</a> (called “Arbi” in Hindi) based curry, a favorite of Yash’, which was an absolute nightmare to prepare and really killed the vibe on gastronomical experimentation for a while. Eventually we started doing pastas, fried rice, <a href="https://en.wikipedia.org/wiki/Pilaf">pulao</a>, even a chicken curry where we learned the hard way why you’re supposed to thaw chicken 6 hours in advance (it was edible).</p>
<p>My mother, who had kept me out of the kitchen all this time, found herself quite concerned for the well being of her pampered buffoon. For maybe 6 months I had to send a picture of my dinner every night so she could rest assured that I had a home cooked meal and wasn’t pounding McChickens three times a day. My photo gallery in the past year is probably 40% dinner plates by count. I’m not gonna pretend I took all of those to satisfy her and not to gloat to myself, but she definitely is the reason it started :)</p>
<p>I was already part of the air fryer cult back at home, so when my friend <a href="https://subhrajyoti.me/">Subhrajyoti</a> was moving out to the Netherlands I happily snapped up his air fryer. This unlocked a whole new dimension in the kitchen, and since then we haven’t gone a week without some type of frozen food in our freezer. The convenience is simply unbeatable, though Yash has not been a very big user of it so far. Some day he’ll see the light.</p>
<p>Yash and I had been big fans of a hummus bowl sold by a food delivery service that was our staple breakfast at office for a while, and when they discontinued it I decided to finally look into how much effort it was to just make hummus myself. Turns out, not much! Hummus is just cooked chickpeas blended into a paste with maybe 5 ingredients added to it. I used the Christmas &lt;&gt; New Year’s week to try it out and ended up with a genuinely delicious batch.</p>
<figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/day-1-hummus.D1OZBhss.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/day-1-hummus.D1OZBhss.webp" data-pswp-width="3072" data-pswp-height="4080" data-pswp-caption="This was a bit of an arm workout not gonna lie" aria-label="A food processor with blended chickpeas inside it, and a spatula sitting a little to the left that has clearly been inside the food processor. You can still see a bunch of solid chickpeas that are yet to be grounded down, floating in a slightly off white paste of ground chickpeas." data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/day-1-hummus.D1OZBhss.webp" alt="A food processor with blended chickpeas inside it, and a spatula sitting a little to the left that has clearly been inside the food processor. You can still see a bunch of solid chickpeas that are yet to be grounded down, floating in a slightly off white paste of ground chickpeas." loading="lazy" decoding="async" width="3072" height="4080" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">This was a bit of an arm workout not gonna lie</figcaption></figure>
<figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/day-1-hummus-result.BspyosDK.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/day-1-hummus-result.BspyosDK.webp" data-pswp-width="3072" data-pswp-height="4080" data-pswp-caption="4/10 plating but 8/10 flavour, I'll take it." aria-label="A small metal plate with some hummus that I've done a poor job of garnishing with some olive oil, red chilli powder and cumin powder." data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/day-1-hummus-result.BspyosDK.webp" alt="A small metal plate with some hummus that I've done a poor job of garnishing with some olive oil, red chilli powder and cumin powder." loading="lazy" decoding="async" width="3072" height="4080" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">4/10 plating but 8/10 flavour, I'll take it.</figcaption></figure>
<p>The success of this experiment made me try this 3 more times to increasing levels of success, and also make my own falafels a couple of times. Still haven’t nailed that one, but got very close the last time!</p>
<p>Yash also got us into making burritos ourselves, a repeat of the story with hummus but more driven by California Burrito being expensive rather than it disappearing altogether. It makes for something we can prep easily, lasts a couple of days, is quite healthy and very filling. Some highlights from the first burrito misadventures, before I resigned to just doing burrito bowls and skipping the embarrassment of not being able to wrap a tortilla very well.</p>
<figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/the-birth-of-a-burrito.D3510n2H.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/the-birth-of-a-burrito.D3510n2H.webp" data-pswp-width="4080" data-pswp-height="3072" data-pswp-caption="The internet told me this is how you make a burrito with two wraps." aria-label="Two tortillas on a metal plate, overlapping around 30% with a big pile of fillings on top. The internet told me this is the right way to make a burrito with two wraps." data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/the-birth-of-a-burrito.D3510n2H.webp" alt="Two tortillas on a metal plate, overlapping around 30% with a big pile of fillings on top. The internet told me this is the right way to make a burrito with two wraps." loading="lazy" decoding="async" width="4080" height="3072" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">The internet told me this is how you make a burrito with two wraps.</figcaption></figure>
<figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/burrito-pan.Ck-DSyDc.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/burrito-pan.Ck-DSyDc.webp" data-pswp-width="3072" data-pswp-height="4080" data-pswp-caption="One of the rare few burritos that stayed in one piece when we grilled them." aria-label="A burrito being lightly grilled on a pan. Shocking it has not split open its guts all over the place." data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/burrito-pan.Ck-DSyDc.webp" alt="A burrito being lightly grilled on a pan. Shocking it has not split open its guts all over the place." loading="lazy" decoding="async" width="3072" height="4080" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">One of the rare few burritos that stayed in one piece when we grilled them.</figcaption></figure>
<p>I bought a veggie chopper that lets me just make big piles of nutritious salads, topped with some air fried chicken sausages or whatever and just have an exceptionally filling dinner in under 20 minutes. Completely game changer for the days when I’m feeling lazy, has helped immensely with my struggle to lose weight.</p>
<hr>
<p>When I started going to the <a href="https://blr.indiewebclub.org/">IndieWebClub</a> events late last year, I picked up the habit of publishing <a href="https://msfjarvis.dev/categories/weeknotes/">weeknotes</a>. These have gradually started featuring food more prominently as I’ve gotten comfortable with simply trying things in the kitchen. Being able to navigate the kitchen with confidence has given me so much freedom that I previously thought to be out of my reach. Excited to see what other cuisines I’ll pick up this year!</p>]]></content:encoded>
    </item>
    <item>
      <title>Weeknotes: Week #13 (2026)</title>
      <link>https://msfjarvis.dev/posts/weeknotes-week-13-2026/</link>
      <guid>https://msfjarvis.dev/posts/weeknotes-week-13-2026/</guid>
      <description>A Flu is no joke...</description>
      <pubDate>Sun, 29 Mar 2026 14:42:00 GMT</pubDate>
      <content:encoded><![CDATA[<p>This week has been a bit of a roller coaster, was having a pretty normal week then got hit with a <em>nasty</em> Flu to cap it off in the worst way possible.</p>
<h3 id="boring-tech-stuff">Boring tech stuff</h3>
<p>I’ve been trying out <a href="https://github.com/obra/superpowers">superpowers</a>, which takes gaslighting-via-markdown (otherwise known as Agent Skills) to a logical extreme, forcing LLMs to behave like a very disciplined senior engineer.</p>
<p>I used this to change a longstanding misfeature in Claw that caused it to mark comments as unread when you first view a post, which is quite redundant. superpowers spent a solid hour on this, during which I also manually reviewed a spec and an implementation plan, but the <a href="https://github.com/msfjarvis/compose-lobsters/commit/83db9bb8a8f7f1ae7dc3df305ab599f15fa7d512">result</a> is quite exhaustive and has robust test coverage which I definitely wouldn’t have bothered with.</p>
<p>I also let it loose on our work codebase by feeding it a list of prior issues we had faced in a particularly brittle component and had it refactor the code to follow the popular <a href="https://testing.googleblog.com/2025/10/simplify-your-code-functional-core.html">“functional core, imperative shell”</a> pattern and then unit test the core to prevent regressions along the bug categories we’ve been chasing for quite a while. That refactor ran even longer, but ultimately the result was again rather impressive. LLMs are (for the most part) really good at fixing tests, and superpowers forces the LLM to follow a red-green-refactor cycle for all changes which means it’s always trying to fix tests.</p>
<p>I finally finished running the full gauntlet of <a href="https://webmention.rocks">webmention.rocks</a> tests against my <a href="https://git.msfjarvis.dev/msfjarvis/acceptable-vibes/src/branch/main/webmentions-server">WebMentions server</a>. It exposed a few gaps in the implementation but I’m at 100% compliance now, the only remaining issue is now with my site not returning HTTP 410 for deleted posts because I don’t really know how to make it happen.</p>
<h3 id="boring-not-tech-stuff">Boring not-tech stuff</h3>
<p>I finished reading <a href="https://bookwyrm.social/book/102060/s/project-hail-mary">Project Hail Mary</a>, super good read. I hadn’t realized Andy Weir also wrote The Martian! The book was great, the movie’s promised to be even better but good lord has it been hard to find a way to watch it with the lack of IMAX screens.</p>
<p>The keyboard I had ordered last week arrived, completing the new set :)</p>
<figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/keyboard-and-mouse.DOzaS--P.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/keyboard-and-mouse.DOzaS--P.webp" data-pswp-width="4080" data-pswp-height="3072" data-pswp-caption="The white mouse honestly works better than the lavender" aria-label="The new keyboard and mouse on top of a wooden particle board desk. The keyboard has an aluminum frame coated in blue, with a mix of blue, purple and white keys with white being the most common one. The mouse rests on a cheap RedGear mousepad." data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/keyboard-and-mouse.DOzaS--P.webp" alt="The new keyboard and mouse on top of a wooden particle board desk. The keyboard has an aluminum frame coated in blue, with a mix of blue, purple and white keys with white being the most common one. The mouse rests on a cheap RedGear mousepad." loading="lazy" decoding="async" width="4080" height="3072" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">The white mouse honestly works better than the lavender</figcaption></figure>
<p>I hadn’t spotted our Metro station cat in a while, so it was nice to come across it again.</p>
<figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/orange-loaf.CSe5CmjY.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/orange-loaf.CSe5CmjY.webp" data-pswp-width="3072" data-pswp-height="4080" data-pswp-caption="Angy loaf" aria-label="A ginger cat loafing in the middle of two bar stools." data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/orange-loaf.CSe5CmjY.webp" alt="A ginger cat loafing in the middle of two bar stools." loading="lazy" decoding="async" width="3072" height="4080" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">Angy loaf</figcaption></figure>
<h3 id="health-woes">Health woes</h3>
<p>I caught a fever on Thursday at the office which was starting to feel concerning right away, and by night had gotten bad enough that I had to arrange to see a doctor in the morning. Got diagnosed with a Flu and got a big dose of medicines to work through the weekend and see the doctor again on Monday. Was not expecting the throat problems, even my damn uvula had swollen and I could barely drink or breath. Super rough 3 days so far, the fever’s settled down now but I still have a very sore mouth and have trouble eating and swallowing. <em>Pain</em></p>
<h3 id="and-finally-the-food">And finally, the food</h3>
<p>Before I got absolutely mauled by the Flu I did do some cooking, which mostly was burrito prep that lasted us two days.</p>
<figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/burrito-bowl-v1.DmUyeqDC.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/burrito-bowl-v1.DmUyeqDC.webp" data-pswp-width="4080" data-pswp-height="3072" data-pswp-caption="I feel burrito bowls are kind of underrated" aria-label="A typical burrito bowl with rice, corn, lettuce, beans, diced jalapenos and some condiments." data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/burrito-bowl-v1.DmUyeqDC.webp" alt="A typical burrito bowl with rice, corn, lettuce, beans, diced jalapenos and some condiments." loading="lazy" decoding="async" width="4080" height="3072" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">I feel burrito bowls are kind of underrated</figcaption></figure>
<p>I had some chicken breasts sitting in the freezer that I wanted to finish off, so I used some of the rice from the large batch we made for the burrito bowl meal prep and made a basic tomato and cream curry for the chicken which came out pretty delicious for being basically 20 minutes of work</p>
<figure data-image-modal-root="" data-astro-cid-xekddyko=""><a class="pswp-gallery-item image-modal__trigger" href="https://msfjarvis.dev/_astro/chicken-curry.D1dPL1k4.webp" data-pswp-light-src="https://msfjarvis.dev/_astro/chicken-curry.D1dPL1k4.webp" data-pswp-width="4080" data-pswp-height="3072" data-pswp-caption="Scrumptious and filling. This cooking shit is easy :P" aria-label="A plate of two chicken breasts and some rice with gravy over it. The gravy is reddish-orange in color due to the tomatoes, turmeric and heavy cream coming together. There are also bits of onion visible in the gravy." data-astro-cid-xekddyko=""><span class="image-modal__media" data-astro-cid-xekddyko=""><picture data-astro-cid-xekddyko=""><img src="https://msfjarvis.dev/_astro/chicken-curry.D1dPL1k4.webp" alt="A plate of two chicken breasts and some rice with gravy over it. The gravy is reddish-orange in color due to the tomatoes, turmeric and heavy cream coming together. There are also bits of onion visible in the gravy." loading="lazy" decoding="async" width="4080" height="3072" data-astro-cid-xekddyko=""></picture><span class="image-modal__hint" aria-hidden="true" data-astro-cid-xekddyko="">Expand image</span></span></a><figcaption class="figure-caption" data-astro-cid-xekddyko="">Scrumptious and filling. This cooking shit is easy :P</figcaption></figure>
<hr>
<p>Hopefully the next weeknote will find me healthier :(</p>]]></content:encoded>
    </item>
  </channel>
</rss>