_content/blog: gopls scalability blog post

Add a new blog post describing some of the scalability work we've been
doing for gopls.

Change-Id: Id9a9a328b2e29499d635d36e96f753f9a4787978
Reviewed-on: https://go-review.googlesource.com/c/website/+/520995
Reviewed-by: Russ Cox <rsc@golang.org>
Reviewed-by: Alan Donovan <adonovan@google.com>
Auto-Submit: Robert Findley <rfindley@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
diff --git a/_content/blog/gopls-scalability.md b/_content/blog/gopls-scalability.md
new file mode 100644
index 0000000..2975dd5
--- /dev/null
+++ b/_content/blog/gopls-scalability.md
@@ -0,0 +1,241 @@
+---
+title: Scaling gopls for the growing Go ecosystem
+date: 2023-09-08
+by:
+- Robert Findley
+- Alan Donovan
+summary: As the Go ecosystem gets bigger, gopls must get smaller
+---
+
+<style type="text/css" scoped>
+  .chart {
+    width: 100%;
+  }
+  @media (prefers-color-scheme: dark) {
+    .chart {
+      border-radius: 8px;
+    }
+  }
+</style>
+
+Earlier this summer, the Go team released version [v0.12](https://go.dev/s/gopls-v0.12)
+of [gopls](https://pkg.go.dev/golang.org/x/tools/gopls),
+the [language server](https://microsoft.github.io/language-server-protocol/) for Go, featuring a rewrite of its core that allows
+it to scale to larger codebases.
+This is the culmination of a year-long effort,
+and we're excited to share our progress, as well as talk a little bit about
+the new architecture and what it means for the future of gopls.
+
+Since the v0.12 release, we've fine-tuned the new design,
+focusing on making interactive queries (such as auto-completion or finding
+references) as fast as they were with v0.11,
+despite holding so much less state in memory.
+If you haven't already, we hope you'll try it out:
+
+```
+$ go install golang.org/x/tools/gopls@latest
+```
+
+We'd love to hear about your experience with it via this [brief survey](https://google.qualtrics.com/jfe/form/SV_4SnGxpcSKN33WZw?s=blog).
+
+## Reductions in memory use and startup time {#results}
+
+Before we dive into the details, let's look at the results!
+The chart below shows the change to startup time and memory usage for 28
+of the most popular Go repositories on GitHub.
+These measurements were taken after opening a randomly selected Go file
+and waiting for gopls to fully load its state,
+and since we assume that the initial indexing is amortized over many editing sessions,
+we take these measurements the _second_ time we open the file.
+
+<div class="image">
+<img src="gopls-scalability/performance-improvements.svg" alt="Relative savings
+in memory and startup time" class="chart"/>
+</div>
+
+Across these repos, the savings average around 75%,
+but memory reductions are non-linear:
+as projects get larger, so does the relative decrease in memory usage.
+We'll explain this in more detail below.
+
+## Gopls and the evolving Go ecosystem {#background}
+
+Gopls provides language-agnostic editors with IDE-like features such as auto-completion,
+formatting, cross-references, and refactoring.
+Since its beginnings in 2018, gopls has consolidated many disparate command-line
+tools such as [guru](https://pkg.go.dev/golang.org/x/tools/cmd/guru),
+[gorename](https://pkg.go.dev/golang.org/x/tools/cmd/gorename),
+and [goimports](https://pkg.go.dev/golang.org/x/tools/cmd/goimports) and
+has become the [default backend for the VS Code Go extension](https://go.dev/blog/gopls-vscode-go)
+as well as many other editors and LSP plugins.
+Perhaps you’ve been using gopls through your editor without even knowing
+it---that’s the goal!
+
+Five years ago, gopls offered improved performance merely by maintaining a stateful session.
+Whereas older command-line tools had to start from scratch each time they executed,
+gopls could save intermediate results to significantly reduce latency.
+But all that state came with a cost, and over time we increasingly [heard from users](https://github.com/golang/go/issues?q=is%3Aissue+is%3Aclosed+in%3Atitle+gopls+memory)
+that gopls's high memory usage was barely tolerable.
+
+Meanwhile, the Go ecosystem was growing, with more code being written in
+larger repositories.
+[Go workspaces](https://go.dev/blog/get-familiar-with-workspaces) allowed
+developers to work on multiple modules simultaneously,
+and [containerized development](https://code.visualstudio.com/docs/devcontainers/containers)
+put language servers in increasingly resource-constrained environments.
+Codebases were getting larger, and developer environments were getting smaller.
+We needed to change the way gopls scaled in order to keep up.
+
+## Revisiting gopls's compiler origins {#origins}
+
+In many ways, gopls resembles a compiler:
+it has to read, parse, type-check, and analyze Go source files,
+for which it uses many of the compiler [building blocks](https://github.com/golang/example/tree/master/gotypes#introduction)
+provided by the [Go standard library](https://pkg.go.dev/go) and [golang.org/x/tools](https://pkg.go.dev/golang.org/x/tools) module.
+These building blocks use the technique of "symbolic programming":
+in a running compiler there is a single object or "symbol" that stands for
+each function such as `fmt.Println`.
+Any reference to a function is represented as a pointer to its symbol.
+To test whether two references are talking about the same symbol,
+you don’t need to think about names.
+You just compare pointers. A pointer is much smaller than a string,
+and pointer comparison is very cheap, so symbols are an efficient way to
+represent a structure as complex as a program.
+
+In order to respond quickly to requests, gopls v0.11 held all these symbols in memory,
+as though gopls was **compiling your entire program at once**.
+The result was a memory footprint that was proportional to and much larger
+than the source code being edited (for example,
+typed syntax trees are typically 30x larger than the source text!).
+<!-- deps(gopls) = 18.5MB source, 542MB RAM -->
+
+## Separate compilation {#separate-compilation}
+
+The designers of the first compilers in the 1950s quickly discovered the
+limits of monolithic compilation.
+Their solution was to break the program into units and compile each unit separately.
+Separate compilation makes it possible to build a program that does not fit in memory,
+by doing it in small pieces.
+In Go, the units are packages. Compilation of different packages cannot
+be completely separated:
+when compiling a package P, the compiler still needs information about what's
+provided by the packages that P imports.
+To arrange this, the Go build system compiles all of P's imported packages before P itself,
+and the Go compiler writes a compact summary of each package's exported API.
+The summaries of P's imported packages are provided as inputs to the compilation of P itself.
+
+Gopls v0.12 brings separate compilation to gopls,
+reusing the same package summary format used by the compiler.
+The idea is simple, but there’s subtlety in the details.
+We rewrote each algorithm that previously inspected the data structure representing the entire program,
+so that it now works on one package at a time and saves per-package results to files,
+just like a compiler emitting object code.
+For example, finding all references to a function used to be as easy as
+searching the program data structure for all occurrences of a particular pointer value.
+Now, when gopls processes each package, it must construct and save an index
+that associates each identifier location in the source code with the name
+of the symbol to which it refers.
+At query time, gopls loads and searches these indexes.
+Other global queries, such as "find implementations",
+use similar techniques.
+
+Like the `go build` command, gopls now uses a [file-based cache](https://cs.opensource.google/go/x/tools/+/master:gopls/internal/lsp/filecache/filecache.go;l=5;drc=6f567c8090cb88f13a71b19595bf88c6b27dbeed)
+store to record summaries of information computed from each package,
+including the type of each declaration, the index of cross-references,
+and the method set of each type.
+Since the cache is persisted across processes,
+you’ll notice that the second time you start gopls in your workspace,
+it becomes ready to serve much more quickly,
+and if you run two gopls instances, they work together synergistically.
+
+<div class="image">
+<img src="gopls-scalability/separate-compilation.png" alt="separate compilation" class="chart"/>
+</div>
+
+The result of this change is that gopls's memory use is proportional to
+the number of open packages and their direct imports.
+This is why we observe sublinear scaling in the chart above:
+as repositories get larger, the fraction of the project observed by any
+one open package gets smaller.
+
+## Fine-grained invalidation {#invalidation}
+
+When you make a change in one package, it's only necessary to recompile
+the packages that import that one,
+directly or indirectly.
+This idea is the basis of all incremental build systems since Make in the 1970s,
+and gopls has been using it since its inception.
+In effect, every keystroke in your LSP-enabled editor starts an incremental build!
+However, in a large project, indirect dependencies add up,
+making these incremental rebuilds too slow.
+It turns out that a lot of this work isn't strictly necessary,
+because most changes, such as adding a statement within an existing function,
+don't affect the import summaries.
+
+If you make a small change in one file, we have to recompile its package,
+but if the change does not affect the import summary, we don't have to compile any other packages.
+The effect of the change is "pruned". A change that does affect the import
+summary requires recompiling the packages that directly import that package,
+but most such changes won't affect the import summaries of _those_ packages,
+in which case the effect is still pruned and avoids recompiling indirect importers.
+Thanks to this pruning, it is rare for a change in a low-level package to
+require recompiling _all_ the packages that indirectly depend on that package.
+Pruned incremental rebuilds make the amount of work proportional to the
+scope of each change.
+This is not a new idea: it was introduced by [Vesta](https://www.hpl.hp.com/techreports/Compaq-DEC/SRC-RR-177.pdf)
+and also used in [`go build`](https://go.dev/doc/go1.10#build).
+
+The v0.12 release introduces a similar pruning technique to gopls,
+going one step further to implement a faster pruning heuristic based on syntactic analysis.
+By keeping a simplified graph of symbol references in memory,
+gopls can quickly determine whether a change in package `c` can possibly
+affect package `a` through a chain of references.
+
+<div class="image">
+<img src="gopls-scalability/precise-pruning.png" alt="fine-grained invalidation" class="chart"/>
+</div>
+
+In the example above, there's no chain of references from `a` to `c`,
+so a is not exposed to changes in c even though it indirectly depends on it.
+
+## New possibilities {#new-possibilities}
+
+While we're happy with the performance improvements we've achieved,
+we're also excited about several gopls features that are feasible now that
+gopls is no longer constrained by memory.
+
+The first is robust static analysis. Previously,
+our static analysis driver had to operate on gopls's in-memory representation of packages,
+so it couldn't analyze dependencies:
+doing so would pull in too much additional code.
+With that requirement removed, we were able to include a new analysis driver
+in gopls v0.12 that analyzes all dependencies,
+resulting in greater precision.
+For example, gopls now reports diagnostics for `Printf` formatting mistakes
+even in your user-defined wrappers around `fmt.Printf`.
+Notably, `go vet` has provided this level of precision for years,
+but gopls was unable to do this in real time after each edit. Now it can.
+
+The second is [simpler workspace configuration](https://go.dev/issue/57979)
+and [improved handling for build tags](https://go.dev/issue/29202).
+These two features both amount to gopls "doing the right thing" when you
+open any Go file on your machine,
+but both were infeasible without the optimization work because (for example)
+each build configuration multiplies the memory footprint!
+
+## Try it out! {#try}
+
+In addition to scalability and performance improvements,
+we've also fixed [numerous](https://github.com/golang/go/milestone/282?closed=1)
+[reported bugs](https://github.com/golang/go/milestone/318?closed=1) and
+many unreported ones that we discovered while improving test coverage during the transition.
+
+To install the latest gopls:
+
+```
+$ go install golang.org/x/tools/gopls@latest
+```
+
+Please try it out and fill out the [survey](https://google.qualtrics.com/jfe/form/SV_4SnGxpcSKN33WZw?s=blog) ---
+and if you should encounter a bug,
+[report it](https://github.com/golang/go/issues/new/choose) and we will fix it.
diff --git a/_content/blog/gopls-scalability/performance-improvements.svg b/_content/blog/gopls-scalability/performance-improvements.svg
new file mode 100644
index 0000000..70a9925
--- /dev/null
+++ b/_content/blog/gopls-scalability/performance-improvements.svg
@@ -0,0 +1 @@
+<svg version="1.1" viewBox="0.0 0.0 785.0 372.0" fill="none" stroke="none" stroke-linecap="square" stroke-miterlimit="10" width="785" height="372" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg"><path fill="#ffffff" d="M0 0L785.0 0L785.0 372.0L0 372.0L0 0Z" fill-rule="nonzero"/><path stroke="#cccccc" stroke-width="1.0" stroke-linecap="butt" d="M200.5 52.5L200.5 301.5" fill-rule="nonzero"/><path stroke="#cccccc" stroke-width="1.0" stroke-linecap="butt" d="M340.5 52.5L340.5 301.5" fill-rule="nonzero"/><path stroke="#cccccc" stroke-width="1.0" stroke-linecap="butt" d="M479.5 52.5L479.5 301.5" fill-rule="nonzero"/><path stroke="#cccccc" stroke-width="1.0" stroke-linecap="butt" d="M618.5 52.5L618.5 301.5" fill-rule="nonzero"/><path stroke="#cccccc" stroke-width="1.0" stroke-linecap="butt" d="M757.5 52.5L757.5 301.5" fill-rule="nonzero"/><path stroke="#cccccc" stroke-width="1.0" stroke-linecap="butt" d="M81.5 301.5L766.5 301.5" fill-rule="nonzero"/><path stroke="#cccccc" stroke-width="1.0" stroke-linecap="butt" d="M81.5 218.5L766.5 218.5" fill-rule="nonzero"/><path stroke="#cccccc" stroke-width="1.0" stroke-linecap="butt" d="M81.5 135.5L766.5 135.5" fill-rule="nonzero"/><path stroke="#cccccc" stroke-width="1.0" stroke-linecap="butt" d="M81.5 52.5L766.5 52.5" fill-rule="nonzero"/><path stroke="#000000" stroke-width="1.0" stroke-linecap="butt" d="M81.5 301.5L81.5 52.5" fill-rule="nonzero"/><clipPath id="id_0"><path d="M81.6 52.0L766.4 52.0L766.4 301.4L81.6 301.4L81.6 52.0Z" clip-rule="nonzero"/></clipPath><path fill="#4285f4" clip-path="url(#id_0)" d="M177.79846 133.78528L186.28375 133.78528L186.28375 142.27055L177.79846 142.27055Z" fill-rule="nonzero"/><path fill="#4285f4" clip-path="url(#id_0)" d="M218.07753 211.4665L226.5628 211.4665L226.5628 219.9518L218.07753 219.9518Z" fill-rule="nonzero"/><path fill="#4285f4" clip-path="url(#id_0)" d="M130.48172 189.56168L138.967 189.56168L138.967 198.04697L130.48172 198.04697Z" fill-rule="nonzero"/><path fill="#4285f4" clip-path="url(#id_0)" d="M179.9524 159.52734L188.43768 159.52734L188.43768 168.01262L179.9524 168.01262Z" fill-rule="nonzero"/><path fill="#4285f4" clip-path="url(#id_0)" d="M92.45668 206.21602L100.94196 206.21602L100.94196 214.7013L92.45668 214.7013Z" fill-rule="nonzero"/><path fill="#4285f4" clip-path="url(#id_0)" d="M284.71423 192.67227L293.19952 192.67227L293.19952 201.15755L284.71423 201.15755Z" fill-rule="nonzero"/><path fill="#4285f4" clip-path="url(#id_0)" d="M569.67395 96.91584L578.15924 96.91584L578.15924 105.40112L569.67395 105.40112Z" fill-rule="nonzero"/><path fill="#4285f4" clip-path="url(#id_0)" d="M124.26381 264.0674L132.7491 264.0674L132.7491 272.5527L124.26381 272.5527Z" fill-rule="nonzero"/><path fill="#4285f4" clip-path="url(#id_0)" d="M169.28018 149.78957L177.76547 149.78957L177.76547 158.27486L169.28018 158.27486Z" fill-rule="nonzero"/><path fill="#4285f4" clip-path="url(#id_0)" d="M156.67886 164.01591L165.16414 164.01591L165.16414 172.5012L156.67886 172.5012Z" fill-rule="nonzero"/><path fill="#4285f4" clip-path="url(#id_0)" d="M173.3674 221.44357L181.85269 221.44357L181.85269 229.92886L173.3674 229.92886Z" fill-rule="nonzero"/><path fill="#4285f4" clip-path="url(#id_0)" d="M93.75282 209.76382L102.238106 209.76382L102.238106 218.24911L93.75282 218.24911Z" fill-rule="nonzero"/><path fill="#4285f4" clip-path="url(#id_0)" d="M132.41528 210.70004L140.90057 210.70004L140.90057 219.18532L132.41528 219.18532Z" fill-rule="nonzero"/><path fill="#4285f4" clip-path="url(#id_0)" d="M430.0511 131.17065L438.53635 131.17065L438.53635 139.65594L430.0511 139.65594Z" fill-rule="nonzero"/><path fill="#4285f4" clip-path="url(#id_0)" d="M235.38234 150.63979L243.86761 150.63979L243.86761 159.12506L235.38234 159.12506Z" fill-rule="nonzero"/><path fill="#4285f4" clip-path="url(#id_0)" d="M87.07359 173.79742L95.558876 173.79742L95.558876 182.2827L87.07359 182.2827Z" fill-rule="nonzero"/><path fill="#4285f4" clip-path="url(#id_0)" d="M293.34055 133.95593L301.8258 133.95593L301.8258 142.44122L293.34055 142.44122Z" fill-rule="nonzero"/><path fill="#4285f4" clip-path="url(#id_0)" d="M516.6247 172.59712L525.11 172.59712L525.11 181.0824L516.6247 181.0824Z" fill-rule="nonzero"/><path fill="#4285f4" clip-path="url(#id_0)" d="M752.4411 88.444664L760.9264 88.444664L760.9264 96.92994L752.4411 96.92994Z" fill-rule="nonzero"/><path fill="#4285f4" clip-path="url(#id_0)" d="M143.5885 193.29527L152.07378 193.29527L152.07378 201.78055L143.5885 201.78055Z" fill-rule="nonzero"/><path fill="#4285f4" clip-path="url(#id_0)" d="M340.88336 124.41683L349.36862 124.41683L349.36862 132.90211L340.88336 132.90211Z" fill-rule="nonzero"/><path fill="#4285f4" clip-path="url(#id_0)" d="M91.85364 279.27695L100.33892 279.27695L100.33892 287.76224L91.85364 287.76224Z" fill-rule="nonzero"/><path fill="#4285f4" clip-path="url(#id_0)" d="M422.80667 103.2067L431.29193 103.2067L431.29193 111.691986L422.80667 111.691986Z" fill-rule="nonzero"/><path fill="#4285f4" clip-path="url(#id_0)" d="M299.61774 110.65293L308.10303 110.65293L308.10303 119.138214L299.61774 119.138214Z" fill-rule="nonzero"/><path fill="#4285f4" clip-path="url(#id_0)" d="M165.73753 136.75008L174.22282 136.75008L174.22282 145.23535L165.73753 145.23535Z" fill-rule="nonzero"/><path fill="#4285f4" clip-path="url(#id_0)" d="M382.41428 127.429016L390.89957 127.429016L390.89957 135.9143L382.41428 135.9143Z" fill-rule="nonzero"/><path fill="#4285f4" clip-path="url(#id_0)" d="M638.69147 149.05237L647.17676 149.05237L647.17676 157.53766L638.69147 157.53766Z" fill-rule="nonzero"/><path fill="#4285f4" clip-path="url(#id_0)" d="M149.13878 185.68297L157.62405 185.68297L157.62405 194.16824L149.13878 194.16824Z" fill-rule="nonzero"/><path fill="#ea4335" clip-path="url(#id_0)" d="M182.0411 112.32303L187.23726 121.32303L176.84496 121.32303Z" fill-rule="nonzero"/><path fill="#ea4335" clip-path="url(#id_0)" d="M222.32016 151.09099L227.51631 160.09099L217.12401 160.09099Z" fill-rule="nonzero"/><path fill="#ea4335" clip-path="url(#id_0)" d="M134.72437 182.892L139.92052 191.892L129.52821 191.892Z" fill-rule="nonzero"/><path fill="#ea4335" clip-path="url(#id_0)" d="M184.19504 176.11732L189.39119 185.11732L178.99889 185.11732Z" fill-rule="nonzero"/><path fill="#ea4335" clip-path="url(#id_0)" d="M96.69932 146.11504L101.89547 155.11504L91.50317 155.11504Z" fill-rule="nonzero"/><path fill="#ea4335" clip-path="url(#id_0)" d="M288.95688 206.13069L294.153 215.13069L283.7607 215.13069Z" fill-rule="nonzero"/><path fill="#ea4335" clip-path="url(#id_0)" d="M573.91656 226.26622L579.11273 235.26622L568.7204 235.26622Z" fill-rule="nonzero"/><path fill="#ea4335" clip-path="url(#id_0)" d="M128.50645 161.45818L133.7026 170.45818L123.3103 170.45818Z" fill-rule="nonzero"/><path fill="#ea4335" clip-path="url(#id_0)" d="M173.52283 126.24367L178.71898 135.24367L168.32668 135.24367Z" fill-rule="nonzero"/><path fill="#ea4335" clip-path="url(#id_0)" d="M160.9215 137.3292L166.11765 146.3292L155.72534 146.3292Z" fill-rule="nonzero"/><path fill="#ea4335" clip-path="url(#id_0)" d="M177.61005 155.9331L182.8062 164.9331L172.4139 164.9331Z" fill-rule="nonzero"/><path fill="#ea4335" clip-path="url(#id_0)" d="M97.99547 127.55687L103.19162 136.55687L92.79932 136.55687Z" fill-rule="nonzero"/><path fill="#ea4335" clip-path="url(#id_0)" d="M136.65793 145.28734L141.85408 154.28734L131.46178 154.28734Z" fill-rule="nonzero"/><path fill="#ea4335" clip-path="url(#id_0)" d="M434.2937 187.4138L439.48987 196.4138L429.09756 196.4138Z" fill-rule="nonzero"/><path fill="#ea4335" clip-path="url(#id_0)" d="M239.62498 95.588905L244.82114 104.588905L234.42883 104.588905Z" fill-rule="nonzero"/><path fill="#ea4335" clip-path="url(#id_0)" d="M91.31623 188.14093L96.51238 197.14093L86.12008 197.14093Z" fill-rule="nonzero"/><path fill="#ea4335" clip-path="url(#id_0)" d="M297.58316 138.03905L302.77933 147.03905L292.38702 147.03905Z" fill-rule="nonzero"/><path fill="#ea4335" clip-path="url(#id_0)" d="M520.8673 232.82414L526.0635 241.82414L515.6712 241.82414Z" fill-rule="nonzero"/><path fill="#ea4335" clip-path="url(#id_0)" d="M756.6838 144.10986L761.87994 153.10986L751.4876 153.10986Z" fill-rule="nonzero"/><path fill="#ea4335" clip-path="url(#id_0)" d="M147.83115 170.08217L153.0273 179.08217L142.635 179.08217Z" fill-rule="nonzero"/><path fill="#ea4335" clip-path="url(#id_0)" d="M345.126 95.4804L350.32214 104.4804L339.92984 104.4804Z" fill-rule="nonzero"/><path fill="#ea4335" clip-path="url(#id_0)" d="M96.09628 171.23595L101.292435 180.23595L90.90013 180.23595Z" fill-rule="nonzero"/><path fill="#ea4335" clip-path="url(#id_0)" d="M427.04932 121.89372L432.24545 130.89372L421.85315 130.89372Z" fill-rule="nonzero"/><path fill="#ea4335" clip-path="url(#id_0)" d="M303.86038 177.2843L309.05655 186.2843L298.6642 186.2843Z" fill-rule="nonzero"/><path fill="#ea4335" clip-path="url(#id_0)" d="M169.98018 140.74303L175.17633 149.74303L164.78403 149.74303Z" fill-rule="nonzero"/><path fill="#ea4335" clip-path="url(#id_0)" d="M386.65692 161.22118L391.8531 170.22118L381.4608 170.22118Z" fill-rule="nonzero"/><path fill="#ea4335" clip-path="url(#id_0)" d="M642.93414 194.40654L648.13025 203.40654L637.738 203.40654Z" fill-rule="nonzero"/><path fill="#ea4335" clip-path="url(#id_0)" d="M153.38142 178.02448L158.57758 187.02448L148.18526 187.02448Z" fill-rule="nonzero"/><path fill="#000000" d="M303.39062 350.4L303.39062 341.80624L305.10938 341.80624L307.14062 347.88437Q307.42188 348.74374 307.54688 349.16562Q307.6875 348.69687 308.0 347.79062L310.0625 341.80624L311.59375 341.80624L311.59375 350.4L310.5 350.4L310.5 343.2125L308.0 350.4L306.96875 350.4L304.48438 343.0875L304.48438 350.4L303.39062 350.4ZM312.29688 343.025L312.29688 341.80624L313.35938 341.80624L313.35938 343.025L312.29688 343.025ZM312.29688 350.4L312.29688 344.18124L313.35938 344.18124L313.35938 350.4L312.29688 350.4ZM315.26562 350.4L315.26562 341.80624L316.32812 341.80624L316.32812 350.4L315.26562 350.4ZM318.26562 350.4L318.26562 341.80624L319.32812 341.80624L319.32812 350.4L318.26562 350.4ZM321.29688 343.025L321.29688 341.80624L322.35938 341.80624L322.35938 343.025L321.29688 343.025ZM321.29688 350.4L321.29688 344.18124L322.35938 344.18124L322.35938 350.4L321.29688 350.4ZM323.90625 347.29062Q323.90625 345.55624 324.85938 344.72812Q325.65625 344.04062 326.8125 344.04062Q328.09375 344.04062 328.90625 344.88437Q329.73438 345.7125 329.73438 347.19687Q329.73438 348.4 329.375 349.0875Q329.01562 349.775 328.3125 350.16562Q327.625 350.54062 326.8125 350.54062Q325.51562 350.54062 324.70312 349.7125Q323.90625 348.86874 323.90625 347.29062ZM324.98438 347.29062Q324.98438 348.47812 325.5 349.07187Q326.03125 349.66562 326.8125 349.66562Q327.60938 349.66562 328.125 349.07187Q328.64062 348.47812 328.64062 347.25937Q328.64062 346.10312 328.10938 345.50937Q327.59375 344.91562 326.8125 344.91562Q326.03125 344.91562 325.5 345.50937Q324.98438 346.0875 324.98438 347.29062ZM331.29688 350.4L331.29688 344.18124L332.23438 344.18124L332.23438 345.05624Q332.92188 344.04062 334.21875 344.04062Q334.78125 344.04062 335.25 344.24374Q335.73438 344.44687 335.96875 344.775Q336.20312 345.10312 336.29688 345.54062Q336.34375 345.8375 336.34375 346.57187L336.34375 350.4L335.29688 350.4L335.29688 346.61874Q335.29688 345.9625 335.17188 345.65Q335.04688 345.3375 334.73438 345.15Q334.42188 344.94687 334.0 344.94687Q333.32812 344.94687 332.82812 345.38437Q332.34375 345.80624 332.34375 346.99374L332.34375 350.4L331.29688 350.4ZM337.875 348.54062L338.90625 348.38437Q339.0 349.00937 339.39062 349.3375Q339.79688 349.66562 340.53125 349.66562Q341.25 349.66562 341.59375 349.38437Q341.95312 349.0875 341.95312 348.68124Q341.95312 348.32187 341.64062 348.11874Q341.42188 347.97812 340.5625 347.75937Q339.40625 347.4625 338.95312 347.25937Q338.51562 347.04062 338.28125 346.66562Q338.04688 346.29062 338.04688 345.82187Q338.04688 345.41562 338.23438 345.05624Q338.42188 344.69687 338.75 344.4625Q339.0 344.29062 339.42188 344.16562Q339.84375 344.04062 340.34375 344.04062Q341.0625 344.04062 341.60938 344.25937Q342.17188 344.4625 342.4375 344.82187Q342.70312 345.18124 342.79688 345.775L341.76562 345.91562Q341.70312 345.44687 341.35938 345.18124Q341.03125 344.9 340.40625 344.9Q339.6875 344.9 339.375 345.15Q339.0625 345.38437 339.0625 345.7125Q339.0625 345.91562 339.1875 346.07187Q339.32812 346.24374 339.59375 346.35312Q339.75 346.41562 340.53125 346.61874Q341.65625 346.93124 342.09375 347.11874Q342.53125 347.30624 342.78125 347.66562Q343.03125 348.025 343.03125 348.57187Q343.03125 349.10312 342.71875 349.57187Q342.42188 350.025 341.84375 350.29062Q341.26562 350.54062 340.53125 350.54062Q339.3125 350.54062 338.67188 350.04062Q338.04688 349.525 337.875 348.54062ZM347.90625 347.29062Q347.90625 345.55624 348.85938 344.72812Q349.65625 344.04062 350.8125 344.04062Q352.09375 344.04062 352.90625 344.88437Q353.73438 345.7125 353.73438 347.19687Q353.73438 348.4 353.375 349.0875Q353.01562 349.775 352.3125 350.16562Q351.625 350.54062 350.8125 350.54062Q349.51562 350.54062 348.70312 349.7125Q347.90625 348.86874 347.90625 347.29062ZM348.98438 347.29062Q348.98438 348.47812 349.5 349.07187Q350.03125 349.66562 350.8125 349.66562Q351.60938 349.66562 352.125 349.07187Q352.64062 348.47812 352.64062 347.25937Q352.64062 346.10312 352.10938 345.50937Q351.59375 344.91562 350.8125 344.91562Q350.03125 344.91562 349.5 345.50937Q348.98438 346.0875 348.98438 347.29062ZM355.54688 350.4L355.54688 344.99374L354.60938 344.99374L354.60938 344.18124L355.54688 344.18124L355.54688 343.50937Q355.54688 342.88437 355.65625 342.5875Q355.8125 342.16562 356.1875 341.91562Q356.57812 341.66562 357.26562 341.66562Q357.71875 341.66562 358.25 341.775L358.09375 342.68124Q357.76562 342.63437 357.46875 342.63437Q356.98438 342.63437 356.78125 342.8375Q356.59375 343.04062 356.59375 343.60312L356.59375 344.18124L357.8125 344.18124L357.8125 344.99374L356.59375 344.99374L356.59375 350.4L355.54688 350.4ZM361.26562 350.4L361.26562 341.80624L362.32812 341.80624L362.32812 350.4L361.26562 350.4ZM364.29688 343.025L364.29688 341.80624L365.35938 341.80624L365.35938 343.025L364.29688 343.025ZM364.29688 350.4L364.29688 344.18124L365.35938 344.18124L365.35938 350.4L364.29688 350.4ZM367.29688 350.4L367.29688 344.18124L368.23438 344.18124L368.23438 345.05624Q368.92188 344.04062 370.21875 344.04062Q370.78125 344.04062 371.25 344.24374Q371.73438 344.44687 371.96875 344.775Q372.20312 345.10312 372.29688 345.54062Q372.34375 345.8375 372.34375 346.57187L372.34375 350.4L371.29688 350.4L371.29688 346.61874Q371.29688 345.9625 371.17188 345.65Q371.04688 345.3375 370.73438 345.15Q370.42188 344.94687 370.0 344.94687Q369.32812 344.94687 368.82812 345.38437Q368.34375 345.80624 368.34375 346.99374L368.34375 350.4L367.29688 350.4ZM378.54688 348.4L379.64062 348.525Q379.39062 349.47812 378.6875 350.00937Q377.98438 350.54062 376.90625 350.54062Q375.54688 350.54062 374.73438 349.69687Q373.9375 348.85312 373.9375 347.3375Q373.9375 345.775 374.75 344.91562Q375.5625 344.04062 376.84375 344.04062Q378.09375 344.04062 378.875 344.88437Q379.67188 345.72812 379.67188 347.275Q379.67188 347.36874 379.67188 347.55624L375.03125 347.55624Q375.09375 348.5875 375.60938 349.13437Q376.125 349.66562 376.90625 349.66562Q377.48438 349.66562 377.89062 349.36874Q378.3125 349.05624 378.54688 348.4ZM375.09375 346.69687L378.5625 346.69687Q378.5 345.9 378.17188 345.50937Q377.65625 344.9 376.85938 344.9Q376.125 344.9 375.625 345.38437Q375.14062 345.86874 375.09375 346.69687ZM380.875 348.54062L381.90625 348.38437Q382.0 349.00937 382.39062 349.3375Q382.79688 349.66562 383.53125 349.66562Q384.25 349.66562 384.59375 349.38437Q384.95312 349.0875 384.95312 348.68124Q384.95312 348.32187 384.64062 348.11874Q384.42188 347.97812 383.5625 347.75937Q382.40625 347.4625 381.95312 347.25937Q381.51562 347.04062 381.28125 346.66562Q381.04688 346.29062 381.04688 345.82187Q381.04688 345.41562 381.23438 345.05624Q381.42188 344.69687 381.75 344.4625Q382.0 344.29062 382.42188 344.16562Q382.84375 344.04062 383.34375 344.04062Q384.0625 344.04062 384.60938 344.25937Q385.17188 344.4625 385.4375 344.82187Q385.70312 345.18124 385.79688 345.775L384.76562 345.91562Q384.70312 345.44687 384.35938 345.18124Q384.03125 344.9 383.40625 344.9Q382.6875 344.9 382.375 345.15Q382.0625 345.38437 382.0625 345.7125Q382.0625 345.91562 382.1875 346.07187Q382.32812 346.24374 382.59375 346.35312Q382.75 346.41562 383.53125 346.61874Q384.65625 346.93124 385.09375 347.11874Q385.53125 347.30624 385.78125 347.66562Q386.03125 348.025 386.03125 348.57187Q386.03125 349.10312 385.71875 349.57187Q385.42188 350.025 384.84375 350.29062Q384.26562 350.54062 383.53125 350.54062Q382.3125 350.54062 381.67188 350.04062Q381.04688 349.525 380.875 348.54062ZM390.90625 347.29062Q390.90625 345.55624 391.85938 344.72812Q392.65625 344.04062 393.8125 344.04062Q395.09375 344.04062 395.90625 344.88437Q396.73438 345.7125 396.73438 347.19687Q396.73438 348.4 396.375 349.0875Q396.01562 349.775 395.3125 350.16562Q394.625 350.54062 393.8125 350.54062Q392.51562 350.54062 391.70312 349.7125Q390.90625 348.86874 390.90625 347.29062ZM391.98438 347.29062Q391.98438 348.47812 392.5 349.07187Q393.03125 349.66562 393.8125 349.66562Q394.60938 349.66562 395.125 349.07187Q395.64062 348.47812 395.64062 347.25937Q395.64062 346.10312 395.10938 345.50937Q394.59375 344.91562 393.8125 344.91562Q393.03125 344.91562 392.5 345.50937Q391.98438 346.0875 391.98438 347.29062ZM398.54688 350.4L398.54688 344.99374L397.60938 344.99374L397.60938 344.18124L398.54688 344.18124L398.54688 343.50937Q398.54688 342.88437 398.65625 342.5875Q398.8125 342.16562 399.1875 341.91562Q399.57812 341.66562 400.26562 341.66562Q400.71875 341.66562 401.25 341.775L401.09375 342.68124Q400.76562 342.63437 400.46875 342.63437Q399.98438 342.63437 399.78125 342.8375Q399.59375 343.04062 399.59375 343.60312L399.59375 344.18124L400.8125 344.18124L400.8125 344.99374L399.59375 344.99374L399.59375 350.4L398.54688 350.4ZM408.35938 348.11874L409.39062 348.25937Q409.21875 349.32187 408.51562 349.93124Q407.8125 350.54062 406.79688 350.54062Q405.51562 350.54062 404.73438 349.7125Q403.96875 348.86874 403.96875 347.30624Q403.96875 346.30624 404.29688 345.55624Q404.64062 344.79062 405.3125 344.41562Q406.0 344.04062 406.8125 344.04062Q407.8125 344.04062 408.45312 344.55624Q409.10938 345.05624 409.29688 346.00937L408.26562 346.16562Q408.125 345.54062 407.75 345.22812Q407.375 344.9 406.84375 344.9Q406.04688 344.9 405.54688 345.47812Q405.04688 346.04062 405.04688 347.275Q405.04688 348.54062 405.53125 349.10312Q406.01562 349.66562 406.78125 349.66562Q407.40625 349.66562 407.8125 349.29062Q408.23438 348.91562 408.35938 348.11874ZM409.90625 347.29062Q409.90625 345.55624 410.85938 344.72812Q411.65625 344.04062 412.8125 344.04062Q414.09375 344.04062 414.90625 344.88437Q415.73438 345.7125 415.73438 347.19687Q415.73438 348.4 415.375 349.0875Q415.01562 349.775 414.3125 350.16562Q413.625 350.54062 412.8125 350.54062Q411.51562 350.54062 410.70312 349.7125Q409.90625 348.86874 409.90625 347.29062ZM410.98438 347.29062Q410.98438 348.47812 411.5 349.07187Q412.03125 349.66562 412.8125 349.66562Q413.60938 349.66562 414.125 349.07187Q414.64062 348.47812 414.64062 347.25937Q414.64062 346.10312 414.10938 345.50937Q413.59375 344.91562 412.8125 344.91562Q412.03125 344.91562 411.5 345.50937Q410.98438 346.0875 410.98438 347.29062ZM421.32812 350.4L421.32812 349.61874Q420.73438 350.54062 419.59375 350.54062Q418.84375 350.54062 418.21875 350.13437Q417.59375 349.7125 417.25 348.97812Q416.90625 348.24374 416.90625 347.29062Q416.90625 346.36874 417.21875 345.60312Q417.53125 344.8375 418.15625 344.44687Q418.78125 344.04062 419.54688 344.04062Q420.10938 344.04062 420.54688 344.275Q420.98438 344.50937 421.26562 344.88437L421.26562 341.80624L422.3125 341.80624L422.3125 350.4L421.32812 350.4ZM418.0 347.29062Q418.0 348.49374 418.5 349.0875Q419.0 349.66562 419.6875 349.66562Q420.375 349.66562 420.85938 349.10312Q421.34375 348.54062 421.34375 347.38437Q421.34375 346.10312 420.84375 345.50937Q420.35938 344.91562 419.64062 344.91562Q418.9375 344.91562 418.46875 345.49374Q418.0 346.05624 418.0 347.29062ZM428.54688 348.4L429.64062 348.525Q429.39062 349.47812 428.6875 350.00937Q427.98438 350.54062 426.90625 350.54062Q425.54688 350.54062 424.73438 349.69687Q423.9375 348.85312 423.9375 347.3375Q423.9375 345.775 424.75 344.91562Q425.5625 344.04062 426.84375 344.04062Q428.09375 344.04062 428.875 344.88437Q429.67188 345.72812 429.67188 347.275Q429.67188 347.36874 429.67188 347.55624L425.03125 347.55624Q425.09375 348.5875 425.60938 349.13437Q426.125 349.66562 426.90625 349.66562Q427.48438 349.66562 427.89062 349.36874Q428.3125 349.05624 428.54688 348.4ZM425.09375 346.69687L428.5625 346.69687Q428.5 345.9 428.17188 345.50937Q427.65625 344.9 426.85938 344.9Q426.125 344.9 425.625 345.38437Q425.14062 345.86874 425.09375 346.69687ZM436.3125 352.93124Q435.4375 351.82187 434.82812 350.35312Q434.23438 348.86874 434.23438 347.29062Q434.23438 345.9 434.67188 344.61874Q435.20312 343.13437 436.3125 341.66562L437.0625 341.66562Q436.35938 342.88437 436.125 343.4Q435.76562 344.2125 435.5625 345.0875Q435.3125 346.18124 435.3125 347.29062Q435.3125 350.11874 437.0625 352.93124L436.3125 352.93124ZM438.29688 343.025L438.29688 341.80624L439.35938 341.80624L439.35938 343.025L438.29688 343.025ZM438.29688 350.4L438.29688 344.18124L439.35938 344.18124L439.35938 350.4L438.29688 350.4ZM441.29688 350.4L441.29688 344.18124L442.23438 344.18124L442.23438 345.05624Q442.92188 344.04062 444.21875 344.04062Q444.78125 344.04062 445.25 344.24374Q445.73438 344.44687 445.96875 344.775Q446.20312 345.10312 446.29688 345.54062Q446.34375 345.8375 446.34375 346.57187L446.34375 350.4L445.29688 350.4L445.29688 346.61874Q445.29688 345.9625 445.17188 345.65Q445.04688 345.3375 444.73438 345.15Q444.42188 344.94687 444.0 344.94687Q443.32812 344.94687 442.82812 345.38437Q442.34375 345.80624 442.34375 346.99374L442.34375 350.4L441.29688 350.4ZM452.35938 348.11874L453.39062 348.25937Q453.21875 349.32187 452.51562 349.93124Q451.8125 350.54062 450.79688 350.54062Q449.51562 350.54062 448.73438 349.7125Q447.96875 348.86874 447.96875 347.30624Q447.96875 346.30624 448.29688 345.55624Q448.64062 344.79062 449.3125 344.41562Q450.0 344.04062 450.8125 344.04062Q451.8125 344.04062 452.45312 344.55624Q453.10938 345.05624 453.29688 346.00937L452.26562 346.16562Q452.125 345.54062 451.75 345.22812Q451.375 344.9 450.84375 344.9Q450.04688 344.9 449.54688 345.47812Q449.04688 346.04062 449.04688 347.275Q449.04688 348.54062 449.53125 349.10312Q450.01562 349.66562 450.78125 349.66562Q451.40625 349.66562 451.8125 349.29062Q452.23438 348.91562 452.35938 348.11874ZM454.26562 350.4L454.26562 341.80624L455.32812 341.80624L455.32812 350.4L454.26562 350.4ZM457.59375 350.4L457.59375 349.19687L458.79688 349.19687L458.79688 350.4L457.59375 350.4ZM467.32812 350.4L467.32812 349.61874Q466.73438 350.54062 465.59375 350.54062Q464.84375 350.54062 464.21875 350.13437Q463.59375 349.7125 463.25 348.97812Q462.90625 348.24374 462.90625 347.29062Q462.90625 346.36874 463.21875 345.60312Q463.53125 344.8375 464.15625 344.44687Q464.78125 344.04062 465.54688 344.04062Q466.10938 344.04062 466.54688 344.275Q466.98438 344.50937 467.26562 344.88437L467.26562 341.80624L468.3125 341.80624L468.3125 350.4L467.32812 350.4ZM464.0 347.29062Q464.0 348.49374 464.5 349.0875Q465.0 349.66562 465.6875 349.66562Q466.375 349.66562 466.85938 349.10312Q467.34375 348.54062 467.34375 347.38437Q467.34375 346.10312 466.84375 345.50937Q466.35938 344.91562 465.64062 344.91562Q464.9375 344.91562 464.46875 345.49374Q464.0 346.05624 464.0 347.29062ZM474.54688 348.4L475.64062 348.525Q475.39062 349.47812 474.6875 350.00937Q473.98438 350.54062 472.90625 350.54062Q471.54688 350.54062 470.73438 349.69687Q469.9375 348.85312 469.9375 347.3375Q469.9375 345.775 470.75 344.91562Q471.5625 344.04062 472.84375 344.04062Q474.09375 344.04062 474.875 344.88437Q475.67188 345.72812 475.67188 347.275Q475.67188 347.36874 475.67188 347.55624L471.03125 347.55624Q471.09375 348.5875 471.60938 349.13437Q472.125 349.66562 472.90625 349.66562Q473.48438 349.66562 473.89062 349.36874Q474.3125 349.05624 474.54688 348.4ZM471.09375 346.69687L474.5625 346.69687Q474.5 345.9 474.17188 345.50937Q473.65625 344.9 472.85938 344.9Q472.125 344.9 471.625 345.38437Q471.14062 345.86874 471.09375 346.69687ZM477.29688 352.79062L477.29688 344.18124L478.25 344.18124L478.25 344.97812Q478.59375 344.50937 479.01562 344.275Q479.45312 344.04062 480.0625 344.04062Q480.85938 344.04062 481.46875 344.44687Q482.07812 344.85312 482.375 345.60312Q482.6875 346.35312 482.6875 347.24374Q482.6875 348.19687 482.34375 348.9625Q482.01562 349.72812 481.35938 350.13437Q480.70312 350.54062 479.98438 350.54062Q479.45312 350.54062 479.03125 350.32187Q478.60938 350.0875 478.34375 349.75937L478.34375 352.79062L477.29688 352.79062ZM478.25 347.32187Q478.25 348.525 478.73438 349.10312Q479.21875 349.66562 479.90625 349.66562Q480.60938 349.66562 481.10938 349.07187Q481.60938 348.47812 481.60938 347.22812Q481.60938 346.04062 481.125 345.4625Q480.64062 344.86874 479.95312 344.86874Q479.28125 344.86874 478.76562 345.49374Q478.25 346.11874 478.25 347.32187ZM488.54688 348.4L489.64062 348.525Q489.39062 349.47812 488.6875 350.00937Q487.98438 350.54062 486.90625 350.54062Q485.54688 350.54062 484.73438 349.69687Q483.9375 348.85312 483.9375 347.3375Q483.9375 345.775 484.75 344.91562Q485.5625 344.04062 486.84375 344.04062Q488.09375 344.04062 488.875 344.88437Q489.67188 345.72812 489.67188 347.275Q489.67188 347.36874 489.67188 347.55624L485.03125 347.55624Q485.09375 348.5875 485.60938 349.13437Q486.125 349.66562 486.90625 349.66562Q487.48438 349.66562 487.89062 349.36874Q488.3125 349.05624 488.54688 348.4ZM485.09375 346.69687L488.5625 346.69687Q488.5 345.9 488.17188 345.50937Q487.65625 344.9 486.85938 344.9Q486.125 344.9 485.625 345.38437Q485.14062 345.86874 485.09375 346.69687ZM491.29688 350.4L491.29688 344.18124L492.23438 344.18124L492.23438 345.05624Q492.92188 344.04062 494.21875 344.04062Q494.78125 344.04062 495.25 344.24374Q495.73438 344.44687 495.96875 344.775Q496.20312 345.10312 496.29688 345.54062Q496.34375 345.8375 496.34375 346.57187L496.34375 350.4L495.29688 350.4L495.29688 346.61874Q495.29688 345.9625 495.17188 345.65Q495.04688 345.3375 494.73438 345.15Q494.42188 344.94687 494.0 344.94687Q493.32812 344.94687 492.82812 345.38437Q492.34375 345.80624 492.34375 346.99374L492.34375 350.4L491.29688 350.4ZM502.32812 350.4L502.32812 349.61874Q501.73438 350.54062 500.59375 350.54062Q499.84375 350.54062 499.21875 350.13437Q498.59375 349.7125 498.25 348.97812Q497.90625 348.24374 497.90625 347.29062Q497.90625 346.36874 498.21875 345.60312Q498.53125 344.8375 499.15625 344.44687Q499.78125 344.04062 500.54688 344.04062Q501.10938 344.04062 501.54688 344.275Q501.98438 344.50937 502.26562 344.88437L502.26562 341.80624L503.3125 341.80624L503.3125 350.4L502.32812 350.4ZM499.0 347.29062Q499.0 348.49374 499.5 349.0875Q500.0 349.66562 500.6875 349.66562Q501.375 349.66562 501.85938 349.10312Q502.34375 348.54062 502.34375 347.38437Q502.34375 346.10312 501.84375 345.50937Q501.35938 344.91562 500.64062 344.91562Q499.9375 344.91562 499.46875 345.49374Q499.0 346.05624 499.0 347.29062ZM509.54688 348.4L510.64062 348.525Q510.39062 349.47812 509.6875 350.00937Q508.98438 350.54062 507.90625 350.54062Q506.54688 350.54062 505.73438 349.69687Q504.9375 348.85312 504.9375 347.3375Q504.9375 345.775 505.75 344.91562Q506.5625 344.04062 507.84375 344.04062Q509.09375 344.04062 509.875 344.88437Q510.67188 345.72812 510.67188 347.275Q510.67188 347.36874 510.67188 347.55624L506.03125 347.55624Q506.09375 348.5875 506.60938 349.13437Q507.125 349.66562 507.90625 349.66562Q508.48438 349.66562 508.89062 349.36874Q509.3125 349.05624 509.54688 348.4ZM506.09375 346.69687L509.5625 346.69687Q509.5 345.9 509.17188 345.50937Q508.65625 344.9 507.85938 344.9Q507.125 344.9 506.625 345.38437Q506.14062 345.86874 506.09375 346.69687ZM512.2969 350.4L512.2969 344.18124L513.2344 344.18124L513.2344 345.05624Q513.9219 344.04062 515.21875 344.04062Q515.78125 344.04062 516.25 344.24374Q516.7344 344.44687 516.96875 344.775Q517.2031 345.10312 517.2969 345.54062Q517.34375 345.8375 517.34375 346.57187L517.34375 350.4L516.2969 350.4L516.2969 346.61874Q516.2969 345.9625 516.1719 345.65Q516.0469 345.3375 515.7344 345.15Q515.4219 344.94687 515.0 344.94687Q514.3281 344.94687 513.8281 345.38437Q513.34375 345.80624 513.34375 346.99374L513.34375 350.4L512.2969 350.4ZM523.3594 348.11874L524.3906 348.25937Q524.21875 349.32187 523.5156 349.93124Q522.8125 350.54062 521.7969 350.54062Q520.5156 350.54062 519.7344 349.7125Q518.96875 348.86874 518.96875 347.30624Q518.96875 346.30624 519.2969 345.55624Q519.6406 344.79062 520.3125 344.41562Q521.0 344.04062 521.8125 344.04062Q522.8125 344.04062 523.4531 344.55624Q524.1094 345.05624 524.2969 346.00937L523.2656 346.16562Q523.125 345.54062 522.75 345.22812Q522.375 344.9 521.84375 344.9Q521.0469 344.9 520.5469 345.47812Q520.0469 346.04062 520.0469 347.275Q520.0469 348.54062 520.53125 349.10312Q521.0156 349.66562 521.78125 349.66562Q522.40625 349.66562 522.8125 349.29062Q523.2344 348.91562 523.3594 348.11874ZM525.2969 343.025L525.2969 341.80624L526.3594 341.80624L526.3594 343.025L525.2969 343.025ZM525.2969 350.4L525.2969 344.18124L526.3594 344.18124L526.3594 350.4L525.2969 350.4ZM532.5469 348.4L533.6406 348.525Q533.3906 349.47812 532.6875 350.00937Q531.9844 350.54062 530.90625 350.54062Q529.5469 350.54062 528.7344 349.69687Q527.9375 348.85312 527.9375 347.3375Q527.9375 345.775 528.75 344.91562Q529.5625 344.04062 530.84375 344.04062Q532.09375 344.04062 532.875 344.88437Q533.6719 345.72812 533.6719 347.275Q533.6719 347.36874 533.6719 347.55624L529.03125 347.55624Q529.09375 348.5875 529.6094 349.13437Q530.125 349.66562 530.90625 349.66562Q531.4844 349.66562 531.8906 349.36874Q532.3125 349.05624 532.5469 348.4ZM529.09375 346.69687L532.5625 346.69687Q532.5 345.9 532.1719 345.50937Q531.65625 344.9 530.8594 344.9Q530.125 344.9 529.625 345.38437Q529.1406 345.86874 529.09375 346.69687ZM534.875 348.54062L535.90625 348.38437Q536.0 349.00937 536.3906 349.3375Q536.7969 349.66562 537.53125 349.66562Q538.25 349.66562 538.59375 349.38437Q538.9531 349.0875 538.9531 348.68124Q538.9531 348.32187 538.6406 348.11874Q538.4219 347.97812 537.5625 347.75937Q536.40625 347.4625 535.9531 347.25937Q535.5156 347.04062 535.28125 346.66562Q535.0469 346.29062 535.0469 345.82187Q535.0469 345.41562 535.2344 345.05624Q535.4219 344.69687 535.75 344.4625Q536.0 344.29062 536.4219 344.16562Q536.84375 344.04062 537.34375 344.04062Q538.0625 344.04062 538.6094 344.25937Q539.1719 344.4625 539.4375 344.82187Q539.7031 345.18124 539.7969 345.775L538.7656 345.91562Q538.7031 345.44687 538.3594 345.18124Q538.03125 344.9 537.40625 344.9Q536.6875 344.9 536.375 345.15Q536.0625 345.38437 536.0625 345.7125Q536.0625 345.91562 536.1875 346.07187Q536.3281 346.24374 536.59375 346.35312Q536.75 346.41562 537.53125 346.61874Q538.65625 346.93124 539.09375 347.11874Q539.53125 347.30624 539.78125 347.66562Q540.03125 348.025 540.03125 348.57187Q540.03125 349.10312 539.71875 349.57187Q539.4219 350.025 538.84375 350.29062Q538.2656 350.54062 537.53125 350.54062Q536.3125 350.54062 535.6719 350.04062Q535.0469 349.525 534.875 348.54062ZM542.9844 352.93124L542.2344 352.93124Q543.9844 350.11874 543.9844 347.29062Q543.9844 346.19687 543.7344 345.10312Q543.53125 344.22812 543.1719 343.41562Q542.9375 342.9 542.2344 341.66562L542.9844 341.66562Q544.0781 343.13437 544.6094 344.61874Q545.0625 345.9 545.0625 347.29062Q545.0625 348.86874 544.4531 350.35312Q543.84375 351.82187 542.9844 352.93124Z" fill-rule="nonzero"/><path fill="#000000" d="M29.599995 230.27812L21.006245 230.27812L21.006245 227.02812Q21.006245 226.18437 21.08437 225.73125Q21.193745 225.09062 21.49062 224.66875Q21.787495 224.23125 22.318745 223.98125Q22.849995 223.71562 23.49062 223.71562Q24.58437 223.71562 25.349995 224.41875Q26.099995 225.10625 26.099995 226.93437L26.099995 229.1375L29.599995 229.1375L29.599995 230.27812ZM25.099995 229.1375L25.099995 226.91875Q25.099995 225.80937 24.693745 225.35625Q24.27187 224.8875 23.52187 224.8875Q22.99062 224.8875 22.61562 225.16875Q22.224995 225.43437 22.099995 225.87187Q22.02187 226.16875 22.02187 226.93437L22.02187 229.1375L25.099995 229.1375ZM27.599995 218.15312L27.724995 217.05937Q28.67812 217.30937 29.20937 218.0125Q29.74062 218.71562 29.74062 219.79375Q29.74062 221.15312 28.89687 221.96562Q28.05312 222.7625 26.537495 222.7625Q24.974995 222.7625 24.11562 221.95Q23.24062 221.1375 23.24062 219.85625Q23.24062 218.60625 24.08437 217.825Q24.92812 217.02812 26.474995 217.02812Q26.568745 217.02812 26.756245 217.02812L26.756245 221.66875Q27.787495 221.60625 28.33437 221.09062Q28.86562 220.575 28.86562 219.79375Q28.86562 219.21562 28.568745 218.80937Q28.256245 218.3875 27.599995 218.15312ZM25.89687 221.60625L25.89687 218.1375Q25.099995 218.2 24.70937 218.52812Q24.099995 219.04375 24.099995 219.84062Q24.099995 220.575 24.58437 221.075Q25.068745 221.55937 25.89687 221.60625ZM29.599995 215.41875L23.381245 215.41875L23.381245 214.46562L24.318745 214.46562Q23.662495 214.10625 23.45937 213.80937Q23.24062 213.49687 23.24062 213.12187Q23.24062 212.59062 23.568745 212.04375L24.55312 212.40312Q24.318745 212.79375 24.318745 213.16875Q24.318745 213.52812 24.537495 213.80937Q24.74062 214.075 25.11562 214.18437Q25.67812 214.37187 26.33437 214.37187L29.599995 214.37187L29.599995 215.41875ZM27.318745 207.34062L27.45937 206.30937Q28.52187 206.48125 29.131245 207.18437Q29.74062 207.8875 29.74062 208.90312Q29.74062 210.18437 28.912495 210.96562Q28.068745 211.73125 26.506245 211.73125Q25.506245 211.73125 24.756245 211.40312Q23.99062 211.05937 23.61562 210.3875Q23.24062 209.7 23.24062 208.8875Q23.24062 207.8875 23.756245 207.24687Q24.256245 206.59062 25.20937 206.40312L25.36562 207.43437Q24.74062 207.575 24.42812 207.95Q24.099995 208.325 24.099995 208.85625Q24.099995 209.65312 24.67812 210.15312Q25.24062 210.65312 26.474995 210.65312Q27.74062 210.65312 28.30312 210.16875Q28.86562 209.68437 28.86562 208.91875Q28.86562 208.29375 28.49062 207.8875Q28.11562 207.46562 27.318745 207.34062ZM27.599995 201.15312L27.724995 200.05937Q28.67812 200.30937 29.20937 201.0125Q29.74062 201.71562 29.74062 202.79375Q29.74062 204.15312 28.89687 204.96562Q28.05312 205.7625 26.537495 205.7625Q24.974995 205.7625 24.11562 204.95Q23.24062 204.1375 23.24062 202.85625Q23.24062 201.60625 24.08437 200.825Q24.92812 200.02812 26.474995 200.02812Q26.568745 200.02812 26.756245 200.02812L26.756245 204.66875Q27.787495 204.60625 28.33437 204.09062Q28.86562 203.575 28.86562 202.79375Q28.86562 202.21562 28.568745 201.80937Q28.256245 201.3875 27.599995 201.15312ZM25.89687 204.60625L25.89687 201.1375Q25.099995 201.2 24.70937 201.52812Q24.099995 202.04375 24.099995 202.84062Q24.099995 203.575 24.58437 204.075Q25.068745 204.55937 25.89687 204.60625ZM29.599995 198.40312L23.381245 198.40312L23.381245 197.46562L24.256245 197.46562Q23.24062 196.77812 23.24062 195.48125Q23.24062 194.91875 23.443745 194.45Q23.64687 193.96562 23.974995 193.73125Q24.30312 193.49687 24.74062 193.40312Q25.037495 193.35625 25.77187 193.35625L29.599995 193.35625L29.599995 194.40312L25.818745 194.40312Q25.162495 194.40312 24.849995 194.52812Q24.537495 194.65312 24.349995 194.96562Q24.14687 195.27812 24.14687 195.7Q24.14687 196.37187 24.58437 196.87187Q25.006245 197.35625 26.193745 197.35625L29.599995 197.35625L29.599995 198.40312ZM28.662495 189.10625L29.58437 188.95Q29.67812 189.40312 29.67812 189.74687Q29.67812 190.325 29.506245 190.6375Q29.318745 190.95 29.02187 191.09062Q28.724995 191.21562 27.77187 191.21562L24.193745 191.21562L24.193745 191.98125L23.381245 191.98125L23.381245 191.21562L21.83437 191.21562L21.20937 190.16875L23.381245 190.16875L23.381245 189.10625L24.193745 189.10625L24.193745 190.16875L27.83437 190.16875Q28.287495 190.16875 28.412495 190.12187Q28.537495 190.05937 28.61562 189.93437Q28.693745 189.80937 28.693745 189.575Q28.693745 189.3875 28.662495 189.10625ZM29.599995 185.41875L23.381245 185.41875L23.381245 184.46562L24.318745 184.46562Q23.662495 184.10625 23.45937 183.80937Q23.24062 183.49687 23.24062 183.12187Q23.24062 182.59062 23.568745 182.04375L24.55312 182.40312Q24.318745 182.79375 24.318745 183.16875Q24.318745 183.52812 24.537495 183.80937Q24.74062 184.075 25.11562 184.18437Q25.67812 184.37187 26.33437 184.37187L29.599995 184.37187L29.599995 185.41875ZM27.599995 177.15312L27.724995 176.05937Q28.67812 176.30937 29.20937 177.0125Q29.74062 177.71562 29.74062 178.79375Q29.74062 180.15312 28.89687 180.96562Q28.05312 181.7625 26.537495 181.7625Q24.974995 181.7625 24.11562 180.95Q23.24062 180.1375 23.24062 178.85625Q23.24062 177.60625 24.08437 176.825Q24.92812 176.02812 26.474995 176.02812Q26.568745 176.02812 26.756245 176.02812L26.756245 180.66875Q27.787495 180.60625 28.33437 180.09062Q28.86562 179.575 28.86562 178.79375Q28.86562 178.21562 28.568745 177.80937Q28.256245 177.3875 27.599995 177.15312ZM25.89687 180.60625L25.89687 177.1375Q25.099995 177.2 24.70937 177.52812Q24.099995 178.04375 24.099995 178.84062Q24.099995 179.575 24.58437 180.075Q25.068745 180.55937 25.89687 180.60625ZM29.599995 170.37187L28.818745 170.37187Q29.74062 170.96562 29.74062 172.10625Q29.74062 172.85625 29.33437 173.48125Q28.912495 174.10625 28.17812 174.45Q27.443745 174.79375 26.49062 174.79375Q25.568745 174.79375 24.80312 174.48125Q24.037495 174.16875 23.64687 173.54375Q23.24062 172.91875 23.24062 172.15312Q23.24062 171.59062 23.474995 171.15312Q23.70937 170.71562 24.08437 170.43437L21.006245 170.43437L21.006245 169.3875L29.599995 169.3875L29.599995 170.37187ZM26.49062 173.7Q27.693745 173.7 28.287495 173.2Q28.86562 172.7 28.86562 172.0125Q28.86562 171.325 28.30312 170.84062Q27.74062 170.35625 26.58437 170.35625Q25.30312 170.35625 24.70937 170.85625Q24.11562 171.34062 24.11562 172.05937Q24.11562 172.7625 24.693745 173.23125Q25.256245 173.7 26.49062 173.7ZM29.599995 163.325L28.67812 163.325Q29.74062 164.05937 29.74062 165.30937Q29.74062 165.85625 29.537495 166.34062Q29.318745 166.80937 29.006245 167.04375Q28.67812 167.27812 28.20937 167.37187Q27.912495 167.43437 27.224995 167.43437L23.381245 167.43437L23.381245 166.37187L26.83437 166.37187Q27.64687 166.37187 27.943745 166.30937Q28.349995 166.21562 28.599995 165.90312Q28.83437 165.575 28.83437 165.09062Q28.83437 164.62187 28.599995 164.21562Q28.349995 163.79375 27.92812 163.62187Q27.506245 163.43437 26.70937 163.43437L23.381245 163.43437L23.381245 162.3875L29.599995 162.3875L29.599995 163.325ZM27.318745 156.34062L27.45937 155.30937Q28.52187 155.48125 29.131245 156.18437Q29.74062 156.8875 29.74062 157.90312Q29.74062 159.18437 28.912495 159.96562Q28.068745 160.73125 26.506245 160.73125Q25.506245 160.73125 24.756245 160.40312Q23.99062 160.05937 23.61562 159.3875Q23.24062 158.7 23.24062 157.8875Q23.24062 156.8875 23.756245 156.24687Q24.256245 155.59062 25.20937 155.40312L25.36562 156.43437Q24.74062 156.575 24.42812 156.95Q24.099995 157.325 24.099995 157.85625Q24.099995 158.65312 24.67812 159.15312Q25.24062 159.65312 26.474995 159.65312Q27.74062 159.65312 28.30312 159.16875Q28.86562 158.68437 28.86562 157.91875Q28.86562 157.29375 28.49062 156.8875Q28.11562 156.46562 27.318745 156.34062ZM28.662495 152.10625L29.58437 151.95Q29.67812 152.40312 29.67812 152.74687Q29.67812 153.325 29.506245 153.6375Q29.318745 153.95 29.02187 154.09062Q28.724995 154.21562 27.77187 154.21562L24.193745 154.21562L24.193745 154.98125L23.381245 154.98125L23.381245 154.21562L21.83437 154.21562L21.20937 153.16875L23.381245 153.16875L23.381245 152.10625L24.193745 152.10625L24.193745 153.16875L27.83437 153.16875Q28.287495 153.16875 28.412495 153.12187Q28.537495 153.05937 28.61562 152.93437Q28.693745 152.80937 28.693745 152.575Q28.693745 152.3875 28.662495 152.10625ZM22.224995 151.40312L21.006245 151.40312L21.006245 150.34062L22.224995 150.34062L22.224995 151.40312ZM29.599995 151.40312L23.381245 151.40312L23.381245 150.34062L29.599995 150.34062L29.599995 151.40312ZM26.49062 148.79375Q24.756245 148.79375 23.92812 147.84062Q23.24062 147.04375 23.24062 145.8875Q23.24062 144.60625 24.08437 143.79375Q24.912495 142.96562 26.39687 142.96562Q27.599995 142.96562 28.287495 143.325Q28.974995 143.68437 29.36562 144.3875Q29.74062 145.075 29.74062 145.8875Q29.74062 147.18437 28.912495 147.99687Q28.068745 148.79375 26.49062 148.79375ZM26.49062 147.71562Q27.67812 147.71562 28.27187 147.2Q28.86562 146.66875 28.86562 145.8875Q28.86562 145.09062 28.27187 144.575Q27.67812 144.05937 26.45937 144.05937Q25.30312 144.05937 24.70937 144.59062Q24.11562 145.10625 24.11562 145.8875Q24.11562 146.66875 24.70937 147.2Q25.287495 147.71562 26.49062 147.71562ZM29.599995 141.40312L23.381245 141.40312L23.381245 140.46562L24.256245 140.46562Q23.24062 139.77812 23.24062 138.48125Q23.24062 137.91875 23.443745 137.45Q23.64687 136.96562 23.974995 136.73125Q24.30312 136.49687 24.74062 136.40312Q25.037495 136.35625 25.77187 136.35625L29.599995 136.35625L29.599995 137.40312L25.818745 137.40312Q25.162495 137.40312 24.849995 137.52812Q24.537495 137.65312 24.349995 137.96562Q24.14687 138.27812 24.14687 138.7Q24.14687 139.37187 24.58437 139.87187Q25.006245 140.35625 26.193745 140.35625L29.599995 140.35625L29.599995 141.40312Z" fill-rule="nonzero"/><path fill="#000000" d="M56.56875 298.91562L55.521873 298.99374Q55.38125 298.36874 55.13125 298.0875Q54.69375 297.63437 54.06875 297.63437Q53.56875 297.63437 53.178123 297.91562Q52.69375 298.29062 52.396873 298.99374Q52.115623 299.68124 52.1 300.9625Q52.475 300.38437 53.021873 300.10312Q53.584373 299.82187 54.19375 299.82187Q55.240623 299.82187 55.975 300.60312Q56.725 301.38437 56.725 302.60312Q56.725 303.41562 56.365623 304.11874Q56.021873 304.80624 55.4125 305.18124Q54.803123 305.54062 54.0375 305.54062Q52.709373 305.54062 51.88125 304.57187Q51.053123 303.60312 51.053123 301.38437Q51.053123 298.88437 51.975 297.75937Q52.771873 296.775 54.13125 296.775Q55.146873 296.775 55.7875 297.35312Q56.44375 297.91562 56.56875 298.91562ZM52.271873 302.61874Q52.271873 303.16562 52.490623 303.66562Q52.725 304.15 53.13125 304.41562Q53.553123 304.68124 54.021873 304.68124Q54.678123 304.68124 55.1625 304.15Q55.646873 303.60312 55.646873 302.68124Q55.646873 301.79062 55.1625 301.275Q54.69375 300.75937 53.975 300.75937Q53.25625 300.75937 52.75625 301.275Q52.271873 301.79062 52.271873 302.61874ZM58.1 301.16562Q58.1 299.63437 58.4125 298.7125Q58.725 297.775 59.334373 297.275Q59.959373 296.775 60.896873 296.775Q61.584373 296.775 62.1 297.05624Q62.63125 297.3375 62.975 297.86874Q63.31875 298.38437 63.50625 299.13437Q63.69375 299.88437 63.69375 301.16562Q63.69375 302.68124 63.38125 303.60312Q63.084373 304.525 62.459373 305.04062Q61.85 305.54062 60.896873 305.54062Q59.6625 305.54062 58.94375 304.65Q58.1 303.5875 58.1 301.16562ZM59.178123 301.16562Q59.178123 303.275 59.678123 303.97812Q60.178123 304.68124 60.896873 304.68124Q61.63125 304.68124 62.115623 303.97812Q62.615623 303.275 62.615623 301.16562Q62.615623 299.04062 62.115623 298.35312Q61.63125 297.65 60.88125 297.65Q60.1625 297.65 59.725 298.25937Q59.178123 299.04062 59.178123 301.16562ZM65.30312 298.86874Q65.30312 297.94687 65.75625 297.30624Q66.225 296.66562 67.1 296.66562Q67.9125 296.66562 68.44375 297.24374Q68.975 297.82187 68.975 298.93124Q68.975 300.025 68.42812 300.61874Q67.89687 301.19687 67.11562 301.19687Q66.33437 301.19687 65.81875 300.61874Q65.30312 300.04062 65.30312 298.86874ZM67.13125 297.38437Q66.74062 297.38437 66.475 297.72812Q66.225 298.07187 66.225 298.97812Q66.225 299.80624 66.475 300.15Q66.74062 300.47812 67.13125 300.47812Q67.5375 300.47812 67.7875 300.13437Q68.05312 299.79062 68.05312 298.9Q68.05312 298.05624 67.7875 297.72812Q67.52187 297.38437 67.13125 297.38437ZM67.13125 305.7125L71.83437 296.66562L72.69375 296.66562L68.00625 305.7125L67.13125 305.7125ZM70.85 303.38437Q70.85 302.4625 71.30312 301.82187Q71.77187 301.18124 72.6625 301.18124Q73.475 301.18124 74.00625 301.75937Q74.5375 302.32187 74.5375 303.44687Q74.5375 304.54062 73.99062 305.13437Q73.45937 305.7125 72.6625 305.7125Q71.89687 305.7125 71.36562 305.13437Q70.85 304.55624 70.85 303.38437ZM72.69375 301.9Q72.2875 301.9 72.02187 302.24374Q71.77187 302.5875 71.77187 303.49374Q71.77187 304.30624 72.0375 304.65Q72.30312 304.99374 72.69375 304.99374Q73.08437 304.99374 73.35 304.65Q73.61562 304.30624 73.61562 303.4Q73.61562 302.57187 73.35 302.24374Q73.08437 301.9 72.69375 301.9Z" fill-rule="nonzero"/><path fill="#000000" d="M51.1625 214.79791L51.1625 213.78229L56.725 213.78229L56.725 214.61041Q55.9125 215.48541 55.1 216.93854Q54.303123 218.37604 53.865623 219.90729Q53.5375 220.98541 53.459373 222.26666L52.365623 222.26666Q52.38125 221.25104 52.75625 219.81354Q53.146873 218.37604 53.85 217.04791Q54.56875 215.71979 55.38125 214.79791L51.1625 214.79791ZM58.1 218.03229Q58.1 216.50104 58.4125 215.57916Q58.725 214.64166 59.334373 214.14166Q59.959373 213.64166 60.896873 213.64166Q61.584373 213.64166 62.1 213.92291Q62.63125 214.20416 62.975 214.73541Q63.31875 215.25104 63.50625 216.00104Q63.69375 216.75104 63.69375 218.03229Q63.69375 219.54791 63.38125 220.46979Q63.084373 221.39166 62.459373 221.90729Q61.85 222.40729 60.896873 222.40729Q59.6625 222.40729 58.94375 221.51666Q58.1 220.45416 58.1 218.03229ZM59.178123 218.03229Q59.178123 220.14166 59.678123 220.84479Q60.178123 221.54791 60.896873 221.54791Q61.63125 221.54791 62.115623 220.84479Q62.615623 220.14166 62.615623 218.03229Q62.615623 215.90729 62.115623 215.21979Q61.63125 214.51666 60.88125 214.51666Q60.1625 214.51666 59.725 215.12604Q59.178123 215.90729 59.178123 218.03229ZM65.30312 215.73541Q65.30312 214.81354 65.75625 214.17291Q66.225 213.53229 67.1 213.53229Q67.9125 213.53229 68.44375 214.11041Q68.975 214.68854 68.975 215.79791Q68.975 216.89166 68.42812 217.48541Q67.89687 218.06354 67.11562 218.06354Q66.33437 218.06354 65.81875 217.48541Q65.30312 216.90729 65.30312 215.73541ZM67.13125 214.25104Q66.74062 214.25104 66.475 214.59479Q66.225 214.93854 66.225 215.84479Q66.225 216.67291 66.475 217.01666Q66.74062 217.34479 67.13125 217.34479Q67.5375 217.34479 67.7875 217.00104Q68.05312 216.65729 68.05312 215.76666Q68.05312 214.92291 67.7875 214.59479Q67.52187 214.25104 67.13125 214.25104ZM67.13125 222.57916L71.83437 213.53229L72.69375 213.53229L68.00625 222.57916L67.13125 222.57916ZM70.85 220.25104Q70.85 219.32916 71.30312 218.68854Q71.77187 218.04791 72.6625 218.04791Q73.475 218.04791 74.00625 218.62604Q74.5375 219.18854 74.5375 220.31354Q74.5375 221.40729 73.99062 222.00104Q73.45937 222.57916 72.6625 222.57916Q71.89687 222.57916 71.36562 222.00104Q70.85 221.42291 70.85 220.25104ZM72.69375 218.76666Q72.2875 218.76666 72.02187 219.11041Q71.77187 219.45416 71.77187 220.36041Q71.77187 221.17291 72.0375 221.51666Q72.30312 221.86041 72.69375 221.86041Q73.08437 221.86041 73.35 221.51666Q73.61562 221.17291 73.61562 220.26666Q73.61562 219.43854 73.35 219.11041Q73.08437 218.76666 72.69375 218.76666Z" fill-rule="nonzero"/><path fill="#000000" d="M52.725 134.47708Q52.06875 134.22708 51.740623 133.78958Q51.428123 133.33646 51.428123 132.72708Q51.428123 131.78958 52.1 131.14896Q52.7875 130.50833 53.896873 130.50833Q55.021873 130.50833 55.709373 131.16458Q56.396873 131.82083 56.396873 132.75833Q56.396873 133.35208 56.084373 133.78958Q55.771873 134.22708 55.13125 134.47708Q55.928123 134.72708 56.334373 135.3052Q56.740623 135.88333 56.740623 136.6802Q56.740623 137.77396 55.959373 138.52396Q55.19375 139.27396 53.9125 139.27396Q52.646873 139.27396 51.865623 138.52396Q51.084373 137.77396 51.084373 136.64896Q51.084373 135.8052 51.50625 135.2427Q51.94375 134.6802 52.725 134.47708ZM52.50625 132.6802Q52.50625 133.28958 52.896873 133.6802Q53.303123 134.07083 53.928123 134.07083Q54.5375 134.07083 54.928123 133.69583Q55.31875 133.3052 55.31875 132.7427Q55.31875 132.16458 54.9125 131.77396Q54.50625 131.3677 53.9125 131.3677Q53.303123 131.3677 52.896873 131.75833Q52.50625 132.14896 52.50625 132.6802ZM52.178123 136.64896Q52.178123 137.10208 52.38125 137.52396Q52.6 137.94583 53.021873 138.1802Q53.44375 138.41458 53.928123 138.41458Q54.678123 138.41458 55.1625 137.9302Q55.6625 137.44583 55.6625 136.69583Q55.6625 135.9302 55.1625 135.4302Q54.6625 134.9302 53.896873 134.9302Q53.146873 134.9302 52.6625 135.4302Q52.178123 135.91458 52.178123 136.64896ZM58.1 134.89896Q58.1 133.3677 58.4125 132.44583Q58.725 131.50833 59.334373 131.00833Q59.959373 130.50833 60.896873 130.50833Q61.584373 130.50833 62.1 130.78958Q62.63125 131.07083 62.975 131.60208Q63.31875 132.1177 63.50625 132.8677Q63.69375 133.6177 63.69375 134.89896Q63.69375 136.41458 63.38125 137.33646Q63.084373 138.25833 62.459373 138.77396Q61.85 139.27396 60.896873 139.27396Q59.6625 139.27396 58.94375 138.38333Q58.1 137.32083 58.1 134.89896ZM59.178123 134.89896Q59.178123 137.00833 59.678123 137.71146Q60.178123 138.41458 60.896873 138.41458Q61.63125 138.41458 62.115623 137.71146Q62.615623 137.00833 62.615623 134.89896Q62.615623 132.77396 62.115623 132.08646Q61.63125 131.38333 60.88125 131.38333Q60.1625 131.38333 59.725 131.9927Q59.178123 132.77396 59.178123 134.89896ZM65.30312 132.60208Q65.30312 131.6802 65.75625 131.03958Q66.225 130.39896 67.1 130.39896Q67.9125 130.39896 68.44375 130.97708Q68.975 131.5552 68.975 132.66458Q68.975 133.75833 68.42812 134.35208Q67.89687 134.9302 67.11562 134.9302Q66.33437 134.9302 65.81875 134.35208Q65.30312 133.77396 65.30312 132.60208ZM67.13125 131.1177Q66.74062 131.1177 66.475 131.46146Q66.225 131.8052 66.225 132.71146Q66.225 133.53958 66.475 133.88333Q66.74062 134.21146 67.13125 134.21146Q67.5375 134.21146 67.7875 133.8677Q68.05312 133.52396 68.05312 132.63333Q68.05312 131.78958 67.7875 131.46146Q67.52187 131.1177 67.13125 131.1177ZM67.13125 139.44583L71.83437 130.39896L72.69375 130.39896L68.00625 139.44583L67.13125 139.44583ZM70.85 137.1177Q70.85 136.19583 71.30312 135.5552Q71.77187 134.91458 72.6625 134.91458Q73.475 134.91458 74.00625 135.4927Q74.5375 136.0552 74.5375 137.1802Q74.5375 138.27396 73.99062 138.8677Q73.45937 139.44583 72.6625 139.44583Q71.89687 139.44583 71.36562 138.8677Q70.85 138.28958 70.85 137.1177ZM72.69375 135.63333Q72.2875 135.63333 72.02187 135.97708Q71.77187 136.32083 71.77187 137.22708Q71.77187 138.03958 72.0375 138.38333Q72.30312 138.72708 72.69375 138.72708Q73.08437 138.72708 73.35 138.38333Q73.61562 138.03958 73.61562 137.13333Q73.61562 136.3052 73.35 135.97708Q73.08437 135.63333 72.69375 135.63333Z" fill-rule="nonzero"/><path fill="#000000" d="M51.25625 54.015625L52.271873 53.921875Q52.396873 54.640625 52.75625 54.96875Q53.13125 55.28125 53.69375 55.28125Q54.178123 55.28125 54.5375 55.0625Q54.9125 54.828125 55.146873 54.46875Q55.38125 54.09375 55.5375 53.46875Q55.69375 52.828125 55.69375 52.171875Q55.69375 52.09375 55.69375 51.953125Q55.38125 52.453125 54.834373 52.78125Q54.2875 53.09375 53.646873 53.09375Q52.56875 53.09375 51.834373 52.328125Q51.1 51.546875 51.1 50.28125Q51.1 48.96875 51.865623 48.171875Q52.646873 47.375 53.803123 47.375Q54.63125 47.375 55.31875 47.828125Q56.021873 48.28125 56.38125 49.125Q56.740623 49.953125 56.740623 51.53125Q56.740623 53.171875 56.38125 54.15625Q56.0375 55.125 55.31875 55.640625Q54.615623 56.140625 53.678123 56.140625Q52.6625 56.140625 52.021873 55.59375Q51.38125 55.03125 51.25625 54.015625ZM55.56875 50.21875Q55.56875 49.3125 55.084373 48.78125Q54.615623 48.25 53.928123 48.25Q53.225 48.25 52.69375 48.828125Q52.178123 49.390625 52.178123 50.3125Q52.178123 51.125 52.678123 51.640625Q53.178123 52.15625 53.896873 52.15625Q54.63125 52.15625 55.1 51.640625Q55.56875 51.125 55.56875 50.21875ZM58.1 51.765625Q58.1 50.234375 58.4125 49.3125Q58.725 48.375 59.334373 47.875Q59.959373 47.375 60.896873 47.375Q61.584373 47.375 62.1 47.65625Q62.63125 47.9375 62.975 48.46875Q63.31875 48.984375 63.50625 49.734375Q63.69375 50.484375 63.69375 51.765625Q63.69375 53.28125 63.38125 54.203125Q63.084373 55.125 62.459373 55.640625Q61.85 56.140625 60.896873 56.140625Q59.6625 56.140625 58.94375 55.25Q58.1 54.1875 58.1 51.765625ZM59.178123 51.765625Q59.178123 53.875 59.678123 54.578125Q60.178123 55.28125 60.896873 55.28125Q61.63125 55.28125 62.115623 54.578125Q62.615623 53.875 62.615623 51.765625Q62.615623 49.640625 62.115623 48.953125Q61.63125 48.25 60.88125 48.25Q60.1625 48.25 59.725 48.859375Q59.178123 49.640625 59.178123 51.765625ZM65.30312 49.46875Q65.30312 48.546875 65.75625 47.90625Q66.225 47.265625 67.1 47.265625Q67.9125 47.265625 68.44375 47.84375Q68.975 48.421875 68.975 49.53125Q68.975 50.625 68.42812 51.21875Q67.89687 51.796875 67.11562 51.796875Q66.33437 51.796875 65.81875 51.21875Q65.30312 50.640625 65.30312 49.46875ZM67.13125 47.984375Q66.74062 47.984375 66.475 48.328125Q66.225 48.671875 66.225 49.578125Q66.225 50.40625 66.475 50.75Q66.74062 51.078125 67.13125 51.078125Q67.5375 51.078125 67.7875 50.734375Q68.05312 50.390625 68.05312 49.5Q68.05312 48.65625 67.7875 48.328125Q67.52187 47.984375 67.13125 47.984375ZM67.13125 56.3125L71.83437 47.265625L72.69375 47.265625L68.00625 56.3125L67.13125 56.3125ZM70.85 53.984375Q70.85 53.0625 71.30312 52.421875Q71.77187 51.78125 72.6625 51.78125Q73.475 51.78125 74.00625 52.359375Q74.5375 52.921875 74.5375 54.046875Q74.5375 55.140625 73.99062 55.734375Q73.45937 56.3125 72.6625 56.3125Q71.89687 56.3125 71.36562 55.734375Q70.85 55.15625 70.85 53.984375ZM72.69375 52.5Q72.2875 52.5 72.02187 52.84375Q71.77187 53.1875 71.77187 54.09375Q71.77187 54.90625 72.0375 55.25Q72.30312 55.59375 72.69375 55.59375Q73.08437 55.59375 73.35 55.25Q73.61562 54.90625 73.61562 54.0Q73.61562 53.171875 73.35 52.84375Q73.08437 52.5 72.69375 52.5Z" fill-rule="nonzero"/><path fill="#000000" d="M201.88867 318.4L200.8418 318.4L200.8418 311.68124Q200.45117 312.04062 199.82617 312.41562Q199.2168 312.775 198.73242 312.94687L198.73242 311.93124Q199.60742 311.50937 200.26367 310.93124Q200.93555 310.3375 201.2168 309.775L201.88867 309.775L201.88867 318.4Z" fill-rule="nonzero"/><path fill="#000000" d="M342.6726 317.38437L342.6726 318.4L336.9851 318.4Q336.9851 318.025 337.1101 317.66562Q337.32886 317.0875 337.7976 316.525Q338.28198 315.9625 339.18823 315.22812Q340.59448 314.07187 341.07886 313.4Q341.57886 312.72812 341.57886 312.13437Q341.57886 311.50937 341.12573 311.0875Q340.6726 310.65 339.95386 310.65Q339.18823 310.65 338.7351 311.10312Q338.28198 311.55624 338.26636 312.36874L337.18823 312.25937Q337.2976 311.04062 338.01636 310.41562Q338.75073 309.775 339.9851 309.775Q341.21948 309.775 341.93823 310.4625Q342.65698 311.15 342.65698 312.16562Q342.65698 312.68124 342.43823 313.18124Q342.2351 313.66562 341.7351 314.22812Q341.25073 314.775 340.12573 315.72812Q339.1726 316.525 338.89136 316.82187Q338.62573 317.10312 338.45386 317.38437L342.6726 317.38437Z" fill-rule="nonzero"/><path fill="#000000" d="M476.3315 316.13437L477.394 315.99374Q477.5659 316.88437 478.0034 317.29062Q478.4409 317.68124 479.0659 317.68124Q479.8159 317.68124 480.3315 317.16562Q480.84714 316.65 480.84714 315.88437Q480.84714 315.16562 480.36276 314.69687Q479.894 314.2125 479.15964 314.2125Q478.86276 314.2125 478.40964 314.3375L478.53464 313.4Q478.644 313.41562 478.7065 313.41562Q479.3784 313.41562 479.90964 313.07187Q480.4565 312.7125 480.4565 311.97812Q480.4565 311.4 480.0659 311.025Q479.67526 310.63437 479.05026 310.63437Q478.4409 310.63437 478.019 311.025Q477.61276 311.41562 477.5034 312.18124L476.4409 311.99374Q476.6284 310.94687 477.3159 310.36874Q478.0034 309.775 479.019 309.775Q479.72214 309.775 480.3159 310.0875Q480.90964 310.38437 481.22214 310.9Q481.53464 311.41562 481.53464 312.00937Q481.53464 312.55624 481.23776 313.025Q480.9409 313.47812 480.36276 313.74374Q481.11276 313.91562 481.53464 314.47812Q481.9565 315.025 481.9565 315.86874Q481.9565 316.99374 481.1284 317.775Q480.3159 318.55624 479.0659 318.55624Q477.9409 318.55624 477.1909 317.88437Q476.4409 317.19687 476.3315 316.13437Z" fill-rule="nonzero"/><path fill="#000000" d="M618.91235 318.4L618.91235 316.3375L615.1936 316.3375L615.1936 315.36874L619.1155 309.80624L619.97485 309.80624L619.97485 315.36874L621.1311 315.36874L621.1311 316.3375L619.97485 316.3375L619.97485 318.4L618.91235 318.4ZM618.91235 315.36874L618.91235 311.50937L616.22485 315.36874L618.91235 315.36874Z" fill-rule="nonzero"/><path fill="#000000" d="M754.7431 316.15L755.8525 316.05624Q755.9775 316.86874 756.415 317.275Q756.8681 317.68124 757.5087 317.68124Q758.2587 317.68124 758.79 317.10312Q759.3212 316.525 759.3212 315.5875Q759.3212 314.68124 758.8056 314.16562Q758.3056 313.63437 757.4775 313.63437Q756.9775 313.63437 756.5556 313.86874Q756.14935 314.10312 755.915 314.4625L754.9306 314.3375L755.7587 309.93124L760.04 309.93124L760.04 310.93124L756.6025 310.93124L756.14935 313.24374Q756.915 312.69687 757.7587 312.69687Q758.8837 312.69687 759.64935 313.47812Q760.4306 314.25937 760.4306 315.49374Q760.4306 316.65 759.7587 317.50937Q758.9306 318.54062 757.5087 318.54062Q756.33685 318.54062 755.58685 317.88437Q754.8525 317.22812 754.7431 316.15Z" fill-rule="nonzero"/><path fill="#4285f4" d="M245.75735 21.357359L254.24265 21.357359L254.24265 29.84264L245.75735 29.84264Z" fill-rule="nonzero"/><path fill="#1a1a1a" d="M264.89062 29.6L264.89062 21.00625L266.60938 21.00625L268.64062 27.084375Q268.92188 27.94375 269.04688 28.365625Q269.1875 27.896875 269.5 26.990625L271.5625 21.00625L273.09375 21.00625L273.09375 29.6L272.0 29.6L272.0 22.4125L269.5 29.6L268.46875 29.6L265.98438 22.2875L265.98438 29.6L264.89062 29.6ZM278.04688 27.6L279.14062 27.725Q278.89062 28.678125 278.1875 29.209375Q277.48438 29.740625 276.40625 29.740625Q275.04688 29.740625 274.23438 28.896875Q273.4375 28.053125 273.4375 26.5375Q273.4375 24.975 274.25 24.115625Q275.0625 23.240625 276.34375 23.240625Q277.59375 23.240625 278.375 24.084375Q279.17188 24.928125 279.17188 26.475Q279.17188 26.56875 279.17188 26.75625L274.53125 26.75625Q274.59375 27.7875 275.10938 28.334375Q275.625 28.865625 276.40625 28.865625Q276.98438 28.865625 277.39062 28.56875Q277.8125 28.25625 278.04688 27.6ZM274.59375 25.896875L278.0625 25.896875Q278.0 25.1 277.67188 24.709375Q277.15625 24.1 276.35938 24.1Q275.625 24.1 275.125 24.584375Q274.64062 25.06875 274.59375 25.896875ZM280.79688 29.6L280.79688 23.38125L281.73438 23.38125L281.73438 24.25625Q282.03125 23.7875 282.51562 23.521875Q283.0 23.240625 283.625 23.240625Q284.3125 23.240625 284.75 23.521875Q285.20312 23.803125 285.375 24.31875Q286.125 23.240625 287.29688 23.240625Q288.23438 23.240625 288.71875 23.75625Q289.21875 24.25625 289.21875 25.334375L289.21875 29.6L288.17188 29.6L288.17188 25.678125Q288.17188 25.053125 288.0625 24.771875Q287.96875 24.490625 287.70312 24.31875Q287.4375 24.146875 287.0625 24.146875Q286.40625 24.146875 285.96875 24.584375Q285.54688 25.021875 285.54688 25.990625L285.54688 29.6L284.48438 29.6L284.48438 25.553125Q284.48438 24.85 284.21875 24.50625Q283.96875 24.146875 283.39062 24.146875Q282.9375 24.146875 282.5625 24.38125Q282.1875 24.615625 282.01562 25.06875Q281.84375 25.521875 281.84375 26.365625L281.84375 29.6L280.79688 29.6ZM291.40625 26.490625Q291.40625 24.75625 292.35938 23.928125Q293.15625 23.240625 294.3125 23.240625Q295.59375 23.240625 296.40625 24.084375Q297.23438 24.9125 297.23438 26.396875Q297.23438 27.6 296.875 28.2875Q296.51562 28.975 295.8125 29.365625Q295.125 29.740625 294.3125 29.740625Q293.01562 29.740625 292.20312 28.9125Q291.40625 28.06875 291.40625 26.490625ZM292.48438 26.490625Q292.48438 27.678125 293.0 28.271875Q293.53125 28.865625 294.3125 28.865625Q295.10938 28.865625 295.625 28.271875Q296.14062 27.678125 296.14062 26.459375Q296.14062 25.303125 295.60938 24.709375Q295.09375 24.115625 294.3125 24.115625Q293.53125 24.115625 293.0 24.709375Q292.48438 25.2875 292.48438 26.490625ZM298.78125 29.6L298.78125 23.38125L299.73438 23.38125L299.73438 24.31875Q300.09375 23.6625 300.39062 23.459375Q300.70312 23.240625 301.07812 23.240625Q301.60938 23.240625 302.15625 23.56875L301.79688 24.553125Q301.40625 24.31875 301.03125 24.31875Q300.67188 24.31875 300.39062 24.5375Q300.125 24.740625 300.01562 25.115625Q299.82812 25.678125 299.82812 26.334375L299.82812 29.6L298.78125 29.6ZM302.75 31.990625L302.625 31.00625Q302.96875 31.1 303.23438 31.1Q303.57812 31.1 303.78125 30.975Q304.0 30.865625 304.14062 30.6625Q304.23438 30.490625 304.46875 29.865625Q304.48438 29.7875 304.5625 29.615625L302.1875 23.38125L303.32812 23.38125L304.625 26.975Q304.875 27.6625 305.07812 28.428125Q305.26562 27.69375 305.51562 27.00625L306.84375 23.38125L307.89062 23.38125L305.53125 29.709375Q305.14062 30.725 304.9375 31.115625Q304.65625 31.646875 304.28125 31.88125Q303.92188 32.13125 303.42188 32.13125Q303.125 32.13125 302.75 31.990625ZM314.875 29.6L314.875 28.678125Q314.14062 29.740625 312.89062 29.740625Q312.34375 29.740625 311.85938 29.5375Q311.39062 29.31875 311.15625 29.00625Q310.92188 28.678125 310.82812 28.209375Q310.76562 27.9125 310.76562 27.225L310.76562 23.38125L311.82812 23.38125L311.82812 26.834375Q311.82812 27.646875 311.89062 27.94375Q311.98438 28.35 312.29688 28.6Q312.625 28.834375 313.10938 28.834375Q313.57812 28.834375 313.98438 28.6Q314.40625 28.35 314.57812 27.928125Q314.76562 27.50625 314.76562 26.709375L314.76562 23.38125L315.8125 23.38125L315.8125 29.6L314.875 29.6ZM317.375 27.740625L318.40625 27.584375Q318.5 28.209375 318.89062 28.5375Q319.29688 28.865625 320.03125 28.865625Q320.75 28.865625 321.09375 28.584375Q321.45312 28.2875 321.45312 27.88125Q321.45312 27.521875 321.14062 27.31875Q320.92188 27.178125 320.0625 26.959375Q318.90625 26.6625 318.45312 26.459375Q318.01562 26.240625 317.78125 25.865625Q317.54688 25.490625 317.54688 25.021875Q317.54688 24.615625 317.73438 24.25625Q317.92188 23.896875 318.25 23.6625Q318.5 23.490625 318.92188 23.365625Q319.34375 23.240625 319.84375 23.240625Q320.5625 23.240625 321.10938 23.459375Q321.67188 23.6625 321.9375 24.021875Q322.20312 24.38125 322.29688 24.975L321.26562 25.115625Q321.20312 24.646875 320.85938 24.38125Q320.53125 24.1 319.90625 24.1Q319.1875 24.1 318.875 24.35Q318.5625 24.584375 318.5625 24.9125Q318.5625 25.115625 318.6875 25.271875Q318.82812 25.44375 319.09375 25.553125Q319.25 25.615625 320.03125 25.81875Q321.15625 26.13125 321.59375 26.31875Q322.03125 26.50625 322.28125 26.865625Q322.53125 27.225 322.53125 27.771875Q322.53125 28.303125 322.21875 28.771875Q321.92188 29.225 321.34375 29.490625Q320.76562 29.740625 320.03125 29.740625Q318.8125 29.740625 318.17188 29.240625Q317.54688 28.725 317.375 27.740625ZM329.04688 27.6L330.14062 27.725Q329.89062 28.678125 329.1875 29.209375Q328.48438 29.740625 327.40625 29.740625Q326.04688 29.740625 325.23438 28.896875Q324.4375 28.053125 324.4375 26.5375Q324.4375 24.975 325.25 24.115625Q326.0625 23.240625 327.34375 23.240625Q328.59375 23.240625 329.375 24.084375Q330.17188 24.928125 330.17188 26.475Q330.17188 26.56875 330.17188 26.75625L325.53125 26.75625Q325.59375 27.7875 326.10938 28.334375Q326.625 28.865625 327.40625 28.865625Q327.98438 28.865625 328.39062 28.56875Q328.8125 28.25625 329.04688 27.6ZM325.59375 25.896875L329.0625 25.896875Q329.0 25.1 328.67188 24.709375Q328.15625 24.1 327.35938 24.1Q326.625 24.1 326.125 24.584375Q325.64062 25.06875 325.59375 25.896875ZM334.78125 29.6L334.78125 23.38125L335.73438 23.38125L335.73438 24.31875Q336.09375 23.6625 336.39062 23.459375Q336.70312 23.240625 337.07812 23.240625Q337.60938 23.240625 338.15625 23.56875L337.79688 24.553125Q337.40625 24.31875 337.03125 24.31875Q336.67188 24.31875 336.39062 24.5375Q336.125 24.740625 336.01562 25.115625Q335.82812 25.678125 335.82812 26.334375L335.82812 29.6L334.78125 29.6ZM343.04688 27.6L344.14062 27.725Q343.89062 28.678125 343.1875 29.209375Q342.48438 29.740625 341.40625 29.740625Q340.04688 29.740625 339.23438 28.896875Q338.4375 28.053125 338.4375 26.5375Q338.4375 24.975 339.25 24.115625Q340.0625 23.240625 341.34375 23.240625Q342.59375 23.240625 343.375 24.084375Q344.17188 24.928125 344.17188 26.475Q344.17188 26.56875 344.17188 26.75625L339.53125 26.75625Q339.59375 27.7875 340.10938 28.334375Q340.625 28.865625 341.40625 28.865625Q341.98438 28.865625 342.39062 28.56875Q342.8125 28.25625 343.04688 27.6ZM339.59375 25.896875L343.0625 25.896875Q343.0 25.1 342.67188 24.709375Q342.15625 24.1 341.35938 24.1Q340.625 24.1 340.125 24.584375Q339.64062 25.06875 339.59375 25.896875ZM349.82812 29.6L349.82812 28.81875Q349.23438 29.740625 348.09375 29.740625Q347.34375 29.740625 346.71875 29.334375Q346.09375 28.9125 345.75 28.178125Q345.40625 27.44375 345.40625 26.490625Q345.40625 25.56875 345.71875 24.803125Q346.03125 24.0375 346.65625 23.646875Q347.28125 23.240625 348.04688 23.240625Q348.60938 23.240625 349.04688 23.475Q349.48438 23.709375 349.76562 24.084375L349.76562 21.00625L350.8125 21.00625L350.8125 29.6L349.82812 29.6ZM346.5 26.490625Q346.5 27.69375 347.0 28.2875Q347.5 28.865625 348.1875 28.865625Q348.875 28.865625 349.35938 28.303125Q349.84375 27.740625 349.84375 26.584375Q349.84375 25.303125 349.34375 24.709375Q348.85938 24.115625 348.14062 24.115625Q347.4375 24.115625 346.96875 24.69375Q346.5 25.25625 346.5 26.490625ZM356.875 29.6L356.875 28.678125Q356.14062 29.740625 354.89062 29.740625Q354.34375 29.740625 353.85938 29.5375Q353.39062 29.31875 353.15625 29.00625Q352.92188 28.678125 352.82812 28.209375Q352.76562 27.9125 352.76562 27.225L352.76562 23.38125L353.82812 23.38125L353.82812 26.834375Q353.82812 27.646875 353.89062 27.94375Q353.98438 28.35 354.29688 28.6Q354.625 28.834375 355.10938 28.834375Q355.57812 28.834375 355.98438 28.6Q356.40625 28.35 356.57812 27.928125Q356.76562 27.50625 356.76562 26.709375L356.76562 23.38125L357.8125 23.38125L357.8125 29.6L356.875 29.6ZM363.85938 27.31875L364.89062 27.459375Q364.71875 28.521875 364.01562 29.13125Q363.3125 29.740625 362.29688 29.740625Q361.01562 29.740625 360.23438 28.9125Q359.46875 28.06875 359.46875 26.50625Q359.46875 25.50625 359.79688 24.75625Q360.14062 23.990625 360.8125 23.615625Q361.5 23.240625 362.3125 23.240625Q363.3125 23.240625 363.95312 23.75625Q364.60938 24.25625 364.79688 25.209375L363.76562 25.365625Q363.625 24.740625 363.25 24.428125Q362.875 24.1 362.34375 24.1Q361.54688 24.1 361.04688 24.678125Q360.54688 25.240625 360.54688 26.475Q360.54688 27.740625 361.03125 28.303125Q361.51562 28.865625 362.28125 28.865625Q362.90625 28.865625 363.3125 28.490625Q363.73438 28.115625 363.85938 27.31875ZM368.09375 28.6625L368.25 29.584375Q367.79688 29.678125 367.45312 29.678125Q366.875 29.678125 366.5625 29.50625Q366.25 29.31875 366.10938 29.021875Q365.98438 28.725 365.98438 27.771875L365.98438 24.19375L365.21875 24.19375L365.21875 23.38125L365.98438 23.38125L365.98438 21.834375L367.03125 21.209375L367.03125 23.38125L368.09375 23.38125L368.09375 24.19375L367.03125 24.19375L367.03125 27.834375Q367.03125 28.2875 367.07812 28.4125Q367.14062 28.5375 367.26562 28.615625Q367.39062 28.69375 367.625 28.69375Q367.8125 28.69375 368.09375 28.6625ZM368.79688 22.225L368.79688 21.00625L369.85938 21.00625L369.85938 22.225L368.79688 22.225ZM368.79688 29.6L368.79688 23.38125L369.85938 23.38125L369.85938 29.6L368.79688 29.6ZM371.40625 26.490625Q371.40625 24.75625 372.35938 23.928125Q373.15625 23.240625 374.3125 23.240625Q375.59375 23.240625 376.40625 24.084375Q377.23438 24.9125 377.23438 26.396875Q377.23438 27.6 376.875 28.2875Q376.51562 28.975 375.8125 29.365625Q375.125 29.740625 374.3125 29.740625Q373.01562 29.740625 372.20312 28.9125Q371.40625 28.06875 371.40625 26.490625ZM372.48438 26.490625Q372.48438 27.678125 373.0 28.271875Q373.53125 28.865625 374.3125 28.865625Q375.10938 28.865625 375.625 28.271875Q376.14062 27.678125 376.14062 26.459375Q376.14062 25.303125 375.60938 24.709375Q375.09375 24.115625 374.3125 24.115625Q373.53125 24.115625 373.0 24.709375Q372.48438 25.2875 372.48438 26.490625ZM378.79688 29.6L378.79688 23.38125L379.73438 23.38125L379.73438 24.25625Q380.42188 23.240625 381.71875 23.240625Q382.28125 23.240625 382.75 23.44375Q383.23438 23.646875 383.46875 23.975Q383.70312 24.303125 383.79688 24.740625Q383.84375 25.0375 383.84375 25.771875L383.84375 29.6L382.79688 29.6L382.79688 25.81875Q382.79688 25.1625 382.67188 24.85Q382.54688 24.5375 382.23438 24.35Q381.92188 24.146875 381.5 24.146875Q380.82812 24.146875 380.32812 24.584375Q379.84375 25.00625 379.84375 26.19375L379.84375 29.6L378.79688 29.6Z" fill-rule="nonzero"/><path fill="#ea4335" d="M407.0 19.6L412.19617 28.6L401.80383 28.6Z" fill-rule="nonzero"/><path fill="#1a1a1a" d="M421.54688 26.834375L422.60938 26.740625Q422.6875 27.396875 422.96875 27.803125Q423.25 28.209375 423.82812 28.475Q424.42188 28.725 425.15625 28.725Q425.79688 28.725 426.29688 28.5375Q426.79688 28.334375 427.03125 28.00625Q427.28125 27.6625 427.28125 27.271875Q427.28125 26.865625 427.04688 26.56875Q426.8125 26.25625 426.28125 26.053125Q425.92188 25.9125 424.73438 25.63125Q423.5625 25.35 423.09375 25.1Q422.46875 24.771875 422.17188 24.303125Q421.875 23.81875 421.875 23.225Q421.875 22.584375 422.23438 22.021875Q422.60938 21.44375 423.3125 21.1625Q424.03125 20.865625 424.89062 20.865625Q425.84375 20.865625 426.57812 21.178125Q427.3125 21.475 427.70312 22.084375Q428.09375 22.678125 428.125 23.428125L427.03125 23.50625Q426.9375 22.69375 426.42188 22.2875Q425.92188 21.865625 424.9375 21.865625Q423.90625 21.865625 423.4375 22.240625Q422.96875 22.615625 422.96875 23.146875Q422.96875 23.615625 423.29688 23.9125Q423.625 24.209375 425.0 24.521875Q426.39062 24.834375 426.90625 25.06875Q427.65625 25.428125 428.01562 25.959375Q428.375 26.475 428.375 27.178125Q428.375 27.865625 427.98438 28.475Q427.59375 29.06875 426.85938 29.4125Q426.125 29.740625 425.20312 29.740625Q424.03125 29.740625 423.23438 29.4125Q422.45312 29.06875 422.0 28.38125Q421.5625 27.69375 421.54688 26.834375ZM432.09375 28.6625L432.25 29.584375Q431.79688 29.678125 431.45312 29.678125Q430.875 29.678125 430.5625 29.50625Q430.25 29.31875 430.10938 29.021875Q429.98438 28.725 429.98438 27.771875L429.98438 24.19375L429.21875 24.19375L429.21875 23.38125L429.98438 23.38125L429.98438 21.834375L431.03125 21.209375L431.03125 23.38125L432.09375 23.38125L432.09375 24.19375L431.03125 24.19375L431.03125 27.834375Q431.03125 28.2875 431.07812 28.4125Q431.14062 28.5375 431.26562 28.615625Q431.39062 28.69375 431.625 28.69375Q431.8125 28.69375 432.09375 28.6625ZM436.85938 28.834375Q436.26562 29.334375 435.71875 29.5375Q435.1875 29.740625 434.5625 29.740625Q433.53125 29.740625 432.98438 29.240625Q432.4375 28.740625 432.4375 27.959375Q432.4375 27.50625 432.64062 27.13125Q432.84375 26.740625 433.1875 26.521875Q433.53125 26.2875 433.95312 26.178125Q434.25 26.084375 434.89062 26.00625Q436.15625 25.865625 436.76562 25.646875Q436.76562 25.428125 436.76562 25.38125Q436.76562 24.725 436.46875 24.459375Q436.0625 24.115625 435.26562 24.115625Q434.53125 24.115625 434.17188 24.38125Q433.8125 24.63125 433.64062 25.2875L432.60938 25.146875Q432.75 24.490625 433.07812 24.084375Q433.40625 23.678125 434.01562 23.459375Q434.625 23.240625 435.42188 23.240625Q436.21875 23.240625 436.71875 23.428125Q437.21875 23.615625 437.45312 23.896875Q437.6875 24.178125 437.78125 24.615625Q437.82812 24.88125 437.82812 25.584375L437.82812 26.990625Q437.82812 28.459375 437.89062 28.85Q437.96875 29.240625 438.17188 29.6L437.0625 29.6Q436.90625 29.271875 436.85938 28.834375ZM436.76562 26.475Q436.1875 26.709375 435.04688 26.88125Q434.39062 26.975 434.125 27.1Q433.85938 27.209375 433.70312 27.428125Q433.5625 27.646875 433.5625 27.928125Q433.5625 28.35 433.875 28.63125Q434.20312 28.9125 434.8125 28.9125Q435.42188 28.9125 435.89062 28.646875Q436.375 28.38125 436.59375 27.9125Q436.76562 27.553125 436.76562 26.865625L436.76562 26.475ZM439.78125 29.6L439.78125 23.38125L440.73438 23.38125L440.73438 24.31875Q441.09375 23.6625 441.39062 23.459375Q441.70312 23.240625 442.07812 23.240625Q442.60938 23.240625 443.15625 23.56875L442.79688 24.553125Q442.40625 24.31875 442.03125 24.31875Q441.67188 24.31875 441.39062 24.5375Q441.125 24.740625 441.01562 25.115625Q440.82812 25.678125 440.82812 26.334375L440.82812 29.6L439.78125 29.6ZM446.09375 28.6625L446.25 29.584375Q445.79688 29.678125 445.45312 29.678125Q444.875 29.678125 444.5625 29.50625Q444.25 29.31875 444.10938 29.021875Q443.98438 28.725 443.98438 27.771875L443.98438 24.19375L443.21875 24.19375L443.21875 23.38125L443.98438 23.38125L443.98438 21.834375L445.03125 21.209375L445.03125 23.38125L446.09375 23.38125L446.09375 24.19375L445.03125 24.19375L445.03125 27.834375Q445.03125 28.2875 445.07812 28.4125Q445.14062 28.5375 445.26562 28.615625Q445.39062 28.69375 445.625 28.69375Q445.8125 28.69375 446.09375 28.6625ZM450.875 29.6L450.875 28.678125Q450.14062 29.740625 448.89062 29.740625Q448.34375 29.740625 447.85938 29.5375Q447.39062 29.31875 447.15625 29.00625Q446.92188 28.678125 446.82812 28.209375Q446.76562 27.9125 446.76562 27.225L446.76562 23.38125L447.82812 23.38125L447.82812 26.834375Q447.82812 27.646875 447.89062 27.94375Q447.98438 28.35 448.29688 28.6Q448.625 28.834375 449.10938 28.834375Q449.57812 28.834375 449.98438 28.6Q450.40625 28.35 450.57812 27.928125Q450.76562 27.50625 450.76562 26.709375L450.76562 23.38125L451.8125 23.38125L451.8125 29.6L450.875 29.6ZM453.79688 31.990625L453.79688 23.38125L454.75 23.38125L454.75 24.178125Q455.09375 23.709375 455.51562 23.475Q455.95312 23.240625 456.5625 23.240625Q457.35938 23.240625 457.96875 23.646875Q458.57812 24.053125 458.875 24.803125Q459.1875 25.553125 459.1875 26.44375Q459.1875 27.396875 458.84375 28.1625Q458.51562 28.928125 457.85938 29.334375Q457.20312 29.740625 456.48438 29.740625Q455.95312 29.740625 455.53125 29.521875Q455.10938 29.2875 454.84375 28.959375L454.84375 31.990625L453.79688 31.990625ZM454.75 26.521875Q454.75 27.725 455.23438 28.303125Q455.71875 28.865625 456.40625 28.865625Q457.10938 28.865625 457.60938 28.271875Q458.10938 27.678125 458.10938 26.428125Q458.10938 25.240625 457.625 24.6625Q457.14062 24.06875 456.45312 24.06875Q455.78125 24.06875 455.26562 24.69375Q454.75 25.31875 454.75 26.521875ZM466.09375 28.6625L466.25 29.584375Q465.79688 29.678125 465.45312 29.678125Q464.875 29.678125 464.5625 29.50625Q464.25 29.31875 464.10938 29.021875Q463.98438 28.725 463.98438 27.771875L463.98438 24.19375L463.21875 24.19375L463.21875 23.38125L463.98438 23.38125L463.98438 21.834375L465.03125 21.209375L465.03125 23.38125L466.09375 23.38125L466.09375 24.19375L465.03125 24.19375L465.03125 27.834375Q465.03125 28.2875 465.07812 28.4125Q465.14062 28.5375 465.26562 28.615625Q465.39062 28.69375 465.625 28.69375Q465.8125 28.69375 466.09375 28.6625ZM466.79688 22.225L466.79688 21.00625L467.85938 21.00625L467.85938 22.225L466.79688 22.225ZM466.79688 29.6L466.79688 23.38125L467.85938 23.38125L467.85938 29.6L466.79688 29.6ZM469.79688 29.6L469.79688 23.38125L470.73438 23.38125L470.73438 24.25625Q471.03125 23.7875 471.51562 23.521875Q472.0 23.240625 472.625 23.240625Q473.3125 23.240625 473.75 23.521875Q474.20312 23.803125 474.375 24.31875Q475.125 23.240625 476.29688 23.240625Q477.23438 23.240625 477.71875 23.75625Q478.21875 24.25625 478.21875 25.334375L478.21875 29.6L477.17188 29.6L477.17188 25.678125Q477.17188 25.053125 477.0625 24.771875Q476.96875 24.490625 476.70312 24.31875Q476.4375 24.146875 476.0625 24.146875Q475.40625 24.146875 474.96875 24.584375Q474.54688 25.021875 474.54688 25.990625L474.54688 29.6L473.48438 29.6L473.48438 25.553125Q473.48438 24.85 473.21875 24.50625Q472.96875 24.146875 472.39062 24.146875Q471.9375 24.146875 471.5625 24.38125Q471.1875 24.615625 471.01562 25.06875Q470.84375 25.521875 470.84375 26.365625L470.84375 29.6L469.79688 29.6ZM485.04688 27.6L486.14062 27.725Q485.89062 28.678125 485.1875 29.209375Q484.48438 29.740625 483.40625 29.740625Q482.04688 29.740625 481.23438 28.896875Q480.4375 28.053125 480.4375 26.5375Q480.4375 24.975 481.25 24.115625Q482.0625 23.240625 483.34375 23.240625Q484.59375 23.240625 485.375 24.084375Q486.17188 24.928125 486.17188 26.475Q486.17188 26.56875 486.17188 26.75625L481.53125 26.75625Q481.59375 27.7875 482.10938 28.334375Q482.625 28.865625 483.40625 28.865625Q483.98438 28.865625 484.39062 28.56875Q484.8125 28.25625 485.04688 27.6ZM481.59375 25.896875L485.0625 25.896875Q485.0 25.1 484.67188 24.709375Q484.15625 24.1 483.35938 24.1Q482.625 24.1 482.125 24.584375Q481.64062 25.06875 481.59375 25.896875ZM490.78125 29.6L490.78125 23.38125L491.73438 23.38125L491.73438 24.31875Q492.09375 23.6625 492.39062 23.459375Q492.70312 23.240625 493.07812 23.240625Q493.60938 23.240625 494.15625 23.56875L493.79688 24.553125Q493.40625 24.31875 493.03125 24.31875Q492.67188 24.31875 492.39062 24.5375Q492.125 24.740625 492.01562 25.115625Q491.82812 25.678125 491.82812 26.334375L491.82812 29.6L490.78125 29.6ZM499.04688 27.6L500.14062 27.725Q499.89062 28.678125 499.1875 29.209375Q498.48438 29.740625 497.40625 29.740625Q496.04688 29.740625 495.23438 28.896875Q494.4375 28.053125 494.4375 26.5375Q494.4375 24.975 495.25 24.115625Q496.0625 23.240625 497.34375 23.240625Q498.59375 23.240625 499.375 24.084375Q500.17188 24.928125 500.17188 26.475Q500.17188 26.56875 500.17188 26.75625L495.53125 26.75625Q495.59375 27.7875 496.10938 28.334375Q496.625 28.865625 497.40625 28.865625Q497.98438 28.865625 498.39062 28.56875Q498.8125 28.25625 499.04688 27.6ZM495.59375 25.896875L499.0625 25.896875Q499.0 25.1 498.67188 24.709375Q498.15625 24.1 497.35938 24.1Q496.625 24.1 496.125 24.584375Q495.64062 25.06875 495.59375 25.896875ZM505.82812 29.6L505.82812 28.81875Q505.23438 29.740625 504.09375 29.740625Q503.34375 29.740625 502.71875 29.334375Q502.09375 28.9125 501.75 28.178125Q501.40625 27.44375 501.40625 26.490625Q501.40625 25.56875 501.71875 24.803125Q502.03125 24.0375 502.65625 23.646875Q503.28125 23.240625 504.04688 23.240625Q504.60938 23.240625 505.04688 23.475Q505.48438 23.709375 505.76562 24.084375L505.76562 21.00625L506.8125 21.00625L506.8125 29.6L505.82812 29.6ZM502.5 26.490625Q502.5 27.69375 503.0 28.2875Q503.5 28.865625 504.1875 28.865625Q504.875 28.865625 505.35938 28.303125Q505.84375 27.740625 505.84375 26.584375Q505.84375 25.303125 505.34375 24.709375Q504.85938 24.115625 504.14062 24.115625Q503.4375 24.115625 502.96875 24.69375Q502.5 25.25625 502.5 26.490625ZM512.875 29.6L512.875 28.678125Q512.1406 29.740625 510.89062 29.740625Q510.34375 29.740625 509.85938 29.5375Q509.39062 29.31875 509.15625 29.00625Q508.92188 28.678125 508.82812 28.209375Q508.76562 27.9125 508.76562 27.225L508.76562 23.38125L509.82812 23.38125L509.82812 26.834375Q509.82812 27.646875 509.89062 27.94375Q509.98438 28.35 510.29688 28.6Q510.625 28.834375 511.10938 28.834375Q511.57812 28.834375 511.98438 28.6Q512.40625 28.35 512.5781 27.928125Q512.7656 27.50625 512.7656 26.709375L512.7656 23.38125L513.8125 23.38125L513.8125 29.6L512.875 29.6ZM519.8594 27.31875L520.8906 27.459375Q520.71875 28.521875 520.0156 29.13125Q519.3125 29.740625 518.2969 29.740625Q517.0156 29.740625 516.2344 28.9125Q515.46875 28.06875 515.46875 26.50625Q515.46875 25.50625 515.7969 24.75625Q516.1406 23.990625 516.8125 23.615625Q517.5 23.240625 518.3125 23.240625Q519.3125 23.240625 519.9531 23.75625Q520.6094 24.25625 520.7969 25.209375L519.7656 25.365625Q519.625 24.740625 519.25 24.428125Q518.875 24.1 518.34375 24.1Q517.5469 24.1 517.0469 24.678125Q516.5469 25.240625 516.5469 26.475Q516.5469 27.740625 517.03125 28.303125Q517.5156 28.865625 518.28125 28.865625Q518.90625 28.865625 519.3125 28.490625Q519.7344 28.115625 519.8594 27.31875ZM524.09375 28.6625L524.25 29.584375Q523.7969 29.678125 523.4531 29.678125Q522.875 29.678125 522.5625 29.50625Q522.25 29.31875 522.1094 29.021875Q521.9844 28.725 521.9844 27.771875L521.9844 24.19375L521.21875 24.19375L521.21875 23.38125L521.9844 23.38125L521.9844 21.834375L523.03125 21.209375L523.03125 23.38125L524.09375 23.38125L524.09375 24.19375L523.03125 24.19375L523.03125 27.834375Q523.03125 28.2875 523.0781 28.4125Q523.1406 28.5375 523.2656 28.615625Q523.3906 28.69375 523.625 28.69375Q523.8125 28.69375 524.09375 28.6625ZM524.7969 22.225L524.7969 21.00625L525.8594 21.00625L525.8594 22.225L524.7969 22.225ZM524.7969 29.6L524.7969 23.38125L525.8594 23.38125L525.8594 29.6L524.7969 29.6ZM527.40625 26.490625Q527.40625 24.75625 528.3594 23.928125Q529.15625 23.240625 530.3125 23.240625Q531.59375 23.240625 532.40625 24.084375Q533.2344 24.9125 533.2344 26.396875Q533.2344 27.6 532.875 28.2875Q532.5156 28.975 531.8125 29.365625Q531.125 29.740625 530.3125 29.740625Q529.0156 29.740625 528.2031 28.9125Q527.40625 28.06875 527.40625 26.490625ZM528.4844 26.490625Q528.4844 27.678125 529.0 28.271875Q529.53125 28.865625 530.3125 28.865625Q531.1094 28.865625 531.625 28.271875Q532.1406 27.678125 532.1406 26.459375Q532.1406 25.303125 531.6094 24.709375Q531.09375 24.115625 530.3125 24.115625Q529.53125 24.115625 529.0 24.709375Q528.4844 25.2875 528.4844 26.490625ZM534.7969 29.6L534.7969 23.38125L535.7344 23.38125L535.7344 24.25625Q536.4219 23.240625 537.71875 23.240625Q538.28125 23.240625 538.75 23.44375Q539.2344 23.646875 539.46875 23.975Q539.7031 24.303125 539.7969 24.740625Q539.84375 25.0375 539.84375 25.771875L539.84375 29.6L538.7969 29.6L538.7969 25.81875Q538.7969 25.1625 538.6719 24.85Q538.5469 24.5375 538.2344 24.35Q537.9219 24.146875 537.5 24.146875Q536.8281 24.146875 536.3281 24.584375Q535.84375 25.00625 535.84375 26.19375L535.84375 29.6L534.7969 29.6Z" fill-rule="nonzero"/></svg>
\ No newline at end of file
diff --git a/_content/blog/gopls-scalability/precise-pruning.excalidraw b/_content/blog/gopls-scalability/precise-pruning.excalidraw
new file mode 100644
index 0000000..a85f2a2
--- /dev/null
+++ b/_content/blog/gopls-scalability/precise-pruning.excalidraw
@@ -0,0 +1,467 @@
+{
+  "type": "excalidraw",
+  "version": 2,
+  "source": "https://excalidraw.com",
+  "elements": [
+    {
+      "type": "text",
+      "version": 131,
+      "versionNonce": 1812852806,
+      "isDeleted": false,
+      "id": "KLTqqKKdKPvv_uyDvIH56",
+      "fillStyle": "hachure",
+      "strokeWidth": 1,
+      "strokeStyle": "solid",
+      "roughness": 1,
+      "opacity": 100,
+      "angle": 0,
+      "x": 708.5,
+      "y": 226,
+      "strokeColor": "#1e1e1e",
+      "backgroundColor": "transparent",
+      "width": 117.1875,
+      "height": 192,
+      "seed": 1764650250,
+      "groupIds": [],
+      "frameId": null,
+      "roundness": null,
+      "boundElements": [],
+      "updated": 1694183553513,
+      "link": null,
+      "locked": false,
+      "fontSize": 20,
+      "fontFamily": 3,
+      "text": "package a\n\nimport \"b\"\n\nfunc A() {\n  b.B1()\n}\n",
+      "textAlign": "left",
+      "verticalAlign": "top",
+      "containerId": null,
+      "originalText": "package a\n\nimport \"b\"\n\nfunc A() {\n  b.B1()\n}\n",
+      "lineHeight": 1.2,
+      "baseline": 187
+    },
+    {
+      "type": "text",
+      "version": 382,
+      "versionNonce": 198113875,
+      "isDeleted": false,
+      "id": "PScOU98GRKKPi_JFEXVOd",
+      "fillStyle": "hachure",
+      "strokeWidth": 1,
+      "strokeStyle": "solid",
+      "roughness": 1,
+      "opacity": 100,
+      "angle": 0,
+      "x": 927.5,
+      "y": 225.5,
+      "strokeColor": "#1e1e1e",
+      "backgroundColor": "transparent",
+      "width": 152.34375,
+      "height": 168,
+      "seed": 1266662166,
+      "groupIds": [],
+      "frameId": null,
+      "roundness": null,
+      "boundElements": [
+        {
+          "id": "dlPrM6ifKO8CYIQGgVSjT",
+          "type": "arrow"
+        }
+      ],
+      "updated": 1692713327603,
+      "link": null,
+      "locked": false,
+      "fontSize": 20,
+      "fontFamily": 3,
+      "text": "package b\n\nimport \"c\"\n\nfunc B1() {}\n\nfunc B2(C) {}",
+      "textAlign": "left",
+      "verticalAlign": "top",
+      "containerId": null,
+      "originalText": "package b\n\nimport \"c\"\n\nfunc B1() {}\n\nfunc B2(C) {}",
+      "lineHeight": 1.2,
+      "baseline": 163
+    },
+    {
+      "type": "text",
+      "version": 245,
+      "versionNonce": 410175581,
+      "isDeleted": false,
+      "id": "qdvLpJXYgRj1saqwYi-Ff",
+      "fillStyle": "hachure",
+      "strokeWidth": 1,
+      "strokeStyle": "solid",
+      "roughness": 1,
+      "opacity": 100,
+      "angle": 0,
+      "x": 1152.2400512695312,
+      "y": 227.5,
+      "strokeColor": "#1e1e1e",
+      "backgroundColor": "transparent",
+      "width": 175.78125,
+      "height": 72,
+      "seed": 343723210,
+      "groupIds": [],
+      "frameId": null,
+      "roundness": null,
+      "boundElements": [
+        {
+          "id": "dlPrM6ifKO8CYIQGgVSjT",
+          "type": "arrow"
+        }
+      ],
+      "updated": 1692713327603,
+      "link": null,
+      "locked": false,
+      "fontSize": 20,
+      "fontFamily": 3,
+      "text": "package c\n\ntype C struct{}",
+      "textAlign": "left",
+      "verticalAlign": "top",
+      "containerId": null,
+      "originalText": "package c\n\ntype C struct{}",
+      "lineHeight": 1.2,
+      "baseline": 67
+    },
+    {
+      "type": "arrow",
+      "version": 565,
+      "versionNonce": 61253530,
+      "isDeleted": false,
+      "id": "Jo5-4OWytSqsWKyCCv0zs",
+      "fillStyle": "hachure",
+      "strokeWidth": 2,
+      "strokeStyle": "solid",
+      "roughness": 1,
+      "opacity": 100,
+      "angle": 0,
+      "x": 774,
+      "y": 373,
+      "strokeColor": "#1971c2",
+      "backgroundColor": "transparent",
+      "width": 208.5,
+      "height": 68.5,
+      "seed": 662000458,
+      "groupIds": [],
+      "frameId": null,
+      "roundness": {
+        "type": 2
+      },
+      "boundElements": [],
+      "updated": 1694183684530,
+      "link": null,
+      "locked": false,
+      "startBinding": null,
+      "endBinding": null,
+      "lastCommittedPoint": null,
+      "startArrowhead": null,
+      "endArrowhead": "arrow",
+      "points": [
+        [
+          0,
+          0
+        ],
+        [
+          35.5,
+          9
+        ],
+        [
+          168.5,
+          -59.5
+        ],
+        [
+          208.5,
+          -49
+        ]
+      ]
+    },
+    {
+      "type": "arrow",
+      "version": 1142,
+      "versionNonce": 1980630022,
+      "isDeleted": false,
+      "id": "dlPrM6ifKO8CYIQGgVSjT",
+      "fillStyle": "hachure",
+      "strokeWidth": 2,
+      "strokeStyle": "solid",
+      "roughness": 1,
+      "opacity": 100,
+      "angle": 0,
+      "x": 1034.8165343534565,
+      "y": 397.5,
+      "strokeColor": "#1971c2",
+      "backgroundColor": "transparent",
+      "width": 176.6140607076302,
+      "height": 106.6081098471862,
+      "seed": 371482890,
+      "groupIds": [],
+      "frameId": null,
+      "roundness": {
+        "type": 2
+      },
+      "boundElements": [],
+      "updated": 1694183691116,
+      "link": null,
+      "locked": false,
+      "startBinding": {
+        "elementId": "PScOU98GRKKPi_JFEXVOd",
+        "focus": 0.5314594691269521,
+        "gap": 4
+      },
+      "endBinding": {
+        "elementId": "qdvLpJXYgRj1saqwYi-Ff",
+        "focus": -0.035506896849099974,
+        "gap": 5
+      },
+      "lastCommittedPoint": null,
+      "startArrowhead": null,
+      "endArrowhead": "arrow",
+      "points": [
+        [
+          0,
+          0
+        ],
+        [
+          22.480751639833215,
+          13.6081098471862
+        ],
+        [
+          91.90307013873098,
+          -13
+        ],
+        [
+          154.18346564654348,
+          -65
+        ],
+        [
+          176.6140607076302,
+          -93
+        ]
+      ]
+    },
+    {
+      "type": "text",
+      "version": 591,
+      "versionNonce": 995219209,
+      "isDeleted": false,
+      "id": "0e_RgDukEA7a4s-hPUdUD",
+      "fillStyle": "hachure",
+      "strokeWidth": 2,
+      "strokeStyle": "dashed",
+      "roughness": 1,
+      "opacity": 100,
+      "angle": 0,
+      "x": 856,
+      "y": 176,
+      "strokeColor": "#1e1e1e",
+      "backgroundColor": "transparent",
+      "width": 272.5196838378906,
+      "height": 25,
+      "seed": 442549770,
+      "groupIds": [],
+      "frameId": null,
+      "roundness": null,
+      "boundElements": [],
+      "updated": 1693423437323,
+      "link": null,
+      "locked": false,
+      "fontSize": 20,
+      "fontFamily": 1,
+      "text": "Package a doesn't reach c.",
+      "textAlign": "left",
+      "verticalAlign": "top",
+      "containerId": null,
+      "originalText": "Package a doesn't reach c.",
+      "lineHeight": 1.25,
+      "baseline": 18
+    },
+    {
+      "type": "arrow",
+      "version": 260,
+      "versionNonce": 116791514,
+      "isDeleted": false,
+      "id": "zUxFciaTErQ7nvkqFE4xZ",
+      "fillStyle": "hachure",
+      "strokeWidth": 1,
+      "strokeStyle": "dotted",
+      "roughness": 1,
+      "opacity": 100,
+      "angle": 0,
+      "x": 994.6198891769479,
+      "y": 367.4258069066833,
+      "strokeColor": "#1971c2",
+      "backgroundColor": "transparent",
+      "width": 0.17108894564739785,
+      "height": 21.464261588495276,
+      "seed": 390419155,
+      "groupIds": [],
+      "frameId": null,
+      "roundness": {
+        "type": 2
+      },
+      "boundElements": [],
+      "updated": 1694183723060,
+      "link": null,
+      "locked": false,
+      "startBinding": null,
+      "endBinding": null,
+      "lastCommittedPoint": null,
+      "startArrowhead": null,
+      "endArrowhead": null,
+      "points": [
+        [
+          0,
+          0
+        ],
+        [
+          0.17108894564739785,
+          -21.464261588495276
+        ]
+      ]
+    },
+    {
+      "type": "text",
+      "version": 245,
+      "versionNonce": 838129114,
+      "isDeleted": false,
+      "id": "lwbMT4vlzQR_SD-RiLk_N",
+      "fillStyle": "hachure",
+      "strokeWidth": 2,
+      "strokeStyle": "solid",
+      "roughness": 2,
+      "opacity": 100,
+      "angle": 0,
+      "x": 788.7196044921875,
+      "y": 416,
+      "strokeColor": "#1971c2",
+      "backgroundColor": "transparent",
+      "width": 148.08029174804688,
+      "height": 20,
+      "seed": 89416659,
+      "groupIds": [],
+      "frameId": null,
+      "roundness": null,
+      "boundElements": [
+        {
+          "id": "J_bngpKx7t6uKubZgsPUc",
+          "type": "arrow"
+        }
+      ],
+      "updated": 1694183688957,
+      "link": null,
+      "locked": false,
+      "fontSize": 16,
+      "fontFamily": 1,
+      "text": "Note: no edge here",
+      "textAlign": "left",
+      "verticalAlign": "top",
+      "containerId": null,
+      "originalText": "Note: no edge here",
+      "lineHeight": 1.25,
+      "baseline": 14
+    },
+    {
+      "type": "arrow",
+      "version": 295,
+      "versionNonce": 1976297030,
+      "isDeleted": false,
+      "id": "J_bngpKx7t6uKubZgsPUc",
+      "fillStyle": "hachure",
+      "strokeWidth": 1,
+      "strokeStyle": "solid",
+      "roughness": 1,
+      "opacity": 100,
+      "angle": 0,
+      "x": 869.1993031227533,
+      "y": 408.50000000000006,
+      "strokeColor": "#1971c2",
+      "backgroundColor": "transparent",
+      "width": 109.02030136943415,
+      "height": 51.00000000000006,
+      "seed": 1824236701,
+      "groupIds": [],
+      "frameId": null,
+      "roundness": {
+        "type": 2
+      },
+      "boundElements": [],
+      "updated": 1694183686932,
+      "link": null,
+      "locked": false,
+      "startBinding": {
+        "elementId": "lwbMT4vlzQR_SD-RiLk_N",
+        "focus": -0.1187385614826156,
+        "gap": 7.499999999999943
+      },
+      "endBinding": null,
+      "lastCommittedPoint": null,
+      "startArrowhead": null,
+      "endArrowhead": "arrow",
+      "points": [
+        [
+          0,
+          0
+        ],
+        [
+          29.304081675061752,
+          -31.38513730898279
+        ],
+        [
+          62.87164228631707,
+          -47.22297253820352
+        ],
+        [
+          109.02030136943415,
+          -51.00000000000006
+        ]
+      ]
+    },
+    {
+      "type": "line",
+      "version": 250,
+      "versionNonce": 471171581,
+      "isDeleted": false,
+      "id": "N9ei1d7la2SGB-r_dfxam",
+      "fillStyle": "hachure",
+      "strokeWidth": 1,
+      "strokeStyle": "solid",
+      "roughness": 1,
+      "opacity": 100,
+      "angle": 0,
+      "x": 851.7196044921875,
+      "y": 203.5,
+      "strokeColor": "#1e1e1e",
+      "backgroundColor": "transparent",
+      "width": 288,
+      "height": 0.5,
+      "seed": 953081427,
+      "groupIds": [],
+      "frameId": null,
+      "roundness": {
+        "type": 2
+      },
+      "boundElements": [],
+      "updated": 1692713333701,
+      "link": null,
+      "locked": false,
+      "startBinding": null,
+      "endBinding": null,
+      "lastCommittedPoint": null,
+      "startArrowhead": null,
+      "endArrowhead": null,
+      "points": [
+        [
+          0,
+          0
+        ],
+        [
+          288,
+          -0.5
+        ]
+      ]
+    }
+  ],
+  "appState": {
+    "gridSize": null,
+    "viewBackgroundColor": "#ffffff"
+  },
+  "files": {}
+}
\ No newline at end of file
diff --git a/_content/blog/gopls-scalability/precise-pruning.png b/_content/blog/gopls-scalability/precise-pruning.png
new file mode 100644
index 0000000..7340336
--- /dev/null
+++ b/_content/blog/gopls-scalability/precise-pruning.png
Binary files differ
diff --git a/_content/blog/gopls-scalability/separate-compilation.excalidraw b/_content/blog/gopls-scalability/separate-compilation.excalidraw
new file mode 100644
index 0000000..298881c
--- /dev/null
+++ b/_content/blog/gopls-scalability/separate-compilation.excalidraw
@@ -0,0 +1,253 @@
+{
+  "type": "excalidraw",
+  "version": 2,
+  "source": "https://excalidraw.com",
+  "elements": [
+    {
+      "type": "text",
+      "version": 514,
+      "versionNonce": 1931030537,
+      "isDeleted": false,
+      "id": "8vCu0eNhvFjFZlYF6qMKK",
+      "fillStyle": "hachure",
+      "strokeWidth": 1,
+      "strokeStyle": "dashed",
+      "roughness": 2,
+      "opacity": 100,
+      "angle": 0,
+      "x": 634.2309083984003,
+      "y": 256.521234050657,
+      "strokeColor": "#1e1e1e",
+      "backgroundColor": "transparent",
+      "width": 304.6875,
+      "height": 216,
+      "seed": 588319446,
+      "groupIds": [
+        "catUVsDqTBTKpq-jyjQOz"
+      ],
+      "frameId": null,
+      "roundness": null,
+      "boundElements": [],
+      "updated": 1693404698186,
+      "link": null,
+      "locked": false,
+      "fontSize": 20,
+      "fontFamily": 3,
+      "text": "package foo\n\nimport \"fmt\"\n\ntype Bar struct{}\n\nfunc (Bar) Baz(s string) {\n    fmt.Println(s)\n}",
+      "textAlign": "left",
+      "verticalAlign": "top",
+      "containerId": null,
+      "originalText": "package foo\n\nimport \"fmt\"\n\ntype Bar struct{}\n\nfunc (Bar) Baz(s string) {\n    fmt.Println(s)\n}",
+      "lineHeight": 1.2,
+      "baseline": 211
+    },
+    {
+      "type": "rectangle",
+      "version": 466,
+      "versionNonce": 584127881,
+      "isDeleted": false,
+      "id": "OIDpNpialGaYan-IDYsYp",
+      "fillStyle": "hachure",
+      "strokeWidth": 1,
+      "strokeStyle": "dashed",
+      "roughness": 2,
+      "opacity": 100,
+      "angle": 0,
+      "x": 607,
+      "y": 211,
+      "strokeColor": "#1e1e1e",
+      "backgroundColor": "transparent",
+      "width": 348.79070653208913,
+      "height": 312.7659493429823,
+      "seed": 160776214,
+      "groupIds": [
+        "catUVsDqTBTKpq-jyjQOz"
+      ],
+      "frameId": null,
+      "roundness": {
+        "type": 3
+      },
+      "boundElements": [
+        {
+          "id": "YfmaTvV7nBEdCO5v-yiWr",
+          "type": "arrow"
+        }
+      ],
+      "updated": 1693403971747,
+      "link": null,
+      "locked": false
+    },
+    {
+      "type": "rectangle",
+      "version": 479,
+      "versionNonce": 2124129159,
+      "isDeleted": false,
+      "id": "3OdPvUKZKpvbzhl_B5fid",
+      "fillStyle": "hachure",
+      "strokeWidth": 1,
+      "strokeStyle": "dashed",
+      "roughness": 2,
+      "opacity": 100,
+      "angle": 0,
+      "x": 1030.5,
+      "y": 186.5,
+      "strokeColor": "#1e1e1e",
+      "backgroundColor": "transparent",
+      "width": 342,
+      "height": 341.4999999999999,
+      "seed": 1665264074,
+      "groupIds": [
+        "3Jg1OxEHWdnyfhavtSLUi"
+      ],
+      "frameId": null,
+      "roundness": {
+        "type": 3
+      },
+      "boundElements": [
+        {
+          "id": "YfmaTvV7nBEdCO5v-yiWr",
+          "type": "arrow"
+        }
+      ],
+      "updated": 1693403971747,
+      "link": null,
+      "locked": false
+    },
+    {
+      "type": "text",
+      "version": 518,
+      "versionNonce": 1221397097,
+      "isDeleted": false,
+      "id": "eeZNpC4B2KUVuWE7MReMW",
+      "fillStyle": "hachure",
+      "strokeWidth": 1,
+      "strokeStyle": "dashed",
+      "roughness": 2,
+      "opacity": 100,
+      "angle": 0,
+      "x": 1051,
+      "y": 207,
+      "strokeColor": "#1e1e1e",
+      "backgroundColor": "transparent",
+      "width": 288.3397216796875,
+      "height": 275,
+      "seed": 1807097994,
+      "groupIds": [
+        "3Jg1OxEHWdnyfhavtSLUi"
+      ],
+      "frameId": null,
+      "roundness": null,
+      "boundElements": [
+        {
+          "id": "YfmaTvV7nBEdCO5v-yiWr",
+          "type": "arrow"
+        }
+      ],
+      "updated": 1693423357961,
+      "link": null,
+      "locked": false,
+      "fontSize": 20,
+      "fontFamily": 1,
+      "text": "Summary\n  package foo\n  import \"fmt\"\n  type Bar struct{}\n  func (Bar) Baz(s string)\n\nReferences:\n  fmt.Println: line 8, column 6\n\nMethods:\n  Baz(string): Bar",
+      "textAlign": "left",
+      "verticalAlign": "top",
+      "containerId": null,
+      "originalText": "Summary\n  package foo\n  import \"fmt\"\n  type Bar struct{}\n  func (Bar) Baz(s string)\n\nReferences:\n  fmt.Println: line 8, column 6\n\nMethods:\n  Baz(string): Bar",
+      "lineHeight": 1.25,
+      "baseline": 268
+    },
+    {
+      "type": "arrow",
+      "version": 1132,
+      "versionNonce": 1317771943,
+      "isDeleted": false,
+      "id": "YfmaTvV7nBEdCO5v-yiWr",
+      "fillStyle": "hachure",
+      "strokeWidth": 1,
+      "strokeStyle": "solid",
+      "roughness": 2,
+      "opacity": 100,
+      "angle": 0,
+      "x": 971.7907065320892,
+      "y": 367.1869308196924,
+      "strokeColor": "#1e1e1e",
+      "backgroundColor": "transparent",
+      "width": 44.20929346791081,
+      "height": 1.1750564695992125,
+      "seed": 1753119510,
+      "groupIds": [],
+      "frameId": null,
+      "roundness": {
+        "type": 2
+      },
+      "boundElements": [],
+      "updated": 1693403971747,
+      "link": null,
+      "locked": false,
+      "startBinding": {
+        "elementId": "OIDpNpialGaYan-IDYsYp",
+        "gap": 16,
+        "focus": -0.03876047338293693
+      },
+      "endBinding": {
+        "elementId": "3OdPvUKZKpvbzhl_B5fid",
+        "gap": 14.5,
+        "focus": -0.0915169218121322
+      },
+      "lastCommittedPoint": null,
+      "startArrowhead": null,
+      "endArrowhead": "triangle",
+      "points": [
+        [
+          0,
+          0
+        ],
+        [
+          44.20929346791081,
+          1.1750564695992125
+        ]
+      ]
+    },
+    {
+      "type": "text",
+      "version": 215,
+      "versionNonce": 1703806793,
+      "isDeleted": false,
+      "id": "Ca7svLx55Vj_MCQV-LfdJ",
+      "fillStyle": "hachure",
+      "strokeWidth": 1,
+      "strokeStyle": "dashed",
+      "roughness": 2,
+      "opacity": 100,
+      "angle": 0.17623928971477731,
+      "x": 1254.5398740640808,
+      "y": 209.57474426703484,
+      "strokeColor": "#1e1e1e",
+      "backgroundColor": "transparent",
+      "width": 99.139892578125,
+      "height": 25,
+      "seed": 1290026070,
+      "groupIds": [],
+      "frameId": null,
+      "roundness": null,
+      "boundElements": [],
+      "updated": 1693403971747,
+      "link": null,
+      "locked": false,
+      "fontSize": 20,
+      "fontFamily": 1,
+      "text": "File Cache",
+      "textAlign": "left",
+      "verticalAlign": "top",
+      "containerId": null,
+      "originalText": "File Cache",
+      "lineHeight": 1.25,
+      "baseline": 18
+    }
+  ],
+  "appState": {
+    "gridSize": null,
+    "viewBackgroundColor": "#ffffff"
+  },
+  "files": {}
+}
\ No newline at end of file
diff --git a/_content/blog/gopls-scalability/separate-compilation.png b/_content/blog/gopls-scalability/separate-compilation.png
new file mode 100644
index 0000000..68cadf7
--- /dev/null
+++ b/_content/blog/gopls-scalability/separate-compilation.png
Binary files differ