Skip to content

Instantly share code, notes, and snippets.

@maxkapur
Last active April 13, 2022 09:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save maxkapur/e907289b457ebee8e3a191cbda7f7381 to your computer and use it in GitHub Desktop.
Save maxkapur/e907289b457ebee8e3a191cbda7f7381 to your computer and use it in GitHub Desktop.
SchoolLocation
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"id": "3c51999f-c422-4923-948f-df379d47293f",
"metadata": {
"tags": []
},
"source": [
"# The school location problem\n",
"\n",
"Max Kapur | [maxkapur.com](https://www.maxkapur.com) | Apr. 13, 2022\n",
"\n",
"Video supplement: https://youtu.be/bjreiQRHerU\n",
"\n",
"## Introduction\n",
"\n",
"The school location problem is a kind of [facility location problem](https://en.wikipedia.org/wiki/Facility_location_problem). The city needs to build $n$ schools to serve $m$ families. Each family's location (in Euclidean space) is given by $p_j$, and their children will attend the school *closest* to home, so the distance they travel to school is \n",
"$$\\min_{i = 1 \\dots n}\\left\\{\\lVert x_i - p_j \\rVert_q \\right\\}.$$\n",
"Here $x_i$ is the location of school $i$ and $\\lVert \\cdot \\rVert_q$ is some $p$-norm. In this demonstration, we will use the 2-norm or Euclidean distance, but the 1-norm or taxicab distance may be more appropriate in an urban context. \n",
"\n",
"Our goal is to choose the $x_i$ that *minimize,* in some sense, the distance between families and schools. Since we already assume that families attend the nearest school, this means we are dealing with some kind of \"minimin\" problem. \"Minimin\" and \"maximax\" problems tend to be more computationally challenging than \"minimax\" or \"maximin\" problems because of the [convexity/concavity](https://en.wikipedia.org/wiki/Convex_function) of the max/min operators. Often, the most effective way to formulate a minimin problem is by adding binary variables that identify the minimum. \n",
"\n",
"In the school location problem, we will define the [social cost](https://en.wikipedia.org/wiki/Social_cost) as the *longest* distance that any student travels to school. The reason is that in a public planning problem such as this, it is important to prevent jealousy among the families. By minimizing the longest distance, we ensure that no single family has a longer commute than everyone else. (To see why this is true, suppose that some plan does give a single family the longest commute. Then their commute defines the social cost for this plan, and by nudging their school infinitesimally closer to them, we can decrease the social cost; therefore this plan is not optimal.) The plan that minimizes the average distance, for example, typically does not have this property.\n",
"\n",
"## Problem formulation\n",
"\n",
"Incorporating the social cost function above, we can now write the school location problem. It has a delightful \"minimaximin\" form:\n",
"$$\\text{minimize}\\quad \\max_{j = 1 \\dots m} \\Bigl\\{ \\min_{i = 1 \\dots n}\\left\\{\\lVert x_i - p_j \\rVert_2 \\right\\} \\Bigr\\}$$\n",
"To get this into a form that our solver can handle, we first let the variable $t$ stand in for the maximal distance:\n",
"$$\\begin{align}\n",
"\\text{minimize}\\quad & t \\\\\n",
"\\text{subject to}\\quad &t \\geq\\min_{i = 1 \\dots n}\\left\\{\\lVert x_i - p_j \\rVert_2 \\right\\}, &j = 1 \\dots m\n",
"\\end{align}$$\n",
"Since $t$ is greater than or equal to all of the inputs to the maximum, it is greater than or equal to the value of the maximum itself. And since this is a minimization problem, $t$ will be decreased \"automatically\" until it equals the value of the value of the maximum.\n",
"\n",
"On the other hand, because this is *not* a maximization problem, the same trick doesn't work for getting rid of the minimum. Instead, let's introduce a binary variable $s_{ij}$ that equals one if family $j$'s children attend school $i$, and zero otherwise. Now we can write the problem as follows.\n",
"$$\\begin{align}\n",
"\\text{minimize}\\quad & t \\\\\n",
"\\text{subject to}\\quad &t \\geq \\lVert x_i - p_j \\rVert_2 - M (1 - s_{ij}), & i = 1\\dots n,~j = 1 \\dots m \\\\\n",
"& \\sum_{i=1}^n s_{ij} \\geq 1, & j = 1\\dots m \\\\\n",
"& s_{ij} \\in \\{0, 1\\}, & i = 1\\dots n,~j = 1 \\dots m\n",
"\\end{align}$$\n",
"Here $M$ is a large, positive constant. If $s_{ij} = 0$, then the first constraint is vacuous; if $s_{ij} = 1$, the first constraint activates as required. The second constraint simply says that everyone must attend at least one school. By the minimization argument, it is easy to see that this constraint will hold with equality \"automatically.\"\n",
"\n",
"We will use the [Splitting Conic Solver](https://github.com/cvxgrp/scs) (SCS) to solve the relaxations of this problem. The first constraint in the problem above is already convex, but the solver will process it more efficiently if we input it in the following conic form:\n",
"$$\\begin{align}\n",
"\\text{minimize}\\quad & t \\\\\n",
"\\text{subject to}\\quad &\n",
"\\begin{bmatrix}d_{ij} \\\\ x_i - p_j \\end{bmatrix} \\in C_2, & i = 1\\dots n,~j = 1 \\dots m \\\\\n",
"& t \\geq d_{ij} - M (1 - s_{ij}), & i = 1\\dots n,~j = 1 \\dots m \\\\\n",
"& \\sum_{i=1}^n s_{ij} \\geq 1, & j = 1\\dots m \\\\\n",
"& s_{ij} \\in \\{0, 1\\}, & i = 1\\dots n,~j = 1 \\dots m\n",
"\\end{align}$$\n",
"Here $C_2 = \\bigl\\{(h, y) \\in \\mathbb{R}^3 : h \\geq \\lVert y \\rVert_2 \\bigr\\}$ is known as the *second-order cone.* \n",
"\n",
"## Solving the problem in Julia\n",
"\n",
"We will use Julia and the [JuMP](https://jump.dev) modeling language to express this problem as a second-order conic program (SOCP). We will use SCS to solve the relaxations, and the [Juniper](https://lanl-ansi.github.io/Juniper.jl/stable/) package to handle the binary variables."
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "8ce1635b-ee26-47be-afc3-52591d9ff67f",
"metadata": {},
"outputs": [],
"source": [
"using Plots\n",
"using JuMP\n",
"using Juniper, SCS\n",
"using LinearAlgebra\n",
"using Test"
]
},
{
"cell_type": "markdown",
"id": "f472e472-4ad2-45f5-adb7-8df1cc95d4d1",
"metadata": {},
"source": [
"Let's generate a fake instance of the problem with $m = 20$ families and $n = 3$ schools. The plot shows the location of each household."
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "suspended-anxiety",
"metadata": {},
"outputs": [
{
"data": {
"image/svg+xml": [
"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n",
"<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"600\" height=\"600\" viewBox=\"0 0 2400 2400\">\n",
"<defs>\n",
" <clipPath id=\"clip410\">\n",
" <rect x=\"0\" y=\"0\" width=\"2400\" height=\"2400\"/>\n",
" </clipPath>\n",
"</defs>\n",
"<path clip-path=\"url(#clip410)\" d=\"\n",
"M0 2400 L2400 2400 L2400 0 L0 0 Z\n",
" \" fill=\"#ffffff\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<defs>\n",
" <clipPath id=\"clip411\">\n",
" <rect x=\"480\" y=\"240\" width=\"1681\" height=\"1681\"/>\n",
" </clipPath>\n",
"</defs>\n",
"<path clip-path=\"url(#clip410)\" d=\"\n",
"M193.936 2261.17 L2352.76 2261.17 L2352.76 47.2441 L193.936 47.2441 Z\n",
" \" fill=\"#ffffff\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<defs>\n",
" <clipPath id=\"clip412\">\n",
" <rect x=\"193\" y=\"47\" width=\"2160\" height=\"2215\"/>\n",
" </clipPath>\n",
"</defs>\n",
"<polyline clip-path=\"url(#clip412)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 193.936,2261.17 193.936,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip412)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 553.739,2261.17 553.739,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip412)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 913.543,2261.17 913.543,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip412)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 1273.35,2261.17 1273.35,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip412)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 1633.15,2261.17 1633.15,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip412)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 1992.95,2261.17 1992.95,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip412)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 2352.76,2261.17 2352.76,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip410)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 193.936,2261.17 2352.76,2261.17 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip410)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 193.936,2261.17 193.936,2242.27 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip410)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 553.739,2261.17 553.739,2242.27 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip410)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 913.543,2261.17 913.543,2242.27 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip410)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 1273.35,2261.17 1273.35,2242.27 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip410)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 1633.15,2261.17 1633.15,2242.27 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip410)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 1992.95,2261.17 1992.95,2242.27 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip410)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 2352.76,2261.17 2352.76,2242.27 \n",
" \"/>\n",
"<path clip-path=\"url(#clip410)\" d=\"M140.962 2306.74 L170.638 2306.74 L170.638 2310.67 L140.962 2310.67 L140.962 2306.74 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip410)\" d=\"M181.54 2319.63 L189.179 2319.63 L189.179 2293.27 L180.869 2294.93 L180.869 2290.67 L189.133 2289.01 L193.809 2289.01 L193.809 2319.63 L201.448 2319.63 L201.448 2323.57 L181.54 2323.57 L181.54 2319.63 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip410)\" d=\"M210.892 2317.69 L215.776 2317.69 L215.776 2323.57 L210.892 2323.57 L210.892 2317.69 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip410)\" d=\"M226.008 2289.01 L244.364 2289.01 L244.364 2292.94 L230.29 2292.94 L230.29 2301.42 Q231.308 2301.07 232.327 2300.91 Q233.346 2300.72 234.364 2300.72 Q240.151 2300.72 243.531 2303.89 Q246.91 2307.06 246.91 2312.48 Q246.91 2318.06 243.438 2321.16 Q239.966 2324.24 233.646 2324.24 Q231.471 2324.24 229.202 2323.87 Q226.957 2323.5 224.549 2322.76 L224.549 2318.06 Q226.633 2319.19 228.855 2319.75 Q231.077 2320.3 233.554 2320.3 Q237.558 2320.3 239.896 2318.2 Q242.234 2316.09 242.234 2312.48 Q242.234 2308.87 239.896 2306.76 Q237.558 2304.66 233.554 2304.66 Q231.679 2304.66 229.804 2305.07 Q227.952 2305.49 226.008 2306.37 L226.008 2289.01 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip410)\" d=\"M500.267 2306.74 L529.943 2306.74 L529.943 2310.67 L500.267 2310.67 L500.267 2306.74 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip410)\" d=\"M540.846 2319.63 L548.485 2319.63 L548.485 2293.27 L540.175 2294.93 L540.175 2290.67 L548.438 2289.01 L553.114 2289.01 L553.114 2319.63 L560.753 2319.63 L560.753 2323.57 L540.846 2323.57 L540.846 2319.63 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip410)\" d=\"M570.198 2317.69 L575.082 2317.69 L575.082 2323.57 L570.198 2323.57 L570.198 2317.69 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip410)\" d=\"M595.267 2292.09 Q591.656 2292.09 589.827 2295.65 Q588.022 2299.19 588.022 2306.32 Q588.022 2313.43 589.827 2316.99 Q591.656 2320.54 595.267 2320.54 Q598.901 2320.54 600.707 2316.99 Q602.535 2313.43 602.535 2306.32 Q602.535 2299.19 600.707 2295.65 Q598.901 2292.09 595.267 2292.09 M595.267 2288.38 Q601.077 2288.38 604.133 2292.99 Q607.211 2297.57 607.211 2306.32 Q607.211 2315.05 604.133 2319.66 Q601.077 2324.24 595.267 2324.24 Q589.457 2324.24 586.378 2319.66 Q583.322 2315.05 583.322 2306.32 Q583.322 2297.57 586.378 2292.99 Q589.457 2288.38 595.267 2288.38 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip410)\" d=\"M860.568 2306.74 L890.244 2306.74 L890.244 2310.67 L860.568 2310.67 L860.568 2306.74 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip410)\" d=\"M910.337 2292.09 Q906.726 2292.09 904.897 2295.65 Q903.091 2299.19 903.091 2306.32 Q903.091 2313.43 904.897 2316.99 Q906.726 2320.54 910.337 2320.54 Q913.971 2320.54 915.776 2316.99 Q917.605 2313.43 917.605 2306.32 Q917.605 2299.19 915.776 2295.65 Q913.971 2292.09 910.337 2292.09 M910.337 2288.38 Q916.147 2288.38 919.202 2292.99 Q922.281 2297.57 922.281 2306.32 Q922.281 2315.05 919.202 2319.66 Q916.147 2324.24 910.337 2324.24 Q904.526 2324.24 901.448 2319.66 Q898.392 2315.05 898.392 2306.32 Q898.392 2297.57 901.448 2292.99 Q904.526 2288.38 910.337 2288.38 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip410)\" d=\"M930.499 2317.69 L935.383 2317.69 L935.383 2323.57 L930.499 2323.57 L930.499 2317.69 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip410)\" d=\"M945.614 2289.01 L963.971 2289.01 L963.971 2292.94 L949.897 2292.94 L949.897 2301.42 Q950.915 2301.07 951.934 2300.91 Q952.952 2300.72 953.971 2300.72 Q959.758 2300.72 963.137 2303.89 Q966.517 2307.06 966.517 2312.48 Q966.517 2318.06 963.045 2321.16 Q959.572 2324.24 953.253 2324.24 Q951.077 2324.24 948.809 2323.87 Q946.563 2323.5 944.156 2322.76 L944.156 2318.06 Q946.239 2319.19 948.461 2319.75 Q950.684 2320.3 953.16 2320.3 Q957.165 2320.3 959.503 2318.2 Q961.841 2316.09 961.841 2312.48 Q961.841 2308.87 959.503 2306.76 Q957.165 2304.66 953.16 2304.66 Q951.285 2304.66 949.41 2305.07 Q947.559 2305.49 945.614 2306.37 L945.614 2289.01 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip410)\" d=\"M1250.73 2292.09 Q1247.12 2292.09 1245.29 2295.65 Q1243.49 2299.19 1243.49 2306.32 Q1243.49 2313.43 1245.29 2316.99 Q1247.12 2320.54 1250.73 2320.54 Q1254.36 2320.54 1256.17 2316.99 Q1258 2313.43 1258 2306.32 Q1258 2299.19 1256.17 2295.65 Q1254.36 2292.09 1250.73 2292.09 M1250.73 2288.38 Q1256.54 2288.38 1259.6 2292.99 Q1262.67 2297.57 1262.67 2306.32 Q1262.67 2315.05 1259.6 2319.66 Q1256.54 2324.24 1250.73 2324.24 Q1244.92 2324.24 1241.84 2319.66 Q1238.79 2315.05 1238.79 2306.32 Q1238.79 2297.57 1241.84 2292.99 Q1244.92 2288.38 1250.73 2288.38 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip410)\" d=\"M1270.89 2317.69 L1275.78 2317.69 L1275.78 2323.57 L1270.89 2323.57 L1270.89 2317.69 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip410)\" d=\"M1295.96 2292.09 Q1292.35 2292.09 1290.52 2295.65 Q1288.72 2299.19 1288.72 2306.32 Q1288.72 2313.43 1290.52 2316.99 Q1292.35 2320.54 1295.96 2320.54 Q1299.6 2320.54 1301.4 2316.99 Q1303.23 2313.43 1303.23 2306.32 Q1303.23 2299.19 1301.4 2295.65 Q1299.6 2292.09 1295.96 2292.09 M1295.96 2288.38 Q1301.77 2288.38 1304.83 2292.99 Q1307.91 2297.57 1307.91 2306.32 Q1307.91 2315.05 1304.83 2319.66 Q1301.77 2324.24 1295.96 2324.24 Q1290.15 2324.24 1287.07 2319.66 Q1284.02 2315.05 1284.02 2306.32 Q1284.02 2297.57 1287.07 2292.99 Q1290.15 2288.38 1295.96 2288.38 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip410)\" d=\"M1611.03 2292.09 Q1607.42 2292.09 1605.59 2295.65 Q1603.79 2299.19 1603.79 2306.32 Q1603.79 2313.43 1605.59 2316.99 Q1607.42 2320.54 1611.03 2320.54 Q1614.67 2320.54 1616.47 2316.99 Q1618.3 2313.43 1618.3 2306.32 Q1618.3 2299.19 1616.47 2295.65 Q1614.67 2292.09 1611.03 2292.09 M1611.03 2288.38 Q1616.84 2288.38 1619.9 2292.99 Q1622.98 2297.57 1622.98 2306.32 Q1622.98 2315.05 1619.9 2319.66 Q1616.84 2324.24 1611.03 2324.24 Q1605.22 2324.24 1602.14 2319.66 Q1599.09 2315.05 1599.09 2306.32 Q1599.09 2297.57 1602.14 2292.99 Q1605.22 2288.38 1611.03 2288.38 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip410)\" d=\"M1631.19 2317.69 L1636.08 2317.69 L1636.08 2323.57 L1631.19 2323.57 L1631.19 2317.69 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip410)\" d=\"M1646.31 2289.01 L1664.67 2289.01 L1664.67 2292.94 L1650.59 2292.94 L1650.59 2301.42 Q1651.61 2301.07 1652.63 2300.91 Q1653.65 2300.72 1654.67 2300.72 Q1660.45 2300.72 1663.83 2303.89 Q1667.21 2307.06 1667.21 2312.48 Q1667.21 2318.06 1663.74 2321.16 Q1660.27 2324.24 1653.95 2324.24 Q1651.77 2324.24 1649.5 2323.87 Q1647.26 2323.5 1644.85 2322.76 L1644.85 2318.06 Q1646.93 2319.19 1649.16 2319.75 Q1651.38 2320.3 1653.86 2320.3 Q1657.86 2320.3 1660.2 2318.2 Q1662.54 2316.09 1662.54 2312.48 Q1662.54 2308.87 1660.2 2306.76 Q1657.86 2304.66 1653.86 2304.66 Q1651.98 2304.66 1650.11 2305.07 Q1648.25 2305.49 1646.31 2306.37 L1646.31 2289.01 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip410)\" d=\"M1960.11 2319.63 L1967.74 2319.63 L1967.74 2293.27 L1959.43 2294.93 L1959.43 2290.67 L1967.7 2289.01 L1972.37 2289.01 L1972.37 2319.63 L1980.01 2319.63 L1980.01 2323.57 L1960.11 2323.57 L1960.11 2319.63 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip410)\" d=\"M1989.46 2317.69 L1994.34 2317.69 L1994.34 2323.57 L1989.46 2323.57 L1989.46 2317.69 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip410)\" d=\"M2014.53 2292.09 Q2010.92 2292.09 2009.09 2295.65 Q2007.28 2299.19 2007.28 2306.32 Q2007.28 2313.43 2009.09 2316.99 Q2010.92 2320.54 2014.53 2320.54 Q2018.16 2320.54 2019.97 2316.99 Q2021.8 2313.43 2021.8 2306.32 Q2021.8 2299.19 2019.97 2295.65 Q2018.16 2292.09 2014.53 2292.09 M2014.53 2288.38 Q2020.34 2288.38 2023.39 2292.99 Q2026.47 2297.57 2026.47 2306.32 Q2026.47 2315.05 2023.39 2319.66 Q2020.34 2324.24 2014.53 2324.24 Q2008.72 2324.24 2005.64 2319.66 Q2002.58 2315.05 2002.58 2306.32 Q2002.58 2297.57 2005.64 2292.99 Q2008.72 2288.38 2014.53 2288.38 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip410)\" d=\"M2320.41 2319.63 L2328.05 2319.63 L2328.05 2293.27 L2319.74 2294.93 L2319.74 2290.67 L2328 2289.01 L2332.67 2289.01 L2332.67 2319.63 L2340.31 2319.63 L2340.31 2323.57 L2320.41 2323.57 L2320.41 2319.63 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip410)\" d=\"M2349.76 2317.69 L2354.64 2317.69 L2354.64 2323.57 L2349.76 2323.57 L2349.76 2317.69 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip410)\" d=\"M2364.87 2289.01 L2383.23 2289.01 L2383.23 2292.94 L2369.16 2292.94 L2369.16 2301.42 Q2370.17 2301.07 2371.19 2300.91 Q2372.21 2300.72 2373.23 2300.72 Q2379.02 2300.72 2382.4 2303.89 Q2385.78 2307.06 2385.78 2312.48 Q2385.78 2318.06 2382.3 2321.16 Q2378.83 2324.24 2372.51 2324.24 Q2370.34 2324.24 2368.07 2323.87 Q2365.82 2323.5 2363.42 2322.76 L2363.42 2318.06 Q2365.5 2319.19 2367.72 2319.75 Q2369.94 2320.3 2372.42 2320.3 Q2376.42 2320.3 2378.76 2318.2 Q2381.1 2316.09 2381.1 2312.48 Q2381.1 2308.87 2378.76 2306.76 Q2376.42 2304.66 2372.42 2304.66 Q2370.55 2304.66 2368.67 2305.07 Q2366.82 2305.49 2364.87 2306.37 L2364.87 2289.01 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><polyline clip-path=\"url(#clip412)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 193.936,2261.17 2352.76,2261.17 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip412)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 193.936,1892.18 2352.76,1892.18 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip412)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 193.936,1523.19 2352.76,1523.19 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip412)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 193.936,1154.21 2352.76,1154.21 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip412)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 193.936,785.219 2352.76,785.219 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip412)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 193.936,416.231 2352.76,416.231 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip412)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 193.936,47.2441 2352.76,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip410)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 193.936,2261.17 193.936,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip410)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 193.936,2261.17 212.834,2261.17 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip410)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 193.936,1892.18 212.834,1892.18 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip410)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 193.936,1523.19 212.834,1523.19 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip410)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 193.936,1154.21 212.834,1154.21 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip410)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 193.936,785.219 212.834,785.219 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip410)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 193.936,416.231 212.834,416.231 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip410)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 193.936,47.2441 212.834,47.2441 \n",
" \"/>\n",
"<path clip-path=\"url(#clip410)\" d=\"M51.9875 2261.62 L81.6633 2261.62 L81.6633 2265.55 L51.9875 2265.55 L51.9875 2261.62 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip410)\" d=\"M92.566 2274.51 L100.205 2274.51 L100.205 2248.15 L91.8947 2249.81 L91.8947 2245.55 L100.159 2243.89 L104.834 2243.89 L104.834 2274.51 L112.473 2274.51 L112.473 2278.45 L92.566 2278.45 L92.566 2274.51 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip410)\" d=\"M121.918 2272.57 L126.802 2272.57 L126.802 2278.45 L121.918 2278.45 L121.918 2272.57 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip410)\" d=\"M137.033 2243.89 L155.39 2243.89 L155.39 2247.82 L141.316 2247.82 L141.316 2256.3 Q142.334 2255.95 143.353 2255.79 Q144.371 2255.6 145.39 2255.6 Q151.177 2255.6 154.556 2258.77 Q157.936 2261.94 157.936 2267.36 Q157.936 2272.94 154.464 2276.04 Q150.992 2279.12 144.672 2279.12 Q142.496 2279.12 140.228 2278.75 Q137.982 2278.38 135.575 2277.64 L135.575 2272.94 Q137.658 2274.07 139.881 2274.63 Q142.103 2275.18 144.58 2275.18 Q148.584 2275.18 150.922 2273.08 Q153.26 2270.97 153.26 2267.36 Q153.26 2263.75 150.922 2261.64 Q148.584 2259.54 144.58 2259.54 Q142.705 2259.54 140.83 2259.95 Q138.978 2260.37 137.033 2261.25 L137.033 2243.89 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip410)\" d=\"M50.9921 1892.63 L80.6679 1892.63 L80.6679 1896.57 L50.9921 1896.57 L50.9921 1892.63 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip410)\" d=\"M91.5706 1905.53 L99.2095 1905.53 L99.2095 1879.16 L90.8993 1880.83 L90.8993 1876.57 L99.1632 1874.9 L103.839 1874.9 L103.839 1905.53 L111.478 1905.53 L111.478 1909.46 L91.5706 1909.46 L91.5706 1905.53 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip410)\" d=\"M120.922 1903.58 L125.807 1903.58 L125.807 1909.46 L120.922 1909.46 L120.922 1903.58 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip410)\" d=\"M145.992 1877.98 Q142.381 1877.98 140.552 1881.54 Q138.746 1885.09 138.746 1892.22 Q138.746 1899.32 140.552 1902.89 Q142.381 1906.43 145.992 1906.43 Q149.626 1906.43 151.431 1902.89 Q153.26 1899.32 153.26 1892.22 Q153.26 1885.09 151.431 1881.54 Q149.626 1877.98 145.992 1877.98 M145.992 1874.28 Q151.802 1874.28 154.857 1878.88 Q157.936 1883.47 157.936 1892.22 Q157.936 1900.94 154.857 1905.55 Q151.802 1910.13 145.992 1910.13 Q140.181 1910.13 137.103 1905.55 Q134.047 1900.94 134.047 1892.22 Q134.047 1883.47 137.103 1878.88 Q140.181 1874.28 145.992 1874.28 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip410)\" d=\"M51.9875 1523.64 L81.6633 1523.64 L81.6633 1527.58 L51.9875 1527.58 L51.9875 1523.64 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip410)\" d=\"M101.756 1508.99 Q98.1447 1508.99 96.316 1512.56 Q94.5104 1516.1 94.5104 1523.23 Q94.5104 1530.33 96.316 1533.9 Q98.1447 1537.44 101.756 1537.44 Q105.39 1537.44 107.196 1533.9 Q109.024 1530.33 109.024 1523.23 Q109.024 1516.1 107.196 1512.56 Q105.39 1508.99 101.756 1508.99 M101.756 1505.29 Q107.566 1505.29 110.621 1509.89 Q113.7 1514.48 113.7 1523.23 Q113.7 1531.95 110.621 1536.56 Q107.566 1541.14 101.756 1541.14 Q95.9456 1541.14 92.8669 1536.56 Q89.8114 1531.95 89.8114 1523.23 Q89.8114 1514.48 92.8669 1509.89 Q95.9456 1505.29 101.756 1505.29 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip410)\" d=\"M121.918 1534.59 L126.802 1534.59 L126.802 1540.47 L121.918 1540.47 L121.918 1534.59 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip410)\" d=\"M137.033 1505.91 L155.39 1505.91 L155.39 1509.85 L141.316 1509.85 L141.316 1518.32 Q142.334 1517.97 143.353 1517.81 Q144.371 1517.63 145.39 1517.63 Q151.177 1517.63 154.556 1520.8 Q157.936 1523.97 157.936 1529.39 Q157.936 1534.96 154.464 1538.07 Q150.992 1541.14 144.672 1541.14 Q142.496 1541.14 140.228 1540.77 Q137.982 1540.4 135.575 1539.66 L135.575 1534.96 Q137.658 1536.1 139.881 1536.65 Q142.103 1537.21 144.58 1537.21 Q148.584 1537.21 150.922 1535.1 Q153.26 1533 153.26 1529.39 Q153.26 1525.77 150.922 1523.67 Q148.584 1521.56 144.58 1521.56 Q142.705 1521.56 140.83 1521.98 Q138.978 1522.39 137.033 1523.27 L137.033 1505.91 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip410)\" d=\"M100.76 1140 Q97.1493 1140 95.3206 1143.57 Q93.515 1147.11 93.515 1154.24 Q93.515 1161.35 95.3206 1164.91 Q97.1493 1168.45 100.76 1168.45 Q104.395 1168.45 106.2 1164.91 Q108.029 1161.35 108.029 1154.24 Q108.029 1147.11 106.2 1143.57 Q104.395 1140 100.76 1140 M100.76 1136.3 Q106.571 1136.3 109.626 1140.91 Q112.705 1145.49 112.705 1154.24 Q112.705 1162.97 109.626 1167.57 Q106.571 1172.16 100.76 1172.16 Q94.9502 1172.16 91.8715 1167.57 Q88.816 1162.97 88.816 1154.24 Q88.816 1145.49 91.8715 1140.91 Q94.9502 1136.3 100.76 1136.3 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip410)\" d=\"M120.922 1165.61 L125.807 1165.61 L125.807 1171.49 L120.922 1171.49 L120.922 1165.61 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip410)\" d=\"M145.992 1140 Q142.381 1140 140.552 1143.57 Q138.746 1147.11 138.746 1154.24 Q138.746 1161.35 140.552 1164.91 Q142.381 1168.45 145.992 1168.45 Q149.626 1168.45 151.431 1164.91 Q153.26 1161.35 153.26 1154.24 Q153.26 1147.11 151.431 1143.57 Q149.626 1140 145.992 1140 M145.992 1136.3 Q151.802 1136.3 154.857 1140.91 Q157.936 1145.49 157.936 1154.24 Q157.936 1162.97 154.857 1167.57 Q151.802 1172.16 145.992 1172.16 Q140.181 1172.16 137.103 1167.57 Q134.047 1162.97 134.047 1154.24 Q134.047 1145.49 137.103 1140.91 Q140.181 1136.3 145.992 1136.3 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip410)\" d=\"M101.756 771.017 Q98.1447 771.017 96.316 774.582 Q94.5104 778.124 94.5104 785.253 Q94.5104 792.36 96.316 795.925 Q98.1447 799.466 101.756 799.466 Q105.39 799.466 107.196 795.925 Q109.024 792.36 109.024 785.253 Q109.024 778.124 107.196 774.582 Q105.39 771.017 101.756 771.017 M101.756 767.314 Q107.566 767.314 110.621 771.92 Q113.7 776.503 113.7 785.253 Q113.7 793.98 110.621 798.587 Q107.566 803.17 101.756 803.17 Q95.9456 803.17 92.8669 798.587 Q89.8114 793.98 89.8114 785.253 Q89.8114 776.503 92.8669 771.92 Q95.9456 767.314 101.756 767.314 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip410)\" d=\"M121.918 796.619 L126.802 796.619 L126.802 802.499 L121.918 802.499 L121.918 796.619 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip410)\" d=\"M137.033 767.939 L155.39 767.939 L155.39 771.874 L141.316 771.874 L141.316 780.346 Q142.334 779.999 143.353 779.837 Q144.371 779.652 145.39 779.652 Q151.177 779.652 154.556 782.823 Q157.936 785.994 157.936 791.411 Q157.936 796.989 154.464 800.091 Q150.992 803.17 144.672 803.17 Q142.496 803.17 140.228 802.8 Q137.982 802.429 135.575 801.689 L135.575 796.989 Q137.658 798.124 139.881 798.679 Q142.103 799.235 144.58 799.235 Q148.584 799.235 150.922 797.128 Q153.26 795.022 153.26 791.411 Q153.26 787.8 150.922 785.693 Q148.584 783.587 144.58 783.587 Q142.705 783.587 140.83 784.003 Q138.978 784.42 137.033 785.3 L137.033 767.939 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip410)\" d=\"M91.5706 429.576 L99.2095 429.576 L99.2095 403.211 L90.8993 404.877 L90.8993 400.618 L99.1632 398.951 L103.839 398.951 L103.839 429.576 L111.478 429.576 L111.478 433.511 L91.5706 433.511 L91.5706 429.576 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip410)\" d=\"M120.922 427.632 L125.807 427.632 L125.807 433.511 L120.922 433.511 L120.922 427.632 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip410)\" d=\"M145.992 402.03 Q142.381 402.03 140.552 405.595 Q138.746 409.137 138.746 416.266 Q138.746 423.373 140.552 426.937 Q142.381 430.479 145.992 430.479 Q149.626 430.479 151.431 426.937 Q153.26 423.373 153.26 416.266 Q153.26 409.137 151.431 405.595 Q149.626 402.03 145.992 402.03 M145.992 398.326 Q151.802 398.326 154.857 402.933 Q157.936 407.516 157.936 416.266 Q157.936 424.993 154.857 429.599 Q151.802 434.183 145.992 434.183 Q140.181 434.183 137.103 429.599 Q134.047 424.993 134.047 416.266 Q134.047 407.516 137.103 402.933 Q140.181 398.326 145.992 398.326 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip410)\" d=\"M92.566 60.5889 L100.205 60.5889 L100.205 34.2233 L91.8947 35.89 L91.8947 31.6308 L100.159 29.9641 L104.834 29.9641 L104.834 60.5889 L112.473 60.5889 L112.473 64.5241 L92.566 64.5241 L92.566 60.5889 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip410)\" d=\"M121.918 58.6445 L126.802 58.6445 L126.802 64.5241 L121.918 64.5241 L121.918 58.6445 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip410)\" d=\"M137.033 29.9641 L155.39 29.9641 L155.39 33.8993 L141.316 33.8993 L141.316 42.3714 Q142.334 42.0242 143.353 41.8622 Q144.371 41.677 145.39 41.677 Q151.177 41.677 154.556 44.8483 Q157.936 48.0196 157.936 53.4362 Q157.936 59.0149 154.464 62.1167 Q150.992 65.1954 144.672 65.1954 Q142.496 65.1954 140.228 64.825 Q137.982 64.4547 135.575 63.7139 L135.575 59.0149 Q137.658 60.1491 139.881 60.7047 Q142.103 61.2602 144.58 61.2602 Q148.584 61.2602 150.922 59.1538 Q153.26 57.0473 153.26 53.4362 Q153.26 49.8251 150.922 47.7186 Q148.584 45.6122 144.58 45.6122 Q142.705 45.6122 140.83 46.0288 Q138.978 46.4455 137.033 47.3251 L137.033 29.9641 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip412)\" d=\"M826.4 628.779 L826.4 660.779 L858.4 660.779 L858.4 628.779 L826.4 628.779 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"none\"/>\n",
"<path clip-path=\"url(#clip412)\" d=\"M1043.21 414.209 L1043.21 446.209 L1075.21 446.209 L1075.21 414.209 L1043.21 414.209 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"none\"/>\n",
"<path clip-path=\"url(#clip412)\" d=\"M1060.79 402.313 L1060.79 434.313 L1092.79 434.313 L1092.79 402.313 L1060.79 402.313 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"none\"/>\n",
"<path clip-path=\"url(#clip412)\" d=\"M673.141 927.701 L673.141 959.701 L705.141 959.701 L705.141 927.701 L673.141 927.701 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"none\"/>\n",
"<path clip-path=\"url(#clip412)\" d=\"M627.658 1543.12 L627.658 1575.12 L659.658 1575.12 L659.658 1543.12 L627.658 1543.12 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"none\"/>\n",
"<path clip-path=\"url(#clip412)\" d=\"M583.279 1052.77 L583.279 1084.77 L615.279 1084.77 L615.279 1052.77 L583.279 1052.77 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"none\"/>\n",
"<path clip-path=\"url(#clip412)\" d=\"M626.029 818.69 L626.029 850.69 L658.029 850.69 L658.029 818.69 L626.029 818.69 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"none\"/>\n",
"<path clip-path=\"url(#clip412)\" d=\"M481.37 1587.03 L481.37 1619.03 L513.37 1619.03 L513.37 1587.03 L481.37 1587.03 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"none\"/>\n",
"<path clip-path=\"url(#clip412)\" d=\"M1825.08 1748.93 L1825.08 1780.93 L1857.08 1780.93 L1857.08 1748.93 L1825.08 1748.93 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"none\"/>\n",
"<path clip-path=\"url(#clip412)\" d=\"M1000.89 1846.01 L1000.89 1878.01 L1032.89 1878.01 L1032.89 1846.01 L1000.89 1846.01 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"none\"/>\n",
"<path clip-path=\"url(#clip412)\" d=\"M714.706 580.217 L714.706 612.217 L746.706 612.217 L746.706 580.217 L714.706 580.217 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"none\"/>\n",
"<path clip-path=\"url(#clip412)\" d=\"M720.034 704.691 L720.034 736.691 L752.034 736.691 L752.034 704.691 L720.034 704.691 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"none\"/>\n",
"<path clip-path=\"url(#clip412)\" d=\"M655.621 1537.13 L655.621 1569.13 L687.621 1569.13 L687.621 1537.13 L655.621 1537.13 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"none\"/>\n",
"<path clip-path=\"url(#clip412)\" d=\"M1895.9 779.513 L1895.9 811.513 L1927.9 811.513 L1927.9 779.513 L1895.9 779.513 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"none\"/>\n",
"<path clip-path=\"url(#clip412)\" d=\"M1455.76 1774.96 L1455.76 1806.96 L1487.76 1806.96 L1487.76 1774.96 L1455.76 1774.96 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"none\"/>\n",
"<path clip-path=\"url(#clip412)\" d=\"M2012.83 1401.53 L2012.83 1433.53 L2044.83 1433.53 L2044.83 1401.53 L2012.83 1401.53 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"none\"/>\n",
"<path clip-path=\"url(#clip412)\" d=\"M2031.95 1054.31 L2031.95 1086.31 L2063.95 1086.31 L2063.95 1054.31 L2031.95 1054.31 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"none\"/>\n",
"<path clip-path=\"url(#clip412)\" d=\"M1486.39 497.575 L1486.39 529.575 L1518.39 529.575 L1518.39 497.575 L1486.39 497.575 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"none\"/>\n",
"<path clip-path=\"url(#clip412)\" d=\"M1731.51 1648.2 L1731.51 1680.2 L1763.51 1680.2 L1763.51 1648.2 L1731.51 1648.2 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"none\"/>\n",
"<path clip-path=\"url(#clip412)\" d=\"M905.543 461.782 L905.543 493.782 L937.543 493.782 L937.543 461.782 L905.543 461.782 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"none\"/>\n",
"<path clip-path=\"url(#clip410)\" d=\"\n",
"M1859.03 224.722 L2280.8 224.722 L2280.8 121.042 L1859.03 121.042 Z\n",
" \" fill=\"#ffffff\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip410)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 1859.03,224.722 2280.8,224.722 2280.8,121.042 1859.03,121.042 1859.03,224.722 \n",
" \"/>\n",
"<path clip-path=\"url(#clip410)\" d=\"M1929.38 147.282 L1929.38 198.482 L1980.58 198.482 L1980.58 147.282 L1929.38 147.282 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"none\"/>\n",
"<path clip-path=\"url(#clip410)\" d=\"M2067.43 154.143 L2067.43 157.685 L2063.35 157.685 Q2061.06 157.685 2060.16 158.611 Q2059.28 159.537 2059.28 161.944 L2059.28 164.236 L2066.29 164.236 L2066.29 167.546 L2059.28 167.546 L2059.28 190.162 L2055 190.162 L2055 167.546 L2050.92 167.546 L2050.92 164.236 L2055 164.236 L2055 162.43 Q2055 158.102 2057.01 156.134 Q2059.03 154.143 2063.4 154.143 L2067.43 154.143 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip410)\" d=\"M2082.78 177.129 Q2077.61 177.129 2075.62 178.31 Q2073.63 179.49 2073.63 182.338 Q2073.63 184.606 2075.11 185.949 Q2076.62 187.268 2079.19 187.268 Q2082.73 187.268 2084.86 184.768 Q2087.01 182.245 2087.01 178.078 L2087.01 177.129 L2082.78 177.129 M2091.27 175.37 L2091.27 190.162 L2087.01 190.162 L2087.01 186.226 Q2085.55 188.587 2083.38 189.722 Q2081.2 190.833 2078.05 190.833 Q2074.07 190.833 2071.71 188.611 Q2069.37 186.365 2069.37 182.615 Q2069.37 178.24 2072.29 176.018 Q2075.23 173.796 2081.04 173.796 L2087.01 173.796 L2087.01 173.379 Q2087.01 170.439 2085.07 168.842 Q2083.15 167.222 2079.65 167.222 Q2077.43 167.222 2075.32 167.754 Q2073.22 168.287 2071.27 169.351 L2071.27 165.416 Q2073.61 164.514 2075.81 164.074 Q2078.01 163.611 2080.09 163.611 Q2085.72 163.611 2088.49 166.527 Q2091.27 169.444 2091.27 175.37 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip410)\" d=\"M2120.23 169.213 Q2121.83 166.342 2124.05 164.977 Q2126.27 163.611 2129.28 163.611 Q2133.33 163.611 2135.53 166.458 Q2137.73 169.282 2137.73 174.513 L2137.73 190.162 L2133.45 190.162 L2133.45 174.652 Q2133.45 170.926 2132.13 169.12 Q2130.81 167.314 2128.1 167.314 Q2124.79 167.314 2122.87 169.514 Q2120.95 171.713 2120.95 175.509 L2120.95 190.162 L2116.66 190.162 L2116.66 174.652 Q2116.66 170.902 2115.35 169.12 Q2114.03 167.314 2111.27 167.314 Q2108.01 167.314 2106.09 169.537 Q2104.16 171.736 2104.16 175.509 L2104.16 190.162 L2099.88 190.162 L2099.88 164.236 L2104.16 164.236 L2104.16 168.264 Q2105.62 165.879 2107.66 164.745 Q2109.7 163.611 2112.5 163.611 Q2115.32 163.611 2117.29 165.046 Q2119.28 166.481 2120.23 169.213 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip410)\" d=\"M2146.22 164.236 L2150.48 164.236 L2150.48 190.162 L2146.22 190.162 L2146.22 164.236 M2146.22 154.143 L2150.48 154.143 L2150.48 159.537 L2146.22 159.537 L2146.22 154.143 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip410)\" d=\"M2159.4 154.143 L2163.66 154.143 L2163.66 190.162 L2159.4 190.162 L2159.4 154.143 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip410)\" d=\"M2172.57 164.236 L2176.83 164.236 L2176.83 190.162 L2172.57 190.162 L2172.57 164.236 M2172.57 154.143 L2176.83 154.143 L2176.83 159.537 L2172.57 159.537 L2172.57 154.143 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip410)\" d=\"M2207.91 176.134 L2207.91 178.217 L2188.33 178.217 Q2188.61 182.615 2190.97 184.93 Q2193.35 187.222 2197.59 187.222 Q2200.04 187.222 2202.34 186.62 Q2204.65 186.018 2206.92 184.814 L2206.92 188.842 Q2204.63 189.814 2202.22 190.324 Q2199.81 190.833 2197.34 190.833 Q2191.13 190.833 2187.5 187.222 Q2183.89 183.611 2183.89 177.453 Q2183.89 171.088 2187.31 167.361 Q2190.76 163.611 2196.59 163.611 Q2201.83 163.611 2204.86 166.99 Q2207.91 170.347 2207.91 176.134 M2203.65 174.884 Q2203.61 171.389 2201.69 169.305 Q2199.79 167.222 2196.64 167.222 Q2193.08 167.222 2190.92 169.236 Q2188.79 171.25 2188.47 174.907 L2203.65 174.884 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip410)\" d=\"M2231.43 165 L2231.43 169.027 Q2229.63 168.101 2227.68 167.639 Q2225.74 167.176 2223.65 167.176 Q2220.48 167.176 2218.89 168.148 Q2217.31 169.12 2217.31 171.064 Q2217.31 172.546 2218.45 173.402 Q2219.58 174.236 2223.01 175 L2224.47 175.324 Q2229 176.296 2230.9 178.078 Q2232.82 179.838 2232.82 183.009 Q2232.82 186.62 2229.95 188.726 Q2227.1 190.833 2222.1 190.833 Q2220.02 190.833 2217.75 190.416 Q2215.51 190.023 2213.01 189.212 L2213.01 184.814 Q2215.37 186.041 2217.66 186.666 Q2219.95 187.268 2222.2 187.268 Q2225.21 187.268 2226.83 186.25 Q2228.45 185.208 2228.45 183.333 Q2228.45 181.597 2227.27 180.671 Q2226.11 179.745 2222.15 178.888 L2220.67 178.541 Q2216.71 177.708 2214.95 175.995 Q2213.19 174.259 2213.19 171.25 Q2213.19 167.592 2215.78 165.602 Q2218.38 163.611 2223.15 163.611 Q2225.51 163.611 2227.59 163.958 Q2229.67 164.305 2231.43 165 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /></svg>\n"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"m = 20 # number of families\n",
"n = 3 # number of schools\n",
"ndims = 2 # number of Euclidean dimensions in which points are embedded\n",
"\n",
"# Generate points approximately on the unit circle\n",
"ps = map(1:m) do _\n",
" p = randn(ndims)\n",
" normalize!(p)\n",
" p += 0.1*randn(ndims)\n",
" return p\n",
"end\n",
"\n",
"pl = plot(size=(600,600), xlim=(-1.5, 1.5), ylim=(-1.5, 1.5))\n",
"scatter!(pl, [tuple(p...) for p in ps], m=:square, c=:black, msc=:auto, label=\"families\")"
]
},
{
"cell_type": "markdown",
"id": "066a8a68-2803-41a0-bf1c-7d1046260764",
"metadata": {},
"source": [
"Now we can start building the model in JuMP. \n",
"\n",
"To ensure that the model is numerically stable, it is important to choose a value of $M$ that is [as small as possible](\n",
"https://or.stackexchange.com/questions/236/why-is-it-important-to-choose-big-m-carefully-and-what-are-the-consequences-of-d?noredirect=1&lq=1) without breaking the logic of the constraints. In our case, it is sufficient to have $M \\geq \\lVert x_i - p_j \\rVert_2$ for all $i$ and $j$. It is obvious that, in an optimal plan, the distance between any school and any household will not exceed the largest distance between any two households. So, we can set \n",
"$$M = \\max_{i \\neq k} \\bigl\\{\\lVert p_i - p_k \\rVert_2\\bigr\\}.$$\n",
"In the code below, I use the 1-norm here to make it easy for the reader to try using the 1-norm as the distance criterion. This is a conservative choice since the 1-norm is guaranteed to be larger than the 2-norm. "
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "9a68d918-3441-49d2-b260-b99b8a8571eb",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"3.1267062299149817"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Set SCS as the solver for the relaxation problems. \n",
"nl_solver = optimizer_with_attributes(SCS.Optimizer, \"verbose\"=>0)\n",
"\n",
"# Wrap SCS in Juniper to enable integrality constraints.\n",
"mdl = Model(\n",
" optimizer_with_attributes(\n",
" Juniper.Optimizer,\n",
" \"nl_solver\"=>nl_solver,\n",
" \"atol\"=>1e-3,\n",
" )\n",
")\n",
"\n",
"set_silent(mdl)\n",
"\n",
"# Set the value of big M, which needs to be an upper bound on d[i, j]. \n",
"M = maximum(norm(ps[i] - ps[k], 1) for i in 1:m for k in i+1:m)"
]
},
{
"cell_type": "markdown",
"id": "6b95cbe1-30bf-4e71-b55b-1293ed996a41",
"metadata": {},
"source": [
"Now we declare our variables and constraints. Notice how easy it is to enter the conic constraint using JuMP's `MOI.SecondOrderCone()` notation."
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "688a8d40-5498-452a-aeb8-371a85c53316",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"A JuMP Model\n",
"Minimization problem with:\n",
"Variables: 127\n",
"Objective function type: VariableRef\n",
"`AffExpr`-in-`MathOptInterface.GreaterThan{Float64}`: 80 constraints\n",
"`Vector{AffExpr}`-in-`MathOptInterface.SecondOrderCone`: 60 constraints\n",
"`VariableRef`-in-`MathOptInterface.ZeroOne`: 60 constraints\n",
"Model mode: AUTOMATIC\n",
"CachingOptimizer state: EMPTY_OPTIMIZER\n",
"Solver name: Juniper\n",
"Names registered in the model: d, s, t, x"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"@variable(mdl, t)\n",
"@variable(mdl, d[1:n, 1:m])\n",
"@variable(mdl, s[1:n, 1:m], Bin)\n",
"@variable(mdl, x[1:ndims, 1:n])\n",
"\n",
"for j in 1:m\n",
" for i in 1:n \n",
" @constraint(mdl, [d[i, j]; x[:, i] .- ps[j]] in MOI.SecondOrderCone(ndims+1)) \n",
" \n",
" # To use one norm (taxicab distance) instead\n",
" # @constraint(mdl, [d[i, j]; x[:, i] .- ps[j]] in MOI.NormOneCone(ndims+1)) \n",
"\n",
" # s[i, j] = 1 ⟹ d[i, j] ≤ t\n",
" @constraint(mdl, t ≥ d[i, j] - M * (1 - s[i, j]))\n",
" end\n",
" @constraint(mdl, sum(s[i, j] for i in 1:n) ≥ 1)\n",
"end\n",
"\n",
"@objective(mdl, Min, t)\n",
"\n",
"mdl"
]
},
{
"cell_type": "markdown",
"id": "0ce3b60a-3846-4ebf-b44c-3d751867a93f",
"metadata": {},
"source": [
"Here is where we actually solve the model. Depending on your computer, this cell may take several minutes to run. You can reduce the number or families and/or schools if you are impatient."
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "456ac181-46f4-49e4-80b8-65996a286aea",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"┌ Warning: Only almost solved\n",
"└ @ Juniper /home/max/.julia/packages/Juniper/OUSNz/src/BnBTree.jl:89\n"
]
},
{
"data": {
"text/plain": [
"* Solver : Juniper\n",
"\n",
"* Status\n",
" Termination status : LOCALLY_SOLVED\n",
" Primal status : FEASIBLE_POINT\n",
" Dual status : FEASIBLE_POINT\n",
" Message from the solver:\n",
" \"LOCALLY_SOLVED\"\n",
"\n",
"* Candidate solution\n",
" Objective value : 0.7316442405728293\n",
" Objective bound : 0.7316156410382292\n",
"\n",
"* Work counters\n",
" Solve time (sec) : 89.21828\n"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"optimize!(mdl)\n",
"solution_summary(mdl)"
]
},
{
"cell_type": "markdown",
"id": "9c95b17b-253b-413b-9aed-95fd5e7fba98",
"metadata": {},
"source": [
"Read out the solution and verify its correctness. Each entry of `xs` gives the coordinates of one school, and we store the index of the $j$th family's nearest school as `attend_school[j]`. We verify that this is correct in two ways:\n",
"\n",
"- First, we check the `d[i, j]`-values and ensure that each `attend_school[j]` is the minimum of the corresponding column. (Note that the `d[i, j]` values only give the correct Euclidean distance to the *closest* school. If `s[i, j] == 0`, it is not necessarily true that `d[i, j] == norm(xs[i] - ps[j])`, because the corresponding big-$M$ constraint is not necessarily binding.)\n",
"- Next, we check that the `1` in each column of `s` occurs at the `attend_school[j]`th position. "
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "ac4fa1d0-429c-4249-94de-2c63e9b4823f",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"\u001b[32m\u001b[1mTest Passed\u001b[22m\u001b[39m\n",
" Expression: attend_school == map(argmin, eachcol(value.(d))) == map(argmax, eachcol(value.(s)))\n",
" Evaluated: [2, 2, 2, 2, 1, 2, 2, 1, 3, 1, 2, 2, 1, 3, 1, 3, 3, 2, 3, 2] == [2, 2, 2, 2, 1, 2, 2, 1, 3, 1, 2, 2, 1, 3, 1, 3, 3, 2, 3, 2] == [2, 2, 2, 2, 1, 2, 2, 1, 3, 1, 2, 2, 1, 3, 1, 3, 3, 2, 3, 2]"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"xs = [value.(x[:, i]) for i in 1:n]\n",
"\n",
"attend_school = map(ps) do p\n",
" argmin(i -> norm(p - xs[i]), 1:n)\n",
"end\n",
"\n",
"@test attend_school == map(argmin, eachcol(value.(d))) == map(argmax, eachcol(value.(s)))"
]
},
{
"cell_type": "markdown",
"id": "2bc6aceb-8a86-4e17-b718-f4d67797dd32",
"metadata": {},
"source": [
"Finally, we make a plot showing the school locations and each family's local school. "
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "progressive-suspension",
"metadata": {},
"outputs": [
{
"data": {
"image/svg+xml": [
"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n",
"<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"600\" height=\"600\" viewBox=\"0 0 2400 2400\">\n",
"<defs>\n",
" <clipPath id=\"clip450\">\n",
" <rect x=\"0\" y=\"0\" width=\"2400\" height=\"2400\"/>\n",
" </clipPath>\n",
"</defs>\n",
"<path clip-path=\"url(#clip450)\" d=\"\n",
"M0 2400 L2400 2400 L2400 0 L0 0 Z\n",
" \" fill=\"#ffffff\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<defs>\n",
" <clipPath id=\"clip451\">\n",
" <rect x=\"480\" y=\"240\" width=\"1681\" height=\"1681\"/>\n",
" </clipPath>\n",
"</defs>\n",
"<path clip-path=\"url(#clip450)\" d=\"\n",
"M193.936 2261.17 L2352.76 2261.17 L2352.76 47.2441 L193.936 47.2441 Z\n",
" \" fill=\"#ffffff\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<defs>\n",
" <clipPath id=\"clip452\">\n",
" <rect x=\"193\" y=\"47\" width=\"2160\" height=\"2215\"/>\n",
" </clipPath>\n",
"</defs>\n",
"<polyline clip-path=\"url(#clip452)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 193.936,2261.17 193.936,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip452)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 553.739,2261.17 553.739,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip452)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 913.543,2261.17 913.543,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip452)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 1273.35,2261.17 1273.35,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip452)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 1633.15,2261.17 1633.15,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip452)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 1992.95,2261.17 1992.95,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip452)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 2352.76,2261.17 2352.76,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip450)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 193.936,2261.17 2352.76,2261.17 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip450)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 193.936,2261.17 193.936,2242.27 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip450)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 553.739,2261.17 553.739,2242.27 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip450)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 913.543,2261.17 913.543,2242.27 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip450)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 1273.35,2261.17 1273.35,2242.27 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip450)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 1633.15,2261.17 1633.15,2242.27 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip450)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 1992.95,2261.17 1992.95,2242.27 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip450)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 2352.76,2261.17 2352.76,2242.27 \n",
" \"/>\n",
"<path clip-path=\"url(#clip450)\" d=\"M140.962 2306.74 L170.638 2306.74 L170.638 2310.67 L140.962 2310.67 L140.962 2306.74 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip450)\" d=\"M181.54 2319.63 L189.179 2319.63 L189.179 2293.27 L180.869 2294.93 L180.869 2290.67 L189.133 2289.01 L193.809 2289.01 L193.809 2319.63 L201.448 2319.63 L201.448 2323.57 L181.54 2323.57 L181.54 2319.63 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip450)\" d=\"M210.892 2317.69 L215.776 2317.69 L215.776 2323.57 L210.892 2323.57 L210.892 2317.69 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip450)\" d=\"M226.008 2289.01 L244.364 2289.01 L244.364 2292.94 L230.29 2292.94 L230.29 2301.42 Q231.308 2301.07 232.327 2300.91 Q233.346 2300.72 234.364 2300.72 Q240.151 2300.72 243.531 2303.89 Q246.91 2307.06 246.91 2312.48 Q246.91 2318.06 243.438 2321.16 Q239.966 2324.24 233.646 2324.24 Q231.471 2324.24 229.202 2323.87 Q226.957 2323.5 224.549 2322.76 L224.549 2318.06 Q226.633 2319.19 228.855 2319.75 Q231.077 2320.3 233.554 2320.3 Q237.558 2320.3 239.896 2318.2 Q242.234 2316.09 242.234 2312.48 Q242.234 2308.87 239.896 2306.76 Q237.558 2304.66 233.554 2304.66 Q231.679 2304.66 229.804 2305.07 Q227.952 2305.49 226.008 2306.37 L226.008 2289.01 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip450)\" d=\"M500.267 2306.74 L529.943 2306.74 L529.943 2310.67 L500.267 2310.67 L500.267 2306.74 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip450)\" d=\"M540.846 2319.63 L548.485 2319.63 L548.485 2293.27 L540.175 2294.93 L540.175 2290.67 L548.438 2289.01 L553.114 2289.01 L553.114 2319.63 L560.753 2319.63 L560.753 2323.57 L540.846 2323.57 L540.846 2319.63 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip450)\" d=\"M570.198 2317.69 L575.082 2317.69 L575.082 2323.57 L570.198 2323.57 L570.198 2317.69 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip450)\" d=\"M595.267 2292.09 Q591.656 2292.09 589.827 2295.65 Q588.022 2299.19 588.022 2306.32 Q588.022 2313.43 589.827 2316.99 Q591.656 2320.54 595.267 2320.54 Q598.901 2320.54 600.707 2316.99 Q602.535 2313.43 602.535 2306.32 Q602.535 2299.19 600.707 2295.65 Q598.901 2292.09 595.267 2292.09 M595.267 2288.38 Q601.077 2288.38 604.133 2292.99 Q607.211 2297.57 607.211 2306.32 Q607.211 2315.05 604.133 2319.66 Q601.077 2324.24 595.267 2324.24 Q589.457 2324.24 586.378 2319.66 Q583.322 2315.05 583.322 2306.32 Q583.322 2297.57 586.378 2292.99 Q589.457 2288.38 595.267 2288.38 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip450)\" d=\"M860.568 2306.74 L890.244 2306.74 L890.244 2310.67 L860.568 2310.67 L860.568 2306.74 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip450)\" d=\"M910.337 2292.09 Q906.726 2292.09 904.897 2295.65 Q903.091 2299.19 903.091 2306.32 Q903.091 2313.43 904.897 2316.99 Q906.726 2320.54 910.337 2320.54 Q913.971 2320.54 915.776 2316.99 Q917.605 2313.43 917.605 2306.32 Q917.605 2299.19 915.776 2295.65 Q913.971 2292.09 910.337 2292.09 M910.337 2288.38 Q916.147 2288.38 919.202 2292.99 Q922.281 2297.57 922.281 2306.32 Q922.281 2315.05 919.202 2319.66 Q916.147 2324.24 910.337 2324.24 Q904.526 2324.24 901.448 2319.66 Q898.392 2315.05 898.392 2306.32 Q898.392 2297.57 901.448 2292.99 Q904.526 2288.38 910.337 2288.38 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip450)\" d=\"M930.499 2317.69 L935.383 2317.69 L935.383 2323.57 L930.499 2323.57 L930.499 2317.69 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip450)\" d=\"M945.614 2289.01 L963.971 2289.01 L963.971 2292.94 L949.897 2292.94 L949.897 2301.42 Q950.915 2301.07 951.934 2300.91 Q952.952 2300.72 953.971 2300.72 Q959.758 2300.72 963.137 2303.89 Q966.517 2307.06 966.517 2312.48 Q966.517 2318.06 963.045 2321.16 Q959.572 2324.24 953.253 2324.24 Q951.077 2324.24 948.809 2323.87 Q946.563 2323.5 944.156 2322.76 L944.156 2318.06 Q946.239 2319.19 948.461 2319.75 Q950.684 2320.3 953.16 2320.3 Q957.165 2320.3 959.503 2318.2 Q961.841 2316.09 961.841 2312.48 Q961.841 2308.87 959.503 2306.76 Q957.165 2304.66 953.16 2304.66 Q951.285 2304.66 949.41 2305.07 Q947.559 2305.49 945.614 2306.37 L945.614 2289.01 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip450)\" d=\"M1250.73 2292.09 Q1247.12 2292.09 1245.29 2295.65 Q1243.49 2299.19 1243.49 2306.32 Q1243.49 2313.43 1245.29 2316.99 Q1247.12 2320.54 1250.73 2320.54 Q1254.36 2320.54 1256.17 2316.99 Q1258 2313.43 1258 2306.32 Q1258 2299.19 1256.17 2295.65 Q1254.36 2292.09 1250.73 2292.09 M1250.73 2288.38 Q1256.54 2288.38 1259.6 2292.99 Q1262.67 2297.57 1262.67 2306.32 Q1262.67 2315.05 1259.6 2319.66 Q1256.54 2324.24 1250.73 2324.24 Q1244.92 2324.24 1241.84 2319.66 Q1238.79 2315.05 1238.79 2306.32 Q1238.79 2297.57 1241.84 2292.99 Q1244.92 2288.38 1250.73 2288.38 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip450)\" d=\"M1270.89 2317.69 L1275.78 2317.69 L1275.78 2323.57 L1270.89 2323.57 L1270.89 2317.69 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip450)\" d=\"M1295.96 2292.09 Q1292.35 2292.09 1290.52 2295.65 Q1288.72 2299.19 1288.72 2306.32 Q1288.72 2313.43 1290.52 2316.99 Q1292.35 2320.54 1295.96 2320.54 Q1299.6 2320.54 1301.4 2316.99 Q1303.23 2313.43 1303.23 2306.32 Q1303.23 2299.19 1301.4 2295.65 Q1299.6 2292.09 1295.96 2292.09 M1295.96 2288.38 Q1301.77 2288.38 1304.83 2292.99 Q1307.91 2297.57 1307.91 2306.32 Q1307.91 2315.05 1304.83 2319.66 Q1301.77 2324.24 1295.96 2324.24 Q1290.15 2324.24 1287.07 2319.66 Q1284.02 2315.05 1284.02 2306.32 Q1284.02 2297.57 1287.07 2292.99 Q1290.15 2288.38 1295.96 2288.38 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip450)\" d=\"M1611.03 2292.09 Q1607.42 2292.09 1605.59 2295.65 Q1603.79 2299.19 1603.79 2306.32 Q1603.79 2313.43 1605.59 2316.99 Q1607.42 2320.54 1611.03 2320.54 Q1614.67 2320.54 1616.47 2316.99 Q1618.3 2313.43 1618.3 2306.32 Q1618.3 2299.19 1616.47 2295.65 Q1614.67 2292.09 1611.03 2292.09 M1611.03 2288.38 Q1616.84 2288.38 1619.9 2292.99 Q1622.98 2297.57 1622.98 2306.32 Q1622.98 2315.05 1619.9 2319.66 Q1616.84 2324.24 1611.03 2324.24 Q1605.22 2324.24 1602.14 2319.66 Q1599.09 2315.05 1599.09 2306.32 Q1599.09 2297.57 1602.14 2292.99 Q1605.22 2288.38 1611.03 2288.38 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip450)\" d=\"M1631.19 2317.69 L1636.08 2317.69 L1636.08 2323.57 L1631.19 2323.57 L1631.19 2317.69 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip450)\" d=\"M1646.31 2289.01 L1664.67 2289.01 L1664.67 2292.94 L1650.59 2292.94 L1650.59 2301.42 Q1651.61 2301.07 1652.63 2300.91 Q1653.65 2300.72 1654.67 2300.72 Q1660.45 2300.72 1663.83 2303.89 Q1667.21 2307.06 1667.21 2312.48 Q1667.21 2318.06 1663.74 2321.16 Q1660.27 2324.24 1653.95 2324.24 Q1651.77 2324.24 1649.5 2323.87 Q1647.26 2323.5 1644.85 2322.76 L1644.85 2318.06 Q1646.93 2319.19 1649.16 2319.75 Q1651.38 2320.3 1653.86 2320.3 Q1657.86 2320.3 1660.2 2318.2 Q1662.54 2316.09 1662.54 2312.48 Q1662.54 2308.87 1660.2 2306.76 Q1657.86 2304.66 1653.86 2304.66 Q1651.98 2304.66 1650.11 2305.07 Q1648.25 2305.49 1646.31 2306.37 L1646.31 2289.01 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip450)\" d=\"M1960.11 2319.63 L1967.74 2319.63 L1967.74 2293.27 L1959.43 2294.93 L1959.43 2290.67 L1967.7 2289.01 L1972.37 2289.01 L1972.37 2319.63 L1980.01 2319.63 L1980.01 2323.57 L1960.11 2323.57 L1960.11 2319.63 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip450)\" d=\"M1989.46 2317.69 L1994.34 2317.69 L1994.34 2323.57 L1989.46 2323.57 L1989.46 2317.69 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip450)\" d=\"M2014.53 2292.09 Q2010.92 2292.09 2009.09 2295.65 Q2007.28 2299.19 2007.28 2306.32 Q2007.28 2313.43 2009.09 2316.99 Q2010.92 2320.54 2014.53 2320.54 Q2018.16 2320.54 2019.97 2316.99 Q2021.8 2313.43 2021.8 2306.32 Q2021.8 2299.19 2019.97 2295.65 Q2018.16 2292.09 2014.53 2292.09 M2014.53 2288.38 Q2020.34 2288.38 2023.39 2292.99 Q2026.47 2297.57 2026.47 2306.32 Q2026.47 2315.05 2023.39 2319.66 Q2020.34 2324.24 2014.53 2324.24 Q2008.72 2324.24 2005.64 2319.66 Q2002.58 2315.05 2002.58 2306.32 Q2002.58 2297.57 2005.64 2292.99 Q2008.72 2288.38 2014.53 2288.38 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip450)\" d=\"M2320.41 2319.63 L2328.05 2319.63 L2328.05 2293.27 L2319.74 2294.93 L2319.74 2290.67 L2328 2289.01 L2332.67 2289.01 L2332.67 2319.63 L2340.31 2319.63 L2340.31 2323.57 L2320.41 2323.57 L2320.41 2319.63 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip450)\" d=\"M2349.76 2317.69 L2354.64 2317.69 L2354.64 2323.57 L2349.76 2323.57 L2349.76 2317.69 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip450)\" d=\"M2364.87 2289.01 L2383.23 2289.01 L2383.23 2292.94 L2369.16 2292.94 L2369.16 2301.42 Q2370.17 2301.07 2371.19 2300.91 Q2372.21 2300.72 2373.23 2300.72 Q2379.02 2300.72 2382.4 2303.89 Q2385.78 2307.06 2385.78 2312.48 Q2385.78 2318.06 2382.3 2321.16 Q2378.83 2324.24 2372.51 2324.24 Q2370.34 2324.24 2368.07 2323.87 Q2365.82 2323.5 2363.42 2322.76 L2363.42 2318.06 Q2365.5 2319.19 2367.72 2319.75 Q2369.94 2320.3 2372.42 2320.3 Q2376.42 2320.3 2378.76 2318.2 Q2381.1 2316.09 2381.1 2312.48 Q2381.1 2308.87 2378.76 2306.76 Q2376.42 2304.66 2372.42 2304.66 Q2370.55 2304.66 2368.67 2305.07 Q2366.82 2305.49 2364.87 2306.37 L2364.87 2289.01 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><polyline clip-path=\"url(#clip452)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 193.936,2261.17 2352.76,2261.17 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip452)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 193.936,1892.18 2352.76,1892.18 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip452)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 193.936,1523.19 2352.76,1523.19 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip452)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 193.936,1154.21 2352.76,1154.21 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip452)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 193.936,785.219 2352.76,785.219 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip452)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 193.936,416.231 2352.76,416.231 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip452)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 193.936,47.2441 2352.76,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip450)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 193.936,2261.17 193.936,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip450)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 193.936,2261.17 212.834,2261.17 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip450)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 193.936,1892.18 212.834,1892.18 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip450)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 193.936,1523.19 212.834,1523.19 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip450)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 193.936,1154.21 212.834,1154.21 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip450)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 193.936,785.219 212.834,785.219 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip450)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 193.936,416.231 212.834,416.231 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip450)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 193.936,47.2441 212.834,47.2441 \n",
" \"/>\n",
"<path clip-path=\"url(#clip450)\" d=\"M51.9875 2261.62 L81.6633 2261.62 L81.6633 2265.55 L51.9875 2265.55 L51.9875 2261.62 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip450)\" d=\"M92.566 2274.51 L100.205 2274.51 L100.205 2248.15 L91.8947 2249.81 L91.8947 2245.55 L100.159 2243.89 L104.834 2243.89 L104.834 2274.51 L112.473 2274.51 L112.473 2278.45 L92.566 2278.45 L92.566 2274.51 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip450)\" d=\"M121.918 2272.57 L126.802 2272.57 L126.802 2278.45 L121.918 2278.45 L121.918 2272.57 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip450)\" d=\"M137.033 2243.89 L155.39 2243.89 L155.39 2247.82 L141.316 2247.82 L141.316 2256.3 Q142.334 2255.95 143.353 2255.79 Q144.371 2255.6 145.39 2255.6 Q151.177 2255.6 154.556 2258.77 Q157.936 2261.94 157.936 2267.36 Q157.936 2272.94 154.464 2276.04 Q150.992 2279.12 144.672 2279.12 Q142.496 2279.12 140.228 2278.75 Q137.982 2278.38 135.575 2277.64 L135.575 2272.94 Q137.658 2274.07 139.881 2274.63 Q142.103 2275.18 144.58 2275.18 Q148.584 2275.18 150.922 2273.08 Q153.26 2270.97 153.26 2267.36 Q153.26 2263.75 150.922 2261.64 Q148.584 2259.54 144.58 2259.54 Q142.705 2259.54 140.83 2259.95 Q138.978 2260.37 137.033 2261.25 L137.033 2243.89 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip450)\" d=\"M50.9921 1892.63 L80.6679 1892.63 L80.6679 1896.57 L50.9921 1896.57 L50.9921 1892.63 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip450)\" d=\"M91.5706 1905.53 L99.2095 1905.53 L99.2095 1879.16 L90.8993 1880.83 L90.8993 1876.57 L99.1632 1874.9 L103.839 1874.9 L103.839 1905.53 L111.478 1905.53 L111.478 1909.46 L91.5706 1909.46 L91.5706 1905.53 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip450)\" d=\"M120.922 1903.58 L125.807 1903.58 L125.807 1909.46 L120.922 1909.46 L120.922 1903.58 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip450)\" d=\"M145.992 1877.98 Q142.381 1877.98 140.552 1881.54 Q138.746 1885.09 138.746 1892.22 Q138.746 1899.32 140.552 1902.89 Q142.381 1906.43 145.992 1906.43 Q149.626 1906.43 151.431 1902.89 Q153.26 1899.32 153.26 1892.22 Q153.26 1885.09 151.431 1881.54 Q149.626 1877.98 145.992 1877.98 M145.992 1874.28 Q151.802 1874.28 154.857 1878.88 Q157.936 1883.47 157.936 1892.22 Q157.936 1900.94 154.857 1905.55 Q151.802 1910.13 145.992 1910.13 Q140.181 1910.13 137.103 1905.55 Q134.047 1900.94 134.047 1892.22 Q134.047 1883.47 137.103 1878.88 Q140.181 1874.28 145.992 1874.28 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip450)\" d=\"M51.9875 1523.64 L81.6633 1523.64 L81.6633 1527.58 L51.9875 1527.58 L51.9875 1523.64 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip450)\" d=\"M101.756 1508.99 Q98.1447 1508.99 96.316 1512.56 Q94.5104 1516.1 94.5104 1523.23 Q94.5104 1530.33 96.316 1533.9 Q98.1447 1537.44 101.756 1537.44 Q105.39 1537.44 107.196 1533.9 Q109.024 1530.33 109.024 1523.23 Q109.024 1516.1 107.196 1512.56 Q105.39 1508.99 101.756 1508.99 M101.756 1505.29 Q107.566 1505.29 110.621 1509.89 Q113.7 1514.48 113.7 1523.23 Q113.7 1531.95 110.621 1536.56 Q107.566 1541.14 101.756 1541.14 Q95.9456 1541.14 92.8669 1536.56 Q89.8114 1531.95 89.8114 1523.23 Q89.8114 1514.48 92.8669 1509.89 Q95.9456 1505.29 101.756 1505.29 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip450)\" d=\"M121.918 1534.59 L126.802 1534.59 L126.802 1540.47 L121.918 1540.47 L121.918 1534.59 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip450)\" d=\"M137.033 1505.91 L155.39 1505.91 L155.39 1509.85 L141.316 1509.85 L141.316 1518.32 Q142.334 1517.97 143.353 1517.81 Q144.371 1517.63 145.39 1517.63 Q151.177 1517.63 154.556 1520.8 Q157.936 1523.97 157.936 1529.39 Q157.936 1534.96 154.464 1538.07 Q150.992 1541.14 144.672 1541.14 Q142.496 1541.14 140.228 1540.77 Q137.982 1540.4 135.575 1539.66 L135.575 1534.96 Q137.658 1536.1 139.881 1536.65 Q142.103 1537.21 144.58 1537.21 Q148.584 1537.21 150.922 1535.1 Q153.26 1533 153.26 1529.39 Q153.26 1525.77 150.922 1523.67 Q148.584 1521.56 144.58 1521.56 Q142.705 1521.56 140.83 1521.98 Q138.978 1522.39 137.033 1523.27 L137.033 1505.91 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip450)\" d=\"M100.76 1140 Q97.1493 1140 95.3206 1143.57 Q93.515 1147.11 93.515 1154.24 Q93.515 1161.35 95.3206 1164.91 Q97.1493 1168.45 100.76 1168.45 Q104.395 1168.45 106.2 1164.91 Q108.029 1161.35 108.029 1154.24 Q108.029 1147.11 106.2 1143.57 Q104.395 1140 100.76 1140 M100.76 1136.3 Q106.571 1136.3 109.626 1140.91 Q112.705 1145.49 112.705 1154.24 Q112.705 1162.97 109.626 1167.57 Q106.571 1172.16 100.76 1172.16 Q94.9502 1172.16 91.8715 1167.57 Q88.816 1162.97 88.816 1154.24 Q88.816 1145.49 91.8715 1140.91 Q94.9502 1136.3 100.76 1136.3 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip450)\" d=\"M120.922 1165.61 L125.807 1165.61 L125.807 1171.49 L120.922 1171.49 L120.922 1165.61 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip450)\" d=\"M145.992 1140 Q142.381 1140 140.552 1143.57 Q138.746 1147.11 138.746 1154.24 Q138.746 1161.35 140.552 1164.91 Q142.381 1168.45 145.992 1168.45 Q149.626 1168.45 151.431 1164.91 Q153.26 1161.35 153.26 1154.24 Q153.26 1147.11 151.431 1143.57 Q149.626 1140 145.992 1140 M145.992 1136.3 Q151.802 1136.3 154.857 1140.91 Q157.936 1145.49 157.936 1154.24 Q157.936 1162.97 154.857 1167.57 Q151.802 1172.16 145.992 1172.16 Q140.181 1172.16 137.103 1167.57 Q134.047 1162.97 134.047 1154.24 Q134.047 1145.49 137.103 1140.91 Q140.181 1136.3 145.992 1136.3 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip450)\" d=\"M101.756 771.017 Q98.1447 771.017 96.316 774.582 Q94.5104 778.124 94.5104 785.253 Q94.5104 792.36 96.316 795.925 Q98.1447 799.466 101.756 799.466 Q105.39 799.466 107.196 795.925 Q109.024 792.36 109.024 785.253 Q109.024 778.124 107.196 774.582 Q105.39 771.017 101.756 771.017 M101.756 767.314 Q107.566 767.314 110.621 771.92 Q113.7 776.503 113.7 785.253 Q113.7 793.98 110.621 798.587 Q107.566 803.17 101.756 803.17 Q95.9456 803.17 92.8669 798.587 Q89.8114 793.98 89.8114 785.253 Q89.8114 776.503 92.8669 771.92 Q95.9456 767.314 101.756 767.314 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip450)\" d=\"M121.918 796.619 L126.802 796.619 L126.802 802.499 L121.918 802.499 L121.918 796.619 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip450)\" d=\"M137.033 767.939 L155.39 767.939 L155.39 771.874 L141.316 771.874 L141.316 780.346 Q142.334 779.999 143.353 779.837 Q144.371 779.652 145.39 779.652 Q151.177 779.652 154.556 782.823 Q157.936 785.994 157.936 791.411 Q157.936 796.989 154.464 800.091 Q150.992 803.17 144.672 803.17 Q142.496 803.17 140.228 802.8 Q137.982 802.429 135.575 801.689 L135.575 796.989 Q137.658 798.124 139.881 798.679 Q142.103 799.235 144.58 799.235 Q148.584 799.235 150.922 797.128 Q153.26 795.022 153.26 791.411 Q153.26 787.8 150.922 785.693 Q148.584 783.587 144.58 783.587 Q142.705 783.587 140.83 784.003 Q138.978 784.42 137.033 785.3 L137.033 767.939 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip450)\" d=\"M91.5706 429.576 L99.2095 429.576 L99.2095 403.211 L90.8993 404.877 L90.8993 400.618 L99.1632 398.951 L103.839 398.951 L103.839 429.576 L111.478 429.576 L111.478 433.511 L91.5706 433.511 L91.5706 429.576 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip450)\" d=\"M120.922 427.632 L125.807 427.632 L125.807 433.511 L120.922 433.511 L120.922 427.632 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip450)\" d=\"M145.992 402.03 Q142.381 402.03 140.552 405.595 Q138.746 409.137 138.746 416.266 Q138.746 423.373 140.552 426.937 Q142.381 430.479 145.992 430.479 Q149.626 430.479 151.431 426.937 Q153.26 423.373 153.26 416.266 Q153.26 409.137 151.431 405.595 Q149.626 402.03 145.992 402.03 M145.992 398.326 Q151.802 398.326 154.857 402.933 Q157.936 407.516 157.936 416.266 Q157.936 424.993 154.857 429.599 Q151.802 434.183 145.992 434.183 Q140.181 434.183 137.103 429.599 Q134.047 424.993 134.047 416.266 Q134.047 407.516 137.103 402.933 Q140.181 398.326 145.992 398.326 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip450)\" d=\"M92.566 60.5889 L100.205 60.5889 L100.205 34.2233 L91.8947 35.89 L91.8947 31.6308 L100.159 29.9641 L104.834 29.9641 L104.834 60.5889 L112.473 60.5889 L112.473 64.5241 L92.566 64.5241 L92.566 60.5889 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip450)\" d=\"M121.918 58.6445 L126.802 58.6445 L126.802 64.5241 L121.918 64.5241 L121.918 58.6445 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip450)\" d=\"M137.033 29.9641 L155.39 29.9641 L155.39 33.8993 L141.316 33.8993 L141.316 42.3714 Q142.334 42.0242 143.353 41.8622 Q144.371 41.677 145.39 41.677 Q151.177 41.677 154.556 44.8483 Q157.936 48.0196 157.936 53.4362 Q157.936 59.0149 154.464 62.1167 Q150.992 65.1954 144.672 65.1954 Q142.496 65.1954 140.228 64.825 Q137.982 64.4547 135.575 63.7139 L135.575 59.0149 Q137.658 60.1491 139.881 60.7047 Q142.103 61.2602 144.58 61.2602 Q148.584 61.2602 150.922 59.1538 Q153.26 57.0473 153.26 53.4362 Q153.26 49.8251 150.922 47.7186 Q148.584 45.6122 144.58 45.6122 Q142.705 45.6122 140.83 46.0288 Q138.978 46.4455 137.033 47.3251 L137.033 29.9641 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><polyline clip-path=\"url(#clip452)\" style=\"stroke:#000080; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" stroke-dasharray=\"16, 10\" points=\"\n",
" 842.4,644.779 1050.89,791.14 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip452)\" style=\"stroke:#000080; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" stroke-dasharray=\"16, 10\" points=\"\n",
" 1059.21,430.209 1050.89,791.14 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip452)\" style=\"stroke:#000080; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" stroke-dasharray=\"16, 10\" points=\"\n",
" 1076.79,418.313 1050.89,791.14 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip452)\" style=\"stroke:#000080; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" stroke-dasharray=\"16, 10\" points=\"\n",
" 689.141,943.701 1050.89,791.14 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip452)\" style=\"stroke:#000080; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" stroke-dasharray=\"16, 10\" points=\"\n",
" 643.658,1559.12 983.21,1695.44 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip452)\" style=\"stroke:#000080; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" stroke-dasharray=\"16, 10\" points=\"\n",
" 599.279,1068.77 1050.89,791.14 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip452)\" style=\"stroke:#000080; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" stroke-dasharray=\"16, 10\" points=\"\n",
" 642.029,834.69 1050.89,791.14 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip452)\" style=\"stroke:#000080; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" stroke-dasharray=\"16, 10\" points=\"\n",
" 497.37,1603.03 983.21,1695.44 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip452)\" style=\"stroke:#000080; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" stroke-dasharray=\"16, 10\" points=\"\n",
" 1841.08,1764.93 1876.08,1270.47 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip452)\" style=\"stroke:#000080; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" stroke-dasharray=\"16, 10\" points=\"\n",
" 1016.89,1862.01 983.21,1695.44 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip452)\" style=\"stroke:#000080; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" stroke-dasharray=\"16, 10\" points=\"\n",
" 730.706,596.217 1050.89,791.14 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip452)\" style=\"stroke:#000080; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" stroke-dasharray=\"16, 10\" points=\"\n",
" 736.034,720.691 1050.89,791.14 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip452)\" style=\"stroke:#000080; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" stroke-dasharray=\"16, 10\" points=\"\n",
" 671.621,1553.13 983.21,1695.44 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip452)\" style=\"stroke:#000080; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" stroke-dasharray=\"16, 10\" points=\"\n",
" 1911.9,795.513 1876.08,1270.47 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip452)\" style=\"stroke:#000080; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" stroke-dasharray=\"16, 10\" points=\"\n",
" 1471.76,1790.96 983.21,1695.44 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip452)\" style=\"stroke:#000080; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" stroke-dasharray=\"16, 10\" points=\"\n",
" 2028.83,1417.53 1876.08,1270.47 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip452)\" style=\"stroke:#000080; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" stroke-dasharray=\"16, 10\" points=\"\n",
" 2047.95,1070.31 1876.08,1270.47 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip452)\" style=\"stroke:#000080; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" stroke-dasharray=\"16, 10\" points=\"\n",
" 1502.39,513.575 1050.89,791.14 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip452)\" style=\"stroke:#000080; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" stroke-dasharray=\"16, 10\" points=\"\n",
" 1747.51,1664.2 1876.08,1270.47 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip452)\" style=\"stroke:#000080; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" stroke-dasharray=\"16, 10\" points=\"\n",
" 921.543,477.782 1050.89,791.14 \n",
" \"/>\n",
"<path clip-path=\"url(#clip452)\" d=\"M826.4 628.779 L826.4 660.779 L858.4 660.779 L858.4 628.779 L826.4 628.779 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"none\"/>\n",
"<path clip-path=\"url(#clip452)\" d=\"M1043.21 414.209 L1043.21 446.209 L1075.21 446.209 L1075.21 414.209 L1043.21 414.209 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"none\"/>\n",
"<path clip-path=\"url(#clip452)\" d=\"M1060.79 402.313 L1060.79 434.313 L1092.79 434.313 L1092.79 402.313 L1060.79 402.313 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"none\"/>\n",
"<path clip-path=\"url(#clip452)\" d=\"M673.141 927.701 L673.141 959.701 L705.141 959.701 L705.141 927.701 L673.141 927.701 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"none\"/>\n",
"<path clip-path=\"url(#clip452)\" d=\"M627.658 1543.12 L627.658 1575.12 L659.658 1575.12 L659.658 1543.12 L627.658 1543.12 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"none\"/>\n",
"<path clip-path=\"url(#clip452)\" d=\"M583.279 1052.77 L583.279 1084.77 L615.279 1084.77 L615.279 1052.77 L583.279 1052.77 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"none\"/>\n",
"<path clip-path=\"url(#clip452)\" d=\"M626.029 818.69 L626.029 850.69 L658.029 850.69 L658.029 818.69 L626.029 818.69 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"none\"/>\n",
"<path clip-path=\"url(#clip452)\" d=\"M481.37 1587.03 L481.37 1619.03 L513.37 1619.03 L513.37 1587.03 L481.37 1587.03 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"none\"/>\n",
"<path clip-path=\"url(#clip452)\" d=\"M1825.08 1748.93 L1825.08 1780.93 L1857.08 1780.93 L1857.08 1748.93 L1825.08 1748.93 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"none\"/>\n",
"<path clip-path=\"url(#clip452)\" d=\"M1000.89 1846.01 L1000.89 1878.01 L1032.89 1878.01 L1032.89 1846.01 L1000.89 1846.01 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"none\"/>\n",
"<path clip-path=\"url(#clip452)\" d=\"M714.706 580.217 L714.706 612.217 L746.706 612.217 L746.706 580.217 L714.706 580.217 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"none\"/>\n",
"<path clip-path=\"url(#clip452)\" d=\"M720.034 704.691 L720.034 736.691 L752.034 736.691 L752.034 704.691 L720.034 704.691 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"none\"/>\n",
"<path clip-path=\"url(#clip452)\" d=\"M655.621 1537.13 L655.621 1569.13 L687.621 1569.13 L687.621 1537.13 L655.621 1537.13 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"none\"/>\n",
"<path clip-path=\"url(#clip452)\" d=\"M1895.9 779.513 L1895.9 811.513 L1927.9 811.513 L1927.9 779.513 L1895.9 779.513 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"none\"/>\n",
"<path clip-path=\"url(#clip452)\" d=\"M1455.76 1774.96 L1455.76 1806.96 L1487.76 1806.96 L1487.76 1774.96 L1455.76 1774.96 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"none\"/>\n",
"<path clip-path=\"url(#clip452)\" d=\"M2012.83 1401.53 L2012.83 1433.53 L2044.83 1433.53 L2044.83 1401.53 L2012.83 1401.53 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"none\"/>\n",
"<path clip-path=\"url(#clip452)\" d=\"M2031.95 1054.31 L2031.95 1086.31 L2063.95 1086.31 L2063.95 1054.31 L2031.95 1054.31 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"none\"/>\n",
"<path clip-path=\"url(#clip452)\" d=\"M1486.39 497.575 L1486.39 529.575 L1518.39 529.575 L1518.39 497.575 L1486.39 497.575 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"none\"/>\n",
"<path clip-path=\"url(#clip452)\" d=\"M1731.51 1648.2 L1731.51 1680.2 L1763.51 1680.2 L1763.51 1648.2 L1731.51 1648.2 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"none\"/>\n",
"<path clip-path=\"url(#clip452)\" d=\"M905.543 461.782 L905.543 493.782 L937.543 493.782 L937.543 461.782 L905.543 461.782 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"none\"/>\n",
"<circle clip-path=\"url(#clip452)\" cx=\"983.21\" cy=\"1695.44\" r=\"25\" fill=\"#dc143c\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"none\"/>\n",
"<circle clip-path=\"url(#clip452)\" cx=\"1050.89\" cy=\"791.14\" r=\"25\" fill=\"#dc143c\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"none\"/>\n",
"<circle clip-path=\"url(#clip452)\" cx=\"1876.08\" cy=\"1270.47\" r=\"25\" fill=\"#dc143c\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"none\"/>\n",
"<path clip-path=\"url(#clip450)\" d=\"\n",
"M1772.32 328.402 L2280.8 328.402 L2280.8 121.042 L1772.32 121.042 Z\n",
" \" fill=\"#ffffff\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip450)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 1772.32,328.402 2280.8,328.402 2280.8,121.042 1772.32,121.042 1772.32,328.402 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip450)\" style=\"stroke:#000080; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" stroke-dasharray=\"16, 10\" points=\"\n",
" 1796.3,172.882 1940.22,172.882 \n",
" \"/>\n",
"<path clip-path=\"url(#clip450)\" d=\"M1964.21 154.143 L1968.47 154.143 L1968.47 190.162 L1964.21 190.162 L1964.21 154.143 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip450)\" d=\"M1987.43 167.222 Q1984 167.222 1982.01 169.907 Q1980.02 172.569 1980.02 177.222 Q1980.02 181.875 1981.99 184.56 Q1983.98 187.222 1987.43 187.222 Q1990.83 187.222 1992.82 184.537 Q1994.81 181.851 1994.81 177.222 Q1994.81 172.615 1992.82 169.93 Q1990.83 167.222 1987.43 167.222 M1987.43 163.611 Q1992.98 163.611 1996.16 167.222 Q1999.33 170.833 1999.33 177.222 Q1999.33 183.588 1996.16 187.222 Q1992.98 190.833 1987.43 190.833 Q1981.85 190.833 1978.68 187.222 Q1975.53 183.588 1975.53 177.222 Q1975.53 170.833 1978.68 167.222 Q1981.85 163.611 1987.43 163.611 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip450)\" d=\"M2025.04 165.231 L2025.04 169.213 Q2023.24 168.217 2021.41 167.731 Q2019.61 167.222 2017.75 167.222 Q2013.61 167.222 2011.32 169.861 Q2009.03 172.476 2009.03 177.222 Q2009.03 181.967 2011.32 184.606 Q2013.61 187.222 2017.75 187.222 Q2019.61 187.222 2021.41 186.736 Q2023.24 186.226 2025.04 185.231 L2025.04 189.166 Q2023.26 190 2021.34 190.416 Q2019.44 190.833 2017.29 190.833 Q2011.43 190.833 2007.98 187.152 Q2004.54 183.472 2004.54 177.222 Q2004.54 170.879 2008.01 167.245 Q2011.5 163.611 2017.57 163.611 Q2019.54 163.611 2021.41 164.027 Q2023.29 164.421 2025.04 165.231 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip450)\" d=\"M2044.23 177.129 Q2039.07 177.129 2037.08 178.31 Q2035.09 179.49 2035.09 182.338 Q2035.09 184.606 2036.57 185.949 Q2038.08 187.268 2040.65 187.268 Q2044.19 187.268 2046.32 184.768 Q2048.47 182.245 2048.47 178.078 L2048.47 177.129 L2044.23 177.129 M2052.73 175.37 L2052.73 190.162 L2048.47 190.162 L2048.47 186.226 Q2047.01 188.587 2044.84 189.722 Q2042.66 190.833 2039.51 190.833 Q2035.53 190.833 2033.17 188.611 Q2030.83 186.365 2030.83 182.615 Q2030.83 178.24 2033.75 176.018 Q2036.69 173.796 2042.5 173.796 L2048.47 173.796 L2048.47 173.379 Q2048.47 170.439 2046.53 168.842 Q2044.6 167.222 2041.11 167.222 Q2038.89 167.222 2036.78 167.754 Q2034.67 168.287 2032.73 169.351 L2032.73 165.416 Q2035.07 164.514 2037.27 164.074 Q2039.47 163.611 2041.55 163.611 Q2047.17 163.611 2049.95 166.527 Q2052.73 169.444 2052.73 175.37 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip450)\" d=\"M2061.5 154.143 L2065.76 154.143 L2065.76 190.162 L2061.5 190.162 L2061.5 154.143 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip450)\" d=\"M2106.27 165 L2106.27 169.027 Q2104.47 168.101 2102.52 167.639 Q2100.58 167.176 2098.49 167.176 Q2095.32 167.176 2093.72 168.148 Q2092.15 169.12 2092.15 171.064 Q2092.15 172.546 2093.29 173.402 Q2094.42 174.236 2097.85 175 L2099.3 175.324 Q2103.84 176.296 2105.74 178.078 Q2107.66 179.838 2107.66 183.009 Q2107.66 186.62 2104.79 188.726 Q2101.94 190.833 2096.94 190.833 Q2094.86 190.833 2092.59 190.416 Q2090.35 190.023 2087.85 189.212 L2087.85 184.814 Q2090.21 186.041 2092.5 186.666 Q2094.79 187.268 2097.04 187.268 Q2100.04 187.268 2101.66 186.25 Q2103.29 185.208 2103.29 183.333 Q2103.29 181.597 2102.1 180.671 Q2100.95 179.745 2096.99 178.888 L2095.51 178.541 Q2091.55 177.708 2089.79 175.995 Q2088.03 174.259 2088.03 171.25 Q2088.03 167.592 2090.62 165.602 Q2093.22 163.611 2097.98 163.611 Q2100.35 163.611 2102.43 163.958 Q2104.51 164.305 2106.27 165 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip450)\" d=\"M2133.1 165.231 L2133.1 169.213 Q2131.29 168.217 2129.47 167.731 Q2127.66 167.222 2125.81 167.222 Q2121.66 167.222 2119.37 169.861 Q2117.08 172.476 2117.08 177.222 Q2117.08 181.967 2119.37 184.606 Q2121.66 187.222 2125.81 187.222 Q2127.66 187.222 2129.47 186.736 Q2131.29 186.226 2133.1 185.231 L2133.1 189.166 Q2131.32 190 2129.4 190.416 Q2127.5 190.833 2125.35 190.833 Q2119.49 190.833 2116.04 187.152 Q2112.59 183.472 2112.59 177.222 Q2112.59 170.879 2116.06 167.245 Q2119.56 163.611 2125.62 163.611 Q2127.59 163.611 2129.47 164.027 Q2131.34 164.421 2133.1 165.231 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip450)\" d=\"M2162.06 174.513 L2162.06 190.162 L2157.8 190.162 L2157.8 174.652 Q2157.8 170.972 2156.36 169.143 Q2154.93 167.314 2152.06 167.314 Q2148.61 167.314 2146.62 169.514 Q2144.63 171.713 2144.63 175.509 L2144.63 190.162 L2140.35 190.162 L2140.35 154.143 L2144.63 154.143 L2144.63 168.264 Q2146.16 165.926 2148.22 164.768 Q2150.3 163.611 2153.01 163.611 Q2157.47 163.611 2159.77 166.389 Q2162.06 169.143 2162.06 174.513 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip450)\" d=\"M2180.6 167.222 Q2177.17 167.222 2175.18 169.907 Q2173.19 172.569 2173.19 177.222 Q2173.19 181.875 2175.16 184.56 Q2177.15 187.222 2180.6 187.222 Q2184 187.222 2185.99 184.537 Q2187.98 181.851 2187.98 177.222 Q2187.98 172.615 2185.99 169.93 Q2184 167.222 2180.6 167.222 M2180.6 163.611 Q2186.16 163.611 2189.33 167.222 Q2192.5 170.833 2192.5 177.222 Q2192.5 183.588 2189.33 187.222 Q2186.16 190.833 2180.6 190.833 Q2175.02 190.833 2171.85 187.222 Q2168.7 183.588 2168.7 177.222 Q2168.7 170.833 2171.85 167.222 Q2175.02 163.611 2180.6 163.611 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip450)\" d=\"M2209.6 167.222 Q2206.18 167.222 2204.19 169.907 Q2202.2 172.569 2202.2 177.222 Q2202.2 181.875 2204.16 184.56 Q2206.15 187.222 2209.6 187.222 Q2213.01 187.222 2215 184.537 Q2216.99 181.851 2216.99 177.222 Q2216.99 172.615 2215 169.93 Q2213.01 167.222 2209.6 167.222 M2209.6 163.611 Q2215.16 163.611 2218.33 167.222 Q2221.5 170.833 2221.5 177.222 Q2221.5 183.588 2218.33 187.222 Q2215.16 190.833 2209.6 190.833 Q2204.03 190.833 2200.85 187.222 Q2197.71 183.588 2197.71 177.222 Q2197.71 170.833 2200.85 167.222 Q2204.03 163.611 2209.6 163.611 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip450)\" d=\"M2228.56 154.143 L2232.82 154.143 L2232.82 190.162 L2228.56 190.162 L2228.56 154.143 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip450)\" d=\"M1842.66 199.122 L1842.66 250.322 L1893.86 250.322 L1893.86 199.122 L1842.66 199.122 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"none\"/>\n",
"<path clip-path=\"url(#clip450)\" d=\"M1980.72 205.983 L1980.72 209.525 L1976.64 209.525 Q1974.35 209.525 1973.45 210.451 Q1972.57 211.377 1972.57 213.784 L1972.57 216.076 L1979.58 216.076 L1979.58 219.386 L1972.57 219.386 L1972.57 242.002 L1968.29 242.002 L1968.29 219.386 L1964.21 219.386 L1964.21 216.076 L1968.29 216.076 L1968.29 214.27 Q1968.29 209.942 1970.3 207.974 Q1972.31 205.983 1976.69 205.983 L1980.72 205.983 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip450)\" d=\"M1996.06 228.969 Q1990.9 228.969 1988.91 230.15 Q1986.92 231.33 1986.92 234.178 Q1986.92 236.446 1988.4 237.789 Q1989.91 239.108 1992.48 239.108 Q1996.02 239.108 1998.15 236.608 Q2000.3 234.085 2000.3 229.918 L2000.3 228.969 L1996.06 228.969 M2004.56 227.21 L2004.56 242.002 L2000.3 242.002 L2000.3 238.066 Q1998.84 240.427 1996.67 241.562 Q1994.49 242.673 1991.34 242.673 Q1987.36 242.673 1985 240.451 Q1982.66 238.205 1982.66 234.455 Q1982.66 230.08 1985.58 227.858 Q1988.52 225.636 1994.33 225.636 L2000.3 225.636 L2000.3 225.219 Q2000.3 222.279 1998.36 220.682 Q1996.43 219.062 1992.94 219.062 Q1990.72 219.062 1988.61 219.594 Q1986.5 220.127 1984.56 221.191 L1984.56 217.256 Q1986.9 216.354 1989.1 215.914 Q1991.29 215.451 1993.38 215.451 Q1999 215.451 2001.78 218.367 Q2004.56 221.284 2004.56 227.21 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip450)\" d=\"M2033.52 221.053 Q2035.11 218.182 2037.34 216.817 Q2039.56 215.451 2042.57 215.451 Q2046.62 215.451 2048.82 218.298 Q2051.02 221.122 2051.02 226.353 L2051.02 242.002 L2046.73 242.002 L2046.73 226.492 Q2046.73 222.766 2045.42 220.96 Q2044.1 219.154 2041.39 219.154 Q2038.08 219.154 2036.16 221.354 Q2034.23 223.553 2034.23 227.349 L2034.23 242.002 L2029.95 242.002 L2029.95 226.492 Q2029.95 222.742 2028.63 220.96 Q2027.31 219.154 2024.56 219.154 Q2021.29 219.154 2019.37 221.377 Q2017.45 223.576 2017.45 227.349 L2017.45 242.002 L2013.17 242.002 L2013.17 216.076 L2017.45 216.076 L2017.45 220.104 Q2018.91 217.719 2020.95 216.585 Q2022.98 215.451 2025.79 215.451 Q2028.61 215.451 2030.58 216.886 Q2032.57 218.321 2033.52 221.053 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip450)\" d=\"M2059.51 216.076 L2063.77 216.076 L2063.77 242.002 L2059.51 242.002 L2059.51 216.076 M2059.51 205.983 L2063.77 205.983 L2063.77 211.377 L2059.51 211.377 L2059.51 205.983 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip450)\" d=\"M2072.68 205.983 L2076.94 205.983 L2076.94 242.002 L2072.68 242.002 L2072.68 205.983 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip450)\" d=\"M2085.85 216.076 L2090.11 216.076 L2090.11 242.002 L2085.85 242.002 L2085.85 216.076 M2085.85 205.983 L2090.11 205.983 L2090.11 211.377 L2085.85 211.377 L2085.85 205.983 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip450)\" d=\"M2121.2 227.974 L2121.2 230.057 L2101.62 230.057 Q2101.9 234.455 2104.26 236.77 Q2106.64 239.062 2110.88 239.062 Q2113.33 239.062 2115.62 238.46 Q2117.94 237.858 2120.21 236.654 L2120.21 240.682 Q2117.91 241.654 2115.51 242.164 Q2113.1 242.673 2110.62 242.673 Q2104.42 242.673 2100.79 239.062 Q2097.17 235.451 2097.17 229.293 Q2097.17 222.928 2100.6 219.201 Q2104.05 215.451 2109.88 215.451 Q2115.11 215.451 2118.15 218.83 Q2121.2 222.187 2121.2 227.974 M2116.94 226.724 Q2116.9 223.229 2114.97 221.145 Q2113.08 219.062 2109.93 219.062 Q2106.36 219.062 2104.21 221.076 Q2102.08 223.09 2101.76 226.747 L2116.94 226.724 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip450)\" d=\"M2144.72 216.84 L2144.72 220.867 Q2142.91 219.941 2140.97 219.479 Q2139.03 219.016 2136.94 219.016 Q2133.77 219.016 2132.17 219.988 Q2130.6 220.96 2130.6 222.904 Q2130.6 224.386 2131.73 225.242 Q2132.87 226.076 2136.29 226.84 L2137.75 227.164 Q2142.29 228.136 2144.19 229.918 Q2146.11 231.678 2146.11 234.849 Q2146.11 238.46 2143.24 240.566 Q2140.39 242.673 2135.39 242.673 Q2133.31 242.673 2131.04 242.256 Q2128.79 241.863 2126.29 241.052 L2126.29 236.654 Q2128.66 237.881 2130.95 238.506 Q2133.24 239.108 2135.48 239.108 Q2138.49 239.108 2140.11 238.09 Q2141.73 237.048 2141.73 235.173 Q2141.73 233.437 2140.55 232.511 Q2139.4 231.585 2135.44 230.728 L2133.96 230.381 Q2130 229.548 2128.24 227.835 Q2126.48 226.099 2126.48 223.09 Q2126.48 219.432 2129.07 217.442 Q2131.66 215.451 2136.43 215.451 Q2138.79 215.451 2140.88 215.798 Q2142.96 216.145 2144.72 216.84 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><circle clip-path=\"url(#clip450)\" cx=\"1868.26\" cy=\"276.562\" r=\"23\" fill=\"#dc143c\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"none\"/>\n",
"<path clip-path=\"url(#clip450)\" d=\"M1982.64 268.68 L1982.64 272.707 Q1980.83 271.781 1978.89 271.319 Q1976.94 270.856 1974.86 270.856 Q1971.69 270.856 1970.09 271.828 Q1968.52 272.8 1968.52 274.744 Q1968.52 276.226 1969.65 277.082 Q1970.79 277.916 1974.21 278.68 L1975.67 279.004 Q1980.21 279.976 1982.11 281.758 Q1984.03 283.518 1984.03 286.689 Q1984.03 290.3 1981.16 292.406 Q1978.31 294.513 1973.31 294.513 Q1971.23 294.513 1968.96 294.096 Q1966.71 293.703 1964.21 292.892 L1964.21 288.494 Q1966.57 289.721 1968.86 290.346 Q1971.16 290.948 1973.4 290.948 Q1976.41 290.948 1978.03 289.93 Q1979.65 288.888 1979.65 287.013 Q1979.65 285.277 1978.47 284.351 Q1977.31 283.425 1973.36 282.568 L1971.87 282.221 Q1967.92 281.388 1966.16 279.675 Q1964.4 277.939 1964.4 274.93 Q1964.4 271.272 1966.99 269.282 Q1969.58 267.291 1974.35 267.291 Q1976.71 267.291 1978.8 267.638 Q1980.88 267.985 1982.64 268.68 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip450)\" d=\"M2009.47 268.911 L2009.47 272.893 Q2007.66 271.897 2005.83 271.411 Q2004.03 270.902 2002.17 270.902 Q1998.03 270.902 1995.74 273.541 Q1993.45 276.156 1993.45 280.902 Q1993.45 285.647 1995.74 288.286 Q1998.03 290.902 2002.17 290.902 Q2004.03 290.902 2005.83 290.416 Q2007.66 289.906 2009.47 288.911 L2009.47 292.846 Q2007.68 293.68 2005.76 294.096 Q2003.86 294.513 2001.71 294.513 Q1995.86 294.513 1992.41 290.832 Q1988.96 287.152 1988.96 280.902 Q1988.96 274.559 1992.43 270.925 Q1995.92 267.291 2001.99 267.291 Q2003.96 267.291 2005.83 267.707 Q2007.71 268.101 2009.47 268.911 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip450)\" d=\"M2038.42 278.193 L2038.42 293.842 L2034.17 293.842 L2034.17 278.332 Q2034.17 274.652 2032.73 272.823 Q2031.29 270.994 2028.42 270.994 Q2024.98 270.994 2022.98 273.194 Q2020.99 275.393 2020.99 279.189 L2020.99 293.842 L2016.71 293.842 L2016.71 257.823 L2020.99 257.823 L2020.99 271.944 Q2022.52 269.606 2024.58 268.448 Q2026.67 267.291 2029.37 267.291 Q2033.84 267.291 2036.13 270.069 Q2038.42 272.823 2038.42 278.193 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip450)\" d=\"M2056.97 270.902 Q2053.54 270.902 2051.55 273.587 Q2049.56 276.249 2049.56 280.902 Q2049.56 285.555 2051.53 288.24 Q2053.52 290.902 2056.97 290.902 Q2060.37 290.902 2062.36 288.217 Q2064.35 285.531 2064.35 280.902 Q2064.35 276.295 2062.36 273.61 Q2060.37 270.902 2056.97 270.902 M2056.97 267.291 Q2062.52 267.291 2065.69 270.902 Q2068.86 274.513 2068.86 280.902 Q2068.86 287.268 2065.69 290.902 Q2062.52 294.513 2056.97 294.513 Q2051.39 294.513 2048.22 290.902 Q2045.07 287.268 2045.07 280.902 Q2045.07 274.513 2048.22 270.902 Q2051.39 267.291 2056.97 267.291 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip450)\" d=\"M2085.97 270.902 Q2082.54 270.902 2080.55 273.587 Q2078.56 276.249 2078.56 280.902 Q2078.56 285.555 2080.53 288.24 Q2082.52 290.902 2085.97 290.902 Q2089.37 290.902 2091.36 288.217 Q2093.35 285.531 2093.35 280.902 Q2093.35 276.295 2091.36 273.61 Q2089.37 270.902 2085.97 270.902 M2085.97 267.291 Q2091.53 267.291 2094.7 270.902 Q2097.87 274.513 2097.87 280.902 Q2097.87 287.268 2094.7 290.902 Q2091.53 294.513 2085.97 294.513 Q2080.39 294.513 2077.22 290.902 Q2074.07 287.268 2074.07 280.902 Q2074.07 274.513 2077.22 270.902 Q2080.39 267.291 2085.97 267.291 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip450)\" d=\"M2104.93 257.823 L2109.19 257.823 L2109.19 293.842 L2104.93 293.842 L2104.93 257.823 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip450)\" d=\"M2134.63 268.68 L2134.63 272.707 Q2132.82 271.781 2130.88 271.319 Q2128.93 270.856 2126.85 270.856 Q2123.68 270.856 2122.08 271.828 Q2120.51 272.8 2120.51 274.744 Q2120.51 276.226 2121.64 277.082 Q2122.78 277.916 2126.2 278.68 L2127.66 279.004 Q2132.2 279.976 2134.1 281.758 Q2136.02 283.518 2136.02 286.689 Q2136.02 290.3 2133.15 292.406 Q2130.3 294.513 2125.3 294.513 Q2123.22 294.513 2120.95 294.096 Q2118.7 293.703 2116.2 292.892 L2116.2 288.494 Q2118.56 289.721 2120.85 290.346 Q2123.15 290.948 2125.39 290.948 Q2128.4 290.948 2130.02 289.93 Q2131.64 288.888 2131.64 287.013 Q2131.64 285.277 2130.46 284.351 Q2129.3 283.425 2125.35 282.568 L2123.86 282.221 Q2119.91 281.388 2118.15 279.675 Q2116.39 277.939 2116.39 274.93 Q2116.39 271.272 2118.98 269.282 Q2121.57 267.291 2126.34 267.291 Q2128.7 267.291 2130.78 267.638 Q2132.87 267.985 2134.63 268.68 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /></svg>\n"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pl = plot(size=(600,600), xlim=(-1.5, 1.5), ylim=(-1.5, 1.5))\n",
"\n",
"for (j, p) in enumerate(ps)\n",
" plot!(\n",
" pl,\n",
" [tuple(p...), tuple(xs[attend_school[j]]...)],\n",
" label= j==1 ? \"local school\" : nothing,\n",
" c = \"navy\",\n",
" ls = :dash\n",
" )\n",
"end\n",
"\n",
"scatter!(pl, [tuple(p...) for p in ps], m=:square, c=:black, msc=:auto, label=\"families\")\n",
"scatter!(pl, [tuple(x...) for x in xs], c=:crimson, msc=:auto, ms=7, label=\"schools\")\n",
"\n",
"pl"
]
},
{
"cell_type": "markdown",
"id": "1ae4cdf6-d220-4868-abd9-3feae229eae1",
"metadata": {},
"source": [
"## Evaluating the model\n",
"\n",
"The output above suggests that this model finds intuitive \"neighborhoods\" in the input data and produces a school for each. In this regard, the problem is very similar to [$k$-means clustering](https://en.wikipedia.org/wiki/K-means_clustering). However, the $k$-means clustering solution minimizes the *sum* (equivalently, average) Euclidean distance between families and schools, and therefore differs from our model. For example, if there is an outlier student who lives very far from the others, our model will place a school halfway between her family and the population center, whereas the $k$-means clustering solution will not be as drastically swayed. This means that the school location problem is not very *robust* to outliers. Such is the cost of fairness.\n",
"\n",
"Because of its integrality constraints, the school location problem is very difficult to solve. This is another commonality with $k$-means clustering, which is known to be NP-hard. \n",
"\n",
"## Comparison with $k$-means\n",
"\n",
"Let's try using a heuristic algorithm for the $k$-means clustering problem (which, confusingly, is often called the \"$k$-means algorithm\") to produce an alternative solution and see how it differs from that above. "
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "rational-sensitivity",
"metadata": {},
"outputs": [
{
"data": {
"image/svg+xml": [
"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n",
"<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"600\" height=\"600\" viewBox=\"0 0 2400 2400\">\n",
"<defs>\n",
" <clipPath id=\"clip490\">\n",
" <rect x=\"0\" y=\"0\" width=\"2400\" height=\"2400\"/>\n",
" </clipPath>\n",
"</defs>\n",
"<path clip-path=\"url(#clip490)\" d=\"\n",
"M0 2400 L2400 2400 L2400 0 L0 0 Z\n",
" \" fill=\"#ffffff\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<defs>\n",
" <clipPath id=\"clip491\">\n",
" <rect x=\"480\" y=\"240\" width=\"1681\" height=\"1681\"/>\n",
" </clipPath>\n",
"</defs>\n",
"<path clip-path=\"url(#clip490)\" d=\"\n",
"M193.936 2261.17 L2352.76 2261.17 L2352.76 47.2441 L193.936 47.2441 Z\n",
" \" fill=\"#ffffff\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<defs>\n",
" <clipPath id=\"clip492\">\n",
" <rect x=\"193\" y=\"47\" width=\"2160\" height=\"2215\"/>\n",
" </clipPath>\n",
"</defs>\n",
"<polyline clip-path=\"url(#clip492)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 193.936,2261.17 193.936,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip492)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 553.739,2261.17 553.739,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip492)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 913.543,2261.17 913.543,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip492)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 1273.35,2261.17 1273.35,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip492)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 1633.15,2261.17 1633.15,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip492)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 1992.95,2261.17 1992.95,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip492)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 2352.76,2261.17 2352.76,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip490)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 193.936,2261.17 2352.76,2261.17 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip490)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 193.936,2261.17 193.936,2242.27 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip490)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 553.739,2261.17 553.739,2242.27 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip490)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 913.543,2261.17 913.543,2242.27 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip490)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 1273.35,2261.17 1273.35,2242.27 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip490)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 1633.15,2261.17 1633.15,2242.27 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip490)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 1992.95,2261.17 1992.95,2242.27 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip490)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 2352.76,2261.17 2352.76,2242.27 \n",
" \"/>\n",
"<path clip-path=\"url(#clip490)\" d=\"M140.962 2306.74 L170.638 2306.74 L170.638 2310.67 L140.962 2310.67 L140.962 2306.74 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip490)\" d=\"M181.54 2319.63 L189.179 2319.63 L189.179 2293.27 L180.869 2294.93 L180.869 2290.67 L189.133 2289.01 L193.809 2289.01 L193.809 2319.63 L201.448 2319.63 L201.448 2323.57 L181.54 2323.57 L181.54 2319.63 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip490)\" d=\"M210.892 2317.69 L215.776 2317.69 L215.776 2323.57 L210.892 2323.57 L210.892 2317.69 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip490)\" d=\"M226.008 2289.01 L244.364 2289.01 L244.364 2292.94 L230.29 2292.94 L230.29 2301.42 Q231.308 2301.07 232.327 2300.91 Q233.346 2300.72 234.364 2300.72 Q240.151 2300.72 243.531 2303.89 Q246.91 2307.06 246.91 2312.48 Q246.91 2318.06 243.438 2321.16 Q239.966 2324.24 233.646 2324.24 Q231.471 2324.24 229.202 2323.87 Q226.957 2323.5 224.549 2322.76 L224.549 2318.06 Q226.633 2319.19 228.855 2319.75 Q231.077 2320.3 233.554 2320.3 Q237.558 2320.3 239.896 2318.2 Q242.234 2316.09 242.234 2312.48 Q242.234 2308.87 239.896 2306.76 Q237.558 2304.66 233.554 2304.66 Q231.679 2304.66 229.804 2305.07 Q227.952 2305.49 226.008 2306.37 L226.008 2289.01 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip490)\" d=\"M500.267 2306.74 L529.943 2306.74 L529.943 2310.67 L500.267 2310.67 L500.267 2306.74 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip490)\" d=\"M540.846 2319.63 L548.485 2319.63 L548.485 2293.27 L540.175 2294.93 L540.175 2290.67 L548.438 2289.01 L553.114 2289.01 L553.114 2319.63 L560.753 2319.63 L560.753 2323.57 L540.846 2323.57 L540.846 2319.63 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip490)\" d=\"M570.198 2317.69 L575.082 2317.69 L575.082 2323.57 L570.198 2323.57 L570.198 2317.69 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip490)\" d=\"M595.267 2292.09 Q591.656 2292.09 589.827 2295.65 Q588.022 2299.19 588.022 2306.32 Q588.022 2313.43 589.827 2316.99 Q591.656 2320.54 595.267 2320.54 Q598.901 2320.54 600.707 2316.99 Q602.535 2313.43 602.535 2306.32 Q602.535 2299.19 600.707 2295.65 Q598.901 2292.09 595.267 2292.09 M595.267 2288.38 Q601.077 2288.38 604.133 2292.99 Q607.211 2297.57 607.211 2306.32 Q607.211 2315.05 604.133 2319.66 Q601.077 2324.24 595.267 2324.24 Q589.457 2324.24 586.378 2319.66 Q583.322 2315.05 583.322 2306.32 Q583.322 2297.57 586.378 2292.99 Q589.457 2288.38 595.267 2288.38 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip490)\" d=\"M860.568 2306.74 L890.244 2306.74 L890.244 2310.67 L860.568 2310.67 L860.568 2306.74 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip490)\" d=\"M910.337 2292.09 Q906.726 2292.09 904.897 2295.65 Q903.091 2299.19 903.091 2306.32 Q903.091 2313.43 904.897 2316.99 Q906.726 2320.54 910.337 2320.54 Q913.971 2320.54 915.776 2316.99 Q917.605 2313.43 917.605 2306.32 Q917.605 2299.19 915.776 2295.65 Q913.971 2292.09 910.337 2292.09 M910.337 2288.38 Q916.147 2288.38 919.202 2292.99 Q922.281 2297.57 922.281 2306.32 Q922.281 2315.05 919.202 2319.66 Q916.147 2324.24 910.337 2324.24 Q904.526 2324.24 901.448 2319.66 Q898.392 2315.05 898.392 2306.32 Q898.392 2297.57 901.448 2292.99 Q904.526 2288.38 910.337 2288.38 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip490)\" d=\"M930.499 2317.69 L935.383 2317.69 L935.383 2323.57 L930.499 2323.57 L930.499 2317.69 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip490)\" d=\"M945.614 2289.01 L963.971 2289.01 L963.971 2292.94 L949.897 2292.94 L949.897 2301.42 Q950.915 2301.07 951.934 2300.91 Q952.952 2300.72 953.971 2300.72 Q959.758 2300.72 963.137 2303.89 Q966.517 2307.06 966.517 2312.48 Q966.517 2318.06 963.045 2321.16 Q959.572 2324.24 953.253 2324.24 Q951.077 2324.24 948.809 2323.87 Q946.563 2323.5 944.156 2322.76 L944.156 2318.06 Q946.239 2319.19 948.461 2319.75 Q950.684 2320.3 953.16 2320.3 Q957.165 2320.3 959.503 2318.2 Q961.841 2316.09 961.841 2312.48 Q961.841 2308.87 959.503 2306.76 Q957.165 2304.66 953.16 2304.66 Q951.285 2304.66 949.41 2305.07 Q947.559 2305.49 945.614 2306.37 L945.614 2289.01 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip490)\" d=\"M1250.73 2292.09 Q1247.12 2292.09 1245.29 2295.65 Q1243.49 2299.19 1243.49 2306.32 Q1243.49 2313.43 1245.29 2316.99 Q1247.12 2320.54 1250.73 2320.54 Q1254.36 2320.54 1256.17 2316.99 Q1258 2313.43 1258 2306.32 Q1258 2299.19 1256.17 2295.65 Q1254.36 2292.09 1250.73 2292.09 M1250.73 2288.38 Q1256.54 2288.38 1259.6 2292.99 Q1262.67 2297.57 1262.67 2306.32 Q1262.67 2315.05 1259.6 2319.66 Q1256.54 2324.24 1250.73 2324.24 Q1244.92 2324.24 1241.84 2319.66 Q1238.79 2315.05 1238.79 2306.32 Q1238.79 2297.57 1241.84 2292.99 Q1244.92 2288.38 1250.73 2288.38 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip490)\" d=\"M1270.89 2317.69 L1275.78 2317.69 L1275.78 2323.57 L1270.89 2323.57 L1270.89 2317.69 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip490)\" d=\"M1295.96 2292.09 Q1292.35 2292.09 1290.52 2295.65 Q1288.72 2299.19 1288.72 2306.32 Q1288.72 2313.43 1290.52 2316.99 Q1292.35 2320.54 1295.96 2320.54 Q1299.6 2320.54 1301.4 2316.99 Q1303.23 2313.43 1303.23 2306.32 Q1303.23 2299.19 1301.4 2295.65 Q1299.6 2292.09 1295.96 2292.09 M1295.96 2288.38 Q1301.77 2288.38 1304.83 2292.99 Q1307.91 2297.57 1307.91 2306.32 Q1307.91 2315.05 1304.83 2319.66 Q1301.77 2324.24 1295.96 2324.24 Q1290.15 2324.24 1287.07 2319.66 Q1284.02 2315.05 1284.02 2306.32 Q1284.02 2297.57 1287.07 2292.99 Q1290.15 2288.38 1295.96 2288.38 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip490)\" d=\"M1611.03 2292.09 Q1607.42 2292.09 1605.59 2295.65 Q1603.79 2299.19 1603.79 2306.32 Q1603.79 2313.43 1605.59 2316.99 Q1607.42 2320.54 1611.03 2320.54 Q1614.67 2320.54 1616.47 2316.99 Q1618.3 2313.43 1618.3 2306.32 Q1618.3 2299.19 1616.47 2295.65 Q1614.67 2292.09 1611.03 2292.09 M1611.03 2288.38 Q1616.84 2288.38 1619.9 2292.99 Q1622.98 2297.57 1622.98 2306.32 Q1622.98 2315.05 1619.9 2319.66 Q1616.84 2324.24 1611.03 2324.24 Q1605.22 2324.24 1602.14 2319.66 Q1599.09 2315.05 1599.09 2306.32 Q1599.09 2297.57 1602.14 2292.99 Q1605.22 2288.38 1611.03 2288.38 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip490)\" d=\"M1631.19 2317.69 L1636.08 2317.69 L1636.08 2323.57 L1631.19 2323.57 L1631.19 2317.69 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip490)\" d=\"M1646.31 2289.01 L1664.67 2289.01 L1664.67 2292.94 L1650.59 2292.94 L1650.59 2301.42 Q1651.61 2301.07 1652.63 2300.91 Q1653.65 2300.72 1654.67 2300.72 Q1660.45 2300.72 1663.83 2303.89 Q1667.21 2307.06 1667.21 2312.48 Q1667.21 2318.06 1663.74 2321.16 Q1660.27 2324.24 1653.95 2324.24 Q1651.77 2324.24 1649.5 2323.87 Q1647.26 2323.5 1644.85 2322.76 L1644.85 2318.06 Q1646.93 2319.19 1649.16 2319.75 Q1651.38 2320.3 1653.86 2320.3 Q1657.86 2320.3 1660.2 2318.2 Q1662.54 2316.09 1662.54 2312.48 Q1662.54 2308.87 1660.2 2306.76 Q1657.86 2304.66 1653.86 2304.66 Q1651.98 2304.66 1650.11 2305.07 Q1648.25 2305.49 1646.31 2306.37 L1646.31 2289.01 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip490)\" d=\"M1960.11 2319.63 L1967.74 2319.63 L1967.74 2293.27 L1959.43 2294.93 L1959.43 2290.67 L1967.7 2289.01 L1972.37 2289.01 L1972.37 2319.63 L1980.01 2319.63 L1980.01 2323.57 L1960.11 2323.57 L1960.11 2319.63 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip490)\" d=\"M1989.46 2317.69 L1994.34 2317.69 L1994.34 2323.57 L1989.46 2323.57 L1989.46 2317.69 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip490)\" d=\"M2014.53 2292.09 Q2010.92 2292.09 2009.09 2295.65 Q2007.28 2299.19 2007.28 2306.32 Q2007.28 2313.43 2009.09 2316.99 Q2010.92 2320.54 2014.53 2320.54 Q2018.16 2320.54 2019.97 2316.99 Q2021.8 2313.43 2021.8 2306.32 Q2021.8 2299.19 2019.97 2295.65 Q2018.16 2292.09 2014.53 2292.09 M2014.53 2288.38 Q2020.34 2288.38 2023.39 2292.99 Q2026.47 2297.57 2026.47 2306.32 Q2026.47 2315.05 2023.39 2319.66 Q2020.34 2324.24 2014.53 2324.24 Q2008.72 2324.24 2005.64 2319.66 Q2002.58 2315.05 2002.58 2306.32 Q2002.58 2297.57 2005.64 2292.99 Q2008.72 2288.38 2014.53 2288.38 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip490)\" d=\"M2320.41 2319.63 L2328.05 2319.63 L2328.05 2293.27 L2319.74 2294.93 L2319.74 2290.67 L2328 2289.01 L2332.67 2289.01 L2332.67 2319.63 L2340.31 2319.63 L2340.31 2323.57 L2320.41 2323.57 L2320.41 2319.63 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip490)\" d=\"M2349.76 2317.69 L2354.64 2317.69 L2354.64 2323.57 L2349.76 2323.57 L2349.76 2317.69 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip490)\" d=\"M2364.87 2289.01 L2383.23 2289.01 L2383.23 2292.94 L2369.16 2292.94 L2369.16 2301.42 Q2370.17 2301.07 2371.19 2300.91 Q2372.21 2300.72 2373.23 2300.72 Q2379.02 2300.72 2382.4 2303.89 Q2385.78 2307.06 2385.78 2312.48 Q2385.78 2318.06 2382.3 2321.16 Q2378.83 2324.24 2372.51 2324.24 Q2370.34 2324.24 2368.07 2323.87 Q2365.82 2323.5 2363.42 2322.76 L2363.42 2318.06 Q2365.5 2319.19 2367.72 2319.75 Q2369.94 2320.3 2372.42 2320.3 Q2376.42 2320.3 2378.76 2318.2 Q2381.1 2316.09 2381.1 2312.48 Q2381.1 2308.87 2378.76 2306.76 Q2376.42 2304.66 2372.42 2304.66 Q2370.55 2304.66 2368.67 2305.07 Q2366.82 2305.49 2364.87 2306.37 L2364.87 2289.01 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><polyline clip-path=\"url(#clip492)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 193.936,2261.17 2352.76,2261.17 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip492)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 193.936,1892.18 2352.76,1892.18 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip492)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 193.936,1523.19 2352.76,1523.19 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip492)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 193.936,1154.21 2352.76,1154.21 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip492)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 193.936,785.219 2352.76,785.219 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip492)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 193.936,416.231 2352.76,416.231 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip492)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 193.936,47.2441 2352.76,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip490)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 193.936,2261.17 193.936,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip490)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 193.936,2261.17 212.834,2261.17 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip490)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 193.936,1892.18 212.834,1892.18 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip490)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 193.936,1523.19 212.834,1523.19 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip490)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 193.936,1154.21 212.834,1154.21 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip490)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 193.936,785.219 212.834,785.219 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip490)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 193.936,416.231 212.834,416.231 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip490)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 193.936,47.2441 212.834,47.2441 \n",
" \"/>\n",
"<path clip-path=\"url(#clip490)\" d=\"M51.9875 2261.62 L81.6633 2261.62 L81.6633 2265.55 L51.9875 2265.55 L51.9875 2261.62 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip490)\" d=\"M92.566 2274.51 L100.205 2274.51 L100.205 2248.15 L91.8947 2249.81 L91.8947 2245.55 L100.159 2243.89 L104.834 2243.89 L104.834 2274.51 L112.473 2274.51 L112.473 2278.45 L92.566 2278.45 L92.566 2274.51 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip490)\" d=\"M121.918 2272.57 L126.802 2272.57 L126.802 2278.45 L121.918 2278.45 L121.918 2272.57 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip490)\" d=\"M137.033 2243.89 L155.39 2243.89 L155.39 2247.82 L141.316 2247.82 L141.316 2256.3 Q142.334 2255.95 143.353 2255.79 Q144.371 2255.6 145.39 2255.6 Q151.177 2255.6 154.556 2258.77 Q157.936 2261.94 157.936 2267.36 Q157.936 2272.94 154.464 2276.04 Q150.992 2279.12 144.672 2279.12 Q142.496 2279.12 140.228 2278.75 Q137.982 2278.38 135.575 2277.64 L135.575 2272.94 Q137.658 2274.07 139.881 2274.63 Q142.103 2275.18 144.58 2275.18 Q148.584 2275.18 150.922 2273.08 Q153.26 2270.97 153.26 2267.36 Q153.26 2263.75 150.922 2261.64 Q148.584 2259.54 144.58 2259.54 Q142.705 2259.54 140.83 2259.95 Q138.978 2260.37 137.033 2261.25 L137.033 2243.89 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip490)\" d=\"M50.9921 1892.63 L80.6679 1892.63 L80.6679 1896.57 L50.9921 1896.57 L50.9921 1892.63 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip490)\" d=\"M91.5706 1905.53 L99.2095 1905.53 L99.2095 1879.16 L90.8993 1880.83 L90.8993 1876.57 L99.1632 1874.9 L103.839 1874.9 L103.839 1905.53 L111.478 1905.53 L111.478 1909.46 L91.5706 1909.46 L91.5706 1905.53 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip490)\" d=\"M120.922 1903.58 L125.807 1903.58 L125.807 1909.46 L120.922 1909.46 L120.922 1903.58 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip490)\" d=\"M145.992 1877.98 Q142.381 1877.98 140.552 1881.54 Q138.746 1885.09 138.746 1892.22 Q138.746 1899.32 140.552 1902.89 Q142.381 1906.43 145.992 1906.43 Q149.626 1906.43 151.431 1902.89 Q153.26 1899.32 153.26 1892.22 Q153.26 1885.09 151.431 1881.54 Q149.626 1877.98 145.992 1877.98 M145.992 1874.28 Q151.802 1874.28 154.857 1878.88 Q157.936 1883.47 157.936 1892.22 Q157.936 1900.94 154.857 1905.55 Q151.802 1910.13 145.992 1910.13 Q140.181 1910.13 137.103 1905.55 Q134.047 1900.94 134.047 1892.22 Q134.047 1883.47 137.103 1878.88 Q140.181 1874.28 145.992 1874.28 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip490)\" d=\"M51.9875 1523.64 L81.6633 1523.64 L81.6633 1527.58 L51.9875 1527.58 L51.9875 1523.64 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip490)\" d=\"M101.756 1508.99 Q98.1447 1508.99 96.316 1512.56 Q94.5104 1516.1 94.5104 1523.23 Q94.5104 1530.33 96.316 1533.9 Q98.1447 1537.44 101.756 1537.44 Q105.39 1537.44 107.196 1533.9 Q109.024 1530.33 109.024 1523.23 Q109.024 1516.1 107.196 1512.56 Q105.39 1508.99 101.756 1508.99 M101.756 1505.29 Q107.566 1505.29 110.621 1509.89 Q113.7 1514.48 113.7 1523.23 Q113.7 1531.95 110.621 1536.56 Q107.566 1541.14 101.756 1541.14 Q95.9456 1541.14 92.8669 1536.56 Q89.8114 1531.95 89.8114 1523.23 Q89.8114 1514.48 92.8669 1509.89 Q95.9456 1505.29 101.756 1505.29 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip490)\" d=\"M121.918 1534.59 L126.802 1534.59 L126.802 1540.47 L121.918 1540.47 L121.918 1534.59 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip490)\" d=\"M137.033 1505.91 L155.39 1505.91 L155.39 1509.85 L141.316 1509.85 L141.316 1518.32 Q142.334 1517.97 143.353 1517.81 Q144.371 1517.63 145.39 1517.63 Q151.177 1517.63 154.556 1520.8 Q157.936 1523.97 157.936 1529.39 Q157.936 1534.96 154.464 1538.07 Q150.992 1541.14 144.672 1541.14 Q142.496 1541.14 140.228 1540.77 Q137.982 1540.4 135.575 1539.66 L135.575 1534.96 Q137.658 1536.1 139.881 1536.65 Q142.103 1537.21 144.58 1537.21 Q148.584 1537.21 150.922 1535.1 Q153.26 1533 153.26 1529.39 Q153.26 1525.77 150.922 1523.67 Q148.584 1521.56 144.58 1521.56 Q142.705 1521.56 140.83 1521.98 Q138.978 1522.39 137.033 1523.27 L137.033 1505.91 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip490)\" d=\"M100.76 1140 Q97.1493 1140 95.3206 1143.57 Q93.515 1147.11 93.515 1154.24 Q93.515 1161.35 95.3206 1164.91 Q97.1493 1168.45 100.76 1168.45 Q104.395 1168.45 106.2 1164.91 Q108.029 1161.35 108.029 1154.24 Q108.029 1147.11 106.2 1143.57 Q104.395 1140 100.76 1140 M100.76 1136.3 Q106.571 1136.3 109.626 1140.91 Q112.705 1145.49 112.705 1154.24 Q112.705 1162.97 109.626 1167.57 Q106.571 1172.16 100.76 1172.16 Q94.9502 1172.16 91.8715 1167.57 Q88.816 1162.97 88.816 1154.24 Q88.816 1145.49 91.8715 1140.91 Q94.9502 1136.3 100.76 1136.3 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip490)\" d=\"M120.922 1165.61 L125.807 1165.61 L125.807 1171.49 L120.922 1171.49 L120.922 1165.61 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip490)\" d=\"M145.992 1140 Q142.381 1140 140.552 1143.57 Q138.746 1147.11 138.746 1154.24 Q138.746 1161.35 140.552 1164.91 Q142.381 1168.45 145.992 1168.45 Q149.626 1168.45 151.431 1164.91 Q153.26 1161.35 153.26 1154.24 Q153.26 1147.11 151.431 1143.57 Q149.626 1140 145.992 1140 M145.992 1136.3 Q151.802 1136.3 154.857 1140.91 Q157.936 1145.49 157.936 1154.24 Q157.936 1162.97 154.857 1167.57 Q151.802 1172.16 145.992 1172.16 Q140.181 1172.16 137.103 1167.57 Q134.047 1162.97 134.047 1154.24 Q134.047 1145.49 137.103 1140.91 Q140.181 1136.3 145.992 1136.3 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip490)\" d=\"M101.756 771.017 Q98.1447 771.017 96.316 774.582 Q94.5104 778.124 94.5104 785.253 Q94.5104 792.36 96.316 795.925 Q98.1447 799.466 101.756 799.466 Q105.39 799.466 107.196 795.925 Q109.024 792.36 109.024 785.253 Q109.024 778.124 107.196 774.582 Q105.39 771.017 101.756 771.017 M101.756 767.314 Q107.566 767.314 110.621 771.92 Q113.7 776.503 113.7 785.253 Q113.7 793.98 110.621 798.587 Q107.566 803.17 101.756 803.17 Q95.9456 803.17 92.8669 798.587 Q89.8114 793.98 89.8114 785.253 Q89.8114 776.503 92.8669 771.92 Q95.9456 767.314 101.756 767.314 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip490)\" d=\"M121.918 796.619 L126.802 796.619 L126.802 802.499 L121.918 802.499 L121.918 796.619 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip490)\" d=\"M137.033 767.939 L155.39 767.939 L155.39 771.874 L141.316 771.874 L141.316 780.346 Q142.334 779.999 143.353 779.837 Q144.371 779.652 145.39 779.652 Q151.177 779.652 154.556 782.823 Q157.936 785.994 157.936 791.411 Q157.936 796.989 154.464 800.091 Q150.992 803.17 144.672 803.17 Q142.496 803.17 140.228 802.8 Q137.982 802.429 135.575 801.689 L135.575 796.989 Q137.658 798.124 139.881 798.679 Q142.103 799.235 144.58 799.235 Q148.584 799.235 150.922 797.128 Q153.26 795.022 153.26 791.411 Q153.26 787.8 150.922 785.693 Q148.584 783.587 144.58 783.587 Q142.705 783.587 140.83 784.003 Q138.978 784.42 137.033 785.3 L137.033 767.939 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip490)\" d=\"M91.5706 429.576 L99.2095 429.576 L99.2095 403.211 L90.8993 404.877 L90.8993 400.618 L99.1632 398.951 L103.839 398.951 L103.839 429.576 L111.478 429.576 L111.478 433.511 L91.5706 433.511 L91.5706 429.576 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip490)\" d=\"M120.922 427.632 L125.807 427.632 L125.807 433.511 L120.922 433.511 L120.922 427.632 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip490)\" d=\"M145.992 402.03 Q142.381 402.03 140.552 405.595 Q138.746 409.137 138.746 416.266 Q138.746 423.373 140.552 426.937 Q142.381 430.479 145.992 430.479 Q149.626 430.479 151.431 426.937 Q153.26 423.373 153.26 416.266 Q153.26 409.137 151.431 405.595 Q149.626 402.03 145.992 402.03 M145.992 398.326 Q151.802 398.326 154.857 402.933 Q157.936 407.516 157.936 416.266 Q157.936 424.993 154.857 429.599 Q151.802 434.183 145.992 434.183 Q140.181 434.183 137.103 429.599 Q134.047 424.993 134.047 416.266 Q134.047 407.516 137.103 402.933 Q140.181 398.326 145.992 398.326 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip490)\" d=\"M92.566 60.5889 L100.205 60.5889 L100.205 34.2233 L91.8947 35.89 L91.8947 31.6308 L100.159 29.9641 L104.834 29.9641 L104.834 60.5889 L112.473 60.5889 L112.473 64.5241 L92.566 64.5241 L92.566 60.5889 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip490)\" d=\"M121.918 58.6445 L126.802 58.6445 L126.802 64.5241 L121.918 64.5241 L121.918 58.6445 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip490)\" d=\"M137.033 29.9641 L155.39 29.9641 L155.39 33.8993 L141.316 33.8993 L141.316 42.3714 Q142.334 42.0242 143.353 41.8622 Q144.371 41.677 145.39 41.677 Q151.177 41.677 154.556 44.8483 Q157.936 48.0196 157.936 53.4362 Q157.936 59.0149 154.464 62.1167 Q150.992 65.1954 144.672 65.1954 Q142.496 65.1954 140.228 64.825 Q137.982 64.4547 135.575 63.7139 L135.575 59.0149 Q137.658 60.1491 139.881 60.7047 Q142.103 61.2602 144.58 61.2602 Q148.584 61.2602 150.922 59.1538 Q153.26 57.0473 153.26 53.4362 Q153.26 49.8251 150.922 47.7186 Q148.584 45.6122 144.58 45.6122 Q142.705 45.6122 140.83 46.0288 Q138.978 46.4455 137.033 47.3251 L137.033 29.9641 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><polyline clip-path=\"url(#clip492)\" style=\"stroke:#000080; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" stroke-dasharray=\"16, 10\" points=\"\n",
" 842.4,644.779 672.471,1058.24 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip492)\" style=\"stroke:#000080; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" stroke-dasharray=\"16, 10\" points=\"\n",
" 1059.21,430.209 1294.37,527.078 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip492)\" style=\"stroke:#000080; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" stroke-dasharray=\"16, 10\" points=\"\n",
" 1076.79,418.313 1294.37,527.078 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip492)\" style=\"stroke:#000080; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" stroke-dasharray=\"16, 10\" points=\"\n",
" 689.141,943.701 672.471,1058.24 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip492)\" style=\"stroke:#000080; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" stroke-dasharray=\"16, 10\" points=\"\n",
" 643.658,1559.12 672.471,1058.24 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip492)\" style=\"stroke:#000080; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" stroke-dasharray=\"16, 10\" points=\"\n",
" 599.279,1068.77 672.471,1058.24 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip492)\" style=\"stroke:#000080; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" stroke-dasharray=\"16, 10\" points=\"\n",
" 642.029,834.69 672.471,1058.24 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip492)\" style=\"stroke:#000080; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" stroke-dasharray=\"16, 10\" points=\"\n",
" 497.37,1603.03 672.471,1058.24 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip492)\" style=\"stroke:#000080; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" stroke-dasharray=\"16, 10\" points=\"\n",
" 1841.08,1764.93 1692.34,1594.99 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip492)\" style=\"stroke:#000080; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" stroke-dasharray=\"16, 10\" points=\"\n",
" 1016.89,1862.01 1692.34,1594.99 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip492)\" style=\"stroke:#000080; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" stroke-dasharray=\"16, 10\" points=\"\n",
" 730.706,596.217 672.471,1058.24 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip492)\" style=\"stroke:#000080; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" stroke-dasharray=\"16, 10\" points=\"\n",
" 736.034,720.691 672.471,1058.24 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip492)\" style=\"stroke:#000080; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" stroke-dasharray=\"16, 10\" points=\"\n",
" 671.621,1553.13 672.471,1058.24 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip492)\" style=\"stroke:#000080; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" stroke-dasharray=\"16, 10\" points=\"\n",
" 1911.9,795.513 1294.37,527.078 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip492)\" style=\"stroke:#000080; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" stroke-dasharray=\"16, 10\" points=\"\n",
" 1471.76,1790.96 1692.34,1594.99 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip492)\" style=\"stroke:#000080; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" stroke-dasharray=\"16, 10\" points=\"\n",
" 2028.83,1417.53 1692.34,1594.99 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip492)\" style=\"stroke:#000080; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" stroke-dasharray=\"16, 10\" points=\"\n",
" 2047.95,1070.31 1692.34,1594.99 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip492)\" style=\"stroke:#000080; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" stroke-dasharray=\"16, 10\" points=\"\n",
" 1502.39,513.575 1294.37,527.078 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip492)\" style=\"stroke:#000080; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" stroke-dasharray=\"16, 10\" points=\"\n",
" 1747.51,1664.2 1692.34,1594.99 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip492)\" style=\"stroke:#000080; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" stroke-dasharray=\"16, 10\" points=\"\n",
" 921.543,477.782 1294.37,527.078 \n",
" \"/>\n",
"<path clip-path=\"url(#clip492)\" d=\"M826.4 628.779 L826.4 660.779 L858.4 660.779 L858.4 628.779 L826.4 628.779 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"none\"/>\n",
"<path clip-path=\"url(#clip492)\" d=\"M1043.21 414.209 L1043.21 446.209 L1075.21 446.209 L1075.21 414.209 L1043.21 414.209 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"none\"/>\n",
"<path clip-path=\"url(#clip492)\" d=\"M1060.79 402.313 L1060.79 434.313 L1092.79 434.313 L1092.79 402.313 L1060.79 402.313 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"none\"/>\n",
"<path clip-path=\"url(#clip492)\" d=\"M673.141 927.701 L673.141 959.701 L705.141 959.701 L705.141 927.701 L673.141 927.701 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"none\"/>\n",
"<path clip-path=\"url(#clip492)\" d=\"M627.658 1543.12 L627.658 1575.12 L659.658 1575.12 L659.658 1543.12 L627.658 1543.12 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"none\"/>\n",
"<path clip-path=\"url(#clip492)\" d=\"M583.279 1052.77 L583.279 1084.77 L615.279 1084.77 L615.279 1052.77 L583.279 1052.77 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"none\"/>\n",
"<path clip-path=\"url(#clip492)\" d=\"M626.029 818.69 L626.029 850.69 L658.029 850.69 L658.029 818.69 L626.029 818.69 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"none\"/>\n",
"<path clip-path=\"url(#clip492)\" d=\"M481.37 1587.03 L481.37 1619.03 L513.37 1619.03 L513.37 1587.03 L481.37 1587.03 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"none\"/>\n",
"<path clip-path=\"url(#clip492)\" d=\"M1825.08 1748.93 L1825.08 1780.93 L1857.08 1780.93 L1857.08 1748.93 L1825.08 1748.93 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"none\"/>\n",
"<path clip-path=\"url(#clip492)\" d=\"M1000.89 1846.01 L1000.89 1878.01 L1032.89 1878.01 L1032.89 1846.01 L1000.89 1846.01 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"none\"/>\n",
"<path clip-path=\"url(#clip492)\" d=\"M714.706 580.217 L714.706 612.217 L746.706 612.217 L746.706 580.217 L714.706 580.217 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"none\"/>\n",
"<path clip-path=\"url(#clip492)\" d=\"M720.034 704.691 L720.034 736.691 L752.034 736.691 L752.034 704.691 L720.034 704.691 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"none\"/>\n",
"<path clip-path=\"url(#clip492)\" d=\"M655.621 1537.13 L655.621 1569.13 L687.621 1569.13 L687.621 1537.13 L655.621 1537.13 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"none\"/>\n",
"<path clip-path=\"url(#clip492)\" d=\"M1895.9 779.513 L1895.9 811.513 L1927.9 811.513 L1927.9 779.513 L1895.9 779.513 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"none\"/>\n",
"<path clip-path=\"url(#clip492)\" d=\"M1455.76 1774.96 L1455.76 1806.96 L1487.76 1806.96 L1487.76 1774.96 L1455.76 1774.96 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"none\"/>\n",
"<path clip-path=\"url(#clip492)\" d=\"M2012.83 1401.53 L2012.83 1433.53 L2044.83 1433.53 L2044.83 1401.53 L2012.83 1401.53 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"none\"/>\n",
"<path clip-path=\"url(#clip492)\" d=\"M2031.95 1054.31 L2031.95 1086.31 L2063.95 1086.31 L2063.95 1054.31 L2031.95 1054.31 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"none\"/>\n",
"<path clip-path=\"url(#clip492)\" d=\"M1486.39 497.575 L1486.39 529.575 L1518.39 529.575 L1518.39 497.575 L1486.39 497.575 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"none\"/>\n",
"<path clip-path=\"url(#clip492)\" d=\"M1731.51 1648.2 L1731.51 1680.2 L1763.51 1680.2 L1763.51 1648.2 L1731.51 1648.2 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"none\"/>\n",
"<path clip-path=\"url(#clip492)\" d=\"M905.543 461.782 L905.543 493.782 L937.543 493.782 L937.543 461.782 L905.543 461.782 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"none\"/>\n",
"<circle clip-path=\"url(#clip492)\" cx=\"1692.34\" cy=\"1594.99\" r=\"25\" fill=\"#dc143c\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"none\"/>\n",
"<circle clip-path=\"url(#clip492)\" cx=\"672.471\" cy=\"1058.24\" r=\"25\" fill=\"#dc143c\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"none\"/>\n",
"<circle clip-path=\"url(#clip492)\" cx=\"1294.37\" cy=\"527.078\" r=\"25\" fill=\"#dc143c\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"none\"/>\n",
"<path clip-path=\"url(#clip490)\" d=\"\n",
"M1617.16 328.402 L2280.8 328.402 L2280.8 121.042 L1617.16 121.042 Z\n",
" \" fill=\"#ffffff\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip490)\" style=\"stroke:#000000; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 1617.16,328.402 2280.8,328.402 2280.8,121.042 1617.16,121.042 1617.16,328.402 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip490)\" style=\"stroke:#000080; stroke-linecap:butt; stroke-linejoin:round; stroke-width:4; stroke-opacity:1; fill:none\" stroke-dasharray=\"16, 10\" points=\"\n",
" 1641.14,172.882 1785.06,172.882 \n",
" \"/>\n",
"<path clip-path=\"url(#clip490)\" d=\"M1809.05 154.143 L1813.31 154.143 L1813.31 190.162 L1809.05 190.162 L1809.05 154.143 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip490)\" d=\"M1832.27 167.222 Q1828.84 167.222 1826.85 169.907 Q1824.86 172.569 1824.86 177.222 Q1824.86 181.875 1826.83 184.56 Q1828.82 187.222 1832.27 187.222 Q1835.67 187.222 1837.66 184.537 Q1839.65 181.851 1839.65 177.222 Q1839.65 172.615 1837.66 169.93 Q1835.67 167.222 1832.27 167.222 M1832.27 163.611 Q1837.82 163.611 1840.99 167.222 Q1844.17 170.833 1844.17 177.222 Q1844.17 183.588 1840.99 187.222 Q1837.82 190.833 1832.27 190.833 Q1826.69 190.833 1823.52 187.222 Q1820.37 183.588 1820.37 177.222 Q1820.37 170.833 1823.52 167.222 Q1826.69 163.611 1832.27 163.611 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip490)\" d=\"M1869.88 165.231 L1869.88 169.213 Q1868.08 168.217 1866.25 167.731 Q1864.44 167.222 1862.59 167.222 Q1858.45 167.222 1856.16 169.861 Q1853.87 172.476 1853.87 177.222 Q1853.87 181.967 1856.16 184.606 Q1858.45 187.222 1862.59 187.222 Q1864.44 187.222 1866.25 186.736 Q1868.08 186.226 1869.88 185.231 L1869.88 189.166 Q1868.1 190 1866.18 190.416 Q1864.28 190.833 1862.13 190.833 Q1856.27 190.833 1852.82 187.152 Q1849.37 183.472 1849.37 177.222 Q1849.37 170.879 1852.85 167.245 Q1856.34 163.611 1862.41 163.611 Q1864.37 163.611 1866.25 164.027 Q1868.12 164.421 1869.88 165.231 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip490)\" d=\"M1889.07 177.129 Q1883.91 177.129 1881.92 178.31 Q1879.93 179.49 1879.93 182.338 Q1879.93 184.606 1881.41 185.949 Q1882.92 187.268 1885.49 187.268 Q1889.03 187.268 1891.16 184.768 Q1893.31 182.245 1893.31 178.078 L1893.31 177.129 L1889.07 177.129 M1897.57 175.37 L1897.57 190.162 L1893.31 190.162 L1893.31 186.226 Q1891.85 188.587 1889.68 189.722 Q1887.5 190.833 1884.35 190.833 Q1880.37 190.833 1878.01 188.611 Q1875.67 186.365 1875.67 182.615 Q1875.67 178.24 1878.59 176.018 Q1881.53 173.796 1887.34 173.796 L1893.31 173.796 L1893.31 173.379 Q1893.31 170.439 1891.36 168.842 Q1889.44 167.222 1885.95 167.222 Q1883.73 167.222 1881.62 167.754 Q1879.51 168.287 1877.57 169.351 L1877.57 165.416 Q1879.91 164.514 1882.11 164.074 Q1884.3 163.611 1886.39 163.611 Q1892.01 163.611 1894.79 166.527 Q1897.57 169.444 1897.57 175.37 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip490)\" d=\"M1906.34 154.143 L1910.6 154.143 L1910.6 190.162 L1906.34 190.162 L1906.34 154.143 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip490)\" d=\"M1951.11 165 L1951.11 169.027 Q1949.3 168.101 1947.36 167.639 Q1945.42 167.176 1943.33 167.176 Q1940.16 167.176 1938.56 168.148 Q1936.99 169.12 1936.99 171.064 Q1936.99 172.546 1938.12 173.402 Q1939.26 174.236 1942.68 175 L1944.14 175.324 Q1948.68 176.296 1950.58 178.078 Q1952.5 179.838 1952.5 183.009 Q1952.5 186.62 1949.63 188.726 Q1946.78 190.833 1941.78 190.833 Q1939.7 190.833 1937.43 190.416 Q1935.18 190.023 1932.68 189.212 L1932.68 184.814 Q1935.05 186.041 1937.34 186.666 Q1939.63 187.268 1941.87 187.268 Q1944.88 187.268 1946.5 186.25 Q1948.12 185.208 1948.12 183.333 Q1948.12 181.597 1946.94 180.671 Q1945.79 179.745 1941.83 178.888 L1940.35 178.541 Q1936.39 177.708 1934.63 175.995 Q1932.87 174.259 1932.87 171.25 Q1932.87 167.592 1935.46 165.602 Q1938.05 163.611 1942.82 163.611 Q1945.18 163.611 1947.27 163.958 Q1949.35 164.305 1951.11 165 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip490)\" d=\"M1977.94 165.231 L1977.94 169.213 Q1976.13 168.217 1974.3 167.731 Q1972.5 167.222 1970.65 167.222 Q1966.5 167.222 1964.21 169.861 Q1961.92 172.476 1961.92 177.222 Q1961.92 181.967 1964.21 184.606 Q1966.5 187.222 1970.65 187.222 Q1972.5 187.222 1974.3 186.736 Q1976.13 186.226 1977.94 185.231 L1977.94 189.166 Q1976.16 190 1974.23 190.416 Q1972.34 190.833 1970.18 190.833 Q1964.33 190.833 1960.88 187.152 Q1957.43 183.472 1957.43 177.222 Q1957.43 170.879 1960.9 167.245 Q1964.4 163.611 1970.46 163.611 Q1972.43 163.611 1974.3 164.027 Q1976.18 164.421 1977.94 165.231 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip490)\" d=\"M2006.9 174.513 L2006.9 190.162 L2002.64 190.162 L2002.64 174.652 Q2002.64 170.972 2001.2 169.143 Q1999.77 167.314 1996.9 167.314 Q1993.45 167.314 1991.46 169.514 Q1989.47 171.713 1989.47 175.509 L1989.47 190.162 L1985.18 190.162 L1985.18 154.143 L1989.47 154.143 L1989.47 168.264 Q1990.99 165.926 1993.05 164.768 Q1995.14 163.611 1997.85 163.611 Q2002.31 163.611 2004.61 166.389 Q2006.9 169.143 2006.9 174.513 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip490)\" d=\"M2025.44 167.222 Q2022.01 167.222 2020.02 169.907 Q2018.03 172.569 2018.03 177.222 Q2018.03 181.875 2020 184.56 Q2021.99 187.222 2025.44 187.222 Q2028.84 187.222 2030.83 184.537 Q2032.82 181.851 2032.82 177.222 Q2032.82 172.615 2030.83 169.93 Q2028.84 167.222 2025.44 167.222 M2025.44 163.611 Q2030.99 163.611 2034.17 167.222 Q2037.34 170.833 2037.34 177.222 Q2037.34 183.588 2034.17 187.222 Q2030.99 190.833 2025.44 190.833 Q2019.86 190.833 2016.69 187.222 Q2013.54 183.588 2013.54 177.222 Q2013.54 170.833 2016.69 167.222 Q2019.86 163.611 2025.44 163.611 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip490)\" d=\"M2054.44 167.222 Q2051.02 167.222 2049.03 169.907 Q2047.04 172.569 2047.04 177.222 Q2047.04 181.875 2049 184.56 Q2050.99 187.222 2054.44 187.222 Q2057.85 187.222 2059.84 184.537 Q2061.83 181.851 2061.83 177.222 Q2061.83 172.615 2059.84 169.93 Q2057.85 167.222 2054.44 167.222 M2054.44 163.611 Q2060 163.611 2063.17 167.222 Q2066.34 170.833 2066.34 177.222 Q2066.34 183.588 2063.17 187.222 Q2060 190.833 2054.44 190.833 Q2048.86 190.833 2045.69 187.222 Q2042.54 183.588 2042.54 177.222 Q2042.54 170.833 2045.69 167.222 Q2048.86 163.611 2054.44 163.611 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip490)\" d=\"M2073.4 154.143 L2077.66 154.143 L2077.66 190.162 L2073.4 190.162 L2073.4 154.143 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip490)\" d=\"M1687.5 199.122 L1687.5 250.322 L1738.7 250.322 L1738.7 199.122 L1687.5 199.122 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"none\"/>\n",
"<path clip-path=\"url(#clip490)\" d=\"M1825.56 205.983 L1825.56 209.525 L1821.48 209.525 Q1819.19 209.525 1818.29 210.451 Q1817.41 211.377 1817.41 213.784 L1817.41 216.076 L1824.42 216.076 L1824.42 219.386 L1817.41 219.386 L1817.41 242.002 L1813.12 242.002 L1813.12 219.386 L1809.05 219.386 L1809.05 216.076 L1813.12 216.076 L1813.12 214.27 Q1813.12 209.942 1815.14 207.974 Q1817.15 205.983 1821.53 205.983 L1825.56 205.983 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip490)\" d=\"M1840.9 228.969 Q1835.74 228.969 1833.75 230.15 Q1831.76 231.33 1831.76 234.178 Q1831.76 236.446 1833.24 237.789 Q1834.74 239.108 1837.31 239.108 Q1840.86 239.108 1842.99 236.608 Q1845.14 234.085 1845.14 229.918 L1845.14 228.969 L1840.9 228.969 M1849.4 227.21 L1849.4 242.002 L1845.14 242.002 L1845.14 238.066 Q1843.68 240.427 1841.5 241.562 Q1839.33 242.673 1836.18 242.673 Q1832.2 242.673 1829.84 240.451 Q1827.5 238.205 1827.5 234.455 Q1827.5 230.08 1830.42 227.858 Q1833.36 225.636 1839.17 225.636 L1845.14 225.636 L1845.14 225.219 Q1845.14 222.279 1843.19 220.682 Q1841.27 219.062 1837.78 219.062 Q1835.56 219.062 1833.45 219.594 Q1831.34 220.127 1829.4 221.191 L1829.4 217.256 Q1831.74 216.354 1833.93 215.914 Q1836.13 215.451 1838.22 215.451 Q1843.84 215.451 1846.62 218.367 Q1849.4 221.284 1849.4 227.21 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip490)\" d=\"M1878.36 221.053 Q1879.95 218.182 1882.18 216.817 Q1884.4 215.451 1887.41 215.451 Q1891.46 215.451 1893.66 218.298 Q1895.86 221.122 1895.86 226.353 L1895.86 242.002 L1891.57 242.002 L1891.57 226.492 Q1891.57 222.766 1890.25 220.96 Q1888.93 219.154 1886.23 219.154 Q1882.92 219.154 1880.99 221.354 Q1879.07 223.553 1879.07 227.349 L1879.07 242.002 L1874.79 242.002 L1874.79 226.492 Q1874.79 222.742 1873.47 220.96 Q1872.15 219.154 1869.4 219.154 Q1866.13 219.154 1864.21 221.377 Q1862.29 223.576 1862.29 227.349 L1862.29 242.002 L1858.01 242.002 L1858.01 216.076 L1862.29 216.076 L1862.29 220.104 Q1863.75 217.719 1865.79 216.585 Q1867.82 215.451 1870.62 215.451 Q1873.45 215.451 1875.42 216.886 Q1877.41 218.321 1878.36 221.053 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip490)\" d=\"M1904.35 216.076 L1908.61 216.076 L1908.61 242.002 L1904.35 242.002 L1904.35 216.076 M1904.35 205.983 L1908.61 205.983 L1908.61 211.377 L1904.35 211.377 L1904.35 205.983 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip490)\" d=\"M1917.52 205.983 L1921.78 205.983 L1921.78 242.002 L1917.52 242.002 L1917.52 205.983 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip490)\" d=\"M1930.69 216.076 L1934.95 216.076 L1934.95 242.002 L1930.69 242.002 L1930.69 216.076 M1930.69 205.983 L1934.95 205.983 L1934.95 211.377 L1930.69 211.377 L1930.69 205.983 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip490)\" d=\"M1966.04 227.974 L1966.04 230.057 L1946.46 230.057 Q1946.74 234.455 1949.1 236.77 Q1951.48 239.062 1955.72 239.062 Q1958.17 239.062 1960.46 238.46 Q1962.78 237.858 1965.05 236.654 L1965.05 240.682 Q1962.75 241.654 1960.35 242.164 Q1957.94 242.673 1955.46 242.673 Q1949.26 242.673 1945.62 239.062 Q1942.01 235.451 1942.01 229.293 Q1942.01 222.928 1945.44 219.201 Q1948.89 215.451 1954.72 215.451 Q1959.95 215.451 1962.98 218.83 Q1966.04 222.187 1966.04 227.974 M1961.78 226.724 Q1961.73 223.229 1959.81 221.145 Q1957.92 219.062 1954.77 219.062 Q1951.2 219.062 1949.05 221.076 Q1946.92 223.09 1946.6 226.747 L1961.78 226.724 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip490)\" d=\"M1989.56 216.84 L1989.56 220.867 Q1987.75 219.941 1985.81 219.479 Q1983.86 219.016 1981.78 219.016 Q1978.61 219.016 1977.01 219.988 Q1975.44 220.96 1975.44 222.904 Q1975.44 224.386 1976.57 225.242 Q1977.71 226.076 1981.13 226.84 L1982.59 227.164 Q1987.13 228.136 1989.03 229.918 Q1990.95 231.678 1990.95 234.849 Q1990.95 238.46 1988.08 240.566 Q1985.23 242.673 1980.23 242.673 Q1978.15 242.673 1975.88 242.256 Q1973.63 241.863 1971.13 241.052 L1971.13 236.654 Q1973.49 237.881 1975.79 238.506 Q1978.08 239.108 1980.32 239.108 Q1983.33 239.108 1984.95 238.09 Q1986.57 237.048 1986.57 235.173 Q1986.57 233.437 1985.39 232.511 Q1984.23 231.585 1980.28 230.728 L1978.8 230.381 Q1974.84 229.548 1973.08 227.835 Q1971.32 226.099 1971.32 223.09 Q1971.32 219.432 1973.91 217.442 Q1976.5 215.451 1981.27 215.451 Q1983.63 215.451 1985.72 215.798 Q1987.8 216.145 1989.56 216.84 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><circle clip-path=\"url(#clip490)\" cx=\"1713.1\" cy=\"276.562\" r=\"23\" fill=\"#dc143c\" fill-rule=\"evenodd\" fill-opacity=\"1\" stroke=\"none\"/>\n",
"<path clip-path=\"url(#clip490)\" d=\"M1827.48 268.68 L1827.48 272.707 Q1825.67 271.781 1823.73 271.319 Q1821.78 270.856 1819.7 270.856 Q1816.53 270.856 1814.93 271.828 Q1813.36 272.8 1813.36 274.744 Q1813.36 276.226 1814.49 277.082 Q1815.62 277.916 1819.05 278.68 L1820.51 279.004 Q1825.05 279.976 1826.94 281.758 Q1828.87 283.518 1828.87 286.689 Q1828.87 290.3 1825.99 292.406 Q1823.15 294.513 1818.15 294.513 Q1816.06 294.513 1813.8 294.096 Q1811.55 293.703 1809.05 292.892 L1809.05 288.494 Q1811.41 289.721 1813.7 290.346 Q1815.99 290.948 1818.24 290.948 Q1821.25 290.948 1822.87 289.93 Q1824.49 288.888 1824.49 287.013 Q1824.49 285.277 1823.31 284.351 Q1822.15 283.425 1818.19 282.568 L1816.71 282.221 Q1812.75 281.388 1811 279.675 Q1809.24 277.939 1809.24 274.93 Q1809.24 271.272 1811.83 269.282 Q1814.42 267.291 1819.19 267.291 Q1821.55 267.291 1823.63 267.638 Q1825.72 267.985 1827.48 268.68 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip490)\" d=\"M1854.3 268.911 L1854.3 272.893 Q1852.5 271.897 1850.67 271.411 Q1848.87 270.902 1847.01 270.902 Q1842.87 270.902 1840.58 273.541 Q1838.29 276.156 1838.29 280.902 Q1838.29 285.647 1840.58 288.286 Q1842.87 290.902 1847.01 290.902 Q1848.87 290.902 1850.67 290.416 Q1852.5 289.906 1854.3 288.911 L1854.3 292.846 Q1852.52 293.68 1850.6 294.096 Q1848.7 294.513 1846.55 294.513 Q1840.69 294.513 1837.24 290.832 Q1833.8 287.152 1833.8 280.902 Q1833.8 274.559 1837.27 270.925 Q1840.76 267.291 1846.83 267.291 Q1848.8 267.291 1850.67 267.707 Q1852.55 268.101 1854.3 268.911 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip490)\" d=\"M1883.26 278.193 L1883.26 293.842 L1879 293.842 L1879 278.332 Q1879 274.652 1877.57 272.823 Q1876.13 270.994 1873.26 270.994 Q1869.81 270.994 1867.82 273.194 Q1865.83 275.393 1865.83 279.189 L1865.83 293.842 L1861.55 293.842 L1861.55 257.823 L1865.83 257.823 L1865.83 271.944 Q1867.36 269.606 1869.42 268.448 Q1871.5 267.291 1874.21 267.291 Q1878.68 267.291 1880.97 270.069 Q1883.26 272.823 1883.26 278.193 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip490)\" d=\"M1901.8 270.902 Q1898.38 270.902 1896.39 273.587 Q1894.4 276.249 1894.4 280.902 Q1894.4 285.555 1896.36 288.24 Q1898.36 290.902 1901.8 290.902 Q1905.21 290.902 1907.2 288.217 Q1909.19 285.531 1909.19 280.902 Q1909.19 276.295 1907.2 273.61 Q1905.21 270.902 1901.8 270.902 M1901.8 267.291 Q1907.36 267.291 1910.53 270.902 Q1913.7 274.513 1913.7 280.902 Q1913.7 287.268 1910.53 290.902 Q1907.36 294.513 1901.8 294.513 Q1896.23 294.513 1893.05 290.902 Q1889.91 287.268 1889.91 280.902 Q1889.91 274.513 1893.05 270.902 Q1896.23 267.291 1901.8 267.291 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip490)\" d=\"M1930.81 270.902 Q1927.38 270.902 1925.39 273.587 Q1923.4 276.249 1923.4 280.902 Q1923.4 285.555 1925.37 288.24 Q1927.36 290.902 1930.81 290.902 Q1934.21 290.902 1936.2 288.217 Q1938.19 285.531 1938.19 280.902 Q1938.19 276.295 1936.2 273.61 Q1934.21 270.902 1930.81 270.902 M1930.81 267.291 Q1936.36 267.291 1939.54 270.902 Q1942.71 274.513 1942.71 280.902 Q1942.71 287.268 1939.54 290.902 Q1936.36 294.513 1930.81 294.513 Q1925.23 294.513 1922.06 290.902 Q1918.91 287.268 1918.91 280.902 Q1918.91 274.513 1922.06 270.902 Q1925.23 267.291 1930.81 267.291 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip490)\" d=\"M1949.77 257.823 L1954.03 257.823 L1954.03 293.842 L1949.77 293.842 L1949.77 257.823 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip490)\" d=\"M1979.47 268.68 L1979.47 272.707 Q1977.66 271.781 1975.72 271.319 Q1973.77 270.856 1971.69 270.856 Q1968.52 270.856 1966.92 271.828 Q1965.35 272.8 1965.35 274.744 Q1965.35 276.226 1966.48 277.082 Q1967.61 277.916 1971.04 278.68 L1972.5 279.004 Q1977.04 279.976 1978.93 281.758 Q1980.86 283.518 1980.86 286.689 Q1980.86 290.3 1977.98 292.406 Q1975.14 294.513 1970.14 294.513 Q1968.05 294.513 1965.79 294.096 Q1963.54 293.703 1961.04 292.892 L1961.04 288.494 Q1963.4 289.721 1965.69 290.346 Q1967.98 290.948 1970.23 290.948 Q1973.24 290.948 1974.86 289.93 Q1976.48 288.888 1976.48 287.013 Q1976.48 285.277 1975.3 284.351 Q1974.14 283.425 1970.18 282.568 L1968.7 282.221 Q1964.74 281.388 1962.98 279.675 Q1961.23 277.939 1961.23 274.93 Q1961.23 271.272 1963.82 269.282 Q1966.41 267.291 1971.18 267.291 Q1973.54 267.291 1975.62 267.638 Q1977.71 267.985 1979.47 268.68 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip490)\" d=\"M2012.94 257.87 Q2009.84 263.194 2008.33 268.402 Q2006.83 273.61 2006.83 278.957 Q2006.83 284.305 2008.33 289.559 Q2009.86 294.791 2012.94 300.092 L2009.23 300.092 Q2005.76 294.652 2004.03 289.397 Q2002.31 284.143 2002.31 278.957 Q2002.31 273.795 2004.03 268.564 Q2005.74 263.332 2009.23 257.87 L2012.94 257.87 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip490)\" d=\"M2021.04 257.823 L2025.32 257.823 L2025.32 279.096 L2038.03 267.916 L2043.47 267.916 L2029.72 280.045 L2044.05 293.842 L2038.49 293.842 L2025.32 281.18 L2025.32 293.842 L2021.04 293.842 L2021.04 257.823 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip490)\" d=\"M2083.91 272.893 Q2085.51 270.022 2087.73 268.657 Q2089.95 267.291 2092.96 267.291 Q2097.01 267.291 2099.21 270.138 Q2101.41 272.962 2101.41 278.193 L2101.41 293.842 L2097.13 293.842 L2097.13 278.332 Q2097.13 274.606 2095.81 272.8 Q2094.49 270.994 2091.78 270.994 Q2088.47 270.994 2086.55 273.194 Q2084.63 275.393 2084.63 279.189 L2084.63 293.842 L2080.35 293.842 L2080.35 278.332 Q2080.35 274.582 2079.03 272.8 Q2077.71 270.994 2074.95 270.994 Q2071.69 270.994 2069.77 273.217 Q2067.85 275.416 2067.85 279.189 L2067.85 293.842 L2063.56 293.842 L2063.56 267.916 L2067.85 267.916 L2067.85 271.944 Q2069.3 269.559 2071.34 268.425 Q2073.38 267.291 2076.18 267.291 Q2079 267.291 2080.97 268.726 Q2082.96 270.161 2083.91 272.893 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip490)\" d=\"M2132.08 279.814 L2132.08 281.897 L2112.5 281.897 Q2112.78 286.295 2115.14 288.61 Q2117.52 290.902 2121.76 290.902 Q2124.21 290.902 2126.5 290.3 Q2128.82 289.698 2131.09 288.494 L2131.09 292.522 Q2128.79 293.494 2126.39 294.004 Q2123.98 294.513 2121.5 294.513 Q2115.3 294.513 2111.66 290.902 Q2108.05 287.291 2108.05 281.133 Q2108.05 274.768 2111.48 271.041 Q2114.93 267.291 2120.76 267.291 Q2125.99 267.291 2129.03 270.67 Q2132.08 274.027 2132.08 279.814 M2127.82 278.564 Q2127.78 275.069 2125.85 272.985 Q2123.96 270.902 2120.81 270.902 Q2117.24 270.902 2115.09 272.916 Q2112.96 274.93 2112.64 278.587 L2127.82 278.564 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip490)\" d=\"M2150.85 280.809 Q2145.69 280.809 2143.7 281.99 Q2141.71 283.17 2141.71 286.018 Q2141.71 288.286 2143.19 289.629 Q2144.7 290.948 2147.27 290.948 Q2150.81 290.948 2152.94 288.448 Q2155.09 285.925 2155.09 281.758 L2155.09 280.809 L2150.85 280.809 M2159.35 279.05 L2159.35 293.842 L2155.09 293.842 L2155.09 289.906 Q2153.63 292.267 2151.46 293.402 Q2149.28 294.513 2146.13 294.513 Q2142.15 294.513 2139.79 292.291 Q2137.45 290.045 2137.45 286.295 Q2137.45 281.92 2140.37 279.698 Q2143.31 277.476 2149.12 277.476 L2155.09 277.476 L2155.09 277.059 Q2155.09 274.119 2153.15 272.522 Q2151.22 270.902 2147.73 270.902 Q2145.51 270.902 2143.4 271.434 Q2141.29 271.967 2139.35 273.031 L2139.35 269.096 Q2141.69 268.194 2143.89 267.754 Q2146.09 267.291 2148.17 267.291 Q2153.79 267.291 2156.57 270.207 Q2159.35 273.124 2159.35 279.05 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip490)\" d=\"M2189.67 278.193 L2189.67 293.842 L2185.41 293.842 L2185.41 278.332 Q2185.41 274.652 2183.98 272.823 Q2182.54 270.994 2179.67 270.994 Q2176.22 270.994 2174.23 273.194 Q2172.24 275.393 2172.24 279.189 L2172.24 293.842 L2167.96 293.842 L2167.96 267.916 L2172.24 267.916 L2172.24 271.944 Q2173.77 269.606 2175.83 268.448 Q2177.91 267.291 2180.62 267.291 Q2185.09 267.291 2187.38 270.069 Q2189.67 272.823 2189.67 278.193 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip490)\" d=\"M2214.7 268.68 L2214.7 272.707 Q2212.89 271.781 2210.95 271.319 Q2209 270.856 2206.92 270.856 Q2203.75 270.856 2202.15 271.828 Q2200.58 272.8 2200.58 274.744 Q2200.58 276.226 2201.71 277.082 Q2202.84 277.916 2206.27 278.68 L2207.73 279.004 Q2212.27 279.976 2214.16 281.758 Q2216.09 283.518 2216.09 286.689 Q2216.09 290.3 2213.22 292.406 Q2210.37 294.513 2205.37 294.513 Q2203.28 294.513 2201.02 294.096 Q2198.77 293.703 2196.27 292.892 L2196.27 288.494 Q2198.63 289.721 2200.92 290.346 Q2203.22 290.948 2205.46 290.948 Q2208.47 290.948 2210.09 289.93 Q2211.71 288.888 2211.71 287.013 Q2211.71 285.277 2210.53 284.351 Q2209.37 283.425 2205.41 282.568 L2203.93 282.221 Q2199.97 281.388 2198.22 279.675 Q2196.46 277.939 2196.46 274.93 Q2196.46 271.272 2199.05 269.282 Q2201.64 267.291 2206.41 267.291 Q2208.77 267.291 2210.85 267.638 Q2212.94 267.985 2214.7 268.68 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /><path clip-path=\"url(#clip490)\" d=\"M2222.2 257.87 L2225.9 257.87 Q2229.37 263.332 2231.09 268.564 Q2232.82 273.795 2232.82 278.957 Q2232.82 284.143 2231.09 289.397 Q2229.37 294.652 2225.9 300.092 L2222.2 300.092 Q2225.28 294.791 2226.78 289.559 Q2228.31 284.305 2228.31 278.957 Q2228.31 273.61 2226.78 268.402 Q2225.28 263.194 2222.2 257.87 Z\" fill=\"#000000\" fill-rule=\"evenodd\" fill-opacity=\"1\" /></svg>\n"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"using Clustering\n",
"\n",
"res = kmeans(hcat(ps...), n)\n",
"xs_kmeans = map(Vector{Float64}, eachcol(res.centers))\n",
"\n",
"attend_school_kmeans = attend_school = map(ps) do p\n",
" argmin(i -> norm(p - xs_kmeans[i]), 1:n)\n",
"end\n",
"\n",
"pl = plot(size=(600,600), xlim=(-1.5, 1.5), ylim=(-1.5, 1.5))\n",
"\n",
"for (j, p) in enumerate(ps)\n",
" plot!(\n",
" pl,\n",
" [tuple(p...), tuple(xs_kmeans[attend_school_kmeans[j]]...)],\n",
" label= j==1 ? \"local school\" : nothing,\n",
" c = \"navy\",\n",
" ls = :dash\n",
" )\n",
"end\n",
"\n",
"scatter!(pl, [tuple(p...) for p in ps], m=:square, c=:black, msc=:auto, label=\"families\")\n",
"scatter!(pl, [tuple(x...) for x in xs_kmeans], c=:crimson, msc=:auto, ms=7, label=\"schools (k means)\")\n",
"\n",
"pl"
]
},
{
"cell_type": "markdown",
"id": "5431e1e9-1ea8-4788-a2a3-ab7c450a15d8",
"metadata": {},
"source": [
"As expected, this solution results in some students who have long commutes in service of the greater good. "
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Julia 1.7.1",
"language": "julia",
"name": "julia-1.7"
},
"language_info": {
"file_extension": ".jl",
"mimetype": "application/julia",
"name": "julia",
"version": "1.7.1"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment