Planet Russell

,

Charles StrossOh, 2022!

Back in December of 2016 I took a look at what the next year held in store for us. It spanned three blog posts and ended happily in a nuclear barbecue to put us all out of our misery: start here, continue with this, and finale: and the Rabid Nazi Raccoons shall inherit the Earth.

It is now early 2022 and I clearly wasn't pessimistic enough.

About 15 years ago, when I was working on Halting State, I came up with a rule of thumb for predicting the near-future setting in SF. Looking 10 years ahead, about 70% of the people, buildings, cars, and culture is already here today. Another 20-25% is not present yet but is predictable -- buildings under construction, software and hardware and drugs in development, children today who will be adults in a decade. And finally, there's about a 5-10% element that comes from the "who ordered that" dimension: nobody in 2010 expected Elon Musk's SpaceX to be flying astronauts to the space station in a reusable, privately developed spaceship by 2020, nobody in 2005 expected Donald Trump to be elected POTUS in 2015, and so on.

More recently, 2016 prompted me to rethink this rule of thumb. Global climate change, accelerating technological developments in various fields (notably AI/deep learning and batteries), and political instability (in large part a side-effect of social media) made everything much more unpredictable. We're now up to about 20% of 10-year-hence developments being utterly unpredictable, leaving us with 55-60% in the "here today" and 20-25% in the "not here yet, but clearly on the horizon" baskets.

COVID19 is clearly part of the 20% "who ordered that" collection. Nobody in March 2019 imagined that by March 2020 the UK would be in lockdown and they'd be storing corpses in refrigerator lorries in New York and Milan. It's not entirely a black swan; anyone who knew about the history of pandemics knew to expect something like it in due course, and indeed Laurie Garrett won a Pulitzer prize for her book, The Coming Plague in 1994, which predicted more or less exactly what we're living through today. What she didn't predict in 1994 (writing in 1991-93) is almost more interesting than what she did— nobody in the 20th century imagined that within just two decades we'd be able to sequence the genome of a new pathogen within days, much less hours, or design a new vaccine within two weeks and have it in human clinical trials a month later. If the SARS family of coronaviruses had emerged just a decade earlier it's quite likely we'd be on the brink of civilizational, if not species-level, extinction by now—SARS1 has 20% mortality among patients, MERS (aka SARS2) is up around 35-40% fatal, SARS-NCoV19, aka SARS3, is down around the 1-4% fatality level. If SARS1 had gone pandemic we might plausibly have lost a billion people within two years.

Luckily both SARS and MERS are far less contagious than COVID19, but don't count on this continuing. Those viruses still exist in animal reservoirs, and we know COVID19 circulates between humans and other species and can hybridize with other viruses. The worst easily-imaginable COVID19 variant would be a MERS/COVID19-Omicron hybrid—call it the Omega strain—with the lethality of MERS and the contagiousness of Omicron, which is worse than the common cold, somewhere around the same level as chickenpox. (We don't remember how awful chickenpox was because (a) we're generally vaccinated in infancy and (b) it's not a killer on the same level as its big sibling, Variola, aka smallpox. But the so-called "childhood diseases" like mumps, rubella, and chickenpox used to kill infants by windrows. There's a reason public health bodies remain vigilant and run constant vaccination campaigns against them, despite these campaigns being so successful that deaths from these diseases are so rare, leading perversely to an upswing in vaccine denialism.

Remember, this isn't a simple pneumonia bug. It's a virus that attacks the RAAS/ACE2 system, in particular all the epithelial tissues, and any other cells that express ACE2 receptors on their surfaces. It can mess with your kidneys. It can mess with fat cells, changing their response to insulin. It apparently shows up in brain tissue. Viral RNA can be found in all of these cells many months after recovery from the acute infection: it may have long-term sequelae, like Shingles, which only show up years to decades later. We do know long COVID effects up to 15% of people who are diagnosed with an infection, and can last months to years. We know that immunity is short-lived, and people can get repeat infections (currently mostly by new strains, but reinfection with an old strain is not impossible).

A different "worst case" isn't that we all die of a horrendous Omega strain with the lethality of the Black Death and the infectiousness of the common cold. Instead, we get hit by a new wave every 6 months, and all of us get it sooner or later, and each time you roll 1d6 and if you come up with a 1 you get organ damage, cognitive impairment, and chronic fatigue lasting for years: after a decade, half of humanity are walking wounded.

However. I didn't come here to bore you with COVID19—you can get all the news you want in the media, mass or social. My only COVID-related prediction is that it's here to stay until we develop a temperature-stable, cheap, broad-spectrum coronavirus vaccine that is patent-free, and get round to vaccinating the entire human population, before yet another strain comes along that exhibits immune escape. This may or may not happen before Omega emerges—remember, viruses do not inevitably evolve to be less lethal, they merely obey selection pressure to not kill their hosts before they have infected new hosts. But if we're lucky? We'll dodge the Omega bullet, and by 2030 we might be getting past COVID19 and its long-term consequences.

In fact, let's ignore COVID19. What is the world of 2031 going to look like, bloated graveyards and chronic fatigue clinics and high-profile public health campaigns aside?

The mRNA vaccine technologies that gave us the high profile COVID vaccines are spin-offs of a breakthrough that was creeping hopefully towards deployment years before COVID19 fired up the afterburners and hurled it at a cost-no-object wartime deployment. One of the target diseases for the new vaccine technology is now in advanced human clinical trials: it's HIV, and by 2031 there's a very high probability that HIV (the causative agent of AIDS) will be going into the cocktail of childhood vaccinations that Christianist preachers like to rail against, along with HPV. If we're really lucky the campaign to develop a genuinely broad-spectrum anti-coronavirus vaccine will give us a cure for most strains of the common cold, with influenza on top. Influenza is a real killer, although we tend to forget about it these days, taking it for granted as endemic. We're going to see a lot of research into antiviral drugs and stuff to do with RAAS/ACE2, which incidentally implies possible curative treatments for Type II diabetes and essential hypertension.

Looking further afield: it seems likely that the end of internal combustion engines will be in sight. Some countries are already scheduling a ban on IC engines to come in after 2030—electric cars are now a maturing technology with clear advantages in every respect except recharge time. Once those IC cars are no longer manufactured, we can expect a very rapid ramp-down of extraction and distribution industries for petrol and diesel fuels, leading to a complete phase-out possibly as early as 2040. As about half of global shipping is engaged in the transport of petrochemicals or coal at this point, this is goin to have impacts far beyond the obvious. Toyota in the UK are proposing to remanufacture EVs up to three times in a decade—probably by replacing/recycling the battery systems—which implies a major disruption both to after-sales service for cars, and to the second hand market. Expect a boom in leasing, including cheap "refurbished" cars with 1-3 previous leasing cycles in their logbook, and a sharp decline in the regular second-hand market and car dealerships.

In space ... well, SpaceX seem likely to fly a prototype Starship stack to orbit in early 2022. Whether or not they go bust the next day, by so doing they will have proven that a designed-for-full-reuse two-stage-to-orbit design with a payload greater than a Saturn V is possible. I don't expect them to go bust: I expect them to make bank. The next decade is going to be absolutely wild in terms of human spaceflight. I'm not predicting a first human landing on Mars in that decade, but I'd be astonished if we don't see a crewed moonbase by 2031—if not an American one, then China is targeting crewed Lunar missions in the 2030s, and could easily bring that forward.

Climate: we're boned. Quite possibly the Antarctic ice shelves will be destablized decades ahead of schedule, leading to gradual but inexorable sea levels rising around the world. This may paradoxically trigger an economic boom in construction—both of coastal defenses and of new inland waterways and ports. But the dismal prospect is that we may begin experiencing so many heat emergencies that we destabilize agriculture. The C3 photosynthesis pathway doesn't work at temperatures over 40 degrees celsius. The C4 pathway is a bit more robust, but not as many crops make use of it. Genetic engineering of hardy, thermotolerant cultivars may buy us some time, but it's not going to help if events like the recent Colorado wildfires become common.

Politics: we're boned there, too. Frightened people are cautious people, and they don't like taking in refugees. We currently see a wave of extreme right-wing demagogues in power in various nations, and increasingly harsh immigration laws all round. I can't help thinking that this is the ruling kleptocracy battening down the hatches and preparing to fend off the inevitable mass migrations they expect when changing sea levels inundate low-lying coastal nations like Bangladesh. The klept built their wealth on iron and coal, then oil: they invested in real estate, inflated asset bubble after asset bubble, drove real estate prices and job security out of reach of anyone aged under 50, and now they'd like to lock in their status by freezing social mobility. The result is a grim dystopia for the young—and by "young" I mean anyone who isn't aged, or born with a trust fund—and denial of the changing climate is a touchstone. The propaganda of the Koch network and the Mercer soft money has corrupted political discourse in the US, and increasingly the west in general. Australia and the UK have their own turbulent billionaires manipulating the political process.

COVID brought this problem to the fore by generating a demand shock and also a labour shortage. It gets little news coverage but we're seeing the biggest wave of labour unrest in the USA since the 1930s. In the UK it's muted because the economy also took a battering from Brexit—an estimated 6% contraction since 2020—which COVID provides a convenient scapegoat for. But eventually the bills will come due. We may be entering a pre-revolutionary situation, or the ramp-up to a dictatorial clampdown (the latter is clearly in an advanced stage in both China and Russia). By 2031 it's likely to be resolved in one direction or another; I can only hope, with a minimum of bloodshed.

But this is all predictable. (Except for COVID19 which was wide-screen WTFery, like the second world war—September 1st 1939 was not in fact predictable from September 1st 1929, for example: all that was predictable was that another European war would sooner or later see France and Germany at loggerheads.)

What are the unpredictables of the past couple of years? Not the big stuff like a global pandemic, but the utter WTFery that would give texture to an SF story set ten years out? Here are some recent headlines, just by way of a baseline:

  • Counterfeit Kamov Helicopter Ring Busted: Moldovan police last week shut down a factory in Cruileni allegedly making unauthorized copies of Russian Kamov-26 coaxial rotor utility helicopters. More than 10 helicopters were under assembly in the covert factory when it was raided on June 30. (Charlie notes: yup, the Transnistrian mafia were involved.)

  • Man Upset That Hackers Stole His Bored Ape NFTs: Hackers tricked a man who was selling three NFT images of apes into giving them up for free on Saturday, according to the man, who claimed that the stolen NFTs were worth "over a million dollars." Alternative headline: Everybody loves unregulated derivatives markets until their imaginary wallet full of monkey jpegs gets stolen. (None of this would have made any sense to anyone in 2011)

  • Quantum bible changes: fundamentalists remember reading something in the King James Version, when they try to look it up it isn't there, so obviously something something quantum indeterminacy something woo woo Satan edited the Bible under us!!! because oh I give up. If you thought fundamentalist Christianity was feco-chiropteroid crazy, wait until you see what fundamentalists do when they misunderstand the Many Worlds hypothesis. See also the Mandela effect. As RationalWiki comments, with masterful understatement, "Mainstream, peer-reviewed publications have not explored the Mandela effect, and the claim that some false memories are caused by parallel dimensions going berserk is, shall we say, difficult to falsify."

Anyway, I hope you now understand why I do not believe in 2022: it's only January and it's already too silly for my willing suspension of disbelief.

Worse Than FailureCodeSOD: Every Change

Now, I'm an old luddite who still looks askance at cloud services, but I'm willing to recognize their value. Still, I worry about whether I can trust that vendor to actually deliver the services I need, without them suddenly shoving out breaking changes which screw me, but maybe not their "whale" customers where the real money is.

That's something which "Sleeper" got to grapple with last fall. They use Amazon's Athena service, which allows software to query S3 buckets using SQL syntax. Late last year, "Sleeper" got an email which they forwarded to us with the subject "This should be fun". The email started like this:

Athena has been constantly making improvements to its SQL query syntax to make it more logical and user friendly, and during this process we have identified some query syntax that could have behaved in a more reasonable manner.

Now, just from that opening sentence, you know this means "breaking changes ahoy". And you wouldn't be wrong. There are three syntax changes.

  1. Evaluation of comparison between CHAR type column and a string literal will become easier. No more padding is needed in the string literal.

Example: Suppose table t has a column named col5 with data type CHAR(5), and it contains a row with value 'abcd ' (note the trailing space) for column col5. Currently, you have to use the exact same string literal in order to find a match:

SELECT 1 FROM t WHERE col5 = 'abcd '; -- the trailing space in the string literal is needed to get a match

With the new behavior, you will no longer need to provide the trailing spaces for such queries to match the condition:

SELECT 1 FROM t WHERE col5 = 'abcd'; -- there is no need to have a trailing space in the string literal to get a match

Now, this behavior probably makes more sense, but if, like "Sleeper", you have a bunch of deployed queries that depend on this behavior…. Well, as the old saying goes: "every change breaks somebody's workflow".

  1. Accessing a non-existing key in a MAP type will cause an error instead of having NULL returned as the result.

This is a behavior that could be positive or negative, depending on your point of view. But once again, this is the kind of change that could break somebody's workflow, quite significantly.

There is a way to get the original behavior, sort of:

If you still prefer the query to return NULL for such cases, you can leverage the TRY function to achieve that:

SELECT TRY(MAP(array['foo', 'bar'], array[1, 2])['abc']);

This does mean that if you relied on this behavior, you've got to find every use of MAP and wrap it in a TRY.

These are awkward changes, but it's not like an entire feature got removed, right?

  1. Accessing anonymous row fields in the form of “.field[n]” is no longer supported.

Example: Suppose you want to access a field of an anonymous row. Currently, Athena returns the first field, which is 'a', for the following query. With the new behavior, Athena will report an error indicating "Column 'ROW ('a', 'b').field0' cannot be resolved".

SELECT ROW('a', 'b').field0;

It will not impact the way you access a non-anonymous row. For example, the following query still works the same way and returns 'a'.

SELECT CAST(row('a', 'b') AS ROW(col0 char, col1 char)).col0;

Now, I'm going to assume that Amazon had usage statistics and had a pretty good picture of how widely these features were used and, for them, it was a simple calculus of "the greatest good for the greatest number". But if you're in the sacrificial pool of users, that's still gonna hurt.

This may not be a full on WTF, but I share it because I feel this pain: updates outside of your control that break your software. "Sleeper" got three months of warning to make the required changes, but the entire experience introduced costs and risks into "Sleeper"'s projects that didn't really benefit "Sleeper"'s team at all.

[Advertisement] Utilize BuildMaster to release your software with confidence, at the pace your business demands. Download today!

Charles StrossObligatory Hugo eligibility post

Because the novella publication date slipped into 2022, I have just one Hugo-eligible publication this year.

Obviously Invisible Sun is a no-hoper in the best novel category—it's book nine of a series in a deeply unfashionable subgenre—but it's also the last Merchant Princes book, which means the Merchant Princes series is eligible for nomination in the "best series" category.

(It's also eligible for the Sidewise Award for alternate history, but it already won that once, back in 2007.)

Anyway: if you enjoyed the Merchant Princes series this is the last opportunity to recognize it with an award.

So: what, if anything, have you published in 2021?

,

Planet DebianAntoine Beaupré: Switching from OpenNTPd to Chrony

A friend recently reminded me of the existence of chrony, a "versatile implementation of the Network Time Protocol (NTP)". The excellent introduction is worth quoting in full:

It can synchronise the system clock with NTP servers, reference clocks (e.g. GPS receiver), and manual input using wristwatch and keyboard. It can also operate as an NTPv4 (RFC 5905) server and peer to provide a time service to other computers in the network.

It is designed to perform well in a wide range of conditions, including intermittent network connections, heavily congested networks, changing temperatures (ordinary computer clocks are sensitive to temperature), and systems that do not run continuosly, or run on a virtual machine.

Typical accuracy between two machines synchronised over the Internet is within a few milliseconds; on a LAN, accuracy is typically in tens of microseconds. With hardware timestamping, or a hardware reference clock, sub-microsecond accuracy may be possible.

Now that's already great documentation right there. What it is, why it's good, and what to expect from it. I want more. They have a very handy comparison table between chrony, ntp and openntpd.

My problem with OpenNTPd

Following concerns surrounding the security (and complexity) of the venerable ntp program, I have, a long time ago, switched to using openntpd on all my computers. I hadn't thought about it until I recently noticed a lot of noise on one of my servers:

jan 18 10:09:49 curie ntpd[1069]: adjusting local clock by -1.604366s
jan 18 10:08:18 curie ntpd[1069]: adjusting local clock by -1.577608s
jan 18 10:05:02 curie ntpd[1069]: adjusting local clock by -1.574683s
jan 18 10:04:00 curie ntpd[1069]: adjusting local clock by -1.573240s
jan 18 10:02:26 curie ntpd[1069]: adjusting local clock by -1.569592s

You read that right, openntpd was constantly rewinding the clock, sometimes in less than two minutes. The above log was taken while doing diagnostics, looking at the last 30 minutes of logs. So, on average, one 1.5 seconds rewind per 6 minutes!

That might be due to a dying real time clock (RTC) or some other hardware problem. I know for a fact that the CMOS battery on that computer (curie) died and I wasn't able to replace it (!). So that's partly garbage-in, garbage-out here. But still, I was curious to see how chrony would behave... (Spoiler: much better.)

But I also had trouble on another workstation, that one a much more recent machine (angela). First, it seems OpenNTPd would just fail at boot time:

anarcat@angela:~(main)$ sudo systemctl status openntpd
â—� openntpd.service - OpenNTPd Network Time Protocol
     Loaded: loaded (/lib/systemd/system/openntpd.service; enabled; vendor pres>
     Active: inactive (dead) since Sun 2022-01-23 09:54:03 EST; 6h ago
       Docs: man:openntpd(8)
    Process: 3291 ExecStartPre=/usr/sbin/ntpd -n $DAEMON_OPTS (code=exited, sta>
    Process: 3294 ExecStart=/usr/sbin/ntpd $DAEMON_OPTS (code=exited, status=0/>
   Main PID: 3298 (code=exited, status=0/SUCCESS)
        CPU: 34ms

jan 23 09:54:03 angela systemd[1]: Starting OpenNTPd Network Time Protocol...
jan 23 09:54:03 angela ntpd[3291]: configuration OK
jan 23 09:54:03 angela ntpd[3297]: ntp engine ready
jan 23 09:54:03 angela ntpd[3297]: ntp: recvfrom: Permission denied
jan 23 09:54:03 angela ntpd[3294]: Terminating
jan 23 09:54:03 angela systemd[1]: Started OpenNTPd Network Time Protocol.
jan 23 09:54:03 angela systemd[1]: openntpd.service: Succeeded.

After a restart, somehow it worked, but it took a long time to sync the clock. At first, it would just not consider any peer at all:

anarcat@angela:~(main)$ sudo ntpctl -s all
0/20 peers valid, clock unsynced

peer
   wt tl st  next  poll          offset       delay      jitter
159.203.8.72 from pool 0.debian.pool.ntp.org
    1  5  2    6s    6s             ---- peer not valid ----
138.197.135.239 from pool 0.debian.pool.ntp.org
    1  5  2    6s    7s             ---- peer not valid ----
216.197.156.83 from pool 0.debian.pool.ntp.org
    1  4  1    2s    9s             ---- peer not valid ----
142.114.187.107 from pool 0.debian.pool.ntp.org
    1  5  2    5s    6s             ---- peer not valid ----
216.6.2.70 from pool 1.debian.pool.ntp.org
    1  4  2    2s    8s             ---- peer not valid ----
207.34.49.172 from pool 1.debian.pool.ntp.org
    1  4  2    0s    5s             ---- peer not valid ----
198.27.76.102 from pool 1.debian.pool.ntp.org
    1  5  2    5s    5s             ---- peer not valid ----
158.69.254.196 from pool 1.debian.pool.ntp.org
    1  4  3    1s    6s             ---- peer not valid ----
149.56.121.16 from pool 2.debian.pool.ntp.org
    1  4  2    5s    9s             ---- peer not valid ----
162.159.200.123 from pool 2.debian.pool.ntp.org
    1  4  3    1s    6s             ---- peer not valid ----
206.108.0.131 from pool 2.debian.pool.ntp.org
    1  4  1    6s    9s             ---- peer not valid ----
205.206.70.40 from pool 2.debian.pool.ntp.org
    1  5  2    8s    9s             ---- peer not valid ----
2001:678:8::123 from pool 2.debian.pool.ntp.org
    1  4  2    5s    9s             ---- peer not valid ----
2606:4700:f1::1 from pool 2.debian.pool.ntp.org
    1  4  3    2s    6s             ---- peer not valid ----
2607:5300:205:200::1991 from pool 2.debian.pool.ntp.org
    1  4  2    5s    9s             ---- peer not valid ----
2607:5300:201:3100::345c from pool 2.debian.pool.ntp.org
    1  4  4    1s    6s             ---- peer not valid ----
209.115.181.110 from pool 3.debian.pool.ntp.org
    1  5  2    5s    6s             ---- peer not valid ----
205.206.70.42 from pool 3.debian.pool.ntp.org
    1  4  2    0s    6s             ---- peer not valid ----
68.69.221.61 from pool 3.debian.pool.ntp.org
    1  4  1    2s    9s             ---- peer not valid ----
162.159.200.1 from pool 3.debian.pool.ntp.org
    1  4  3    4s    7s             ---- peer not valid ----

Then it would accept them, but still wouldn't sync the clock:

anarcat@angela:~(main)$ sudo ntpctl -s all
20/20 peers valid, clock unsynced

peer
   wt tl st  next  poll          offset       delay      jitter
159.203.8.72 from pool 0.debian.pool.ntp.org
    1  8  2    5s    6s         0.672ms    13.507ms     0.442ms
138.197.135.239 from pool 0.debian.pool.ntp.org
    1  7  2    4s    8s         1.260ms    13.388ms     0.494ms
216.197.156.83 from pool 0.debian.pool.ntp.org
    1  7  1    3s    5s        -0.390ms    47.641ms     1.537ms
142.114.187.107 from pool 0.debian.pool.ntp.org
    1  7  2    1s    6s        -0.573ms    15.012ms     1.845ms
216.6.2.70 from pool 1.debian.pool.ntp.org
    1  7  2    3s    8s        -0.178ms    21.691ms     1.807ms
207.34.49.172 from pool 1.debian.pool.ntp.org
    1  7  2    4s    8s        -5.742ms    70.040ms     1.656ms
198.27.76.102 from pool 1.debian.pool.ntp.org
    1  7  2    0s    7s         0.170ms    21.035ms     1.914ms
158.69.254.196 from pool 1.debian.pool.ntp.org
    1  7  3    5s    8s        -2.626ms    20.862ms     2.032ms
149.56.121.16 from pool 2.debian.pool.ntp.org
    1  7  2    6s    8s         0.123ms    20.758ms     2.248ms
162.159.200.123 from pool 2.debian.pool.ntp.org
    1  8  3    4s    5s         2.043ms    14.138ms     1.675ms
206.108.0.131 from pool 2.debian.pool.ntp.org
    1  6  1    0s    7s        -0.027ms    14.189ms     2.206ms
205.206.70.40 from pool 2.debian.pool.ntp.org
    1  7  2    1s    5s        -1.777ms    53.459ms     1.865ms
2001:678:8::123 from pool 2.debian.pool.ntp.org
    1  6  2    1s    8s         0.195ms    14.572ms     2.624ms
2606:4700:f1::1 from pool 2.debian.pool.ntp.org
    1  7  3    6s    9s         2.068ms    14.102ms     1.767ms
2607:5300:205:200::1991 from pool 2.debian.pool.ntp.org
    1  6  2    4s    9s         0.254ms    21.471ms     2.120ms
2607:5300:201:3100::345c from pool 2.debian.pool.ntp.org
    1  7  4    5s    9s        -1.706ms    21.030ms     1.849ms
209.115.181.110 from pool 3.debian.pool.ntp.org
    1  7  2    0s    7s         8.907ms    75.070ms     2.095ms
205.206.70.42 from pool 3.debian.pool.ntp.org
    1  7  2    6s    9s        -1.729ms    53.823ms     2.193ms
68.69.221.61 from pool 3.debian.pool.ntp.org
    1  7  1    1s    7s        -1.265ms    46.355ms     4.171ms
162.159.200.1 from pool 3.debian.pool.ntp.org
    1  7  3    4s    8s         1.732ms    35.792ms     2.228ms

It took a solid five minutes to sync the clock, even though the peers were considered valid within a few seconds:

jan 23 15:58:41 angela systemd[1]: Started OpenNTPd Network Time Protocol.
jan 23 15:58:58 angela ntpd[84086]: peer 142.114.187.107 now valid
jan 23 15:58:58 angela ntpd[84086]: peer 198.27.76.102 now valid
jan 23 15:58:58 angela ntpd[84086]: peer 207.34.49.172 now valid
jan 23 15:58:58 angela ntpd[84086]: peer 209.115.181.110 now valid
jan 23 15:58:59 angela ntpd[84086]: peer 159.203.8.72 now valid
jan 23 15:58:59 angela ntpd[84086]: peer 138.197.135.239 now valid
jan 23 15:58:59 angela ntpd[84086]: peer 162.159.200.123 now valid
jan 23 15:58:59 angela ntpd[84086]: peer 2607:5300:201:3100::345c now valid
jan 23 15:59:00 angela ntpd[84086]: peer 2606:4700:f1::1 now valid
jan 23 15:59:00 angela ntpd[84086]: peer 158.69.254.196 now valid
jan 23 15:59:01 angela ntpd[84086]: peer 216.6.2.70 now valid
jan 23 15:59:01 angela ntpd[84086]: peer 68.69.221.61 now valid
jan 23 15:59:01 angela ntpd[84086]: peer 205.206.70.40 now valid
jan 23 15:59:01 angela ntpd[84086]: peer 205.206.70.42 now valid
jan 23 15:59:02 angela ntpd[84086]: peer 162.159.200.1 now valid
jan 23 15:59:04 angela ntpd[84086]: peer 216.197.156.83 now valid
jan 23 15:59:05 angela ntpd[84086]: peer 206.108.0.131 now valid
jan 23 15:59:05 angela ntpd[84086]: peer 2001:678:8::123 now valid
jan 23 15:59:05 angela ntpd[84086]: peer 149.56.121.16 now valid
jan 23 15:59:07 angela ntpd[84086]: peer 2607:5300:205:200::1991 now valid
jan 23 16:03:47 angela ntpd[84086]: clock is now synced

That seems kind of odd. It was also frustrating to have very little information from ntpctl about the state of the daemon. I understand it's designed to be minimal, but it could inform me on his known offset, for example. It does tell me about the offset with the different peers, but not as clearly as one would expect. It's also unclear how it disciplines the RTC at all.

Compared to chrony

Now compare with chrony:

jan 23 16:07:16 angela systemd[1]: Starting chrony, an NTP client/server...
jan 23 16:07:16 angela chronyd[87765]: chronyd version 4.0 starting (+CMDMON +NTP +REFCLOCK +RTC +PRIVDROP +SCFILTER +SIGND +ASYNCDNS +NTS +SECHASH +IPV6 -DEBUG)
jan 23 16:07:16 angela chronyd[87765]: Initial frequency 3.814 ppm
jan 23 16:07:16 angela chronyd[87765]: Using right/UTC timezone to obtain leap second data
jan 23 16:07:16 angela chronyd[87765]: Loaded seccomp filter
jan 23 16:07:16 angela systemd[1]: Started chrony, an NTP client/server.
jan 23 16:07:21 angela chronyd[87765]: Selected source 206.108.0.131 (2.debian.pool.ntp.org)
jan 23 16:07:21 angela chronyd[87765]: System clock TAI offset set to 37 seconds

First, you'll notice there's none of that "clock synced" nonsense, it picks a source, and then... it's just done. Because the clock on this computer is not drifting that much, and openntpd had (presumably) just sync'd it anyways. And indeed, if we look at detailed stats from the powerful chronyc client:

anarcat@angela:~(main)$ sudo chronyc tracking
Reference ID    : CE6C0083 (ntp1.torix.ca)
Stratum         : 2
Ref time (UTC)  : Sun Jan 23 21:07:21 2022
System time     : 0.000000311 seconds slow of NTP time
Last offset     : +0.000807989 seconds
RMS offset      : 0.000807989 seconds
Frequency       : 3.814 ppm fast
Residual freq   : -24.434 ppm
Skew            : 1000000.000 ppm
Root delay      : 0.013200894 seconds
Root dispersion : 65.357254028 seconds
Update interval : 1.4 seconds
Leap status     : Normal

We see that we are nanoseconds away from NTP time. That was ran very quickly after starting the server (literally in the same second as chrony picked a source), so stats are a bit weird (e.g. the Skew is huge). After a minute or two, it looks more reasonable:

Reference ID    : CE6C0083 (ntp1.torix.ca)
Stratum         : 2
Ref time (UTC)  : Sun Jan 23 21:09:32 2022
System time     : 0.000487002 seconds slow of NTP time
Last offset     : -0.000332960 seconds
RMS offset      : 0.000751204 seconds
Frequency       : 3.536 ppm fast
Residual freq   : +0.016 ppm
Skew            : 3.707 ppm
Root delay      : 0.013363549 seconds
Root dispersion : 0.000324015 seconds
Update interval : 65.0 seconds
Leap status     : Normal

Now it's learning how good or bad the RTC clock is ("Frequency"), and is smoothly adjusting the System time to follow the average offset (RMS offset, more or less). You'll also notice the Update interval has risen, and will keep expanding as chrony learns more about the internal clock, so it doesn't need to constantly poll the NTP servers to sync the clock. In the above, we're 487 micro seconds (less than a milisecond!) away from NTP time.

(People interested in the explanation of every single one of those fields can read the excellent chronyc manpage. That thing made me want to nerd out on NTP again!)

On the machine with the bad clock, chrony also did a 1.5 second adjustment, but just once, at startup:

jan 18 11:54:33 curie chronyd[2148399]: Selected source 206.108.0.133 (2.debian.pool.ntp.org) 
jan 18 11:54:33 curie chronyd[2148399]: System clock wrong by -1.606546 seconds 
jan 18 11:54:31 curie chronyd[2148399]: System clock was stepped by -1.606546 seconds 
jan 18 11:54:31 curie chronyd[2148399]: System clock TAI offset set to 37 seconds 

Then it would still struggle to keep the clock in sync, but not as badly as openntpd. Here's the offset a few minutes after that above startup:

System time     : 0.000375352 seconds slow of NTP time

And again a few seconds later:

System time     : 0.001793046 seconds slow of NTP time

I don't currently have access to that machine, and will update this post with the latest status, but so far I've had a very good experience with chrony on that machine, which is a testament to its resilience, and it also just works on my other machines as well.

Extras

On top of "just working" (as demonstrated above), I feel that chrony's feature set is so much superior... Here's an excerpt of the extras in chrony, taken from comparison table:

  • source frequency tracking
  • source state restore from file
  • temperature compensation
  • ready for next NTP era (year 2036)
  • replace unreachable / falseticker servers
  • aware of jitter
  • RTC drift tracking
  • RTC trimming
  • Restore time from file w/o RTC
  • leap seconds correction, in slew mode
  • drops root privileges

I even understand some of that stuff. I think.

So kudos to the chrony folks, I'm switching.

Caveats

One thing to keep in mind in the above, however is that it's quite possible chrony does as bad of a job as openntpd on that old machine, and just doesn't tell me about it. For example, here's another log sample from another server (marcos):

jan 23 11:13:25 marcos ntpd[1976694]: adjusting clock frequency by 0.451035 to -16.420273ppm

I get those basically every day, which seems to show that it's at least trying to keep track of the hardware clock.

In other words, it's quite possible I have no idea what I'm talking about and you definitely need to take this article with a grain of salt. I'm not an NTP expert.

Switching to chrony

Because the default configuration in chrony (at least as shipped in Debian) is sane (good default peers, no open network by default), installing it is as simple as:

apt install chrony

And because it somehow conflicts with openntpd, that also takes care of removing that cruft as well.

Charles StrossQuantum of Nightmares

Quantum of Nightmares cover

Enough with the pandemic and politics, the Scylla and Charybdis of 2021 on this blog: I've got a new book coming in less than three weeks, so let me tell you as much about it as I can without spoiling it for you!

Quantum of Nightmares is the second of the New Management books, a spin-off series set in the universe of the Laundry Files, and a direct follow-up to 2020's Dead Lies Dreaming. (The US edition comes out on the 11th of January, two days before the UK edition drops. If you dislike Amazon, here are links for US independent booksellers and UK independent booksellers.)

(NOTE: for some reason Amazon.co.uk isn't showing the Kindle or audiobook editions yet, but it is showing the paperback available for preorder. Don't order it unless you're happy to wait until November! As for Amazon.com, no paperback edition is planned—my US publisher, Tor.com, do not currently publish paperbacks: it's hardcover, audiobook, or ebook only.)

So what's going on?

If you read Dead Lies Dreaming you can probably guess some of it: after Eve's boss Rupert went missing under questionable circumstances, she discovered he'd left behind a wriggling can of worms—several cans, in fact. Rupert kept blackmail files on everyone, Eve included, and the New Management's laws prescribe the same punishment for just about every infraction.

But that's not all: the Bigge Organization was in the process of buying an unpromising-looking London-based supermarket chain when Rupert met with his accident. Before he vanished Rupert tasked Eve personally with completing the takeover, which suggests to her that there's more to it than meets the eye. She starts digging, and soon the wriggling worms prove to be more than metaphorical as she discovers an alarming product adulteration issue and sends private detective Wendy Deere to find out why there's human DNA in the meat pies and members of staff are vanishing ...

Meanwhile, there's the matter of a legal document her brother Imp signed five years ago while he was stoned. No biggie, except it was written in mediaeval Norman French and had Rupert's fingerprints all over it.

Finally, on the other side of London, a respectable looking nanny arrives on the doorstep of Mr and Mrs Banks, just in time to take charge of their four children while the parents jet off to attend an international conference of government superheroes. Little do Mr and Mrs Banks—Captain Colossal and the Blue Queen, as they're known by the London Metropolitan Police—realize that Mary is a ringer, and their children have an appointment with the cultists running a certain supermarket branch ...

Eve gradually realizes that Rupert's plans ran far deeper and were vastly more nightmarish than her worst imagining—so nightmarish, in fact, that they threaten to draw the attention of the New Management down on her. Can she get to the bottom of numerous clashing conspiracies in time to save herself from Rupert's trap? Or is it already too late to prevent him from returning from the dream roads with the means to resurrect his undead god and bring about the end of the world?

(Well, that's what I would have put on the cover copy, if anyone had asked!)

As you might have guessed already, this isn't the last New Management book. (The next one, Season of Skulls, is mostly written and will probably be published in January of 2023. After that, it's probably back to the main Laundry series for at least one book: but hopefully the New Management will persist, even after Bob and co-workers have sailed off into the sunset.)

As for where Quantum of Nightmares came from, I'm blaming you, Nile. If you hadn't started asking those questions in the bar at the 2019 Worldcon in Dublin, pulling on the loose threads in Dead Lies Dreaming, I wouldn't have had to answer them! (And my headcanon vision of Eve would sleep much more soundly.)

PS: The Island of Skaro does not exist in our reality. In the Laundryverse it's a small rocky lump at the western end of the English Channel, not too far from Jersey, Guernsey, and Sark (which it is modelled after). Like the real Channel Islands, it has its own unique legal system and government. Unlike them, it is directly ruled by a feudal liege with powers delegated from the Duke of Normandy—and it is so small and insignificant that nobody has bothered to update its legal code since the 18th century or earlier. On which hangs a major plot point for both this novel—and the next.

David BrinThe paradox of technologies of connectivity

Even as technology links people together across the globe, our differences seem to be driving us further apart. In some ways technology offers greater safety and security than ever - and in other ways, unprecedented threats to the very civilization that engendered it.


Meanwhile, there is a movement to hold AI accountable - requiring alorithms used in decision-making, such as health care, housing, employment or education - to be 'audited' for bias.


At the Noema site, you can read an interesting summary by Nathan Gardels of a new book, “The Age of AI And Our Human Future,” co-written by three authors: veteran Cold War strategist Henry Kissinger, former Google CEO Eric Schmidt and computer scientist Daniel Huttenlocher. The Age of AI and our Future asserts that dispersal of burgeoning data systems has increased the danger of inadvertent War by Miscalculation among the world’s great powers.

Gardels notes, "The paradox that technologies of connectivity are dividing the world anew is not lost on the authors. Instead of uniting the planet in a common perspective, the evolution of AI and other tools that frame the use of data, the flow of information and the openness of expression reflect the civilizational and cultural values that undergird them and stand at the heart of divergence between East and West. 

"In time," the authors predict, "an industry founded on the premise of community and communication" may end up "uniting blocs of users in separate realities... evolving along parallel but entirely distinct lines and with communication and exchange between them growing increasingly foreign and difficult."

For the authors, this divergence is compounded by technological escape from the control of human reason historically grounded in the locality of place. As they put it:


 "Now day-to-day reality is accessible on a global scale, across network platforms that unite vast numbers of users. Yet the individual human mind is no longer reality's sole--or perhaps even its principal--navigator. AI-enabled continental and global network platforms have joined the human mind in this task, aiding it and in some areas, perhaps moving toward eventually displacing it."


Well, well, as I frequently point out (with slides) at speeches, this is not the first time that advances in three areas -- knowledge-access (writing, printed books, newspapers, radio, TV) and vision (glass lenses, telescopes, scientific instruments) and attention (perspective and other tools of focus) -- have triggered dangerous disruption... before finally becoming tools for expanded human achievement, consciousness and wisdom. 


(Biggest examples, the printing press tore Europe to shred, before settling in as a generally positive source of wisdom. The arrival of radio and loudspeakers in the 1930s damn near killed civilization... till they saved it. The one new comms tech that had generally positive outcomes from the start was ... (get ready)... television!)


Anyway, there appear to be valid points in the Kissinger/Schmidt/Huttenlocher book and  solid practical advice...


... that alas seem to ignore the fundamental driver of potential conflict, which is a ticking cultural clock.  


Foremost, there is a reason that all the world's oligarchies are joining together in common cause, from communist hierarchs and "ex"-communist Kremlin lords to casino moguls, mafiosi, murder princes and inheritance brats. 


They all face only a very short window to re-establish quasi-feudal, inheritance-based rule, of the sort that oppressed 99% of our ancestors for 6000 years. And you can bet they are hoping that developments in AI will lock in their pyramids of power, forever.


== The fear all oligarchs share... a permanent end to pyramids of power ==


In Vivid Tomorrows: Science Fiction and Hollywood -  I describe out the memes preached and spread by Hollywood are especially infectious among the world's youth, especially when rising prosperity is accompanied with a sense of safety/satiation.  The most common Hollywood themes: Suspicion of Authority (SoA), diversity, individual eccentricity and empathy are tantamount to massive propaganda for Enlightenment values. Values that, should they fully take root, will be death to oligarchy, over the long run.


This is the real reason for the banning of most western entertainments in certain nations. It is the top reason for drumbeats of resentment and hate being pounded across their controlled media. Individualism and suspicion toward unaccountable elites will be lethal to pyramidal power structures and that must be prevented soon, lest those values embed in the world's vast majority.


Our danger does not arise from the lack of hot line conversations between heads of state. It is rooted in a certainty among oligarchs of all types that uniting to crush the enlightenment experiment is essential, if those oligarchs are to pass paramount power to their sons.



== Two crises of intimidation... that may not be backed by plausible threat ==

While our worried gaze is on the Russia-Ukraine crisis, let's keep a broad sense of danger. The annual Pentagon appraisal of China’s growing military might is most interesting. 


My amateur assessment: All the saber rattling from that New Power is counter-productive. It is not long-term effective to deeply offend and threaten all your neighbors, driving them into the arms of your more benign and historically friendly rival. Several of those neighbors - especially those in Oz - have respoded by digging in their heels.


I especially doubt the ability of any invasion force to cross the Formosa Straits if they are contested. Even if the nearby continental power gains utter control of the air and destroys all rival forces, denying those rivals entry, air superiority does nothing about hundreds of lurker torpedo-mines, waiting quietly in the mud. I doubt they could be cleaned out, even with underwater nukes. 


But what do I know? Indeed, the report notes that notion of an actual invasion seems beyond the New Power's capabilities. 


‘Large-scale amphibious invasion is one of the most complicated and difficult military operations, requiring air and materiel superiority, the rapid buildup and sustainment of supplies onshore, and uninterrupted support. An attempt to invade Taiwan would likely strain [NP’s] armed forces and invite international intervention. These stresses, combined with…the complexity of urban warfare and counterinsurgency…make an amphibious invasion of Taiwan a significant political military risk.’


This analysis seems to agree with my portrayal, and further notes that NP appears to have made a deliberate choice, when they took full control of H.Kong. They surely knew that would end all chance of political rapprochement with T'aipei or any major constituencies on the island.


== Final miscellany ==

New Zealand wants to ban all cigarette sales by gradually raising the legal smoking age.  Clever… it leaves current voter-smokers alone.  And ethically-politically problematic! Still, clever. Jacinda for world Premiere.


,

Planet DebianSteve Kemp: Visiting the UK was difficult, but worth it

So in my previous post I mentioned that we were going to spend the Christmas period in the UK, which we did.

We spent a couple of days there, meeting my parents, and family. We also persuaded my sister to drive us to Scarborough so that we could hang out on the beach for an afternoon.

Finland has lots of lakes, but it doesn't have proper waves. So it was surprisingly good just to wade in the sea and see waves! Unfortunately our child was a wee bit too scared to ride on a donkey!

Unfortunately upon our return to Finland we all tested positive for COVID-19, me first, then the child, and about three days later my wife. We had negative tests in advance of our flights home, so we figure that either the tests were broken, or we were infected in the airplane/airport.

Thankfully things weren't too bad, we stayed indoors for the appropriate length of time, and a combination of a couple of neighbours and online shopping meant we didn't run out of food.

Since I've been back home I've been automating AWS activities with aws-utils, and updating my simple host-automation system, marionette.

Marionette is something that was inspired by puppet, the configuration management utility, but it runs upon localhost only. Despite the small number of integrated primitives it actually works surprisingly well, and although I don't expect it will ever become popular it was an interesting research project.

The aws-utilities? They were specifically put together because I've worked in a few places where infrastructure is setup with terraform, or cloudformation, but there are always the odd thing that is configured manually. Typically we'll have an openvpn gateway which uses a manually maintained IP allow-list, or some admin-server which has a security-group maintained somewhat manually.

Having the ability to update a bunch of rules with your external IP, as a single command, across a number of AWS accounts/roles, and a number of security-groups is an enormous time-saver when your home IP changes.

I'd quite like to add more things to that collection, but there's no particular rush.

Planet DebianLouis-Philippe Véronneau: Goodbye Nexus 5

I've blogged a few times already about my Nexus 5, the Android device I have/had been using for 8 years. Sadly, it died a few weeks ago, when the WiFi chip stopped working. I could probably have attempted a mainboard swap, but at this point, getting a new device seemed like the best choice.

In a world where most Android devices are EOL after less than 3 years, it is amazing I was able to keep this device for so long, always running the latest Android version with the latest security patch. The Nexus 5 originally shipped with Android 4.4 and when it broke, I was running Android 11, with the November security patch! I'm very grateful to the FOSS Android community that made this possible, especially the LineageOS community.

I've replaced my Nexus 5 by a used Pixel 3a, mostly because of the similar form factor, relatively affordable price and the presence of a headphone jack. Google also makes flashing a custom ROM easy, although I had more trouble with this than I first expected.

The first Pixel 3a I bought on eBay was a scam: I ordered an "Open Box" phone and it arrived all scratched1 and with a broken rear camera. The second one I got (from the Amazon Renewed program) arrived in perfect condition, but happened to be a Verizon model. As I found out, Verizon locks the bootloader on their phones, making it impossible to install LineageOS2. The vendor was kind enough to let me return it.

As they say, third time's the charm. This time around, I explicitly bought a phone on eBay listed with a unlocked bootloader. I'm very satisfied with my purchase, but all in all, dealing with all the returns and the shipping was exhausting.

Hopefully this phone will last as long as my Nexus 5!


  1. There was literally a whole layer missing at the back, as if someone had sanded the phone... 

  2. Apparently, and "Unlocked phone" means it is "SIM unlocked", i.e. you can use it with any carrier. What I should have been looking for is a "Factory Unlocked phone", one where the bootloader isn't locked :L 

Planet DebianDirk Eddelbuettel: qlcal 0.0.2 on CRAN: Updates

The second release of the still fairly new qlcal package arrivied at CRAN today.

qlcal is based on the calendaring subset of QuantLib. It is provided (for the R package) as a set of included files, so the package is self-contained and does not depend on an external QuantLib library (which can be demanding to build). qlcal covers over sixty country / market calendars and can compute holiday lists, its complement (i.e. business day lists) and much more.

This release brings a further package simplification from removing a few more files not needed for just calendaring, as well as an update 2022 calendar for China from the just-release 1.25 version of QuantLib.

Changes in version 0.0.2 (2022-01-21)

  • Further minimize set of files needed for calendaring

  • Update China calendar from QuantLib 1.25 release

See the project page and package documentation for more details, and more examples.

If you like this or other open-source work I do, you can now sponsor me at GitHub.

This post by Dirk Eddelbuettel originated on his Thinking inside the box blog. Please report excessive re-aggregation in third-party for-profit settings.

,

Cryptogram Friday Squid Blogging: Piglet Squid

Nice article on the piglet squid.

As usual, you can also use this squid post to talk about the security stories in the news that I haven’t covered.

Read my blog posting guidelines here.

Cryptogram Linux-Targeted Malware Increased by 35%

Crowdstrike is reporting that malware targeting Linux has increased considerably in 2021:

Malware targeting Linux systems increased by 35% in 2021 compared to 2020.

XorDDoS, Mirai and Mozi malware families accounted for over 22% of Linux-targeted threats observed by CrowdStrike in 2021.

Ten times more Mozi malware samples were observed in 2021 compared to 2020.

Lots of details in the report.

News article:

The Crowdstrike findings aren’t surprising as they confirm an ongoing trend that emerged in previous years.

For example, an Intezer report analyzing 2020 stats found that Linux malware families increased by 40% in 2020 compared to the previous year.

In the first six months of 2020, a steep rise of 500% in Golang malware was recorded, showing that malware authors were looking for ways to make their code run on multiple platforms.

This programming, and by extension, targeting trend, has already been confirmed in early 2022 cases and is likely to continue unabated.

Slashdot thread.

Krebs on SecurityCrime Shop Sells Hacked Logins to Other Crime Shops

Up for the “Most Meta Cybercrime Offering” award this year is Accountz Club, a new cybercrime store that sells access to purloined accounts at services built for cybercriminals, including shops peddling stolen payment cards and identities, spamming tools, email and phone bombing services, and those selling authentication cookies for a slew of popular websites.

Criminals ripping off other crooks is a constant theme in the cybercrime underworld; Accountz Club’s slogan  — “the best autoshop for your favorite shops’ accounts” — just normalizes this activity by making logins stolen from users of various cybercrime shops for sale at a fraction of their account balances.

The site says it sells “cracked” accounts, or those that used passwords which could be easily guessed or enumerated by automated tools. All of the credentials being sold by Accountz provide access to services that in turn sell access to stolen information or hijacked property, as in the case of “bot shops” that resell access to infected computers.

One example is Genesis Market, where customers can search for stolen credentials and authentication cookies from a broad range of popular online destinations. Genesis even offers a custom-made web browser where you can load authentication cookies from botted PCs and waltz right into the account without having to enter a username or password or mess with multi-factor authentication.

Accountz is currently selling four different Genesis logins for about 40-50 percent of their unspent balances. Genesis mostly gets its inventory of botted computers and stolen logins from resellers who specialize in deploying infostealer malware via email and booby-trapped websites. Likewise, it appears Accountz also derives much of its stock from a handful of resellers, who presumably are the same ones doing the cybercrime service account cracking.

The Genesis bot shop.

In essence, Accountz customers are paying for illicit access to cybercrime services that sell access to compromised resources that can be abused for cybercrime. That’s seriously meta.

Accountz says its inventory is low right now but that it expects to offer a great deal more stock in the coming days. I don’t doubt that’s true, and it’s somewhat remarkable that services like this aren’t more common: From reporting my “Breadcrumbs” series on prominent cybercrime actors, it’s clear that a great many cybercriminals will use the same username and password across multiple services online.

What’s more, relatively few cybercrime shops online offer their users any sort of multi-factor authentication. That’s probably because so few customers supply their real contact information when they sign up. As a result, it is often far easier for customers to simply create a new account than it is to regain control over a hacked one, or to change a forgotten password. On top of that, most shops have only rudimentary tools for blocking automated login attempts and password cracking activity.

It will be interesting to see whether any of the cybercrime shops most heavily represented in the logins for sale at Accountz start to push back. After all, draining customer account balances and locking out users is likely to increase customer support costs for these shops, lower customer satisfaction, and perhaps even damage their reputations on the crime forums where they peddle their wares.

Oh, the horror.

Planet DebianNeil McGovern: Further investments in desktop Linux

This was originally posted on the GNOME Foundation news feed

The GNOME Foundation was supported during 2020-2021 by a grant from Endless Network which funded the Community Engagement Challenge, strategy consultancy with the board, and a contribution towards our general running costs. At the end of last year we had a portion of this grant remaining, and after the success of our work in previous years directly funding developer and infrastructure work on GTK and Flathub, we wanted to see whether we could use these funds to invest in GNOME and the wider Linux desktop platform.

We’re very pleased to announce that we got approval to launch three parallel contractor engagements, which started over the past few weeks. These projects aim to improve our developer experience, make more applications available on the GNOME platform, and move towards equitable and sustainable revenue models for developers within our ecosystem. Thanks again to Endless Network for their support on these initiatives.

Flathub – Verified apps, donations and subscriptions (Codethink and James Westman)

This project is described in detail on the Flathub Discourse but goal is to add a process to verify first-party apps on Flathub (ie uploaded by a developer or an authorised representative) and then make it possible for those developers to collect donations or subscriptions from users of their applications. We also plan to publish a separate repository that contains only these verified first-party uploads (without any of the community contributed applications), as well as providing a repository with only free and open source applications, allowing users to choose what they are comfortable installing and running on their system.

Creating the user and developer login system to manage your apps will also set us up well for future enhancements, such managing tokens for direct binary uploads (eg from a CI/CD system hosted elsewhere, as is already done with Mozilla Firefox and OBS) and making it easier to publish apps from systems such as Electron which can be hard to use within a flatpak-builder sandbox. For updates on this project you can follow the Discourse thread, check out the work board on GitHub or join us on Matrix.

PWAs – Integrating Progressive Web Apps in GNOME (Phaedrus Leeds)

While everyone agrees that native applications can provide the best experience on the GNOME desktop, the web platform, and particularly PWAs (Progressive Web Apps) which are designed to be downloadable as apps and offer offline functionality, makes it possible for us to offer equivalent experiences to other platforms for app publishers who have not specifically targeted GNOME. This allows us to attract and retain users by giving them the choice of using applications from a wider range of publishers than are currently directly targeting the Linux desktop.

The first phase of the GNOME PWA project involves adding back support to Software for web apps backed by GNOME Web, and making this possible when Web is packaged as a Flatpak.  So far some preparatory pull requests have been merged in Web and libportal to enable this work, and development is ongoing to get the feature branches ready for review.

Discussions are also in progress with the Design team on how best to display the web apps in Software and on the user interface for web apps installed from a browser. There has also been discussion among various stakeholders about what web apps should be included as available with Software, and how they can provide supplemental value to users without taking priority over apps native to GNOME.

Finally, technical discussion is ongoing in the portal issue tracker to ensure that the implementation of a new dynamic launcher portal meets all security and robustness requirements, and is potentially useful not just to GNOME Web but Chromium and any other app that may want to install desktop launchers. Adding support for the launcher portal in upstream Chromium, to facilitate Chromium-based browsers packaged as a Flatpak, and adding support for Chromium-based web apps in Software are stretch goals for the project should time permit.

GTK4 / Adwaita – To support the adoption of Gtk4 by the community (Emmanuele Bassi)

With the release of GTK4 and renewed interest in GTK as a toolkit, we want to continue improving the developer experience and ease of use of GTK and ensure we have a complete and competitive offering for developers considering using our platform. This involves identifying missing functionality or UI elements that applications need to move to GTK4, as well as informing the community about the new widgets and functionality available.

We have been working on documentation and bug fixes for GTK in preparation for the GNOME 42 release and have also started looking at the missing widgets and API in Libadwaita, in preparation for the next release. The next steps are to work with the Design team and the Libadwaita maintainers and identify and implement missing widgets that did not make the cut for the 1.0 release.

In the meantime, we have also worked on writing a beginners tutorial for the GNOME developers documentation, including GTK and Libadwaita widgets so that newcomers to the platform can easily move between the Interface Guidelines and the API references of various libraries. To increase the outreach of the effort, Emmanuele has been streaming it on Twitch, and published the VOD on YouTube as well. 

Worse Than FailureError'd: Time Enough to Cry

Does anybody really care about time?

Angela A. cares. "TGI(T|F)" she announces. "The days just run together!"

tgitf

 

Scott cares. "Nothing dueing!" he contends, with the understatement that "Chase isn't so accurate."

carloan

 

Self-declared Lord Kelvin, on the other hand, gets more heated about other things. "AMD's new cooling technology is amazing. How hot would it be at 100% utilization?"

superhot

 

While back in prime time, fan Dave A. shouts "I'll take Bad Error Handling for 800, Ken!"

jwtf

 

Finally, to close us out for the week, Angela A. returns with lunchtime (which we all know is an illusion). "I decided to add some blue cheese crumbles to tomorrow's pick-up to go with that microwavable spinach salad (?), but apparently the computer thinks I haven't ordered enough. Or maybe I've ordered too much? I would like to check out now..." Bon Appetit.

minimum

 

[Advertisement] Continuously monitor your servers for configuration changes, and report when there's configuration drift. Get started with Otter today!

Planet DebianLouis-Philippe Véronneau: Homebrewing recipes

Looking at my blog, it seems I haven't written anything about homebrewing in a while. In fact, the last time I did was when I had a carboy blow out on me in the middle of the night...

Fear not, I haven't stopped brewing since then. I have in fact decided to publish my homebrew recipes. Not on this blog though, as it would get pretty repetitive.

So here are my recipes. So far, I've brewed around 30 different beers!

The format is pretty simple (no fancy HTML, just plain markdown) and although I'm not the most scientific brewer, you should be able to replicate some of those if that's what you want to try.

Cheers!

Planet DebianLouis-Philippe Véronneau: Montreal Subway Foot Traffic Data, 2021 edition

<img align=right src="http://planet.debian.org/heads/pollo.png" style="float: right;" alt="" width=65 height=70> <p>For the third time now, I've asked <em>Société de Transport de Montréal</em>, Montreal's transit agency, for the foot traffic data of Montreal's subway. I think this has become an annual thing now :)</p> <p>The original blog post and the 2019-2020 edition can be read here:</p> <ul> <li><a href="https://veronneau.org/montreal-subway-foot-traffic-data.html">Original blog post (2001 to 2018)</a></li> <li><a href="https://veronneau.org/montreal-subway-foot-traffic-data-revisited.html">2019-2020 edition (2001 to 2020)</a></li> </ul> <p><em>By clicking on a subway station, you'll be redirected to a graph of the station's foot traffic.</em></p> <p><svg version=1.1 xmlns="http://www.w3.org/2000/svg" id=svg10293 display=block xlink="http://www.w3.org/1999/xlink" viewBox="0 0 2504.4 2196.2" preserveAspectRatio="x200Y200 meet" width=100% height=100%><defs id=defs5581><path d="M0 3918.2V0h2598.2v3918.2z" id=path5576><path id=rect19403 d="M66.91 1085.2h2504.4v2196.2H66.91z" fill-opacity=.216 fill=#0f0 fill-rule=evenodd></path></path></defs><g id=g19399 transform="translate(-66.91 -1085.2)"><path id=path5583 fill=#fff d="M0 0v3918h2598V0z"><path style="fill: #ebecec;" id=path5585 fill=#ebecec d="M0 3918.2h2598.2V0H0Z"><path id=path5587 class=g1_1 d="m2558.6 1345.9 39.6-12.7v-122.6zm38.3 108.1-65.4 73.9 35.7 31.9 31-12.5v-95.9z" fill=#fff><g id=g5595 fill=#fff><path id=path5589 d="m3307.6 474.4-61.9 172.3-62.2 194.1-128.2 151.6-72.6 160-41.8 211.3-82.5 103-275.6 209.3-196.7 205-150.6 102.8-104.5 119.8-78.7 27.9.8 146.9-14.7 167.4 16.5 128.8 6.5 141.8-1.7 119.1 63.7 110-18.6 201.2-65.1 315.1 15 48.3-85.7 90.7-70.7 95.7-146.3 77-122.9 35.9-113.5-61.1-107.6-3.7-211.6-132.1-97.4-46.1-291.9-14.4-162.4-10.9L483.4 3379l-118.5-112.2-398.8-23.8 28 28.9-1.7-.8-14.1 31.6-74-8.2-78.9 73.1-118.6-90.8-120.6-4.4-72.8-30.4-69 14.6-52 98.4-81.6 41 1.1 52.6 28 9.4-101.8 84.1-100.2 109.3-114.7 43.1 38.7 42.4-242.4 127.4-121.5 107.2-92.7 38.2-46.3-23.4-141.9-11.3-50.5 33.9 10.7 47.8-42.6 20.9-246.9-18.9-19.1-39.8-481.7 5.6v1322.4h5720.6z" class=g1_1><path id=path5591 d="m2593-115.2-143.1 95.5L2389-.5l-50.8 99-185.1 94.4-137.2 59.2-350.1 112.2-336.9 223.1-97.3 202.2-322.9 349.1-54.4 137-103.2 106.4-127.9 36-86.3-19.3-80.5 35.7-97.1 64.9-76.8-3.1-86.7 54.2-93-5.6-98.6 62.2-15.3 10.5-25.9 41.5-26-7.8-119.8 62.2-108-40-111.7-41.7-101.4-58.3-97.5-43-97.1 3.5-46-65.5-144.5-28.9-48.9-60.4-253.6-29.9-43.2-59.6-47.2 8.8-9.8-36.5 53.7-12.9 61.8-61.6 18.6-105.2 30.5-16 1.1-84.1 34-60.6-27.5-44.7 26.7-32.5 83.8 43.5 83.6-31.7 149.5-55.9-6.8-47.4 87.1-58.4 127.6-4.9 41.3-104.8 80.8-70.9 29-140.3s31.9-14.3 27.2-7.4c-4.8 6.9 3.6 40.7 3.6 40.7l13.4 49.5 65.8 1.1 44-58.8 38-4 69.2 9.7 54.2-61.4 96.1-74.3.9-69.4 4-34.9 58.3-47.3 57.7 10.9 47.6-39.4-3.2-68.2 37.6-24.7 42 5.3 23.6-34.3v-769.5H1193v528l160.9-7.3 4.6 24.6 2.2 33.8 46.5.8 73.6-48.5 163.9 43.5 62.9-26 102 32.3 76.8 69.3 88.3 4.9 146.6-23 242.1-17L2459-134l73.8 18.4 45.4-12.3z" class=g1_1><path id=path5593 d="m2539.1-30.7-79.4 28.8-11.6 43.5-48.3 29.6-1.1 21.4 66.4-15.5 60.1-43.5z" class=g1_1></path></path></path></g><g id=g5603 fill=#fff><path id=path5599 d="M-2418-802.8v2363.4l55.1-27.2 88 27.5 162.1-95.5 102.8-27.8 118.8-183.6 75.9-36 154.3 30.4 83.8-39.7 10.9-38.7 142.8-22.8 87 28.6 56.9 12.2 92.9-39.2-37.9-128.5 29.5-110.2 27-52.8 56.1-65.3 63.3 5.3 86.6-31.6 43 13.6 10.9-47.7 103.5-37.9-.2-44.9 43.5-22.9 118 14.8 67.2-38.2 14.9-45.5-10.8-37 59-75.2 60.1 11.6 8.8-139.3 60.3-7.2 155.4-68.1 77.9 19 11.3 37.6 50.3-6.1 30.4-77.1 40.9-108.6L90.7 77.3l6.6-69.9 63.8-17.2L209-59.4v-743.4z" class=g1_1><path id=path5601 d="m3093.3-43.8-230.4 25.1-33.4-45.7-169.4 20L2548 83.3l-133.7 120-129.6 7.3-163.1 91.9-60.7 1.3-466.2 248.8-49.8.7-33.1 34.8-112.9 61.2-149.8 197.4-156.9 213.8-45.9 8.5-123.4 252.2-196.5 162.1-139.6 8.4-97.1-19.5-165.2 86.1-162 48.2L-68 1769l-223.8 8.2-228-80.5-3.4-62.3-377.4-131.5-123.6 82.1-65.9 112.8s35.9 39.7 31.8 48.8c-4 9.1-155.1 89.7-155.1 89.7l-160 154.4-273.8 92.9-118.2-59.3-44.1-163-115.7 3-126.4 153.5 77.5 111.9-50.7 20.7-73.3-35.1-202.1 92.1s-127.4 162.4-118.6 161c8.7-1.5 113.3 296.9 113.3 296.9l209.2 92.7 162.4-9 339.4-18.9 386.6-90.1 75.9 57.3 337.3-19.8 74.2-128.8 175.7 50.5 33.6 76.5 412.6 150.7 299.8 213.9 228.2 35.6 167 232.2 267.2 67.4 157.5-22.8 200.3-123.4 248-176.8 91.4-211.4 210.9-79.2 46.5-111.3-13.4-85.2-15.8-91 90.9-263.6-3-47.9 270.2-267.1 72-187.6 225.5-257.2 16.3-183.1 110.4-236.5 135-159.3 120-256.3 1.2-160.8 95.9-295.8 87.3-63.4z" class=g1_1></path></path></g><path id=path5605 class=g1_1 d="m1591.5 2858.3 184.9-73.1 40.2 98.5-102.7 66.5-104.4 143.6s-53.2-18.1-52.3-26.7c.8-8.7 9.7-97.4 9.7-97.4l-14-19.2z" fill=#fff><path id=path5607 class=g1_1 d="M1984.1 2087s-25.2 9.3-29.4 12.3c-4.1 3-50.5 93.5-50.5 93.5l-19.2 197.7 21.3 24.4 52.1-79.6 28.1-114.3-19.2-53.5 8.1-37.9 18.1-7.9-2.1-36.2z" fill=#fff><path id=path5609 class=g1_1 d="m2014.3 2241.5-14.7-4.6-17.5 68.7-48.4 120.7-8.1 58.8 31 67.9s46.4 35.9 46.1 35.7 13.3-103.1 13.3-103.1l-9.8-77.4 7.5-131.2z" fill=#fff><path id=path5619 class=g1_1 d="m1300.4 3361.7-1.3-24.1-27.9-6.9-35 6.6-38.5-4.4-34.1-10.1-17.1 8 9.2 40.4 30.1 7.9 19.2 1 29.6 8.9s29.5-8.1 30.4-8.3c1-.3 12.3-14.2 12.3-14.2z" fill=#fff><path id=path5621 class=g1_1 d="M1178 3310.8c1.4-.4 39.7-12.2 39.7-12.2l51.2 1.1 8.1 11.1 15.6 2.8-1.8 8.9-32.2.7-34.9-2.4-6.5 4.1-40.6-8.2z" fill=#fff><path stroke=#010101 d="M1680.4 2147.1v3.8" stroke-linecap=round id=path5623 stroke-linejoin=round fill=none style="fill: none; stroke: #010101; stroke-width: 2.2916667; stroke-linecap: round; stroke-linejoin: round;" stroke-width=2.292><path id=path6353 class=g5_1 d="M1143 1443.6h-16c-1.3 0-1.5-.9-1.6-1.3v-2.5h19.3v2.5c0 .3-.3 1.3-1.7 1.3m-17.3-25.3h-.1.1c3.8-2.7 9.1-2.9 9.4-2.9.4 0 5.6.2 9.4 2.9h.1-.1c.1 0 .3.1.3.5 0 .7.2 2 .4 3.1-4.4-2.3-9.9-2.6-10.1-2.6h-.1c-.3 0-5.6.3-10 2.5.2-1.1.4-2.5.4-3 0-.4.2-.5.3-.5m-.8 19.5c-.1 0-.2-.1-.3-.1.3-.1.6-.2.8-.5l7.7-7v7.6zm-1.2-12.1c0-.5.9-1.2 1-1.3 3.9-2.6 9.8-3 10.3-3 .6 0 6.5.4 10.4 3 0 .1 1 .7 1 1.3l.8 7.1-10.3-9.4-.2-.2h-.1v-.1h-.1c-.1 0-.1-.1-.2-.1s-.1-.1-.2-.1h-.1q-.1 0-.1-.1h-1s-.1 0-.1.1h-.2l-.1.1h-.1c-.1 0-.1.1-.1.1h-.1l-.1.1h-.1c0 .1-.1.1-.1.2l-11 10zm21.4 12.1h-7.5v-7.6l7.6 6.9c.2.2.5.4.8.5-.3.1-.6.2-.9.2m4.4-2.6-1.1-9.7c0-.9-.4-1.6-.9-2.1 0-.1-.6-3.4-.7-4.8 0-1.3-.9-1.9-1.1-2.1-4.5-3-10.3-3.1-10.5-3.1h-.1c-.2 0-6.1.1-10.6 3.1-.2.2-1.1.8-1.2 2.1 0 .8-.4 3.4-.6 4.7-.6.5-1.1 1.2-1.1 2.3v-.1l-.9 9.7q-.1.1 0 .2c.1 1.2.9 3.3 2.7 4.1v2.9c0 1.3 1 3.3 3.6 3.3h16c2.7 0 3.7-2.1 3.8-3.2v-3c1.9-.8 2.6-2.9 2.7-4.1v-.2z" fill=#010101><path id=path6355 class=g5_1 d="M1759.1 2575.2h-16c-1.3 0-1.6-.9-1.6-1.3v-2.5h19.3v2.5c0 .3-.3 1.3-1.7 1.3m-17.4-25.3c3.9-2.7 9.2-2.9 9.5-2.9.4 0 5.6.2 9.4 2.9 0 0 .2.1.3.5 0 .7.2 2 .4 3.1-4.5-2.3-9.9-2.6-10.2-2.6s-5.6.3-10 2.5c.1-1.1.3-2.5.4-3 0-.4.2-.5.2-.5m-.7 19.5c-.1 0-.2-.1-.3-.1.2-.1.5-.2.8-.5l7.7-7v7.6zm-1.3-12.1v-.1c0-.4 1-1.1 1-1.2 3.9-2.6 9.8-3 10.4-3 .5 0 6.4.4 10.3 3 .1.1 1 .7 1 1.2v.1l.9 7.1-10.4-9.4c0-.1-.1-.1-.1-.2h-.1l-.1-.1c-.1 0-.1-.1-.2-.1h-.1s0-.1-.1-.1h-.2v-.1H1751q-.1 0-.1.1h-.2c-.1 0-.1.1-.2.1s-.1.1-.1.1h-.1c-.1 0-.1.1-.1.1h-.1c0 .1-.1.1-.1.2l-11 10zm21.5 12.1h-7.5v-7.6l7.6 6.9c.2.2.5.4.7.5-.2.1-.5.2-.8.2m4.4-2.6-1.1-9.7c0-.9-.4-1.6-.9-2.1 0-.1-.6-3.4-.7-4.8-.1-1.3-.9-1.9-1.2-2.1-4.4-3-10.2-3.1-10.5-3.1s-6.2.1-10.6 3.1c-.2.2-1.1.8-1.2 2.1 0 .8-.5 3.4-.7 4.7-.5.5-1 1.2-1 2.3v-.1l-1 9.7v.2c.2 1.2.9 3.3 2.7 4.1v2.9c.1 1.3 1.1 3.3 3.7 3.3h16c2.7 0 3.7-2.1 3.8-3.2v-3c1.9-.8 2.6-2.9 2.7-4.1v-.2z" fill=#010101><path id=path6357 class=g5_1 d="M1659.8 2636.9h-16c-1.3 0-1.5-.9-1.6-1.3v-2.5h19.3v2.4c0 .4-.3 1.4-1.7 1.4m-17.3-25.4h-.1.1c3.8-2.6 9.1-2.8 9.4-2.8.4 0 5.6.2 9.4 2.8h.1-.1c.1 0 .3.2.3.5 0 .8.2 2.1.4 3.2-4.4-2.4-9.9-2.6-10.1-2.6h-.1c-.3 0-5.6.2-10 2.5.2-1.2.4-2.5.4-3.1 0-.3.2-.5.3-.5m-.8 19.5h-.3c.3-.1.6-.3.8-.5l7.7-7.1v7.6zm-1.2-12v-.1c0-.4.9-1.2 1-1.2 3.9-2.7 9.8-3 10.3-3.1.6.1 6.5.4 10.4 3.1.1 0 1 .6 1 1.2v.1l.8 7.1-10.3-9.5c-.1 0-.1-.1-.2-.1l-.1-.1h-.1q-.1-.1-.2-.1v-.1h-.2c-.1 0-.1-.1-.1-.1h-.5v-.1h-.2c-.1.1-.2.1-.2.1H1651.6s-.1 0-.1.1h-.2l-.1.1h-.1c0 .1-.1.1-.1.1s-.1 0-.1.1c-.1 0-.2.1-.2.1l-11 10.1zm21.4 12h-7.5v-7.6l7.6 7c.2.2.5.4.8.5-.3.1-.6.1-.9.1m4.4-2.6-1.1-9.6c0-.9-.4-1.6-.9-2.1v-.1s-.6-3.4-.7-4.7c0-1.3-.9-1.9-1.1-2.1-4.5-3-10.3-3.2-10.5-3.2h-.1c-.2 0-6.1.2-10.6 3.2-.2.2-1.1.8-1.2 2.1 0 .7-.4 3.4-.6 4.6-.6.5-1.1 1.3-1.1 2.4v-.1l-.9 9.7c-.1 0 0 .1 0 .2.1 1.2.9 3.3 2.7 4.1v2.9c0 1.3 1 3.3 3.6 3.3h16c2.7 0 3.7-2.2 3.8-3.3v-3c1.9-.8 2.6-2.8 2.7-4v-.3z" fill=#010101><path id=path6359 class=g5_1 d="M819.9 2725.5H804c-1.4 0-1.6-.9-1.6-1.3v-2.5h19.3v2.5c-.1.3-.4 1.3-1.8 1.3m-17.3-25.3c3.8-2.6 9.1-2.8 9.5-2.9.4.1 5.5.3 9.4 2.9 0 0 .2.2.2.5.1.8.3 2.1.4 3.1-4.4-2.3-9.8-2.6-10.1-2.6h-.1c-.2 0-5.6.3-10 2.6.2-1.2.4-2.6.4-3.1.1-.3.3-.5.3-.5m-.7 19.5c-.1 0-.3 0-.4-.1.3-.1.6-.2.8-.4l7.8-7.1v7.6zm-1.3-12.1c0-.5.9-1.2 1-1.3 3.9-2.6 9.8-3 10.4-3 .5 0 6.4.4 10.3 3 .1.1 1 .7 1 1.3v.1l.8 7-10.3-9.4c0-.1-.1-.1-.1-.1l-.1-.1s-.1 0-.1-.1h-.1l-.1-.1h-.1s-.1 0-.1-.1H812.8c0-.1-.1-.1-.1-.1h-.7q-.1 0-.2.1h-.2c-.1 0-.1.1-.2.1h-.1s0 .1-.1.1q-.1.1-.2.1l-.2.2-11 10zm21.4 12.1h-7.5v-7.6l7.7 7c.2.2.4.3.7.4-.2.1-.5.2-.9.2m4.5-2.6-1.1-9.7c-.1-.9-.5-1.6-.9-2.1 0-.1-.6-3.4-.7-4.8-.1-1.2-1-1.9-1.2-2-4.4-3.1-10.2-3.2-10.5-3.2s-6.2.1-10.6 3.2c-.3.1-1.1.8-1.2 2-.1.8-.5 3.4-.7 4.7-.5.5-1 1.2-1 2.3v-.1l-1 9.7v.2c.2 1.3.9 3.3 2.7 4.1v2.9c.1 1.3 1.1 3.3 3.7 3.3h15.9c2.8 0 3.7-2.1 3.9-3.2v-3c1.8-.8 2.6-2.9 2.7-4.1v-.2z" fill=#010101><path id=path6361 class=g5_1 d="M949.7 1859.7h-16c-1.3 0-1.5-.9-1.6-1.3v-2.5h19.4v2.5c-.1.3-.4 1.3-1.8 1.3m-17.3-25.3h-.1.1c3.8-2.7 9.1-2.9 9.5-2.9.3 0 5.5.2 9.3 2.9h.1-.1c.1 0 .3.1.3.5.1.7.3 2 .4 3.1-4.4-2.3-9.9-2.6-10.1-2.6h-.1c-.3 0-5.6.3-10 2.5.2-1.1.4-2.5.4-3 0-.4.2-.5.3-.5m-.7 19.5c-.2 0-.3-.1-.4-.1.3-.1.6-.2.8-.5l7.8-7v7.6zm-1.3-12.1v-.1c0-.4.9-1.1 1-1.2 3.9-2.6 9.8-3 10.3-3 .6 0 6.5.4 10.4 3 .1.1 1 .7 1 1.2v.1l.8 7.1-10.3-9.4-.2-.2c-.1 0-.1-.1-.1-.1h-.1l-.1-.1h-.1l-.1-.1h-.2l-.1-.1h-1l-.1.1h-.2l-.1.1h-.1s-.1 0-.1.1h-.1l-.1.1q-.1.1-.2.1v.1l-11 10zm21.4 12.1h-7.5v-7.6l7.6 6.9c.3.2.5.4.8.5-.3.1-.6.2-.9.2m4.5-2.6-1.1-9.7c-.1-.9-.5-1.6-.9-2.1-.1-.1-.6-3.4-.7-4.8-.1-1.3-1-1.9-1.2-2.1-4.5-3-10.3-3.1-10.5-3.1h-.1c-.2 0-6.1.1-10.6 3.1-.2.2-1.1.8-1.1 2.1-.1.8-.5 3.4-.7 4.7-.6.5-1.1 1.2-1.1 2.3v-.1l-.9 9.7v.2c.1 1.2.9 3.3 2.7 4.1v2.9c0 1.3 1.1 3.3 3.6 3.3h16c2.7 0 3.7-2.1 3.8-3.2v-3c1.9-.8 2.6-2.9 2.8-4.1v-.2z" fill=#010101><path id=path6363 class=g5_1 d="M864.8 1200.2h-16c-1.3 0-1.6-.9-1.6-1.3v-2.5h19.3v2.4c0 .4-.3 1.4-1.7 1.4m-17.4-25.4v.1-.1c3.8-2.6 9.1-2.8 9.5-2.8s5.6.2 9.4 2.8v.1-.1c0 .1.2.2.2.5.1.8.3 2.1.5 3.2-4.5-2.4-9.9-2.6-10.2-2.6h-.1c-.2 0-5.5.2-9.9 2.5.1-1.2.3-2.5.4-3.1 0-.3.2-.4.2-.5m-.7 19.5h-.4c.3-.1.6-.3.9-.5l7.7-7.1v7.6zm-1.3-12v-.1c0-.4 1-1.2 1-1.2 3.9-2.6 9.8-3 10.4-3 .5 0 6.4.4 10.3 3 .1 0 1 .7 1 1.2v.1l.9 7.1-10.4-9.5s-.1 0-.1-.1h-.1s0-.1-.1-.1q-.1-.1-.2-.1h-.1q0-.1-.1-.1h-.1s0-.1-.1-.1H856.6c-.1 0-.1.1-.1.1h-.1q-.1 0-.2.1h-.2v.1q-.1 0-.2.1l-.1.1h-.1l-10.9 10.1zm21.5 12h-7.5v-7.6l7.6 7c.2.2.5.4.7.5-.2.1-.5.1-.8.1m4.4-2.6-1.1-9.6c-.1-.9-.4-1.6-.9-2.1v-.1s-.6-3.3-.7-4.7c-.1-1.3-.9-1.9-1.2-2.1-4.4-3-10.2-3.2-10.5-3.2s-6.2.2-10.6 3.2c-.2.2-1.1.8-1.2 2.1 0 .7-.5 3.4-.7 4.6-.5.5-1 1.3-1 2.4v-.1l-1 9.7v.2c.2 1.2.9 3.3 2.7 4.1v2.9c.1 1.3 1.1 3.3 3.7 3.3h16c2.7 0 3.7-2.1 3.8-3.3v-2.9c1.8-.9 2.6-2.9 2.7-4.1v-.3z" fill=#010101><path id=path6365 class=g1_1 d="M1101.8 1784.9H896.9v-35.8h204.9z" fill=#fff><path id=path6367 class=g1_1 d="M1182.7 1371.8H936.4v-35.7h246.3z" fill=#fff><path id=path6369 class=g1_1 d="M1110.8 1447.3h-100.3v-34.9h100.3z" fill=#fff><path id=path6371 class=g1_1 d="M1047.6 2166.2h-178v-37.1h178z" fill=#fff><path id=path6373 class=g1_1 d="M1060 2289.8H900.2v-74H1060z" fill=#fff><path id=path6375 class=g1_1 d="M1057.6 2010.7H930.9v-34.1h126.7z" fill=#fff><path id=path6377 class=g1_1 d="M679 2425.8H496.3v-36.4H679z" fill=#fff><path id=path6379 class=g1_1 d="M754.6 2501H414.9v-35.9h339.7z" fill=#fff><path id=path6381 class=g1_1 d="M1412.4 2381.7h-105.1v-34.3h105.1z" fill=#fff><path id=path6383 class=g1_1 d="M817.2 2602.5H550.7v-72.3h266.5z" fill=#fff><path id=path6385 class=g1_1 d="M1153.7 1728.1H783.3v-73.2h370.4z" fill=#fff><path stroke=#00a54f d="m997 3133.6 151.9-151.7 76.3 76.2 151.9-151.9-228-227.7 759-759.1-75.9-76.2 227.4-227.3-75.9-75.9 303.3-303.3" stroke-linecap=round id=path6387 stroke-linejoin=round fill=none style="fill: none; stroke: #00a54f; stroke-width: 44.724167; stroke-linecap: round; stroke-linejoin: round;" stroke-width=44.724><a href="https://veronneau.org/media/blog/2022-01-21/graphs/Beaudry.png" xlink="http://www.w3.org/1999/xlink" id=a17629><path id=path6389 class=g1_1 d="M1787.1 2040.5c-5.3-5.2-13.8-5.2-19 0-5.2 5.3-5.2 13.8 0 19s13.7 5.2 19 0c5.2-5.2 5.2-13.7 0-19z" fill=#fff><a href="https://veronneau.org/media/blog/2022-01-21/graphs/Honoré.Beaugrand.png" xlink="http://www.w3.org/1999/xlink" id=a17662><path id=path6391 class=g1_1 d="M2298.6 1225.2c-6.3-6.3-16.5-6.3-22.7 0-6.3 6.3-6.3 16.5 0 22.8 6.2 6.3 16.4 6.3 22.7 0s6.3-16.5 0-22.8z" fill=#fff><a href="https://veronneau.org/media/blog/2022-01-21/graphs/Angrignon.png" xlink="http://www.w3.org/1999/xlink" id=a17590><path id=path6393 class=g1_1 d="M1008.6 3122.1c-6.3-6.2-16.5-6.2-22.8 0-6.3 6.3-6.3 16.5 0 22.8s16.5 6.3 22.8 0 6.3-16.5 0-22.8z" fill=#fff><a href="https://veronneau.org/media/blog/2022-01-21/graphs/Saint.Laurent.png" xlink="http://www.w3.org/1999/xlink" id=a2545><path id=path6395 class=g1_1 d="M1614.4 2213.1c-5.2-5.3-13.7-5.3-18.9 0-5.3 5.2-5.3 13.7 0 18.9 5.2 5.3 13.7 5.3 18.9 0 5.3-5.2 5.3-13.7 0-18.9z" fill=#fff><a href="https://veronneau.org/media/blog/2022-01-21/graphs/Place.des.Arts.png" xlink="http://www.w3.org/1999/xlink" id=a17623><path id=path6397 class=g1_1 d="M1538.1 2289.4c-5.3-5.2-13.8-5.2-19 0-5.3 5.3-5.3 13.8 0 19 5.2 5.3 13.7 5.3 19 0 5.2-5.2 5.2-13.7 0-19z" fill=#fff><a href="https://veronneau.org/media/blog/2022-01-21/graphs/McGill.png" xlink="http://www.w3.org/1999/xlink" id=a17620><path id=path6399 class=g1_1 d="M1462.4 2365.1c-5.2-5.3-13.7-5.3-19 0-5.2 5.2-5.2 13.7 0 19 5.3 5.2 13.8 5.2 19 0 5.2-5.3 5.2-13.8 0-19z" fill=#fff><a href="https://veronneau.org/media/blog/2022-01-21/graphs/Peel.png" xlink="http://www.w3.org/1999/xlink" id=a17617><path id=path6401 class=g1_1 d="M1386.5 2441c-5.2-5.3-13.7-5.3-19 0-5.2 5.2-5.2 13.7 0 18.9 5.3 5.3 13.8 5.3 19 0 5.3-5.2 5.3-13.7 0-18.9z" fill=#fff><a href="https://veronneau.org/media/blog/2022-01-21/graphs/Guy.Concordia.png" xlink="http://www.w3.org/1999/xlink" id=a17614><path id=path6403 class=g1_1 d="M1310.6 2517.4c-5.3-5.3-13.8-5.3-19 0-5.3 5.2-5.3 13.7 0 18.9 5.2 5.3 13.7 5.3 19 0 5.2-5.2 5.2-13.7 0-18.9z" fill=#fff><a href="https://veronneau.org/media/blog/2022-01-21/graphs/Atwater.png" xlink="http://www.w3.org/1999/xlink" id=a17611><path id=path6405 class=g1_1 d="M1234.5 2593.4c-5.3-5.2-13.8-5.2-19 0-5.2 5.3-5.2 13.8 0 19 5.2 5.3 13.7 5.3 19 0 5.2-5.2 5.2-13.7 0-19z" fill=#fff><a href="https://veronneau.org/media/blog/2022-01-21/graphs/Charlevoix.png" xlink="http://www.w3.org/1999/xlink" id=a17608><path id=path6407 class=g1_1 d="M1310.6 2821.2c-5.3-5.2-13.8-5.2-19 0-5.3 5.3-5.3 13.8 0 19 5.2 5.2 13.7 5.2 19 0 5.2-5.2 5.2-13.7 0-19z" fill=#fff><a href="https://veronneau.org/media/blog/2022-01-21/graphs/LaSalle.png" xlink="http://www.w3.org/1999/xlink" id=a17605><path id=path6409 class=g1_1 d="M1374.5 2892.8c-7.4 0-13.4 6-13.4 13.4s6 13.4 13.4 13.4 13.4-6 13.4-13.4-6-13.4-13.4-13.4z" fill=#fff><a href="https://veronneau.org/media/blog/2022-01-21/graphs/De.l.Église.png" xlink="http://www.w3.org/1999/xlink" id=a17602><path id=path6411 class=g1_1 d="M1310.3 2972.6c-5.3-5.3-13.8-5.3-19 0-5.3 5.2-5.3 13.7 0 18.9 5.2 5.3 13.7 5.3 19 0 5.2-5.2 5.2-13.7 0-18.9z" fill=#fff><a href="https://veronneau.org/media/blog/2022-01-21/graphs/Verdun.png" xlink="http://www.w3.org/1999/xlink" id=a17599><path id=path6413 class=g1_1 d="M1234.7 3045.6c-5.3-5.2-13.8-5.2-19 0-5.3 5.3-5.3 13.8 0 19 5.2 5.3 13.7 5.3 19 0 5.2-5.2 5.2-13.7 0-19z" fill=#fff><a href="https://veronneau.org/media/blog/2022-01-21/graphs/Jolicoeur.png" xlink="http://www.w3.org/1999/xlink" id=a17596><path id=path6415 class=g1_1 d="M1158.4 2976.5c-5.3-5.2-13.8-5.2-19 0s-5.2 13.7 0 19c5.2 5.2 13.7 5.2 19 0 5.2-5.3 5.2-13.8 0-19z" fill=#fff><a href="https://veronneau.org/media/blog/2022-01-21/graphs/Monk.png" xlink="http://www.w3.org/1999/xlink" id=a17593><path id=path6417 class=g1_1 d="M1082.3 3048.4c-5.2-5.2-13.7-5.2-18.9 0-5.3 5.3-5.3 13.8 0 19 5.2 5.3 13.7 5.3 18.9 0 5.3-5.2 5.3-13.7 0-19z" fill=#fff><a href="https://veronneau.org/media/blog/2022-01-21/graphs/Radisson.png" xlink="http://www.w3.org/1999/xlink" id=a17659><path id=path6419 class=g1_1 d="M2221.1 1302.6c-5.2-5.2-13.7-5.2-19 0-5.2 5.2-5.2 13.7 0 19 5.3 5.2 13.8 5.2 19 0 5.3-5.3 5.3-13.8 0-19z" fill=#fff><a href="https://veronneau.org/media/blog/2022-01-21/graphs/Langelier.png" xlink="http://www.w3.org/1999/xlink" id=a17656><path id=path6421 class=g1_1 d="M2144.4 1379c-5.2-5.3-13.7-5.3-19 0-5.2 5.2-5.2 13.7 0 18.9 5.3 5.3 13.8 5.3 19 0 5.3-5.2 5.3-13.7 0-18.9z" fill=#fff><a href="https://veronneau.org/media/blog/2022-01-21/graphs/Cadillac.png" xlink="http://www.w3.org/1999/xlink" id=a17653><path id=path6423 class=g1_1 d="M2068.5 1454.9c-5.2-5.3-13.7-5.3-18.9 0-5.3 5.2-5.3 13.7 0 18.9 5.2 5.3 13.7 5.3 18.9 0 5.3-5.2 5.3-13.7 0-18.9z" fill=#fff><a href="https://veronneau.org/media/blog/2022-01-21/graphs/Assomption.png" xlink="http://www.w3.org/1999/xlink" id=a17650><path id=path6425 class=g1_1 d="M1997.8 1530.6c-5.2-5.3-13.7-5.3-19 0-5.2 5.2-5.2 13.7 0 19 5.3 5.2 13.8 5.2 19 0 5.3-5.3 5.3-13.8 0-19z" fill=#fff><a href="https://veronneau.org/media/blog/2022-01-21/graphs/Viau.png" xlink="http://www.w3.org/1999/xlink" id=a17647><path id=path6427 class=g1_1 d="M2065.1 1606c-5.3-5.3-13.8-5.3-19 0-5.2 5.2-5.2 13.7 0 19 5.2 5.2 13.7 5.2 19 0 5.2-5.3 5.2-13.8 0-19z" fill=#fff><a href="https://veronneau.org/media/blog/2022-01-21/graphs/Pie.IX.png" xlink="http://www.w3.org/1999/xlink" id=a17644><path id=path6429 class=g1_1 d="M1993.1 1682.9c-5.2-5.3-13.7-5.3-19 0-5.2 5.2-5.2 13.7 0 19 5.3 5.2 13.8 5.2 19 0 5.2-5.3 5.2-13.8 0-19z" fill=#fff><a href="https://veronneau.org/media/blog/2022-01-21/graphs/Joliette.png" xlink="http://www.w3.org/1999/xlink" id=a17641><path id=path6431 class=g1_1 d="M1917.4 1758c-5.2-5.2-13.7-5.2-19 0-5.2 5.3-5.2 13.7 0 19 5.3 5.2 13.8 5.2 19 0 5.2-5.3 5.2-13.7 0-19z" fill=#fff><a href="https://veronneau.org/media/blog/2022-01-21/graphs/Préfontaine.png" xlink="http://www.w3.org/1999/xlink" id=a17638><path id=path6433 class=g1_1 d="M1846.6 1833.8c-5.2-5.2-13.7-5.2-18.9 0-5.3 5.3-5.3 13.8 0 19 5.2 5.2 13.7 5.2 18.9 0 5.3-5.2 5.3-13.7 0-19z" fill=#fff><a href="https://veronneau.org/media/blog/2022-01-21/graphs/Frontenac.png" xlink="http://www.w3.org/1999/xlink" id=a17635><path id=path6435 class=g1_1 d="M1912.7 1909.9c-5.2-5.3-13.7-5.3-18.9 0-5.3 5.2-5.3 13.7 0 19 5.2 5.2 13.7 5.2 18.9 0 5.3-5.3 5.3-13.8 0-19z" fill=#fff><a href="https://veronneau.org/media/blog/2022-01-21/graphs/Papineau.png" xlink="http://www.w3.org/1999/xlink" id=a17632><path id=path6437 class=g1_1 d="M1853.9 1973.7c-5.3-5.2-13.8-5.2-19 0-5.3 5.3-5.3 13.8 0 19 5.2 5.2 13.7 5.2 19 0 5.2-5.2 5.2-13.7 0-19z" fill=#fff><path stroke=#f58220 d="m391.9 2073.9 757 757 607-606.9-986.8-986.8H320.9" stroke-linecap=round id=path6439 stroke-linejoin=round fill=none style="fill: none; stroke: #f58220; stroke-width: 44.724167; stroke-linecap: round; stroke-linejoin: round;" stroke-width=44.724><a href="https://veronneau.org/media/blog/2022-01-21/graphs/Montmorency.png" xlink="http://www.w3.org/1999/xlink" id=a17587><path id=path6441 class=g1_1 d="M332.2 1225.7c-6.2-6.3-16.4-6.3-22.7 0s-6.3 16.5 0 22.8 16.5 6.3 22.7 0c6.3-6.3 6.3-16.5 0-22.8z" fill=#fff><a href="https://veronneau.org/media/blog/2022-01-21/graphs/Champ.de.Mars.png" xlink="http://www.w3.org/1999/xlink" id=a17548><path id=path6443 class=g1_1 d="M1689.4 2290.5c-5.2-5.3-13.7-5.3-19 0-5.2 5.2-5.2 13.7 0 18.9 5.3 5.3 13.8 5.3 19 0 5.2-5.2 5.2-13.7 0-18.9z" fill=#fff><a href="https://veronneau.org/media/blog/2022-01-21/graphs/Jarry.png" xlink="http://www.w3.org/1999/xlink" id=a17569><path id=path6445 class=g1_1 d="M1158.5 1607.3c-5.2-5.3-13.7-5.3-19 0-5.2 5.2-5.2 13.7 0 18.9 5.3 5.3 13.8 5.3 19 0 5.2-5.2 5.2-13.7 0-18.9z" fill=#fff><a href="https://veronneau.org/media/blog/2022-01-21/graphs/Crémazie.png" xlink="http://www.w3.org/1999/xlink" id=a17572><path id=path6447 class=g1_1 d="M1082.5 1531.3c-5.2-5.3-13.7-5.3-19 0-5.2 5.2-5.2 13.7 0 18.9 5.3 5.3 13.8 5.3 19 0 5.2-5.2 5.2-13.7 0-18.9z" fill=#fff><path id=path6449 class=g1_1 d="M1006.7 1455.5c-5.2-5.3-13.7-5.3-19 0-5.2 5.2-5.2 13.7 0 18.9 5.3 5.3 13.8 5.3 19 0 5.2-5.2 5.2-13.7 0-18.9z" fill=#fff><a href="https://veronneau.org/media/blog/2022-01-21/graphs/Henri.Bourassa.png" xlink="http://www.w3.org/1999/xlink" id=a17578><path id=path6451 class=g1_1 d="M931.3 1380.1c-5.2-5.3-13.7-5.3-19 0-5.2 5.2-5.2 13.7 0 19 5.3 5.2 13.8 5.2 19 0 5.3-5.3 5.3-13.8 0-19z" fill=#fff><a href="https://veronneau.org/media/blog/2022-01-21/graphs/Cartier.png" xlink="http://www.w3.org/1999/xlink" id=a17581><path id=path6453 class=g1_1 d="M778.8 1227.7c-5.3-5.3-13.8-5.3-19 0-5.3 5.2-5.3 13.7 0 19 5.2 5.2 13.7 5.2 19 0 5.2-5.3 5.2-13.8 0-19z" fill=#fff><path id=path6455 class=g1_1 d="M551.9 1227.7c-5.3-5.3-13.8-5.3-19 0-5.3 5.2-5.3 13.7 0 19 5.2 5.2 13.7 5.2 19 0 5.2-5.3 5.2-13.8 0-19z" fill=#fff><a href="https://veronneau.org/media/blog/2022-01-21/graphs/Place.d.Armes.png" xlink="http://www.w3.org/1999/xlink" id=a17545><path id=path6457 class=g1_1 d="M1614.2 2366c-5.3-5.3-13.8-5.3-19 0-5.2 5.2-5.2 13.7 0 18.9 5.2 5.3 13.7 5.3 19 0 5.2-5.2 5.2-13.7 0-18.9z" fill=#fff><a href="https://veronneau.org/media/blog/2022-01-21/graphs/Square.Victoria.png" xlink="http://www.w3.org/1999/xlink" id=a17542><path id=path6459 class=g1_1 d="M1538.3 2441.9c-5.3-5.3-13.8-5.3-19 0-5.3 5.2-5.3 13.7 0 18.9 5.2 5.3 13.7 5.3 19 0 5.2-5.2 5.2-13.7 0-18.9z" fill=#fff><path id=path6461 class=g1_1 d="M1462.4 2517.7c-5.2-5.3-13.7-5.3-18.9 0-5.3 5.2-5.3 13.7 0 19 5.2 5.2 13.7 5.2 18.9 0 5.3-5.3 5.3-13.8 0-19z" fill=#fff><path id=path6463 class=g1_1 d="M1385.9 2594.3c-5.3-5.3-13.8-5.3-19 0-5.3 5.2-5.3 13.7 0 19 5.2 5.2 13.7 5.2 19 0 5.2-5.3 5.2-13.8 0-19z" fill=#fff><a href="https://veronneau.org/media/blog/2022-01-21/graphs/Georges.Vanier.png" xlink="http://www.w3.org/1999/xlink" id=a17533><path id=path6465 class=g1_1 d="M1310.2 2669.9c-5.2-5.2-13.7-5.2-19 0-5.2 5.3-5.2 13.8 0 19 5.3 5.3 13.8 5.3 19 0 5.2-5.2 5.2-13.7 0-19z" fill=#fff><a href="https://veronneau.org/media/blog/2022-01-21/graphs/Côte.Vertu.png" xlink="http://www.w3.org/1999/xlink" id=a17503><path id=path6467 class=g1_1 d="M402.7 2061.5c-6.3-6.3-16.5-6.3-22.8 0s-6.3 16.5 0 22.8 16.5 6.3 22.8 0 6.3-16.5 0-22.8z" fill=#fff><a href="https://veronneau.org/media/blog/2022-01-21/graphs/Place.Saint.Henri.png" xlink="http://www.w3.org/1999/xlink" id=a17527><path id=path6469 class=g1_1 d="M1082.9 2745.8c-5.2-5.2-13.7-5.2-18.9 0-5.3 5.3-5.3 13.8 0 19 5.2 5.2 13.7 5.2 18.9 0 5.3-5.2 5.3-13.7 0-19z" fill=#fff><path id=path6471 class=g1_1 d="M1006.8 2669.9c-5.2-5.2-13.7-5.2-19 0-5.2 5.3-5.2 13.8 0 19 5.3 5.3 13.8 5.3 19 0 5.2-5.2 5.2-13.7 0-19z" fill=#fff><a href="https://veronneau.org/media/blog/2022-01-21/graphs/Villa.Maria.png" xlink="http://www.w3.org/1999/xlink" id=a17521><path id=path6473 class=g1_1 d="M930.8 2593.8c-5.2-5.2-13.7-5.2-18.9 0-5.3 5.3-5.3 13.8 0 19 5.2 5.2 13.7 5.2 18.9 0 5.3-5.2 5.3-13.7 0-19z" fill=#fff><a href="https://veronneau.org/media/blog/2022-01-21/graphs/Côte.Sainte.Catherine.png" xlink="http://www.w3.org/1999/xlink" id=a17518><path id=path6475 class=g1_1 d="M778.9 2441.9c-5.2-5.2-13.7-5.2-18.9 0-5.3 5.3-5.3 13.8 0 19 5.2 5.2 13.7 5.2 18.9 0 5.3-5.2 5.3-13.7 0-19z" fill=#fff><a href="https://veronneau.org/media/blog/2022-01-21/graphs/Plamondon.png" xlink="http://www.w3.org/1999/xlink" id=a17515><path id=path6477 class=g1_1 d="M703.3 2366.3c-5.3-5.3-13.8-5.3-19 0-5.2 5.2-5.2 13.7 0 18.9 5.2 5.3 13.7 5.3 19 0 5.2-5.2 5.2-13.7 0-18.9z" fill=#fff><a href="https://veronneau.org/media/blog/2022-01-21/graphs/Namur.png" xlink="http://www.w3.org/1999/xlink" id=a17512><path id=path6479 class=g1_1 d="M627 2289.9c-5.3-5.2-13.8-5.2-19 0-5.3 5.3-5.3 13.8 0 19 5.2 5.3 13.7 5.3 19 0 5.2-5.2 5.2-13.7 0-19z" fill=#fff><a href="https://veronneau.org/media/blog/2022-01-21/graphs/De.la.Savane.png" xlink="http://www.w3.org/1999/xlink" id=a17509><path id=path6481 class=g1_1 d="M551.5 2214.5c-5.3-5.3-13.7-5.3-19 0-5.2 5.2-5.2 13.7 0 19 5.3 5.2 13.7 5.2 19 0 5.2-5.3 5.2-13.8 0-19z" fill=#fff><a href="https://veronneau.org/media/blog/2022-01-21/graphs/Du.Collège.png" xlink="http://www.w3.org/1999/xlink" id=a17506><path id=path6483 class=g1_1 d="M475.2 2138.3c-5.2-5.3-13.7-5.3-18.9 0-5.3 5.2-5.3 13.7 0 18.9 5.2 5.3 13.7 5.3 18.9 0 5.3-5.2 5.3-13.7 0-18.9z" fill=#fff><a href="https://veronneau.org/media/blog/2022-01-21/graphs/Sherbrooke.png" xlink="http://www.w3.org/1999/xlink" id=a17554><path id=path6485 class=g1_1 d="M1588 2037.2c-5.3-5.2-13.7-5.2-19 0-5.2 5.3-5.2 13.8 0 19 5.3 5.3 13.7 5.3 19 0 5.2-5.2 5.2-13.7 0-19z" fill=#fff><a href="https://veronneau.org/media/blog/2022-01-21/graphs/Mont.Royal.png" xlink="http://www.w3.org/1999/xlink" id=a17557><path id=path6487 class=g1_1 d="M1518.7 1967.4c-5.3-5.2-13.8-5.2-19 0-5.2 5.3-5.2 13.8 0 19 5.2 5.3 13.7 5.3 19 0 5.2-5.2 5.2-13.7 0-19z" fill=#fff><a href="https://veronneau.org/media/blog/2022-01-21/graphs/Laurier.png" xlink="http://www.w3.org/1999/xlink" id=a17560><path id=path6489 class=g1_1 d="M1449.1 1897.9c-5.2-5.2-13.7-5.2-18.9 0-5.3 5.2-5.3 13.7 0 19 5.2 5.2 13.7 5.2 18.9 0 5.3-5.3 5.3-13.8 0-19z" fill=#fff><a href="https://veronneau.org/media/blog/2022-01-21/graphs/Rosemont.png" xlink="http://www.w3.org/1999/xlink" id=a17563><path id=path6491 class=g1_1 d="M1379.6 1828.4c-5.3-5.3-13.7-5.3-19 0-5.2 5.2-5.2 13.7 0 18.9 5.3 5.3 13.7 5.3 19 0 5.2-5.2 5.2-13.7 0-18.9z" fill=#fff><a href="https://veronneau.org/media/blog/2022-01-21/graphs/Beaubien.png" xlink="http://www.w3.org/1999/xlink" id=a17566><path id=path6493 class=g1_1 d="M1310 1758.8c-5.2-5.2-13.7-5.2-18.9 0-5.3 5.3-5.3 13.7 0 19 5.2 5.2 13.7 5.2 18.9 0 5.3-5.3 5.3-13.7 0-19z" fill=#fff><path stroke=#0072bc d="m845.3 2526.5 227.2-227.2.1-300.3.1-153.9 380.4-381.1" stroke-linecap=round id=path6495 stroke-linejoin=round fill=none style="fill: none; stroke: #0072bc; stroke-width: 44.724167; stroke-linecap: round; stroke-linejoin: round;" stroke-width=44.724><a href="https://veronneau.org/media/blog/2022-01-21/graphs/Saint.Michel.png" xlink="http://www.w3.org/1999/xlink" id=a14141><path id=path6497 class=g1_1 d="M1464.4 1452.5c-6.3-6.3-16.5-6.3-22.8 0s-6.3 16.5 0 22.8 16.5 6.3 22.8 0 6.3-16.5 0-22.8z" fill=#fff><path id=path6499 class=g1_1 d="M856.7 2515.1c-6.3-6.3-16.4-6.3-22.7 0s-6.3 16.5 0 22.8c6.3 6.2 16.4 6.2 22.7 0 6.3-6.3 6.3-16.5 0-22.8z" fill=#fff><path stroke=#010101 d="M856.7 2515.1c-6.3-6.3-16.4-6.3-22.7 0s-6.3 16.5 0 22.8c6.3 6.2 16.4 6.2 22.7 0 6.3-6.3 6.3-16.5 0-22.8z" stroke-linecap=round class=g13_1 stroke-linejoin=round fill=none id=path6501 stroke-width=4.583><path id=path6503 class=g1_1 d="M1236.6 1680.9c-6.3-6.3-16.5-6.3-22.7 0-6.3 6.3-6.3 16.5 0 22.8 6.2 6.3 16.4 6.3 22.7 0s6.3-16.5 0-22.8z" fill=#fff><path stroke=#010101 d="M1236.6 1680.9c-6.3-6.3-16.5-6.3-22.7 0-6.3 6.3-6.3 16.5 0 22.8 6.2 6.3 16.4 6.3 22.7 0s6.3-16.5 0-22.8z" stroke-linecap=round class=g13_1 stroke-linejoin=round fill=none id=path6505 stroke-width=4.583><a href="https://veronneau.org/media/blog/2022-01-21/graphs/Fabre.png" xlink="http://www.w3.org/1999/xlink" id=a14135><path id=path6507 class=g1_1 d="M1310 1606.2c-5.2-5.2-13.7-5.2-18.9 0-5.3 5.2-5.3 13.7 0 19 5.2 5.2 13.7 5.2 18.9 0 5.3-5.3 5.3-13.8 0-19z" fill=#fff><a href="https://veronneau.org/media/blog/2022-01-21/graphs/De.Castelnau.png" xlink="http://www.w3.org/1999/xlink" id=a14129><path id=path6509 class=g1_1 d="M1159.1 1758c-5.2-5.3-13.7-5.3-18.9 0-5.3 5.2-5.3 13.7 0 19 5.2 5.2 13.7 5.2 18.9 0 5.3-5.3 5.3-13.8 0-19z" fill=#fff><a href="https://veronneau.org/media/blog/2022-01-21/graphs/Côte.des.Neiges.png" xlink="http://www.w3.org/1999/xlink" id=a14114><path id=path6511 class=g1_1 d="M930.8 2441.8c-5.2-5.3-13.7-5.3-18.9 0-5.3 5.2-5.3 13.7 0 18.9 5.2 5.3 13.7 5.3 18.9 0 5.3-5.2 5.3-13.7 0-18.9z" fill=#fff><a href="https://veronneau.org/media/blog/2022-01-21/graphs/Université.de.Montréal.png" xlink="http://www.w3.org/1999/xlink" id=a14117><path id=path6513 class=g1_1 d="M1006.5 2364.7c-5.2-5.3-13.7-5.3-18.9 0-5.3 5.2-5.3 13.7 0 19 5.2 5.2 13.7 5.2 18.9 0 5.3-5.3 5.3-13.8 0-19z" fill=#fff><a href="https://veronneau.org/media/blog/2022-01-21/graphs/Édouard.Montpetit.png" xlink="http://www.w3.org/1999/xlink" id=a14120><path id=path6515 class=g1_1 d="M1080.5 2289.4c-5.3-5.2-13.7-5.2-19 0-5.2 5.2-5.2 13.7 0 19 5.3 5.2 13.7 5.2 19 0 5.2-5.3 5.2-13.8 0-19z" fill=#fff><a href="https://veronneau.org/media/blog/2022-01-21/graphs/Outremont.png" xlink="http://www.w3.org/1999/xlink" id=a14123><path id=path6517 class=g1_1 d="M1082.5 2138c-5.3-5.2-13.8-5.2-19 0-5.2 5.3-5.2 13.8 0 19s13.7 5.2 19 0c5.2-5.2 5.2-13.7 0-19z" fill=#fff><a href="https://veronneau.org/media/blog/2022-01-21/graphs/Acadie.png" xlink="http://www.w3.org/1999/xlink" id=a14108><path id=path6519 class=g1_1 d="M1082.5 1986.1c-5.3-5.2-13.8-5.2-19 0s-5.2 13.7 0 19c5.2 5.2 13.7 5.2 19 0 5.2-5.3 5.2-13.8 0-19z" fill=#fff><a href="https://veronneau.org/media/blog/2022-01-21/graphs/D.Iberville.png" xlink="http://www.w3.org/1999/xlink" id=a14138><path id=path6521 class=g1_1 d="M1386.6 1530.5c-5.2-5.3-13.7-5.3-19 0-5.2 5.2-5.2 13.7 0 18.9 5.3 5.3 13.8 5.3 19 0 5.2-5.2 5.2-13.7 0-18.9z" fill=#fff><path stroke=#ffdd01 d="M2125.9 2198.2h-156.1l-51.2-51.2h-238.3" stroke-linecap=round id=path6523 stroke-linejoin=round fill=none style="fill: none; stroke: #ffdd01; stroke-width: 44.724167; stroke-linecap: round; stroke-linejoin: round;" stroke-width=44.724><a href="https://veronneau.org/media/blog/2022-01-21/graphs/Longueuil.png" xlink="http://www.w3.org/1999/xlink" id=a17668><path id=path6525 class=g1_1 d="M2137.3 2186.8c-6.2-6.2-16.4-6.2-22.7 0-6.3 6.3-6.3 16.5 0 22.8s16.5 6.3 22.7 0c6.3-6.3 6.3-16.5 0-22.8z" fill=#fff><a href="https://veronneau.org/media/blog/2022-01-21/graphs/Jean.Drapeau.png" xlink="http://www.w3.org/1999/xlink" id=a17665><path id=path6527 class=g1_1 d="M1955.2 2164.4c-5.3-5.2-13.8-5.2-19 0-5.3 5.3-5.3 13.8 0 19 5.2 5.2 13.7 5.2 19 0 5.2-5.2 5.2-13.7 0-19z" fill=#fff><a href="https://veronneau.org/media/blog/2022-01-21/graphs/Lionel.Groulx.png" xlink="http://www.w3.org/1999/xlink" id=a17530><path id=path6529 class=g1_1 d="M1225 2779.8c-6.9 0-13.3-2.7-18.1-7.5-4.8-4.9-7.5-11.3-7.5-18.1 0-6.9 2.7-13.3 7.5-18.1 4.8-4.9 11.2-7.5 18.1-7.5 6.8 0 13.2 2.6 18.1 7.5 4.8 4.8 7.5 11.2 7.5 18.1 0 6.8-2.7 13.2-7.5 18.1-4.8 4.8-11.3 7.5-18.1 7.5z" fill=#fff><path id=path6531 class=g5_1 d="M1225 2725.5c-7.7 0-14.9 3-20.3 8.4s-8.4 12.6-8.4 20.3c0 7.6 3 14.8 8.4 20.2s12.6 8.4 20.3 8.4c7.6 0 14.8-3 20.2-8.4 5.5-5.4 8.4-12.6 8.4-20.2 0-7.7-2.9-14.9-8.4-20.3-5.4-5.4-12.6-8.4-20.2-8.4m0 6.1c5.8 0 11.5 2.2 15.9 6.6 8.8 8.8 8.8 23.1 0 31.9-4.4 4.4-10.1 6.6-15.9 6.6s-11.6-2.2-15.9-6.6c-8.9-8.8-8.9-23.1 0-31.9 4.3-4.4 10.1-6.6 15.9-6.6z" fill=#010101><a href="https://veronneau.org/media/blog/2022-01-21/graphs/Snowdon.png" xlink="http://www.w3.org/1999/xlink" id=a14111><path id=path6533 class=g1_1 d="M845.3 2551.7c-6.8 0-13.2-2.6-18-7.5-10-9.9-10-26.2-.1-36.2 4.9-4.8 11.3-7.5 18.1-7.5 6.9 0 13.3 2.7 18.1 7.5 10 10 10 26.3 0 36.2-4.8 4.9-11.2 7.5-18.1 7.5z" fill=#fff><path id=path6535 class=g5_1 d="M845.3 2497.5c-7.6 0-14.8 3-20.2 8.4-11.2 11.2-11.2 29.3 0 40.5 5.4 5.4 12.6 8.4 20.2 8.4 7.7 0 14.9-3 20.3-8.4 11.2-11.2 11.2-29.3 0-40.5-5.4-5.4-12.6-8.4-20.3-8.4m0 6.1c5.8 0 11.6 2.2 16 6.6 8.8 8.8 8.8 23.1 0 31.9-4.4 4.4-10.2 6.6-16 6.6-5.7 0-11.5-2.2-15.9-6.6-8.8-8.8-8.8-23.1 0-31.9a22.5 22.5 0 0 1 15.9-6.6z" fill=#010101><a href="https://veronneau.org/media/blog/2022-01-21/graphs/Jean.Talon.png" xlink="http://www.w3.org/1999/xlink" id=a14144><path id=path6537 class=g1_1 d="M1225.2 1717.6c-6.8 0-13.2-2.7-18.1-7.5-9.9-10-9.9-26.2 0-36.2 4.9-4.8 11.3-7.5 18.1-7.5 6.9 0 13.3 2.7 18.1 7.5 4.9 4.8 7.5 11.2 7.5 18.1 0 6.8-2.6 13.3-7.5 18.1-4.8 4.8-11.2 7.5-18.1 7.5z" fill=#fff><a href="https://veronneau.org/media/blog/2022-01-21/graphs/Jean.Talon.png" xlink="http://www.w3.org/1999/xlink" id=a14132><path id=path6539 class=g5_1 d="M1225.2 1663.3c-7.6 0-14.8 3-20.2 8.4-11.2 11.2-11.2 29.4 0 40.5 5.4 5.5 12.6 8.4 20.2 8.4 7.7 0 14.9-2.9 20.3-8.4 5.4-5.4 8.4-12.6 8.4-20.2 0-7.7-3-14.9-8.4-20.3s-12.6-8.4-20.3-8.4m0 6.2c5.8 0 11.6 2.1 16 6.6 8.8 8.8 8.8 23 0 31.8-4.4 4.4-10.2 6.6-16 6.6-5.7 0-11.5-2.2-15.9-6.6-8.8-8.8-8.8-23 0-31.8 4.4-4.5 10.2-6.6 15.9-6.6z" fill=#010101><a href="https://veronneau.org/media/blog/2022-01-21/graphs/Berri.Uqam.png" xlink="http://www.w3.org/1999/xlink" id=a17551><path id=path6541 class=g1_1 d="M1680.3 2172.7c-6.9 0-13.3-2.7-18.1-7.5-10-10-10-26.2 0-36.2 4.8-4.8 11.2-7.5 18.1-7.5 6.8 0 13.2 2.7 18.1 7.5 4.8 4.8 7.5 11.3 7.5 18.1s-2.7 13.3-7.5 18.1c-4.9 4.8-11.3 7.5-18.1 7.5z" fill=#fff><path id=path6543 class=g5_1 d="M1680.3 2118.4c-7.7 0-14.9 3-20.3 8.4-5.4 5.5-8.4 12.6-8.4 20.3 0 7.6 3 14.8 8.4 20.3 5.4 5.4 12.6 8.3 20.3 8.3 7.6 0 14.8-2.9 20.2-8.3 5.4-5.5 8.4-12.7 8.4-20.3 0-7.7-3-14.8-8.4-20.3-5.4-5.4-12.6-8.4-20.2-8.4m0 6.2c5.7 0 11.5 2.2 15.9 6.6 8.8 8.8 8.8 23 0 31.8a22.5 22.5 0 0 1-15.9 6.6c-5.8 0-11.6-2.2-16-6.6-8.8-8.8-8.8-23 0-31.8 4.4-4.4 10.2-6.6 16-6.6z" fill=#010101><path id=path6545 class=g15_1 d="M1143.6 3229.5c0 1.3-1.1 2.3-2.4 2.3H843.4c-1.3 0-2.4-1-2.4-2.3v-53.8c0-1.3 1.1-2.4 2.4-2.4h297.8c1.3 0 2.4 1.1 2.4 2.4z" fill=#f2f2f3><path id=path6547 class=g15_1 d="M2477.1 2301.7c0 1.3-1.1 2.4-2.4 2.4h-307.1c-1.2 0-2.3-1.1-2.3-2.4v-131.5c0-1.3 1.1-2.4 2.3-2.4h307.1c1.3 0 2.4 1.1 2.4 2.4z" fill=#f2f2f3><path id=path6549 class=g15_1 d="M1596.5 1422.4c0 1.2-1 2.3-2.3 2.3h-279.7c-1.3 0-2.4-1.1-2.4-2.3v-53.9c0-1.3 1.1-2.3 2.4-2.3h279.7c1.3 0 2.3 1 2.3 2.3z" fill=#f2f2f3><path id=path6551 class=g15_1 d="M1699.1 2780.7c0 1.3-1 2.3-2.3 2.3h-393.4c-1.3 0-2.3-1-2.3-2.3v-53.9c0-1.2 1-2.3 2.3-2.3h393.4c1.3 0 2.3 1.1 2.3 2.3z" fill=#f2f2f3><path id=path6553 class=g15_1 d="M1148.7 1719c0 1.3-1 2.3-2.3 2.3H793.6c-1.3 0-2.4-1-2.4-2.3v-53.8c0-1.3 1.1-2.4 2.4-2.4h352.8c1.3 0 2.3 1.1 2.3 2.4z" fill=#f2f2f3><path id=path6555 class=g15_1 d="M1605.3 2174.5c0 1.3-1.1 2.4-2.4 2.4h-453.1c-1.3 0-2.3-1.1-2.3-2.4v-53.8c0-1.3 1-2.3 2.3-2.3h453.1c1.3 0 2.4 1 2.4 2.3z" fill=#f2f2f3><path id=path6557 class=g15_1 d="M539.6 2031c0 1.3-1 2.3-2.3 2.3H241.2c-1.3 0-2.4-1-2.4-2.3v-53.8c0-1.3 1.1-2.4 2.4-2.4h296.1c1.3 0 2.3 1.1 2.3 2.4z" fill=#f2f2f3><path id=path6559 class=g16_1 d="M885.3 3202.6c0-8.1-6.6-14.6-14.7-14.6s-14.6 6.5-14.6 14.6 6.5 14.6 14.6 14.6 14.7-6.5 14.7-14.6z" fill=#00a54f><path id=path6561 class=g17_1 d="M2209.2 2200.3c0-8.1-6.6-14.6-14.6-14.6-8.1 0-14.7 6.5-14.7 14.6s6.6 14.6 14.7 14.6c8 0 14.6-6.5 14.6-14.6z" fill=#ffdd01><path id=path6563 class=g18_1 d="M1356 1395.4c0-8-6.5-14.6-14.6-14.6s-14.7 6.6-14.7 14.6c0 8.1 6.6 14.7 14.7 14.7s14.6-6.6 14.6-14.7z" fill=#0072bc><path id=path6565 class=g16_1 d="M1344.5 2753.8c0-8.1-6.5-14.7-14.6-14.7s-14.6 6.6-14.6 14.7c0 8 6.5 14.6 14.6 14.6s14.6-6.6 14.6-14.6z" fill=#00a54f><path id=path6567 class=g19_1 d="M1388.4 2753.8c0-8.1-6.5-14.7-14.6-14.7s-14.6 6.6-14.6 14.7c0 8 6.5 14.6 14.6 14.6s14.6-6.6 14.6-14.6z" fill=#f58220><path id=path6569 class=g19_1 d="M835.1 1692.1c0-8.1-6.5-14.6-14.6-14.6s-14.6 6.5-14.6 14.6 6.5 14.6 14.6 14.6 14.6-6.5 14.6-14.6z" fill=#f58220><path id=path6571 class=g18_1 d="M879 1692.1c0-8.1-6.6-14.6-14.6-14.6-8.1 0-14.7 6.5-14.7 14.6s6.6 14.6 14.7 14.6c8 0 14.6-6.5 14.6-14.6z" fill=#0072bc><path id=path6573 class=g19_1 d="M1235.2 2147.6c0-8-6.5-14.6-14.6-14.6s-14.6 6.6-14.6 14.6c0 8.1 6.5 14.7 14.6 14.7s14.6-6.6 14.6-14.7z" fill=#f58220><path id=path6575 class=g16_1 d="M1191.3 2147.6c0-8-6.5-14.6-14.6-14.6s-14.6 6.6-14.6 14.6c0 8.1 6.5 14.7 14.6 14.7s14.6-6.6 14.6-14.7z" fill=#00a54f><path id=path6577 class=g17_1 d="M1279.1 2147.6c0-8-6.6-14.6-14.6-14.6-8.1 0-14.7 6.6-14.7 14.6 0 8.1 6.6 14.7 14.7 14.7 8 0 14.6-6.6 14.6-14.7z" fill=#ffdd01><path id=path6579 class=g19_1 d="M282.7 2004.1c0-8.1-6.6-14.7-14.6-14.7-8.1 0-14.7 6.6-14.7 14.7 0 8 6.6 14.6 14.7 14.6 8 0 14.6-6.6 14.6-14.6z" fill=#f58220><path id=path6581 class=g15_1 d="M2532.5 1195c0 1.3-1.1 2.3-2.4 2.3h-436.8c-1.3 0-2.4-1-2.4-2.3v-53.9c0-1.2 1.1-2.3 2.4-2.3h436.8c1.3 0 2.4 1.1 2.4 2.3z" fill=#f2f2f3><path id=path6583 class=g16_1 d="M2134.8 1168.1c0-8.1-6.5-14.7-14.6-14.7s-14.6 6.6-14.6 14.7c0 8 6.5 14.6 14.6 14.6s14.6-6.6 14.6-14.6z" fill=#00a54f><path id=path6585 class=g5_1 d="M2149.6 1179.9v-23.5h3v10.2h8.2v-10.2h3v23.5h-3v-10.7h-8.2v10.7z" fill=#010101><path stroke=#010101 d="M2149.6 1179.9v-23.5h3v10.2h8.2v-10.2h3v23.5h-3v-10.7h-8.2v10.7z" id=path6587 fill=none class=g6_1 stroke-width=.458><path id=path6589 class=g5_1 d="M2181.8 1171.4v-7.9c0-4.9-3.3-5.1-4.3-5.1-.9 0-4.3.2-4.3 5.1v7.9c0 5.2 1.5 6.5 4.3 6.5s4.3-1.3 4.3-6.5m-11.7-.1v-7.7c0-4.7 2.4-7.7 7.4-7.7s7.4 3 7.4 7.7v7.7c0 6.5-2.4 9.1-7.4 9.1s-7.4-2.6-7.4-9.1z" fill=#010101><path stroke=#010101 d="M2181.8 1171.4v-7.9c0-4.9-3.3-5.1-4.3-5.1-.9 0-4.3.2-4.3 5.1v7.9c0 5.2 1.5 6.5 4.3 6.5s4.3-1.3 4.3-6.5zm-11.7-.1v-7.7c0-4.7 2.4-7.7 7.4-7.7s7.4 3 7.4 7.7v7.7c0 6.5-2.4 9.1-7.4 9.1s-7.4-2.6-7.4-9.1z" id=path6591 fill=none class=g6_1 stroke-width=.458><path id=path6593 class=g5_1 d="M2207.3 1156.4v23.5h-4.1l-9.2-20.4h-.1v20.4h-2.7v-23.5h4.3l9.1 20.1h.1v-20.1z" fill=#010101><path stroke=#010101 d="M2207.3 1156.4v23.5h-4.1l-9.2-20.4h-.1v20.4h-2.7v-23.5h4.3l9.1 20.1h.1v-20.1z" id=path6595 fill=none class=g6_1 stroke-width=.458><path id=path6597 class=g5_1 d="M2225.6 1171.4v-7.9c0-4.9-3.3-5.1-4.3-5.1-.9 0-4.3.2-4.3 5.1v7.9c0 5.2 1.5 6.5 4.3 6.5s4.3-1.3 4.3-6.5m-11.7-.1v-7.7c0-4.7 2.4-7.7 7.4-7.7s7.4 3 7.4 7.7v7.7c0 6.5-2.4 9.1-7.4 9.1s-7.4-2.6-7.4-9.1z" fill=#010101><path stroke=#010101 d="M2225.6 1171.4v-7.9c0-4.9-3.3-5.1-4.3-5.1-.9 0-4.3.2-4.3 5.1v7.9c0 5.2 1.5 6.5 4.3 6.5s4.3-1.3 4.3-6.5zm-11.7-.1v-7.7c0-4.7 2.4-7.7 7.4-7.7s7.4 3 7.4 7.7v7.7c0 6.5-2.4 9.1-7.4 9.1s-7.4-2.6-7.4-9.1z" id=path6599 fill=none class=g6_1 stroke-width=.458><path id=path6601 class=g5_1 d="M2238.1 1166.5h4.5c2.2 0 3.2-1.9 3.2-3.9 0-1.7-.9-3.6-3.2-3.6h-4.5zm0 2.6v10.8h-3v-23.5h8.1c4.2 0 5.6 2.9 5.6 5.9 0 2.7-1.5 4.8-4.2 5.3v.1c2.7.4 3.6 1.3 3.8 6 0 1 .3 4.7.8 6.2h-3.1c-.9-1.6-.7-4.7-.9-7.8-.3-2.9-2.6-3-3.6-3z" fill=#010101><path stroke=#010101 d="M2238.1 1166.5h4.5c2.2 0 3.2-1.9 3.2-3.9 0-1.7-.9-3.6-3.2-3.6h-4.5zm0 2.6v10.8h-3v-23.5h8.1c4.2 0 5.6 2.9 5.6 5.9 0 2.7-1.5 4.8-4.2 5.3v.1c2.7.4 3.6 1.3 3.8 6 0 1 .3 4.7.8 6.2h-3.1c-.9-1.6-.7-4.7-.9-7.8-.3-2.9-2.6-3-3.6-3z" id=path6603 fill=none class=g6_1 stroke-width=.458><path id=path6605 class=g5_1 d="m2264.6 1149.4-4.3 4.5h-2.2l2.9-4.5zm-9.4 30.5v-23.5h12.1v2.6h-9.1v7.6h8.5v2.6h-8.5v8.1h9.3v2.6z" fill=#010101><path stroke=#010101 d="m2264.6 1149.4-4.3 4.5h-2.2l2.9-4.5zm-9.4 30.5v-23.5h12.1v2.6h-9.1v7.6h8.5v2.6h-8.5v8.1h9.3v2.6z" id=path6607 fill=none class=g6_1 stroke-width=.458><path id=path6609 class=g5_1 d="M2272 1166.6h7.1v2.5h-7.1z" fill=#010101><path stroke=#010101 d="M2272 1166.6h7.1v2.5h-7.1z" id=path6611 fill=none class=g6_1 stroke-width=.458><path id=path6613 class=g5_1 d="M2288.2 1177.3h4.2c3.2 0 4.3-2.3 4.3-4 0-3.8-2.3-4.4-5.3-4.4h-3.2zm0-11h4.3c2.4 0 3.5-1.5 3.5-3.7 0-2-1.1-3.6-3.6-3.6h-4.2zm-3 13.6v-23.5h7.6c3.3 0 4.4 1.1 5.2 2.4.9 1.3 1 2.7 1 3.1 0 3-1 4.9-4 5.6v.2c3.3.3 4.8 2.4 4.8 5.6 0 6-4.4 6.6-7.1 6.6z" fill=#010101><path stroke=#010101 d="M2288.2 1177.3h4.2c3.2 0 4.3-2.3 4.3-4 0-3.8-2.3-4.4-5.3-4.4h-3.2zm0-11h4.3c2.4 0 3.5-1.5 3.5-3.7 0-2-1.1-3.6-3.6-3.6h-4.2zm-3 13.6v-23.5h7.6c3.3 0 4.4 1.1 5.2 2.4.9 1.3 1 2.7 1 3.1 0 3-1 4.9-4 5.6v.2c3.3.3 4.8 2.4 4.8 5.6 0 6-4.4 6.6-7.1 6.6z" id=path6615 fill=none class=g6_1 stroke-width=.458><path id=path6617 class=g5_1 d="M2306 1179.9v-23.5h12.1v2.6h-9.1v7.6h8.5v2.6h-8.5v8.1h9.3v2.6z" fill=#010101><path stroke=#010101 d="M2306 1179.9v-23.5h12.1v2.6h-9.1v7.6h8.5v2.6h-8.5v8.1h9.3v2.6z" id=path6619 fill=none class=g6_1 stroke-width=.458><path id=path6621 class=g5_1 d="m2332.3 1159.2-3.7 12.5h7.5zm-1.8-2.8h3.8l7.7 23.5h-3.4l-1.7-5.6h-9.1l-1.7 5.6h-3z" fill=#010101><path stroke=#010101 d="m2332.3 1159.2-3.7 12.5h7.5zm-1.8-2.8h3.8l7.7 23.5h-3.4l-1.7-5.6h-9.1l-1.7 5.6h-3z" id=path6623 fill=none class=g6_1 stroke-width=.458><path id=path6625 class=g5_1 d="M2346.3 1156.4h3v15c0 5.2 1.5 6.5 4.3 6.5 2.9 0 4.4-1.3 4.4-6.5v-15h3v14.9c0 6.5-2.4 9.1-7.4 9.1-4.9 0-7.3-2.6-7.3-9.1z" fill=#010101><path stroke=#010101 d="M2346.3 1156.4h3v15c0 5.2 1.5 6.5 4.3 6.5 2.9 0 4.4-1.3 4.4-6.5v-15h3v14.9c0 6.5-2.4 9.1-7.4 9.1-4.9 0-7.3-2.6-7.3-9.1z" id=path6627 fill=none class=g6_1 stroke-width=.458><path id=path6629 class=g5_1 d="M2378.8 1162.7c0-2.8-1.2-4.3-4.2-4.3-.9 0-4.3.2-4.3 5.1v7.9c0 5.2 1.5 6.5 4.3 6.5 2.2 0 3.6-.6 4.2-1.1v-7h-4.3v-2.6h7.3v11.4c-1.9 1.1-4.2 1.8-7.2 1.8-5 0-7.4-2.6-7.4-9.1v-7.7c0-4.7 2.4-7.7 7.4-7.7 5.1 0 7.5 1.9 7.3 6.8z" fill=#010101><path stroke=#010101 d="M2378.8 1162.7c0-2.8-1.2-4.3-4.2-4.3-.9 0-4.3.2-4.3 5.1v7.9c0 5.2 1.5 6.5 4.3 6.5 2.2 0 3.6-.6 4.2-1.1v-7h-4.3v-2.6h7.3v11.4c-1.9 1.1-4.2 1.8-7.2 1.8-5 0-7.4-2.6-7.4-9.1v-7.7c0-4.7 2.4-7.7 7.4-7.7 5.1 0 7.5 1.9 7.3 6.8z" id=path6631 fill=none class=g6_1 stroke-width=.458><path id=path6633 class=g5_1 d="M2391.9 1166.5h4.5c2.2 0 3.2-1.9 3.2-3.9 0-1.7-.8-3.6-3.2-3.6h-4.5zm0 2.6v10.8h-3v-23.5h8.1c4.2 0 5.7 2.9 5.7 5.9 0 2.7-1.6 4.8-4.3 5.3v.1c2.7.4 3.6 1.3 3.8 6 0 1 .4 4.7.8 6.2h-3.1c-.9-1.6-.7-4.7-.9-7.8-.2-2.9-2.6-3-3.6-3z" fill=#010101><path stroke=#010101 d="M2391.9 1166.5h4.5c2.2 0 3.2-1.9 3.2-3.9 0-1.7-.8-3.6-3.2-3.6h-4.5zm0 2.6v10.8h-3v-23.5h8.1c4.2 0 5.7 2.9 5.7 5.9 0 2.7-1.6 4.8-4.3 5.3v.1c2.7.4 3.6 1.3 3.8 6 0 1 .4 4.7.8 6.2h-3.1c-.9-1.6-.7-4.7-.9-7.8-.2-2.9-2.6-3-3.6-3z" id=path6635 fill=none class=g6_1 stroke-width=.458><path id=path6637 class=g5_1 d="M2416.5 1159.2h-.1l-3.7 12.5h7.5zm-1.9-2.8h3.8l7.7 23.5h-3.4l-1.7-5.6h-9l-1.8 5.6h-3z" fill=#010101><path stroke=#010101 d="M2416.5 1159.2h-.1l-3.7 12.5h7.5zm-1.9-2.8h3.8l7.7 23.5h-3.4l-1.7-5.6h-9l-1.8 5.6h-3z" id=path6639 fill=none class=g6_1 stroke-width=.458><path id=path6641 class=g5_1 d="M2446.8 1156.4v23.5h-4.1l-9.3-20.4h-.1v20.4h-2.6v-23.5h4.2l9.1 20.1h.1v-20.1z" fill=#010101><path stroke=#010101 d="M2446.8 1156.4v23.5h-4.1l-9.3-20.4h-.1v20.4h-2.6v-23.5h4.2l9.1 20.1h.1v-20.1z" id=path6643 fill=none class=g6_1 stroke-width=.458><path id=path6645 class=g5_1 d="M2456.5 1177.3h2.9c4.1 0 5.6-1.6 5.6-7v-4.8c0-4.7-1.4-6.5-4.5-6.5h-4zm-3-20.9h7.3c2.9 0 5.1 1.1 6.3 3.6.9 2 1 6.7 1 7.4 0 5-.5 7.9-1.4 9.5-1.3 2-3.7 3-7.8 3h-5.4z" fill=#010101><path stroke=#010101 d="M2456.5 1177.3h2.9c4.1 0 5.6-1.6 5.6-7v-4.8c0-4.7-1.4-6.5-4.5-6.5h-4zm-3-20.9h7.3c2.9 0 5.1 1.1 6.3 3.6.9 2 1 6.7 1 7.4 0 5-.5 7.9-1.4 9.5-1.3 2-3.7 3-7.8 3h-5.4z" id=path6647 fill=none class=g6_1 stroke-width=.458><path id=path6649 class=g5_1 d="M909.1 3193.3h-.1l-3.6 12.5h7.5zm-1.8-2.7h3.8l7.6 23.4h-3.3l-1.7-5.6h-9.1l-1.7 5.6h-3z" fill=#010101><path stroke=#010101 d="M909.1 3193.3h-.1l-3.6 12.5h7.5zm-1.8-2.7h3.8l7.6 23.4h-3.3l-1.7-5.6h-9.1l-1.7 5.6h-3z" id=path6651 fill=none class=g6_1 stroke-width=.458><path id=path6653 class=g5_1 d="M939.4 3190.6v23.4h-4.1l-9.3-20.3v20.3h-2.7v-23.4h4.2l9.2 20v-20z" fill=#010101><path stroke=#010101 d="M939.4 3190.6v23.4h-4.1l-9.3-20.3v20.3h-2.7v-23.4h4.2l9.2 20v-20z" id=path6655 fill=none class=g6_1 stroke-width=.458><path id=path6657 class=g5_1 d="M957.4 3196.8c0-2.7-1.2-4.2-4.2-4.2-.9 0-4.3.1-4.3 5v8c0 5.1 1.5 6.4 4.3 6.4 2.2 0 3.6-.6 4.2-1v-7.1h-4.3v-2.5h7.3v11.4c-1.9 1-4.2 1.7-7.2 1.7-5 0-7.4-2.6-7.4-9.1v-7.7c0-4.6 2.4-7.6 7.4-7.6 5.1 0 7.5 1.8 7.3 6.7z" fill=#010101><path stroke=#010101 d="M957.4 3196.8c0-2.7-1.2-4.2-4.2-4.2-.9 0-4.3.1-4.3 5v8c0 5.1 1.5 6.4 4.3 6.4 2.2 0 3.6-.6 4.2-1v-7.1h-4.3v-2.5h7.3v11.4c-1.9 1-4.2 1.7-7.2 1.7-5 0-7.4-2.6-7.4-9.1v-7.7c0-4.6 2.4-7.6 7.4-7.6 5.1 0 7.5 1.8 7.3 6.7z" id=path6659 fill=none class=g6_1 stroke-width=.458><path id=path6661 class=g5_1 d="M970.2 3200.6h4.5c2.1 0 3.2-1.8 3.2-3.9 0-1.7-.9-3.5-3.2-3.5h-4.5zm0 2.6v10.8h-3v-23.4h8.1c4.2 0 5.6 2.9 5.6 5.8 0 2.8-1.5 4.9-4.3 5.4 2.7.5 3.7 1.4 3.9 6.1 0 1 .3 4.7.8 6.1h-3.1c-.9-1.6-.7-4.7-.9-7.8-.3-2.8-2.6-3-3.6-3z" fill=#010101><path stroke=#010101 d="M970.2 3200.6h4.5c2.1 0 3.2-1.8 3.2-3.9 0-1.7-.9-3.5-3.2-3.5h-4.5zm0 2.6v10.8h-3v-23.4h8.1c4.2 0 5.6 2.9 5.6 5.8 0 2.8-1.5 4.9-4.3 5.4 2.7.5 3.7 1.4 3.9 6.1 0 1 .3 4.7.8 6.1h-3.1c-.9-1.6-.7-4.7-.9-7.8-.3-2.8-2.6-3-3.6-3z" id=path6663 fill=none class=g6_1 stroke-width=.458><path id=path6665 class=g5_1 d="M990.7 3214h-3v-23.4h3z" fill=#010101><path stroke=#010101 d="M990.7 3214h-3v-23.4h3z" id=path6667 fill=none class=g6_1 stroke-width=.458><path id=path6669 class=g5_1 d="M1008.9 3196.8c0-2.7-1.2-4.2-4.2-4.2-.9 0-4.3.1-4.3 5v8c0 5.1 1.5 6.4 4.3 6.4 2.2 0 3.6-.6 4.2-1v-7.1h-4.3v-2.5h7.3v11.4c-1.9 1-4.2 1.7-7.2 1.7-5 0-7.4-2.6-7.4-9.1v-7.7c0-4.6 2.4-7.6 7.4-7.6 5.1 0 7.5 1.8 7.3 6.7z" fill=#010101><path stroke=#010101 d="M1008.9 3196.8c0-2.7-1.2-4.2-4.2-4.2-.9 0-4.3.1-4.3 5v8c0 5.1 1.5 6.4 4.3 6.4 2.2 0 3.6-.6 4.2-1v-7.1h-4.3v-2.5h7.3v11.4c-1.9 1-4.2 1.7-7.2 1.7-5 0-7.4-2.6-7.4-9.1v-7.7c0-4.6 2.4-7.6 7.4-7.6 5.1 0 7.5 1.8 7.3 6.7z" id=path6671 fill=none class=g6_1 stroke-width=.458><path id=path6673 class=g5_1 d="M1035 3190.6v23.4h-4.1l-9.2-20.3h-.1v20.3h-2.6v-23.4h4.2l9.1 20h.1v-20z" fill=#010101><path stroke=#010101 d="M1035 3190.6v23.4h-4.1l-9.2-20.3h-.1v20.3h-2.6v-23.4h4.2l9.1 20h.1v-20z" id=path6675 fill=none class=g6_1 stroke-width=.458><path id=path6677 class=g5_1 d="M1053.4 3205.6v-8c0-4.9-3.4-5-4.4-5-.9 0-4.3.1-4.3 5v8c0 5.1 1.5 6.4 4.3 6.4 2.9 0 4.4-1.3 4.4-6.4m-11.7-.2v-7.7c0-4.6 2.4-7.6 7.3-7.6 5 0 7.4 3 7.4 7.6v7.7c0 6.5-2.4 9.1-7.4 9.1-4.9 0-7.3-2.6-7.3-9.1z" fill=#010101><path stroke=#010101 d="M1053.4 3205.6v-8c0-4.9-3.4-5-4.4-5-.9 0-4.3.1-4.3 5v8c0 5.1 1.5 6.4 4.3 6.4 2.9 0 4.4-1.3 4.4-6.4zm-11.7-.2v-7.7c0-4.6 2.4-7.6 7.3-7.6 5 0 7.4 3 7.4 7.6v7.7c0 6.5-2.4 9.1-7.4 9.1-4.9 0-7.3-2.6-7.3-9.1z" id=path6679 fill=none class=g6_1 stroke-width=.458><path id=path6681 class=g5_1 d="M1079.2 3190.6v23.4h-4.1l-9.3-20.3h-.1v20.3h-2.6v-23.4h4.2l9.1 20h.1v-20z" fill=#010101><path stroke=#010101 d="M1079.2 3190.6v23.4h-4.1l-9.3-20.3h-.1v20.3h-2.6v-23.4h4.2l9.1 20h.1v-20z" id=path6683 fill=none class=g6_1 stroke-width=.458><path id=path6685 class=g5_1 d="M2224.3 2208.5v-23.4h3v20.8h8.6v2.6z" fill=#010101><path stroke=#010101 d="M2224.3 2208.5v-23.4h3v20.8h8.6v2.6z" id=path6687 fill=none class=g6_1 stroke-width=.458><path id=path6689 class=g5_1 d="M2251.7 2200.1v-7.9c0-4.9-3.4-5.1-4.4-5.1-.9 0-4.3.2-4.3 5.1v7.9c0 5.1 1.5 6.4 4.3 6.4 2.9 0 4.4-1.3 4.4-6.4m-11.7-.1v-7.7c0-4.7 2.4-7.7 7.3-7.7 5 0 7.4 3 7.4 7.7v7.7c0 6.5-2.4 9-7.4 9-4.9 0-7.3-2.5-7.3-9z" fill=#010101><path stroke=#010101 d="M2251.7 2200.1v-7.9c0-4.9-3.4-5.1-4.4-5.1-.9 0-4.3.2-4.3 5.1v7.9c0 5.1 1.5 6.4 4.3 6.4 2.9 0 4.4-1.3 4.4-6.4zm-11.7-.1v-7.7c0-4.7 2.4-7.7 7.3-7.7 5 0 7.4 3 7.4 7.7v7.7c0 6.5-2.4 9-7.4 9-4.9 0-7.3-2.5-7.3-9z" id=path6691 fill=none class=g6_1 stroke-width=.458><path id=path6693 class=g5_1 d="M2276.8 2185.1v23.4h-4.1l-9.3-20.3v20.3h-2.7v-23.4h4.2l9.2 20.1v-20.1z" fill=#010101><path stroke=#010101 d="M2276.8 2185.1v23.4h-4.1l-9.3-20.3v20.3h-2.7v-23.4h4.2l9.2 20.1v-20.1z" id=path6695 fill=none class=g6_1 stroke-width=.458><path id=path6697 class=g5_1 d="M2294.8 2191.3c0-2.7-1.2-4.2-4.2-4.2-.9 0-4.3.2-4.3 5.1v7.9c0 5.1 1.5 6.4 4.3 6.4 2.2 0 3.6-.6 4.2-1v-7h-4.3v-2.6h7.3v11.4c-1.9 1-4.2 1.7-7.2 1.7-5 0-7.4-2.5-7.4-9v-7.7c0-4.7 2.4-7.7 7.4-7.7 5.1 0 7.5 1.8 7.3 6.7z" fill=#010101><path stroke=#010101 d="M2294.8 2191.3c0-2.7-1.2-4.2-4.2-4.2-.9 0-4.3.2-4.3 5.1v7.9c0 5.1 1.5 6.4 4.3 6.4 2.2 0 3.6-.6 4.2-1v-7h-4.3v-2.6h7.3v11.4c-1.9 1-4.2 1.7-7.2 1.7-5 0-7.4-2.5-7.4-9v-7.7c0-4.7 2.4-7.7 7.4-7.7 5.1 0 7.5 1.8 7.3 6.7z" id=path6699 fill=none class=g6_1 stroke-width=.458><path id=path6701 class=g5_1 d="M2304.6 2185.1h3v15c0 5.1 1.5 6.4 4.4 6.4 2.8 0 4.4-1.3 4.4-6.4v-15h2.9v14.9c0 6.5-2.4 9-7.3 9-5 0-7.4-2.5-7.4-9z" fill=#010101><path stroke=#010101 d="M2304.6 2185.1h3v15c0 5.1 1.5 6.4 4.4 6.4 2.8 0 4.4-1.3 4.4-6.4v-15h2.9v14.9c0 6.5-2.4 9-7.3 9-5 0-7.4-2.5-7.4-9z" id=path6703 fill=none class=g6_1 stroke-width=.458><path id=path6705 class=g5_1 d="M2325.8 2208.5v-23.4h12.1v2.6h-9.1v7.5h8.5v2.6h-8.5v8.1h9.3v2.6z" fill=#010101><path stroke=#010101 d="M2325.8 2208.5v-23.4h12.1v2.6h-9.1v7.5h8.5v2.6h-8.5v8.1h9.3v2.6z" id=path6707 fill=none class=g6_1 stroke-width=.458><path id=path6709 class=g5_1 d="M2343.9 2185.1h3v15c0 5.1 1.6 6.4 4.4 6.4s4.4-1.3 4.4-6.4v-15h3v14.9c0 6.5-2.4 9-7.4 9s-7.4-2.5-7.4-9z" fill=#010101><path stroke=#010101 d="M2343.9 2185.1h3v15c0 5.1 1.6 6.4 4.4 6.4s4.4-1.3 4.4-6.4v-15h3v14.9c0 6.5-2.4 9-7.4 9s-7.4-2.5-7.4-9z" id=path6711 fill=none class=g6_1 stroke-width=.458><path id=path6713 class=g5_1 d="M2369.2 2208.5h-3v-23.4h3z" fill=#010101><path stroke=#010101 d="M2369.2 2208.5h-3v-23.4h3z" id=path6715 fill=none class=g6_1 stroke-width=.458><path id=path6717 class=g5_1 d="M2376.8 2208.5v-23.4h3v20.8h8.6v2.6z" fill=#010101><path stroke=#010101 d="M2376.8 2208.5v-23.4h3v20.8h8.6v2.6z" id=path6719 fill=none class=g6_1 stroke-width=.458><path id=path6721 class=g5_1 d="M2389.9 2195.7h16.3v1.8h-16.3z" fill=#010101><path stroke=#010101 d="M2389.9 2195.7h16.3v1.8h-16.3z" id=path6723 fill=none class=g6_1 stroke-width=.458><path id=path6725 class=g5_1 d="M2224.2 2224.2h3v15c0 5.2 1.6 6.5 4.4 6.5s4.4-1.3 4.4-6.5v-15h3v14.9c0 6.5-2.4 9.1-7.4 9.1s-7.4-2.6-7.4-9.1z" fill=#010101><path stroke=#010101 d="M2224.2 2224.2h3v15c0 5.2 1.6 6.5 4.4 6.5s4.4-1.3 4.4-6.5v-15h3v14.9c0 6.5-2.4 9.1-7.4 9.1s-7.4-2.6-7.4-9.1z" id=path6727 fill=none class=g6_1 stroke-width=.458><path id=path6729 class=g5_1 d="M2261.7 2224.2v23.5h-4.1l-9.2-20.4h-.1v20.4h-2.7v-23.5h4.3l9.1 20.1h.1v-20.1z" fill=#010101><path stroke=#010101 d="M2261.7 2224.2v23.5h-4.1l-9.2-20.4h-.1v20.4h-2.7v-23.5h4.3l9.1 20.1h.1v-20.1z" id=path6731 fill=none class=g6_1 stroke-width=.458><path id=path6733 class=g5_1 d="M2271.8 2247.7h-3v-23.5h3z" fill=#010101><path stroke=#010101 d="M2271.8 2247.7h-3v-23.5h3z" id=path6735 fill=none class=g6_1 stroke-width=.458><path id=path6737 class=g5_1 d="M2287.6 2247.7h-3.6l-6.8-23.5h3.3l5.3 20.6h.1l5.5-20.6h3z" fill=#010101><path stroke=#010101 d="M2287.6 2247.7h-3.6l-6.8-23.5h3.3l5.3 20.6h.1l5.5-20.6h3z" id=path6739 fill=none class=g6_1 stroke-width=.458><path id=path6741 class=g5_1 d="M2299.8 2247.7v-23.5h12.1v2.6h-9.1v7.5h8.4v2.6h-8.4v8.2h9.3v2.6z" fill=#010101><path stroke=#010101 d="M2299.8 2247.7v-23.5h12.1v2.6h-9.1v7.5h8.4v2.6h-8.4v8.2h9.3v2.6z" id=path6743 fill=none class=g6_1 stroke-width=.458><path id=path6745 class=g5_1 d="M2320.6 2234.3h4.5c2.1 0 3.1-1.9 3.1-3.9 0-1.7-.8-3.6-3.1-3.6h-4.5zm0 2.6v10.8h-3v-23.5h8.1c4.1 0 5.6 2.9 5.6 5.9 0 2.7-1.5 4.8-4.3 5.3v.1c2.7.4 3.7 1.3 3.8 6 .1 1 .4 4.7.9 6.2h-3.2c-.8-1.7-.6-4.7-.9-7.8-.2-2.9-2.5-3-3.5-3z" fill=#010101><path stroke=#010101 d="M2320.6 2234.3h4.5c2.1 0 3.1-1.9 3.1-3.9 0-1.7-.8-3.6-3.1-3.6h-4.5zm0 2.6v10.8h-3v-23.5h8.1c4.1 0 5.6 2.9 5.6 5.9 0 2.7-1.5 4.8-4.3 5.3v.1c2.7.4 3.7 1.3 3.8 6 .1 1 .4 4.7.9 6.2h-3.2c-.8-1.7-.6-4.7-.9-7.8-.2-2.9-2.5-3-3.5-3z" id=path6747 fill=none class=g6_1 stroke-width=.458><path id=path6749 class=g5_1 d="M2339.3 2240.7v.7c0 3.2 2 4.2 4 4.2 2.3 0 4.2-1 4.2-3.8 0-5.2-10.6-4.7-10.6-11.7 0-4.2 3-6.4 6.9-6.4 4.3 0 6.7 2.1 6.5 6.9h-3.1c0-2.6-.8-4.3-3.6-4.3-1.8 0-3.6.9-3.6 3.5 0 5.1 10.5 4.4 10.5 11.8 0 5-3.4 6.6-7.3 6.6-6.9 0-6.9-5.3-6.8-7.5z" fill=#010101><path stroke=#010101 d="M2339.3 2240.7v.7c0 3.2 2 4.2 4 4.2 2.3 0 4.2-1 4.2-3.8 0-5.2-10.6-4.7-10.6-11.7 0-4.2 3-6.4 6.9-6.4 4.3 0 6.7 2.1 6.5 6.9h-3.1c0-2.6-.8-4.3-3.6-4.3-1.8 0-3.6.9-3.6 3.5 0 5.1 10.5 4.4 10.5 11.8 0 5-3.4 6.6-7.3 6.6-6.9 0-6.9-5.3-6.8-7.5z" id=path6751 fill=none class=g6_1 stroke-width=.458><path id=path6753 class=g5_1 d="M2359.8 2247.7h-3v-23.5h3z" fill=#010101><path stroke=#010101 d="M2359.8 2247.7h-3v-23.5h3z" id=path6755 fill=none class=g6_1 stroke-width=.458><path id=path6757 class=g5_1 d="M2380.2 2224.2v2.6h-6.2v20.9h-3v-20.9h-6.1v-2.6z" fill=#010101><path stroke=#010101 d="M2380.2 2224.2v2.6h-6.2v20.9h-3v-20.9h-6.1v-2.6z" id=path6759 fill=none class=g6_1 stroke-width=.458><path id=path6761 class=g5_1 d="m2394.6 2217.2-4.2 4.5h-2.2l2.9-4.5zm-9.4 30.5v-23.5h12.1v2.6h-9.1v7.5h8.5v2.6h-8.5v8.2h9.3v2.6z" fill=#010101><path stroke=#010101 d="m2394.6 2217.2-4.2 4.5h-2.2l2.9-4.5zm-9.4 30.5v-23.5h12.1v2.6h-9.1v7.5h8.5v2.6h-8.5v8.2h9.3v2.6z" id=path6763 fill=none class=g6_1 stroke-width=.458><path id=path6765 class=g5_1 d="M2402 2234.4h7.1v2.5h-7.1z" fill=#010101><path stroke=#010101 d="M2402 2234.4h7.1v2.5h-7.1z" id=path6767 fill=none class=g6_1 stroke-width=.458><path id=path6769 class=g5_1 d="M2418 2245.1h2.8c4.2 0 5.7-1.6 5.7-7v-4.8c0-4.7-1.5-6.5-4.6-6.5h-3.9zm-3-20.9h7.2c3 0 5.1 1.1 6.3 3.6.9 2 1 6.6 1 7.4 0 5-.4 7.9-1.4 9.4-1.3 2.1-3.6 3.1-7.7 3.1h-5.4z" fill=#010101><path stroke=#010101 d="M2418 2245.1h2.8c4.2 0 5.7-1.6 5.7-7v-4.8c0-4.7-1.5-6.5-4.6-6.5h-3.9zm-3-20.9h7.2c3 0 5.1 1.1 6.3 3.6.9 2 1 6.6 1 7.4 0 5-.4 7.9-1.4 9.4-1.3 2.1-3.6 3.1-7.7 3.1h-5.4z" id=path6771 fill=none class=g6_1 stroke-width=.458><path id=path6773 class=g5_1 d="M2435.4 2247.7v-23.5h12.1v2.6h-9.1v7.5h8.5v2.6h-8.5v8.2h9.3v2.6z" fill=#010101><path stroke=#010101 d="M2435.4 2247.7v-23.5h12.1v2.6h-9.1v7.5h8.5v2.6h-8.5v8.2h9.3v2.6z" id=path6775 fill=none class=g6_1 stroke-width=.458><path id=path6777 class=g5_1 d="M2452.2 2234.4h7.1v2.5h-7.1z" fill=#010101><path stroke=#010101 d="M2452.2 2234.4h7.1v2.5h-7.1z" id=path6779 fill=none class=g6_1 stroke-width=.458><path id=path6781 class=g5_1 d="M2226.6 2279.8v.7c0 3.2 2 4.2 4 4.2 2.3 0 4.2-1 4.2-3.8 0-5.2-10.6-4.6-10.6-11.7 0-4.1 3-6.3 6.9-6.3 4.3 0 6.7 2 6.5 6.8h-3.1c0-2.6-.8-4.2-3.6-4.2-1.8 0-3.6.9-3.6 3.4 0 5.2 10.5 4.4 10.5 11.9 0 4.9-3.4 6.5-7.3 6.5-6.9.1-6.9-5.2-6.8-7.5z" fill=#010101><path stroke=#010101 d="M2226.6 2279.8v.7c0 3.2 2 4.2 4 4.2 2.3 0 4.2-1 4.2-3.8 0-5.2-10.6-4.6-10.6-11.7 0-4.1 3-6.3 6.9-6.3 4.3 0 6.7 2 6.5 6.8h-3.1c0-2.6-.8-4.2-3.6-4.2-1.8 0-3.6.9-3.6 3.4 0 5.2 10.5 4.4 10.5 11.9 0 4.9-3.4 6.5-7.3 6.5-6.9.1-6.9-5.2-6.8-7.5z" id=path6783 fill=none class=g6_1 stroke-width=.458><path id=path6785 class=g5_1 d="M2243.9 2286.8v-23.5h3v10.2h8.2v-10.2h3v23.5h-3v-10.7h-8.2v10.7z" fill=#010101><path stroke=#010101 d="M2243.9 2286.8v-23.5h3v10.2h8.2v-10.2h3v23.5h-3v-10.7h-8.2v10.7z" id=path6787 fill=none class=g6_1 stroke-width=.458><path id=path6789 class=g5_1 d="M2264.8 2286.8v-23.5h12.1v2.6h-9.1v7.6h8.5v2.6h-8.5v8.1h9.3v2.6z" fill=#010101><path stroke=#010101 d="M2264.8 2286.8v-23.5h12.1v2.6h-9.1v7.6h8.5v2.6h-8.5v8.1h9.3v2.6z" id=path6791 fill=none class=g6_1 stroke-width=.458><path id=path6793 class=g5_1 d="M2286 2273.4h4.5c2.1 0 3.1-1.8 3.1-3.9 0-1.7-.8-3.6-3.1-3.6h-4.5zm0 2.6v10.8h-3v-23.5h8.1c4.1 0 5.6 3 5.6 5.9 0 2.8-1.5 4.9-4.3 5.4 2.7.4 3.7 1.4 3.8 6.1.1 1 .4 4.6.9 6.1h-3.2c-.8-1.6-.6-4.7-.9-7.8-.2-2.9-2.5-3-3.5-3z" fill=#010101><path stroke=#010101 d="M2286 2273.4h4.5c2.1 0 3.1-1.8 3.1-3.9 0-1.7-.8-3.6-3.1-3.6h-4.5zm0 2.6v10.8h-3v-23.5h8.1c4.1 0 5.6 3 5.6 5.9 0 2.8-1.5 4.9-4.3 5.4 2.7.4 3.7 1.4 3.8 6.1.1 1 .4 4.6.9 6.1h-3.2c-.8-1.6-.6-4.7-.9-7.8-.2-2.9-2.5-3-3.5-3z" id=path6795 fill=none class=g6_1 stroke-width=.458><path id=path6797 class=g5_1 d="M2306.3 2284.2h4.3c3.2 0 4.3-2.3 4.3-4 0-3.7-2.3-4.4-5.4-4.4h-3.2zm0-11h4.4c2.3 0 3.5-1.4 3.5-3.7 0-2-1.1-3.6-3.6-3.6h-4.3zm-2.9 13.6v-23.5h7.6c3.2 0 4.3 1.1 5.2 2.4.8 1.3 1 2.7 1 3.2 0 2.9-1 4.8-4.1 5.5v.2c3.4.4 4.8 2.4 4.8 5.6 0 6-4.3 6.6-7 6.6z" fill=#010101><path stroke=#010101 d="M2306.3 2284.2h4.3c3.2 0 4.3-2.3 4.3-4 0-3.7-2.3-4.4-5.4-4.4h-3.2zm0-11h4.4c2.3 0 3.5-1.4 3.5-3.7 0-2-1.1-3.6-3.6-3.6h-4.3zm-2.9 13.6v-23.5h7.6c3.2 0 4.3 1.1 5.2 2.4.8 1.3 1 2.7 1 3.2 0 2.9-1 4.8-4.1 5.5v.2c3.4.4 4.8 2.4 4.8 5.6 0 6-4.3 6.6-7 6.6z" id=path6799 fill=none class=g6_1 stroke-width=.458><path id=path6801 class=g5_1 d="M2327.1 2273.4h4.5c2.2 0 3.2-1.8 3.2-3.9 0-1.7-.8-3.6-3.1-3.6h-4.6zm0 2.6v10.8h-2.9v-23.5h8c4.2 0 5.7 3 5.7 5.9 0 2.8-1.6 4.9-4.3 5.4 2.7.4 3.7 1.4 3.8 6.1 0 1 .4 4.6.8 6.1h-3.1c-.8-1.6-.6-4.7-.9-7.8-.2-2.9-2.5-3-3.5-3z" fill=#010101><path stroke=#010101 d="M2327.1 2273.4h4.5c2.2 0 3.2-1.8 3.2-3.9 0-1.7-.8-3.6-3.1-3.6h-4.6zm0 2.6v10.8h-2.9v-23.5h8c4.2 0 5.7 3 5.7 5.9 0 2.8-1.6 4.9-4.3 5.4 2.7.4 3.7 1.4 3.8 6.1 0 1 .4 4.6.8 6.1h-3.1c-.8-1.6-.6-4.7-.9-7.8-.2-2.9-2.5-3-3.5-3z" id=path6803 fill=none class=g6_1 stroke-width=.458><path id=path6805 class=g5_1 d="M2354.9 2278.4v-8c0-4.9-3.4-5-4.4-5-.9 0-4.3.1-4.3 5v8c0 5.1 1.5 6.4 4.3 6.4 2.9 0 4.4-1.3 4.4-6.4m-11.7-.2v-7.7c0-4.7 2.4-7.6 7.3-7.6 5 0 7.4 2.9 7.4 7.6v7.7c0 6.5-2.4 9.1-7.4 9.1-4.9 0-7.3-2.6-7.3-9.1z" fill=#010101><path stroke=#010101 d="M2354.9 2278.4v-8c0-4.9-3.4-5-4.4-5-.9 0-4.3.1-4.3 5v8c0 5.1 1.5 6.4 4.3 6.4 2.9 0 4.4-1.3 4.4-6.4zm-11.7-.2v-7.7c0-4.7 2.4-7.6 7.3-7.6 5 0 7.4 2.9 7.4 7.6v7.7c0 6.5-2.4 9.1-7.4 9.1-4.9 0-7.3-2.6-7.3-9.1z" id=path6807 fill=none class=g6_1 stroke-width=.458><path id=path6809 class=g5_1 d="M2375.7 2278.4v-8c0-4.9-3.4-5-4.3-5-1 0-4.4.1-4.4 5v8c0 5.1 1.5 6.4 4.4 6.4 2.8 0 4.3-1.3 4.3-6.4m-11.7-.2v-7.7c0-4.7 2.4-7.6 7.4-7.6 4.9 0 7.3 2.9 7.3 7.6v7.7c0 6.5-2.4 9.1-7.3 9.1-5 0-7.4-2.6-7.4-9.1z" fill=#010101><path stroke=#010101 d="M2375.7 2278.4v-8c0-4.9-3.4-5-4.3-5-1 0-4.4.1-4.4 5v8c0 5.1 1.5 6.4 4.4 6.4 2.8 0 4.3-1.3 4.3-6.4zm-11.7-.2v-7.7c0-4.7 2.4-7.6 7.4-7.6 4.9 0 7.3 2.9 7.3 7.6v7.7c0 6.5-2.4 9.1-7.3 9.1-5 0-7.4-2.6-7.4-9.1z" id=path6811 fill=none class=g6_1 stroke-width=.458><path id=path6813 class=g5_1 d="M2384.9 2286.8v-23.5h3v10.3h.1l8.2-10.3h3.4l-8.5 10.6 9 12.9h-3.9l-8.2-12.2h-.1v12.2z" fill=#010101><path stroke=#010101 d="M2384.9 2286.8v-23.5h3v10.3h.1l8.2-10.3h3.4l-8.5 10.6 9 12.9h-3.9l-8.2-12.2h-.1v12.2z" id=path6815 fill=none class=g6_1 stroke-width=.458><path id=path6817 class=g5_1 d="M2404.9 2286.8v-23.5h12.1v2.6h-9.1v7.6h8.5v2.6h-8.5v8.1h9.3v2.6z" fill=#010101><path stroke=#010101 d="M2404.9 2286.8v-23.5h12.1v2.6h-9.1v7.6h8.5v2.6h-8.5v8.1h9.3v2.6z" id=path6819 fill=none class=g6_1 stroke-width=.458><path id=path6821 class=g5_1 d="M1373 1400.1v.6c0 3.2 2.1 4.2 4 4.2 2.3 0 4.2-1 4.2-3.8 0-5.2-10.6-4.6-10.6-11.6 0-4.2 3-6.4 6.9-6.4 4.3 0 6.7 2.1 6.5 6.8h-3.1c0-2.5-.8-4.2-3.6-4.2-1.8 0-3.6.9-3.6 3.4 0 5.2 10.5 4.5 10.5 11.9 0 4.9-3.4 6.5-7.3 6.5-6.9.1-6.9-5.2-6.8-7.4z" fill=#010101><path stroke=#010101 d="M1373 1400.1v.6c0 3.2 2.1 4.2 4 4.2 2.3 0 4.2-1 4.2-3.8 0-5.2-10.6-4.6-10.6-11.6 0-4.2 3-6.4 6.9-6.4 4.3 0 6.7 2.1 6.5 6.8h-3.1c0-2.5-.8-4.2-3.6-4.2-1.8 0-3.6.9-3.6 3.4 0 5.2 10.5 4.5 10.5 11.9 0 4.9-3.4 6.5-7.3 6.5-6.9.1-6.9-5.2-6.8-7.4z" id=path6823 fill=none class=g6_1 stroke-width=.458><path id=path6825 class=g5_1 d="m1397.2 1386.3-3.7 12.6h7.5zm-1.8-2.7h3.8l7.6 23.4h-3.3l-1.7-5.5h-9.1l-1.7 5.5h-3z" fill=#010101><path stroke=#010101 d="m1397.2 1386.3-3.7 12.6h7.5zm-1.8-2.7h3.8l7.6 23.4h-3.3l-1.7-5.5h-9.1l-1.7 5.5h-3z" id=path6827 fill=none class=g6_1 stroke-width=.458><path id=path6829 class=g5_1 d="M1414.6 1407h-3v-23.4h3z" fill=#010101><path stroke=#010101 d="M1414.6 1407h-3v-23.4h3z" id=path6831 fill=none class=g6_1 stroke-width=.458><path id=path6833 class=g5_1 d="M1437.8 1383.6v23.4h-4.1l-9.2-20.3h-.1v20.3h-2.6v-23.4h4.2l9.1 20.1h.1v-20.1z" fill=#010101><path stroke=#010101 d="M1437.8 1383.6v23.4h-4.1l-9.2-20.3h-.1v20.3h-2.6v-23.4h4.2l9.1 20.1h.1v-20.1z" id=path6835 fill=none class=g6_1 stroke-width=.458><path id=path6837 class=g5_1 d="M1458.1 1383.6v2.6h-6.2v20.8h-3v-20.8h-6.2v-2.6z" fill=#010101><path stroke=#010101 d="M1458.1 1383.6v2.6h-6.2v20.8h-3v-20.8h-6.2v-2.6z" id=path6839 fill=none class=g6_1 stroke-width=.458><path id=path6841 class=g5_1 d="M1460 1393.8h7.2v2.5h-7.2z" fill=#010101><path stroke=#010101 d="M1460 1393.8h7.2v2.5h-7.2z" id=path6843 fill=none class=g6_1 stroke-width=.458><path id=path6845 class=g5_1 d="M1475.8 1407h-2.8v-23.4h4.8l5.9 19.7h.1l6-19.7h4.9v23.4h-3v-20.8l-6.6 20.8h-2.8l-6.5-20.8z" fill=#010101><path stroke=#010101 d="M1475.8 1407h-2.8v-23.4h4.8l5.9 19.7h.1l6-19.7h4.9v23.4h-3v-20.8l-6.6 20.8h-2.8l-6.5-20.8z" id=path6847 fill=none class=g6_1 stroke-width=.458><path id=path6849 class=g5_1 d="M1504.7 1407h-3v-23.4h3z" fill=#010101><path stroke=#010101 d="M1504.7 1407h-3v-23.4h3z" id=path6851 fill=none class=g6_1 stroke-width=.458><path id=path6853 class=g5_1 d="M1522 1390c0-1.3-.1-2.6-.7-3.4-.6-.7-2-1-2.6-1-2.5 0-3.5 1.5-3.6 1.8s-.7.9-.7 4.9v6.3c0 5.7 1.9 6.4 4.2 6.4.9 0 3.7-.3 3.7-4.9h3.1c.1 7.4-5.1 7.4-6.6 7.4-2.9 0-7.4-.2-7.4-9.3v-6.6c0-6.6 2.9-8.5 7.5-8.5 4.7 0 6.5 2.4 6.2 6.9z" fill=#010101><path stroke=#010101 d="M1522 1390c0-1.3-.1-2.6-.7-3.4-.6-.7-2-1-2.6-1-2.5 0-3.5 1.5-3.6 1.8s-.7.9-.7 4.9v6.3c0 5.7 1.9 6.4 4.2 6.4.9 0 3.7-.3 3.7-4.9h3.1c.1 7.4-5.1 7.4-6.6 7.4-2.9 0-7.4-.2-7.4-9.3v-6.6c0-6.6 2.9-8.5 7.5-8.5 4.7 0 6.5 2.4 6.2 6.9z" id=path6855 fill=none class=g6_1 stroke-width=.458><path id=path6857 class=g5_1 d="M1531.5 1407v-23.4h3v10.1h8.2v-10.1h3v23.4h-3v-10.7h-8.2v10.7z" fill=#010101><path stroke=#010101 d="M1531.5 1407v-23.4h3v10.1h8.2v-10.1h3v23.4h-3v-10.7h-8.2v10.7z" id=path6859 fill=none class=g6_1 stroke-width=.458><path id=path6861 class=g5_1 d="M1552.5 1407v-23.4h12.1v2.6h-9.1v7.5h8.4v2.6h-8.4v8.1h9.3v2.6z" fill=#010101><path stroke=#010101 d="M1552.5 1407v-23.4h12.1v2.6h-9.1v7.5h8.4v2.6h-8.4v8.1h9.3v2.6z" id=path6863 fill=none class=g6_1 stroke-width=.458><path id=path6865 class=g5_1 d="M1570.4 1407v-23.4h3v20.8h8.6v2.6z" fill=#010101><path stroke=#010101 d="M1570.4 1407v-23.4h3v20.8h8.6v2.6z" id=path6867 fill=none class=g6_1 stroke-width=.458><path id=path6869 class=g5_1 d="M1403.4 2765.6v-23.5h3v20.9h8.6v2.6z" fill=#010101><path stroke=#010101 d="M1403.4 2765.6v-23.5h3v20.9h8.6v2.6z" id=path6871 fill=none class=g6_1 stroke-width=.458><path id=path6873 class=g5_1 d="M1423.1 2765.6h-2.9v-23.5h2.9z" fill=#010101><path stroke=#010101 d="M1423.1 2765.6h-2.9v-23.5h2.9z" id=path6875 fill=none class=g6_1 stroke-width=.458><path id=path6877 class=g5_1 d="M1441.7 2757.2v-8c0-4.9-3.4-5-4.3-5-1 0-4.3.1-4.3 5v8c0 5.1 1.4 6.4 4.3 6.4 2.8 0 4.3-1.3 4.3-6.4m-11.7-.2v-7.7c0-4.7 2.4-7.6 7.4-7.6 4.9 0 7.4 2.9 7.4 7.6v7.7c0 6.5-2.5 9.1-7.4 9.1-5 0-7.4-2.6-7.4-9.1z" fill=#010101><path stroke=#010101 d="M1441.7 2757.2v-8c0-4.9-3.4-5-4.3-5-1 0-4.3.1-4.3 5v8c0 5.1 1.4 6.4 4.3 6.4 2.8 0 4.3-1.3 4.3-6.4zm-11.7-.2v-7.7c0-4.7 2.4-7.6 7.4-7.6 4.9 0 7.4 2.9 7.4 7.6v7.7c0 6.5-2.5 9.1-7.4 9.1-5 0-7.4-2.6-7.4-9.1z" id=path6879 fill=none class=g6_1 stroke-width=.458><path id=path6881 class=g5_1 d="M1467.5 2742.1v23.5h-4.1l-9.3-20.3v20.3h-2.7v-23.5h4.2l9.2 20.1v-20.1z" fill=#010101><path stroke=#010101 d="M1467.5 2742.1v23.5h-4.1l-9.3-20.3v20.3h-2.7v-23.5h4.2l9.2 20.1v-20.1z" id=path6883 fill=none class=g6_1 stroke-width=.458><path id=path6885 class=g5_1 d="M1474.2 2765.6v-23.5h12.1v2.6h-9.1v7.6h8.5v2.6h-8.5v8.1h9.3v2.6z" fill=#010101><path stroke=#010101 d="M1474.2 2765.6v-23.5h12.1v2.6h-9.1v7.6h8.5v2.6h-8.5v8.1h9.3v2.6z" id=path6887 fill=none class=g6_1 stroke-width=.458><path id=path6889 class=g5_1 d="M1492.4 2765.6v-23.5h3v20.9h8.6v2.6z" fill=#010101><path stroke=#010101 d="M1492.4 2765.6v-23.5h3v20.9h8.6v2.6z" id=path6891 fill=none class=g6_1 stroke-width=.458><path id=path6893 class=g5_1 d="M1505.4 2752.3h7.1v2.5h-7.1z" fill=#010101><path stroke=#010101 d="M1505.4 2752.3h7.1v2.5h-7.1z" id=path6895 fill=none class=g6_1 stroke-width=.458><path id=path6897 class=g5_1 d="M1529.6 2748.4c0-2.7-1.2-4.2-4.2-4.2-.9 0-4.3.1-4.3 5v8c0 5.1 1.5 6.4 4.3 6.4 2.2 0 3.6-.6 4.2-1v-7.1h-4.3v-2.6h7.3v11.4c-1.9 1.1-4.2 1.8-7.2 1.8-5 0-7.4-2.6-7.4-9.1v-7.7c0-4.7 2.4-7.6 7.4-7.6 5.1 0 7.5 1.8 7.3 6.7z" fill=#010101><path stroke=#010101 d="M1529.6 2748.4c0-2.7-1.2-4.2-4.2-4.2-.9 0-4.3.1-4.3 5v8c0 5.1 1.5 6.4 4.3 6.4 2.2 0 3.6-.6 4.2-1v-7.1h-4.3v-2.6h7.3v11.4c-1.9 1.1-4.2 1.8-7.2 1.8-5 0-7.4-2.6-7.4-9.1v-7.7c0-4.7 2.4-7.6 7.4-7.6 5.1 0 7.5 1.8 7.3 6.7z" id=path6899 fill=none class=g6_1 stroke-width=.458><path id=path6901 class=g5_1 d="M1542.4 2752.2h4.5c2.1 0 3.2-1.8 3.2-3.9 0-1.7-.9-3.6-3.2-3.6h-4.5zm0 2.6v10.8h-3v-23.5h8.1c4.2 0 5.6 3 5.6 5.9 0 2.8-1.5 4.9-4.3 5.4 2.7.4 3.7 1.4 3.9 6.1 0 1 .3 4.6.8 6.1h-3.1c-.9-1.6-.7-4.7-.9-7.8-.3-2.9-2.6-3-3.6-3z" fill=#010101><path stroke=#010101 d="M1542.4 2752.2h4.5c2.1 0 3.2-1.8 3.2-3.9 0-1.7-.9-3.6-3.2-3.6h-4.5zm0 2.6v10.8h-3v-23.5h8.1c4.2 0 5.6 3 5.6 5.9 0 2.8-1.5 4.9-4.3 5.4 2.7.4 3.7 1.4 3.9 6.1 0 1 .3 4.6.8 6.1h-3.1c-.9-1.6-.7-4.7-.9-7.8-.3-2.9-2.6-3-3.6-3z" id=path6903 fill=none class=g6_1 stroke-width=.458><path id=path6905 class=g5_1 d="M1570.4 2757.2v-8c0-4.9-3.3-5-4.3-5-.9 0-4.3.1-4.3 5v8c0 5.1 1.5 6.4 4.3 6.4 2.9 0 4.3-1.3 4.3-6.4m-11.6-.2v-7.7c0-4.7 2.4-7.6 7.3-7.6 5 0 7.4 2.9 7.4 7.6v7.7c0 6.5-2.4 9.1-7.4 9.1-4.9 0-7.3-2.6-7.3-9.1z" fill=#010101><path stroke=#010101 d="M1570.4 2757.2v-8c0-4.9-3.3-5-4.3-5-.9 0-4.3.1-4.3 5v8c0 5.1 1.5 6.4 4.3 6.4 2.9 0 4.3-1.3 4.3-6.4zm-11.6-.2v-7.7c0-4.7 2.4-7.6 7.3-7.6 5 0 7.4 2.9 7.4 7.6v7.7c0 6.5-2.4 9.1-7.4 9.1-4.9 0-7.3-2.6-7.3-9.1z" id=path6907 fill=none class=g6_1 stroke-width=.458><path id=path6909 class=g5_1 d="M1579.3 2742.1h2.9v15.1c0 5.1 1.6 6.4 4.4 6.4 2.9 0 4.4-1.3 4.4-6.4v-15.1h3v14.9c0 6.5-2.4 9.1-7.4 9.1-4.9 0-7.3-2.6-7.3-9.1z" fill=#010101><path stroke=#010101 d="M1579.3 2742.1h2.9v15.1c0 5.1 1.6 6.4 4.4 6.4 2.9 0 4.4-1.3 4.4-6.4v-15.1h3v14.9c0 6.5-2.4 9.1-7.4 9.1-4.9 0-7.3-2.6-7.3-9.1z" id=path6911 fill=none class=g6_1 stroke-width=.458><path id=path6913 class=g5_1 d="M1600.5 2765.6v-23.5h3v20.9h8.6v2.6z" fill=#010101><path stroke=#010101 d="M1600.5 2765.6v-23.5h3v20.9h8.6v2.6z" id=path6915 fill=none class=g6_1 stroke-width=.458><path id=path6917 class=g5_1 d="M1632.9 2765.6h-3.6l-5.5-10-5.1 10h-3.3l6.8-12.1-6.4-11.4h3.4l4.8 9.1 4.9-9.1h3.3l-6.3 11.4z" fill=#010101><path stroke=#010101 d="M1632.9 2765.6h-3.6l-5.5-10-5.1 10h-3.3l6.8-12.1-6.4-11.4h3.4l4.8 9.1 4.9-9.1h3.3l-6.3 11.4z" id=path6919 fill=none class=g6_1 stroke-width=.458><path id=path6921 class=g5_1 d="M897.7 1696.7c.1 2.1-.2 5.2 2.9 5.2 3.2 0 3.3-2.7 3.3-5.6v-15.8h3v17.6c0 1.3 0 6.3-6.4 6.3-1.3 0-3.8-.4-5-2.3-.9-1.5-.9-3.6-.9-5.4z" fill=#010101><path stroke=#010101 d="M897.7 1696.7c.1 2.1-.2 5.2 2.9 5.2 3.2 0 3.3-2.7 3.3-5.6v-15.8h3v17.6c0 1.3 0 6.3-6.4 6.3-1.3 0-3.8-.4-5-2.3-.9-1.5-.9-3.6-.9-5.4z" id=path6923 fill=none class=g6_1 stroke-width=.458><path id=path6925 class=g5_1 d="M914.1 1703.9v-23.4h12.1v2.6h-9.1v7.5h8.5v2.6h-8.5v8.1h9.3v2.6z" fill=#010101><path stroke=#010101 d="M914.1 1703.9v-23.4h12.1v2.6h-9.1v7.5h8.5v2.6h-8.5v8.1h9.3v2.6z" id=path6927 fill=none class=g6_1 stroke-width=.458><path id=path6929 class=g5_1 d="M940.1 1683.2h-.1l-3.6 12.5h7.5zm-1.8-2.7h3.8l7.6 23.4h-3.3l-1.7-5.6h-9.1l-1.8 5.6h-3z" fill=#010101><path stroke=#010101 d="M940.1 1683.2h-.1l-3.6 12.5h7.5zm-1.8-2.7h3.8l7.6 23.4h-3.3l-1.7-5.6h-9.1l-1.8 5.6h-3z" id=path6931 fill=none class=g6_1 stroke-width=.458><path id=path6933 class=g5_1 d="M970.4 1680.5v23.4h-4.1l-9.3-20.3v20.3h-2.7v-23.4h4.2l9.1 20.1h.1v-20.1z" fill=#010101><path stroke=#010101 d="M970.4 1680.5v23.4h-4.1l-9.3-20.3v20.3h-2.7v-23.4h4.2l9.1 20.1h.1v-20.1z" id=path6935 fill=none class=g6_1 stroke-width=.458><path id=path6937 class=g5_1 d="M976.3 1690.7h7.1v2.5h-7.1z" fill=#010101><path stroke=#010101 d="M976.3 1690.7h7.1v2.5h-7.1z" id=path6939 fill=none class=g6_1 stroke-width=.458><path id=path6941 class=g5_1 d="M1001.1 1680.5v2.6h-6.2v20.8h-3v-20.8h-6.2v-2.6z" fill=#010101><path stroke=#010101 d="M1001.1 1680.5v2.6h-6.2v20.8h-3v-20.8h-6.2v-2.6z" id=path6943 fill=none class=g6_1 stroke-width=.458><path id=path6945 class=g5_1 d="M1011.2 1683.2h-.1l-3.7 12.5h7.5zm-1.9-2.7h3.8l7.7 23.4h-3.4l-1.7-5.6h-9l-1.8 5.6h-3z" fill=#010101><path stroke=#010101 d="M1011.2 1683.2h-.1l-3.7 12.5h7.5zm-1.9-2.7h3.8l7.7 23.4h-3.4l-1.7-5.6h-9l-1.8 5.6h-3z" id=path6947 fill=none class=g6_1 stroke-width=.458><path id=path6949 class=g5_1 d="M1025.8 1703.9v-23.4h3v20.8h8.6v2.6z" fill=#010101><path stroke=#010101 d="M1025.8 1703.9v-23.4h3v20.8h8.6v2.6z" id=path6951 fill=none class=g6_1 stroke-width=.458><path id=path6953 class=g5_1 d="M1053.2 1695.5v-7.9c0-4.9-3.4-5.1-4.3-5.1-1 0-4.4.2-4.4 5.1v7.9c0 5.1 1.5 6.4 4.4 6.4 2.8 0 4.3-1.3 4.3-6.4m-11.7-.1v-7.7c0-4.7 2.4-7.7 7.4-7.7 4.9 0 7.3 3 7.3 7.7v7.7c0 6.5-2.4 9-7.3 9-5 0-7.4-2.5-7.4-9z" fill=#010101><path stroke=#010101 d="M1053.2 1695.5v-7.9c0-4.9-3.4-5.1-4.3-5.1-1 0-4.4.2-4.4 5.1v7.9c0 5.1 1.5 6.4 4.4 6.4 2.8 0 4.3-1.3 4.3-6.4zm-11.7-.1v-7.7c0-4.7 2.4-7.7 7.4-7.7 4.9 0 7.3 3 7.3 7.7v7.7c0 6.5-2.4 9-7.3 9-5 0-7.4-2.5-7.4-9z" id=path6955 fill=none class=g6_1 stroke-width=.458><path id=path6957 class=g5_1 d="M1078.3 1680.5v23.4h-4.1l-9.2-20.3h-.1v20.3h-2.7v-23.4h4.3l9.1 20.1h.1v-20.1z" fill=#010101><path stroke=#010101 d="M1078.3 1680.5v23.4h-4.1l-9.2-20.3h-.1v20.3h-2.7v-23.4h4.3l9.1 20.1h.1v-20.1z" id=path6959 fill=none class=g6_1 stroke-width=.458><path id=path6961 class=g5_1 d="M1296.9 2156.7h4.2c3.2 0 4.3-2.3 4.3-4 0-3.8-2.3-4.4-5.3-4.4h-3.2zm0-11h4.3c2.4-.1 3.5-1.5 3.5-3.8 0-1.9-1.1-3.5-3.6-3.5h-4.2zm-3 13.6v-23.5h7.6c3.3 0 4.4 1.1 5.3 2.4.8 1.3.9 2.7.9 3.1 0 2.9-1 4.9-4 5.6v.1c3.3.4 4.8 2.4 4.8 5.7 0 6-4.4 6.6-7.1 6.6z" fill=#010101><path stroke=#010101 d="M1296.9 2156.7h4.2c3.2 0 4.3-2.3 4.3-4 0-3.8-2.3-4.4-5.3-4.4h-3.2zm0-11h4.3c2.4-.1 3.5-1.5 3.5-3.8 0-1.9-1.1-3.5-3.6-3.5h-4.2zm-3 13.6v-23.5h7.6c3.3 0 4.4 1.1 5.3 2.4.8 1.3.9 2.7.9 3.1 0 2.9-1 4.9-4 5.6v.1c3.3.4 4.8 2.4 4.8 5.7 0 6-4.4 6.6-7.1 6.6z" id=path6963 fill=none class=g6_1 stroke-width=.458><path id=path6965 class=g5_1 d="M1314.4 2159.3v-23.5h12.1v2.6h-9.1v7.5h8.5v2.6h-8.5v8.2h9.3v2.6z" fill=#010101><path stroke=#010101 d="M1314.4 2159.3v-23.5h12.1v2.6h-9.1v7.5h8.5v2.6h-8.5v8.2h9.3v2.6z" id=path6967 fill=none class=g6_1 stroke-width=.458><path id=path6969 class=g5_1 d="M1335.6 2145.9h4.4c2.2 0 3.2-1.9 3.2-3.9 0-1.7-.8-3.6-3.1-3.6h-4.5zm0 2.6v10.8h-3v-23.5h8.1c4.1 0 5.6 2.9 5.6 5.8 0 2.8-1.5 4.9-4.3 5.4v.1c2.7.4 3.7 1.3 3.8 6 .1 1 .4 4.7.8 6.2h-3.1c-.8-1.7-.6-4.7-.9-7.8-.2-2.9-2.5-3-3.5-3z" fill=#010101><path stroke=#010101 d="M1335.6 2145.9h4.4c2.2 0 3.2-1.9 3.2-3.9 0-1.7-.8-3.6-3.1-3.6h-4.5zm0 2.6v10.8h-3v-23.5h8.1c4.1 0 5.6 2.9 5.6 5.8 0 2.8-1.5 4.9-4.3 5.4v.1c2.7.4 3.7 1.3 3.8 6 .1 1 .4 4.7.8 6.2h-3.1c-.8-1.7-.6-4.7-.9-7.8-.2-2.9-2.5-3-3.5-3z" id=path6971 fill=none class=g6_1 stroke-width=.458><path id=path6973 class=g5_1 d="M1355.6 2145.9h4.5c2.1 0 3.1-1.9 3.1-3.9 0-1.7-.8-3.6-3.1-3.6h-4.5zm0 2.6v10.8h-3v-23.5h8.1c4.1 0 5.6 2.9 5.6 5.8 0 2.8-1.5 4.9-4.3 5.4v.1c2.7.4 3.7 1.3 3.8 6 .1 1 .4 4.7.9 6.2h-3.2c-.8-1.7-.6-4.7-.9-7.8-.2-2.9-2.5-3-3.5-3z" fill=#010101><path stroke=#010101 d="M1355.6 2145.9h4.5c2.1 0 3.1-1.9 3.1-3.9 0-1.7-.8-3.6-3.1-3.6h-4.5zm0 2.6v10.8h-3v-23.5h8.1c4.1 0 5.6 2.9 5.6 5.8 0 2.8-1.5 4.9-4.3 5.4v.1c2.7.4 3.7 1.3 3.8 6 .1 1 .4 4.7.9 6.2h-3.2c-.8-1.7-.6-4.7-.9-7.8-.2-2.9-2.5-3-3.5-3z" id=path6975 fill=none class=g6_1 stroke-width=.458><path id=path6977 class=g5_1 d="M1376 2159.3h-2.9v-23.5h2.9z" fill=#010101><path stroke=#010101 d="M1376 2159.3h-2.9v-23.5h2.9z" id=path6979 fill=none class=g6_1 stroke-width=.458><path id=path6981 class=g5_1 d="M1382.2 2146.3h7.1v2.5h-7.1z" fill=#010101><path stroke=#010101 d="M1382.2 2146.3h7.1v2.5h-7.1z" id=path6983 fill=none class=g6_1 stroke-width=.458><path id=path6985 class=g5_1 d="M1395 2135.8h3v15c0 5.1 1.6 6.4 4.4 6.4s4.4-1.3 4.4-6.4v-15h3v14.9c0 6.5-2.4 9-7.4 9s-7.4-2.5-7.4-9z" fill=#010101><path stroke=#010101 d="M1395 2135.8h3v15c0 5.1 1.6 6.4 4.4 6.4s4.4-1.3 4.4-6.4v-15h3v14.9c0 6.5-2.4 9-7.4 9s-7.4-2.5-7.4-9z" id=path6987 fill=none class=g6_1 stroke-width=.458><path id=path6989 class=g5_1 d="M1427.4 2150.8v-7.9c0-4.9-3.4-5.1-4.4-5.1-.9 0-4.3.2-4.3 5.1v7.9c0 3.9.9 6 4.4 6s4.3-2.1 4.3-6m-11.7-7.8c0-4.7 2.4-7.7 7.3-7.7 5 0 7.4 3 7.4 7.7v7.7c0 1.7-.7 5.8-2 6.4v.1c.5-.2 1.6-.5 2.1-.5h2.3v2.6h-9.7c-3.2 0-7.4-.2-7.4-8.6z" fill=#010101><path stroke=#010101 d="M1427.4 2150.8v-7.9c0-4.9-3.4-5.1-4.4-5.1-.9 0-4.3.2-4.3 5.1v7.9c0 3.9.9 6 4.4 6s4.3-2.1 4.3-6zm-11.7-7.8c0-4.7 2.4-7.7 7.3-7.7 5 0 7.4 3 7.4 7.7v7.7c0 1.7-.7 5.8-2 6.4v.1c.5-.2 1.6-.5 2.1-.5h2.3v2.6h-9.7c-3.2 0-7.4-.2-7.4-8.6z" id=path6991 fill=none class=g6_1 stroke-width=.458><path id=path6993 class=g5_1 d="m1445.5 2138.6-3.7 12.5h7.5zm-1.8-2.8h3.8l7.6 23.5h-3.3l-1.7-5.6h-9.1l-1.7 5.6h-3z" fill=#010101><path stroke=#010101 d="m1445.5 2138.6-3.7 12.5h7.5zm-1.8-2.8h3.8l7.6 23.5h-3.3l-1.7-5.6h-9.1l-1.7 5.6h-3z" id=path6995 fill=none class=g6_1 stroke-width=.458><path id=path6997 class=g5_1 d="M1462.4 2159.3h-2.8v-23.5h4.8l6 19.7 6-19.7h4.9v23.5h-3v-20.9l-6.6 20.9h-2.8l-6.4-20.9h-.1z" fill=#010101><path stroke=#010101 d="M1462.4 2159.3h-2.8v-23.5h4.8l6 19.7 6-19.7h4.9v23.5h-3v-20.9l-6.6 20.9h-2.8l-6.4-20.9h-.1z" id=path6999 fill=none class=g6_1 stroke-width=.458><path id=path7001 class=g5_1 d="M308.1 1998.7c.1-1.3 0-2.7-.6-3.4-.7-.8-2.1-1-2.7-1-2.4 0-3.4 1.5-3.5 1.8-.1.2-.7.8-.7 4.9v6.2c0 5.8 1.9 6.5 4.2 6.5.9 0 3.7-.4 3.7-4.9h3.1c.1 7.4-5.1 7.4-6.6 7.4-3 0-7.5-.2-7.5-9.3v-6.7c0-6.6 3-8.5 7.6-8.5s6.4 2.4 6.1 7z" fill=#010101><path stroke=#010101 d="M308.1 1998.7c.1-1.3 0-2.7-.6-3.4-.7-.8-2.1-1-2.7-1-2.4 0-3.4 1.5-3.5 1.8-.1.2-.7.8-.7 4.9v6.2c0 5.8 1.9 6.5 4.2 6.5.9 0 3.7-.4 3.7-4.9h3.1c.1 7.4-5.1 7.4-6.6 7.4-3 0-7.5-.2-7.5-9.3v-6.7c0-6.6 3-8.5 7.6-8.5s6.4 2.4 6.1 7z" id=path7003 fill=none class=g6_1 stroke-width=.458><path id=path7005 class=g5_1 d="M328.8 2007.2v-7.9c0-4.9-3.4-5.1-4.3-5.1-1 0-4.4.2-4.4 5.1v7.9c0 5.2 1.5 6.5 4.4 6.5 2.8 0 4.3-1.3 4.3-6.5m-4.3-20.5-2.2 3h-2.6l3.3-4.5h3l3.2 4.5h-2.6zm-7.4 20.4v-7.7c0-4.7 2.4-7.7 7.4-7.7 4.9 0 7.3 3 7.3 7.7v7.7c0 6.5-2.4 9.1-7.3 9.1-5 0-7.4-2.6-7.4-9.1z" fill=#010101><path stroke=#010101 d="M328.8 2007.2v-7.9c0-4.9-3.4-5.1-4.3-5.1-1 0-4.4.2-4.4 5.1v7.9c0 5.2 1.5 6.5 4.4 6.5 2.8 0 4.3-1.3 4.3-6.5zm-4.3-20.5-2.2 3h-2.6l3.3-4.5h3l3.2 4.5h-2.6zm-7.4 20.4v-7.7c0-4.7 2.4-7.7 7.4-7.7 4.9 0 7.3 3 7.3 7.7v7.7c0 6.5-2.4 9.1-7.3 9.1-5 0-7.4-2.6-7.4-9.1z" id=path7007 fill=none class=g6_1 stroke-width=.458><path id=path7009 class=g5_1 d="M351.2 1992.2v2.6H345v20.9h-3v-20.9h-6.2v-2.6z" fill=#010101><path stroke=#010101 d="M351.2 1992.2v2.6H345v20.9h-3v-20.9h-6.2v-2.6z" id=path7011 fill=none class=g6_1 stroke-width=.458><path id=path7013 class=g5_1 d="M356.2 2015.7v-23.5h12.1v2.6h-9.1v7.6h8.4v2.6h-8.4v8.1h9.3v2.6z" fill=#010101><path stroke=#010101 d="M356.2 2015.7v-23.5h12.1v2.6h-9.1v7.6h8.4v2.6h-8.4v8.1h9.3v2.6z" id=path7015 fill=none class=g6_1 stroke-width=.458><path id=path7017 class=g5_1 d="M373.3 2002.4h7.1v2.5h-7.1z" fill=#010101><path stroke=#010101 d="M373.3 2002.4h7.1v2.5h-7.1z" id=path7019 fill=none class=g6_1 stroke-width=.458><path id=path7021 class=g5_1 d="M393.1 2015.7h-3.6l-6.8-23.5h3.2l5.4 20.7h.1l5.5-20.7h3z" fill=#010101><path stroke=#010101 d="M393.1 2015.7h-3.6l-6.8-23.5h3.2l5.4 20.7h.1l5.5-20.7h3z" id=path7023 fill=none class=g6_1 stroke-width=.458><path id=path7025 class=g5_1 d="M405.2 2015.7v-23.5h12.1v2.6h-9.1v7.6h8.5v2.6h-8.5v8.1h9.3v2.6z" fill=#010101><path stroke=#010101 d="M405.2 2015.7v-23.5h12.1v2.6h-9.1v7.6h8.5v2.6h-8.5v8.1h9.3v2.6z" id=path7027 fill=none class=g6_1 stroke-width=.458><path id=path7029 class=g5_1 d="M426.4 2002.3h4.4c2.2 0 3.2-1.9 3.2-3.9 0-1.7-.8-3.6-3.1-3.6h-4.5zm0 2.6v10.8h-3v-23.5h8.1c4.1 0 5.6 2.9 5.6 5.9 0 2.7-1.5 4.8-4.3 5.3v.1c2.7.4 3.7 1.3 3.8 6 .1 1 .4 4.7.8 6.2h-3.1c-.8-1.6-.6-4.7-.9-7.8-.2-2.9-2.5-3-3.5-3z" fill=#010101><path stroke=#010101 d="M426.4 2002.3h4.4c2.2 0 3.2-1.9 3.2-3.9 0-1.7-.8-3.6-3.1-3.6h-4.5zm0 2.6v10.8h-3v-23.5h8.1c4.1 0 5.6 2.9 5.6 5.9 0 2.7-1.5 4.8-4.3 5.3v.1c2.7.4 3.7 1.3 3.8 6 .1 1 .4 4.7.8 6.2h-3.1c-.8-1.6-.6-4.7-.9-7.8-.2-2.9-2.5-3-3.5-3z" id=path7031 fill=none class=g6_1 stroke-width=.458><path id=path7033 class=g5_1 d="M456.3 1992.2v2.6h-6.2v20.9h-3v-20.9H441v-2.6z" fill=#010101><path stroke=#010101 d="M456.3 1992.2v2.6h-6.2v20.9h-3v-20.9H441v-2.6z" id=path7035 fill=none class=g6_1 stroke-width=.458><path id=path7037 class=g5_1 d="M461.9 1992.2h3v15c0 5.2 1.5 6.5 4.4 6.5 2.8 0 4.3-1.3 4.3-6.5v-15h3v14.9c0 6.5-2.4 9.1-7.3 9.1-5 0-7.4-2.6-7.4-9.1z" fill=#010101><path stroke=#010101 d="M461.9 1992.2h3v15c0 5.2 1.5 6.5 4.4 6.5 2.8 0 4.3-1.3 4.3-6.5v-15h3v14.9c0 6.5-2.4 9.1-7.3 9.1-5 0-7.4-2.6-7.4-9.1z" id=path7039 fill=none class=g6_1 stroke-width=.458><path id=path7041 class=g15_1 d="M519.2 1194.6c0 1.3-1.1 2.3-2.4 2.3H110.5c-1.3 0-2.3-1-2.3-2.3v-53.9c0-1.2 1-2.3 2.3-2.3h406.3c1.3 0 2.4 1.1 2.4 2.3z" fill=#f2f2f3><path id=path7043 class=g19_1 d="M152 1167.4c0-8-6.5-14.6-14.6-14.6s-14.6 6.6-14.6 14.6c0 8.1 6.5 14.7 14.6 14.7s14.6-6.6 14.6-14.7z" fill=#f58220><path id=path7045 class=g5_1 d="M169.7 1178.4h-2.8v-23.5h4.8l5.9 19.7h.1l6-19.7h4.9v23.5h-3v-20.9l-6.6 20.9h-2.8l-6.5-20.9z" fill=#010101><path stroke=#010101 d="M169.7 1178.4h-2.8v-23.5h4.8l5.9 19.7h.1l6-19.7h4.9v23.5h-3v-20.9l-6.6 20.9h-2.8l-6.5-20.9z" id=path7047 fill=none class=g6_1 stroke-width=.458><path id=path7049 class=g5_1 d="M206.8 1169.9v-7.9c0-4.9-3.4-5.1-4.3-5.1-1 0-4.3.2-4.3 5.1v7.9c0 5.2 1.5 6.5 4.3 6.5s4.3-1.3 4.3-6.5m-11.7-.1v-7.7c0-4.7 2.4-7.7 7.4-7.7s7.4 3 7.4 7.7v7.7c0 6.5-2.4 9.1-7.4 9.1s-7.4-2.6-7.4-9.1z" fill=#010101><path stroke=#010101 d="M206.8 1169.9v-7.9c0-4.9-3.4-5.1-4.3-5.1-1 0-4.3.2-4.3 5.1v7.9c0 5.2 1.5 6.5 4.3 6.5s4.3-1.3 4.3-6.5zm-11.7-.1v-7.7c0-4.7 2.4-7.7 7.4-7.7s7.4 3 7.4 7.7v7.7c0 6.5-2.4 9.1-7.4 9.1s-7.4-2.6-7.4-9.1z" id=path7051 fill=none class=g6_1 stroke-width=.458><path id=path7053 class=g5_1 d="M232.6 1154.9v23.5h-4.1l-9.2-20.4h-.1v20.4h-2.7v-23.5h4.2l9.2 20.1v-20.1z" fill=#010101><path stroke=#010101 d="M232.6 1154.9v23.5h-4.1l-9.2-20.4h-.1v20.4h-2.7v-23.5h4.2l9.2 20.1v-20.1z" id=path7055 fill=none class=g6_1 stroke-width=.458><path id=path7057 class=g5_1 d="M253.1 1154.9v2.6H247v20.9h-3v-20.9h-6.2v-2.6z" fill=#010101><path stroke=#010101 d="M253.1 1154.9v2.6H247v20.9h-3v-20.9h-6.2v-2.6z" id=path7059 fill=none class=g6_1 stroke-width=.458><path id=path7061 class=g5_1 d="M261.3 1178.4h-2.8v-23.5h4.9l5.9 19.7h.1l5.9-19.7h5v23.5h-3v-20.9h-.1l-6.5 20.9h-2.9l-6.4-20.9h-.1z" fill=#010101><path stroke=#010101 d="M261.3 1178.4h-2.8v-23.5h4.9l5.9 19.7h.1l5.9-19.7h5v23.5h-3v-20.9h-.1l-6.5 20.9h-2.9l-6.4-20.9h-.1z" id=path7063 fill=none class=g6_1 stroke-width=.458><path id=path7065 class=g5_1 d="M298.5 1169.9v-7.9c0-4.9-3.4-5.1-4.3-5.1-1 0-4.4.2-4.4 5.1v7.9c0 5.2 1.5 6.5 4.4 6.5 2.8 0 4.3-1.3 4.3-6.5m-11.7-.1v-7.7c0-4.7 2.4-7.7 7.4-7.7 4.9 0 7.3 3 7.3 7.7v7.7c0 6.5-2.4 9.1-7.3 9.1-5 0-7.4-2.6-7.4-9.1z" fill=#010101><path stroke=#010101 d="M298.5 1169.9v-7.9c0-4.9-3.4-5.1-4.3-5.1-1 0-4.4.2-4.4 5.1v7.9c0 5.2 1.5 6.5 4.4 6.5 2.8 0 4.3-1.3 4.3-6.5zm-11.7-.1v-7.7c0-4.7 2.4-7.7 7.4-7.7 4.9 0 7.3 3 7.3 7.7v7.7c0 6.5-2.4 9.1-7.3 9.1-5 0-7.4-2.6-7.4-9.1z" id=path7067 fill=none class=g6_1 stroke-width=.458><path id=path7069 class=g5_1 d="M311 1165h4.4c2.2 0 3.2-1.9 3.2-3.9 0-1.7-.8-3.6-3.1-3.6H311zm0 2.6v10.8h-3v-23.5h8.1c4.1 0 5.6 2.9 5.6 5.9 0 2.7-1.5 4.8-4.3 5.3v.1c2.7.4 3.7 1.3 3.8 6 .1 1 .4 4.7.8 6.2h-3.1c-.8-1.6-.6-4.7-.9-7.8-.2-2.9-2.5-3-3.5-3z" fill=#010101><path stroke=#010101 d="M311 1165h4.4c2.2 0 3.2-1.9 3.2-3.9 0-1.7-.8-3.6-3.1-3.6H311zm0 2.6v10.8h-3v-23.5h8.1c4.1 0 5.6 2.9 5.6 5.9 0 2.7-1.5 4.8-4.3 5.3v.1c2.7.4 3.7 1.3 3.8 6 .1 1 .4 4.7.8 6.2h-3.1c-.8-1.6-.6-4.7-.9-7.8-.2-2.9-2.5-3-3.5-3z" id=path7071 fill=none class=g6_1 stroke-width=.458><path id=path7073 class=g5_1 d="M327.7 1178.4v-23.5h12.1v2.6h-9.1v7.6h8.5v2.6h-8.5v8.1h9.3v2.6z" fill=#010101><path stroke=#010101 d="M327.7 1178.4v-23.5h12.1v2.6h-9.1v7.6h8.5v2.6h-8.5v8.1h9.3v2.6z" id=path7075 fill=none class=g6_1 stroke-width=.458><path id=path7077 class=g5_1 d="M361.5 1154.9v23.5h-4.1l-9.2-20.4h-.1v20.4h-2.7v-23.5h4.3l9.1 20.1h.1v-20.1z" fill=#010101><path stroke=#010101 d="M361.5 1154.9v23.5h-4.1l-9.2-20.4h-.1v20.4h-2.7v-23.5h4.3l9.1 20.1h.1v-20.1z" id=path7079 fill=none class=g6_1 stroke-width=.458><path id=path7081 class=g5_1 d="M378.6 1161.4c0-1.3-.1-2.7-.7-3.4-.6-.8-2-1-2.6-1-2.5 0-3.5 1.5-3.6 1.8-.1.2-.7.8-.7 4.9v6.2c0 5.8 1.9 6.5 4.2 6.5 1 0 3.7-.4 3.7-4.9h3.1c.2 7.4-5.1 7.4-6.6 7.4-2.9 0-7.4-.2-7.4-9.3v-6.7c0-6.6 2.9-8.5 7.5-8.5 4.7 0 6.5 2.4 6.2 7z" fill=#010101><path stroke=#010101 d="M378.6 1161.4c0-1.3-.1-2.7-.7-3.4-.6-.8-2-1-2.6-1-2.5 0-3.5 1.5-3.6 1.8-.1.2-.7.8-.7 4.9v6.2c0 5.8 1.9 6.5 4.2 6.5 1 0 3.7-.4 3.7-4.9h3.1c.2 7.4-5.1 7.4-6.6 7.4-2.9 0-7.4-.2-7.4-9.3v-6.7c0-6.6 2.9-8.5 7.5-8.5 4.7 0 6.5 2.4 6.2 7z" id=path7083 fill=none class=g6_1 stroke-width=.458><path id=path7085 class=g5_1 d="M398.6 1154.9h3l-6.4 14.5v9h-3v-9l-6.3-14.5h3.4l4.5 11.4z" fill=#010101><path stroke=#010101 d="M398.6 1154.9h3l-6.4 14.5v9h-3v-9l-6.3-14.5h3.4l4.5 11.4z" id=path7087 fill=none class=g6_1 stroke-width=.458><path id=path7089 class=g15_1 d="M810.2 2594.4c0 1.3-1.1 2.3-2.4 2.3H487c-1.2 0-2.3-1-2.3-2.3v-53.8c0-1.3 1.1-2.4 2.3-2.4h320.8c1.3 0 2.4 1.1 2.4 2.4z" fill=#f2f2f3><path id=path7091 class=g19_1 d="M528.6 2567.5c0-8.1-6.5-14.6-14.6-14.6s-14.6 6.5-14.6 14.6 6.5 14.6 14.6 14.6 14.6-6.5 14.6-14.6z" fill=#f58220><path id=path7093 class=g18_1 d="M572.5 2567.5c0-8.1-6.6-14.6-14.7-14.6s-14.6 6.5-14.6 14.6 6.5 14.6 14.6 14.6 14.7-6.5 14.7-14.6z" fill=#0072bc><path id=path7095 class=g5_1 d="M589.3 2572v.7c0 3.2 2 4.2 3.9 4.2 2.4 0 4.2-1 4.2-3.8 0-5.2-10.5-4.7-10.5-11.7 0-4.2 2.9-6.4 6.8-6.4 4.3 0 6.7 2.1 6.5 6.9h-3.1c.1-2.6-.8-4.3-3.6-4.3-1.8 0-3.6.9-3.6 3.5 0 5.1 10.5 4.4 10.5 11.8 0 5-3.4 6.6-7.2 6.6-7 0-7-5.3-6.9-7.5z" fill=#010101><path stroke=#010101 d="M589.3 2572v.7c0 3.2 2 4.2 3.9 4.2 2.4 0 4.2-1 4.2-3.8 0-5.2-10.5-4.7-10.5-11.7 0-4.2 2.9-6.4 6.8-6.4 4.3 0 6.7 2.1 6.5 6.9h-3.1c.1-2.6-.8-4.3-3.6-4.3-1.8 0-3.6.9-3.6 3.5 0 5.1 10.5 4.4 10.5 11.8 0 5-3.4 6.6-7.2 6.6-7 0-7-5.3-6.9-7.5z" id=path7097 fill=none class=g6_1 stroke-width=.458><path id=path7099 class=g5_1 d="M622.6 2555.5v23.5h-4.1l-9.3-20.4h-.1v20.4h-2.6v-23.5h4.2l9.1 20.1h.1v-20.1z" fill=#010101><path stroke=#010101 d="M622.6 2555.5v23.5h-4.1l-9.3-20.4h-.1v20.4h-2.6v-23.5h4.2l9.1 20.1h.1v-20.1z" id=path7101 fill=none class=g6_1 stroke-width=.458><path id=path7103 class=g5_1 d="M640.9 2570.5v-7.9c0-4.9-3.4-5.1-4.3-5.1-1 0-4.3.2-4.3 5.1v7.9c0 5.2 1.5 6.5 4.3 6.5s4.3-1.3 4.3-6.5m-11.7-.1v-7.7c0-4.7 2.4-7.7 7.4-7.7s7.4 3 7.4 7.7v7.7c0 6.5-2.4 9.1-7.4 9.1s-7.4-2.6-7.4-9.1z" fill=#010101><path stroke=#010101 d="M640.9 2570.5v-7.9c0-4.9-3.4-5.1-4.3-5.1-1 0-4.3.2-4.3 5.1v7.9c0 5.2 1.5 6.5 4.3 6.5s4.3-1.3 4.3-6.5zm-11.7-.1v-7.7c0-4.7 2.4-7.7 7.4-7.7s7.4 3 7.4 7.7v7.7c0 6.5-2.4 9.1-7.4 9.1s-7.4-2.6-7.4-9.1z" id=path7105 fill=none class=g6_1 stroke-width=.458><path id=path7107 class=g5_1 d="M648 2555.5h3.2l4.4 20.4h.1l4.7-20.4h3.9l4.2 20.4h.1l4.8-20.4h3.1l-6.2 23.5h-3.7l-4.4-20.4h-.1l-4.7 20.4h-3.7z" fill=#010101><path stroke=#010101 d="M648 2555.5h3.2l4.4 20.4h.1l4.7-20.4h3.9l4.2 20.4h.1l4.8-20.4h3.1l-6.2 23.5h-3.7l-4.4-20.4h-.1l-4.7 20.4h-3.7z" id=path7109 fill=none class=g6_1 stroke-width=.458><path id=path7111 class=g5_1 d="M684.7 2576.4h2.8c4.2 0 5.7-1.6 5.7-7v-4.8c0-4.7-1.5-6.5-4.6-6.5h-3.9zm-3-20.9h7.2c3 0 5.1 1.1 6.3 3.6.9 2 1 6.7 1 7.4 0 5-.4 7.9-1.4 9.5-1.3 2-3.6 3-7.7 3h-5.4z" fill=#010101><path stroke=#010101 d="M684.7 2576.4h2.8c4.2 0 5.7-1.6 5.7-7v-4.8c0-4.7-1.5-6.5-4.6-6.5h-3.9zm-3-20.9h7.2c3 0 5.1 1.1 6.3 3.6.9 2 1 6.7 1 7.4 0 5-.4 7.9-1.4 9.5-1.3 2-3.6 3-7.7 3h-5.4z" id=path7113 fill=none class=g6_1 stroke-width=.458><path id=path7115 class=g5_1 d="M713.7 2570.5v-7.9c0-4.9-3.4-5.1-4.3-5.1s-4.3.2-4.3 5.1v7.9c0 5.2 1.5 6.5 4.3 6.5s4.3-1.3 4.3-6.5m-11.7-.1v-7.7c0-4.7 2.4-7.7 7.4-7.7s7.4 3 7.4 7.7v7.7c0 6.5-2.4 9.1-7.4 9.1s-7.4-2.6-7.4-9.1z" fill=#010101><path stroke=#010101 d="M713.7 2570.5v-7.9c0-4.9-3.4-5.1-4.3-5.1s-4.3.2-4.3 5.1v7.9c0 5.2 1.5 6.5 4.3 6.5s4.3-1.3 4.3-6.5zm-11.7-.1v-7.7c0-4.7 2.4-7.7 7.4-7.7s7.4 3 7.4 7.7v7.7c0 6.5-2.4 9.1-7.4 9.1s-7.4-2.6-7.4-9.1z" id=path7117 fill=none class=g6_1 stroke-width=.458><path id=path7119 class=g5_1 d="M739.5 2555.5v23.5h-4.1l-9.2-20.4h-.1v20.4h-2.7v-23.5h4.3l9.1 20.1h.1v-20.1z" fill=#010101><path stroke=#010101 d="M739.5 2555.5v23.5h-4.1l-9.2-20.4h-.1v20.4h-2.7v-23.5h4.3l9.1 20.1h.1v-20.1z" id=path7121 fill=none class=g6_1 stroke-width=.458><path id=path7123 class=g5_1 fill=#010101 d="M1585.2 2155.2c-.9 0-1.7.8-1.7 1.7s.8 1.7 1.7 1.7c1 0 1.7-.8 1.7-1.7 0-1-.8-1.7-1.7-1.7m-18 3.4c.9 0 1.7-.8 1.7-1.7s-.8-1.7-1.7-1.7-1.7.7-1.7 1.7c0 .9.8 1.7 1.7 1.7m9-24.4h-9.7c-.6 0-.9.3-.9.8v.8c0 .3.3.7.9.7h19.6c.4 0 .7-.2.7-.6v-.9c0-.4-.3-.8-.7-.8zm9.8 19c.6 0 .8-.2.8-.8v-12.1c0-.6-.2-.8-.8-.8h-19.6c-.6 0-.8.2-.8.8v12.1c0 .5.2.8.8.8h19.6m3.8-13.7h.9c.6 0 .9.3.9.8v5c0 .5-.3.8-.8.8h-1v12.9c0 .4-.1.8-.4 1.1-.3.4-.7.6-1.2.6h-1.6v2.3c0 .5-.3.8-.8.8h-2.7c-.5 0-.8-.3-.8-.8V2160.7H1570v2.5c-.1.3-.3.6-.7.6h-2.8c-.4 0-.7-.3-.7-.7v-2.4h-1.6c-.8 0-1.4-.5-1.5-1.2-.1-.1-.1-.3-.1-.5v-12.9h-.8c-.7 0-.9-.2-.9-.9v-4.9c0-.5.2-.8.8-.8h.9v-6.4c0-.8.4-1.6 1.1-1.6h24.4c1.1 0 1.7.6 1.7 1.6v6.4z" fill-rule=evenodd><path id=path7125 class=g5_1 d="m2418.1 1316.4.1-.1h3.2c2.8 0 3.3 1.6 3.3 2.8 0 .9-.2 1.6-.7 2.1-.6.5-1.4.7-2.6.7h-3.2s-.1 0-.1-.1zm0 8.6c0-.1.1-.1.1-.1h3.6c2.1 0 3.7-.6 4.8-1.8 1-.9 1.5-2.3 1.5-3.9 0-1.2-.2-2.8-1.4-4-1.1-1.2-2.8-1.8-4.9-1.8h-6c-.8 0-1 .2-1 1v15.3c0 .8.2 1 1 1h1.3c.8 0 1-.2 1-1z" fill=#010101><path id=path7127 class=g5_1 d="M2420.4 1308.5c-1.8 0-3.5.4-5.1 1.1-1.6.6-3 1.6-4.2 2.8s-2.2 2.6-2.8 4.2c-.7 1.6-1 3.3-1 5.1s.3 3.5 1 5.1c.6 1.6 1.6 3 2.8 4.2s2.6 2.2 4.2 2.8c3.2 1.4 7 1.4 10.2 0 1.6-.6 3-1.6 4.2-2.8s2.2-2.6 2.8-4.2c.7-1.6 1.1-3.3 1.1-5.1s-.4-3.5-1.1-5.1c-.6-1.6-1.6-3-2.8-4.2s-2.6-2.2-4.2-2.8c-1.6-.7-3.3-1.1-5.1-1.1m0 28.6c-2.1 0-4.1-.4-6-1.2-1.8-.8-3.4-1.9-4.8-3.3-1.5-1.5-2.6-3.1-3.3-4.9-.8-1.9-1.3-3.9-1.3-6s.5-4.1 1.3-6c.7-1.8 1.8-3.5 3.3-4.9 1.4-1.4 3-2.5 4.8-3.3 3.8-1.6 8.2-1.6 12 0 1.8.8 3.5 1.9 4.9 3.3 1.4 1.5 2.5 3.1 3.3 4.9.8 1.9 1.2 3.9 1.2 6s-.4 4.1-1.2 6c-.8 1.8-1.9 3.4-3.3 4.9-1.4 1.4-3.1 2.5-4.9 3.3-1.9.8-3.9 1.2-6 1.2z" fill=#010101><path id=path7129 class=g5_1 d="m467.8 2325.5.1-.1h3.2c2.7 0 3.3 1.5 3.3 2.8 0 .9-.2 1.6-.7 2-.6.6-1.4.8-2.6.8h-3.2s-.1 0-.1-.1zm0 8.6c0-.1.1-.2.1-.2h3.6c2.1 0 3.7-.5 4.8-1.7 1-1 1.5-2.3 1.5-4 0-1.1-.2-2.7-1.4-3.9-1.1-1.2-2.8-1.8-4.9-1.8h-6c-.8 0-1 .2-1 1v15.3c0 .8.2 1 1 1h1.3c.8 0 1-.2 1-1z" fill=#010101><path id=path7131 class=g5_1 d="M470.1 2317.6c-1.8 0-3.5.4-5.1 1.1-1.6.6-3 1.6-4.2 2.8s-2.2 2.6-2.8 4.2c-.7 1.6-1.1 3.3-1.1 5.1s.4 3.5 1.1 5.1c.6 1.6 1.6 3 2.8 4.2s2.6 2.2 4.2 2.8c3.2 1.4 7 1.4 10.2 0 1.6-.6 3-1.6 4.2-2.8s2.2-2.6 2.8-4.2c.7-1.6 1.1-3.3 1.1-5.1s-.4-3.5-1.1-5.1c-.6-1.6-1.6-3-2.8-4.2s-2.6-2.2-4.2-2.8c-1.6-.7-3.3-1.1-5.1-1.1m0 28.5c-2.1 0-4.1-.4-6-1.2-1.8-.7-3.4-1.8-4.9-3.3-1.4-1.4-2.5-3-3.2-4.8-.9-1.9-1.3-3.9-1.3-6s.4-4.1 1.3-6c.7-1.8 1.8-3.5 3.3-4.9 1.4-1.4 3-2.5 4.8-3.3 3.8-1.6 8.2-1.6 12 0 1.8.8 3.5 1.9 4.9 3.3s2.5 3.1 3.3 4.9c.8 1.9 1.2 3.9 1.2 6s-.4 4.1-1.2 6c-.8 1.8-1.9 3.4-3.3 4.8-1.4 1.5-3.1 2.6-4.9 3.3-1.9.8-3.9 1.2-6 1.2z" fill=#010101><path id=path7133 class=g5_1 d="M1005.3 1230.4s0-.1.1-.1h3.2c2.7 0 3.3 1.5 3.3 2.8 0 .9-.3 1.6-.8 2.1s-1.4.7-2.5.7h-3.2q-.1 0-.1-.1zm0 8.6q0-.1.1-.1h3.5c2.2 0 3.8-.6 4.9-1.8 1-.9 1.5-2.3 1.5-3.9 0-1.2-.3-2.8-1.5-4-1.1-1.2-2.7-1.8-4.9-1.8h-6c-.7 0-1 .2-1 1v15.3c0 .8.3 1 1 1h1.4c.7 0 1-.2 1-1z" fill=#010101><path id=path7135 class=g5_1 d="M1007.6 1222.5c-1.8 0-3.5.4-5.2 1.1-1.5.6-2.9 1.6-4.1 2.8-1.3 1.2-2.2 2.6-2.9 4.2-.6 1.6-1 3.3-1 5.1s.4 3.5 1 5.1c.7 1.6 1.6 3 2.9 4.2 1.2 1.2 2.6 2.2 4.1 2.8 3.3 1.4 7 1.4 10.3 0 1.6-.6 3-1.6 4.2-2.8s2.1-2.6 2.8-4.2 1-3.3 1-5.1-.3-3.5-1-5.1-1.6-3-2.8-4.2-2.6-2.2-4.2-2.8c-1.6-.7-3.4-1.1-5.1-1.1m0 28.6c-2.1 0-4.1-.4-6-1.3-1.8-.7-3.5-1.8-4.9-3.2-1.4-1.5-2.5-3.1-3.3-4.9-.8-1.9-1.2-3.9-1.2-6s.4-4.1 1.2-6c.8-1.8 1.9-3.5 3.3-4.9s3.1-2.5 4.9-3.3c3.8-1.6 8.2-1.6 12 0 1.8.8 3.4 1.9 4.8 3.3s2.6 3.1 3.3 4.9c.8 1.9 1.2 3.9 1.2 6s-.4 4.1-1.2 6c-.7 1.8-1.9 3.4-3.3 4.9-1.4 1.4-3 2.5-4.8 3.2-1.9.9-4 1.3-6 1.3z" fill=#010101><path id=path7137 class=g5_1 d="M487.3 1160.9q0-.1.1-.1h3.7c3.1 0 3.8 1.8 3.8 3.2 0 1-.3 1.8-.9 2.4-.6.5-1.6.8-2.9.8h-3.7q-.1 0-.1-.1zm0 9.8s0-.1.1-.1h4.1c2.4 0 4.3-.7 5.6-2 1.1-1.1 1.7-2.7 1.7-4.5 0-1.3-.3-3.2-1.7-4.6-1.3-1.4-3.2-2.1-5.6-2.1h-6.9c-.9 0-1.2.3-1.2 1.2v17.6c0 .9.3 1.2 1.2 1.2h1.5c.9 0 1.2-.3 1.2-1.2z" fill=#010101><path id=path7139 class=g5_1 d="M489.9 1151.8c-2 0-4 .4-5.9 1.2-1.8.8-3.4 1.9-4.8 3.3s-2.5 3-3.2 4.8c-.8 1.9-1.2 3.8-1.2 5.9 0 2 .4 4 1.2 5.9.7 1.8 1.8 3.4 3.2 4.8s3 2.5 4.8 3.2c3.8 1.6 8.1 1.6 11.8 0 1.8-.7 3.4-1.8 4.8-3.2s2.5-3 3.2-4.8c.8-1.9 1.2-3.9 1.2-5.9 0-2.1-.4-4-1.2-5.9-.7-1.8-1.8-3.4-3.2-4.8s-3-2.5-4.8-3.3c-1.9-.8-3.9-1.2-5.9-1.2m0 32.8c-2.4 0-4.7-.4-6.9-1.4-2.1-.8-4-2.1-5.6-3.7-1.6-1.7-2.9-3.6-3.8-5.7s-1.3-4.4-1.3-6.8.4-4.7 1.3-6.9c.9-2.1 2.2-4 3.8-5.6s3.5-2.9 5.6-3.8c4.4-1.8 9.4-1.8 13.8 0 2.1.9 4 2.2 5.6 3.8s2.9 3.5 3.8 5.6c.9 2.2 1.4 4.5 1.4 6.9s-.5 4.7-1.4 6.9c-.9 2-2.2 3.9-3.8 5.6-1.6 1.6-3.5 2.9-5.6 3.7-2.2 1-4.5 1.4-6.9 1.4z" fill=#010101><path id=path7141 class=g5_1 d="M1111.6 3197.1c0-.1.1-.2.1-.2h3.7c3.1 0 3.8 1.8 3.8 3.3 0 1-.3 1.8-.9 2.3-.6.6-1.6.9-2.9.9h-3.7l-.1-.1zm0 9.8c0-.1.1-.2.1-.2h4.1c2.4 0 4.3-.6 5.6-1.9 1.1-1.2 1.7-2.7 1.7-4.6 0-1.3-.3-3.1-1.7-4.6-1.3-1.3-3.1-2-5.6-2h-6.9c-.9 0-1.2.2-1.2 1.1v17.6c0 .9.3 1.2 1.2 1.2h1.5c.9 0 1.2-.3 1.2-1.2z" fill=#010101><path id=path7143 class=g5_1 d="M1114.2 3188c-2 0-4 .4-5.9 1.2-1.8.7-3.4 1.8-4.8 3.2s-2.4 3-3.2 4.8c-.8 1.9-1.2 3.9-1.2 5.9 0 2.1.4 4 1.2 5.9.8 1.8 1.8 3.4 3.2 4.8s3 2.5 4.8 3.3c3.8 1.5 8.1 1.5 11.8 0 1.8-.8 3.4-1.9 4.8-3.3s2.5-3 3.3-4.8c.8-1.9 1.2-3.8 1.2-5.9 0-2-.4-4-1.2-5.9-.8-1.8-1.9-3.4-3.3-4.8s-3-2.5-4.8-3.2c-1.8-.8-3.8-1.2-5.9-1.2m0 32.8c-2.3 0-4.7-.5-6.8-1.4s-4-2.2-5.6-3.8c-1.7-1.6-2.9-3.5-3.8-5.6-1-2.2-1.4-4.5-1.4-6.9s.4-4.7 1.4-6.9c.9-2.1 2.1-3.9 3.8-5.6 1.6-1.6 3.5-2.9 5.6-3.7 4.3-1.9 9.3-1.9 13.7 0 2.1.8 4 2.1 5.6 3.7 1.6 1.7 2.9 3.5 3.8 5.6.9 2.2 1.4 4.5 1.4 6.9s-.5 4.7-1.4 6.9c-.9 2.1-2.2 4-3.8 5.6s-3.5 2.9-5.6 3.8c-2.2.9-4.5 1.4-6.9 1.4z" fill=#010101><path id=path7145 class=g5_1 d="m2445.5 2269.8.1-.1h3.2c2.7 0 3.3 1.6 3.3 2.8 0 .9-.2 1.6-.7 2.1-.6.5-1.4.7-2.6.7h-3.2s-.1 0-.1-.1zm0 8.6c0-.1.1-.1.1-.1h3.6c2.1 0 3.7-.6 4.8-1.7 1-1 1.5-2.4 1.5-4 0-1.2-.3-2.8-1.4-4s-2.8-1.8-4.9-1.8h-6c-.8 0-1 .2-1 1v15.3c0 .8.2 1 1 1h1.3c.8 0 1-.2 1-1z" fill=#010101><path id=path7147 class=g5_1 d="M2447.8 2261.9c-1.8 0-3.5.4-5.1 1.1-1.6.6-3 1.6-4.2 2.8s-2.2 2.6-2.8 4.2c-.7 1.6-1.1 3.3-1.1 5.1s.4 3.5 1.1 5.1c.6 1.6 1.6 3 2.8 4.2s2.6 2.2 4.2 2.8c3.2 1.4 7 1.4 10.2 0 1.6-.6 3-1.6 4.2-2.8s2.2-2.6 2.8-4.2c.7-1.6 1.1-3.3 1.1-5.1s-.4-3.5-1.1-5.1c-.6-1.6-1.6-3-2.8-4.2s-2.6-2.2-4.2-2.8c-1.6-.7-3.3-1.1-5.1-1.1m0 28.6c-2.1 0-4.1-.4-6-1.2-1.8-.8-3.5-1.9-4.9-3.3s-2.5-3.1-3.3-4.9c-.8-1.9-1.2-3.9-1.2-6s.4-4.1 1.3-6c.7-1.8 1.8-3.4 3.2-4.9 1.4-1.4 3.1-2.5 4.9-3.2 3.8-1.7 8.2-1.7 12 0 1.8.7 3.5 1.8 4.9 3.2 1.4 1.5 2.5 3.1 3.3 4.9.8 1.9 1.2 3.9 1.2 6s-.4 4.1-1.2 6c-.8 1.8-1.9 3.5-3.3 4.9s-3.1 2.5-4.9 3.3c-1.9.8-3.9 1.2-6 1.2z" fill=#010101><path id=path7149 class=g5_1 d="M818.9 1200h-21.7c-1.6 0-2.8-1.2-2.8-2.8v-21.7c0-1.6 1.2-2.9 2.8-2.9h21.7c1.6 0 2.8 1.3 2.8 2.9v8.2h-1.5c-.2 0-.3.2-.3.3v4.7c0 .1.1.2.3.2h1.5v8.3c0 1.6-1.2 2.8-2.8 2.8m0-29h-21.7c-2.5 0-4.5 2-4.5 4.5v21.7c0 2.5 2 4.5 4.5 4.5h21.7c2.5 0 4.5-2 4.5-4.5v-21.7c0-2.5-2-4.5-4.5-4.5z" fill=#010101><path id=path7151 class=g5_1 d="M817.3 1181.3c0-1-1-1.8-1.9-1.8h-5.2c-.9 0-1.9.8-1.9 1.8v6.3c0 .5.4.8.9.8.4 0 .8-.3.8-.8v-5.7c0-.1.1-.2.3-.2.1 0 .2.1.2.3v15.1c0 .5.5 1 1 1 .6 0 1-.5 1-1v-8.7c0-.1.2-.3.3-.3.2 0 .3.1.3.3v8.7c0 .5.5 1 1 1 .6 0 1-.5 1-1V1182c0-.2.1-.3.3-.3.1 0 .2.1.2.2v5.7c0 .5.4.8.9.8.4 0 .8-.3.8-.8z" fill=#010101><path id=path7153 class=g5_1 d="M812.8 1178.9h.1c1.1 0 2-1 2-2.1s-.9-2.1-2-2.1h-.1c-1.2 0-2.1 1-2.1 2.1s.9 2.1 2.1 2.1z" fill=#010101><path id=path7155 class=g5_1 d="M802.2 1184.4v-5.7l2.4 2.4 1.3-1.3-4.6-4.6-4.6 4.6 1.3 1.3 2.4-2.4v5.7z" fill=#010101><path id=path7157 class=g5_1 d="M800.4 1188.3v5.7l-2.4-2.4-1.3 1.3 4.6 4.6 4.6-4.6-1.3-1.3-2.4 2.4v-5.7z" fill=#010101><path id=path7159 class=g5_1 d="M972.5 1249.4h-21.8c-1.5 0-2.8-1.2-2.8-2.8v-21.7c0-1.6 1.3-2.8 2.8-2.8h21.8c1.6 0 2.8 1.2 2.8 2.8v8.3h-1.6c-.1 0-.2.1-.2.2v4.7c0 .1.1.3.2.3h1.6v8.2c0 1.6-1.2 2.8-2.8 2.8m0-29h-21.8c-2.4 0-4.4 2-4.4 4.5v21.7c0 2.5 2 4.5 4.4 4.5h21.8c2.4 0 4.4-2 4.4-4.5v-21.7c0-2.5-2-4.5-4.4-4.5z" fill=#010101><path id=path7161 class=g5_1 d="M970.8 1230.7c0-1-.9-1.8-1.8-1.8h-5.3c-.9 0-1.8.8-1.8 1.8v6.3c0 .5.4.8.8.8.5 0 .9-.3.9-.8v-5.6c0-.2.1-.3.2-.3.2 0 .3.1.3.3v15.1c0 .5.4 1 1 1 .5 0 1-.5 1-1v-8.7c0-.1.1-.3.3-.3.1 0 .3.2.3.3v8.7c0 .5.4 1 1 1 .5 0 1-.5 1-1v-15.1c0-.2.1-.3.2-.3.2 0 .3.1.3.3v5.6c0 .5.4.8.8.8.5 0 .8-.3.8-.8z" fill=#010101><path id=path7163 class=g5_1 d="M966.3 1228.3h.1c1.2 0 2.1-1 2.1-2.1s-.9-2.1-2.1-2.1h-.1c-1.1 0-2 1-2 2.1s.9 2.1 2 2.1z" fill=#010101><path id=path7165 class=g5_1 d="M955.7 1233.8v-5.7l2.4 2.4 1.4-1.3-4.6-4.6-1.4 1.3-3.2 3.3 1.3 1.3 2.4-2.4v5.7z" fill=#010101><path id=path7167 class=g5_1 d="M954 1237.8v5.6l-2.4-2.4-1.3 1.4 4.6 4.6 1.3-1.4 3.3-3.2-1.4-1.4-2.4 2.4v-5.6z" fill=#010101><path id=path7169 class=g5_1 d="M1217 1367.7h-21.7c-1.6 0-2.8-1.3-2.8-2.8v-21.8c0-1.5 1.2-2.8 2.8-2.8h21.7c1.6 0 2.8 1.3 2.8 2.8v8.3h-1.5c-.2 0-.3.1-.3.3v4.6c0 .2.1.3.3.3h1.5v8.3c0 1.5-1.2 2.8-2.8 2.8m0-29h-21.7c-2.5 0-4.5 2-4.5 4.4v21.8c0 2.4 2 4.4 4.5 4.4h21.7c2.5 0 4.5-2 4.5-4.4v-21.8c0-2.4-2-4.4-4.5-4.4z" fill=#010101><path id=path7171 class=g5_1 d="M1215.4 1349c0-1-1-1.9-1.9-1.9h-5.2c-.9 0-1.9.9-1.9 1.9v6.3c0 .4.4.8.9.8.4 0 .8-.4.8-.8v-5.7c0-.1.1-.2.2-.2.2 0 .3.1.3.2v15.1c0 .6.5 1 1 1 .6 0 1-.4 1-1v-8.6c0-.2.1-.3.3-.3s.3.1.3.3v8.6c0 .6.5 1 1 1s1-.4 1-.9v-15.2c0-.1.1-.2.3-.2.1 0 .2.1.2.2V1355.3c0 .4.4.8.8.8.5 0 .9-.4.9-.8v-.1z" fill=#010101><path id=path7173 class=g5_1 d="M1210.9 1346.6c1.2-.1 2.1-1 2.1-2.2 0-1.1-.9-2-2.1-2.1-1.2.1-2.1 1-2.1 2.1 0 1.2.9 2.1 2.1 2.2z" fill=#010101><path id=path7175 class=g5_1 d="M1200.3 1352v-5.6l2.4 2.4 1.3-1.4-3.3-3.2-1.3-1.4-1.3 1.4-3.3 3.2 1.3 1.4 2.4-2.4v5.6z" fill=#010101><path id=path7177 class=g5_1 d="M1198.5 1356v5.7l-2.4-2.4-1.3 1.3 4.6 4.6 4.6-4.6-1.3-1.3-2.4 2.4v-5.7z" fill=#010101><path id=path7179 class=g5_1 d="M1969.5 2341.9h-21.8c-1.6 0-2.8-1.3-2.8-2.9v-21.7c0-1.6 1.2-2.8 2.8-2.8h21.8c1.5 0 2.8 1.2 2.8 2.8v8.3h-1.6c-.2 0-.3.1-.3.2v4.7c0 .1.1.3.3.3h1.6v8.2c0 1.6-1.3 2.9-2.8 2.9m0-29h-21.8c-2.4 0-4.4 1.9-4.4 4.4v21.7c0 2.5 2 4.5 4.4 4.5h21.8c2.4 0 4.4-2 4.4-4.5v-21.7c0-2.5-2-4.4-4.4-4.4z" fill=#010101><path id=path7181 class=g5_1 d="M1967.8 2323.1c0-1-.9-1.8-1.8-1.8h-5.3c-.9 0-1.8.8-1.8 1.8v6.3c0 .5.3.8.8.8.4 0 .8-.3.8-.8v-5.6c0-.2.1-.3.3-.3.1 0 .2.1.2.3v15.1c0 .5.5 1 1 1 .6 0 1-.5 1-1v-8.7c0-.1.2-.3.3-.3.2 0 .3.2.3.3v8.7c0 .5.5 1 1 1 .6 0 1-.4 1-1v-15.1c0-.2.1-.3.3-.3.1 0 .2.1.2.3v5.6c0 .5.4.8.9.8.4 0 .8-.3.8-.8z" fill=#010101><path id=path7183 class=g5_1 d="M1963.3 2320.7h.1c1.1 0 2-1 2-2.1s-.9-2.1-2-2.1h-.1c-1.2 0-2.1 1-2.1 2.1s.9 2.1 2.1 2.1z" fill=#010101><path id=path7185 class=g5_1 d="M1952.7 2326.2v-5.7l2.4 2.4 1.3-1.3-3.2-3.3-1.4-1.3-4.6 4.6 1.4 1.3 2.4-2.4v5.7z" fill=#010101><path id=path7187 class=g5_1 d="M1951 2330.2v5.6l-2.4-2.4-1.4 1.4 3.3 3.2 1.3 1.4 4.6-4.6-1.3-1.4-2.4 2.4v-5.6z" fill=#010101><path id=path7189 class=g5_1 d="M1876.9 2418.4h-21.7c-1.6 0-2.8-1.3-2.8-2.8v-21.8c0-1.5 1.2-2.8 2.8-2.8h21.7c1.6 0 2.9 1.3 2.9 2.8v8.3h-1.6c-.2 0-.3.1-.3.3v4.6c0 .2.1.3.3.3h1.6v8.3c0 1.5-1.3 2.8-2.9 2.8m0-29h-21.7c-2.5 0-4.4 2-4.4 4.4v21.8c0 2.4 1.9 4.4 4.4 4.4h21.7c2.5 0 4.5-2 4.5-4.4v-21.8c0-2.4-2-4.4-4.5-4.4z" fill=#010101><path id=path7191 class=g5_1 d="M1875.3 2399.6c0-.9-.9-1.8-1.8-1.8h-5.3c-.9 0-1.8.9-1.8 1.8v6.4c0 .4.3.8.8.8.4 0 .8-.4.8-.8v-5.7c0-.1.1-.2.3-.2.1 0 .2.1.2.2v15.1c0 .6.5 1 1 1 .6 0 1-.4 1-1v-8.6c0-.2.2-.3.3-.3.2 0 .3.1.3.3v8.6c0 .6.5 1 1 1 .6 0 1-.4 1-1v-15.1c0-.1.1-.2.3-.2.1 0 .2.1.2.2v5.7c0 .4.4.8.9.8.4 0 .8-.4.8-.8v-.1z" fill=#010101><path id=path7193 class=g5_1 d="M1870.8 2397.3h.1c1.1-.1 2-1 2-2.2 0-1.1-.9-2-2-2.1h-.1c-1.2.1-2.1 1-2.1 2.1 0 1.2.9 2.1 2.1 2.2z" fill=#010101><path id=path7195 class=g5_1 d="M1860.2 2402.7v-5.6l2.4 2.4 1.3-1.4-3.3-3.2-1.3-1.4-1.3 1.4-3.3 3.2 1.3 1.4 2.4-2.4v5.6z" fill=#010101><path id=path7197 class=g5_1 d="M1858.4 2406.7v5.7l-2.4-2.4-1.3 1.3 4.6 4.6 4.6-4.6-1.3-1.3-2.4 2.4v-5.7z" fill=#010101><path id=path7199 class=g5_1 d="M522.8 2019.8h-25c-1.8 0-3.2-1.4-3.2-3.2v-25c0-1.8 1.4-3.3 3.2-3.3h25c1.8 0 3.2 1.5 3.2 3.3v9.5h-1.8c-.2 0-.3.1-.3.3v5.4c0 .1.1.3.3.3h1.8v9.5c0 1.8-1.4 3.2-3.2 3.2m0-33.3h-25c-2.8 0-5.1 2.3-5.1 5.1v25c0 2.8 2.3 5.1 5.1 5.1h25c2.8 0 5.1-2.3 5.1-5.1v-25c0-2.8-2.3-5.1-5.1-5.1z" fill=#010101><path id=path7201 class=g5_1 d="M520.9 1998.3c0-1.2-1.1-2.1-2.1-2.1h-6.1c-1 0-2.1.9-2.1 2.1v7.2c0 .5.5 1 1 1s.9-.5.9-1v-6.5c0-.1.2-.2.3-.2.2 0 .3.1.3.3v17.3c0 .6.6 1.1 1.2 1.1s1.1-.5 1.1-1.1v-9.9c0-.2.2-.4.4-.4s.3.2.3.4v9.9c0 .6.5 1.1 1.2 1.1.6 0 1.1-.5 1.1-1.1v-17.3c0-.2.1-.3.3-.3s.3.1.3.2v6.5c0 .5.4 1 1 1 .5 0 .9-.5.9-1z" fill=#010101><path id=path7203 class=g5_1 d="M515.7 1995.5h.1c1.3 0 2.4-1.1 2.4-2.4s-1.1-2.4-2.4-2.4h-.1c-1.3 0-2.3 1.1-2.3 2.4s1 2.4 2.3 2.4z" fill=#010101><path id=path7205 class=g5_1 d="M503.5 2001.8v-6.5l2.8 2.8 1.5-1.6-5.3-5.3-1.5 1.6-3.7 3.7 1.5 1.6 2.8-2.8v6.5z" fill=#010101><path id=path7207 class=g5_1 d="M501.5 2006.4v6.5l-2.7-2.8-1.5 1.6 3.7 3.7 1.5 1.6 5.3-5.3-1.5-1.6-2.8 2.8v-6.5z" fill=#010101><path id=path7209 class=g5_1 d="M1529.1 2163.4h-25c-1.8 0-3.3-1.4-3.3-3.1v-24.5c0-1.8 1.5-3.2 3.3-3.2h25c1.7 0 3.2 1.4 3.2 3.2v9.3h-1.8c-.2 0-.3.1-.3.3v5.2c0 .2.1.3.3.3h1.8v9.4c0 1.7-1.5 3.1-3.2 3.1m0-32.6h-25c-2.9 0-5.1 2.2-5.1 5v24.5c0 2.7 2.2 4.9 5.1 4.9h25c2.8 0 5.1-2.2 5.1-4.9v-24.5c0-2.8-2.3-5-5.1-5z" fill=#010101><path id=path7211 class=g5_1 d="M1527.1 2142.3c0-1.1-1-2-2.1-2h-6c-1 0-2.1.9-2.1 2v7.1c0 .5.4 1 .9 1 .6 0 1-.5 1-1v-6.3c0-.2.1-.3.3-.3.1 0 .3.1.3.3v17c0 .6.5 1.1 1.1 1.1.7 0 1.2-.5 1.2-1.1v-9.7c0-.2.1-.4.3-.4s.4.2.4.3v9.8c0 .6.5 1.1 1.1 1.1s1.1-.5 1.2-1.1v-17c0-.2.1-.3.3-.3.1 0 .2.1.3.3v6.3c0 .5.4 1 .9 1s.9-.5.9-1z" fill=#010101><path id=path7213 class=g5_1 d="M1522 2139.6h.1c1.3 0 2.3-1.1 2.3-2.4 0-1.2-1-2.3-2.3-2.3h-.1c-1.3 0-2.4 1.1-2.4 2.3 0 1.3 1.1 2.4 2.4 2.4z" fill=#010101><path id=path7215 class=g5_1 d="M1509.8 2145.8v-6.4l2.7 2.7 1.6-1.5-3.8-3.7-1.5-1.5-1.5 1.5-3.8 3.7 1.5 1.5 2.8-2.7v6.4z" fill=#010101><path id=path7217 class=g5_1 d="M1507.8 2150.3v6.3l-2.8-2.7-1.5 1.5 3.8 3.7 1.5 1.5 1.5-1.5 3.8-3.7-1.6-1.5-2.7 2.7v-6.3z" fill=#010101><path stroke=#f58220 d="M1541 2163.7v-31.2" stroke-linecap=round id=path7219 stroke-linejoin=round fill=none style="fill: none; stroke: #f58220; stroke-width: 3.2969444; stroke-linecap: round; stroke-linejoin: round;" stroke-width=3.297><path id=path7221 class=g5_1 d="M449.6 1182.8h-25c-1.8 0-3.2-1.4-3.2-3.2v-25c0-1.8 1.4-3.3 3.2-3.3h25c1.8 0 3.2 1.5 3.2 3.3v9.5H451c-.2 0-.3.1-.3.3v5.4c0 .1.1.3.3.3h1.8v9.5c0 1.8-1.4 3.2-3.2 3.2m0-33.3h-25c-2.8 0-5.1 2.3-5.1 5.1v25c0 2.8 2.3 5.1 5.1 5.1h25c2.8 0 5.1-2.3 5.1-5.1v-25c0-2.8-2.3-5.1-5.1-5.1z" fill=#010101><path id=path7223 class=g5_1 d="M447.7 1161.3c0-1.2-1.1-2.1-2.1-2.1h-6.1c-1 0-2.1.9-2.1 2.1v7.2c0 .6.5 1 1 1s.9-.4.9-1v-6.5c0-.1.2-.2.3-.2.2 0 .3.1.3.3v17.3c0 .6.5 1.1 1.2 1.1.6 0 1.1-.5 1.1-1.1v-9.9c0-.2.2-.4.4-.4s.3.2.3.4v9.9c0 .6.5 1.1 1.2 1.1.6 0 1.1-.4 1.1-1.1v-17.3c0-.2.1-.3.3-.3s.3.1.3.2v6.5c0 .6.4 1 .9 1 .6 0 1-.4 1-1z" fill=#010101><path id=path7225 class=g5_1 d="M442.5 1158.5h.1c1.3 0 2.4-1.1 2.4-2.4s-1.1-2.4-2.4-2.4h-.1c-1.3 0-2.3 1.1-2.3 2.4s1 2.4 2.3 2.4z" fill=#010101><path id=path7227 class=g5_1 d="M430.3 1164.8v-6.5l2.8 2.8 1.5-1.6-5.3-5.3-1.5 1.6-3.8 3.7 1.6 1.6 2.7-2.8v6.5z" fill=#010101><path id=path7229 class=g5_1 d="M428.3 1169.4v6.5l-2.7-2.8-1.6 1.6 3.8 3.7 1.5 1.6 5.3-5.3-1.5-1.6-2.8 2.8v-6.5z" fill=#010101><path id=path7231 class=g5_1 d="M1680.9 2769.6h-25c-1.8 0-3.2-1.5-3.2-3.2v-25c0-1.8 1.4-3.3 3.2-3.3h25c1.8 0 3.2 1.5 3.2 3.3v9.5h-1.8c-.2 0-.3.1-.3.3v5.3c0 .2.1.4.3.4h1.8v9.5c0 1.7-1.4 3.2-3.2 3.2m0-33.3h-25c-2.8 0-5.1 2.3-5.1 5.1v25c0 2.8 2.3 5.1 5.1 5.1h25c2.8 0 5.1-2.3 5.1-5.1v-25c0-2.8-2.3-5.1-5.1-5.1z" fill=#010101><path id=path7233 class=g5_1 d="M1679 2748.1c0-1.2-1.1-2.1-2.1-2.1h-6.1c-1 0-2.1.9-2.1 2.1v7.2c0 .5.4 1 1 1 .5 0 .9-.5.9-1v-6.5c0-.1.2-.3.3-.3.2 0 .3.2.3.3v17.4c0 .6.5 1.1 1.2 1.1.6 0 1.1-.5 1.1-1.1v-9.9c0-.2.2-.4.4-.4.1 0 .3.2.3.3v10c0 .6.5 1.1 1.2 1.1.6 0 1.1-.5 1.1-1.1v-17.4c0-.1.1-.3.3-.3.1 0 .3.2.3.3v6.5c0 .5.4 1 .9 1 .6 0 1-.5 1-1z" fill=#010101><path id=path7235 class=g5_1 d="M1673.8 2745.3h.1c1.3 0 2.4-1.1 2.4-2.4s-1.1-2.4-2.4-2.5h-.1c-1.3.1-2.3 1.2-2.3 2.5s1 2.4 2.3 2.4z" fill=#010101><path id=path7237 class=g5_1 d="M1661.6 2751.6v-6.5l2.8 2.8 1.5-1.6-5.3-5.3-1.5 1.6-3.8 3.7 1.6 1.6 2.7-2.8v6.5z" fill=#010101><path id=path7239 class=g5_1 d="M1659.6 2756.2v6.5l-2.7-2.8-1.6 1.6 3.8 3.7 1.5 1.5 1.6-1.5 3.7-3.7-1.5-1.6-2.8 2.8v-6.5z" fill=#010101><path id=path7241 class=g5_1 d="M1125 1708.2h-25c-1.7 0-3.2-1.4-3.2-3.2v-25c0-1.8 1.5-3.3 3.2-3.3h25c1.8 0 3.3 1.5 3.3 3.3v9.5h-1.8c-.2 0-.4.1-.4.3v5.4c0 .1.2.3.4.3h1.8v9.5c0 1.8-1.5 3.2-3.3 3.2m0-33.3h-25c-2.8 0-5 2.3-5 5.1v25c0 2.8 2.2 5.1 5 5.1h25c2.9 0 5.1-2.3 5.1-5.1v-25c0-2.8-2.2-5.1-5.1-5.1z" fill=#010101><path id=path7243 class=g5_1 d="M1123.1 1686.7c0-1.2-1-2.1-2.1-2.1h-6c-1.1 0-2.1.9-2.1 2.1v7.2c0 .5.4 1 .9 1s1-.5 1-1v-6.5c0-.1.1-.3.3-.3.1 0 .3.2.3.3v17.4c0 .6.5 1.1 1.1 1.1s1.2-.5 1.2-1.1v-9.9c0-.2.1-.4.3-.4s.4.2.4.3v10c0 .6.5 1.1 1.1 1.1s1.1-.5 1.1-1.1v-17.4c0-.1.2-.3.3-.3.2 0 .3.2.3.3v6.5c0 .5.5 1 1 1s.9-.5.9-1z" fill=#010101><path id=path7245 class=g5_1 d="M1118 1683.9h.1c1.3 0 2.3-1.1 2.3-2.4s-1-2.4-2.3-2.4h-.1c-1.4 0-2.4 1.1-2.4 2.4s1 2.4 2.4 2.4z" fill=#010101><path id=path7247 class=g5_1 d="M1105.8 1690.2v-6.5l2.7 2.8 1.6-1.6-3.8-3.7-1.5-1.6-5.3 5.3 1.5 1.6 2.8-2.8v6.5z" fill=#010101><path id=path7249 class=g5_1 d="M1103.8 1694.8v6.5l-2.8-2.8-1.5 1.6 5.3 5.3 1.5-1.6 3.8-3.7-1.6-1.6-2.7 2.8v-6.5z" fill=#010101><path stroke=#f58220 d="M1137 1708.5v-31.9" stroke-linecap=round class=g21_1 stroke-linejoin=round fill=none id=path7251 stroke-width=3.331><path id=path7253 class=g5_1 d="M785.9 2583.1h-25c-1.8 0-3.2-1.5-3.2-3.3v-25c0-1.8 1.4-3.2 3.2-3.2h25c1.8 0 3.2 1.4 3.2 3.2v9.5h-1.8c-.2 0-.3.2-.3.3v5.4c0 .2.1.3.3.3h1.8v9.5c0 1.8-1.4 3.3-3.2 3.3m0-33.4h-25c-2.8 0-5.1 2.3-5.1 5.1v25c0 2.8 2.3 5.1 5.1 5.1h25c2.8 0 5.1-2.3 5.1-5.1v-25c0-2.8-2.3-5.1-5.1-5.1z" fill=#010101><path id=path7255 class=g5_1 d="M784 2561.5c0-1.1-1.1-2.1-2.1-2.1h-6.1c-1 0-2.1 1-2.1 2.1v7.3c0 .5.5.9 1 .9s.9-.4.9-.9v-6.5c0-.2.2-.3.3-.3.2 0 .3.1.3.3v17.3c0 .7.6 1.2 1.2 1.2s1.1-.5 1.1-1.1v-10c0-.2.2-.3.4-.3s.3.1.3.3v10c0 .6.5 1.1 1.2 1.1.6 0 1.1-.5 1.1-1.1v-17.4c0-.2.1-.3.3-.3s.3.1.3.3v6.5c0 .5.4.9 1 .9.5 0 .9-.4.9-.9v-.1z" fill=#010101><path id=path7257 class=g5_1 d="M778.8 2558.8h.1c1.3-.1 2.4-1.2 2.4-2.5 0-1.2-1.1-2.3-2.4-2.4h-.1c-1.3.1-2.3 1.2-2.3 2.4 0 1.3 1 2.4 2.3 2.5z" fill=#010101><path id=path7259 class=g5_1 d="M766.6 2565.1v-6.5l2.8 2.7 1.5-1.5-3.7-3.8-1.6-1.5-1.5 1.5-3.7 3.8 1.5 1.5 2.8-2.7v6.5z" fill=#010101><path id=path7261 class=g5_1 d="M764.7 2569.6v6.5l-2.8-2.7-1.5 1.5 3.7 3.8 1.5 1.5 1.6-1.5 3.7-3.8-1.5-1.5-2.8 2.7v-6.5z" fill=#010101><path stroke=#f58220 d="M797.9 2583.4v-31.9" stroke-linecap=round class=g21_1 stroke-linejoin=round fill=none id=path7263 stroke-width=3.331><path id=path7265 class=g5_1 d="M1578.8 1816.6h-21.7c-1.6 0-2.8-1.3-2.8-2.9V1792c0-1.6 1.2-2.8 2.8-2.8h21.7c1.6 0 2.9 1.2 2.9 2.8v8.3h-1.6c-.2 0-.3.1-.3.2v4.7c0 .1.1.3.3.3h1.6v8.2c0 1.6-1.3 2.9-2.9 2.9m0-29h-21.7c-2.5 0-4.4 1.9-4.4 4.4v21.7c0 2.5 1.9 4.5 4.4 4.5h21.7c2.5 0 4.5-2 4.5-4.5V1792c0-2.5-2-4.4-4.5-4.4z" fill=#010101><path id=path7267 class=g5_1 d="M1577.2 1797.8c0-1-.9-1.8-1.8-1.8h-5.3c-.9 0-1.8.8-1.8 1.8v6.3c0 .5.3.8.8.8.4 0 .8-.3.8-.8v-5.6c0-.2.1-.3.3-.3.1 0 .2.1.2.3v15.1c0 .5.5 1 1 1 .6 0 1-.5 1-1v-8.7c0-.1.2-.3.3-.3.2 0 .3.2.3.3v8.7c0 .5.5 1 1 1 .6 0 1-.4 1-1v-15.1c0-.2.1-.3.3-.3.1 0 .2.1.2.3v5.6c0 .5.4.8.9.8.4 0 .8-.3.8-.8z" fill=#010101><path id=path7269 class=g5_1 d="M1572.7 1795.4h.1c1.1 0 2-1 2-2.1s-.9-2.1-2-2.1h-.1c-1.2 0-2.1 1-2.1 2.1s.9 2.1 2.1 2.1z" fill=#010101><path id=path7271 class=g5_1 d="M1562.1 1800.9v-5.7l2.4 2.4 1.3-1.3-3.2-3.3-1.4-1.3-4.6 4.6 1.4 1.3 2.4-2.4v5.7z" fill=#010101><path id=path7273 class=g5_1 d="M1560.3 1804.9v5.6l-2.3-2.4-1.4 1.4 3.3 3.2 1.3 1.4 4.6-4.6-1.3-1.4-2.4 2.4v-5.6z" fill=#010101><path id=path7275 class=g5_1 d="M269.3 2194.3h-21.7c-1.6 0-2.8-1.2-2.8-2.8v-21.8c0-1.5 1.2-2.8 2.8-2.8h21.7c1.6 0 2.8 1.3 2.8 2.8v8.3h-1.5c-.2 0-.3.1-.3.3v4.7c0 .1.1.2.3.2h1.5v8.3c0 1.6-1.2 2.8-2.8 2.8m0-29h-21.7c-2.5 0-4.5 2-4.5 4.4v21.8c0 2.4 2 4.4 4.5 4.4h21.7c2.5 0 4.5-2 4.5-4.4v-21.8c0-2.4-2-4.4-4.5-4.4z" fill=#010101><path id=path7277 class=g5_1 d="M267.7 2175.6c0-1-1-1.9-1.9-1.9h-5.2c-.9 0-1.9.9-1.9 1.9v6.3c0 .4.4.8.9.8.4 0 .8-.4.8-.8v-5.7c0-.1.1-.2.2-.2.2 0 .3.1.3.3v15c0 .6.5 1 1 1 .6 0 1-.4 1-.9v-8.7c0-.2.1-.3.3-.3s.3.1.3.3v8.7c0 .5.5.9 1 .9s1-.4 1-.9v-15.1c0-.2.1-.3.3-.3.1 0 .2.1.2.2v5.7c0 .4.4.8.8.8.5 0 .9-.4.9-.8z" fill=#010101><path id=path7279 class=g5_1 d="M263.2 2173.2c1.2 0 2.1-1 2.1-2.1 0-1.2-.9-2.1-2.1-2.2-1.2.1-2.1 1-2.1 2.2 0 1.1.9 2.1 2.1 2.1z" fill=#010101><path id=path7281 class=g5_1 d="M252.6 2178.7v-5.7l2.4 2.4 1.3-1.3-4.6-4.6-4.6 4.6 1.3 1.3 2.4-2.4v5.7z" fill=#010101><path id=path7283 class=g5_1 d="M250.8 2182.6v5.7l-2.4-2.4-1.3 1.3 4.6 4.6 4.6-4.6-1.3-1.3-2.4 2.4v-5.7z" fill=#010101><path id=path7285 class=g5_1 d="M2515.6 1184h-25c-1.8 0-3.3-1.4-3.3-3.2v-25c0-1.8 1.5-3.3 3.3-3.3h25c1.7 0 3.2 1.5 3.2 3.3v9.5h-1.8c-.2 0-.3.1-.3.3v5.4c0 .1.1.3.3.3h1.8v9.5c0 1.8-1.5 3.2-3.2 3.2m0-33.3h-25c-2.9 0-5.1 2.3-5.1 5.1v25c0 2.8 2.2 5.1 5.1 5.1h25c2.8 0 5.1-2.3 5.1-5.1v-25c0-2.8-2.3-5.1-5.1-5.1z" fill=#010101><path id=path7287 class=g5_1 d="M2513.7 1162.5c0-1.2-1.1-2.1-2.2-2.1h-6c-1 0-2.1.9-2.1 2.1v7.2c0 .6.4 1 .9 1 .6 0 1-.4 1-1v-6.5c0-.1.1-.2.3-.2.1 0 .3.1.3.3v17.3c0 .6.5 1.1 1.1 1.1.7 0 1.2-.4 1.2-1.1v-9.9c0-.2.1-.4.3-.4s.4.2.4.4v9.9c0 .6.5 1.1 1.1 1.1s1.1-.4 1.2-1.1v-17.3c0-.2.1-.3.3-.3.1 0 .2.1.3.2v6.5c0 .6.4 1 .9 1s1-.4 1-1h-.1.1z" fill=#010101><path id=path7289 class=g5_1 d="M2508.5 1159.7h.1c1.3 0 2.3-1.1 2.3-2.4s-1-2.4-2.3-2.4h-.1c-1.3 0-2.4 1.1-2.4 2.4s1.1 2.4 2.4 2.4z" fill=#010101><path id=path7291 class=g5_1 d="M2496.3 1166v-6.5l2.7 2.8 1.6-1.6-3.8-3.7-1.5-1.5-1.5 1.5-3.8 3.7 1.5 1.6 2.8-2.8v6.5z" fill=#010101><path id=path7293 class=g5_1 d="M2494.3 1170.6v6.5l-2.8-2.8-1.5 1.6 3.8 3.7 1.5 1.6 1.5-1.6 3.8-3.7-1.6-1.6-2.7 2.8v-6.5z" fill=#010101><path id=path7295 class=g5_1 d="M1707.8 2573.7h-17.1l.9-2.1h15.4zm5.7 3.8-4.5-8c-.1-.1-.3-.2-.4-.2H1690c-.2 0-.3.1-.4.2l-4.5 8.1c-.1.1-.1.3 0 .4 0 .1.2.2.3.2h3.1c.2 0 .4-.1.4-.3l.9-1.9h19l.9 1.9c0 .2.2.3.3.3h3.2c.2 0 .4-.2.4-.4 0-.1-.1-.2-.1-.3z" fill=#010101><path id=path7297 class=g5_1 d="M1701 2547.1h-3.4c-.5 0-.9-.3-.9-.8s.4-.9.9-.9h3.4c.5 0 .8.4.8.9s-.3.8-.8.8m-7.8 18.4c-.9 0-1.7-.7-1.7-1.7 0-.9.8-1.7 1.7-1.7s1.7.8 1.7 1.7c0 1-.8 1.7-1.7 1.7m12.3 0c-1 0-1.7-.7-1.7-1.7 0-.9.7-1.7 1.7-1.7.9 0 1.7.8 1.7 1.7 0 1-.8 1.7-1.7 1.7m2.6-8.4h-17.6c-.3 0-.6-.2-.6-.6l.6-7.5c0-.4.3-.7.7-.7h16.2c.4 0 .7.3.7.6l.6 7.6c0 .3-.3.6-.6.6m1.9-2.4c-.2-2.6-.3-5-1-7.6-.3-1.1-1.4-1.6-2.3-2-2.1-.6-5.3-1-7.4-1-2.2 0-5.3.4-7.4 1-1 .4-2 .9-2.4 2-.6 2.6-.7 5-.9 7.6-.3 3.1-.2 7.4-.2 7.4l.9 4.6c.2.6.5 1 1.1 1h17.8c.6 0 1-.4 1.1-1l.9-4.6s.1-4.3-.2-7.4z" fill=#010101><path id=path7299 class=g9_1 d="m1417.8 2526.3 35.9-35.9 36 35.9-36 36z" fill=#949698><path id=path7301 class=g1_1 d="m1453.7 2486-4.3 4.4-35.9 35.9 4.3 4.3 31.6 31.7 4.3 4.3 40.3-40.3-4.3-4.3-31.7-31.6zm0 8.7 31.7 31.6-31.7 31.6-31.6-31.6z" fill=#fff><path id=path7303 class=g9_1 d="M1047.2 1872.4V1838l-1.2-1.3 2.1-2.2 24.6-24.6 35.9 36-10.5 10.6v15.9z" fill=#949698><path id=path7305 class=g1_1 d="m1072.7 1805.6-31.1 31.1 2.6 2.5v36.3h56.9v-17.8l7.5-7.5 4.4-4.3-4.4-4.3-31.6-31.7zm0 8.7 31.6 31.6-9.3 9.3v14.2h-44.7v-32.7z" fill=#fff><path id=path7307 class=g9_1 d="m1340.7 2603.3 35.9-35.9 35.9 35.9-35.9 36z" fill=#949698><path id=path7309 class=g1_1 d="m1376.6 2563.1-35.9 35.9-4.4 4.3 40.3 40.3 40.3-40.3-4.4-4.3-31.6-31.6zm0 8.6 31.6 31.6-31.6 31.7-31.6-31.7z" fill=#fff><path id=path7311 class=g9_1 d="m961.4 2679.5 35.9-36 36 36-36 35.9z" fill=#949698><path id=path7313 class=g1_1 d="m997.3 2639.2-35.9 35.9-4.3 4.4 40.2 40.2 4.3-4.3 31.7-31.6 4.3-4.3-4.3-4.4-31.7-31.6zm0 8.6 31.6 31.7-31.6 31.6-31.6-31.6z" fill=#fff><path id=path7315 class=g9_1 d="m961 1465 36-35.9 35.9 35.9-35.9 36z" fill=#949698><path id=path7317 class=g1_1 d="m997 1424.7-4.3 4.4-31.7 31.6-4.3 4.3 40.3 40.3 4.3-4.3 31.6-31.7 4.4-4.3-4.4-4.3-31.6-31.6zm0 8.7 31.6 31.6-31.6 31.6-31.6-31.6z" fill=#fff><path id=path7319 class=g9_1 d="M517.1 1211.8h50.8v50.8h-50.8z" fill=#949698><path id=path7321 class=g1_1 d="M571 1208.7h-57v57h57v-50.9zm-6.1 50.9h-44.8v-44.8h44.8z" fill=#fff><a href="https://veronneau.org/media/blog/2022-01-21/graphs/Bonaventure.png" xlink="http://www.w3.org/1999/xlink" id=a17539><path id=path7323 class=g1_1 d="M1462.4 2517.7c-5.2-5.2-13.7-5.2-19 0-5.2 5.3-5.2 13.7 0 19 5.3 5.2 13.8 5.2 19 0 5.2-5.3 5.2-13.7 0-19z" fill=#fff><a href="https://veronneau.org/media/blog/2022-01-21/graphs/Lucien.L.Allier.png" xlink="http://www.w3.org/1999/xlink" id=a17536><path id=path7325 class=g1_1 d="M1385.9 2594.3c-5.3-5.2-13.8-5.2-19 0-5.3 5.3-5.3 13.7 0 19 5.2 5.2 13.7 5.2 19 0 5.2-5.3 5.2-13.7 0-19z" fill=#fff><a href="https://veronneau.org/media/blog/2022-01-21/graphs/Vendôme.png" xlink="http://www.w3.org/1999/xlink" id=a17524><path id=path7329 class=g1_1 d="M1006.8 2670c-5.2-5.3-13.7-5.3-19 0-5.2 5.2-5.2 13.7 0 18.9 5.3 5.3 13.8 5.3 19 0 5.2-5.2 5.2-13.7 0-18.9z" fill=#fff><a href="https://veronneau.org/media/blog/2022-01-21/graphs/Sauvé.png" xlink="http://www.w3.org/1999/xlink" id=a17575><path id=path7333 class=g1_1 d="M1006.6 1474.5c5.2-5.2 5.2-13.7 0-19-5.2-5.2-13.7-5.2-19 0-5.2 5.3-5.2 13.8 0 19 5.3 5.2 13.8 5.2 19 0z" fill=#fff><a href="https://veronneau.org/media/blog/2022-01-21/graphs/De.la.Concorde.png" xlink="http://www.w3.org/1999/xlink" id=a17584><path id=path7337 class=g1_1 d="M551.9 1227.7c-5.3-5.2-13.8-5.2-19 0-5.3 5.2-5.3 13.7 0 19 5.2 5.2 13.7 5.2 19 0 5.2-5.3 5.2-13.8 0-19z" fill=#fff><a href="https://veronneau.org/media/blog/2022-01-21/graphs/Parc.png" xlink="http://www.w3.org/1999/xlink" id=a14126><path id=path7341 class=g1_1 d="M1083.3 1837.6c-5.2-5.3-13.7-5.3-19 0-5.2 5.2-5.2 13.7 0 18.9 5.3 5.3 13.8 5.3 19 0 5.2-5.2 5.2-13.7 0-18.9z" fill=#fff><path id=path7343 class=g1_1 d="M1456.1 2484.6h6.1v11.6h-6.1z" fill=#fff><path id=path7345 class=g1_1 d="M1484.2 2518.1h11.6v6.2h-11.6z" fill=#fff><path id=path7347 class=g1_1 d="M1346.1 2612.5h-11.6v-6.1h11.6z" fill=#fff><path id=path7349 class=g1_1 d="M1039.3 2687.9h-11.6v-6.1h11.6z" fill=#fff><path id=path7351 class=g1_1 d="M967.5 2677.1h-11.6v-6.1h11.6z" fill=#fff><path id=path7353 class=g1_1 d="m1096.3 1882.1-8.3-8.2 4.4-4.4 8.2 8.3z" fill=#fff><path id=path7357 class=g5_1 d="M2262.6 1320.6h3.9c1.8 0 2.7-1.7 2.7-3.4 0-1.5-.7-3.2-2.7-3.2h-3.9zm0 2.2v9.4h-2.6v-20.4h7c3.6 0 4.9 2.5 4.9 5.1 0 2.4-1.3 4.2-3.7 4.6v.1c2.3.4 3.2 1.2 3.3 5.3 0 .8.3 4 .7 5.3h-2.7c-.7-1.4-.6-4.1-.8-6.8-.2-2.5-2.2-2.6-3.1-2.6z" fill=#010101><path stroke=#010101 d="M2262.6 1320.6h3.9c1.8 0 2.7-1.7 2.7-3.4 0-1.5-.7-3.2-2.7-3.2h-3.9zm0 2.2v9.4h-2.6v-20.4h7c3.6 0 4.9 2.5 4.9 5.1 0 2.4-1.3 4.2-3.7 4.6v.1c2.3.4 3.2 1.2 3.3 5.3 0 .8.3 4 .7 5.3h-2.7c-.7-1.4-.6-4.1-.8-6.8-.2-2.5-2.2-2.6-3.1-2.6z" id=path7359 fill=none class=g6_1 stroke-width=.458><path id=path7361 class=g5_1 d="m2283.9 1314.2-3.2 10.9h6.5zm-1.5-2.4h3.3l6.6 20.4h-2.9l-1.5-4.9h-7.9l-1.5 4.9h-2.6z" fill=#010101><path stroke=#010101 d="m2283.9 1314.2-3.2 10.9h6.5zm-1.5-2.4h3.3l6.6 20.4h-2.9l-1.5-4.9h-7.9l-1.5 4.9h-2.6z" id=path7363 fill=none class=g6_1 stroke-width=.458><path id=path7365 class=g5_1 d="M2298.8 1329.9h2.5c3.6 0 4.9-1.3 4.9-6.1v-4.1c0-4.1-1.2-5.7-3.9-5.7h-3.5zm-2.6-18.1h6.3c2.6 0 4.5.9 5.5 3.1.8 1.7.9 5.8.9 6.4 0 4.4-.4 6.9-1.2 8.3-1.1 1.7-3.2 2.6-6.8 2.6h-4.7z" fill=#010101><path stroke=#010101 d="M2298.8 1329.9h2.5c3.6 0 4.9-1.3 4.9-6.1v-4.1c0-4.1-1.2-5.7-3.9-5.7h-3.5zm-2.6-18.1h6.3c2.6 0 4.5.9 5.5 3.1.8 1.7.9 5.8.9 6.4 0 4.4-.4 6.9-1.2 8.3-1.1 1.7-3.2 2.6-6.8 2.6h-4.7z" id=path7367 fill=none class=g6_1 stroke-width=.458><path id=path7369 class=g5_1 d="M2317.3 1332.2h-2.6v-20.4h2.6z" fill=#010101><path stroke=#010101 d="M2317.3 1332.2h-2.6v-20.4h2.6z" id=path7371 fill=none class=g6_1 stroke-width=.458><path id=path7373 class=g5_1 d="M2325.3 1326.1v.6c0 2.8 1.8 3.7 3.5 3.7 2 0 3.6-.9 3.6-3.3 0-4.6-9.2-4.1-9.2-10.2 0-3.6 2.6-5.5 6-5.5 3.8 0 5.9 1.8 5.7 5.9h-2.7c0-2.2-.7-3.7-3.2-3.7-1.5 0-3.1.8-3.1 3 0 4.5 9.2 3.9 9.2 10.3 0 4.3-3 5.7-6.4 5.7-6 .1-6-4.5-5.9-6.5z" fill=#010101><path stroke=#010101 d="M2325.3 1326.1v.6c0 2.8 1.8 3.7 3.5 3.7 2 0 3.6-.9 3.6-3.3 0-4.6-9.2-4.1-9.2-10.2 0-3.6 2.6-5.5 6-5.5 3.8 0 5.9 1.8 5.7 5.9h-2.7c0-2.2-.7-3.7-3.2-3.7-1.5 0-3.1.8-3.1 3 0 4.5 9.2 3.9 9.2 10.3 0 4.3-3 5.7-6.4 5.7-6 .1-6-4.5-5.9-6.5z" id=path7375 fill=none class=g6_1 stroke-width=.458><path id=path7377 class=g5_1 d="M2342.2 1326.1v.6c0 2.8 1.8 3.7 3.4 3.7 2.1 0 3.7-.9 3.7-3.3 0-4.6-9.2-4.1-9.2-10.2 0-3.6 2.6-5.5 6-5.5 3.7 0 5.8 1.8 5.7 5.9h-2.8c.1-2.2-.6-3.7-3.1-3.7-1.5 0-3.1.8-3.1 3 0 4.5 9.1 3.9 9.1 10.3 0 4.3-2.9 5.7-6.3 5.7-6 .1-6-4.5-6-6.5z" fill=#010101><path stroke=#010101 d="M2342.2 1326.1v.6c0 2.8 1.8 3.7 3.4 3.7 2.1 0 3.7-.9 3.7-3.3 0-4.6-9.2-4.1-9.2-10.2 0-3.6 2.6-5.5 6-5.5 3.7 0 5.8 1.8 5.7 5.9h-2.8c.1-2.2-.6-3.7-3.1-3.7-1.5 0-3.1.8-3.1 3 0 4.5 9.1 3.9 9.1 10.3 0 4.3-2.9 5.7-6.3 5.7-6 .1-6-4.5-6-6.5z" id=path7379 fill=none class=g6_1 stroke-width=.458><path id=path7381 class=g5_1 d="M2367.2 1324.9v-7c0-4.2-3-4.4-3.8-4.4s-3.8.2-3.8 4.4v7c0 4.4 1.3 5.6 3.8 5.6s3.8-1.2 3.8-5.6m-10.2-.2v-6.7c0-4 2.1-6.6 6.4-6.6s6.4 2.6 6.4 6.6v6.7c0 5.7-2.1 7.9-6.4 7.9s-6.4-2.2-6.4-7.9z" fill=#010101><path stroke=#010101 d="M2367.2 1324.9v-7c0-4.2-3-4.4-3.8-4.4s-3.8.2-3.8 4.4v7c0 4.4 1.3 5.6 3.8 5.6s3.8-1.2 3.8-5.6zm-10.2-.2v-6.7c0-4 2.1-6.6 6.4-6.6s6.4 2.6 6.4 6.6v6.7c0 5.7-2.1 7.9-6.4 7.9s-6.4-2.2-6.4-7.9z" id=path7383 fill=none class=g6_1 stroke-width=.458><path id=path7385 class=g5_1 d="M2389.6 1311.8v20.4h-3.5l-8.1-17.7v17.7h-2.4v-20.4h3.7l8 17.5v-17.5z" fill=#010101><path stroke=#010101 d="M2389.6 1311.8v20.4h-3.5l-8.1-17.7v17.7h-2.4v-20.4h3.7l8 17.5v-17.5z" id=path7387 fill=none class=g6_1 stroke-width=.458><path id=path7389 class=g5_1 d="M2183 1409.1v-20.4h2.6v18.2h7.5v2.2z" fill=#010101><path stroke=#010101 d="M2183 1409.1v-20.4h2.6v18.2h7.5v2.2z" id=path7391 fill=none class=g6_1 stroke-width=.458><path id=path7393 class=g5_1 d="M2204.3 1391.1h-.1l-3.2 10.9h6.6zm-1.6-2.4h3.3l6.7 20.4h-2.9l-1.5-4.8h-7.9l-1.5 4.8h-2.7z" fill=#010101><path stroke=#010101 d="M2204.3 1391.1h-.1l-3.2 10.9h6.6zm-1.6-2.4h3.3l6.7 20.4h-2.9l-1.5-4.8h-7.9l-1.5 4.8h-2.7z" id=path7395 fill=none class=g6_1 stroke-width=.458><path id=path7397 class=g5_1 d="M2230.7 1388.7v20.4h-3.6l-8.1-17.7v17.7h-2.3v-20.4h3.6l8 17.5v-17.5z" fill=#010101><path stroke=#010101 d="M2230.7 1388.7v20.4h-3.6l-8.1-17.7v17.7h-2.3v-20.4h3.6l8 17.5v-17.5z" id=path7399 fill=none class=g6_1 stroke-width=.458><path id=path7401 class=g5_1 d="M2246.3 1394.2c0-2.5-1-3.8-3.6-3.8-.8 0-3.8.2-3.8 4.5v6.9c0 4.4 1.3 5.6 3.8 5.6 1.9 0 3.1-.5 3.7-.9v-6.1h-3.8v-2.3h6.4v9.9c-1.7.9-3.7 1.5-6.3 1.5-4.3 0-6.4-2.2-6.4-7.8v-6.8c0-4 2.1-6.6 6.4-6.6 4.4 0 6.5 1.6 6.3 5.9z" fill=#010101><path stroke=#010101 d="M2246.3 1394.2c0-2.5-1-3.8-3.6-3.8-.8 0-3.8.2-3.8 4.5v6.9c0 4.4 1.3 5.6 3.8 5.6 1.9 0 3.1-.5 3.7-.9v-6.1h-3.8v-2.3h6.4v9.9c-1.7.9-3.7 1.5-6.3 1.5-4.3 0-6.4-2.2-6.4-7.8v-6.8c0-4 2.1-6.6 6.4-6.6 4.4 0 6.5 1.6 6.3 5.9z" id=path7403 fill=none class=g6_1 stroke-width=.458><path id=path7405 class=g5_1 d="M2255.2 1409.1v-20.4h10.6v2.3h-7.9v6.5h7.3v2.3h-7.3v7.1h8v2.2z" fill=#010101><path stroke=#010101 d="M2255.2 1409.1v-20.4h10.6v2.3h-7.9v6.5h7.3v2.3h-7.3v7.1h8v2.2z" id=path7407 fill=none class=g6_1 stroke-width=.458><path id=path7409 class=g5_1 d="M2271.1 1409.1v-20.4h2.6v18.2h7.5v2.2z" fill=#010101><path stroke=#010101 d="M2271.1 1409.1v-20.4h2.6v18.2h7.5v2.2z" id=path7411 fill=none class=g6_1 stroke-width=.458><path id=path7413 class=g5_1 d="M2288 1409.1h-2.6v-20.4h2.6z" fill=#010101><path stroke=#010101 d="M2288 1409.1h-2.6v-20.4h2.6z" id=path7415 fill=none class=g6_1 stroke-width=.458><path id=path7417 class=g5_1 d="M2294.1 1409.1v-20.4h10.5v2.3h-7.9v6.5h7.3v2.3h-7.3v7.1h8.1v2.2z" fill=#010101><path stroke=#010101 d="M2294.1 1409.1v-20.4h10.5v2.3h-7.9v6.5h7.3v2.3h-7.3v7.1h8.1v2.2z" id=path7419 fill=none class=g6_1 stroke-width=.458><path id=path7421 class=g5_1 d="M2312.5 1397.5h3.9c1.9 0 2.8-1.6 2.8-3.4 0-1.5-.8-3.1-2.8-3.1h-3.9zm0 2.2v9.4h-2.6v-20.4h7c3.7 0 4.9 2.5 4.9 5.1 0 2.4-1.3 4.2-3.7 4.7 2.3.4 3.2 1.2 3.3 5.3.1.9.3 4.1.7 5.3h-2.7c-.7-1.4-.5-4.1-.8-6.8-.2-2.5-2.2-2.6-3.1-2.6z" fill=#010101><path stroke=#010101 d="M2312.5 1397.5h3.9c1.9 0 2.8-1.6 2.8-3.4 0-1.5-.8-3.1-2.8-3.1h-3.9zm0 2.2v9.4h-2.6v-20.4h7c3.7 0 4.9 2.5 4.9 5.1 0 2.4-1.3 4.2-3.7 4.7 2.3.4 3.2 1.2 3.3 5.3.1.9.3 4.1.7 5.3h-2.7c-.7-1.4-.5-4.1-.8-6.8-.2-2.5-2.2-2.6-3.1-2.6z" id=path7423 fill=none class=g6_1 stroke-width=.458><path id=path7425 class=g5_1 d="M2114.4 1469.4c0-1.1-.1-2.3-.6-2.9-.5-.7-1.8-.9-2.3-.9-2.1 0-3 1.3-3.1 1.6-.1.2-.6.7-.6 4.2v5.5c0 5 1.7 5.6 3.7 5.6.8 0 3.2-.3 3.2-4.3h2.7c.1 6.5-4.4 6.5-5.8 6.5-2.5 0-6.4-.2-6.4-8.1v-5.8c0-5.8 2.5-7.4 6.5-7.4 4.1 0 5.6 2.1 5.4 6z" fill=#010101><path stroke=#010101 d="M2114.4 1469.4c0-1.1-.1-2.3-.6-2.9-.5-.7-1.8-.9-2.3-.9-2.1 0-3 1.3-3.1 1.6-.1.2-.6.7-.6 4.2v5.5c0 5 1.7 5.6 3.7 5.6.8 0 3.2-.3 3.2-4.3h2.7c.1 6.5-4.4 6.5-5.8 6.5-2.5 0-6.4-.2-6.4-8.1v-5.8c0-5.8 2.5-7.4 6.5-7.4 4.1 0 5.6 2.1 5.4 6z" id=path7427 fill=none class=g6_1 stroke-width=.458><path id=path7429 class=g5_1 d="M2128.8 1466.2h-.1l-3.2 10.9h6.5zm-1.6-2.4h3.3l6.6 20.4h-2.9l-1.5-4.8h-7.9l-1.5 4.8h-2.6z" fill=#010101><path stroke=#010101 d="M2128.8 1466.2h-.1l-3.2 10.9h6.5zm-1.6-2.4h3.3l6.6 20.4h-2.9l-1.5-4.8h-7.9l-1.5 4.8h-2.6z" id=path7431 fill=none class=g6_1 stroke-width=.458><path id=path7433 class=g5_1 d="M2143.6 1482h2.5c3.6 0 5-1.4 5-6.1v-4.2c0-4.1-1.3-5.6-4-5.6h-3.5zm-2.6-18.2h6.3c2.6 0 4.5.9 5.5 3.1.8 1.7.9 5.8.9 6.5 0 4.3-.4 6.8-1.2 8.2-1.1 1.8-3.2 2.6-6.8 2.6h-4.7z" fill=#010101><path stroke=#010101 d="M2143.6 1482h2.5c3.6 0 5-1.4 5-6.1v-4.2c0-4.1-1.3-5.6-4-5.6h-3.5zm-2.6-18.2h6.3c2.6 0 4.5.9 5.5 3.1.8 1.7.9 5.8.9 6.5 0 4.3-.4 6.8-1.2 8.2-1.1 1.8-3.2 2.6-6.8 2.6h-4.7z" id=path7435 fill=none class=g6_1 stroke-width=.458><path id=path7437 class=g5_1 d="M2160.9 1484.2h-2.6v-20.4h2.6z" fill=#010101><path stroke=#010101 d="M2160.9 1484.2h-2.6v-20.4h2.6z" id=path7439 fill=none class=g6_1 stroke-width=.458><path id=path7441 class=g5_1 d="M2167 1484.2v-20.4h2.6v18.2h7.5v2.2z" fill=#010101><path stroke=#010101 d="M2167 1484.2v-20.4h2.6v18.2h7.5v2.2z" id=path7443 fill=none class=g6_1 stroke-width=.458><path id=path7445 class=g5_1 d="M2181.3 1484.2v-20.4h2.6v18.2h7.5v2.2z" fill=#010101><path stroke=#010101 d="M2181.3 1484.2v-20.4h2.6v18.2h7.5v2.2z" id=path7447 fill=none class=g6_1 stroke-width=.458><path id=path7449 class=g5_1 d="M2202.6 1466.2h-.1l-3.2 10.9h6.6zm-1.6-2.4h3.3l6.7 20.4h-3l-1.4-4.8h-7.9l-1.6 4.8h-2.6z" fill=#010101><path stroke=#010101 d="M2202.6 1466.2h-.1l-3.2 10.9h6.6zm-1.6-2.4h3.3l6.7 20.4h-3l-1.4-4.8h-7.9l-1.6 4.8h-2.6z" id=path7451 fill=none class=g6_1 stroke-width=.458><path id=path7453 class=g5_1 d="M2223.8 1469.4c0-1.1 0-2.3-.6-2.9-.5-.7-1.7-.9-2.3-.9-2.1 0-3 1.3-3.1 1.6 0 .2-.6.7-.6 4.2v5.5c0 5 1.7 5.6 3.7 5.6.8 0 3.2-.3 3.2-4.3h2.7c.1 6.5-4.4 6.5-5.8 6.5-2.5 0-6.4-.2-6.4-8.1v-5.8c0-5.8 2.5-7.4 6.5-7.4 4.1 0 5.7 2.1 5.4 6z" fill=#010101><path stroke=#010101 d="M2223.8 1469.4c0-1.1 0-2.3-.6-2.9-.5-.7-1.7-.9-2.3-.9-2.1 0-3 1.3-3.1 1.6 0 .2-.6.7-.6 4.2v5.5c0 5 1.7 5.6 3.7 5.6.8 0 3.2-.3 3.2-4.3h2.7c.1 6.5-4.4 6.5-5.8 6.5-2.5 0-6.4-.2-6.4-8.1v-5.8c0-5.8 2.5-7.4 6.5-7.4 4.1 0 5.7 2.1 5.4 6z" id=path7455 fill=none class=g6_1 stroke-width=.458><path id=path7457 class=g5_1 d="M2102.9 1626h-3.1l-6-20.5h2.9l4.6 18h.1l4.8-18h2.6z" fill=#010101><path stroke=#010101 d="M2102.9 1626h-3.1l-6-20.5h2.9l4.6 18h.1l4.8-18h2.6z" id=path7459 fill=none class=g6_1 stroke-width=.458><path id=path7461 class=g5_1 d="M2116.2 1626h-2.7v-20.5h2.7z" fill=#010101><path stroke=#010101 d="M2116.2 1626h-2.7v-20.5h2.7z" id=path7463 fill=none class=g6_1 stroke-width=.458><path id=path7465 class=g5_1 d="M2129 1607.9h-.1l-3.2 10.9h6.6zm-1.6-2.4h3.3l6.7 20.5h-3l-1.4-4.9h-7.9l-1.6 4.9h-2.6z" fill=#010101><path stroke=#010101 d="M2129 1607.9h-.1l-3.2 10.9h6.6zm-1.6-2.4h3.3l6.7 20.5h-3l-1.4-4.9h-7.9l-1.6 4.9h-2.6z" id=path7467 fill=none class=g6_1 stroke-width=.458><path id=path7469 class=g5_1 d="M2141.1 1605.5h2.6v13.1c0 4.5 1.4 5.6 3.8 5.6 2.5 0 3.9-1.1 3.9-5.6v-13.1h2.6v13c0 5.6-2.1 7.9-6.5 7.9-4.3 0-6.4-2.3-6.4-7.9z" fill=#010101><path stroke=#010101 d="M2141.1 1605.5h2.6v13.1c0 4.5 1.4 5.6 3.8 5.6 2.5 0 3.9-1.1 3.9-5.6v-13.1h2.6v13c0 5.6-2.1 7.9-6.5 7.9-4.3 0-6.4-2.3-6.4-7.9z" id=path7471 fill=none class=g6_1 stroke-width=.458><path id=path7473 class=g5_1 d="M2032.4 1701.4h2.8c1.1 0 3.7-.2 3.7-3.4s-2.4-3.5-2.9-3.5h-3.6zm-2.6 11.3v-20.4h6c2.8 0 5.7 1 5.7 5.8 0 4.6-3.6 5.6-5.7 5.6h-3.4v9z" fill=#010101><path stroke=#010101 d="M2032.4 1701.4h2.8c1.1 0 3.7-.2 3.7-3.4s-2.4-3.5-2.9-3.5h-3.6zm-2.6 11.3v-20.4h6c2.8 0 5.7 1 5.7 5.8 0 4.6-3.6 5.6-5.7 5.6h-3.4v9z" id=path7475 fill=none class=g6_1 stroke-width=.458><path id=path7477 class=g5_1 d="M2049 1712.7h-2.6v-20.4h2.6z" fill=#010101><path stroke=#010101 d="M2049 1712.7h-2.6v-20.4h2.6z" id=path7479 fill=none class=g6_1 stroke-width=.458><path id=path7481 class=g5_1 d="M2054.7 1712.7v-20.4h10.6v2.2h-8v6.6h7.4v2.3h-7.4v7h8.1v2.3z" fill=#010101><path stroke=#010101 d="M2054.7 1712.7v-20.4h10.6v2.2h-8v6.6h7.4v2.3h-7.4v7h8.1v2.3z" id=path7483 fill=none class=g6_1 stroke-width=.458><path id=path7485 class=g5_1 d="M2069.3 1701.1h6.3v2.1h-6.3z" fill=#010101><path stroke=#010101 d="M2069.3 1701.1h6.3v2.1h-6.3z" id=path7487 fill=none class=g6_1 stroke-width=.458><path id=path7489 class=g5_1 d="M2083 1712.7h-2.6v-20.4h2.6z" fill=#010101><path stroke=#010101 d="M2083 1712.7h-2.6v-20.4h2.6z" id=path7491 fill=none class=g6_1 stroke-width=.458><path id=path7493 class=g5_1 d="M2102.4 1712.7h-3.1l-4.8-8.7-4.5 8.7h-2.8l5.9-10.6-5.6-9.8h3l4.2 7.9 4.2-7.9h2.9l-5.5 9.8z" fill=#010101><path stroke=#010101 d="M2102.4 1712.7h-3.1l-4.8-8.7-4.5 8.7h-2.8l5.9-10.6-5.6-9.8h3l4.2 7.9 4.2-7.9h2.9l-5.5 9.8z" id=path7495 fill=none class=g6_1 stroke-width=.458><path id=path7497 class=g5_1 d="M1950.1 1782c0 1.9-.2 4.6 2.5 4.6 2.8 0 2.9-2.4 2.9-4.9v-13.8h2.6v15.4c0 1.1 0 5.5-5.6 5.5-1.1 0-3.3-.4-4.3-2-.8-1.4-.8-3.1-.8-4.8z" fill=#010101><path stroke=#010101 d="M1950.1 1782c0 1.9-.2 4.6 2.5 4.6 2.8 0 2.9-2.4 2.9-4.9v-13.8h2.6v15.4c0 1.1 0 5.5-5.6 5.5-1.1 0-3.3-.4-4.3-2-.8-1.4-.8-3.1-.8-4.8z" id=path7499 fill=none class=g6_1 stroke-width=.458><path id=path7501 class=g5_1 d="M1974.2 1781v-6.9c0-4.3-2.9-4.4-3.8-4.4-.8 0-3.7.1-3.7 4.4v6.9c0 4.5 1.3 5.6 3.7 5.6 2.5 0 3.8-1.1 3.8-5.6m-10.2-.1v-6.7c0-4.1 2.1-6.7 6.4-6.7 4.4 0 6.5 2.6 6.5 6.7v6.7c0 5.6-2.1 7.9-6.5 7.9-4.3 0-6.4-2.3-6.4-7.9z" fill=#010101><path stroke=#010101 d="M1974.2 1781v-6.9c0-4.3-2.9-4.4-3.8-4.4-.8 0-3.7.1-3.7 4.4v6.9c0 4.5 1.3 5.6 3.7 5.6 2.5 0 3.8-1.1 3.8-5.6zm-10.2-.1v-6.7c0-4.1 2.1-6.7 6.4-6.7 4.4 0 6.5 2.6 6.5 6.7v6.7c0 5.6-2.1 7.9-6.5 7.9-4.3 0-6.4-2.3-6.4-7.9z" id=path7503 fill=none class=g6_1 stroke-width=.458><path id=path7505 class=g5_1 d="M1982.2 1788.4v-20.5h2.7v18.2h7.5v2.3z" fill=#010101><path stroke=#010101 d="M1982.2 1788.4v-20.5h2.7v18.2h7.5v2.3z" id=path7507 fill=none class=g6_1 stroke-width=.458><path id=path7509 class=g5_1 d="M1999.2 1788.4h-2.6v-20.5h2.6z" fill=#010101><path stroke=#010101 d="M1999.2 1788.4h-2.6v-20.5h2.6z" id=path7511 fill=none class=g6_1 stroke-width=.458><path id=path7513 class=g5_1 d="M2005.2 1788.4v-20.5h10.6v2.3h-8v6.6h7.4v2.2h-7.4v7.1h8.1v2.3z" fill=#010101><path stroke=#010101 d="M2005.2 1788.4v-20.5h10.6v2.3h-8v6.6h7.4v2.2h-7.4v7.1h8.1v2.3z" id=path7515 fill=none class=g6_1 stroke-width=.458><path id=path7517 class=g5_1 d="M2032.8 1767.9v2.3h-5.3v18.2h-2.6v-18.2h-5.4v-2.3z" fill=#010101><path stroke=#010101 d="M2032.8 1767.9v2.3h-5.3v18.2h-2.6v-18.2h-5.4v-2.3z" id=path7519 fill=none class=g6_1 stroke-width=.458><path id=path7521 class=g5_1 d="M2049 1767.9v2.3h-5.4v18.2h-2.6v-18.2h-5.4v-2.3z" fill=#010101><path stroke=#010101 d="M2049 1767.9v2.3h-5.4v18.2h-2.6v-18.2h-5.4v-2.3z" id=path7523 fill=none class=g6_1 stroke-width=.458><path id=path7525 class=g5_1 d="M2052.5 1788.4v-20.5h10.5v2.3h-7.9v6.6h7.4v2.2h-7.4v7.1h8.1v2.3z" fill=#010101><path stroke=#010101 d="M2052.5 1788.4v-20.5h10.5v2.3h-7.9v6.6h7.4v2.2h-7.4v7.1h8.1v2.3z" id=path7527 fill=none class=g6_1 stroke-width=.458><path id=path7529 class=g5_1 d="M1892 1842.7h2.8c1.1 0 3.6-.2 3.6-3.4 0-3.1-2.3-3.5-2.8-3.5h-3.6zm-2.6 11.3v-20.4h6c2.8 0 5.7 1 5.7 5.8 0 4.7-3.6 5.6-5.7 5.6h-3.4v9z" fill=#010101><path stroke=#010101 d="M1892 1842.7h2.8c1.1 0 3.6-.2 3.6-3.4 0-3.1-2.3-3.5-2.8-3.5h-3.6zm-2.6 11.3v-20.4h6c2.8 0 5.7 1 5.7 5.8 0 4.7-3.6 5.6-5.7 5.6h-3.4v9z" id=path7531 fill=none class=g6_1 stroke-width=.458><path id=path7533 class=g5_1 d="M1907.9 1842.4h3.9c1.8 0 2.8-1.7 2.8-3.4 0-1.5-.8-3.2-2.8-3.2h-3.9zm0 2.2v9.4h-2.6v-20.4h7c3.6 0 4.9 2.5 4.9 5.1 0 2.4-1.3 4.2-3.7 4.6v.1c2.3.4 3.2 1.2 3.3 5.3 0 .8.3 4 .7 5.3h-2.7c-.7-1.4-.6-4.1-.8-6.8-.2-2.5-2.2-2.6-3.1-2.6z" fill=#010101><path stroke=#010101 d="M1907.9 1842.4h3.9c1.8 0 2.8-1.7 2.8-3.4 0-1.5-.8-3.2-2.8-3.2h-3.9zm0 2.2v9.4h-2.6v-20.4h7c3.6 0 4.9 2.5 4.9 5.1 0 2.4-1.3 4.2-3.7 4.6v.1c2.3.4 3.2 1.2 3.3 5.3 0 .8.3 4 .7 5.3h-2.7c-.7-1.4-.6-4.1-.8-6.8-.2-2.5-2.2-2.6-3.1-2.6z" id=path7535 fill=none class=g6_1 stroke-width=.458><path id=path7537 class=g5_1 d="m1930.9 1827.4-3.7 4h-1.9l2.5-4zm-8.1 26.6v-20.4h10.5v2.2h-7.9v6.6h7.3v2.3h-7.3v7h8.1v2.3z" fill=#010101><path stroke=#010101 d="m1930.9 1827.4-3.7 4h-1.9l2.5-4zm-8.1 26.6v-20.4h10.5v2.2h-7.9v6.6h7.3v2.3h-7.3v7h8.1v2.3z" id=path7539 fill=none class=g6_1 stroke-width=.458><path id=path7541 class=g5_1 d="M1938.7 1854v-20.4h10.1v2.2h-7.5v6.6h7.1v2.3h-7.1v9.3z" fill=#010101><path stroke=#010101 d="M1938.7 1854v-20.4h10.1v2.2h-7.5v6.6h7.1v2.3h-7.1v9.3z" id=path7543 fill=none class=g6_1 stroke-width=.458><path id=path7545 class=g5_1 d="M1963.3 1846.7v-7c0-4.2-3-4.4-3.8-4.4s-3.8.2-3.8 4.4v7c0 4.4 1.3 5.6 3.8 5.6s3.8-1.2 3.8-5.6m-10.2-.2v-6.7c0-4 2.1-6.6 6.4-6.6s6.4 2.6 6.4 6.6v6.7c0 5.7-2.1 7.9-6.4 7.9s-6.4-2.2-6.4-7.9z" fill=#010101><path stroke=#010101 d="M1963.3 1846.7v-7c0-4.2-3-4.4-3.8-4.4s-3.8.2-3.8 4.4v7c0 4.4 1.3 5.6 3.8 5.6s3.8-1.2 3.8-5.6zm-10.2-.2v-6.7c0-4 2.1-6.6 6.4-6.6s6.4 2.6 6.4 6.6v6.7c0 5.7-2.1 7.9-6.4 7.9s-6.4-2.2-6.4-7.9z" id=path7547 fill=none class=g6_1 stroke-width=.458><path id=path7549 class=g5_1 d="M1985.2 1833.6v20.4h-3.6l-8-17.7h-.1v17.7h-2.3v-20.4h3.7l7.9 17.5h.1v-17.5z" fill=#010101><path stroke=#010101 d="M1985.2 1833.6v20.4h-3.6l-8-17.7h-.1v17.7h-2.3v-20.4h3.7l7.9 17.5h.1v-17.5z" id=path7551 fill=none class=g6_1 stroke-width=.458><path id=path7553 class=g5_1 d="M2002.8 1833.6v2.2h-5.4v18.2h-2.6v-18.2h-5.4v-2.2z" fill=#010101><path stroke=#010101 d="M2002.8 1833.6v2.2h-5.4v18.2h-2.6v-18.2h-5.4v-2.2z" id=path7555 fill=none class=g6_1 stroke-width=.458><path id=path7557 class=g5_1 d="M2011 1836h-.1l-3.2 10.9h6.6zm-1.6-2.4h3.3l6.7 20.4h-2.9l-1.5-4.9h-7.9l-1.5 4.9h-2.7z" fill=#010101><path stroke=#010101 d="M2011 1836h-.1l-3.2 10.9h6.6zm-1.6-2.4h3.3l6.7 20.4h-2.9l-1.5-4.9h-7.9l-1.5 4.9h-2.7z" id=path7559 fill=none class=g6_1 stroke-width=.458><path id=path7561 class=g5_1 d="M2026.2 1854h-2.6v-20.4h2.6z" fill=#010101><path stroke=#010101 d="M2026.2 1854h-2.6v-20.4h2.6z" id=path7563 fill=none class=g6_1 stroke-width=.458><path id=path7565 class=g5_1 d="M2045.8 1833.6v20.4h-3.5l-8.1-17.7h-.1v17.7h-2.3v-20.4h3.7l7.9 17.5h.1v-17.5z" fill=#010101><path stroke=#010101 d="M2045.8 1833.6v20.4h-3.5l-8.1-17.7h-.1v17.7h-2.3v-20.4h3.7l7.9 17.5h.1v-17.5z" id=path7567 fill=none class=g6_1 stroke-width=.458><path id=path7569 class=g5_1 d="M2051.4 1854v-20.4h10.5v2.2h-7.9v6.6h7.4v2.3h-7.4v7h8.1v2.3z" fill=#010101><path stroke=#010101 d="M2051.4 1854v-20.4h10.5v2.2h-7.9v6.6h7.4v2.3h-7.4v7h8.1v2.3z" id=path7571 fill=none class=g6_1 stroke-width=.458><path id=path7573 class=g5_1 d="M1942 1930.2v-20.5h10.1v2.3h-7.5v6.6h7.1v2.2h-7.1v9.4z" fill=#010101><path stroke=#010101 d="M1942 1930.2v-20.5h10.1v2.3h-7.5v6.6h7.1v2.2h-7.1v9.4z" id=path7575 fill=none class=g6_1 stroke-width=.458><path id=path7577 class=g5_1 d="M1959.3 1918.5h3.9c1.9 0 2.8-1.6 2.8-3.4 0-1.5-.8-3.1-2.8-3.1h-3.9zm0 2.3v9.4h-2.6v-20.5h7c3.7 0 4.9 2.6 4.9 5.1 0 2.4-1.3 4.3-3.7 4.7 2.3.4 3.2 1.2 3.3 5.3.1.9.3 4.1.7 5.4h-2.7c-.7-1.5-.5-4.1-.8-6.8-.2-2.5-2.2-2.6-3-2.6z" fill=#010101><path stroke=#010101 d="M1959.3 1918.5h3.9c1.9 0 2.8-1.6 2.8-3.4 0-1.5-.8-3.1-2.8-3.1h-3.9zm0 2.3v9.4h-2.6v-20.5h7c3.7 0 4.9 2.6 4.9 5.1 0 2.4-1.3 4.3-3.7 4.7 2.3.4 3.2 1.2 3.3 5.3.1.9.3 4.1.7 5.4h-2.7c-.7-1.5-.5-4.1-.8-6.8-.2-2.5-2.2-2.6-3-2.6z" id=path7579 fill=none class=g6_1 stroke-width=.458><path id=path7581 class=g5_1 d="M1983.4 1922.8v-6.9c0-4.3-2.9-4.4-3.7-4.4s-3.8.1-3.8 4.4v6.9c0 4.5 1.3 5.6 3.8 5.6 2.4 0 3.7-1.1 3.7-5.6m-10.1-.1v-6.7c0-4.1 2-6.7 6.4-6.7 4.3 0 6.4 2.6 6.4 6.7v6.7c0 5.6-2.1 7.9-6.4 7.9-4.4 0-6.4-2.3-6.4-7.9z" fill=#010101><path stroke=#010101 d="M1983.4 1922.8v-6.9c0-4.3-2.9-4.4-3.7-4.4s-3.8.1-3.8 4.4v6.9c0 4.5 1.3 5.6 3.8 5.6 2.4 0 3.7-1.1 3.7-5.6zm-10.1-.1v-6.7c0-4.1 2-6.7 6.4-6.7 4.3 0 6.4 2.6 6.4 6.7v6.7c0 5.6-2.1 7.9-6.4 7.9-4.4 0-6.4-2.3-6.4-7.9z" id=path7583 fill=none class=g6_1 stroke-width=.458><path id=path7585 class=g5_1 d="M2005.6 1909.7v20.5h-3.5l-8.1-17.8h-.1v17.8h-2.3v-20.5h3.7l8 17.5v-17.5z" fill=#010101><path stroke=#010101 d="M2005.6 1909.7v20.5h-3.5l-8.1-17.8h-.1v17.8h-2.3v-20.5h3.7l8 17.5v-17.5z" id=path7587 fill=none class=g6_1 stroke-width=.458><path id=path7589 class=g5_1 d="M2023 1909.7v2.3h-5.4v18.2h-2.6V1912h-5.4v-2.3z" fill=#010101><path stroke=#010101 d="M2023 1909.7v2.3h-5.4v18.2h-2.6V1912h-5.4v-2.3z" id=path7591 fill=none class=g6_1 stroke-width=.458><path id=path7593 class=g5_1 d="M2027.6 1930.2v-20.5h10.6v2.3h-8v6.6h7.4v2.2h-7.4v7.1h8.1v2.3z" fill=#010101><path stroke=#010101 d="M2027.6 1930.2v-20.5h10.6v2.3h-8v6.6h7.4v2.2h-7.4v7.1h8.1v2.3z" id=path7595 fill=none class=g6_1 stroke-width=.458><path id=path7597 class=g5_1 d="M2057.1 1909.7v20.5h-3.6l-8.1-17.8v17.8h-2.3v-20.5h3.6l8 17.5v-17.5z" fill=#010101><path stroke=#010101 d="M2057.1 1909.7v20.5h-3.6l-8.1-17.8v17.8h-2.3v-20.5h3.6l8 17.5v-17.5z" id=path7599 fill=none class=g6_1 stroke-width=.458><path id=path7601 class=g5_1 d="m2069.1 1912.1-3.2 10.9h6.5zm-1.6-2.4h3.4l6.6 20.5h-2.9l-1.5-4.9h-7.9l-1.5 4.9h-2.6z" fill=#010101><path stroke=#010101 d="m2069.1 1912.1-3.2 10.9h6.5zm-1.6-2.4h3.4l6.6 20.5h-2.9l-1.5-4.9h-7.9l-1.5 4.9h-2.6z" id=path7603 fill=none class=g6_1 stroke-width=.458><path id=path7605 class=g5_1 d="M2090.4 1915.4c0-1.2-.1-2.4-.6-3-.6-.7-1.8-.9-2.3-.9-2.2 0-3 1.3-3.1 1.6-.1.2-.6.7-.6 4.2v5.5c0 5 1.6 5.6 3.6 5.6.8 0 3.2-.3 3.3-4.3h2.7c.1 6.5-4.5 6.5-5.8 6.5-2.6 0-6.5-.2-6.5-8.1v-5.8c0-5.8 2.6-7.4 6.6-7.4s5.6 2.1 5.4 6.1z" fill=#010101><path stroke=#010101 d="M2090.4 1915.4c0-1.2-.1-2.4-.6-3-.6-.7-1.8-.9-2.3-.9-2.2 0-3 1.3-3.1 1.6-.1.2-.6.7-.6 4.2v5.5c0 5 1.6 5.6 3.6 5.6.8 0 3.2-.3 3.3-4.3h2.7c.1 6.5-4.5 6.5-5.8 6.5-2.6 0-6.5-.2-6.5-8.1v-5.8c0-5.8 2.6-7.4 6.6-7.4s5.6 2.1 5.4 6.1z" id=path7607 fill=none class=g6_1 stroke-width=.458><path id=path7609 class=g5_1 d="M1895.1 1992.1h2.8c1.1 0 3.7-.2 3.7-3.4 0-3.1-2.4-3.5-2.9-3.5h-3.6zm-2.6 11.3V1983h6c2.8 0 5.7 1 5.7 5.8 0 4.7-3.6 5.6-5.7 5.6h-3.4v9z" fill=#010101><path stroke=#010101 d="M1895.1 1992.1h2.8c1.1 0 3.7-.2 3.7-3.4 0-3.1-2.4-3.5-2.9-3.5h-3.6zm-2.6 11.3V1983h6c2.8 0 5.7 1 5.7 5.8 0 4.7-3.6 5.6-5.7 5.6h-3.4v9z" id=path7611 fill=none class=g6_1 stroke-width=.458><path id=path7613 class=g5_1 d="m1913.2 1985.4-3.2 10.9h6.5zm-1.6-2.4h3.4l6.6 20.4h-2.9l-1.5-4.9h-7.9l-1.5 4.9h-2.6z" fill=#010101><path stroke=#010101 d="m1913.2 1985.4-3.2 10.9h6.5zm-1.6-2.4h3.4l6.6 20.4h-2.9l-1.5-4.9h-7.9l-1.5 4.9h-2.6z" id=path7615 fill=none class=g6_1 stroke-width=.458><path id=path7617 class=g5_1 d="M1928.4 1992.1h2.9c1 0 3.6-.2 3.6-3.4 0-3.1-2.3-3.5-2.9-3.5h-3.6zm-2.6 11.3V1983h6.1c2.7 0 5.6 1 5.6 5.8 0 4.7-3.6 5.6-5.7 5.6h-3.4v9z" fill=#010101><path stroke=#010101 d="M1928.4 1992.1h2.9c1 0 3.6-.2 3.6-3.4 0-3.1-2.3-3.5-2.9-3.5h-3.6zm-2.6 11.3V1983h6.1c2.7 0 5.6 1 5.6 5.8 0 4.7-3.6 5.6-5.7 5.6h-3.4v9z" id=path7619 fill=none class=g6_1 stroke-width=.458><path id=path7621 class=g5_1 d="M1945.3 2003.4h-2.6V1983h2.6z" fill=#010101><path stroke=#010101 d="M1945.3 2003.4h-2.6V1983h2.6z" id=path7623 fill=none class=g6_1 stroke-width=.458><path id=path7625 class=g5_1 d="M1965.5 1983v20.4h-3.6l-8-17.7h-.1v17.7h-2.3V1983h3.7l7.9 17.5h.1V1983z" fill=#010101><path stroke=#010101 d="M1965.5 1983v20.4h-3.6l-8-17.7h-.1v17.7h-2.3V1983h3.7l7.9 17.5h.1V1983z" id=path7627 fill=none class=g6_1 stroke-width=.458><path id=path7629 class=g5_1 d="M1971.3 2003.4V1983h10.6v2.2h-7.9v6.6h7.3v2.3h-7.3v7.1h8v2.2z" fill=#010101><path stroke=#010101 d="M1971.3 2003.4V1983h10.6v2.2h-7.9v6.6h7.3v2.3h-7.3v7.1h8v2.2z" id=path7631 fill=none class=g6_1 stroke-width=.458><path id=path7633 class=g5_1 d="m1994.2 1985.4-3.2 10.9h6.5zm-1.5-2.4h3.3l6.6 20.4h-2.9l-1.5-4.9h-7.9l-1.5 4.9h-2.6z" fill=#010101><path stroke=#010101 d="m1994.2 1985.4-3.2 10.9h6.5zm-1.5-2.4h3.3l6.6 20.4h-2.9l-1.5-4.9h-7.9l-1.5 4.9h-2.6z" id=path7635 fill=none class=g6_1 stroke-width=.458><path id=path7637 class=g5_1 d="M2006.1 1983h2.6v13.1c0 4.4 1.4 5.6 3.8 5.6 2.5 0 3.9-1.2 3.9-5.6V1983h2.6v12.9c0 5.7-2.1 7.9-6.5 7.9-4.3 0-6.4-2.2-6.4-7.9z" fill=#010101><path stroke=#010101 d="M2006.1 1983h2.6v13.1c0 4.4 1.4 5.6 3.8 5.6 2.5 0 3.9-1.2 3.9-5.6V1983h2.6v12.9c0 5.7-2.1 7.9-6.5 7.9-4.3 0-6.4-2.2-6.4-7.9z" id=path7639 fill=none class=g6_1 stroke-width=.458><path id=path7641 class=g5_1 d="M1827.2 2068.7h3.7c2.8 0 3.8-2 3.8-3.5 0-3.2-2-3.8-4.7-3.8h-2.8zm0-9.5h3.8c2.1-.1 3.1-1.3 3.1-3.3 0-1.7-1-3.1-3.2-3.1h-3.7zm-2.6 11.8v-20.5h6.7c2.8 0 3.8 1 4.5 2.1.8 1.1.9 2.4.9 2.8 0 2.5-.9 4.2-3.5 4.8v.1c2.9.4 4.1 2.1 4.1 4.9 0 5.3-3.8 5.8-6.1 5.8z" fill=#010101><path stroke=#010101 d="M1827.2 2068.7h3.7c2.8 0 3.8-2 3.8-3.5 0-3.2-2-3.8-4.7-3.8h-2.8zm0-9.5h3.8c2.1-.1 3.1-1.3 3.1-3.3 0-1.7-1-3.1-3.2-3.1h-3.7zm-2.6 11.8v-20.5h6.7c2.8 0 3.8 1 4.5 2.1.8 1.1.9 2.4.9 2.8 0 2.5-.9 4.2-3.5 4.8v.1c2.9.4 4.1 2.1 4.1 4.9 0 5.3-3.8 5.8-6.1 5.8z" id=path7643 fill=none class=g6_1 stroke-width=.458><path id=path7645 class=g5_1 d="M1842.8 2071v-20.5h10.5v2.3h-7.9v6.6h7.4v2.2h-7.4v7.1h8.1v2.3z" fill=#010101><path stroke=#010101 d="M1842.8 2071v-20.5h10.5v2.3h-7.9v6.6h7.4v2.2h-7.4v7.1h8.1v2.3z" id=path7647 fill=none class=g6_1 stroke-width=.458><path id=path7649 class=g5_1 d="m1865.7 2053-3.2 10.9h6.5zm-1.6-2.5h3.3l6.7 20.5h-2.9l-1.5-4.9h-7.9l-1.5 4.9h-2.6z" fill=#010101><path stroke=#010101 d="m1865.7 2053-3.2 10.9h6.5zm-1.6-2.5h3.3l6.7 20.5h-2.9l-1.5-4.9h-7.9l-1.5 4.9h-2.6z" id=path7651 fill=none class=g6_1 stroke-width=.458><path id=path7653 class=g5_1 d="M1877.6 2050.5h2.6v13.1c0 4.5 1.3 5.6 3.8 5.6s3.8-1.1 3.8-5.6v-13.1h2.6v13c0 5.7-2.1 7.9-6.4 7.9s-6.4-2.2-6.4-7.9z" fill=#010101><path stroke=#010101 d="M1877.6 2050.5h2.6v13.1c0 4.5 1.3 5.6 3.8 5.6s3.8-1.1 3.8-5.6v-13.1h2.6v13c0 5.7-2.1 7.9-6.4 7.9s-6.4-2.2-6.4-7.9z" id=path7655 fill=none class=g6_1 stroke-width=.458><path id=path7657 class=g5_1 d="M1898.8 2068.7h2.4c3.6 0 5-1.3 5-6.1v-4.1c0-4.2-1.3-5.7-4-5.7h-3.4zm-2.7-18.2h6.3c2.6 0 4.5 1 5.5 3.2.8 1.7.9 5.8.9 6.4 0 4.4-.4 6.9-1.2 8.3-1.1 1.7-3.2 2.6-6.8 2.6h-4.7z" fill=#010101><path stroke=#010101 d="M1898.8 2068.7h2.4c3.6 0 5-1.3 5-6.1v-4.1c0-4.2-1.3-5.7-4-5.7h-3.4zm-2.7-18.2h6.3c2.6 0 4.5 1 5.5 3.2.8 1.7.9 5.8.9 6.4 0 4.4-.4 6.9-1.2 8.3-1.1 1.7-3.2 2.6-6.8 2.6h-4.7z" id=path7659 fill=none class=g6_1 stroke-width=.458><path id=path7661 class=g5_1 d="M1917.1 2059.3h3.9c1.8 0 2.7-1.6 2.7-3.4 0-1.4-.7-3.1-2.7-3.1h-3.9zm0 2.3v9.4h-2.6v-20.5h7c3.6 0 4.9 2.6 4.9 5.1 0 2.4-1.3 4.3-3.7 4.7v.1c2.3.3 3.2 1.1 3.3 5.2 0 .9.3 4.1.7 5.4h-2.7c-.7-1.4-.6-4.1-.8-6.8-.2-2.5-2.2-2.6-3.1-2.6z" fill=#010101><path stroke=#010101 d="M1917.1 2059.3h3.9c1.8 0 2.7-1.6 2.7-3.4 0-1.4-.7-3.1-2.7-3.1h-3.9zm0 2.3v9.4h-2.6v-20.5h7c3.6 0 4.9 2.6 4.9 5.1 0 2.4-1.3 4.3-3.7 4.7v.1c2.3.3 3.2 1.1 3.3 5.2 0 .9.3 4.1.7 5.4h-2.7c-.7-1.4-.6-4.1-.8-6.8-.2-2.5-2.2-2.6-3.1-2.6z" id=path7663 fill=none class=g6_1 stroke-width=.458><path id=path7665 class=g5_1 d="M1941.2 2050.5h2.6l-5.5 12.7v7.8h-2.6v-7.8l-5.5-12.7h2.9l4 9.9z" fill=#010101><path stroke=#010101 d="M1941.2 2050.5h2.6l-5.5 12.7v7.8h-2.6v-7.8l-5.5-12.7h2.9l4 9.9z" id=path7667 fill=none class=g6_1 stroke-width=.458><path id=path7669 class=g5_1 d="M1603.1 2017.5v.6c0 2.7 1.7 3.6 3.4 3.6 2 0 3.6-.9 3.6-3.3 0-4.5-9.1-4-9.1-10.2 0-3.6 2.5-5.5 6-5.5 3.7 0 5.8 1.8 5.6 6h-2.7c0-2.3-.7-3.7-3.1-3.7-1.6 0-3.2.8-3.2 3 0 4.5 9.2 3.8 9.2 10.3 0 4.3-3 5.7-6.3 5.7-6.1 0-6.1-4.6-6-6.5z" fill=#010101><path stroke=#010101 d="M1603.1 2017.5v.6c0 2.7 1.7 3.6 3.4 3.6 2 0 3.6-.9 3.6-3.3 0-4.5-9.1-4-9.1-10.2 0-3.6 2.5-5.5 6-5.5 3.7 0 5.8 1.8 5.6 6h-2.7c0-2.3-.7-3.7-3.1-3.7-1.6 0-3.2.8-3.2 3 0 4.5 9.2 3.8 9.2 10.3 0 4.3-3 5.7-6.3 5.7-6.1 0-6.1-4.6-6-6.5z" id=path7671 fill=none class=g6_1 stroke-width=.458><path id=path7673 class=g5_1 d="M1617 2023.6v-20.5h2.6v8.9h7.1v-8.9h2.6v20.5h-2.6v-9.4h-7.1v9.4z" fill=#010101><path stroke=#010101 d="M1617 2023.6v-20.5h2.6v8.9h7.1v-8.9h2.6v20.5h-2.6v-9.4h-7.1v9.4z" id=path7675 fill=none class=g6_1 stroke-width=.458><path id=path7677 class=g5_1 d="M1634.6 2023.6v-20.5h10.6v2.3h-7.9v6.6h7.3v2.2h-7.3v7.1h8v2.3z" fill=#010101><path stroke=#010101 d="M1634.6 2023.6v-20.5h10.6v2.3h-7.9v6.6h7.3v2.2h-7.3v7.1h8v2.3z" id=path7679 fill=none class=g6_1 stroke-width=.458><path id=path7681 class=g5_1 d="M1652.5 2011.9h3.9c1.9 0 2.8-1.6 2.8-3.4 0-1.5-.8-3.1-2.8-3.1h-3.9zm0 2.3v9.4h-2.6v-20.5h7c3.6 0 4.9 2.6 4.9 5.1 0 2.4-1.3 4.3-3.7 4.7 2.3.4 3.2 1.2 3.3 5.3.1.9.3 4.1.7 5.4h-2.7c-.7-1.5-.6-4.1-.8-6.8-.2-2.5-2.2-2.6-3.1-2.6z" fill=#010101><path stroke=#010101 d="M1652.5 2011.9h3.9c1.9 0 2.8-1.6 2.8-3.4 0-1.5-.8-3.1-2.8-3.1h-3.9zm0 2.3v9.4h-2.6v-20.5h7c3.6 0 4.9 2.6 4.9 5.1 0 2.4-1.3 4.3-3.7 4.7 2.3.4 3.2 1.2 3.3 5.3.1.9.3 4.1.7 5.4h-2.7c-.7-1.5-.6-4.1-.8-6.8-.2-2.5-2.2-2.6-3.1-2.6z" id=path7683 fill=none class=g6_1 stroke-width=.458><path id=path7685 class=g5_1 d="M1669.4 2021.3h3.7c2.7 0 3.7-2 3.7-3.5 0-3.2-2-3.8-4.6-3.8h-2.8zm0-9.6h3.8c2 0 3-1.2 3-3.2 0-1.7-1-3.1-3.1-3.1h-3.7zm-2.6 11.9v-20.5h6.6c2.9 0 3.8 1 4.6 2.1.7 1.1.8 2.3.8 2.7 0 2.6-.9 4.3-3.5 4.9v.1c2.9.4 4.2 2.1 4.2 4.9 0 5.2-3.8 5.8-6.2 5.8z" fill=#010101><path stroke=#010101 d="M1669.4 2021.3h3.7c2.7 0 3.7-2 3.7-3.5 0-3.2-2-3.8-4.6-3.8h-2.8zm0-9.6h3.8c2 0 3-1.2 3-3.2 0-1.7-1-3.1-3.1-3.1h-3.7zm-2.6 11.9v-20.5h6.6c2.9 0 3.8 1 4.6 2.1.7 1.1.8 2.3.8 2.7 0 2.6-.9 4.3-3.5 4.9v.1c2.9.4 4.2 2.1 4.2 4.9 0 5.2-3.8 5.8-6.2 5.8z" id=path7687 fill=none class=g6_1 stroke-width=.458><path id=path7689 class=g5_1 d="M1686.7 2011.9h3.9c1.8 0 2.7-1.6 2.7-3.4 0-1.5-.7-3.1-2.7-3.1h-3.9zm0 2.3v9.4h-2.7v-20.5h7.1c3.6 0 4.9 2.6 4.9 5.1 0 2.4-1.3 4.3-3.7 4.7 2.3.4 3.2 1.2 3.3 5.3 0 .9.3 4.1.7 5.4h-2.7c-.8-1.5-.6-4.1-.8-6.8-.2-2.5-2.2-2.6-3.1-2.6z" fill=#010101><path stroke=#010101 d="M1686.7 2011.9h3.9c1.8 0 2.7-1.6 2.7-3.4 0-1.5-.7-3.1-2.7-3.1h-3.9zm0 2.3v9.4h-2.7v-20.5h7.1c3.6 0 4.9 2.6 4.9 5.1 0 2.4-1.3 4.3-3.7 4.7 2.3.4 3.2 1.2 3.3 5.3 0 .9.3 4.1.7 5.4h-2.7c-.8-1.5-.6-4.1-.8-6.8-.2-2.5-2.2-2.6-3.1-2.6z" id=path7691 fill=none class=g6_1 stroke-width=.458><path id=path7693 class=g5_1 d="M1710.2 2016.2v-6.9c0-4.3-2.9-4.4-3.7-4.4-.9 0-3.8.1-3.8 4.4v6.9c0 4.5 1.3 5.6 3.8 5.6 2.4 0 3.7-1.1 3.7-5.6m-10.2-.1v-6.7c0-4.1 2.1-6.7 6.5-6.7 4.3 0 6.4 2.6 6.4 6.7v6.7c0 5.6-2.1 7.9-6.4 7.9-4.4 0-6.5-2.3-6.5-7.9z" fill=#010101><path stroke=#010101 d="M1710.2 2016.2v-6.9c0-4.3-2.9-4.4-3.7-4.4-.9 0-3.8.1-3.8 4.4v6.9c0 4.5 1.3 5.6 3.8 5.6 2.4 0 3.7-1.1 3.7-5.6zm-10.2-.1v-6.7c0-4.1 2.1-6.7 6.5-6.7 4.3 0 6.4 2.6 6.4 6.7v6.7c0 5.6-2.1 7.9-6.4 7.9-4.4 0-6.5-2.3-6.5-7.9z" id=path7695 fill=none class=g6_1 stroke-width=.458><path id=path7697 class=g5_1 d="M1727 2016.2v-6.9c0-4.3-3-4.4-3.8-4.4s-3.8.1-3.8 4.4v6.9c0 4.5 1.3 5.6 3.8 5.6s3.8-1.1 3.8-5.6m-10.2-.1v-6.7c0-4.1 2.1-6.7 6.4-6.7s6.4 2.6 6.4 6.7v6.7c0 5.6-2.1 7.9-6.4 7.9s-6.4-2.3-6.4-7.9z" fill=#010101><path stroke=#010101 d="M1727 2016.2v-6.9c0-4.3-3-4.4-3.8-4.4s-3.8.1-3.8 4.4v6.9c0 4.5 1.3 5.6 3.8 5.6s3.8-1.1 3.8-5.6zm-10.2-.1v-6.7c0-4.1 2.1-6.7 6.4-6.7s6.4 2.6 6.4 6.7v6.7c0 5.6-2.1 7.9-6.4 7.9s-6.4-2.3-6.4-7.9z" id=path7699 fill=none class=g6_1 stroke-width=.458><path id=path7701 class=g5_1 d="M1734.2 2023.6v-20.5h2.6v9l7.2-9h2.9l-7.4 9.2 7.8 11.3h-3.3l-7.2-10.7v10.7z" fill=#010101><path stroke=#010101 d="M1734.2 2023.6v-20.5h2.6v9l7.2-9h2.9l-7.4 9.2 7.8 11.3h-3.3l-7.2-10.7v10.7z" id=path7703 fill=none class=g6_1 stroke-width=.458><path id=path7705 class=g5_1 d="M1751.3 2023.6v-20.5h10.5v2.3h-7.9v6.6h7.4v2.2h-7.4v7.1h8.1v2.3z" fill=#010101><path stroke=#010101 d="M1751.3 2023.6v-20.5h10.5v2.3h-7.9v6.6h7.4v2.2h-7.4v7.1h8.1v2.3z" id=path7707 fill=none class=g6_1 stroke-width=.458><path id=path7709 class=g5_1 d="M1535.6 1952.6h-2.4v-20.4h4.2l5.1 17.1h.1l5.2-17.1h4.3v20.4h-2.6v-18.2h-.1l-5.7 18.2h-2.4l-5.6-18.2h-.1z" fill=#010101><path stroke=#010101 d="M1535.6 1952.6h-2.4v-20.4h4.2l5.1 17.1h.1l5.2-17.1h4.3v20.4h-2.6v-18.2h-.1l-5.7 18.2h-2.4l-5.6-18.2h-.1z" id=path7711 fill=none class=g6_1 stroke-width=.458><path id=path7713 class=g5_1 d="M1568 1945.3v-6.9c0-4.3-3-4.5-3.8-4.5s-3.8.2-3.8 4.5v6.9c0 4.4 1.3 5.6 3.8 5.6s3.8-1.2 3.8-5.6m-10.2-.2v-6.7c0-4 2.1-6.6 6.4-6.6s6.4 2.6 6.4 6.6v6.7c0 5.7-2.1 7.9-6.4 7.9s-6.4-2.2-6.4-7.9z" fill=#010101><path stroke=#010101 d="M1568 1945.3v-6.9c0-4.3-3-4.5-3.8-4.5s-3.8.2-3.8 4.5v6.9c0 4.4 1.3 5.6 3.8 5.6s3.8-1.2 3.8-5.6zm-10.2-.2v-6.7c0-4 2.1-6.6 6.4-6.6s6.4 2.6 6.4 6.6v6.7c0 5.7-2.1 7.9-6.4 7.9s-6.4-2.2-6.4-7.9z" id=path7715 fill=none class=g6_1 stroke-width=.458><path id=path7717 class=g5_1 d="M1590.4 1932.2v20.4h-3.5l-8.1-17.7v17.7h-2.4v-20.4h3.7l8 17.5v-17.5z" fill=#010101><path stroke=#010101 d="M1590.4 1932.2v20.4h-3.5l-8.1-17.7v17.7h-2.4v-20.4h3.7l8 17.5v-17.5z" id=path7719 fill=none class=g6_1 stroke-width=.458><path id=path7721 class=g5_1 d="M1608.3 1932.2v2.2h-5.3v18.2h-2.6v-18.2h-5.4v-2.2z" fill=#010101><path stroke=#010101 d="M1608.3 1932.2v2.2h-5.3v18.2h-2.6v-18.2h-5.4v-2.2z" id=path7723 fill=none class=g6_1 stroke-width=.458><path id=path7725 class=g5_1 d="M1610 1941h6.3v2.2h-6.3z" fill=#010101><path stroke=#010101 d="M1610 1941h6.3v2.2h-6.3z" id=path7727 fill=none class=g6_1 stroke-width=.458><path id=path7729 class=g5_1 d="M1623.9 1941h3.9c1.8 0 2.7-1.7 2.7-3.4 0-1.5-.7-3.2-2.7-3.2h-3.9zm0 2.2v9.4h-2.7v-20.4h7.1c3.6 0 4.9 2.5 4.9 5.1 0 2.4-1.3 4.2-3.7 4.6v.1c2.3.4 3.2 1.2 3.3 5.3 0 .8.3 4 .7 5.3h-2.7c-.7-1.4-.6-4.1-.8-6.8-.2-2.5-2.2-2.6-3.1-2.6z" fill=#010101><path stroke=#010101 d="M1623.9 1941h3.9c1.8 0 2.7-1.7 2.7-3.4 0-1.5-.7-3.2-2.7-3.2h-3.9zm0 2.2v9.4h-2.7v-20.4h7.1c3.6 0 4.9 2.5 4.9 5.1 0 2.4-1.3 4.2-3.7 4.6v.1c2.3.4 3.2 1.2 3.3 5.3 0 .8.3 4 .7 5.3h-2.7c-.7-1.4-.6-4.1-.8-6.8-.2-2.5-2.2-2.6-3.1-2.6z" id=path7731 fill=none class=g6_1 stroke-width=.458><path id=path7733 class=g5_1 d="M1648.3 1945.3v-6.9c0-4.3-3-4.5-3.8-4.5s-3.7.2-3.7 4.5v6.9c0 4.4 1.3 5.6 3.7 5.6 2.5 0 3.8-1.2 3.8-5.6m-10.2-.2v-6.7c0-4 2.1-6.6 6.4-6.6s6.4 2.6 6.4 6.6v6.7c0 5.7-2.1 7.9-6.4 7.9s-6.4-2.2-6.4-7.9z" fill=#010101><path stroke=#010101 d="M1648.3 1945.3v-6.9c0-4.3-3-4.5-3.8-4.5s-3.7.2-3.7 4.5v6.9c0 4.4 1.3 5.6 3.7 5.6 2.5 0 3.8-1.2 3.8-5.6zm-10.2-.2v-6.7c0-4 2.1-6.6 6.4-6.6s6.4 2.6 6.4 6.6v6.7c0 5.7-2.1 7.9-6.4 7.9s-6.4-2.2-6.4-7.9z" id=path7735 fill=none class=g6_1 stroke-width=.458><path id=path7737 class=g5_1 d="M1665.6 1932.2h2.6l-5.6 12.6v7.8h-2.6v-7.8l-5.5-12.6h3l3.9 9.9z" fill=#010101><path stroke=#010101 d="M1665.6 1932.2h2.6l-5.6 12.6v7.8h-2.6v-7.8l-5.5-12.6h3l3.9 9.9z" id=path7739 fill=none class=g6_1 stroke-width=.458><path id=path7741 class=g5_1 d="m1677.2 1934.6-3.2 10.9h6.5zm-1.5-2.4h3.3l6.6 20.4h-2.9l-1.5-4.9h-7.9l-1.5 4.9h-2.6z" fill=#010101><path stroke=#010101 d="m1677.2 1934.6-3.2 10.9h6.5zm-1.5-2.4h3.3l6.6 20.4h-2.9l-1.5-4.9h-7.9l-1.5 4.9h-2.6z" id=path7743 fill=none class=g6_1 stroke-width=.458><path id=path7745 class=g5_1 d="M1689.5 1952.6v-20.4h2.6v18.2h7.5v2.2z" fill=#010101><path stroke=#010101 d="M1689.5 1952.6v-20.4h2.6v18.2h7.5v2.2z" id=path7747 fill=none class=g6_1 stroke-width=.458><path id=path7749 class=g5_1 d="M1462.4 1882.8v-20.5h2.6v18.2h7.5v2.3z" fill=#010101><path stroke=#010101 d="M1462.4 1882.8v-20.5h2.6v18.2h7.5v2.3z" id=path7751 fill=none class=g6_1 stroke-width=.458><path id=path7753 class=g5_1 d="M1483.7 1864.8h-.1l-3.2 10.8h6.6zm-1.6-2.5h3.3l6.7 20.5h-2.9l-1.5-4.9h-7.9l-1.5 4.9h-2.7z" fill=#010101><path stroke=#010101 d="M1483.7 1864.8h-.1l-3.2 10.8h6.6zm-1.6-2.5h3.3l6.7 20.5h-2.9l-1.5-4.9h-7.9l-1.5 4.9h-2.7z" id=path7755 fill=none class=g6_1 stroke-width=.458><path id=path7757 class=g5_1 d="M1495.8 1862.3h2.7v13.1c0 4.5 1.3 5.6 3.8 5.6 2.4 0 3.8-1.1 3.8-5.6v-13.1h2.6v13c0 5.7-2.1 7.9-6.4 7.9-4.4 0-6.5-2.2-6.5-7.9z" fill=#010101><path stroke=#010101 d="M1495.8 1862.3h2.7v13.1c0 4.5 1.3 5.6 3.8 5.6 2.4 0 3.8-1.1 3.8-5.6v-13.1h2.6v13c0 5.7-2.1 7.9-6.4 7.9-4.4 0-6.5-2.2-6.5-7.9z" id=path7759 fill=none class=g6_1 stroke-width=.458><path id=path7761 class=g5_1 d="M1516.9 1871.1h3.9c1.9 0 2.8-1.6 2.8-3.4 0-1.4-.7-3.1-2.8-3.1h-3.9zm0 2.3v9.4h-2.6v-20.5h7.1c3.6 0 4.8 2.6 4.8 5.1 0 2.4-1.3 4.3-3.7 4.7v.1c2.4.3 3.2 1.1 3.4 5.2 0 .9.3 4.1.7 5.4h-2.8c-.7-1.4-.5-4.1-.8-6.8-.1-2.5-2.2-2.6-3-2.6z" fill=#010101><path stroke=#010101 d="M1516.9 1871.1h3.9c1.9 0 2.8-1.6 2.8-3.4 0-1.4-.7-3.1-2.8-3.1h-3.9zm0 2.3v9.4h-2.6v-20.5h7.1c3.6 0 4.8 2.6 4.8 5.1 0 2.4-1.3 4.3-3.7 4.7v.1c2.4.3 3.2 1.1 3.4 5.2 0 .9.3 4.1.7 5.4h-2.8c-.7-1.4-.5-4.1-.8-6.8-.1-2.5-2.2-2.6-3-2.6z" id=path7763 fill=none class=g6_1 stroke-width=.458><path id=path7765 class=g5_1 d="M1534.5 1882.8h-2.6v-20.5h2.6z" fill=#010101><path stroke=#010101 d="M1534.5 1882.8h-2.6v-20.5h2.6z" id=path7767 fill=none class=g6_1 stroke-width=.458><path id=path7769 class=g5_1 d="M1540.5 1882.8v-20.5h10.5v2.3h-7.9v6.6h7.4v2.2h-7.4v7.1h8.1v2.3z" fill=#010101><path stroke=#010101 d="M1540.5 1882.8v-20.5h10.5v2.3h-7.9v6.6h7.4v2.2h-7.4v7.1h8.1v2.3z" id=path7771 fill=none class=g6_1 stroke-width=.458><path id=path7773 class=g5_1 d="M1558.9 1871.1h3.9c1.9 0 2.8-1.6 2.8-3.4 0-1.4-.7-3.1-2.7-3.1h-4zm0 2.3v9.4h-2.6v-20.5h7.1c3.6 0 4.9 2.6 4.9 5.1 0 2.4-1.4 4.3-3.8 4.7v.1c2.4.3 3.2 1.1 3.4 5.2 0 .9.3 4.1.7 5.4h-2.7c-.8-1.4-.6-4.1-.8-6.8-.2-2.5-2.2-2.6-3.1-2.6z" fill=#010101><path stroke=#010101 d="M1558.9 1871.1h3.9c1.9 0 2.8-1.6 2.8-3.4 0-1.4-.7-3.1-2.7-3.1h-4zm0 2.3v9.4h-2.6v-20.5h7.1c3.6 0 4.9 2.6 4.9 5.1 0 2.4-1.4 4.3-3.8 4.7v.1c2.4.3 3.2 1.1 3.4 5.2 0 .9.3 4.1.7 5.4h-2.7c-.8-1.4-.6-4.1-.8-6.8-.2-2.5-2.2-2.6-3.1-2.6z" id=path7775 fill=none class=g6_1 stroke-width=.458><path id=path7777 class=g5_1 d="M1396.2 1801.8h3.9c1.9 0 2.8-1.6 2.8-3.4 0-1.5-.8-3.1-2.8-3.1h-3.9zm0 2.2v9.4h-2.6V1793h7c3.7 0 4.9 2.5 4.9 5.1 0 2.4-1.3 4.2-3.7 4.7 2.3.4 3.2 1.2 3.3 5.3.1.9.3 4.1.7 5.3h-2.7c-.7-1.4-.5-4-.8-6.8-.2-2.4-2.2-2.6-3-2.6z" fill=#010101><path stroke=#010101 d="M1396.2 1801.8h3.9c1.9 0 2.8-1.6 2.8-3.4 0-1.5-.8-3.1-2.8-3.1h-3.9zm0 2.2v9.4h-2.6V1793h7c3.7 0 4.9 2.5 4.9 5.1 0 2.4-1.3 4.2-3.7 4.7 2.3.4 3.2 1.2 3.3 5.3.1.9.3 4.1.7 5.3h-2.7c-.7-1.4-.5-4-.8-6.8-.2-2.4-2.2-2.6-3-2.6z" id=path7779 fill=none class=g6_1 stroke-width=.458><path id=path7781 class=g5_1 d="M1420.6 1806.1v-6.9c0-4.3-2.9-4.4-3.7-4.4-.9 0-3.8.1-3.8 4.4v6.9c0 4.4 1.3 5.6 3.8 5.6 2.4 0 3.7-1.2 3.7-5.6m-10.2-.1v-6.7c0-4.1 2.1-6.7 6.5-6.7 4.3 0 6.4 2.6 6.4 6.7v6.7c0 5.6-2.1 7.9-6.4 7.9-4.4 0-6.5-2.3-6.5-7.9z" fill=#010101><path stroke=#010101 d="M1420.6 1806.1v-6.9c0-4.3-2.9-4.4-3.7-4.4-.9 0-3.8.1-3.8 4.4v6.9c0 4.4 1.3 5.6 3.8 5.6 2.4 0 3.7-1.2 3.7-5.6zm-10.2-.1v-6.7c0-4.1 2.1-6.7 6.5-6.7 4.3 0 6.4 2.6 6.4 6.7v6.7c0 5.6-2.1 7.9-6.4 7.9-4.4 0-6.5-2.3-6.5-7.9z" id=path7783 fill=none class=g6_1 stroke-width=.458><path id=path7785 class=g5_1 d="M1431 1807.3v.6c0 2.8 1.7 3.7 3.4 3.7 2 0 3.6-.9 3.6-3.3 0-4.5-9.1-4-9.1-10.2 0-3.6 2.5-5.5 6-5.5 3.7 0 5.8 1.8 5.6 5.9h-2.7c0-2.2-.7-3.7-3.1-3.7-1.6 0-3.2.8-3.2 3 0 4.5 9.2 3.9 9.2 10.4 0 4.3-3 5.7-6.3 5.7-6.1 0-6.1-4.6-6-6.6z" fill=#010101><path stroke=#010101 d="M1431 1807.3v.6c0 2.8 1.7 3.7 3.4 3.7 2 0 3.6-.9 3.6-3.3 0-4.5-9.1-4-9.1-10.2 0-3.6 2.5-5.5 6-5.5 3.7 0 5.8 1.8 5.6 5.9h-2.7c0-2.2-.7-3.7-3.1-3.7-1.6 0-3.2.8-3.2 3 0 4.5 9.2 3.9 9.2 10.4 0 4.3-3 5.7-6.3 5.7-6.1 0-6.1-4.6-6-6.6z" id=path7787 fill=none class=g6_1 stroke-width=.458><path id=path7789 class=g5_1 d="M1445.8 1813.4V1793h10.6v2.3h-8v6.5h7.4v2.3h-7.4v7.1h8.1v2.2z" fill=#010101><path stroke=#010101 d="M1445.8 1813.4V1793h10.6v2.3h-8v6.5h7.4v2.3h-7.4v7.1h8.1v2.2z" id=path7791 fill=none class=g6_1 stroke-width=.458><path id=path7793 class=g5_1 d="M1464.1 1813.4h-2.4V1793h4.2l5.2 17.2 5.2-17.2h4.3v20.4h-2.6v-18.1l-5.7 18.1h-2.5l-5.6-18.1h-.1z" fill=#010101><path stroke=#010101 d="M1464.1 1813.4h-2.4V1793h4.2l5.2 17.2 5.2-17.2h4.3v20.4h-2.6v-18.1l-5.7 18.1h-2.5l-5.6-18.1h-.1z" id=path7795 fill=none class=g6_1 stroke-width=.458><path id=path7797 class=g5_1 d="M1496.5 1806.1v-6.9c0-4.3-3-4.4-3.8-4.4s-3.7.1-3.7 4.4v6.9c0 4.4 1.3 5.6 3.7 5.6 2.5 0 3.8-1.2 3.8-5.6m-10.2-.1v-6.7c0-4.1 2.1-6.7 6.4-6.7 4.4 0 6.5 2.6 6.5 6.7v6.7c0 5.6-2.1 7.9-6.5 7.9-4.3 0-6.4-2.3-6.4-7.9z" fill=#010101><path stroke=#010101 d="M1496.5 1806.1v-6.9c0-4.3-3-4.4-3.8-4.4s-3.7.1-3.7 4.4v6.9c0 4.4 1.3 5.6 3.7 5.6 2.5 0 3.8-1.2 3.8-5.6zm-10.2-.1v-6.7c0-4.1 2.1-6.7 6.4-6.7 4.4 0 6.5 2.6 6.5 6.7v6.7c0 5.6-2.1 7.9-6.5 7.9-4.3 0-6.4-2.3-6.4-7.9z" id=path7799 fill=none class=g6_1 stroke-width=.458><path id=path7801 class=g5_1 d="M1519 1793v20.4h-3.6l-8.1-17.7v17.7h-2.3V1793h3.6l8 17.5V1793z" fill=#010101><path stroke=#010101 d="M1519 1793v20.4h-3.6l-8.1-17.7v17.7h-2.3V1793h3.6l8 17.5V1793z" id=path7803 fill=none class=g6_1 stroke-width=.458><path id=path7805 class=g5_1 d="M1536.9 1793v2.3h-5.4v18.1h-2.6v-18.1h-5.4v-2.3z" fill=#010101><path stroke=#010101 d="M1536.9 1793v2.3h-5.4v18.1h-2.6v-18.1h-5.4v-2.3z" id=path7807 fill=none class=g6_1 stroke-width=.458><path id=path7809 class=g5_1 d="M1326.3 1741.6h3.7c2.7 0 3.7-2 3.7-3.5 0-3.3-2-3.8-4.7-3.8h-2.7zm0-9.6h3.8c2 0 3-1.3 3-3.3 0-1.7-1-3-3.1-3h-3.7zm-2.6 11.8v-20.4h6.6c2.9 0 3.8 1 4.6 2.1.7 1.1.8 2.3.8 2.7 0 2.6-.9 4.3-3.5 4.8v.2c2.9.3 4.2 2.1 4.2 4.9 0 5.2-3.8 5.7-6.2 5.7z" fill=#010101><path stroke=#010101 d="M1326.3 1741.6h3.7c2.7 0 3.7-2 3.7-3.5 0-3.3-2-3.8-4.7-3.8h-2.7zm0-9.6h3.8c2 0 3-1.3 3-3.3 0-1.7-1-3-3.1-3h-3.7zm-2.6 11.8v-20.4h6.6c2.9 0 3.8 1 4.6 2.1.7 1.1.8 2.3.8 2.7 0 2.6-.9 4.3-3.5 4.8v.2c2.9.3 4.2 2.1 4.2 4.9 0 5.2-3.8 5.7-6.2 5.7z" id=path7811 fill=none class=g6_1 stroke-width=.458><path id=path7813 class=g5_1 d="M1341.6 1743.8v-20.4h10.5v2.3h-7.9v6.5h7.3v2.3h-7.3v7.1h8.1v2.2z" fill=#010101><path stroke=#010101 d="M1341.6 1743.8v-20.4h10.5v2.3h-7.9v6.5h7.3v2.3h-7.3v7.1h8.1v2.2z" id=path7815 fill=none class=g6_1 stroke-width=.458><path id=path7817 class=g5_1 d="M1364.5 1725.8h-.1l-3.2 10.9h6.5zm-1.6-2.4h3.3l6.6 20.4h-2.9l-1.4-4.8h-7.9l-1.6 4.8h-2.6z" fill=#010101><path stroke=#010101 d="M1364.5 1725.8h-.1l-3.2 10.9h6.5zm-1.6-2.4h3.3l6.6 20.4h-2.9l-1.4-4.8h-7.9l-1.6 4.8h-2.6z" id=path7819 fill=none class=g6_1 stroke-width=.458><path id=path7821 class=g5_1 d="M1376.6 1723.4h2.6v13.1c0 4.4 1.4 5.6 3.8 5.6 2.5 0 3.9-1.2 3.9-5.6v-13.1h2.6v13c0 5.6-2.1 7.9-6.5 7.9-4.3 0-6.4-2.3-6.4-7.9z" fill=#010101><path stroke=#010101 d="M1376.6 1723.4h2.6v13.1c0 4.4 1.4 5.6 3.8 5.6 2.5 0 3.9-1.2 3.9-5.6v-13.1h2.6v13c0 5.6-2.1 7.9-6.5 7.9-4.3 0-6.4-2.3-6.4-7.9z" id=path7823 fill=none class=g6_1 stroke-width=.458><path id=path7825 class=g5_1 d="M1398 1741.6h3.7c2.7 0 3.7-2 3.7-3.5 0-3.3-2-3.8-4.6-3.8h-2.8zm0-9.6h3.8c2 0 3-1.3 3-3.3 0-1.7-1-3-3.1-3h-3.7zm-2.6 11.8v-20.4h6.6c2.9 0 3.8 1 4.6 2.1.7 1.1.8 2.3.8 2.7 0 2.6-.9 4.3-3.5 4.8v.2c2.9.3 4.2 2.1 4.2 4.9 0 5.2-3.8 5.7-6.2 5.7z" fill=#010101><path stroke=#010101 d="M1398 1741.6h3.7c2.7 0 3.7-2 3.7-3.5 0-3.3-2-3.8-4.6-3.8h-2.8zm0-9.6h3.8c2 0 3-1.3 3-3.3 0-1.7-1-3-3.1-3h-3.7zm-2.6 11.8v-20.4h6.6c2.9 0 3.8 1 4.6 2.1.7 1.1.8 2.3.8 2.7 0 2.6-.9 4.3-3.5 4.8v.2c2.9.3 4.2 2.1 4.2 4.9 0 5.2-3.8 5.7-6.2 5.7z" id=path7827 fill=none class=g6_1 stroke-width=.458><path id=path7829 class=g5_1 d="M1416.2 1743.8h-2.6v-20.4h2.6z" fill=#010101><path stroke=#010101 d="M1416.2 1743.8h-2.6v-20.4h2.6z" id=path7831 fill=none class=g6_1 stroke-width=.458><path id=path7833 class=g5_1 d="M1422.3 1743.8v-20.4h10.5v2.3h-7.9v6.5h7.3v2.3h-7.3v7.1h8.1v2.2z" fill=#010101><path stroke=#010101 d="M1422.3 1743.8v-20.4h10.5v2.3h-7.9v6.5h7.3v2.3h-7.3v7.1h8.1v2.2z" id=path7835 fill=none class=g6_1 stroke-width=.458><path id=path7837 class=g5_1 d="M1451.7 1723.4v20.4h-3.6l-8-17.7h-.1v17.7h-2.3v-20.4h3.7l7.9 17.5h.1v-17.5z" fill=#010101><path stroke=#010101 d="M1451.7 1723.4v20.4h-3.6l-8-17.7h-.1v17.7h-2.3v-20.4h3.7l7.9 17.5h.1v-17.5z" id=path7839 fill=none class=g6_1 stroke-width=.458><path id=path7841 class=g5_1 d="M1173.2 1585.8c.1 1.8-.1 4.6 2.5 4.6 2.8 0 3-2.4 3-4.9v-13.8h2.6v15.3c0 1.1 0 5.5-5.6 5.5-1.2 0-3.4-.4-4.3-2-.9-1.3-.9-3.1-.9-4.7z" fill=#010101><path stroke=#010101 d="M1173.2 1585.8c.1 1.8-.1 4.6 2.5 4.6 2.8 0 3-2.4 3-4.9v-13.8h2.6v15.3c0 1.1 0 5.5-5.6 5.5-1.2 0-3.4-.4-4.3-2-.9-1.3-.9-3.1-.9-4.7z" id=path7843 fill=none class=g6_1 stroke-width=.458><path id=path7845 class=g5_1 d="M1193.5 1574.1h-.1l-3.2 10.9h6.5zm-1.6-2.4h3.3l6.6 20.4h-2.9l-1.5-4.9h-7.8l-1.6 4.9h-2.6z" fill=#010101><path stroke=#010101 d="M1193.5 1574.1h-.1l-3.2 10.9h6.5zm-1.6-2.4h3.3l6.6 20.4h-2.9l-1.5-4.9h-7.8l-1.6 4.9h-2.6z" id=path7847 fill=none class=g6_1 stroke-width=.458><path id=path7849 class=g5_1 d="M1208.2 1580.5h3.9c1.9 0 2.8-1.7 2.8-3.4 0-1.5-.7-3.2-2.7-3.2h-4zm0 2.2v9.4h-2.6v-20.4h7.1c3.6 0 4.9 2.5 4.9 5.1 0 2.4-1.4 4.2-3.8 4.6v.1c2.4.4 3.2 1.2 3.4 5.3 0 .8.3 4 .7 5.3h-2.7c-.8-1.4-.6-4.1-.8-6.8-.2-2.5-2.2-2.6-3.1-2.6z" fill=#010101><path stroke=#010101 d="M1208.2 1580.5h3.9c1.9 0 2.8-1.7 2.8-3.4 0-1.5-.7-3.2-2.7-3.2h-4zm0 2.2v9.4h-2.6v-20.4h7.1c3.6 0 4.9 2.5 4.9 5.1 0 2.4-1.4 4.2-3.8 4.6v.1c2.4.4 3.2 1.2 3.4 5.3 0 .8.3 4 .7 5.3h-2.7c-.8-1.4-.6-4.1-.8-6.8-.2-2.5-2.2-2.6-3.1-2.6z" id=path7851 fill=none class=g6_1 stroke-width=.458><path id=path7853 class=g5_1 d="M1225.4 1580.5h3.9c1.9 0 2.8-1.7 2.8-3.4 0-1.5-.8-3.2-2.8-3.2h-3.9zm0 2.2v9.4h-2.6v-20.4h7c3.7 0 4.9 2.5 4.9 5.1 0 2.4-1.3 4.2-3.7 4.6v.1c2.3.4 3.2 1.2 3.3 5.3.1.8.3 4 .7 5.3h-2.7c-.7-1.4-.5-4.1-.8-6.8-.2-2.5-2.2-2.6-3.1-2.6z" fill=#010101><path stroke=#010101 d="M1225.4 1580.5h3.9c1.9 0 2.8-1.7 2.8-3.4 0-1.5-.8-3.2-2.8-3.2h-3.9zm0 2.2v9.4h-2.6v-20.4h7c3.7 0 4.9 2.5 4.9 5.1 0 2.4-1.3 4.2-3.7 4.6v.1c2.3.4 3.2 1.2 3.3 5.3.1.8.3 4 .7 5.3h-2.7c-.7-1.4-.5-4.1-.8-6.8-.2-2.5-2.2-2.6-3.1-2.6z" id=path7855 fill=none class=g6_1 stroke-width=.458><path id=path7857 class=g5_1 d="M1249.3 1571.7h2.6l-5.6 12.6v7.8h-2.6v-7.8l-5.5-12.6h2.9l4 9.9z" fill=#010101><path stroke=#010101 d="M1249.3 1571.7h2.6l-5.6 12.6v7.8h-2.6v-7.8l-5.5-12.6h2.9l4 9.9z" id=path7859 fill=none class=g6_1 stroke-width=.458><path id=path7861 class=g5_1 d="M1103.3 1502c0-1.1-.1-2.3-.6-3-.5-.6-1.7-.8-2.3-.8-2.1 0-3 1.3-3.1 1.6-.1.2-.6.7-.6 4.2v5.5c0 5 1.7 5.6 3.7 5.6.8 0 3.2-.3 3.2-4.3h2.7c.1 6.4-4.4 6.4-5.8 6.4-2.5 0-6.4-.1-6.4-8v-5.8c0-5.8 2.5-7.4 6.5-7.4 4.1 0 5.6 2.1 5.4 6z" fill=#010101><path stroke=#010101 d="M1103.3 1502c0-1.1-.1-2.3-.6-3-.5-.6-1.7-.8-2.3-.8-2.1 0-3 1.3-3.1 1.6-.1.2-.6.7-.6 4.2v5.5c0 5 1.7 5.6 3.7 5.6.8 0 3.2-.3 3.2-4.3h2.7c.1 6.4-4.4 6.4-5.8 6.4-2.5 0-6.4-.1-6.4-8v-5.8c0-5.8 2.5-7.4 6.5-7.4 4.1 0 5.6 2.1 5.4 6z" id=path7863 fill=none class=g6_1 stroke-width=.458><path id=path7865 class=g5_1 d="M1113.7 1505.2h3.9c1.9 0 2.8-1.7 2.8-3.4 0-1.5-.7-3.1-2.7-3.1h-4zm0 2.2v9.4h-2.6v-20.4h7.1c3.6 0 4.9 2.5 4.9 5.1 0 2.4-1.4 4.2-3.8 4.7 2.4.4 3.2 1.2 3.4 5.3 0 .8.3 4 .7 5.3h-2.7c-.8-1.4-.6-4.1-.8-6.8-.2-2.5-2.2-2.6-3.1-2.6z" fill=#010101><path stroke=#010101 d="M1113.7 1505.2h3.9c1.9 0 2.8-1.7 2.8-3.4 0-1.5-.7-3.1-2.7-3.1h-4zm0 2.2v9.4h-2.6v-20.4h7.1c3.6 0 4.9 2.5 4.9 5.1 0 2.4-1.4 4.2-3.8 4.7 2.4.4 3.2 1.2 3.4 5.3 0 .8.3 4 .7 5.3h-2.7c-.8-1.4-.6-4.1-.8-6.8-.2-2.5-2.2-2.6-3.1-2.6z" id=path7867 fill=none class=g6_1 stroke-width=.458><path id=path7869 class=g5_1 d="m1136.5 1490.2-3.7 4h-1.9l2.5-4zm-8.2 26.6v-20.4h10.6v2.3h-8v6.5h7.4v2.3h-7.4v7.1h8.1v2.2z" fill=#010101><path stroke=#010101 d="m1136.5 1490.2-3.7 4h-1.9l2.5-4zm-8.2 26.6v-20.4h10.6v2.3h-8v6.5h7.4v2.3h-7.4v7.1h8.1v2.2z" id=path7871 fill=none class=g6_1 stroke-width=.458><path id=path7873 class=g5_1 d="M1146.6 1516.8h-2.4v-20.4h4.2l5.2 17.1 5.2-17.1h4.3v20.4h-2.6v-18.1l-5.7 18.1h-2.5l-5.6-18.1h-.1z" fill=#010101><path stroke=#010101 d="M1146.6 1516.8h-2.4v-20.4h4.2l5.2 17.1 5.2-17.1h4.3v20.4h-2.6v-18.1l-5.7 18.1h-2.5l-5.6-18.1h-.1z" id=path7875 fill=none class=g6_1 stroke-width=.458><path id=path7877 class=g5_1 d="M1175.1 1498.8h-.1l-3.2 10.9h6.6zm-1.6-2.4h3.3l6.7 20.4h-2.9l-1.5-4.8h-7.9l-1.5 4.8h-2.7z" fill=#010101><path stroke=#010101 d="M1175.1 1498.8h-.1l-3.2 10.9h6.6zm-1.6-2.4h3.3l6.7 20.4h-2.9l-1.5-4.8h-7.9l-1.5 4.8h-2.7z" id=path7879 fill=none class=g6_1 stroke-width=.458><path id=path7881 class=g5_1 d="m1199.1 1499-10.1 15.6h10.3v2.2h-12.7v-2.9l9.9-15.2h-9.6v-2.3h12.2z" fill=#010101><path stroke=#010101 d="m1199.1 1499-10.1 15.6h10.3v2.2h-12.7v-2.9l9.9-15.2h-9.6v-2.3h12.2z" id=path7883 fill=none class=g6_1 stroke-width=.458><path id=path7885 class=g5_1 d="M1207.3 1516.8h-2.7v-20.4h2.7z" fill=#010101><path stroke=#010101 d="M1207.3 1516.8h-2.7v-20.4h2.7z" id=path7887 fill=none class=g6_1 stroke-width=.458><path id=path7889 class=g5_1 d="M1212.7 1516.8v-20.4h10.6v2.3h-7.9v6.5h7.3v2.3h-7.3v7.1h8v2.2z" fill=#010101><path stroke=#010101 d="M1212.7 1516.8v-20.4h10.6v2.3h-7.9v6.5h7.3v2.3h-7.3v7.1h8v2.2z" id=path7891 fill=none class=g6_1 stroke-width=.458><path id=path7893 class=g5_1 d="M1021.9 1434.5v.6c0 2.7 1.7 3.6 3.4 3.6 2 0 3.6-.9 3.6-3.3 0-4.5-9.1-4-9.1-10.2 0-3.6 2.5-5.5 6-5.5 3.7 0 5.8 1.8 5.6 6h-2.7c0-2.3-.7-3.7-3.1-3.7-1.6 0-3.2.8-3.2 3 0 4.5 9.2 3.8 9.2 10.3 0 4.3-3 5.7-6.3 5.7-6.1 0-6.1-4.6-6-6.5z" fill=#010101><path stroke=#010101 d="M1021.9 1434.5v.6c0 2.7 1.7 3.6 3.4 3.6 2 0 3.6-.9 3.6-3.3 0-4.5-9.1-4-9.1-10.2 0-3.6 2.5-5.5 6-5.5 3.7 0 5.8 1.8 5.6 6h-2.7c0-2.3-.7-3.7-3.1-3.7-1.6 0-3.2.8-3.2 3 0 4.5 9.2 3.8 9.2 10.3 0 4.3-3 5.7-6.3 5.7-6.1 0-6.1-4.6-6-6.5z" id=path7895 fill=none class=g6_1 stroke-width=.458><path id=path7897 class=g5_1 d="m1042.9 1422.5-3.2 10.9h6.5zm-1.6-2.4h3.3l6.7 20.5h-2.9l-1.5-4.9h-7.9l-1.5 4.9h-2.7z" fill=#010101><path stroke=#010101 d="m1042.9 1422.5-3.2 10.9h6.5zm-1.6-2.4h3.3l6.7 20.5h-2.9l-1.5-4.9h-7.9l-1.5 4.9h-2.7z" id=path7899 fill=none class=g6_1 stroke-width=.458><path id=path7901 class=g5_1 d="M1055.1 1420.1h2.6v13.1c0 4.5 1.3 5.6 3.8 5.6 2.4 0 3.8-1.1 3.8-5.6v-13.1h2.6v13c0 5.6-2.1 7.9-6.4 7.9s-6.4-2.3-6.4-7.9z" fill=#010101><path stroke=#010101 d="M1055.1 1420.1h2.6v13.1c0 4.5 1.3 5.6 3.8 5.6 2.4 0 3.8-1.1 3.8-5.6v-13.1h2.6v13c0 5.6-2.1 7.9-6.4 7.9s-6.4-2.3-6.4-7.9z" id=path7903 fill=none class=g6_1 stroke-width=.458><path id=path7905 class=g5_1 d="M1080.7 1440.6h-3.1l-5.9-20.5h2.8l4.6 18h.1l4.8-18h2.6z" fill=#010101><path stroke=#010101 d="M1080.7 1440.6h-3.1l-5.9-20.5h2.8l4.6 18h.1l4.8-18h2.6z" id=path7907 fill=none class=g6_1 stroke-width=.458><path id=path7909 class=g5_1 d="m1099.2 1414-3.7 4h-1.9l2.5-4zm-8.2 26.6v-20.5h10.5v2.3h-7.9v6.5h7.4v2.3h-7.4v7.1h8.1v2.3z" fill=#010101><path stroke=#010101 d="m1099.2 1414-3.7 4h-1.9l2.5-4zm-8.2 26.6v-20.5h10.5v2.3h-7.9v6.5h7.4v2.3h-7.4v7.1h8.1v2.3z" id=path7911 fill=none class=g6_1 stroke-width=.458><path id=path7913 class=g5_1 d="M945.2 1364.9v-20.4h2.6v8.8h7.2v-8.8h2.6v20.4H955v-9.3h-7.2v9.3z" fill=#010101><path stroke=#010101 d="M945.2 1364.9v-20.4h2.6v8.8h7.2v-8.8h2.6v20.4H955v-9.3h-7.2v9.3z" id=path7915 fill=none class=g6_1 stroke-width=.458><path id=path7917 class=g5_1 d="M963.5 1364.9v-20.4H974v2.2h-7.9v6.6h7.3v2.3h-7.3v7h8.1v2.3z" fill=#010101><path stroke=#010101 d="M963.5 1364.9v-20.4H974v2.2h-7.9v6.6h7.3v2.3h-7.3v7h8.1v2.3z" id=path7919 fill=none class=g6_1 stroke-width=.458><path id=path7921 class=g5_1 d="M993.2 1344.5v20.4h-3.6l-8-17.7h-.1v17.7h-2.3v-20.4h3.7l7.9 17.5h.1v-17.5z" fill=#010101><path stroke=#010101 d="M993.2 1344.5v20.4h-3.6l-8-17.7h-.1v17.7h-2.3v-20.4h3.7l7.9 17.5h.1v-17.5z" id=path7923 fill=none class=g6_1 stroke-width=.458><path id=path7925 class=g5_1 d="M1001.6 1353.3h3.9c1.9 0 2.8-1.7 2.8-3.4 0-1.5-.7-3.2-2.8-3.2h-3.9zm0 2.2v9.4H999v-20.4h7.1c3.6 0 4.9 2.5 4.9 5.1 0 2.4-1.4 4.2-3.8 4.6v.1c2.4.4 3.2 1.2 3.4 5.3 0 .8.3 4 .7 5.3h-2.8c-.7-1.4-.5-4.1-.7-6.8-.2-2.5-2.3-2.6-3.1-2.6z" fill=#010101><path stroke=#010101 d="M1001.6 1353.3h3.9c1.9 0 2.8-1.7 2.8-3.4 0-1.5-.7-3.2-2.8-3.2h-3.9zm0 2.2v9.4H999v-20.4h7.1c3.6 0 4.9 2.5 4.9 5.1 0 2.4-1.4 4.2-3.8 4.6v.1c2.4.4 3.2 1.2 3.4 5.3 0 .8.3 4 .7 5.3h-2.8c-.7-1.4-.5-4.1-.7-6.8-.2-2.5-2.3-2.6-3.1-2.6z" id=path7927 fill=none class=g6_1 stroke-width=.458><path id=path7929 class=g5_1 d="M1018.9 1364.9h-2.6v-20.4h2.6z" fill=#010101><path stroke=#010101 d="M1018.9 1364.9h-2.6v-20.4h2.6z" id=path7931 fill=none class=g6_1 stroke-width=.458><path id=path7933 class=g5_1 d="M1024.2 1353.3h6.3v2.2h-6.3z" fill=#010101><path stroke=#010101 d="M1024.2 1353.3h6.3v2.2h-6.3z" id=path7935 fill=none class=g6_1 stroke-width=.458><path id=path7937 class=g5_1 d="M1038.4 1362.6h3.6c2.8 0 3.8-1.9 3.8-3.4 0-3.3-2-3.9-4.7-3.9h-2.7zm0-9.5h3.8c2 0 3-1.3 3-3.3 0-1.7-1-3.1-3.2-3.1h-3.6zm-2.6 11.8v-20.4h6.6c2.8 0 3.8.9 4.6 2.1.7 1.1.8 2.3.8 2.7 0 2.5-.9 4.2-3.5 4.8v.2c2.9.3 4.2 2.1 4.2 4.9 0 5.2-3.9 5.7-6.2 5.7z" fill=#010101><path stroke=#010101 d="M1038.4 1362.6h3.6c2.8 0 3.8-1.9 3.8-3.4 0-3.3-2-3.9-4.7-3.9h-2.7zm0-9.5h3.8c2 0 3-1.3 3-3.3 0-1.7-1-3.1-3.2-3.1h-3.6zm-2.6 11.8v-20.4h6.6c2.8 0 3.8.9 4.6 2.1.7 1.1.8 2.3.8 2.7 0 2.5-.9 4.2-3.5 4.8v.2c2.9.3 4.2 2.1 4.2 4.9 0 5.2-3.9 5.7-6.2 5.7z" id=path7939 fill=none class=g6_1 stroke-width=.458><path id=path7941 class=g5_1 d="M1063.7 1357.6v-7c0-4.2-2.9-4.4-3.7-4.4s-3.8.2-3.8 4.4v7c0 4.4 1.3 5.6 3.8 5.6 2.4 0 3.7-1.2 3.7-5.6m-10.1-.2v-6.7c0-4 2.1-6.6 6.4-6.6s6.4 2.6 6.4 6.6v6.7c0 5.7-2.1 7.9-6.4 7.9s-6.4-2.2-6.4-7.9z" fill=#010101><path stroke=#010101 d="M1063.7 1357.6v-7c0-4.2-2.9-4.4-3.7-4.4s-3.8.2-3.8 4.4v7c0 4.4 1.3 5.6 3.8 5.6 2.4 0 3.7-1.2 3.7-5.6zm-10.1-.2v-6.7c0-4 2.1-6.6 6.4-6.6s6.4 2.6 6.4 6.6v6.7c0 5.7-2.1 7.9-6.4 7.9s-6.4-2.2-6.4-7.9z" id=path7943 fill=none class=g6_1 stroke-width=.458><path id=path7945 class=g5_1 d="M1072 1344.5h2.6v13.1c0 4.4 1.4 5.6 3.8 5.6 2.5 0 3.8-1.2 3.8-5.6v-13.1h2.6v12.9c0 5.7-2.1 7.9-6.4 7.9s-6.4-2.2-6.4-7.9z" fill=#010101><path stroke=#010101 d="M1072 1344.5h2.6v13.1c0 4.4 1.4 5.6 3.8 5.6 2.5 0 3.8-1.2 3.8-5.6v-13.1h2.6v12.9c0 5.7-2.1 7.9-6.4 7.9s-6.4-2.2-6.4-7.9z" id=path7947 fill=none class=g6_1 stroke-width=.458><path id=path7949 class=g5_1 d="M1093.1 1353.3h3.9c1.8 0 2.7-1.7 2.7-3.4 0-1.5-.7-3.2-2.7-3.2h-3.9zm0 2.2v9.4h-2.7v-20.4h7.1c3.6 0 4.9 2.5 4.9 5.1 0 2.4-1.3 4.2-3.7 4.6v.1c2.3.4 3.2 1.2 3.3 5.3 0 .8.3 4 .7 5.3h-2.7c-.7-1.4-.6-4.1-.8-6.8-.2-2.5-2.2-2.6-3.1-2.6z" fill=#010101><path stroke=#010101 d="M1093.1 1353.3h3.9c1.8 0 2.7-1.7 2.7-3.4 0-1.5-.7-3.2-2.7-3.2h-3.9zm0 2.2v9.4h-2.7v-20.4h7.1c3.6 0 4.9 2.5 4.9 5.1 0 2.4-1.3 4.2-3.7 4.6v.1c2.3.4 3.2 1.2 3.3 5.3 0 .8.3 4 .7 5.3h-2.7c-.7-1.4-.6-4.1-.8-6.8-.2-2.5-2.2-2.6-3.1-2.6z" id=path7951 fill=none class=g6_1 stroke-width=.458><path id=path7953 class=g5_1 d="m1114.7 1346.9-3.2 10.9h6.5zm-1.6-2.4h3.3l6.7 20.4h-2.9l-1.5-4.9h-7.9l-1.5 4.9h-2.7z" fill=#010101><path stroke=#010101 d="m1114.7 1346.9-3.2 10.9h6.5zm-1.6-2.4h3.3l6.7 20.4h-2.9l-1.5-4.9h-7.9l-1.5 4.9h-2.7z" id=path7955 fill=none class=g6_1 stroke-width=.458><path id=path7957 class=g5_1 d="M1128.9 1358.8v.6c0 2.8 1.8 3.7 3.5 3.7 2 0 3.6-.9 3.6-3.3 0-4.6-9.1-4.1-9.1-10.2 0-3.6 2.5-5.5 6-5.5 3.7 0 5.8 1.8 5.6 5.9h-2.7c0-2.2-.7-3.7-3.1-3.7-1.6 0-3.2.8-3.2 3 0 4.5 9.2 3.9 9.2 10.3 0 4.3-3 5.7-6.4 5.7-6 .1-6-4.5-5.9-6.5z" fill=#010101><path stroke=#010101 d="M1128.9 1358.8v.6c0 2.8 1.8 3.7 3.5 3.7 2 0 3.6-.9 3.6-3.3 0-4.6-9.1-4.1-9.1-10.2 0-3.6 2.5-5.5 6-5.5 3.7 0 5.8 1.8 5.6 5.9h-2.7c0-2.2-.7-3.7-3.1-3.7-1.6 0-3.2.8-3.2 3 0 4.5 9.2 3.9 9.2 10.3 0 4.3-3 5.7-6.4 5.7-6 .1-6-4.5-5.9-6.5z" id=path7959 fill=none class=g6_1 stroke-width=.458><path id=path7961 class=g5_1 d="M1145.8 1358.8v.6c0 2.8 1.8 3.7 3.4 3.7 2.1 0 3.7-.9 3.7-3.3 0-4.6-9.2-4.1-9.2-10.2 0-3.6 2.6-5.5 6-5.5 3.8 0 5.9 1.8 5.7 5.9h-2.7c0-2.2-.7-3.7-3.2-3.7-1.5 0-3.1.8-3.1 3 0 4.5 9.2 3.9 9.2 10.3 0 4.3-3 5.7-6.4 5.7-6 .1-6-4.5-6-6.5z" fill=#010101><path stroke=#010101 d="M1145.8 1358.8v.6c0 2.8 1.8 3.7 3.4 3.7 2.1 0 3.7-.9 3.7-3.3 0-4.6-9.2-4.1-9.2-10.2 0-3.6 2.6-5.5 6-5.5 3.8 0 5.9 1.8 5.7 5.9h-2.7c0-2.2-.7-3.7-3.2-3.7-1.5 0-3.1.8-3.1 3 0 4.5 9.2 3.9 9.2 10.3 0 4.3-3 5.7-6.4 5.7-6 .1-6-4.5-6-6.5z" id=path7963 fill=none class=g6_1 stroke-width=.458><path id=path7965 class=g5_1 d="M1166.9 1346.9h-.1l-3.2 10.9h6.6zm-1.6-2.4h3.3l6.7 20.4h-3l-1.4-4.9h-7.9l-1.6 4.9h-2.6z" fill=#010101><path stroke=#010101 d="M1166.9 1346.9h-.1l-3.2 10.9h6.6zm-1.6-2.4h3.3l6.7 20.4h-3l-1.4-4.9h-7.9l-1.6 4.9h-2.6z" id=path7967 fill=none class=g6_1 stroke-width=.458><path id=path7969 class=g5_1 d="M833.8 1231.7c0-1.1-.1-2.3-.6-3-.6-.6-1.8-.8-2.3-.8-2.2 0-3 1.3-3.1 1.6-.1.2-.6.7-.6 4.2v5.5c0 5 1.6 5.6 3.6 5.6.8 0 3.2-.3 3.3-4.3h2.7c.1 6.4-4.5 6.4-5.8 6.4-2.6 0-6.5-.1-6.5-8v-5.8c0-5.8 2.6-7.4 6.6-7.4s5.6 2.1 5.4 6z" fill=#010101><path stroke=#010101 d="M833.8 1231.7c0-1.1-.1-2.3-.6-3-.6-.6-1.8-.8-2.3-.8-2.2 0-3 1.3-3.1 1.6-.1.2-.6.7-.6 4.2v5.5c0 5 1.6 5.6 3.6 5.6.8 0 3.2-.3 3.3-4.3h2.7c.1 6.4-4.5 6.4-5.8 6.4-2.6 0-6.5-.1-6.5-8v-5.8c0-5.8 2.6-7.4 6.6-7.4s5.6 2.1 5.4 6z" id=path7971 fill=none class=g6_1 stroke-width=.458><path id=path7973 class=g5_1 d="M848.4 1228.5h-.1l-3.2 10.9h6.6zm-1.6-2.4h3.3l6.7 20.4h-2.9l-1.5-4.8h-7.9l-1.5 4.8h-2.7z" fill=#010101><path stroke=#010101 d="M848.4 1228.5h-.1l-3.2 10.9h6.6zm-1.6-2.4h3.3l6.7 20.4h-2.9l-1.5-4.8h-7.9l-1.5 4.8h-2.7z" id=path7975 fill=none class=g6_1 stroke-width=.458><path id=path7977 class=g5_1 d="M863.2 1234.9h3.9c1.9 0 2.8-1.7 2.8-3.4 0-1.5-.8-3.1-2.8-3.1h-3.9zm0 2.2v9.4h-2.6v-20.4h7c3.6 0 4.9 2.5 4.9 5.1 0 2.4-1.3 4.2-3.7 4.7 2.3.4 3.2 1.2 3.3 5.3 0 .9.3 4 .7 5.3h-2.7c-.7-1.4-.6-4.1-.8-6.8-.2-2.5-2.2-2.6-3.1-2.6z" fill=#010101><path stroke=#010101 d="M863.2 1234.9h3.9c1.9 0 2.8-1.7 2.8-3.4 0-1.5-.8-3.1-2.8-3.1h-3.9zm0 2.2v9.4h-2.6v-20.4h7c3.6 0 4.9 2.5 4.9 5.1 0 2.4-1.3 4.2-3.7 4.7 2.3.4 3.2 1.2 3.3 5.3 0 .9.3 4 .7 5.3h-2.7c-.7-1.4-.6-4.1-.8-6.8-.2-2.5-2.2-2.6-3.1-2.6z" id=path7979 fill=none class=g6_1 stroke-width=.458><path id=path7981 class=g5_1 d="M889.5 1226.1v2.3h-5.3v18.1h-2.6v-18.1h-5.4v-2.3z" fill=#010101><path stroke=#010101 d="M889.5 1226.1v2.3h-5.3v18.1h-2.6v-18.1h-5.4v-2.3z" id=path7983 fill=none class=g6_1 stroke-width=.458><path id=path7985 class=g5_1 d="M896.9 1246.5h-2.6v-20.4h2.6z" fill=#010101><path stroke=#010101 d="M896.9 1246.5h-2.6v-20.4h2.6z" id=path7987 fill=none class=g6_1 stroke-width=.458><path id=path7989 class=g5_1 d="M902.9 1246.5v-20.4h10.6v2.3h-8v6.5h7.4v2.3h-7.4v7.1h8.1v2.2z" fill=#010101><path stroke=#010101 d="M902.9 1246.5v-20.4h10.6v2.3h-8v6.5h7.4v2.3h-7.4v7.1h8.1v2.2z" id=path7991 fill=none class=g6_1 stroke-width=.458><path id=path7993 class=g5_1 d="M921 1234.9h3.9c1.9 0 2.8-1.7 2.8-3.4 0-1.5-.7-3.1-2.7-3.1h-4zm0 2.2v9.4h-2.6v-20.4h7.1c3.6 0 4.9 2.5 4.9 5.1 0 2.4-1.3 4.2-3.8 4.7 2.4.4 3.2 1.2 3.4 5.3 0 .9.3 4 .7 5.3H928c-.8-1.4-.6-4.1-.8-6.8-.2-2.5-2.2-2.6-3.1-2.6z" fill=#010101><path stroke=#010101 d="M921 1234.9h3.9c1.9 0 2.8-1.7 2.8-3.4 0-1.5-.7-3.1-2.7-3.1h-4zm0 2.2v9.4h-2.6v-20.4h7.1c3.6 0 4.9 2.5 4.9 5.1 0 2.4-1.3 4.2-3.8 4.7 2.4.4 3.2 1.2 3.4 5.3 0 .9.3 4 .7 5.3H928c-.8-1.4-.6-4.1-.8-6.8-.2-2.5-2.2-2.6-3.1-2.6z" id=path7995 fill=none class=g6_1 stroke-width=.458><path id=path7997 class=g5_1 d="M560.7 1194.6h2.5c3.6 0 5-1.4 5-6.1v-4.1c0-4.2-1.3-5.7-4-5.7h-3.5zm-2.6-18.2h6.3c2.6 0 4.5 1 5.5 3.1.8 1.8.9 5.8.9 6.5 0 4.4-.4 6.9-1.2 8.2-1.1 1.8-3.2 2.7-6.8 2.7h-4.7z" fill=#010101><path stroke=#010101 d="M560.7 1194.6h2.5c3.6 0 5-1.4 5-6.1v-4.1c0-4.2-1.3-5.7-4-5.7h-3.5zm-2.6-18.2h6.3c2.6 0 4.5 1 5.5 3.1.8 1.8.9 5.8.9 6.5 0 4.4-.4 6.9-1.2 8.2-1.1 1.8-3.2 2.7-6.8 2.7h-4.7z" id=path7999 fill=none class=g6_1 stroke-width=.458><path id=path8001 class=g5_1 d="M576.5 1196.9v-20.5H587v2.3h-7.9v6.6h7.4v2.2h-7.4v7.1h8.1v2.3z" fill=#010101><path stroke=#010101 d="M576.5 1196.9v-20.5H587v2.3h-7.9v6.6h7.4v2.2h-7.4v7.1h8.1v2.3z" id=path8003 fill=none class=g6_1 stroke-width=.458><path id=path8005 class=g5_1 d="M599.2 1196.9v-20.5h2.6v18.2h7.5v2.3z" fill=#010101><path stroke=#010101 d="M599.2 1196.9v-20.5h2.6v18.2h7.5v2.3z" id=path8007 fill=none class=g6_1 stroke-width=.458><path id=path8009 class=g5_1 d="m620.2 1178.8-3.2 10.9h6.5zm-1.5-2.4h3.3l6.6 20.5h-2.9l-1.5-4.9h-7.9l-1.5 4.9h-2.6z" fill=#010101><path stroke=#010101 d="m620.2 1178.8-3.2 10.9h6.5zm-1.5-2.4h3.3l6.6 20.5h-2.9l-1.5-4.9h-7.9l-1.5 4.9h-2.6z" id=path8011 fill=none class=g6_1 stroke-width=.458><path id=path8013 class=g5_1 d="M648.9 1182.1c0-1.2-.1-2.4-.6-3-.5-.7-1.8-.9-2.3-.9-2.1 0-3 1.3-3.1 1.6-.1.2-.6.7-.6 4.2v5.5c0 5 1.7 5.6 3.7 5.6.8 0 3.2-.3 3.2-4.3h2.7c.1 6.5-4.4 6.5-5.8 6.5-2.5 0-6.4-.2-6.4-8.1v-5.8c0-5.8 2.5-7.4 6.5-7.4 4.1 0 5.6 2.1 5.4 6.1z" fill=#010101><path stroke=#010101 d="M648.9 1182.1c0-1.2-.1-2.4-.6-3-.5-.7-1.8-.9-2.3-.9-2.1 0-3 1.3-3.1 1.6-.1.2-.6.7-.6 4.2v5.5c0 5 1.7 5.6 3.7 5.6.8 0 3.2-.3 3.2-4.3h2.7c.1 6.5-4.4 6.5-5.8 6.5-2.5 0-6.4-.2-6.4-8.1v-5.8c0-5.8 2.5-7.4 6.5-7.4 4.1 0 5.6 2.1 5.4 6.1z" id=path8015 fill=none class=g6_1 stroke-width=.458><path id=path8017 class=g5_1 d="M666.9 1189.5v-6.9c0-4.3-3-4.4-3.8-4.4s-3.8.1-3.8 4.4v6.9c0 4.5 1.3 5.6 3.8 5.6s3.8-1.1 3.8-5.6m-10.2-.1v-6.7c0-4.1 2.1-6.7 6.4-6.7s6.4 2.6 6.4 6.7v6.7c0 5.7-2.1 7.9-6.4 7.9s-6.4-2.2-6.4-7.9z" fill=#010101><path stroke=#010101 d="M666.9 1189.5v-6.9c0-4.3-3-4.4-3.8-4.4s-3.8.1-3.8 4.4v6.9c0 4.5 1.3 5.6 3.8 5.6s3.8-1.1 3.8-5.6zm-10.2-.1v-6.7c0-4.1 2.1-6.7 6.4-6.7s6.4 2.6 6.4 6.7v6.7c0 5.7-2.1 7.9-6.4 7.9s-6.4-2.2-6.4-7.9z" id=path8019 fill=none class=g6_1 stroke-width=.458><path id=path8021 class=g5_1 d="M689.3 1176.4v20.5h-3.5l-8.1-17.8v17.8h-2.4v-20.5h3.7l8 17.5v-17.5z" fill=#010101><path stroke=#010101 d="M689.3 1176.4v20.5h-3.5l-8.1-17.8v17.8h-2.4v-20.5h3.7l8 17.5v-17.5z" id=path8023 fill=none class=g6_1 stroke-width=.458><path id=path8025 class=g5_1 d="M704.2 1182.1c0-1.2 0-2.4-.6-3-.5-.7-1.7-.9-2.3-.9-2.1 0-3 1.3-3.1 1.6 0 .2-.6.7-.6 4.2v5.5c0 5 1.7 5.6 3.7 5.6.8 0 3.2-.3 3.2-4.3h2.7c.1 6.5-4.4 6.5-5.8 6.5-2.5 0-6.4-.2-6.4-8.1v-5.8c0-5.8 2.5-7.4 6.5-7.4 4.1 0 5.7 2.1 5.4 6.1z" fill=#010101><path stroke=#010101 d="M704.2 1182.1c0-1.2 0-2.4-.6-3-.5-.7-1.7-.9-2.3-.9-2.1 0-3 1.3-3.1 1.6 0 .2-.6.7-.6 4.2v5.5c0 5 1.7 5.6 3.7 5.6.8 0 3.2-.3 3.2-4.3h2.7c.1 6.5-4.4 6.5-5.8 6.5-2.5 0-6.4-.2-6.4-8.1v-5.8c0-5.8 2.5-7.4 6.5-7.4 4.1 0 5.7 2.1 5.4 6.1z" id=path8027 fill=none class=g6_1 stroke-width=.458><path id=path8029 class=g5_1 d="M722.2 1189.5v-6.9c0-4.3-3-4.4-3.8-4.4s-3.7.1-3.7 4.4v6.9c0 4.5 1.3 5.6 3.7 5.6 2.5 0 3.8-1.1 3.8-5.6m-10.2-.1v-6.7c0-4.1 2.1-6.7 6.4-6.7 4.4 0 6.4 2.6 6.4 6.7v6.7c0 5.7-2 7.9-6.4 7.9-4.3 0-6.4-2.2-6.4-7.9z" fill=#010101><path stroke=#010101 d="M722.2 1189.5v-6.9c0-4.3-3-4.4-3.8-4.4s-3.7.1-3.7 4.4v6.9c0 4.5 1.3 5.6 3.7 5.6 2.5 0 3.8-1.1 3.8-5.6zm-10.2-.1v-6.7c0-4.1 2.1-6.7 6.4-6.7 4.4 0 6.4 2.6 6.4 6.7v6.7c0 5.7-2 7.9-6.4 7.9-4.3 0-6.4-2.2-6.4-7.9z" id=path8031 fill=none class=g6_1 stroke-width=.458><path id=path8033 class=g5_1 d="M733.1 1185.2h3.9c1.8 0 2.7-1.6 2.7-3.4 0-1.5-.7-3.1-2.7-3.1h-3.9zm0 2.3v9.4h-2.6v-20.5h7c3.6 0 4.9 2.6 4.9 5.1 0 2.4-1.3 4.3-3.7 4.7 2.3.4 3.2 1.2 3.3 5.3 0 .9.3 4.1.7 5.4H740c-.7-1.5-.6-4.1-.8-6.8-.2-2.5-2.2-2.6-3.1-2.6z" fill=#010101><path stroke=#010101 d="M733.1 1185.2h3.9c1.8 0 2.7-1.6 2.7-3.4 0-1.5-.7-3.1-2.7-3.1h-3.9zm0 2.3v9.4h-2.6v-20.5h7c3.6 0 4.9 2.6 4.9 5.1 0 2.4-1.3 4.3-3.7 4.7 2.3.4 3.2 1.2 3.3 5.3 0 .9.3 4.1.7 5.4H740c-.7-1.5-.6-4.1-.8-6.8-.2-2.5-2.2-2.6-3.1-2.6z" id=path8035 fill=none class=g6_1 stroke-width=.458><path id=path8037 class=g5_1 d="M750.9 1194.6h2.5c3.6 0 4.9-1.4 4.9-6.1v-4.1c0-4.2-1.3-5.7-4-5.7h-3.4zm-2.6-18.2h6.3c2.6 0 4.4 1 5.5 3.1.8 1.8.9 5.8.9 6.5 0 4.4-.4 6.9-1.3 8.2-1.1 1.8-3.1 2.7-6.7 2.7h-4.7z" fill=#010101><path stroke=#010101 d="M750.9 1194.6h2.5c3.6 0 4.9-1.4 4.9-6.1v-4.1c0-4.2-1.3-5.7-4-5.7h-3.4zm-2.6-18.2h6.3c2.6 0 4.4 1 5.5 3.1.8 1.8.9 5.8.9 6.5 0 4.4-.4 6.9-1.3 8.2-1.1 1.8-3.1 2.7-6.7 2.7h-4.7z" id=path8039 fill=none class=g6_1 stroke-width=.458><path id=path8041 class=g5_1 d="M766.7 1196.9v-20.5h10.5v2.3h-7.9v6.6h7.3v2.2h-7.3v7.1h8.1v2.3z" fill=#010101><path stroke=#010101 d="M766.7 1196.9v-20.5h10.5v2.3h-7.9v6.6h7.3v2.2h-7.3v7.1h8.1v2.3z" id=path8043 fill=none class=g6_1 stroke-width=.458><path id=path8045 class=g5_1 d="M978.3 1845.4h2.9c1 0 3.6-.3 3.6-3.5 0-3.1-2.3-3.4-2.9-3.4h-3.6zm-2.6 11.2v-20.4h6.1c2.7 0 5.7 1 5.7 5.8 0 4.7-3.7 5.6-5.8 5.6h-3.4v9z" fill=#010101><path stroke=#010101 d="M978.3 1845.4h2.9c1 0 3.6-.3 3.6-3.5 0-3.1-2.3-3.4-2.9-3.4h-3.6zm-2.6 11.2v-20.4h6.1c2.7 0 5.7 1 5.7 5.8 0 4.7-3.7 5.6-5.8 5.6h-3.4v9z" id=path8047 fill=none class=g6_1 stroke-width=.458><path id=path8049 class=g5_1 d="m997 1838.6-3.2 10.9h6.5zm-1.6-2.4h3.4l6.6 20.4h-2.9l-1.5-4.8h-7.9l-1.5 4.8H989z" fill=#010101><path stroke=#010101 d="m997 1838.6-3.2 10.9h6.5zm-1.6-2.4h3.4l6.6 20.4h-2.9l-1.5-4.8h-7.9l-1.5 4.8H989z" id=path8051 fill=none class=g6_1 stroke-width=.458><path id=path8053 class=g5_1 d="M1011.8 1845h3.9c1.9 0 2.8-1.6 2.8-3.4 0-1.5-.7-3.1-2.8-3.1h-3.9zm0 2.2v9.4h-2.6v-20.4h7.1c3.6 0 4.8 2.6 4.8 5.1 0 2.4-1.3 4.2-3.7 4.7 2.4.4 3.2 1.2 3.4 5.3 0 .9.3 4.1.7 5.3h-2.8c-.7-1.4-.5-4-.8-6.8-.1-2.4-2.2-2.6-3-2.6z" fill=#010101><path stroke=#010101 d="M1011.8 1845h3.9c1.9 0 2.8-1.6 2.8-3.4 0-1.5-.7-3.1-2.8-3.1h-3.9zm0 2.2v9.4h-2.6v-20.4h7.1c3.6 0 4.8 2.6 4.8 5.1 0 2.4-1.3 4.2-3.7 4.7 2.4.4 3.2 1.2 3.4 5.3 0 .9.3 4.1.7 5.3h-2.8c-.7-1.4-.5-4-.8-6.8-.1-2.4-2.2-2.6-3-2.6z" id=path8055 fill=none class=g6_1 stroke-width=.458><path id=path8057 class=g5_1 d="M1035.7 1841.8c0-1.1-.1-2.3-.6-2.9-.5-.7-1.8-.9-2.3-.9-2.1 0-3 1.3-3.1 1.6-.1.2-.6.7-.6 4.2v5.5c0 5 1.7 5.6 3.7 5.6.8 0 3.2-.3 3.2-4.3h2.7c.1 6.5-4.4 6.5-5.8 6.5-2.5 0-6.4-.2-6.4-8.1v-5.8c0-5.8 2.5-7.4 6.5-7.4 4.1 0 5.6 2.1 5.4 6z" fill=#010101><path stroke=#010101 d="M1035.7 1841.8c0-1.1-.1-2.3-.6-2.9-.5-.7-1.8-.9-2.3-.9-2.1 0-3 1.3-3.1 1.6-.1.2-.6.7-.6 4.2v5.5c0 5 1.7 5.6 3.7 5.6.8 0 3.2-.3 3.2-4.3h2.7c.1 6.5-4.4 6.5-5.8 6.5-2.5 0-6.4-.2-6.4-8.1v-5.8c0-5.8 2.5-7.4 6.5-7.4 4.1 0 5.6 2.1 5.4 6z" id=path8059 fill=none class=g6_1 stroke-width=.458><path id=path8061 class=g5_1 d="M954.1 1987.6h-.1l-3.2 10.9h6.6zm-1.6-2.4h3.3l6.7 20.5h-2.9l-1.5-4.9h-7.9l-1.5 4.9H946z" fill=#010101><path stroke=#010101 d="M954.1 1987.6h-.1l-3.2 10.9h6.6zm-1.6-2.4h3.3l6.7 20.5h-2.9l-1.5-4.9h-7.9l-1.5 4.9H946z" id=path8063 fill=none class=g6_1 stroke-width=.458><path id=path8065 class=g5_1 d="M975 1990.9c.1-1.2 0-2.4-.6-3-.5-.7-1.7-.9-2.2-.9-2.2 0-3 1.3-3.1 1.6-.1.2-.6.7-.6 4.2v5.5c0 5 1.6 5.6 3.6 5.6.8 0 3.2-.3 3.3-4.3h2.6c.2 6.5-4.4 6.5-5.7 6.5-2.6 0-6.5-.2-6.5-8.1v-5.8c0-5.8 2.6-7.4 6.6-7.4s5.6 2.1 5.3 6.1z" fill=#010101><path stroke=#010101 d="M975 1990.9c.1-1.2 0-2.4-.6-3-.5-.7-1.7-.9-2.2-.9-2.2 0-3 1.3-3.1 1.6-.1.2-.6.7-.6 4.2v5.5c0 5 1.6 5.6 3.6 5.6.8 0 3.2-.3 3.3-4.3h2.6c.2 6.5-4.4 6.5-5.7 6.5-2.6 0-6.5-.2-6.5-8.1v-5.8c0-5.8 2.6-7.4 6.6-7.4s5.6 2.1 5.3 6.1z" id=path8067 fill=none class=g6_1 stroke-width=.458><path id=path8069 class=g5_1 d="m989.1 1987.6-3.2 10.9h6.5zm-1.6-2.4h3.3l6.7 20.5h-2.9l-1.5-4.9h-7.9l-1.5 4.9H981z" fill=#010101><path stroke=#010101 d="m989.1 1987.6-3.2 10.9h6.5zm-1.6-2.4h3.3l6.7 20.5h-2.9l-1.5-4.9h-7.9l-1.5 4.9H981z" id=path8071 fill=none class=g6_1 stroke-width=.458><path id=path8073 class=g5_1 d="M1004.3 2003.4h2.5c3.6 0 4.9-1.4 4.9-6.1v-4.2c0-4.1-1.3-5.6-4-5.6h-3.4zm-2.6-18.2h6.3c2.6 0 4.4 1 5.5 3.1.8 1.8.9 5.8.9 6.5 0 4.3-.4 6.9-1.3 8.2-1.1 1.8-3.2 2.7-6.7 2.7h-4.7z" fill=#010101><path stroke=#010101 d="M1004.3 2003.4h2.5c3.6 0 4.9-1.4 4.9-6.1v-4.2c0-4.1-1.3-5.6-4-5.6h-3.4zm-2.6-18.2h6.3c2.6 0 4.4 1 5.5 3.1.8 1.8.9 5.8.9 6.5 0 4.3-.4 6.9-1.3 8.2-1.1 1.8-3.2 2.7-6.7 2.7h-4.7z" id=path8075 fill=none class=g6_1 stroke-width=.458><path id=path8077 class=g5_1 d="M1022.7 2005.7h-2.6v-20.5h2.6z" fill=#010101><path stroke=#010101 d="M1022.7 2005.7h-2.6v-20.5h2.6z" id=path8079 fill=none class=g6_1 stroke-width=.458><path id=path8081 class=g5_1 d="M1029.1 2005.7v-20.5h10.5v2.3h-7.9v6.6h7.3v2.2h-7.3v7.1h8.1v2.3z" fill=#010101><path stroke=#010101 d="M1029.1 2005.7v-20.5h10.5v2.3h-7.9v6.6h7.3v2.2h-7.3v7.1h8.1v2.3z" id=path8083 fill=none class=g6_1 stroke-width=.458><path id=path8085 class=g5_1 d="M887.9 2150.8v-6.9c0-4.3-3-4.4-3.8-4.4s-3.7.1-3.7 4.4v6.9c0 4.5 1.3 5.6 3.7 5.6 2.5 0 3.8-1.1 3.8-5.6m-10.2-.1v-6.7c0-4.1 2.1-6.7 6.4-6.7s6.4 2.6 6.4 6.7v6.7c0 5.6-2.1 7.9-6.4 7.9s-6.4-2.3-6.4-7.9z" fill=#010101><path stroke=#010101 d="M887.9 2150.8v-6.9c0-4.3-3-4.4-3.8-4.4s-3.7.1-3.7 4.4v6.9c0 4.5 1.3 5.6 3.7 5.6 2.5 0 3.8-1.1 3.8-5.6zm-10.2-.1v-6.7c0-4.1 2.1-6.7 6.4-6.7s6.4 2.6 6.4 6.7v6.7c0 5.6-2.1 7.9-6.4 7.9s-6.4-2.3-6.4-7.9z" id=path8087 fill=none class=g6_1 stroke-width=.458><path id=path8089 class=g5_1 d="M896.1 2137.7h2.6v13.1c0 4.5 1.4 5.6 3.8 5.6 2.5 0 3.9-1.1 3.9-5.6v-13.1h2.6v13c0 5.6-2.1 7.9-6.5 7.9-4.3 0-6.4-2.3-6.4-7.9z" fill=#010101><path stroke=#010101 d="M896.1 2137.7h2.6v13.1c0 4.5 1.4 5.6 3.8 5.6 2.5 0 3.9-1.1 3.9-5.6v-13.1h2.6v13c0 5.6-2.1 7.9-6.5 7.9-4.3 0-6.4-2.3-6.4-7.9z" id=path8091 fill=none class=g6_1 stroke-width=.458><path id=path8093 class=g5_1 d="M926.7 2137.7v2.3h-5.4v18.1h-2.6V2140h-5.4v-2.3z" fill=#010101><path stroke=#010101 d="M926.7 2137.7v2.3h-5.4v18.1h-2.6V2140h-5.4v-2.3z" id=path8095 fill=none class=g6_1 stroke-width=.458><path id=path8097 class=g5_1 d="M933.6 2146.5h3.9c1.9 0 2.8-1.6 2.8-3.4 0-1.5-.8-3.1-2.8-3.1h-3.9zm0 2.2v9.4H931v-20.4h7c3.7 0 4.9 2.6 4.9 5.1 0 2.4-1.3 4.2-3.7 4.7 2.4.4 3.2 1.2 3.3 5.3.1.9.4 4.1.8 5.3h-2.8c-.7-1.4-.5-4-.8-6.7-.2-2.5-2.2-2.7-3-2.7z" fill=#010101><path stroke=#010101 d="M933.6 2146.5h3.9c1.9 0 2.8-1.6 2.8-3.4 0-1.5-.8-3.1-2.8-3.1h-3.9zm0 2.2v9.4H931v-20.4h7c3.7 0 4.9 2.6 4.9 5.1 0 2.4-1.3 4.2-3.7 4.7 2.4.4 3.2 1.2 3.3 5.3.1.9.4 4.1.8 5.3h-2.8c-.7-1.4-.5-4-.8-6.7-.2-2.5-2.2-2.7-3-2.7z" id=path8099 fill=none class=g6_1 stroke-width=.458><path id=path8101 class=g5_1 d="M948.5 2158.1v-20.4H959v2.3h-7.9v6.5h7.4v2.3h-7.4v7.1h8.1v2.2z" fill=#010101><path stroke=#010101 d="M948.5 2158.1v-20.4H959v2.3h-7.9v6.5h7.4v2.3h-7.4v7.1h8.1v2.2z" id=path8103 fill=none class=g6_1 stroke-width=.458><path id=path8105 class=g5_1 d="M966.5 2158.1h-2.4v-20.4h4.2l5.2 17.2 5.2-17.2h4.3v20.4h-2.6V2140l-5.8 18.1h-2.4l-5.6-18.1h-.1z" fill=#010101><path stroke=#010101 d="M966.5 2158.1h-2.4v-20.4h4.2l5.2 17.2 5.2-17.2h4.3v20.4h-2.6V2140l-5.8 18.1h-2.4l-5.6-18.1h-.1z" id=path8107 fill=none class=g6_1 stroke-width=.458><path id=path8109 class=g5_1 d="M998.9 2150.8v-6.9c0-4.3-3-4.4-3.8-4.4s-3.7.1-3.7 4.4v6.9c0 4.5 1.3 5.6 3.7 5.6 2.5 0 3.8-1.1 3.8-5.6m-10.2-.1v-6.7c0-4.1 2.1-6.7 6.4-6.7s6.4 2.6 6.4 6.7v6.7c0 5.6-2.1 7.9-6.4 7.9s-6.4-2.3-6.4-7.9z" fill=#010101><path stroke=#010101 d="M998.9 2150.8v-6.9c0-4.3-3-4.4-3.8-4.4s-3.7.1-3.7 4.4v6.9c0 4.5 1.3 5.6 3.7 5.6 2.5 0 3.8-1.1 3.8-5.6zm-10.2-.1v-6.7c0-4.1 2.1-6.7 6.4-6.7s6.4 2.6 6.4 6.7v6.7c0 5.6-2.1 7.9-6.4 7.9s-6.4-2.3-6.4-7.9z" id=path8111 fill=none class=g6_1 stroke-width=.458><path id=path8113 class=g5_1 d="M1021.4 2137.7v20.4h-3.6l-8.1-17.7v17.7h-2.4v-20.4h3.7l8 17.5v-17.5z" fill=#010101><path stroke=#010101 d="M1021.4 2137.7v20.4h-3.6l-8.1-17.7v17.7h-2.4v-20.4h3.7l8 17.5v-17.5z" id=path8115 fill=none class=g6_1 stroke-width=.458><path id=path8117 class=g5_1 d="M1039.2 2137.7v2.3h-5.3v18.1h-2.6V2140h-5.4v-2.3z" fill=#010101><path stroke=#010101 d="M1039.2 2137.7v2.3h-5.3v18.1h-2.6V2140h-5.4v-2.3z" id=path8119 fill=none class=g6_1 stroke-width=.458><path id=path8121 class=g5_1 d="M1325.5 1660.9v-20.4h10.1v2.3h-7.5v6.5h7.1v2.3h-7.1v9.3z" fill=#010101><path stroke=#010101 d="M1325.5 1660.9v-20.4h10.1v2.3h-7.5v6.5h7.1v2.3h-7.1v9.3z" id=path8123 fill=none class=g6_1 stroke-width=.458><path id=path8125 class=g5_1 d="M1346 1642.9h-.1l-3.2 10.9h6.6zm-1.6-2.4h3.3l6.6 20.4h-2.9l-1.4-4.8h-7.9l-1.6 4.8h-2.6z" fill=#010101><path stroke=#010101 d="M1346 1642.9h-.1l-3.2 10.9h6.6zm-1.6-2.4h3.3l6.6 20.4h-2.9l-1.4-4.8h-7.9l-1.6 4.8h-2.6z" id=path8127 fill=none class=g6_1 stroke-width=.458><path id=path8129 class=g5_1 d="M1361.1 1658.7h3.6c2.8 0 3.8-2 3.8-3.5 0-3.3-2-3.8-4.7-3.8h-2.7zm0-9.6h3.8c2 0 3-1.3 3-3.3 0-1.7-1-3-3.2-3h-3.6zm-2.6 11.8v-20.4h6.6c2.8 0 3.8 1 4.6 2.1.7 1.1.8 2.3.8 2.7 0 2.6-.9 4.3-3.5 4.8v.2c2.9.3 4.2 2.1 4.2 4.9 0 5.2-3.9 5.7-6.2 5.7z" fill=#010101><path stroke=#010101 d="M1361.1 1658.7h3.6c2.8 0 3.8-2 3.8-3.5 0-3.3-2-3.8-4.7-3.8h-2.7zm0-9.6h3.8c2 0 3-1.3 3-3.3 0-1.7-1-3-3.2-3h-3.6zm-2.6 11.8v-20.4h6.6c2.8 0 3.8 1 4.6 2.1.7 1.1.8 2.3.8 2.7 0 2.6-.9 4.3-3.5 4.8v.2c2.9.3 4.2 2.1 4.2 4.9 0 5.2-3.9 5.7-6.2 5.7z" id=path8131 fill=none class=g6_1 stroke-width=.458><path id=path8133 class=g5_1 d="M1379.2 1649.3h3.9c1.9 0 2.8-1.6 2.8-3.4 0-1.5-.8-3.1-2.8-3.1h-3.9zm0 2.2v9.4h-2.6v-20.4h7c3.6 0 4.9 2.5 4.9 5.1 0 2.4-1.3 4.2-3.7 4.7 2.3.4 3.2 1.2 3.3 5.3.1.9.3 4.1.7 5.3h-2.7c-.7-1.4-.6-4-.8-6.8-.2-2.4-2.2-2.6-3.1-2.6z" fill=#010101><path stroke=#010101 d="M1379.2 1649.3h3.9c1.9 0 2.8-1.6 2.8-3.4 0-1.5-.8-3.1-2.8-3.1h-3.9zm0 2.2v9.4h-2.6v-20.4h7c3.6 0 4.9 2.5 4.9 5.1 0 2.4-1.3 4.2-3.7 4.7 2.3.4 3.2 1.2 3.3 5.3.1.9.3 4.1.7 5.3h-2.7c-.7-1.4-.6-4-.8-6.8-.2-2.4-2.2-2.6-3.1-2.6z" id=path8135 fill=none class=g6_1 stroke-width=.458><path id=path8137 class=g5_1 d="M1394.1 1660.9v-20.4h10.5v2.3h-7.9v6.5h7.3v2.3h-7.3v7.1h8.1v2.2z" fill=#010101><path stroke=#010101 d="M1394.1 1660.9v-20.4h10.5v2.3h-7.9v6.5h7.3v2.3h-7.3v7.1h8.1v2.2z" id=path8139 fill=none class=g6_1 stroke-width=.458><path id=path8141 class=g5_1 d="M1403.3 1582.8h2.4c3.7 0 5-1.4 5-6.1v-4.2c0-4.1-1.3-5.6-4-5.6h-3.4zm-2.6-18.2h6.3c2.6 0 4.4 1 5.4 3.1.9 1.8 1 5.8 1 6.5 0 4.3-.4 6.9-1.3 8.2-1.1 1.8-3.2 2.7-6.7 2.7h-4.7z" fill=#010101><path stroke=#010101 d="M1403.3 1582.8h2.4c3.7 0 5-1.4 5-6.1v-4.2c0-4.1-1.3-5.6-4-5.6h-3.4zm-2.6-18.2h6.3c2.6 0 4.4 1 5.4 3.1.9 1.8 1 5.8 1 6.5 0 4.3-.4 6.9-1.3 8.2-1.1 1.8-3.2 2.7-6.7 2.7h-4.7z" id=path8143 fill=none class=g6_1 stroke-width=.458><path id=path8145 class=g5_1 d="M1417.8 1564.6h3.1l-2.3 5.7h-2z" fill=#010101><path stroke=#010101 d="M1417.8 1564.6h3.1l-2.3 5.7h-2z" id=path8147 fill=none class=g6_1 stroke-width=.458><path id=path8149 class=g5_1 d="M1428 1585.1h-2.6v-20.5h2.6z" fill=#010101><path stroke=#010101 d="M1428 1585.1h-2.6v-20.5h2.6z" id=path8151 fill=none class=g6_1 stroke-width=.458><path id=path8153 class=g5_1 d="M1436.9 1582.8h3.7c2.8 0 3.8-2 3.8-3.5 0-3.2-2.1-3.8-4.7-3.8h-2.8zm0-9.6h3.8c2 0 3-1.2 3-3.2 0-1.7-.9-3.1-3.1-3.1h-3.7zm-2.6 11.9v-20.5h6.7c2.8 0 3.7 1 4.5 2.1.7 1.1.8 2.3.8 2.7 0 2.6-.8 4.3-3.5 4.9v.1c2.9.4 4.2 2.1 4.2 4.9 0 5.2-3.8 5.8-6.1 5.8z" fill=#010101><path stroke=#010101 d="M1436.9 1582.8h3.7c2.8 0 3.8-2 3.8-3.5 0-3.2-2.1-3.8-4.7-3.8h-2.8zm0-9.6h3.8c2 0 3-1.2 3-3.2 0-1.7-.9-3.1-3.1-3.1h-3.7zm-2.6 11.9v-20.5h6.7c2.8 0 3.7 1 4.5 2.1.7 1.1.8 2.3.8 2.7 0 2.6-.8 4.3-3.5 4.9v.1c2.9.4 4.2 2.1 4.2 4.9 0 5.2-3.8 5.8-6.1 5.8z" id=path8155 fill=none class=g6_1 stroke-width=.458><path id=path8157 class=g5_1 d="M1451.9 1585.1v-20.5h10.5v2.3h-7.9v6.6h7.4v2.2h-7.4v7.1h8.1v2.3z" fill=#010101><path stroke=#010101 d="M1451.9 1585.1v-20.5h10.5v2.3h-7.9v6.6h7.4v2.2h-7.4v7.1h8.1v2.3z" id=path8159 fill=none class=g6_1 stroke-width=.458><path id=path8161 class=g5_1 d="M1469.7 1573.4h4c1.8 0 2.7-1.6 2.7-3.4 0-1.5-.7-3.1-2.7-3.1h-4zm0 2.3v9.4h-2.6v-20.5h7.1c3.6 0 4.9 2.6 4.9 5.1 0 2.4-1.3 4.3-3.7 4.7 2.3.4 3.1 1.2 3.3 5.3 0 .9.3 4.1.7 5.4h-2.7c-.8-1.5-.6-4.1-.8-6.8-.2-2.5-2.2-2.6-3.1-2.6z" fill=#010101><path stroke=#010101 d="M1469.7 1573.4h4c1.8 0 2.7-1.6 2.7-3.4 0-1.5-.7-3.1-2.7-3.1h-4zm0 2.3v9.4h-2.6v-20.5h7.1c3.6 0 4.9 2.6 4.9 5.1 0 2.4-1.3 4.3-3.7 4.7 2.3.4 3.1 1.2 3.3 5.3 0 .9.3 4.1.7 5.4h-2.7c-.8-1.5-.6-4.1-.8-6.8-.2-2.5-2.2-2.6-3.1-2.6z" id=path8163 fill=none class=g6_1 stroke-width=.458><path id=path8165 class=g5_1 d="M1491.7 1585.1h-3.1l-5.9-20.5h2.8l4.7 18h.1l4.8-18h2.6z" fill=#010101><path stroke=#010101 d="M1491.7 1585.1h-3.1l-5.9-20.5h2.8l4.7 18h.1l4.8-18h2.6z" id=path8167 fill=none class=g6_1 stroke-width=.458><path id=path8169 class=g5_1 d="M1505 1585.1h-2.6v-20.5h2.6z" fill=#010101><path stroke=#010101 d="M1505 1585.1h-2.6v-20.5h2.6z" id=path8171 fill=none class=g6_1 stroke-width=.458><path id=path8173 class=g5_1 d="M1511.1 1585.1v-20.5h2.6v18.2h7.5v2.3z" fill=#010101><path stroke=#010101 d="M1511.1 1585.1v-20.5h2.6v18.2h7.5v2.3z" id=path8175 fill=none class=g6_1 stroke-width=.458><path id=path8177 class=g5_1 d="M1525.3 1585.1v-20.5h2.7v18.2h7.4v2.3z" fill=#010101><path stroke=#010101 d="M1525.3 1585.1v-20.5h2.7v18.2h7.4v2.3z" id=path8179 fill=none class=g6_1 stroke-width=.458><path id=path8181 class=g5_1 d="M1539.6 1585.1v-20.5h10.5v2.3h-7.9v6.6h7.4v2.2h-7.4v7.1h8.1v2.3z" fill=#010101><path stroke=#010101 d="M1539.6 1585.1v-20.5h10.5v2.3h-7.9v6.6h7.4v2.2h-7.4v7.1h8.1v2.3z" id=path8183 fill=none class=g6_1 stroke-width=.458><path id=path8185 class=g5_1 d="M1360.4 2216.7v.6c0 2.7 1.8 3.6 3.4 3.6 2.1 0 3.7-.9 3.7-3.3 0-4.5-9.2-4-9.2-10.2 0-3.6 2.6-5.5 6-5.5 3.7 0 5.8 1.8 5.7 6h-2.7c0-2.3-.7-3.7-3.2-3.7-1.5 0-3.1.8-3.1 3 0 4.5 9.1 3.8 9.1 10.3 0 4.3-2.9 5.7-6.3 5.7-6 0-6-4.6-6-6.5z" fill=#010101><path stroke=#010101 d="M1360.4 2216.7v.6c0 2.7 1.8 3.6 3.4 3.6 2.1 0 3.7-.9 3.7-3.3 0-4.5-9.2-4-9.2-10.2 0-3.6 2.6-5.5 6-5.5 3.7 0 5.8 1.8 5.7 6h-2.7c0-2.3-.7-3.7-3.2-3.7-1.5 0-3.1.8-3.1 3 0 4.5 9.1 3.8 9.1 10.3 0 4.3-2.9 5.7-6.3 5.7-6 0-6-4.6-6-6.5z" id=path8187 fill=none class=g6_1 stroke-width=.458><path id=path8189 class=g5_1 d="M1381.2 2204.7h-.1l-3.2 10.9h6.6zm-1.6-2.4h3.3l6.7 20.5h-3l-1.4-4.9h-7.9l-1.6 4.9h-2.6z" fill=#010101><path stroke=#010101 d="M1381.2 2204.7h-.1l-3.2 10.9h6.6zm-1.6-2.4h3.3l6.7 20.5h-3l-1.4-4.9h-7.9l-1.6 4.9h-2.6z" id=path8191 fill=none class=g6_1 stroke-width=.458><path id=path8193 class=g5_1 d="M1396.4 2222.8h-2.6v-20.5h2.6z" fill=#010101><path stroke=#010101 d="M1396.4 2222.8h-2.6v-20.5h2.6z" id=path8195 fill=none class=g6_1 stroke-width=.458><path id=path8197 class=g5_1 d="M1416.6 2202.3v20.5h-3.6l-8.1-17.8v17.8h-2.3v-20.5h3.6l8 17.5v-17.5z" fill=#010101><path stroke=#010101 d="M1416.6 2202.3v20.5h-3.6l-8.1-17.8v17.8h-2.3v-20.5h3.6l8 17.5v-17.5z" id=path8199 fill=none class=g6_1 stroke-width=.458><path id=path8201 class=g5_1 d="M1434.2 2202.3v2.3h-5.4v18.2h-2.6v-18.2h-5.4v-2.3z" fill=#010101><path stroke=#010101 d="M1434.2 2202.3v2.3h-5.4v18.2h-2.6v-18.2h-5.4v-2.3z" id=path8203 fill=none class=g6_1 stroke-width=.458><path id=path8205 class=g5_1 d="M1435.9 2211.1h6.2v2.2h-6.2z" fill=#010101><path stroke=#010101 d="M1435.9 2211.1h6.2v2.2h-6.2z" id=path8207 fill=none class=g6_1 stroke-width=.458><path id=path8209 class=g5_1 d="M1447.1 2222.8v-20.5h2.6v18.2h7.5v2.3z" fill=#010101><path stroke=#010101 d="M1447.1 2222.8v-20.5h2.6v18.2h7.5v2.3z" id=path8211 fill=none class=g6_1 stroke-width=.458><path id=path8213 class=g5_1 d="M1468.5 2204.7h-.1l-3.2 10.9h6.5zm-1.6-2.4h3.3l6.6 20.5h-2.9l-1.5-4.9h-7.8l-1.6 4.9h-2.6z" fill=#010101><path stroke=#010101 d="M1468.5 2204.7h-.1l-3.2 10.9h6.5zm-1.6-2.4h3.3l6.6 20.5h-2.9l-1.5-4.9h-7.8l-1.6 4.9h-2.6z" id=path8215 fill=none class=g6_1 stroke-width=.458><path id=path8217 class=g5_1 d="M1480.3 2202.3h2.6v13.1c0 4.5 1.4 5.6 3.8 5.6 2.5 0 3.9-1.1 3.9-5.6v-13.1h2.6v13c0 5.6-2.1 7.9-6.5 7.9-4.3 0-6.4-2.3-6.4-7.9z" fill=#010101><path stroke=#010101 d="M1480.3 2202.3h2.6v13.1c0 4.5 1.4 5.6 3.8 5.6 2.5 0 3.9-1.1 3.9-5.6v-13.1h2.6v13c0 5.6-2.1 7.9-6.5 7.9-4.3 0-6.4-2.3-6.4-7.9z" id=path8219 fill=none class=g6_1 stroke-width=.458><path id=path8221 class=g5_1 d="M1501.4 2211.1h3.9c1.9 0 2.8-1.6 2.8-3.4 0-1.5-.8-3.1-2.8-3.1h-3.9zm0 2.3v9.4h-2.6v-20.5h7c3.6 0 4.9 2.6 4.9 5.1 0 2.4-1.3 4.3-3.7 4.7 2.3.4 3.2 1.2 3.3 5.3.1.9.3 4.1.7 5.4h-2.7c-.7-1.5-.6-4.1-.8-6.8-.2-2.5-2.2-2.6-3.1-2.6z" fill=#010101><path stroke=#010101 d="M1501.4 2211.1h3.9c1.9 0 2.8-1.6 2.8-3.4 0-1.5-.8-3.1-2.8-3.1h-3.9zm0 2.3v9.4h-2.6v-20.5h7c3.6 0 4.9 2.6 4.9 5.1 0 2.4-1.3 4.3-3.7 4.7 2.3.4 3.2 1.2 3.3 5.3.1.9.3 4.1.7 5.4h-2.7c-.7-1.5-.6-4.1-.8-6.8-.2-2.5-2.2-2.6-3.1-2.6z" id=path8223 fill=none class=g6_1 stroke-width=.458><path id=path8225 class=g5_1 d="M1516.3 2222.8v-20.5h10.5v2.3h-7.9v6.6h7.3v2.2h-7.3v7.1h8.1v2.3z" fill=#010101><path stroke=#010101 d="M1516.3 2222.8v-20.5h10.5v2.3h-7.9v6.6h7.3v2.2h-7.3v7.1h8.1v2.3z" id=path8227 fill=none class=g6_1 stroke-width=.458><path id=path8229 class=g5_1 d="M1546 2202.3v20.5h-3.6l-8-17.8h-.1v17.8h-2.3v-20.5h3.7l7.9 17.5h.1v-17.5z" fill=#010101><path stroke=#010101 d="M1546 2202.3v20.5h-3.6l-8-17.8h-.1v17.8h-2.3v-20.5h3.7l7.9 17.5h.1v-17.5z" id=path8231 fill=none class=g6_1 stroke-width=.458><path id=path8233 class=g5_1 d="M1563.3 2202.3v2.3h-5.4v18.2h-2.6v-18.2h-5.3v-2.3z" fill=#010101><path stroke=#010101 d="M1563.3 2202.3v2.3h-5.4v18.2h-2.6v-18.2h-5.3v-2.3z" id=path8235 fill=none class=g6_1 stroke-width=.458><path id=path8237 class=g5_1 d="M1271.6 2287.9h2.9c1 0 3.6-.3 3.6-3.5 0-3.1-2.3-3.4-2.9-3.4h-3.6zm-2.6 11.2v-20.4h6.1c2.7 0 5.7 1 5.7 5.8 0 4.7-3.7 5.6-5.8 5.6h-3.4v9z" fill=#010101><path stroke=#010101 d="M1271.6 2287.9h2.9c1 0 3.6-.3 3.6-3.5 0-3.1-2.3-3.4-2.9-3.4h-3.6zm-2.6 11.2v-20.4h6.1c2.7 0 5.7 1 5.7 5.8 0 4.7-3.7 5.6-5.8 5.6h-3.4v9z" id=path8239 fill=none class=g6_1 stroke-width=.458><path id=path8241 class=g5_1 d="M1285.5 2299.1v-20.4h2.6v18.2h7.5v2.2z" fill=#010101><path stroke=#010101 d="M1285.5 2299.1v-20.4h2.6v18.2h7.5v2.2z" id=path8243 fill=none class=g6_1 stroke-width=.458><path id=path8245 class=g5_1 d="m1307.1 2281.1-3.2 10.9h6.5zm-1.5-2.4h3.3l6.6 20.4h-2.9l-1.5-4.8h-7.9l-1.5 4.8h-2.6z" fill=#010101><path stroke=#010101 d="m1307.1 2281.1-3.2 10.9h6.5zm-1.5-2.4h3.3l6.6 20.4h-2.9l-1.5-4.8h-7.9l-1.5 4.8h-2.6z" id=path8247 fill=none class=g6_1 stroke-width=.458><path id=path8249 class=g5_1 d="M1328.1 2284.3c0-1.1-.1-2.3-.6-2.9-.5-.7-1.8-.9-2.3-.9-2.2 0-3 1.3-3.1 1.6-.1.2-.6.7-.6 4.2v5.5c0 5 1.7 5.6 3.7 5.6.8 0 3.2-.3 3.2-4.3h2.7c.1 6.5-4.5 6.5-5.8 6.5-2.5 0-6.4-.2-6.4-8.1v-5.8c0-5.8 2.5-7.4 6.5-7.4 4.1 0 5.6 2.1 5.4 6z" fill=#010101><path stroke=#010101 d="M1328.1 2284.3c0-1.1-.1-2.3-.6-2.9-.5-.7-1.8-.9-2.3-.9-2.2 0-3 1.3-3.1 1.6-.1.2-.6.7-.6 4.2v5.5c0 5 1.7 5.6 3.7 5.6.8 0 3.2-.3 3.2-4.3h2.7c.1 6.5-4.5 6.5-5.8 6.5-2.5 0-6.4-.2-6.4-8.1v-5.8c0-5.8 2.5-7.4 6.5-7.4 4.1 0 5.6 2.1 5.4 6z" id=path8251 fill=none class=g6_1 stroke-width=.458><path id=path8253 class=g5_1 d="M1336 2299.1v-20.4h10.5v2.3h-7.9v6.5h7.3v2.3h-7.3v7.1h8.1v2.2z" fill=#010101><path stroke=#010101 d="M1336 2299.1v-20.4h10.5v2.3h-7.9v6.5h7.3v2.3h-7.3v7.1h8.1v2.2z" id=path8255 fill=none class=g6_1 stroke-width=.458><path id=path8257 class=g5_1 d="M1351.1 2287.5h6.2v2.2h-6.2z" fill=#010101><path stroke=#010101 d="M1351.1 2287.5h6.2v2.2h-6.2z" id=path8259 fill=none class=g6_1 stroke-width=.458><path id=path8261 class=g5_1 d="M1365 2296.9h2.5c3.6 0 4.9-1.4 4.9-6.1v-4.2c0-4.1-1.2-5.6-3.9-5.6h-3.5zm-2.6-18.2h6.3c2.6 0 4.5.9 5.5 3.1.8 1.7.9 5.8.9 6.5 0 4.3-.4 6.8-1.2 8.2-1.1 1.8-3.2 2.6-6.8 2.6h-4.7z" fill=#010101><path stroke=#010101 d="M1365 2296.9h2.5c3.6 0 4.9-1.4 4.9-6.1v-4.2c0-4.1-1.2-5.6-3.9-5.6h-3.5zm-2.6-18.2h6.3c2.6 0 4.5.9 5.5 3.1.8 1.7.9 5.8.9 6.5 0 4.3-.4 6.8-1.2 8.2-1.1 1.8-3.2 2.6-6.8 2.6h-4.7z" id=path8263 fill=none class=g6_1 stroke-width=.458><path id=path8265 class=g5_1 d="M1380.5 2299.1v-20.4h10.5v2.3h-7.9v6.5h7.4v2.3h-7.4v7.1h8.1v2.2z" fill=#010101><path stroke=#010101 d="M1380.5 2299.1v-20.4h10.5v2.3h-7.9v6.5h7.4v2.3h-7.4v7.1h8.1v2.2z" id=path8267 fill=none class=g6_1 stroke-width=.458><path id=path8269 class=g5_1 d="M1397.8 2293.1v.5c0 2.8 1.8 3.7 3.4 3.7 2.1 0 3.7-.9 3.7-3.3 0-4.5-9.2-4-9.2-10.2 0-3.6 2.6-5.5 6-5.5 3.8 0 5.8 1.8 5.7 5.9h-2.7c0-2.2-.7-3.7-3.2-3.7-1.5 0-3.1.8-3.1 3 0 4.5 9.1 3.9 9.1 10.4 0 4.3-2.9 5.7-6.3 5.7-6 0-6-4.6-6-6.5z" fill=#010101><path stroke=#010101 d="M1397.8 2293.1v.5c0 2.8 1.8 3.7 3.4 3.7 2.1 0 3.7-.9 3.7-3.3 0-4.5-9.2-4-9.2-10.2 0-3.6 2.6-5.5 6-5.5 3.8 0 5.8 1.8 5.7 5.9h-2.7c0-2.2-.7-3.7-3.2-3.7-1.5 0-3.1.8-3.1 3 0 4.5 9.1 3.9 9.1 10.4 0 4.3-2.9 5.7-6.3 5.7-6 0-6-4.6-6-6.5z" id=path8271 fill=none class=g6_1 stroke-width=.458><path id=path8273 class=g5_1 d="M1412 2287.5h6.2v2.2h-6.2z" fill=#010101><path stroke=#010101 d="M1412 2287.5h6.2v2.2h-6.2z" id=path8275 fill=none class=g6_1 stroke-width=.458><path id=path8277 class=g5_1 d="M1428.6 2281.1h-.1l-3.2 10.9h6.6zm-1.6-2.4h3.3l6.7 20.4h-3l-1.4-4.8h-7.9l-1.5 4.8h-2.7z" fill=#010101><path stroke=#010101 d="M1428.6 2281.1h-.1l-3.2 10.9h6.6zm-1.6-2.4h3.3l6.7 20.4h-3l-1.4-4.8h-7.9l-1.5 4.8h-2.7z" id=path8279 fill=none class=g6_1 stroke-width=.458><path id=path8281 class=g5_1 d="M1443.4 2287.5h3.9c1.8 0 2.7-1.6 2.7-3.4 0-1.5-.7-3.1-2.7-3.1h-3.9zm0 2.2v9.4h-2.6v-20.4h7c3.6 0 4.9 2.5 4.9 5.1 0 2.4-1.3 4.2-3.7 4.7 2.3.4 3.2 1.2 3.3 5.3 0 .9.3 4.1.7 5.3h-2.7c-.7-1.4-.6-4-.8-6.8-.2-2.4-2.2-2.6-3.1-2.6z" fill=#010101><path stroke=#010101 d="M1443.4 2287.5h3.9c1.8 0 2.7-1.6 2.7-3.4 0-1.5-.7-3.1-2.7-3.1h-3.9zm0 2.2v9.4h-2.6v-20.4h7c3.6 0 4.9 2.5 4.9 5.1 0 2.4-1.3 4.2-3.7 4.7 2.3.4 3.2 1.2 3.3 5.3 0 .9.3 4.1.7 5.3h-2.7c-.7-1.4-.6-4-.8-6.8-.2-2.4-2.2-2.6-3.1-2.6z" id=path8283 fill=none class=g6_1 stroke-width=.458><path id=path8285 class=g5_1 d="M1469.1 2278.7v2.3h-5.3v18.1h-2.6V2281h-5.4v-2.3z" fill=#010101><path stroke=#010101 d="M1469.1 2278.7v2.3h-5.3v18.1h-2.6V2281h-5.4v-2.3z" id=path8287 fill=none class=g6_1 stroke-width=.458><path id=path8289 class=g5_1 d="M1475 2293.1v.5c0 2.8 1.7 3.7 3.4 3.7 2.1 0 3.7-.9 3.7-3.3 0-4.5-9.2-4-9.2-10.2 0-3.6 2.6-5.5 6-5.5 3.7 0 5.8 1.8 5.7 5.9h-2.8c.1-2.2-.6-3.7-3.1-3.7-1.6 0-3.2.8-3.2 3 0 4.5 9.2 3.9 9.2 10.4 0 4.3-3 5.7-6.3 5.7-6 0-6-4.6-6-6.5z" fill=#010101><path stroke=#010101 d="M1475 2293.1v.5c0 2.8 1.7 3.7 3.4 3.7 2.1 0 3.7-.9 3.7-3.3 0-4.5-9.2-4-9.2-10.2 0-3.6 2.6-5.5 6-5.5 3.7 0 5.8 1.8 5.7 5.9h-2.8c.1-2.2-.6-3.7-3.1-3.7-1.6 0-3.2.8-3.2 3 0 4.5 9.2 3.9 9.2 10.4 0 4.3-3 5.7-6.3 5.7-6 0-6-4.6-6-6.5z" id=path8291 fill=none class=g6_1 stroke-width=.458><path id=path8293 class=g5_1 d="M1713.7 2324c0-1.2-.1-2.4-.6-3-.5-.7-1.8-.9-2.3-.9-2.1 0-3 1.3-3.1 1.6-.1.2-.6.7-.6 4.3v5.4c0 5 1.7 5.6 3.7 5.6.8 0 3.2-.3 3.2-4.3h2.7c.1 6.5-4.5 6.5-5.8 6.5-2.5 0-6.4-.2-6.4-8.1v-5.8c0-5.7 2.5-7.4 6.5-7.4 4.1 0 5.6 2.1 5.4 6.1z" fill=#010101><path stroke=#010101 d="M1713.7 2324c0-1.2-.1-2.4-.6-3-.5-.7-1.8-.9-2.3-.9-2.1 0-3 1.3-3.1 1.6-.1.2-.6.7-.6 4.3v5.4c0 5 1.7 5.6 3.7 5.6.8 0 3.2-.3 3.2-4.3h2.7c.1 6.5-4.5 6.5-5.8 6.5-2.5 0-6.4-.2-6.4-8.1v-5.8c0-5.7 2.5-7.4 6.5-7.4 4.1 0 5.6 2.1 5.4 6.1z" id=path8295 fill=none class=g6_1 stroke-width=.458><path id=path8297 class=g5_1 d="M1721.7 2338.8v-20.5h2.6v8.9h7.2v-8.9h2.6v20.5h-2.6v-9.4h-7.2v9.4z" fill=#010101><path stroke=#010101 d="M1721.7 2338.8v-20.5h2.6v8.9h7.2v-8.9h2.6v20.5h-2.6v-9.4h-7.2v9.4z" id=path8299 fill=none class=g6_1 stroke-width=.458><path id=path8301 class=g5_1 d="M1746.5 2320.7h-.1l-3.2 10.9h6.6zm-1.6-2.4h3.3l6.6 20.5h-2.9l-1.4-4.9h-7.9l-1.6 4.9h-2.6z" fill=#010101><path stroke=#010101 d="M1746.5 2320.7h-.1l-3.2 10.9h6.6zm-1.6-2.4h3.3l6.6 20.5h-2.9l-1.4-4.9h-7.9l-1.6 4.9h-2.6z" id=path8303 fill=none class=g6_1 stroke-width=.458><path id=path8305 class=g5_1 d="M1761.4 2338.8h-2.4v-20.5h4.2l5.2 17.2 5.2-17.2h4.3v20.5h-2.6v-18.2l-5.7 18.2h-2.5l-5.6-18.2h-.1z" fill=#010101><path stroke=#010101 d="M1761.4 2338.8h-2.4v-20.5h4.2l5.2 17.2 5.2-17.2h4.3v20.5h-2.6v-18.2l-5.7 18.2h-2.5l-5.6-18.2h-.1z" id=path8307 fill=none class=g6_1 stroke-width=.458><path id=path8309 class=g5_1 d="M1786.6 2327.5h2.9c1.1 0 3.6-.3 3.6-3.5 0-3.1-2.3-3.4-2.9-3.4h-3.6zm-2.6 11.3v-20.5h6.1c2.7 0 5.7 1.1 5.7 5.9 0 4.6-3.6 5.6-5.7 5.6h-3.5v9z" fill=#010101><path stroke=#010101 d="M1786.6 2327.5h2.9c1.1 0 3.6-.3 3.6-3.5 0-3.1-2.3-3.4-2.9-3.4h-3.6zm-2.6 11.3v-20.5h6.1c2.7 0 5.7 1.1 5.7 5.9 0 4.6-3.6 5.6-5.7 5.6h-3.5v9z" id=path8311 fill=none class=g6_1 stroke-width=.458><path id=path8313 class=g5_1 d="M1799.9 2327.2h6.2v2.2h-6.2z" fill=#010101><path stroke=#010101 d="M1799.9 2327.2h6.2v2.2h-6.2z" id=path8315 fill=none class=g6_1 stroke-width=.458><path id=path8317 class=g5_1 d="M1813.2 2336.5h2.5c3.6 0 4.9-1.4 4.9-6.1v-4.1c0-4.2-1.2-5.7-3.9-5.7h-3.5zm-2.6-18.2h6.3c2.6 0 4.5 1 5.5 3.2.8 1.7.9 5.8.9 6.4 0 4.4-.4 6.9-1.2 8.2-1.1 1.8-3.2 2.7-6.8 2.7h-4.7z" fill=#010101><path stroke=#010101 d="M1813.2 2336.5h2.5c3.6 0 4.9-1.4 4.9-6.1v-4.1c0-4.2-1.2-5.7-3.9-5.7h-3.5zm-2.6-18.2h6.3c2.6 0 4.5 1 5.5 3.2.8 1.7.9 5.8.9 6.4 0 4.4-.4 6.9-1.2 8.2-1.1 1.8-3.2 2.7-6.8 2.7h-4.7z" id=path8319 fill=none class=g6_1 stroke-width=.458><path id=path8321 class=g5_1 d="M1829 2338.8v-20.5h10.5v2.3h-7.9v6.6h7.4v2.2h-7.4v7.1h8.1v2.3z" fill=#010101><path stroke=#010101 d="M1829 2338.8v-20.5h10.5v2.3h-7.9v6.6h7.4v2.2h-7.4v7.1h8.1v2.3z" id=path8323 fill=none class=g6_1 stroke-width=.458><path id=path8325 class=g5_1 d="M1844.1 2327.2h6.3v2.2h-6.3z" fill=#010101><path stroke=#010101 d="M1844.1 2327.2h6.3v2.2h-6.3z" id=path8327 fill=none class=g6_1 stroke-width=.458><path id=path8329 class=g5_1 d="M1857.9 2338.8h-2.5v-20.5h4.3l5.1 17.2h.1l5.2-17.2h4.3v20.5h-2.6v-18.2h-.1l-5.7 18.2h-2.5l-5.6-18.2z" fill=#010101><path stroke=#010101 d="M1857.9 2338.8h-2.5v-20.5h4.3l5.1 17.2h.1l5.2-17.2h4.3v20.5h-2.6v-18.2h-.1l-5.7 18.2h-2.5l-5.6-18.2z" id=path8331 fill=none class=g6_1 stroke-width=.458><path id=path8333 class=g5_1 d="M1886.6 2320.7h-.1l-3.1 10.9h6.5zm-1.6-2.4h3.3l6.7 20.5h-2.9l-1.5-4.9h-7.9l-1.5 4.9h-2.7z" fill=#010101><path stroke=#010101 d="M1886.6 2320.7h-.1l-3.1 10.9h6.5zm-1.6-2.4h3.3l6.7 20.5h-2.9l-1.5-4.9h-7.9l-1.5 4.9h-2.7z" id=path8335 fill=none class=g6_1 stroke-width=.458><path id=path8337 class=g5_1 d="M1901.7 2327.1h3.9c1.8 0 2.7-1.6 2.7-3.4 0-1.5-.7-3.1-2.7-3.1h-3.9zm0 2.3v9.4h-2.6v-20.5h7c3.6 0 4.9 2.6 4.9 5.1 0 2.4-1.3 4.3-3.7 4.7v.1c2.3.3 3.2 1.1 3.3 5.2 0 .9.3 4.1.7 5.4h-2.7c-.7-1.4-.6-4.1-.8-6.8-.2-2.5-2.2-2.6-3.1-2.6z" fill=#010101><path stroke=#010101 d="M1901.7 2327.1h3.9c1.8 0 2.7-1.6 2.7-3.4 0-1.5-.7-3.1-2.7-3.1h-3.9zm0 2.3v9.4h-2.6v-20.5h7c3.6 0 4.9 2.6 4.9 5.1 0 2.4-1.3 4.3-3.7 4.7v.1c2.3.3 3.2 1.1 3.3 5.2 0 .9.3 4.1.7 5.4h-2.7c-.7-1.4-.6-4.1-.8-6.8-.2-2.5-2.2-2.6-3.1-2.6z" id=path8339 fill=none class=g6_1 stroke-width=.458><path id=path8341 class=g5_1 d="M1918 2332.7v.6c0 2.8 1.8 3.6 3.4 3.6 2.1 0 3.7-.8 3.7-3.3 0-4.5-9.2-4-9.2-10.1 0-3.7 2.6-5.6 6-5.6 3.7 0 5.8 1.8 5.7 6h-2.8c.1-2.3-.6-3.7-3.1-3.7-1.5 0-3.1.8-3.1 3 0 4.5 9.1 3.8 9.1 10.3 0 4.3-2.9 5.7-6.3 5.7-6 .1-6-4.6-6-6.5z" fill=#010101><path stroke=#010101 d="M1918 2332.7v.6c0 2.8 1.8 3.6 3.4 3.6 2.1 0 3.7-.8 3.7-3.3 0-4.5-9.2-4-9.2-10.1 0-3.7 2.6-5.6 6-5.6 3.7 0 5.8 1.8 5.7 6h-2.8c.1-2.3-.6-3.7-3.1-3.7-1.5 0-3.1.8-3.1 3 0 4.5 9.1 3.8 9.1 10.3 0 4.3-2.9 5.7-6.3 5.7-6 .1-6-4.6-6-6.5z" id=path8343 fill=none class=g6_1 stroke-width=.458><path id=path8345 class=g5_1 d="M1974.6 2141.4c.1 1.9-.2 4.6 2.5 4.6 2.8 0 2.9-2.4 2.9-4.9v-13.8h2.6v15.4c0 1.1 0 5.5-5.6 5.5-1.1 0-3.3-.4-4.3-2-.8-1.4-.8-3.1-.8-4.8z" fill=#010101><path stroke=#010101 d="M1974.6 2141.4c.1 1.9-.2 4.6 2.5 4.6 2.8 0 2.9-2.4 2.9-4.9v-13.8h2.6v15.4c0 1.1 0 5.5-5.6 5.5-1.1 0-3.3-.4-4.3-2-.8-1.4-.8-3.1-.8-4.8z" id=path8347 fill=none class=g6_1 stroke-width=.458><path id=path8349 class=g5_1 d="M1988.6 2147.8v-20.5h10.5v2.3h-7.9v6.6h7.4v2.2h-7.4v7.1h8.1v2.3z" fill=#010101><path stroke=#010101 d="M1988.6 2147.8v-20.5h10.5v2.3h-7.9v6.6h7.4v2.2h-7.4v7.1h8.1v2.3z" id=path8351 fill=none class=g6_1 stroke-width=.458><path id=path8353 class=g5_1 d="m2011.2 2129.7-3.2 10.9h6.5zm-1.6-2.4h3.4l6.6 20.5h-2.9l-1.5-4.9h-7.9l-1.5 4.9h-2.6z" fill=#010101><path stroke=#010101 d="m2011.2 2129.7-3.2 10.9h6.5zm-1.6-2.4h3.4l6.6 20.5h-2.9l-1.5-4.9h-7.9l-1.5 4.9h-2.6z" id=path8355 fill=none class=g6_1 stroke-width=.458><path id=path8357 class=g5_1 d="M2037.6 2127.3v20.5h-3.6l-8-17.8h-.1v17.8h-2.3v-20.5h3.7l7.9 17.5h.1v-17.5z" fill=#010101><path stroke=#010101 d="M2037.6 2127.3v20.5h-3.6l-8-17.8h-.1v17.8h-2.3v-20.5h3.7l7.9 17.5h.1v-17.5z" id=path8359 fill=none class=g6_1 stroke-width=.458><path id=path8361 class=g5_1 d="M2042.8 2136.1h6.2v2.2h-6.2z" fill=#010101><path stroke=#010101 d="M2042.8 2136.1h6.2v2.2h-6.2z" id=path8363 fill=none class=g6_1 stroke-width=.458><path id=path8365 class=g5_1 d="M2056.7 2145.5h2.5c3.6 0 4.9-1.4 4.9-6.1v-4.1c0-4.2-1.3-5.7-4-5.7h-3.4zm-2.6-18.2h6.3c2.6 0 4.5 1 5.5 3.1.8 1.8.9 5.8.9 6.5 0 4.4-.4 6.9-1.3 8.2-1.1 1.8-3.1 2.7-6.7 2.7h-4.7z" fill=#010101><path stroke=#010101 d="M2056.7 2145.5h2.5c3.6 0 4.9-1.4 4.9-6.1v-4.1c0-4.2-1.3-5.7-4-5.7h-3.4zm-2.6-18.2h6.3c2.6 0 4.5 1 5.5 3.1.8 1.8.9 5.8.9 6.5 0 4.4-.4 6.9-1.3 8.2-1.1 1.8-3.1 2.7-6.7 2.7h-4.7z" id=path8367 fill=none class=g6_1 stroke-width=.458><path id=path8369 class=g5_1 d="M2075 2136.1h3.9c1.9 0 2.8-1.6 2.8-3.4 0-1.5-.7-3.1-2.8-3.1h-3.9zm0 2.3v9.4h-2.6v-20.5h7.1c3.6 0 4.9 2.6 4.9 5.1 0 2.4-1.4 4.3-3.8 4.7v.1c2.4.3 3.2 1.1 3.4 5.2 0 .9.3 4.1.7 5.4h-2.8c-.7-1.4-.5-4.1-.7-6.8-.2-2.5-2.3-2.6-3.1-2.6z" fill=#010101><path stroke=#010101 d="M2075 2136.1h3.9c1.9 0 2.8-1.6 2.8-3.4 0-1.5-.7-3.1-2.8-3.1h-3.9zm0 2.3v9.4h-2.6v-20.5h7.1c3.6 0 4.9 2.6 4.9 5.1 0 2.4-1.4 4.3-3.8 4.7v.1c2.4.3 3.2 1.1 3.4 5.2 0 .9.3 4.1.7 5.4h-2.8c-.7-1.4-.5-4.1-.7-6.8-.2-2.5-2.3-2.6-3.1-2.6z" id=path8371 fill=none class=g6_1 stroke-width=.458><path id=path8373 class=g5_1 d="M2096.4 2129.7h-.1l-3.2 10.9h6.6zm-1.6-2.4h3.3l6.7 20.5h-3l-1.4-4.9h-7.9l-1.5 4.9h-2.7z" fill=#010101><path stroke=#010101 d="M2096.4 2129.7h-.1l-3.2 10.9h6.6zm-1.6-2.4h3.3l6.7 20.5h-3l-1.4-4.9h-7.9l-1.5 4.9h-2.7z" id=path8375 fill=none class=g6_1 stroke-width=.458><path id=path8377 class=g5_1 d="M2111.6 2136.5h2.8c1.1 0 3.6-.3 3.6-3.5 0-3.1-2.3-3.4-2.8-3.4h-3.6zm-2.6 11.3v-20.5h6c2.8 0 5.7 1.1 5.7 5.9 0 4.6-3.6 5.6-5.7 5.6h-3.4v9z" fill=#010101><path stroke=#010101 d="M2111.6 2136.5h2.8c1.1 0 3.6-.3 3.6-3.5 0-3.1-2.3-3.4-2.8-3.4h-3.6zm-2.6 11.3v-20.5h6c2.8 0 5.7 1.1 5.7 5.9 0 4.6-3.6 5.6-5.7 5.6h-3.4v9z" id=path8379 fill=none class=g6_1 stroke-width=.458><path id=path8381 class=g5_1 d="M2125.5 2147.8v-20.5h10.5v2.3h-7.9v6.6h7.4v2.2h-7.4v7.1h8.1v2.3z" fill=#010101><path stroke=#010101 d="M2125.5 2147.8v-20.5h10.5v2.3h-7.9v6.6h7.4v2.2h-7.4v7.1h8.1v2.3z" id=path8383 fill=none class=g6_1 stroke-width=.458><path id=path8385 class=g5_1 d="M2148.4 2129.7h-.1l-3.2 10.9h6.6zm-1.6-2.4h3.3l6.7 20.5h-2.9l-1.5-4.9h-7.9l-1.5 4.9h-2.7z" fill=#010101><path stroke=#010101 d="M2148.4 2129.7h-.1l-3.2 10.9h6.6zm-1.6-2.4h3.3l6.7 20.5h-2.9l-1.5-4.9h-7.9l-1.5 4.9h-2.7z" id=path8387 fill=none class=g6_1 stroke-width=.458><path id=path8389 class=g5_1 d="M2160.5 2127.3h2.6v13.1c0 4.5 1.4 5.6 3.9 5.6 2.4 0 3.8-1.1 3.8-5.6v-13.1h2.6v13c0 5.7-2.1 7.9-6.4 7.9-4.4 0-6.5-2.2-6.5-7.9z" fill=#010101><path stroke=#010101 d="M2160.5 2127.3h2.6v13.1c0 4.5 1.4 5.6 3.9 5.6 2.4 0 3.8-1.1 3.8-5.6v-13.1h2.6v13c0 5.7-2.1 7.9-6.4 7.9-4.4 0-6.5-2.2-6.5-7.9z" id=path8391 fill=none class=g6_1 stroke-width=.458><path id=path8393 class=g5_1 d="M1634.6 2404h2.8c1.1 0 3.7-.3 3.7-3.5 0-3.1-2.4-3.4-2.9-3.4h-3.6zm-2.6 11.2v-20.4h6c2.8 0 5.7 1 5.7 5.8 0 4.7-3.6 5.6-5.7 5.6h-3.4v9z" fill=#010101><path stroke=#010101 d="M1634.6 2404h2.8c1.1 0 3.7-.3 3.7-3.5 0-3.1-2.4-3.4-2.9-3.4h-3.6zm-2.6 11.2v-20.4h6c2.8 0 5.7 1 5.7 5.8 0 4.7-3.6 5.6-5.7 5.6h-3.4v9z" id=path8395 fill=none class=g6_1 stroke-width=.458><path id=path8397 class=g5_1 d="M1648.5 2415.2v-20.4h2.6v18.2h7.5v2.2z" fill=#010101><path stroke=#010101 d="M1648.5 2415.2v-20.4h2.6v18.2h7.5v2.2z" id=path8399 fill=none class=g6_1 stroke-width=.458><path id=path8401 class=g5_1 d="m1669.8 2397.2-3.2 10.9h6.5zm-1.6-2.4h3.3l6.7 20.4h-2.9l-1.5-4.8h-7.9l-1.5 4.8h-2.6z" fill=#010101><path stroke=#010101 d="m1669.8 2397.2-3.2 10.9h6.5zm-1.6-2.4h3.3l6.7 20.4h-2.9l-1.5-4.8h-7.9l-1.5 4.8h-2.6z" id=path8403 fill=none class=g6_1 stroke-width=.458><path id=path8405 class=g5_1 d="M1691 2400.4c.1-1.1 0-2.3-.5-2.9-.6-.7-1.8-.9-2.3-.9-2.2 0-3 1.3-3.1 1.6-.1.2-.6.7-.6 4.2v5.5c0 5 1.6 5.6 3.6 5.6.8 0 3.2-.3 3.3-4.3h2.6c.2 6.5-4.4 6.5-5.7 6.5-2.6 0-6.5-.2-6.5-8.1v-5.8c0-5.8 2.6-7.4 6.6-7.4s5.6 2.1 5.3 6z" fill=#010101><path stroke=#010101 d="M1691 2400.4c.1-1.1 0-2.3-.5-2.9-.6-.7-1.8-.9-2.3-.9-2.2 0-3 1.3-3.1 1.6-.1.2-.6.7-.6 4.2v5.5c0 5 1.6 5.6 3.6 5.6.8 0 3.2-.3 3.3-4.3h2.6c.2 6.5-4.4 6.5-5.7 6.5-2.6 0-6.5-.2-6.5-8.1v-5.8c0-5.8 2.6-7.4 6.6-7.4s5.6 2.1 5.3 6z" id=path8407 fill=none class=g6_1 stroke-width=.458><path id=path8409 class=g5_1 d="M1698.9 2415.2v-20.4h10.5v2.3h-7.9v6.5h7.4v2.3h-7.4v7.1h8.1v2.2z" fill=#010101><path stroke=#010101 d="M1698.9 2415.2v-20.4h10.5v2.3h-7.9v6.5h7.4v2.3h-7.4v7.1h8.1v2.2z" id=path8411 fill=none class=g6_1 stroke-width=.458><path id=path8413 class=g5_1 d="M1714.1 2403.6h6.2v2.2h-6.2z" fill=#010101><path stroke=#010101 d="M1714.1 2403.6h6.2v2.2h-6.2z" id=path8415 fill=none class=g6_1 stroke-width=.458><path id=path8417 class=g5_1 d="M1727.7 2413h2.5c3.6 0 4.9-1.4 4.9-6.2v-4.1c0-4.1-1.2-5.6-4-5.6h-3.4zm-2.6-18.2h6.3c2.6 0 4.5.9 5.5 3.1.8 1.7.9 5.8.9 6.5 0 4.3-.4 6.8-1.3 8.2-1.1 1.7-3.1 2.6-6.7 2.6h-4.7z" fill=#010101><path stroke=#010101 d="M1727.7 2413h2.5c3.6 0 4.9-1.4 4.9-6.2v-4.1c0-4.1-1.2-5.6-4-5.6h-3.4zm-2.6-18.2h6.3c2.6 0 4.5.9 5.5 3.1.8 1.7.9 5.8.9 6.5 0 4.3-.4 6.8-1.3 8.2-1.1 1.7-3.1 2.6-6.7 2.6h-4.7z" id=path8419 fill=none class=g6_1 stroke-width=.458><path id=path8421 class=g5_1 d="M1742.8 2394.8h3.1l-2.3 5.6h-2z" fill=#010101><path stroke=#010101 d="M1742.8 2394.8h3.1l-2.3 5.6h-2z" id=path8423 fill=none class=g6_1 stroke-width=.458><path id=path8425 class=g5_1 d="M1753.7 2397.2h-.1l-3.2 10.9h6.6zm-1.6-2.4h3.3l6.7 20.4h-2.9l-1.5-4.8h-7.9l-1.5 4.8h-2.7z" fill=#010101><path stroke=#010101 d="M1753.7 2397.2h-.1l-3.2 10.9h6.6zm-1.6-2.4h3.3l6.7 20.4h-2.9l-1.5-4.8h-7.9l-1.5 4.8h-2.7z" id=path8427 fill=none class=g6_1 stroke-width=.458><path id=path8429 class=g5_1 d="M1768.5 2403.6h3.9c1.8 0 2.8-1.6 2.8-3.4 0-1.5-.8-3.1-2.8-3.1h-3.9zm0 2.2v9.4h-2.6v-20.4h7c3.6 0 4.9 2.5 4.9 5.1 0 2.4-1.3 4.2-3.7 4.7 2.3.4 3.2 1.2 3.3 5.3 0 .9.3 4.1.7 5.3h-2.7c-.7-1.4-.6-4-.8-6.8-.2-2.5-2.2-2.6-3.1-2.6z" fill=#010101><path stroke=#010101 d="M1768.5 2403.6h3.9c1.8 0 2.8-1.6 2.8-3.4 0-1.5-.8-3.1-2.8-3.1h-3.9zm0 2.2v9.4h-2.6v-20.4h7c3.6 0 4.9 2.5 4.9 5.1 0 2.4-1.3 4.2-3.7 4.7 2.3.4 3.2 1.2 3.3 5.3 0 .9.3 4.1.7 5.3h-2.7c-.7-1.4-.6-4-.8-6.8-.2-2.5-2.2-2.6-3.1-2.6z" id=path8431 fill=none class=g6_1 stroke-width=.458><path id=path8433 class=g5_1 d="M1785.8 2415.2h-2.4v-20.4h4.2l5.2 17.1 5.2-17.1h4.3v20.4h-2.6v-18.1l-5.8 18.1h-2.4l-5.6-18.1h-.1z" fill=#010101><path stroke=#010101 d="M1785.8 2415.2h-2.4v-20.4h4.2l5.2 17.1 5.2-17.1h4.3v20.4h-2.6v-18.1l-5.8 18.1h-2.4l-5.6-18.1h-.1z" id=path8435 fill=none class=g6_1 stroke-width=.458><path id=path8437 class=g5_1 d="M1808.1 2415.2v-20.4h10.5v2.3h-7.9v6.5h7.3v2.3h-7.3v7.1h8.1v2.2z" fill=#010101><path stroke=#010101 d="M1808.1 2415.2v-20.4h10.5v2.3h-7.9v6.5h7.3v2.3h-7.3v7.1h8.1v2.2z" id=path8439 fill=none class=g6_1 stroke-width=.458><path id=path8441 class=g5_1 d="M1825.4 2409.1v.6c0 2.8 1.7 3.7 3.4 3.7 2.1 0 3.7-.9 3.7-3.3 0-4.6-9.2-4-9.2-10.2 0-3.6 2.6-5.5 6-5.5 3.7 0 5.8 1.8 5.6 5.9h-2.7c.1-2.2-.7-3.7-3.1-3.7-1.6 0-3.2.8-3.2 3 0 4.5 9.2 3.9 9.2 10.4 0 4.3-3 5.7-6.3 5.7-6.1 0-6.1-4.6-6-6.6z" fill=#010101><path stroke=#010101 d="M1825.4 2409.1v.6c0 2.8 1.7 3.7 3.4 3.7 2.1 0 3.7-.9 3.7-3.3 0-4.6-9.2-4-9.2-10.2 0-3.6 2.6-5.5 6-5.5 3.7 0 5.8 1.8 5.6 5.9h-2.7c.1-2.2-.7-3.7-3.1-3.7-1.6 0-3.2.8-3.2 3 0 4.5 9.2 3.9 9.2 10.4 0 4.3-3 5.7-6.3 5.7-6.1 0-6.1-4.6-6-6.6z" id=path8443 fill=none class=g6_1 stroke-width=.458><path id=path8445 class=g5_1 d="M1558.4 2481.9v.6c0 2.8 1.7 3.7 3.4 3.7 2.1 0 3.7-.9 3.7-3.4 0-4.5-9.2-4-9.2-10.1 0-3.6 2.6-5.6 6-5.6 3.7 0 5.8 1.9 5.7 6h-2.8c.1-2.2-.6-3.7-3.1-3.7-1.6 0-3.1.8-3.1 3 0 4.5 9.1 3.9 9.1 10.3 0 4.3-2.9 5.7-6.3 5.7-6 .1-6-4.5-6-6.5z" fill=#010101><path stroke=#010101 d="M1558.4 2481.9v.6c0 2.8 1.7 3.7 3.4 3.7 2.1 0 3.7-.9 3.7-3.4 0-4.5-9.2-4-9.2-10.1 0-3.6 2.6-5.6 6-5.6 3.7 0 5.8 1.9 5.7 6h-2.8c.1-2.2-.6-3.7-3.1-3.7-1.6 0-3.1.8-3.1 3 0 4.5 9.1 3.9 9.1 10.3 0 4.3-2.9 5.7-6.3 5.7-6 .1-6-4.5-6-6.5z" id=path8447 fill=none class=g6_1 stroke-width=.458><path id=path8449 class=g5_1 d="M1583.2 2480.6v-6.9c0-4.2-3-4.4-3.8-4.4s-3.7.2-3.7 4.4v6.9c0 3.4.7 5.3 3.7 5.3 3.1 0 3.8-1.9 3.8-5.3m-10.2-6.8c0-4.1 2.1-6.7 6.4-6.7 4.4 0 6.4 2.6 6.4 6.7v6.7c0 1.5-.6 5.1-1.7 5.6v.1c.4-.1 1.4-.5 1.8-.5h2v2.3h-8.5c-2.7 0-6.4-.2-6.4-7.5z" fill=#010101><path stroke=#010101 d="M1583.2 2480.6v-6.9c0-4.2-3-4.4-3.8-4.4s-3.7.2-3.7 4.4v6.9c0 3.4.7 5.3 3.7 5.3 3.1 0 3.8-1.9 3.8-5.3zm-10.2-6.8c0-4.1 2.1-6.7 6.4-6.7 4.4 0 6.4 2.6 6.4 6.7v6.7c0 1.5-.6 5.1-1.7 5.6v.1c.4-.1 1.4-.5 1.8-.5h2v2.3h-8.5c-2.7 0-6.4-.2-6.4-7.5z" id=path8451 fill=none class=g6_1 stroke-width=.458><path id=path8453 class=g5_1 d="M1591.6 2467.6h2.6v13c0 4.5 1.4 5.6 3.8 5.6 2.5 0 3.8-1.1 3.8-5.6v-13h2.6v12.9c0 5.7-2 7.9-6.4 7.9-4.3 0-6.4-2.2-6.4-7.9z" fill=#010101><path stroke=#010101 d="M1591.6 2467.6h2.6v13c0 4.5 1.4 5.6 3.8 5.6 2.5 0 3.8-1.1 3.8-5.6v-13h2.6v12.9c0 5.7-2 7.9-6.4 7.9-4.3 0-6.4-2.2-6.4-7.9z" id=path8455 fill=none class=g6_1 stroke-width=.458><path id=path8457 class=g5_1 d="m1616.3 2470-3.2 10.9h6.5zm-1.6-2.4h3.3l6.7 20.4h-2.9l-1.5-4.9h-7.9l-1.5 4.9h-2.7z" fill=#010101><path stroke=#010101 d="m1616.3 2470-3.2 10.9h6.5zm-1.6-2.4h3.3l6.7 20.4h-2.9l-1.5-4.9h-7.9l-1.5 4.9h-2.7z" id=path8459 fill=none class=g6_1 stroke-width=.458><path id=path8461 class=g5_1 d="M1631.1 2476.3h3.9c1.9 0 2.8-1.6 2.8-3.4 0-1.4-.8-3.1-2.8-3.1h-3.9zm0 2.3v9.4h-2.6v-20.4h7c3.7 0 4.9 2.5 4.9 5.1 0 2.4-1.3 4.2-3.7 4.6v.1c2.3.4 3.2 1.1 3.3 5.2.1.9.3 4.1.7 5.4h-2.7c-.7-1.4-.5-4.1-.8-6.8-.2-2.5-2.2-2.6-3.1-2.6z" fill=#010101><path stroke=#010101 d="M1631.1 2476.3h3.9c1.9 0 2.8-1.6 2.8-3.4 0-1.4-.8-3.1-2.8-3.1h-3.9zm0 2.3v9.4h-2.6v-20.4h7c3.7 0 4.9 2.5 4.9 5.1 0 2.4-1.3 4.2-3.7 4.6v.1c2.3.4 3.2 1.1 3.3 5.2.1.9.3 4.1.7 5.4h-2.7c-.7-1.4-.5-4.1-.8-6.8-.2-2.5-2.2-2.6-3.1-2.6z" id=path8463 fill=none class=g6_1 stroke-width=.458><path id=path8465 class=g5_1 d="M1645.7 2488v-20.4h10.5v2.2h-7.9v6.6h7.4v2.3h-7.4v7h8.1v2.3z" fill=#010101><path stroke=#010101 d="M1645.7 2488v-20.4h10.5v2.2h-7.9v6.6h7.4v2.3h-7.4v7h8.1v2.3z" id=path8467 fill=none class=g6_1 stroke-width=.458><path id=path8469 class=g5_1 d="M1660.8 2476.4h6.3v2.1h-6.3z" fill=#010101><path stroke=#010101 d="M1660.8 2476.4h6.3v2.1h-6.3z" id=path8471 fill=none class=g6_1 stroke-width=.458><path id=path8473 class=g5_1 d="M1678.9 2488h-3.1l-5.9-20.4h2.8l4.7 17.9h.1l4.7-17.9h2.7z" fill=#010101><path stroke=#010101 d="M1678.9 2488h-3.1l-5.9-20.4h2.8l4.7 17.9h.1l4.7-17.9h2.7z" id=path8475 fill=none class=g6_1 stroke-width=.458><path id=path8477 class=g5_1 d="M1692.5 2488h-2.6v-20.4h2.6z" fill=#010101><path stroke=#010101 d="M1692.5 2488h-2.6v-20.4h2.6z" id=path8479 fill=none class=g6_1 stroke-width=.458><path id=path8481 class=g5_1 d="M1707.5 2473.2c.1-1.2 0-2.3-.5-3-.6-.6-1.8-.9-2.3-.9-2.2 0-3 1.3-3.1 1.6s-.6.8-.6 4.3v5.4c0 5 1.6 5.6 3.6 5.6.8 0 3.2-.2 3.3-4.2h2.6c.2 6.4-4.4 6.4-5.7 6.4-2.6 0-6.5-.1-6.5-8.1v-5.7c0-5.8 2.6-7.5 6.6-7.5s5.6 2.1 5.3 6.1z" fill=#010101><path stroke=#010101 d="M1707.5 2473.2c.1-1.2 0-2.3-.5-3-.6-.6-1.8-.9-2.3-.9-2.2 0-3 1.3-3.1 1.6s-.6.8-.6 4.3v5.4c0 5 1.6 5.6 3.6 5.6.8 0 3.2-.2 3.3-4.2h2.6c.2 6.4-4.4 6.4-5.7 6.4-2.6 0-6.5-.1-6.5-8.1v-5.7c0-5.8 2.6-7.5 6.6-7.5s5.6 2.1 5.3 6.1z" id=path8483 fill=none class=g6_1 stroke-width=.458><path id=path8485 class=g5_1 d="M1726.9 2467.6v2.2h-5.4v18.2h-2.6v-18.2h-5.4v-2.2z" fill=#010101><path stroke=#010101 d="M1726.9 2467.6v2.2h-5.4v18.2h-2.6v-18.2h-5.4v-2.2z" id=path8487 fill=none class=g6_1 stroke-width=.458><path id=path8489 class=g5_1 d="M1740.8 2480.6v-6.9c0-4.2-2.9-4.4-3.8-4.4-.8 0-3.7.2-3.7 4.4v6.9c0 4.5 1.3 5.6 3.7 5.6 2.5 0 3.8-1.1 3.8-5.6m-10.2-.1v-6.7c0-4.1 2.1-6.7 6.4-6.7 4.4 0 6.5 2.6 6.5 6.7v6.7c0 5.7-2.1 7.9-6.5 7.9-4.3 0-6.4-2.2-6.4-7.9z" fill=#010101><path stroke=#010101 d="M1740.8 2480.6v-6.9c0-4.2-2.9-4.4-3.8-4.4-.8 0-3.7.2-3.7 4.4v6.9c0 4.5 1.3 5.6 3.7 5.6 2.5 0 3.8-1.1 3.8-5.6zm-10.2-.1v-6.7c0-4.1 2.1-6.7 6.4-6.7 4.4 0 6.5 2.6 6.5 6.7v6.7c0 5.7-2.1 7.9-6.5 7.9-4.3 0-6.4-2.2-6.4-7.9z" id=path8491 fill=none class=g6_1 stroke-width=.458><path id=path8493 class=g5_1 d="M1751.7 2476.3h3.9c1.9 0 2.8-1.6 2.8-3.4 0-1.4-.8-3.1-2.8-3.1h-3.9zm0 2.3v9.4h-2.6v-20.4h7c3.7 0 4.9 2.5 4.9 5.1 0 2.4-1.3 4.2-3.7 4.6v.1c2.3.4 3.2 1.1 3.3 5.2.1.9.3 4.1.7 5.4h-2.7c-.7-1.4-.5-4.1-.8-6.8-.2-2.5-2.2-2.6-3.1-2.6z" fill=#010101><path stroke=#010101 d="M1751.7 2476.3h3.9c1.9 0 2.8-1.6 2.8-3.4 0-1.4-.8-3.1-2.8-3.1h-3.9zm0 2.3v9.4h-2.6v-20.4h7c3.7 0 4.9 2.5 4.9 5.1 0 2.4-1.3 4.2-3.7 4.6v.1c2.3.4 3.2 1.1 3.3 5.2.1.9.3 4.1.7 5.4h-2.7c-.7-1.4-.5-4.1-.8-6.8-.2-2.5-2.2-2.6-3.1-2.6z" id=path8495 fill=none class=g6_1 stroke-width=.458><path id=path8497 class=g5_1 d="M1769.5 2488h-2.6v-20.4h2.6z" fill=#010101><path stroke=#010101 d="M1769.5 2488h-2.6v-20.4h2.6z" id=path8499 fill=none class=g6_1 stroke-width=.458><path id=path8501 class=g5_1 d="M1781.8 2470h-.1l-3.2 10.9h6.6zm-1.6-2.4h3.3l6.7 20.4h-3l-1.4-4.9h-7.9l-1.6 4.9h-2.6z" fill=#010101><path stroke=#010101 d="M1781.8 2470h-.1l-3.2 10.9h6.6zm-1.6-2.4h3.3l6.7 20.4h-3l-1.4-4.9h-7.9l-1.6 4.9h-2.6z" id=path8503 fill=none class=g6_1 stroke-width=.458><path id=path8505 class=g5_1 d="M1791.4 2476.7h14.2v1.6h-14.2z" fill=#010101><path stroke=#010101 d="M1791.4 2476.7h14.2v1.6h-14.2z" id=path8507 fill=none class=g6_1 stroke-width=.458><path id=path8509 class=g5_1 d="M1820.2 2480.6v-6.9c0-4.2-2.9-4.4-3.7-4.4s-3.8.2-3.8 4.4v6.9c0 4.5 1.3 5.6 3.8 5.6 2.4 0 3.7-1.1 3.7-5.6m-10.1-.1v-6.7c0-4.1 2.1-6.7 6.4-6.7s6.4 2.6 6.4 6.7v6.7c0 5.7-2.1 7.9-6.4 7.9s-6.4-2.2-6.4-7.9z" fill=#010101><path stroke=#010101 d="M1820.2 2480.6v-6.9c0-4.2-2.9-4.4-3.7-4.4s-3.8.2-3.8 4.4v6.9c0 4.5 1.3 5.6 3.8 5.6 2.4 0 3.7-1.1 3.7-5.6zm-10.1-.1v-6.7c0-4.1 2.1-6.7 6.4-6.7s6.4 2.6 6.4 6.7v6.7c0 5.7-2.1 7.9-6.4 7.9s-6.4-2.2-6.4-7.9z" id=path8511 fill=none class=g6_1 stroke-width=.458><path id=path8513 class=g5_1 d="M1834.8 2470h-.1l-3.2 10.9h6.6zm-1.6-2.4h3.3l6.6 20.4h-2.9l-1.4-4.9h-7.9l-1.6 4.9h-2.6z" fill=#010101><path stroke=#010101 d="M1834.8 2470h-.1l-3.2 10.9h6.6zm-1.6-2.4h3.3l6.6 20.4h-2.9l-1.4-4.9h-7.9l-1.6 4.9h-2.6z" id=path8515 fill=none class=g6_1 stroke-width=.458><path id=path8517 class=g5_1 d="M1856 2473.2c0-1.2-.1-2.3-.6-3-.5-.6-1.7-.9-2.3-.9-2.1 0-3 1.3-3.1 1.6s-.6.8-.6 4.3v5.4c0 5 1.7 5.6 3.7 5.6.8 0 3.2-.2 3.2-4.2h2.7c.1 6.4-4.4 6.4-5.8 6.4-2.5 0-6.4-.1-6.4-8.1v-5.7c0-5.8 2.5-7.5 6.5-7.5 4.1 0 5.6 2.1 5.4 6.1z" fill=#010101><path stroke=#010101 d="M1856 2473.2c0-1.2-.1-2.3-.6-3-.5-.6-1.7-.9-2.3-.9-2.1 0-3 1.3-3.1 1.6s-.6.8-.6 4.3v5.4c0 5 1.7 5.6 3.7 5.6.8 0 3.2-.2 3.2-4.2h2.7c.1 6.4-4.4 6.4-5.8 6.4-2.5 0-6.4-.1-6.4-8.1v-5.7c0-5.8 2.5-7.5 6.5-7.5 4.1 0 5.6 2.1 5.4 6.1z" id=path8519 fill=none class=g6_1 stroke-width=.458><path id=path8521 class=g5_1 d="M1867.4 2488h-2.6v-20.4h2.6z" fill=#010101><path stroke=#010101 d="M1867.4 2488h-2.6v-20.4h2.6z" id=path8523 fill=none class=g6_1 stroke-width=.458><path id=path8525 class=g5_1 d="M1479.4 2569.4h3.7c2.7 0 3.7-2 3.7-3.5 0-3.2-2-3.8-4.6-3.8h-2.8zm0-9.6h3.8c2 0 3-1.2 3-3.2 0-1.7-1-3.1-3.1-3.1h-3.7zm-2.6 11.9v-20.5h6.6c2.9 0 3.8 1 4.6 2.1.7 1.1.8 2.3.8 2.7 0 2.6-.9 4.3-3.5 4.9v.1c2.9.4 4.2 2.1 4.2 4.9 0 5.2-3.8 5.8-6.1 5.8z" fill=#010101><path stroke=#010101 d="M1479.4 2569.4h3.7c2.7 0 3.7-2 3.7-3.5 0-3.2-2-3.8-4.6-3.8h-2.8zm0-9.6h3.8c2 0 3-1.2 3-3.2 0-1.7-1-3.1-3.1-3.1h-3.7zm-2.6 11.9v-20.5h6.6c2.9 0 3.8 1 4.6 2.1.7 1.1.8 2.3.8 2.7 0 2.6-.9 4.3-3.5 4.9v.1c2.9.4 4.2 2.1 4.2 4.9 0 5.2-3.8 5.8-6.1 5.8z" id=path8527 fill=none class=g6_1 stroke-width=.458><path id=path8529 class=g5_1 d="M1504.5 2564.3v-6.9c0-4.3-2.9-4.4-3.8-4.4-.8 0-3.7.1-3.7 4.4v6.9c0 4.5 1.3 5.6 3.7 5.6 2.5 0 3.8-1.1 3.8-5.6m-10.2-.1v-6.7c0-4.1 2.1-6.7 6.4-6.7 4.4 0 6.5 2.6 6.5 6.7v6.7c0 5.6-2.1 7.9-6.5 7.9-4.3 0-6.4-2.3-6.4-7.9z" fill=#010101><path stroke=#010101 d="M1504.5 2564.3v-6.9c0-4.3-2.9-4.4-3.8-4.4-.8 0-3.7.1-3.7 4.4v6.9c0 4.5 1.3 5.6 3.7 5.6 2.5 0 3.8-1.1 3.8-5.6zm-10.2-.1v-6.7c0-4.1 2.1-6.7 6.4-6.7 4.4 0 6.5 2.6 6.5 6.7v6.7c0 5.6-2.1 7.9-6.5 7.9-4.3 0-6.4-2.3-6.4-7.9z" id=path8531 fill=none class=g6_1 stroke-width=.458><path id=path8533 class=g5_1 d="M1527 2551.2v20.5h-3.6l-8.1-17.8v17.8h-2.3v-20.5h3.6l8 17.5v-17.5z" fill=#010101><path stroke=#010101 d="M1527 2551.2v20.5h-3.6l-8.1-17.8v17.8h-2.3v-20.5h3.6l8 17.5v-17.5z" id=path8535 fill=none class=g6_1 stroke-width=.458><path id=path8537 class=g5_1 d="m1539 2553.6-3.2 10.9h6.5zm-1.6-2.4h3.4l6.6 20.5h-2.9l-1.5-4.9h-7.9l-1.5 4.9h-2.6z" fill=#010101><path stroke=#010101 d="m1539 2553.6-3.2 10.9h6.5zm-1.6-2.4h3.4l6.6 20.5h-2.9l-1.5-4.9h-7.9l-1.5 4.9h-2.6z" id=path8539 fill=none class=g6_1 stroke-width=.458><path id=path8541 class=g5_1 d="M1557.3 2571.7h-3.1l-5.9-20.5h2.8l4.7 18h.1l4.7-18h2.7z" fill=#010101><path stroke=#010101 d="M1557.3 2571.7h-3.1l-5.9-20.5h2.8l4.7 18h.1l4.7-18h2.7z" id=path8543 fill=none class=g6_1 stroke-width=.458><path id=path8545 class=g5_1 d="M1567.7 2571.7v-20.5h10.5v2.3h-7.9v6.6h7.3v2.2h-7.3v7.1h8.1v2.3z" fill=#010101><path stroke=#010101 d="M1567.7 2571.7v-20.5h10.5v2.3h-7.9v6.6h7.3v2.2h-7.3v7.1h8.1v2.3z" id=path8547 fill=none class=g6_1 stroke-width=.458><path id=path8549 class=g5_1 d="M1597.4 2551.2v20.5h-3.6l-8.1-17.8v17.8h-2.3v-20.5h3.6l8 17.5h.1v-17.5z" fill=#010101><path stroke=#010101 d="M1597.4 2551.2v20.5h-3.6l-8.1-17.8v17.8h-2.3v-20.5h3.6l8 17.5h.1v-17.5z" id=path8551 fill=none class=g6_1 stroke-width=.458><path id=path8553 class=g5_1 d="M1614.7 2551.2v2.3h-5.4v18.2h-2.6v-18.2h-5.4v-2.3z" fill=#010101><path stroke=#010101 d="M1614.7 2551.2v2.3h-5.4v18.2h-2.6v-18.2h-5.4v-2.3z" id=path8555 fill=none class=g6_1 stroke-width=.458><path id=path8557 class=g5_1 d="M1618.4 2551.2h2.7v13.1c0 4.5 1.3 5.6 3.8 5.6 2.4 0 3.8-1.1 3.8-5.6v-13.1h2.6v13c0 5.6-2.1 7.9-6.4 7.9-4.4 0-6.5-2.3-6.5-7.9z" fill=#010101><path stroke=#010101 d="M1618.4 2551.2h2.7v13.1c0 4.5 1.3 5.6 3.8 5.6 2.4 0 3.8-1.1 3.8-5.6v-13.1h2.6v13c0 5.6-2.1 7.9-6.4 7.9-4.4 0-6.5-2.3-6.5-7.9z" id=path8559 fill=none class=g6_1 stroke-width=.458><path id=path8561 class=g5_1 d="M1639.5 2560h3.9c1.9 0 2.8-1.6 2.8-3.4 0-1.5-.7-3.1-2.8-3.1h-3.9zm0 2.3v9.4h-2.6v-20.5h7c3.7 0 4.9 2.6 4.9 5.1 0 2.4-1.3 4.3-3.7 4.7 2.4.4 3.2 1.2 3.4 5.3 0 .9.3 4.1.7 5.4h-2.8c-.7-1.5-.5-4.1-.8-6.8-.1-2.5-2.2-2.6-3-2.6z" fill=#010101><path stroke=#010101 d="M1639.5 2560h3.9c1.9 0 2.8-1.6 2.8-3.4 0-1.5-.7-3.1-2.8-3.1h-3.9zm0 2.3v9.4h-2.6v-20.5h7c3.7 0 4.9 2.6 4.9 5.1 0 2.4-1.3 4.3-3.7 4.7 2.4.4 3.2 1.2 3.4 5.3 0 .9.3 4.1.7 5.4h-2.8c-.7-1.5-.5-4.1-.8-6.8-.1-2.5-2.2-2.6-3-2.6z" id=path8563 fill=none class=g6_1 stroke-width=.458><path id=path8565 class=g5_1 d="M1654.4 2571.7v-20.5h10.5v2.3h-7.9v6.6h7.4v2.2h-7.4v7.1h8.1v2.3z" fill=#010101><path stroke=#010101 d="M1654.4 2571.7v-20.5h10.5v2.3h-7.9v6.6h7.4v2.2h-7.4v7.1h8.1v2.3z" id=path8567 fill=none class=g6_1 stroke-width=.458><path id=path8569 class=g5_1 d="M1413.6 2633.8v-20.4h2.6v18.2h7.5v2.2z" fill=#010101><path stroke=#010101 d="M1413.6 2633.8v-20.4h2.6v18.2h7.5v2.2z" id=path8571 fill=none class=g6_1 stroke-width=.458><path id=path8573 class=g5_1 d="M1427.3 2613.4h2.6v13.1c0 4.4 1.3 5.6 3.8 5.6 2.4 0 3.8-1.2 3.8-5.6v-13.1h2.6v13c0 5.6-2.1 7.9-6.4 7.9-4.4 0-6.4-2.3-6.4-7.9z" fill=#010101><path stroke=#010101 d="M1427.3 2613.4h2.6v13.1c0 4.4 1.3 5.6 3.8 5.6 2.4 0 3.8-1.2 3.8-5.6v-13.1h2.6v13c0 5.6-2.1 7.9-6.4 7.9-4.4 0-6.4-2.3-6.4-7.9z" id=path8575 fill=none class=g6_1 stroke-width=.458><path id=path8577 class=g5_1 d="M1454.5 2619c0-1.1-.1-2.3-.6-2.9-.5-.7-1.8-.9-2.3-.9-2.2 0-3 1.3-3.1 1.6-.1.2-.6.7-.6 4.2v5.5c0 5 1.7 5.6 3.7 5.6.8 0 3.2-.3 3.2-4.3h2.7c.1 6.5-4.5 6.5-5.8 6.5-2.5 0-6.4-.2-6.4-8.1v-5.8c0-5.8 2.5-7.4 6.5-7.4 4.1 0 5.6 2.1 5.4 6z" fill=#010101><path stroke=#010101 d="M1454.5 2619c0-1.1-.1-2.3-.6-2.9-.5-.7-1.8-.9-2.3-.9-2.2 0-3 1.3-3.1 1.6-.1.2-.6.7-.6 4.2v5.5c0 5 1.7 5.6 3.7 5.6.8 0 3.2-.3 3.2-4.3h2.7c.1 6.5-4.5 6.5-5.8 6.5-2.5 0-6.4-.2-6.4-8.1v-5.8c0-5.8 2.5-7.4 6.5-7.4 4.1 0 5.6 2.1 5.4 6z" id=path8579 fill=none class=g6_1 stroke-width=.458><path id=path8581 class=g5_1 d="M1465.3 2633.8h-2.6v-20.4h2.6z" fill=#010101><path stroke=#010101 d="M1465.3 2633.8h-2.6v-20.4h2.6z" id=path8583 fill=none class=g6_1 stroke-width=.458><path id=path8585 class=g5_1 d="M1471.4 2633.8v-20.4h10.5v2.3h-7.9v6.5h7.3v2.3h-7.3v7.1h8.1v2.2z" fill=#010101><path stroke=#010101 d="M1471.4 2633.8v-20.4h10.5v2.3h-7.9v6.5h7.3v2.3h-7.3v7.1h8.1v2.2z" id=path8587 fill=none class=g6_1 stroke-width=.458><path id=path8589 class=g5_1 d="M1501.4 2613.4v20.4h-3.6l-8.1-17.7v17.7h-2.3v-20.4h3.6l8 17.5v-17.5z" fill=#010101><path stroke=#010101 d="M1501.4 2613.4v20.4h-3.6l-8.1-17.7v17.7h-2.3v-20.4h3.6l8 17.5v-17.5z" id=path8591 fill=none class=g6_1 stroke-width=.458><path id=path8593 class=g5_1 d="M1506.5 2622.2h6.2v2.2h-6.2z" fill=#010101><path stroke=#010101 d="M1506.5 2622.2h6.2v2.2h-6.2z" id=path8595 fill=none class=g6_1 stroke-width=.458><path id=path8597 class=g5_1 d="M1518.1 2633.8v-20.4h2.6v18.2h7.5v2.2z" fill=#010101><path stroke=#010101 d="M1518.1 2633.8v-20.4h2.6v18.2h7.5v2.2z" id=path8599 fill=none class=g6_1 stroke-width=.458><path id=path8601 class=g5_1 d="M1529.4 2613.4h3.1l-2.3 5.6h-2z" fill=#010101><path stroke=#010101 d="M1529.4 2613.4h3.1l-2.3 5.6h-2z" id=path8603 fill=none class=g6_1 stroke-width=.458><path id=path8605 class=g5_1 d="m1541.4 2615.8-3.2 10.9h6.5zm-1.6-2.4h3.4l6.6 20.4h-2.9l-1.5-4.8h-7.9l-1.5 4.8h-2.6z" fill=#010101><path stroke=#010101 d="m1541.4 2615.8-3.2 10.9h6.5zm-1.6-2.4h3.4l6.6 20.4h-2.9l-1.5-4.8h-7.9l-1.5 4.8h-2.6z" id=path8607 fill=none class=g6_1 stroke-width=.458><path id=path8609 class=g5_1 d="M1553.7 2633.8v-20.4h2.6v18.2h7.5v2.2z" fill=#010101><path stroke=#010101 d="M1553.7 2633.8v-20.4h2.6v18.2h7.5v2.2z" id=path8611 fill=none class=g6_1 stroke-width=.458><path id=path8613 class=g5_1 d="M1567.6 2633.8v-20.4h2.6v18.2h7.5v2.2z" fill=#010101><path stroke=#010101 d="M1567.6 2633.8v-20.4h2.6v18.2h7.5v2.2z" id=path8615 fill=none class=g6_1 stroke-width=.458><path id=path8617 class=g5_1 d="M1584.6 2633.8h-2.6v-20.4h2.6z" fill=#010101><path stroke=#010101 d="M1584.6 2633.8h-2.6v-20.4h2.6z" id=path8619 fill=none class=g6_1 stroke-width=.458><path id=path8621 class=g5_1 d="M1590.6 2633.8v-20.4h10.6v2.3h-8v6.5h7.4v2.3h-7.4v7.1h8.1v2.2z" fill=#010101><path stroke=#010101 d="M1590.6 2633.8v-20.4h10.6v2.3h-8v6.5h7.4v2.3h-7.4v7.1h8.1v2.2z" id=path8623 fill=none class=g6_1 stroke-width=.458><path id=path8625 class=g5_1 d="M1608.7 2622.2h3.9c1.9 0 2.8-1.6 2.8-3.4 0-1.5-.7-3.1-2.7-3.1h-4zm0 2.2v9.4h-2.6v-20.4h7.1c3.6 0 4.9 2.5 4.9 5.1 0 2.4-1.3 4.2-3.8 4.7 2.4.4 3.2 1.2 3.4 5.3 0 .9.3 4.1.7 5.3h-2.7c-.8-1.4-.6-4-.8-6.8-.2-2.5-2.2-2.6-3.1-2.6z" fill=#010101><path stroke=#010101 d="M1608.7 2622.2h3.9c1.9 0 2.8-1.6 2.8-3.4 0-1.5-.7-3.1-2.7-3.1h-4zm0 2.2v9.4h-2.6v-20.4h7.1c3.6 0 4.9 2.5 4.9 5.1 0 2.4-1.3 4.2-3.8 4.7 2.4.4 3.2 1.2 3.4 5.3 0 .9.3 4.1.7 5.3h-2.7c-.8-1.4-.6-4-.8-6.8-.2-2.5-2.2-2.6-3.1-2.6z" id=path8627 fill=none class=g6_1 stroke-width=.458><path id=path8629 class=g5_1 d="M796.1 2787.9h2.8c1.1 0 3.7-.3 3.7-3.5 0-3.1-2.4-3.4-2.9-3.4h-3.6zm-2.6 11.3v-20.5h6c2.8 0 5.7 1.1 5.7 5.9 0 4.6-3.6 5.6-5.7 5.6h-3.4v9z" fill=#010101><path stroke=#010101 d="M796.1 2787.9h2.8c1.1 0 3.7-.3 3.7-3.5 0-3.1-2.4-3.4-2.9-3.4h-3.6zm-2.6 11.3v-20.5h6c2.8 0 5.7 1.1 5.7 5.9 0 4.6-3.6 5.6-5.7 5.6h-3.4v9z" id=path8631 fill=none class=g6_1 stroke-width=.458><path id=path8633 class=g5_1 d="M810 2799.2v-20.5h2.6v18.2h7.5v2.3z" fill=#010101><path stroke=#010101 d="M810 2799.2v-20.5h2.6v18.2h7.5v2.3z" id=path8635 fill=none class=g6_1 stroke-width=.458><path id=path8637 class=g5_1 d="m831.3 2781.1-3.2 10.9h6.5zm-1.6-2.4h3.3l6.7 20.5h-2.9l-1.5-4.9h-7.9l-1.5 4.9h-2.6z" fill=#010101><path stroke=#010101 d="m831.3 2781.1-3.2 10.9h6.5zm-1.6-2.4h3.3l6.7 20.5h-2.9l-1.5-4.9h-7.9l-1.5 4.9h-2.6z" id=path8639 fill=none class=g6_1 stroke-width=.458><path id=path8641 class=g5_1 d="M852.6 2784.4c0-1.2-.1-2.3-.6-3-.6-.6-1.8-.9-2.3-.9-2.2 0-3 1.3-3.1 1.6-.1.2-.6.7-.6 4.3v5.4c0 5 1.6 5.6 3.6 5.6.8 0 3.2-.3 3.3-4.2h2.7c.1 6.4-4.5 6.4-5.8 6.4-2.6 0-6.5-.2-6.5-8.1v-5.8c0-5.7 2.6-7.4 6.6-7.4s5.6 2.1 5.3 6.1z" fill=#010101><path stroke=#010101 d="M852.6 2784.4c0-1.2-.1-2.3-.6-3-.6-.6-1.8-.9-2.3-.9-2.2 0-3 1.3-3.1 1.6-.1.2-.6.7-.6 4.3v5.4c0 5 1.6 5.6 3.6 5.6.8 0 3.2-.3 3.3-4.2h2.7c.1 6.4-4.5 6.4-5.8 6.4-2.6 0-6.5-.2-6.5-8.1v-5.8c0-5.7 2.6-7.4 6.6-7.4s5.6 2.1 5.3 6.1z" id=path8643 fill=none class=g6_1 stroke-width=.458><path id=path8645 class=g5_1 d="M860.4 2799.2v-20.5H871v2.3h-8v6.6h7.4v2.2H863v7.1h8.1v2.3z" fill=#010101><path stroke=#010101 d="M860.4 2799.2v-20.5H871v2.3h-8v6.6h7.4v2.2H863v7.1h8.1v2.3z" id=path8647 fill=none class=g6_1 stroke-width=.458><path id=path8649 class=g5_1 d="M875.3 2787.5h6.2v2.2h-6.2z" fill=#010101><path stroke=#010101 d="M875.3 2787.5h6.2v2.2h-6.2z" id=path8651 fill=none class=g6_1 stroke-width=.458><path id=path8653 class=g5_1 d="M888.3 2793.1v.6c0 2.8 1.7 3.6 3.4 3.6 2.1 0 3.7-.8 3.7-3.3 0-4.5-9.2-4-9.2-10.1 0-3.7 2.6-5.6 6-5.6 3.7 0 5.8 1.8 5.6 6h-2.7c.1-2.2-.6-3.7-3.1-3.7-1.6 0-3.2.8-3.2 3 0 4.5 9.2 3.8 9.2 10.3 0 4.3-3 5.7-6.3 5.7-6.1.1-6.1-4.6-6-6.5z" fill=#010101><path stroke=#010101 d="M888.3 2793.1v.6c0 2.8 1.7 3.6 3.4 3.6 2.1 0 3.7-.8 3.7-3.3 0-4.5-9.2-4-9.2-10.1 0-3.7 2.6-5.6 6-5.6 3.7 0 5.8 1.8 5.6 6h-2.7c.1-2.2-.6-3.7-3.1-3.7-1.6 0-3.2.8-3.2 3 0 4.5 9.2 3.8 9.2 10.3 0 4.3-3 5.7-6.3 5.7-6.1.1-6.1-4.6-6-6.5z" id=path8655 fill=none class=g6_1 stroke-width=.458><path id=path8657 class=g5_1 d="m909.3 2781.1-3.2 10.9h6.5zm-1.5-2.4h3.3l6.6 20.5h-2.9l-1.5-4.9h-7.9l-1.5 4.9h-2.6z" fill=#010101><path stroke=#010101 d="m909.3 2781.1-3.2 10.9h6.5zm-1.5-2.4h3.3l6.6 20.5h-2.9l-1.5-4.9h-7.9l-1.5 4.9h-2.6z" id=path8659 fill=none class=g6_1 stroke-width=.458><path id=path8661 class=g5_1 d="M924.5 2799.2h-2.6v-20.5h2.6z" fill=#010101><path stroke=#010101 d="M924.5 2799.2h-2.6v-20.5h2.6z" id=path8663 fill=none class=g6_1 stroke-width=.458><path id=path8665 class=g5_1 d="M944.7 2778.7v20.5h-3.5l-8.1-17.7h-.1v17.7h-2.3v-20.5h3.7l7.9 17.5h.1v-17.5z" fill=#010101><path stroke=#010101 d="M944.7 2778.7v20.5h-3.5l-8.1-17.7h-.1v17.7h-2.3v-20.5h3.7l7.9 17.5h.1v-17.5z" id=path8667 fill=none class=g6_1 stroke-width=.458><path id=path8669 class=g5_1 d="M962.6 2778.7v2.3h-5.4v18.2h-2.6V2781h-5.3v-2.3z" fill=#010101><path stroke=#010101 d="M962.6 2778.7v2.3h-5.4v18.2h-2.6V2781h-5.3v-2.3z" id=path8671 fill=none class=g6_1 stroke-width=.458><path id=path8673 class=g5_1 d="M964 2787.5h6.3v2.2H964z" fill=#010101><path stroke=#010101 d="M964 2787.5h6.3v2.2H964z" id=path8675 fill=none class=g6_1 stroke-width=.458><path id=path8677 class=g5_1 d="M975.5 2799.2v-20.5h2.6v8.9h7.1v-8.9h2.6v20.5h-2.6v-9.4h-7.1v9.4z" fill=#010101><path stroke=#010101 d="M975.5 2799.2v-20.5h2.6v8.9h7.1v-8.9h2.6v20.5h-2.6v-9.4h-7.1v9.4z" id=path8679 fill=none class=g6_1 stroke-width=.458><path id=path8681 class=g5_1 d="M993.7 2799.2v-20.5h10.6v2.3h-8v6.6h7.4v2.2h-7.4v7.1h8.1v2.3z" fill=#010101><path stroke=#010101 d="M993.7 2799.2v-20.5h10.6v2.3h-8v6.6h7.4v2.2h-7.4v7.1h8.1v2.3z" id=path8683 fill=none class=g6_1 stroke-width=.458><path id=path8685 class=g5_1 d="M1023.5 2778.7v20.5h-3.6l-8.1-17.7v17.7h-2.4v-20.5h3.7l8 17.5v-17.5z" fill=#010101><path stroke=#010101 d="M1023.5 2778.7v20.5h-3.6l-8.1-17.7v17.7h-2.4v-20.5h3.7l8 17.5v-17.5z" id=path8687 fill=none class=g6_1 stroke-width=.458><path id=path8689 class=g5_1 d="M1031.9 2787.5h3.9c1.8 0 2.7-1.6 2.7-3.4 0-1.5-.7-3.1-2.7-3.1h-3.9zm0 2.3v9.4h-2.6v-20.5h7c3.6 0 4.9 2.6 4.9 5.1 0 2.4-1.3 4.3-3.7 4.7v.1c2.3.3 3.2 1.1 3.3 5.2 0 .9.3 4.1.7 5.4h-2.7c-.7-1.4-.6-4.1-.8-6.8-.2-2.5-2.2-2.6-3.1-2.6z" fill=#010101><path stroke=#010101 d="M1031.9 2787.5h3.9c1.8 0 2.7-1.6 2.7-3.4 0-1.5-.7-3.1-2.7-3.1h-3.9zm0 2.3v9.4h-2.6v-20.5h7c3.6 0 4.9 2.6 4.9 5.1 0 2.4-1.3 4.3-3.7 4.7v.1c2.3.3 3.2 1.1 3.3 5.2 0 .9.3 4.1.7 5.4h-2.7c-.7-1.4-.6-4.1-.8-6.8-.2-2.5-2.2-2.6-3.1-2.6z" id=path8691 fill=none class=g6_1 stroke-width=.458><path id=path8693 class=g5_1 d="M1049.4 2799.2h-2.6v-20.5h2.6z" fill=#010101><path stroke=#010101 d="M1049.4 2799.2h-2.6v-20.5h2.6z" id=path8695 fill=none class=g6_1 stroke-width=.458><path id=path8697 class=g5_1 d="M855 2722.2h-3.2l-5.9-20.5h2.9l4.6 18h.1l4.8-18h2.6z" fill=#010101><path stroke=#010101 d="M855 2722.2h-3.2l-5.9-20.5h2.9l4.6 18h.1l4.8-18h2.6z" id=path8699 fill=none class=g6_1 stroke-width=.458><path id=path8701 class=g5_1 d="M865.6 2722.2v-20.5h10.5v2.3h-7.9v6.5h7.3v2.3h-7.3v7.1h8.1v2.3z" fill=#010101><path stroke=#010101 d="M865.6 2722.2v-20.5h10.5v2.3h-7.9v6.5h7.3v2.3h-7.3v7.1h8.1v2.3z" id=path8703 fill=none class=g6_1 stroke-width=.458><path id=path8705 class=g5_1 d="M895.3 2701.7v20.5h-3.6l-8-17.8h-.1v17.8h-2.3v-20.5h3.7l7.9 17.5h.1v-17.5z" fill=#010101><path stroke=#010101 d="M895.3 2701.7v20.5h-3.6l-8-17.8h-.1v17.8h-2.3v-20.5h3.7l7.9 17.5h.1v-17.5z" id=path8707 fill=none class=g6_1 stroke-width=.458><path id=path8709 class=g5_1 d="M903.8 2719.9h2.5c3.6 0 4.9-1.4 4.9-6.1v-4.2c0-4.1-1.2-5.6-3.9-5.6h-3.5zm-2.6-18.2h6.3c2.6 0 4.5 1 5.5 3.1.8 1.8.9 5.8.9 6.5 0 4.3-.4 6.9-1.2 8.2-1.1 1.8-3.2 2.7-6.8 2.7h-4.7z" fill=#010101><path stroke=#010101 d="M903.8 2719.9h2.5c3.6 0 4.9-1.4 4.9-6.1v-4.2c0-4.1-1.2-5.6-3.9-5.6h-3.5zm-2.6-18.2h6.3c2.6 0 4.5 1 5.5 3.1.8 1.8.9 5.8.9 6.5 0 4.3-.4 6.9-1.2 8.2-1.1 1.8-3.2 2.7-6.8 2.7h-4.7z" id=path8711 fill=none class=g6_1 stroke-width=.458><path id=path8713 class=g5_1 d="M929.1 2714.8v-6.9c0-4.3-2.9-4.4-3.7-4.4-.9 0-3.8.1-3.8 4.4v6.9c0 4.5 1.3 5.6 3.8 5.6 2.4 0 3.7-1.1 3.7-5.6m-3.7-17.9-1.9 2.7h-2.2l2.8-4h2.6l2.8 4h-2.2zm-6.5 17.8v-6.7c0-4.1 2.1-6.7 6.5-6.7 4.3 0 6.4 2.6 6.4 6.7v6.7c0 5.6-2.1 7.9-6.4 7.9-4.4 0-6.5-2.3-6.5-7.9z" fill=#010101><path stroke=#010101 d="M929.1 2714.8v-6.9c0-4.3-2.9-4.4-3.7-4.4-.9 0-3.8.1-3.8 4.4v6.9c0 4.5 1.3 5.6 3.8 5.6 2.4 0 3.7-1.1 3.7-5.6zm-3.7-17.9-1.9 2.7h-2.2l2.8-4h2.6l2.8 4h-2.2zm-6.5 17.8v-6.7c0-4.1 2.1-6.7 6.5-6.7 4.3 0 6.4 2.6 6.4 6.7v6.7c0 5.6-2.1 7.9-6.4 7.9-4.4 0-6.5-2.3-6.5-7.9z" id=path8715 fill=none class=g6_1 stroke-width=.458><path id=path8717 class=g5_1 d="M939.9 2722.2h-2.4v-20.5h4.2l5.2 17.2 5.2-17.2h4.3v20.5h-2.6V2704l-5.8 18.2h-2.4L940 2704h-.1z" fill=#010101><path stroke=#010101 d="M939.9 2722.2h-2.4v-20.5h4.2l5.2 17.2 5.2-17.2h4.3v20.5h-2.6V2704l-5.8 18.2h-2.4L940 2704h-.1z" id=path8719 fill=none class=g6_1 stroke-width=.458><path id=path8721 class=g5_1 d="M962.5 2722.2v-20.5H973v2.3h-7.9v6.5h7.3v2.3h-7.3v7.1h8.1v2.3z" fill=#010101><path stroke=#010101 d="M962.5 2722.2v-20.5H973v2.3h-7.9v6.5h7.3v2.3h-7.3v7.1h8.1v2.3z" id=path8723 fill=none class=g6_1 stroke-width=.458><path id=path8725 class=g5_1 d="M742.8 2646.3h-3.1l-5.9-20.5h2.8l4.7 18 4.8-18h2.7z" fill=#010101><path stroke=#010101 d="M742.8 2646.3h-3.1l-5.9-20.5h2.8l4.7 18 4.8-18h2.7z" id=path8727 fill=none class=g6_1 stroke-width=.458><path id=path8729 class=g5_1 d="M756.3 2646.3h-2.6v-20.5h2.6z" fill=#010101><path stroke=#010101 d="M756.3 2646.3h-2.6v-20.5h2.6z" id=path8731 fill=none class=g6_1 stroke-width=.458><path id=path8733 class=g5_1 d="M762.4 2646.3v-20.5h2.6v18.2h7.5v2.3z" fill=#010101><path stroke=#010101 d="M762.4 2646.3v-20.5h2.6v18.2h7.5v2.3z" id=path8735 fill=none class=g6_1 stroke-width=.458><path id=path8737 class=g5_1 d="M776.4 2646.3v-20.5h2.6v18.2h7.5v2.3z" fill=#010101><path stroke=#010101 d="M776.4 2646.3v-20.5h2.6v18.2h7.5v2.3z" id=path8739 fill=none class=g6_1 stroke-width=.458><path id=path8741 class=g5_1 d="M797.7 2628.2h-.1l-3.2 10.9h6.6zm-1.6-2.4h3.3l6.7 20.5h-2.9l-1.5-4.9h-7.9l-1.5 4.9h-2.7z" fill=#010101><path stroke=#010101 d="M797.7 2628.2h-.1l-3.2 10.9h6.6zm-1.6-2.4h3.3l6.7 20.5h-2.9l-1.5-4.9h-7.9l-1.5 4.9h-2.7z" id=path8743 fill=none class=g6_1 stroke-width=.458><path id=path8745 class=g5_1 d="M808.7 2634.6h6.2v2.2h-6.2z" fill=#010101><path stroke=#010101 d="M808.7 2634.6h6.2v2.2h-6.2z" id=path8747 fill=none class=g6_1 stroke-width=.458><path id=path8749 class=g5_1 d="M822.4 2646.3H820v-20.5h4.2l5.1 17.2h.1l5.2-17.2h4.3v20.5h-2.6v-18.2h-.1l-5.7 18.2H828l-5.6-18.2z" fill=#010101><path stroke=#010101 d="M822.4 2646.3H820v-20.5h4.2l5.1 17.2h.1l5.2-17.2h4.3v20.5h-2.6v-18.2h-.1l-5.7 18.2H828l-5.6-18.2z" id=path8751 fill=none class=g6_1 stroke-width=.458><path id=path8753 class=g5_1 d="m850.8 2628.2-3.2 10.9h6.5zm-1.5-2.4h3.3l6.6 20.5h-2.9l-1.5-4.9h-7.9l-1.5 4.9h-2.6z" fill=#010101><path stroke=#010101 d="m850.8 2628.2-3.2 10.9h6.5zm-1.5-2.4h3.3l6.6 20.5h-2.9l-1.5-4.9h-7.9l-1.5 4.9h-2.6z" id=path8755 fill=none class=g6_1 stroke-width=.458><path id=path8757 class=g5_1 d="M865.6 2634.6h3.9c1.9 0 2.8-1.6 2.8-3.4 0-1.5-.7-3.1-2.7-3.1h-4zm0 2.3v9.4H863v-20.5h7.1c3.6 0 4.9 2.6 4.9 5.1 0 2.4-1.4 4.3-3.8 4.7v.1c2.4.3 3.2 1.1 3.4 5.2 0 .9.3 4.1.7 5.4h-2.7c-.8-1.4-.6-4.1-.8-6.8-.2-2.5-2.2-2.6-3.1-2.6z" fill=#010101><path stroke=#010101 d="M865.6 2634.6h3.9c1.9 0 2.8-1.6 2.8-3.4 0-1.5-.7-3.1-2.7-3.1h-4zm0 2.3v9.4H863v-20.5h7.1c3.6 0 4.9 2.6 4.9 5.1 0 2.4-1.4 4.3-3.8 4.7v.1c2.4.3 3.2 1.1 3.4 5.2 0 .9.3 4.1.7 5.4h-2.7c-.8-1.4-.6-4.1-.8-6.8-.2-2.5-2.2-2.6-3.1-2.6z" id=path8759 fill=none class=g6_1 stroke-width=.458><path id=path8761 class=g5_1 d="M883.2 2646.3h-2.6v-20.5h2.6z" fill=#010101><path stroke=#010101 d="M883.2 2646.3h-2.6v-20.5h2.6z" id=path8763 fill=none class=g6_1 stroke-width=.458><path id=path8765 class=g5_1 d="m895.4 2628.2-3.2 10.9h6.5zm-1.6-2.4h3.4l6.6 20.5h-2.9l-1.5-4.9h-7.9l-1.5 4.9h-2.6z" fill=#010101><path stroke=#010101 d="m895.4 2628.2-3.2 10.9h6.5zm-1.6-2.4h3.4l6.6 20.5h-2.9l-1.5-4.9h-7.9l-1.5 4.9h-2.6z" id=path8767 fill=none class=g6_1 stroke-width=.458><path id=path8769 class=g5_1 d="M429.9 2479.3c0-1.2 0-2.3-.6-3-.5-.6-1.7-.9-2.3-.9-2.1 0-3 1.3-3.1 1.6 0 .3-.6.8-.6 4.3v5.4c0 5 1.7 5.6 3.7 5.6.8 0 3.2-.2 3.2-4.2h2.7c.1 6.4-4.4 6.4-5.8 6.4-2.5 0-6.4-.2-6.4-8.1v-5.8c0-5.7 2.5-7.4 6.5-7.4 4.1 0 5.7 2.1 5.4 6.1z" fill=#010101><path stroke=#010101 d="M429.9 2479.3c0-1.2 0-2.3-.6-3-.5-.6-1.7-.9-2.3-.9-2.1 0-3 1.3-3.1 1.6 0 .3-.6.8-.6 4.3v5.4c0 5 1.7 5.6 3.7 5.6.8 0 3.2-.2 3.2-4.2h2.7c.1 6.4-4.4 6.4-5.8 6.4-2.5 0-6.4-.2-6.4-8.1v-5.8c0-5.7 2.5-7.4 6.5-7.4 4.1 0 5.7 2.1 5.4 6.1z" id=path8771 fill=none class=g6_1 stroke-width=.458><path id=path8773 class=g5_1 d="M447.9 2486.7v-6.9c0-4.2-3-4.4-3.8-4.4s-3.7.2-3.7 4.4v6.9c0 4.5 1.3 5.6 3.7 5.6 2.5 0 3.8-1.1 3.8-5.6m-3.7-17.9-1.9 2.7H440l2.8-4h2.7l2.8 4H446zm-6.5 17.8v-6.7c0-4.1 2.1-6.7 6.4-6.7 4.4 0 6.4 2.6 6.4 6.7v6.7c0 5.7-2 7.9-6.4 7.9-4.3 0-6.4-2.2-6.4-7.9z" fill=#010101><path stroke=#010101 d="M447.9 2486.7v-6.9c0-4.2-3-4.4-3.8-4.4s-3.7.2-3.7 4.4v6.9c0 4.5 1.3 5.6 3.7 5.6 2.5 0 3.8-1.1 3.8-5.6zm-3.7-17.9-1.9 2.7H440l2.8-4h2.7l2.8 4H446zm-6.5 17.8v-6.7c0-4.1 2.1-6.7 6.4-6.7 4.4 0 6.4 2.6 6.4 6.7v6.7c0 5.7-2 7.9-6.4 7.9-4.3 0-6.4-2.2-6.4-7.9z" id=path8775 fill=none class=g6_1 stroke-width=.458><path id=path8777 class=g5_1 d="M467.7 2473.7v2.2h-5.4v18.2h-2.6v-18.2h-5.4v-2.2z" fill=#010101><path stroke=#010101 d="M467.7 2473.7v2.2h-5.4v18.2h-2.6v-18.2h-5.4v-2.2z" id=path8779 fill=none class=g6_1 stroke-width=.458><path id=path8781 class=g5_1 d="M472.1 2494.1v-20.4h10.5v2.2h-7.9v6.6h7.3v2.3h-7.3v7h8.1v2.3z" fill=#010101><path stroke=#010101 d="M472.1 2494.1v-20.4h10.5v2.2h-7.9v6.6h7.3v2.3h-7.3v7h8.1v2.3z" id=path8783 fill=none class=g6_1 stroke-width=.458><path id=path8785 class=g5_1 d="M486.9 2482.5h6.3v2.1h-6.3z" fill=#010101><path stroke=#010101 d="M486.9 2482.5h6.3v2.1h-6.3z" id=path8787 fill=none class=g6_1 stroke-width=.458><path id=path8789 class=g5_1 d="M500.2 2488v.6c0 2.8 1.8 3.7 3.4 3.7 2.1 0 3.7-.9 3.7-3.4 0-4.5-9.2-4-9.2-10.1 0-3.6 2.6-5.6 6-5.6 3.7 0 5.8 1.8 5.7 6h-2.7c0-2.2-.7-3.7-3.2-3.7-1.5 0-3.1.8-3.1 3 0 4.5 9.1 3.8 9.1 10.3 0 4.3-2.9 5.7-6.3 5.7-6 .1-6-4.5-6-6.5z" fill=#010101><path stroke=#010101 d="M500.2 2488v.6c0 2.8 1.8 3.7 3.4 3.7 2.1 0 3.7-.9 3.7-3.4 0-4.5-9.2-4-9.2-10.1 0-3.6 2.6-5.6 6-5.6 3.7 0 5.8 1.8 5.7 6h-2.7c0-2.2-.7-3.7-3.2-3.7-1.5 0-3.1.8-3.1 3 0 4.5 9.1 3.8 9.1 10.3 0 4.3-2.9 5.7-6.3 5.7-6 .1-6-4.5-6-6.5z" id=path8791 fill=none class=g6_1 stroke-width=.458><path id=path8793 class=g5_1 d="M521.3 2476.1h-.1L518 2487h6.5zm-1.6-2.4h3.3l6.6 20.4h-2.9l-1.4-4.9h-7.9l-1.6 4.9h-2.6z" fill=#010101><path stroke=#010101 d="M521.3 2476.1h-.1L518 2487h6.5zm-1.6-2.4h3.3l6.6 20.4h-2.9l-1.4-4.9h-7.9l-1.6 4.9h-2.6z" id=path8795 fill=none class=g6_1 stroke-width=.458><path id=path8797 class=g5_1 d="M536.4 2494.1h-2.6v-20.4h2.6z" fill=#010101><path stroke=#010101 d="M536.4 2494.1h-2.6v-20.4h2.6z" id=path8799 fill=none class=g6_1 stroke-width=.458><path id=path8801 class=g5_1 d="M556.7 2473.7v20.4h-3.6l-8.1-17.7v17.7h-2.4v-20.4h3.7l8 17.4v-17.4z" fill=#010101><path stroke=#010101 d="M556.7 2473.7v20.4h-3.6l-8.1-17.7v17.7h-2.4v-20.4h3.7l8 17.4v-17.4z" id=path8803 fill=none class=g6_1 stroke-width=.458><path id=path8805 class=g5_1 d="M574.5 2473.7v2.2h-5.3v18.2h-2.6v-18.2h-5.4v-2.2z" fill=#010101><path stroke=#010101 d="M574.5 2473.7v2.2h-5.3v18.2h-2.6v-18.2h-5.4v-2.2z" id=path8807 fill=none class=g6_1 stroke-width=.458><path id=path8809 class=g5_1 d="M579.2 2494.1v-20.4h10.5v2.2h-7.9v6.6h7.4v2.3h-7.4v7h8.1v2.3z" fill=#010101><path stroke=#010101 d="M579.2 2494.1v-20.4h10.5v2.2h-7.9v6.6h7.4v2.3h-7.4v7h8.1v2.3z" id=path8811 fill=none class=g6_1 stroke-width=.458><path id=path8813 class=g5_1 d="M594.1 2482.5h6.2v2.1h-6.2z" fill=#010101><path stroke=#010101 d="M594.1 2482.5h6.2v2.1h-6.2z" id=path8815 fill=none class=g6_1 stroke-width=.458><path id=path8817 class=g5_1 d="M614.3 2479.3c.1-1.2 0-2.3-.5-3-.6-.6-1.8-.9-2.3-.9-2.2 0-3 1.3-3.1 1.6s-.6.8-.6 4.3v5.4c0 5 1.6 5.6 3.6 5.6.8 0 3.2-.2 3.3-4.2h2.6c.2 6.4-4.4 6.4-5.7 6.4-2.6 0-6.5-.2-6.5-8.1v-5.8c0-5.7 2.6-7.4 6.6-7.4s5.6 2.1 5.3 6.1z" fill=#010101><path stroke=#010101 d="M614.3 2479.3c.1-1.2 0-2.3-.5-3-.6-.6-1.8-.9-2.3-.9-2.2 0-3 1.3-3.1 1.6s-.6.8-.6 4.3v5.4c0 5 1.6 5.6 3.6 5.6.8 0 3.2-.2 3.3-4.2h2.6c.2 6.4-4.4 6.4-5.7 6.4-2.6 0-6.5-.2-6.5-8.1v-5.8c0-5.7 2.6-7.4 6.6-7.4s5.6 2.1 5.3 6.1z" id=path8819 fill=none class=g6_1 stroke-width=.458><path id=path8821 class=g5_1 d="m628.4 2476.1-3.2 10.9h6.5zm-1.6-2.4h3.3l6.7 20.4h-2.9l-1.5-4.9h-7.9l-1.5 4.9h-2.6z" fill=#010101><path stroke=#010101 d="m628.4 2476.1-3.2 10.9h6.5zm-1.6-2.4h3.3l6.7 20.4h-2.9l-1.5-4.9h-7.9l-1.5 4.9h-2.6z" id=path8823 fill=none class=g6_1 stroke-width=.458><path id=path8825 class=g5_1 d="M650 2473.7v2.2h-5.4v18.2H642v-18.2h-5.3v-2.2z" fill=#010101><path stroke=#010101 d="M650 2473.7v2.2h-5.4v18.2H642v-18.2h-5.3v-2.2z" id=path8827 fill=none class=g6_1 stroke-width=.458><path id=path8829 class=g5_1 d="M654.9 2494.1v-20.4h2.6v8.8h7.1v-8.8h2.6v20.4h-2.6v-9.3h-7.1v9.3z" fill=#010101><path stroke=#010101 d="M654.9 2494.1v-20.4h2.6v8.8h7.1v-8.8h2.6v20.4h-2.6v-9.3h-7.1v9.3z" id=path8831 fill=none class=g6_1 stroke-width=.458><path id=path8833 class=g5_1 d="M673.1 2494.1v-20.4h10.5v2.2h-7.9v6.6h7.4v2.3h-7.4v7h8.1v2.3z" fill=#010101><path stroke=#010101 d="M673.1 2494.1v-20.4h10.5v2.2h-7.9v6.6h7.4v2.3h-7.4v7h8.1v2.3z" id=path8835 fill=none class=g6_1 stroke-width=.458><path id=path8837 class=g5_1 d="M691 2482.4h3.9c1.8 0 2.7-1.6 2.7-3.4 0-1.4-.7-3.1-2.7-3.1H691zm0 2.3v9.4h-2.6v-20.4h7c3.6 0 4.9 2.5 4.9 5.1 0 2.4-1.3 4.2-3.7 4.6v.1c2.3.3 3.2 1.1 3.3 5.2 0 .9.3 4.1.7 5.4h-2.7c-.7-1.4-.6-4.1-.8-6.8-.2-2.5-2.2-2.6-3.1-2.6z" fill=#010101><path stroke=#010101 d="M691 2482.4h3.9c1.8 0 2.7-1.6 2.7-3.4 0-1.4-.7-3.1-2.7-3.1H691zm0 2.3v9.4h-2.6v-20.4h7c3.6 0 4.9 2.5 4.9 5.1 0 2.4-1.3 4.2-3.7 4.6v.1c2.3.3 3.2 1.1 3.3 5.2 0 .9.3 4.1.7 5.4h-2.7c-.7-1.4-.6-4.1-.8-6.8-.2-2.5-2.2-2.6-3.1-2.6z" id=path8839 fill=none class=g6_1 stroke-width=.458><path id=path8841 class=g5_1 d="M708.5 2494.1h-2.6v-20.4h2.6z" fill=#010101><path stroke=#010101 d="M708.5 2494.1h-2.6v-20.4h2.6z" id=path8843 fill=none class=g6_1 stroke-width=.458><path id=path8845 class=g5_1 d="M728.4 2473.7v20.4h-3.5l-8.1-17.7h-.1v17.7h-2.3v-20.4h3.7l8 17.4v-17.4z" fill=#010101><path stroke=#010101 d="M728.4 2473.7v20.4h-3.5l-8.1-17.7h-.1v17.7h-2.3v-20.4h3.7l8 17.4v-17.4z" id=path8847 fill=none class=g6_1 stroke-width=.458><path id=path8849 class=g5_1 d="M734.3 2494.1v-20.4h10.5v2.2h-7.9v6.6h7.4v2.3h-7.4v7h8.1v2.3z" fill=#010101><path stroke=#010101 d="M734.3 2494.1v-20.4h10.5v2.2h-7.9v6.6h7.4v2.3h-7.4v7h8.1v2.3z" id=path8851 fill=none class=g6_1 stroke-width=.458><path id=path8853 class=g5_1 d="M508.1 2407.5h2.8c1.1 0 3.7-.3 3.7-3.5 0-3.1-2.4-3.4-2.9-3.4h-3.6zm-2.6 11.3v-20.5h6c2.8 0 5.7 1.1 5.7 5.9 0 4.6-3.6 5.6-5.7 5.6h-3.4v9z" fill=#010101><path stroke=#010101 d="M508.1 2407.5h2.8c1.1 0 3.7-.3 3.7-3.5 0-3.1-2.4-3.4-2.9-3.4h-3.6zm-2.6 11.3v-20.5h6c2.8 0 5.7 1.1 5.7 5.9 0 4.6-3.6 5.6-5.7 5.6h-3.4v9z" id=path8855 fill=none class=g6_1 stroke-width=.458><path id=path8857 class=g5_1 d="M522 2418.8v-20.5h2.6v18.2h7.5v2.3z" fill=#010101><path stroke=#010101 d="M522 2418.8v-20.5h2.6v18.2h7.5v2.3z" id=path8859 fill=none class=g6_1 stroke-width=.458><path id=path8861 class=g5_1 d="m543.3 2400.7-3.2 10.9h6.5zm-1.6-2.4h3.3l6.7 20.5h-2.9l-1.5-4.9h-7.9l-1.5 4.9h-2.6z" fill=#010101><path stroke=#010101 d="m543.3 2400.7-3.2 10.9h6.5zm-1.6-2.4h3.3l6.7 20.5h-2.9l-1.5-4.9h-7.9l-1.5 4.9h-2.6z" id=path8863 fill=none class=g6_1 stroke-width=.458><path id=path8865 class=g5_1 d="M558 2418.8h-2.4v-20.5h4.2l5.1 17.2h.1l5.2-17.2h4.3v20.5h-2.6v-18.2l-5.8 18.2h-2.4l-5.6-18.2h-.1z" fill=#010101><path stroke=#010101 d="M558 2418.8h-2.4v-20.5h4.2l5.1 17.2h.1l5.2-17.2h4.3v20.5h-2.6v-18.2l-5.8 18.2h-2.4l-5.6-18.2h-.1z" id=path8867 fill=none class=g6_1 stroke-width=.458><path id=path8869 class=g5_1 d="M590.4 2411.4v-6.9c0-4.3-3-4.4-3.8-4.4s-3.8.1-3.8 4.4v6.9c0 4.5 1.3 5.6 3.8 5.6s3.8-1.1 3.8-5.6m-10.2-.1v-6.7c0-4.1 2.1-6.7 6.4-6.7s6.4 2.6 6.4 6.7v6.7c0 5.7-2.1 7.9-6.4 7.9s-6.4-2.2-6.4-7.9z" fill=#010101><path stroke=#010101 d="M590.4 2411.4v-6.9c0-4.3-3-4.4-3.8-4.4s-3.8.1-3.8 4.4v6.9c0 4.5 1.3 5.6 3.8 5.6s3.8-1.1 3.8-5.6zm-10.2-.1v-6.7c0-4.1 2.1-6.7 6.4-6.7s6.4 2.6 6.4 6.7v6.7c0 5.7-2.1 7.9-6.4 7.9s-6.4-2.2-6.4-7.9z" id=path8871 fill=none class=g6_1 stroke-width=.458><path id=path8873 class=g5_1 d="M612.8 2398.3v20.5h-3.5l-8.1-17.7v17.7h-2.4v-20.5h3.7l8 17.5v-17.5z" fill=#010101><path stroke=#010101 d="M612.8 2398.3v20.5h-3.5l-8.1-17.7v17.7h-2.4v-20.5h3.7l8 17.5v-17.5z" id=path8875 fill=none class=g6_1 stroke-width=.458><path id=path8877 class=g5_1 d="M621.4 2416.5h2.4c3.7 0 5-1.3 5-6.1v-4.1c0-4.2-1.3-5.7-4-5.7h-3.4zm-2.6-18.2h6.2c2.7 0 4.5 1 5.5 3.2.9 1.7.9 5.8.9 6.4 0 4.4-.4 6.9-1.2 8.2-1.1 1.8-3.2 2.7-6.7 2.7h-4.7z" fill=#010101><path stroke=#010101 d="M621.4 2416.5h2.4c3.7 0 5-1.3 5-6.1v-4.1c0-4.2-1.3-5.7-4-5.7h-3.4zm-2.6-18.2h6.2c2.7 0 4.5 1 5.5 3.2.9 1.7.9 5.8.9 6.4 0 4.4-.4 6.9-1.2 8.2-1.1 1.8-3.2 2.7-6.7 2.7h-4.7z" id=path8879 fill=none class=g6_1 stroke-width=.458><path id=path8881 class=g5_1 d="M647.2 2411.4v-6.9c0-4.3-2.9-4.4-3.7-4.4s-3.8.1-3.8 4.4v6.9c0 4.5 1.3 5.6 3.8 5.6 2.4 0 3.7-1.1 3.7-5.6m-10.1-.1v-6.7c0-4.1 2-6.7 6.4-6.7 4.3 0 6.4 2.6 6.4 6.7v6.7c0 5.7-2.1 7.9-6.4 7.9-4.4 0-6.4-2.2-6.4-7.9z" fill=#010101><path stroke=#010101 d="M647.2 2411.4v-6.9c0-4.3-2.9-4.4-3.7-4.4s-3.8.1-3.8 4.4v6.9c0 4.5 1.3 5.6 3.8 5.6 2.4 0 3.7-1.1 3.7-5.6zm-10.1-.1v-6.7c0-4.1 2-6.7 6.4-6.7 4.3 0 6.4 2.6 6.4 6.7v6.7c0 5.7-2.1 7.9-6.4 7.9-4.4 0-6.4-2.2-6.4-7.9z" id=path8883 fill=none class=g6_1 stroke-width=.458><path id=path8885 class=g5_1 d="M669.7 2398.3v20.5h-3.5l-8.1-17.7h-.1v17.7h-2.3v-20.5h3.7l7.9 17.5h.1v-17.5z" fill=#010101><path stroke=#010101 d="M669.7 2398.3v20.5h-3.5l-8.1-17.7h-.1v17.7h-2.3v-20.5h3.7l7.9 17.5h.1v-17.5z" id=path8887 fill=none class=g6_1 stroke-width=.458><path id=path8889 class=g5_1 d="M514.7 2321.2v20.5h-3.6l-8-17.7h-.1v17.7h-2.3v-20.5h3.7l7.9 17.5h.1v-17.5z" fill=#010101><path stroke=#010101 d="M514.7 2321.2v20.5h-3.6l-8-17.7h-.1v17.7h-2.3v-20.5h3.7l7.9 17.5h.1v-17.5z" id=path8891 fill=none class=g6_1 stroke-width=.458><path id=path8893 class=g5_1 d="M526.8 2323.6h-.1l-3.2 10.9h6.6zm-1.6-2.4h3.3l6.6 20.5h-2.9l-1.4-4.9h-7.9l-1.6 4.9h-2.6z" fill=#010101><path stroke=#010101 d="M526.8 2323.6h-.1l-3.2 10.9h6.6zm-1.6-2.4h3.3l6.6 20.5h-2.9l-1.4-4.9h-7.9l-1.6 4.9h-2.6z" id=path8895 fill=none class=g6_1 stroke-width=.458><path id=path8897 class=g5_1 d="M541.5 2341.7H539v-20.5h4.2l5.2 17.2h.1l5.2-17.2h4.3v20.5h-2.6v-18.2h-.1l-5.7 18.2h-2.5l-5.6-18.2z" fill=#010101><path stroke=#010101 d="M541.5 2341.7H539v-20.5h4.2l5.2 17.2h.1l5.2-17.2h4.3v20.5h-2.6v-18.2h-.1l-5.7 18.2h-2.5l-5.6-18.2z" id=path8899 fill=none class=g6_1 stroke-width=.458><path id=path8901 class=g5_1 d="M563.6 2321.2h2.6v13.1c0 4.5 1.4 5.6 3.9 5.6 2.4 0 3.8-1.1 3.8-5.6v-13.1h2.6v13c0 5.7-2.1 7.9-6.4 7.9-4.4 0-6.5-2.2-6.5-7.9z" fill=#010101><path stroke=#010101 d="M563.6 2321.2h2.6v13.1c0 4.5 1.4 5.6 3.9 5.6 2.4 0 3.8-1.1 3.8-5.6v-13.1h2.6v13c0 5.7-2.1 7.9-6.4 7.9-4.4 0-6.5-2.2-6.5-7.9z" id=path8903 fill=none class=g6_1 stroke-width=.458><path id=path8905 class=g5_1 d="M584.7 2330h3.9c1.9 0 2.8-1.6 2.8-3.4 0-1.5-.8-3.1-2.8-3.1h-3.9zm0 2.3v9.4h-2.6v-20.5h7c3.7 0 4.9 2.6 4.9 5.1 0 2.4-1.3 4.3-3.7 4.7v.1c2.3.3 3.2 1.1 3.3 5.2.1.9.3 4.1.7 5.4h-2.7c-.7-1.4-.5-4.1-.8-6.8-.2-2.5-2.2-2.6-3.1-2.6z" fill=#010101><path stroke=#010101 d="M584.7 2330h3.9c1.9 0 2.8-1.6 2.8-3.4 0-1.5-.8-3.1-2.8-3.1h-3.9zm0 2.3v9.4h-2.6v-20.5h7c3.7 0 4.9 2.6 4.9 5.1 0 2.4-1.3 4.3-3.7 4.7v.1c2.3.3 3.2 1.1 3.3 5.2.1.9.3 4.1.7 5.4h-2.7c-.7-1.4-.5-4.1-.8-6.8-.2-2.5-2.2-2.6-3.1-2.6z" id=path8907 fill=none class=g6_1 stroke-width=.458><path id=path8909 class=g5_1 d="M340.4 2265h2.4c3.7 0 5-1.4 5-6.1v-4.2c0-4.1-1.3-5.6-4-5.6h-3.4zm-2.6-18.2h6.3c2.6 0 4.4.9 5.5 3.1.8 1.7.9 5.8.9 6.5 0 4.3-.4 6.9-1.3 8.2-1.1 1.8-3.2 2.6-6.7 2.6h-4.7z" fill=#010101><path stroke=#010101 d="M340.4 2265h2.4c3.7 0 5-1.4 5-6.1v-4.2c0-4.1-1.3-5.6-4-5.6h-3.4zm-2.6-18.2h6.3c2.6 0 4.4.9 5.5 3.1.8 1.7.9 5.8.9 6.5 0 4.3-.4 6.9-1.3 8.2-1.1 1.8-3.2 2.6-6.7 2.6h-4.7z" id=path8911 fill=none class=g6_1 stroke-width=.458><path id=path8913 class=g5_1 d="M355.9 2267.2v-20.4h10.5v2.3h-7.9v6.5h7.3v2.3h-7.3v7.1h8.1v2.2z" fill=#010101><path stroke=#010101 d="M355.9 2267.2v-20.4h10.5v2.3h-7.9v6.5h7.3v2.3h-7.3v7.1h8.1v2.2z" id=path8915 fill=none class=g6_1 stroke-width=.458><path id=path8917 class=g5_1 d="M378.6 2267.2v-20.4h2.6v18.2h7.5v2.2z" fill=#010101><path stroke=#010101 d="M378.6 2267.2v-20.4h2.6v18.2h7.5v2.2z" id=path8919 fill=none class=g6_1 stroke-width=.458><path id=path8921 class=g5_1 d="M399.9 2249.2h-.1l-3.2 10.9h6.6zm-1.6-2.4h3.3l6.7 20.4h-3l-1.4-4.8H396l-1.5 4.8h-2.7z" fill=#010101><path stroke=#010101 d="M399.9 2249.2h-.1l-3.2 10.9h6.6zm-1.6-2.4h3.3l6.7 20.4h-3l-1.4-4.8H396l-1.5 4.8h-2.7z" id=path8923 fill=none class=g6_1 stroke-width=.458><path id=path8925 class=g5_1 d="M421.5 2261.2v.6c0 2.7 1.8 3.6 3.5 3.6 2 0 3.6-.9 3.6-3.3 0-4.5-9.2-4-9.2-10.2 0-3.6 2.6-5.5 6-5.5 3.8 0 5.9 1.8 5.7 6h-2.7c0-2.3-.7-3.8-3.2-3.8-1.5 0-3.1.8-3.1 3 0 4.5 9.2 3.9 9.2 10.4 0 4.3-3 5.7-6.4 5.7-6 0-6-4.6-5.9-6.5z" fill=#010101><path stroke=#010101 d="M421.5 2261.2v.6c0 2.7 1.8 3.6 3.5 3.6 2 0 3.6-.9 3.6-3.3 0-4.5-9.2-4-9.2-10.2 0-3.6 2.6-5.5 6-5.5 3.8 0 5.9 1.8 5.7 6h-2.7c0-2.3-.7-3.8-3.2-3.8-1.5 0-3.1.8-3.1 3 0 4.5 9.2 3.9 9.2 10.4 0 4.3-3 5.7-6.4 5.7-6 0-6-4.6-5.9-6.5z" id=path8927 fill=none class=g6_1 stroke-width=.458><path id=path8929 class=g5_1 d="M442.6 2249.2h-.1l-3.2 10.9h6.6zm-1.6-2.4h3.3l6.7 20.4h-2.9l-1.5-4.8h-7.9l-1.5 4.8h-2.7z" fill=#010101><path stroke=#010101 d="M442.6 2249.2h-.1l-3.2 10.9h6.6zm-1.6-2.4h3.3l6.7 20.4h-2.9l-1.5-4.8h-7.9l-1.5 4.8h-2.7z" id=path8931 fill=none class=g6_1 stroke-width=.458><path id=path8933 class=g5_1 d="M460.9 2267.2h-3.1l-5.9-20.4h2.8l4.7 18 4.8-18h2.7z" fill=#010101><path stroke=#010101 d="M460.9 2267.2h-3.1l-5.9-20.4h2.8l4.7 18 4.8-18h2.7z" id=path8935 fill=none class=g6_1 stroke-width=.458><path id=path8937 class=g5_1 d="m475.8 2249.2-3.2 10.9h6.5zm-1.6-2.4h3.3l6.7 20.4h-2.9l-1.5-4.8h-7.9l-1.5 4.8h-2.6z" fill=#010101><path stroke=#010101 d="m475.8 2249.2-3.2 10.9h6.5zm-1.6-2.4h3.3l6.7 20.4h-2.9l-1.5-4.8h-7.9l-1.5 4.8h-2.6z" id=path8939 fill=none class=g6_1 stroke-width=.458><path id=path8941 class=g5_1 d="M502.2 2246.8v20.4h-3.6l-8-17.7h-.1v17.7h-2.3v-20.4h3.7l7.9 17.5h.1v-17.5z" fill=#010101><path stroke=#010101 d="M502.2 2246.8v20.4h-3.6l-8-17.7h-.1v17.7h-2.3v-20.4h3.7l7.9 17.5h.1v-17.5z" id=path8943 fill=none class=g6_1 stroke-width=.458><path id=path8945 class=g5_1 d="M508.1 2267.2v-20.4h10.5v2.3h-7.9v6.5h7.3v2.3h-7.3v7.1h8.1v2.2z" fill=#010101><path stroke=#010101 d="M508.1 2267.2v-20.4h10.5v2.3h-7.9v6.5h7.3v2.3h-7.3v7.1h8.1v2.2z" id=path8947 fill=none class=g6_1 stroke-width=.458><path id=path8949 class=g5_1 d="M291.7 2188.6h2.5c3.6 0 4.9-1.4 4.9-6.1v-4.2c0-4.1-1.3-5.6-4-5.6h-3.4zm-2.6-18.2h6.3c2.6 0 4.4.9 5.5 3.1.8 1.7.9 5.8.9 6.5 0 4.3-.4 6.8-1.3 8.2-1.1 1.8-3.1 2.6-6.7 2.6h-4.7z" fill=#010101><path stroke=#010101 d="M291.7 2188.6h2.5c3.6 0 4.9-1.4 4.9-6.1v-4.2c0-4.1-1.3-5.6-4-5.6h-3.4zm-2.6-18.2h6.3c2.6 0 4.4.9 5.5 3.1.8 1.7.9 5.8.9 6.5 0 4.3-.4 6.8-1.3 8.2-1.1 1.8-3.1 2.6-6.7 2.6h-4.7z" id=path8951 fill=none class=g6_1 stroke-width=.458><path id=path8953 class=g5_1 d="M307.4 2170.4h2.6v13.1c0 4.4 1.3 5.6 3.8 5.6s3.8-1.2 3.8-5.6v-13.1h2.6v13c0 5.6-2.1 7.9-6.4 7.9s-6.4-2.3-6.4-7.9z" fill=#010101><path stroke=#010101 d="M307.4 2170.4h2.6v13.1c0 4.4 1.3 5.6 3.8 5.6s3.8-1.2 3.8-5.6v-13.1h2.6v13c0 5.6-2.1 7.9-6.4 7.9s-6.4-2.3-6.4-7.9z" id=path8955 fill=none class=g6_1 stroke-width=.458><path id=path8957 class=g5_1 d="M342.3 2176c0-1.1 0-2.3-.6-2.9-.5-.7-1.7-.9-2.3-.9-2.1 0-3 1.3-3.1 1.6 0 .2-.6.7-.6 4.2v5.5c0 5 1.7 5.6 3.7 5.6.8 0 3.2-.3 3.2-4.3h2.7c.1 6.5-4.4 6.5-5.8 6.5-2.5 0-6.4-.2-6.4-8.1v-5.8c0-5.8 2.5-7.4 6.5-7.4 4.1 0 5.7 2.1 5.4 6z" fill=#010101><path stroke=#010101 d="M342.3 2176c0-1.1 0-2.3-.6-2.9-.5-.7-1.7-.9-2.3-.9-2.1 0-3 1.3-3.1 1.6 0 .2-.6.7-.6 4.2v5.5c0 5 1.7 5.6 3.7 5.6.8 0 3.2-.3 3.2-4.3h2.7c.1 6.5-4.4 6.5-5.8 6.5-2.5 0-6.4-.2-6.4-8.1v-5.8c0-5.8 2.5-7.4 6.5-7.4 4.1 0 5.7 2.1 5.4 6z" id=path8959 fill=none class=g6_1 stroke-width=.458><path id=path8961 class=g5_1 d="M360.3 2183.5v-6.9c0-4.3-3-4.4-3.8-4.4s-3.7.1-3.7 4.4v6.9c0 4.4 1.3 5.6 3.7 5.6 2.5 0 3.8-1.2 3.8-5.6m-10.2-.1v-6.7c0-4.1 2.1-6.7 6.4-6.7 4.4 0 6.4 2.6 6.4 6.7v6.7c0 5.6-2 7.9-6.4 7.9-4.3 0-6.4-2.3-6.4-7.9z" fill=#010101><path stroke=#010101 d="M360.3 2183.5v-6.9c0-4.3-3-4.4-3.8-4.4s-3.7.1-3.7 4.4v6.9c0 4.4 1.3 5.6 3.7 5.6 2.5 0 3.8-1.2 3.8-5.6zm-10.2-.1v-6.7c0-4.1 2.1-6.7 6.4-6.7 4.4 0 6.4 2.6 6.4 6.7v6.7c0 5.6-2 7.9-6.4 7.9-4.3 0-6.4-2.3-6.4-7.9z" id=path8963 fill=none class=g6_1 stroke-width=.458><path id=path8965 class=g5_1 d="M368.6 2190.8v-20.4h2.6v18.2h7.5v2.2z" fill=#010101><path stroke=#010101 d="M368.6 2190.8v-20.4h2.6v18.2h7.5v2.2z" id=path8967 fill=none class=g6_1 stroke-width=.458><path id=path8969 class=g5_1 d="M382.9 2190.8v-20.4h2.6v18.2h7.5v2.2z" fill=#010101><path stroke=#010101 d="M382.9 2190.8v-20.4h2.6v18.2h7.5v2.2z" id=path8971 fill=none class=g6_1 stroke-width=.458><path id=path8973 class=g5_1 d="m401.6 2164.3 2.6 4h-1.9l-3.7-4zm-4.5 26.5v-20.4h10.6v2.3h-8v6.5h7.4v2.3h-7.4v7.1h8.1v2.2z" fill=#010101><path stroke=#010101 d="m401.6 2164.3 2.6 4h-1.9l-3.7-4zm-4.5 26.5v-20.4h10.6v2.3h-8v6.5h7.4v2.3h-7.4v7.1h8.1v2.2z" id=path8975 fill=none class=g6_1 stroke-width=.458><path id=path8977 class=g5_1 d="M422.5 2175.9c0-2.4-1-3.7-3.6-3.7-.8 0-3.8.1-3.8 4.4v6.9c0 4.4 1.3 5.6 3.8 5.6 1.9 0 3.1-.5 3.6-.9v-6.1h-3.7v-2.3h6.3v9.9c-1.6.9-3.6 1.6-6.2 1.6-4.3 0-6.4-2.3-6.4-7.9v-6.7c0-4.1 2.1-6.7 6.4-6.7 4.4 0 6.5 1.6 6.3 5.9z" fill=#010101><path stroke=#010101 d="M422.5 2175.9c0-2.4-1-3.7-3.6-3.7-.8 0-3.8.1-3.8 4.4v6.9c0 4.4 1.3 5.6 3.8 5.6 1.9 0 3.1-.5 3.6-.9v-6.1h-3.7v-2.3h6.3v9.9c-1.6.9-3.6 1.6-6.2 1.6-4.3 0-6.4-2.3-6.4-7.9v-6.7c0-4.1 2.1-6.7 6.4-6.7 4.4 0 6.5 1.6 6.3 5.9z" id=path8979 fill=none class=g6_1 stroke-width=.458><path id=path8981 class=g5_1 d="M431.1 2190.8v-20.4h10.6v2.3h-8v6.5h7.4v2.3h-7.4v7.1h8.1v2.2z" fill=#010101><path stroke=#010101 d="M431.1 2190.8v-20.4h10.6v2.3h-8v6.5h7.4v2.3h-7.4v7.1h8.1v2.2z" id=path8983 fill=none class=g6_1 stroke-width=.458><path id=path8985 class=g5_1 d="M1364.6 2826c.1-1.2 0-2.4-.6-3-.5-.7-1.7-.9-2.2-.9-2.2 0-3 1.3-3.1 1.6-.1.2-.6.7-.6 4.2v5.5c0 5 1.6 5.6 3.6 5.6.8 0 3.2-.3 3.3-4.3h2.6c.2 6.5-4.4 6.5-5.7 6.5-2.6 0-6.5-.2-6.5-8.1v-5.8c0-5.8 2.6-7.4 6.6-7.4s5.6 2.1 5.3 6.1z" fill=#010101><path stroke=#010101 d="M1364.6 2826c.1-1.2 0-2.4-.6-3-.5-.7-1.7-.9-2.2-.9-2.2 0-3 1.3-3.1 1.6-.1.2-.6.7-.6 4.2v5.5c0 5 1.6 5.6 3.6 5.6.8 0 3.2-.3 3.3-4.3h2.6c.2 6.5-4.4 6.5-5.7 6.5-2.6 0-6.5-.2-6.5-8.1v-5.8c0-5.8 2.6-7.4 6.6-7.4s5.6 2.1 5.3 6.1z" id=path8987 fill=none class=g6_1 stroke-width=.458><path id=path8989 class=g5_1 d="M1372.7 2840.8v-20.5h2.6v8.9h7.1v-8.9h2.7v20.5h-2.7v-9.4h-7.1v9.4z" fill=#010101><path stroke=#010101 d="M1372.7 2840.8v-20.5h2.6v8.9h7.1v-8.9h2.7v20.5h-2.7v-9.4h-7.1v9.4z" id=path8991 fill=none class=g6_1 stroke-width=.458><path id=path8993 class=g5_1 d="m1397.1 2822.7-3.2 10.9h6.5zm-1.5-2.4h3.3l6.6 20.5h-2.9l-1.5-4.9h-7.9l-1.5 4.9h-2.6z" fill=#010101><path stroke=#010101 d="m1397.1 2822.7-3.2 10.9h6.5zm-1.5-2.4h3.3l6.6 20.5h-2.9l-1.5-4.9h-7.9l-1.5 4.9h-2.6z" id=path8995 fill=none class=g6_1 stroke-width=.458><path id=path8997 class=g5_1 d="M1411.9 2829.1h3.9c1.9 0 2.8-1.6 2.8-3.4 0-1.5-.7-3.1-2.7-3.1h-4zm0 2.3v9.4h-2.6v-20.5h7.1c3.6 0 4.9 2.6 4.9 5.1 0 2.4-1.4 4.3-3.8 4.7 2.4.4 3.2 1.2 3.4 5.3 0 .9.3 4.1.7 5.4h-2.7c-.8-1.5-.6-4.1-.8-6.8-.2-2.5-2.2-2.6-3.1-2.6z" fill=#010101><path stroke=#010101 d="M1411.9 2829.1h3.9c1.9 0 2.8-1.6 2.8-3.4 0-1.5-.7-3.1-2.7-3.1h-4zm0 2.3v9.4h-2.6v-20.5h7.1c3.6 0 4.9 2.6 4.9 5.1 0 2.4-1.4 4.3-3.8 4.7 2.4.4 3.2 1.2 3.4 5.3 0 .9.3 4.1.7 5.4h-2.7c-.8-1.5-.6-4.1-.8-6.8-.2-2.5-2.2-2.6-3.1-2.6z" id=path8999 fill=none class=g6_1 stroke-width=.458><path id=path9001 class=g5_1 d="M1426.5 2840.8v-20.5h2.6v18.2h7.5v2.3z" fill=#010101><path stroke=#010101 d="M1426.5 2840.8v-20.5h2.6v18.2h7.5v2.3z" id=path9003 fill=none class=g6_1 stroke-width=.458><path id=path9005 class=g5_1 d="M1440.2 2840.8v-20.5h10.6v2.3h-8v6.6h7.4v2.2h-7.4v7.1h8.1v2.3z" fill=#010101><path stroke=#010101 d="M1440.2 2840.8v-20.5h10.6v2.3h-8v6.6h7.4v2.2h-7.4v7.1h8.1v2.3z" id=path9007 fill=none class=g6_1 stroke-width=.458><path id=path9009 class=g5_1 d="M1464 2840.8h-3.1l-5.9-20.5h2.8l4.7 18h.1l4.7-18h2.7z" fill=#010101><path stroke=#010101 d="M1464 2840.8h-3.1l-5.9-20.5h2.8l4.7 18h.1l4.7-18h2.7z" id=path9011 fill=none class=g6_1 stroke-width=.458><path id=path9013 class=g5_1 d="M1483.6 2833.4v-6.9c0-4.3-2.9-4.4-3.7-4.4-.9 0-3.8.1-3.8 4.4v6.9c0 4.5 1.3 5.6 3.8 5.6 2.4 0 3.7-1.1 3.7-5.6m-10.2-.1v-6.7c0-4.1 2.1-6.7 6.5-6.7 4.3 0 6.4 2.6 6.4 6.7v6.7c0 5.6-2.1 7.9-6.4 7.9-4.4 0-6.5-2.3-6.5-7.9z" fill=#010101><path stroke=#010101 d="M1483.6 2833.4v-6.9c0-4.3-2.9-4.4-3.7-4.4-.9 0-3.8.1-3.8 4.4v6.9c0 4.5 1.3 5.6 3.8 5.6 2.4 0 3.7-1.1 3.7-5.6zm-10.2-.1v-6.7c0-4.1 2.1-6.7 6.5-6.7 4.3 0 6.4 2.6 6.4 6.7v6.7c0 5.6-2.1 7.9-6.4 7.9-4.4 0-6.5-2.3-6.5-7.9z" id=path9015 fill=none class=g6_1 stroke-width=.458><path id=path9017 class=g5_1 d="M1494.6 2840.8h-2.6v-20.5h2.6z" fill=#010101><path stroke=#010101 d="M1494.6 2840.8h-2.6v-20.5h2.6z" id=path9019 fill=none class=g6_1 stroke-width=.458><path id=path9021 class=g5_1 d="M1514.3 2840.8h-3.1l-4.8-8.8-4.5 8.8h-2.8l5.9-10.6-5.6-9.9h3l4.2 7.9 4.3-7.9h2.8l-5.5 9.9z" fill=#010101><path stroke=#010101 d="M1514.3 2840.8h-3.1l-4.8-8.8-4.5 8.8h-2.8l5.9-10.6-5.6-9.9h3l4.2 7.9 4.3-7.9h2.8l-5.5 9.9z" id=path9023 fill=none class=g6_1 stroke-width=.458><path id=path9025 class=g5_1 d="M1337.1 3014.8h2.4c3.7 0 5-1.3 5-6.1v-4.1c0-4.2-1.3-5.7-4-5.7h-3.4zm-2.6-18.1h6.3c2.6 0 4.4.9 5.4 3.1.9 1.7 1 5.8 1 6.4 0 4.4-.4 6.9-1.3 8.3-1.1 1.7-3.2 2.6-6.7 2.6h-4.7z" fill=#010101><path stroke=#010101 d="M1337.1 3014.8h2.4c3.7 0 5-1.3 5-6.1v-4.1c0-4.2-1.3-5.7-4-5.7h-3.4zm-2.6-18.1h6.3c2.6 0 4.4.9 5.4 3.1.9 1.7 1 5.8 1 6.4 0 4.4-.4 6.9-1.3 8.3-1.1 1.7-3.2 2.6-6.7 2.6h-4.7z" id=path9027 fill=none class=g6_1 stroke-width=.458><path id=path9029 class=g5_1 d="M1352.3 3017.1v-20.4h10.5v2.2h-7.9v6.6h7.3v2.2h-7.3v7.1h8.1v2.3z" fill=#010101><path stroke=#010101 d="M1352.3 3017.1v-20.4h10.5v2.2h-7.9v6.6h7.3v2.2h-7.3v7.1h8.1v2.3z" id=path9031 fill=none class=g6_1 stroke-width=.458><path id=path9033 class=g5_1 d="M1375 3017.1v-20.4h2.6v18.1h7.5v2.3z" fill=#010101><path stroke=#010101 d="M1375 3017.1v-20.4h2.6v18.1h7.5v2.3z" id=path9035 fill=none class=g6_1 stroke-width=.458><path id=path9037 class=g5_1 d="M1386.1 2996.7h3l-2.3 5.6h-2z" fill=#010101><path stroke=#010101 d="M1386.1 2996.7h3l-2.3 5.6h-2z" id=path9039 fill=none class=g6_1 stroke-width=.458><path id=path9041 class=g5_1 d="m1401.4 2990.5-3.7 4h-1.9l2.5-4zm-8.1 26.6v-20.4h10.5v2.2h-7.9v6.6h7.3v2.2h-7.3v7.1h8.1v2.3z" fill=#010101><path stroke=#010101 d="m1401.4 2990.5-3.7 4h-1.9l2.5-4zm-8.1 26.6v-20.4h10.5v2.2h-7.9v6.6h7.3v2.2h-7.3v7.1h8.1v2.3z" id=path9043 fill=none class=g6_1 stroke-width=.458><path id=path9045 class=g5_1 d="M1418.6 3002.1c0-2.4-1-3.7-3.6-3.7-.8 0-3.7.1-3.7 4.4v6.9c0 4.5 1.3 5.6 3.7 5.6 1.9 0 3.1-.5 3.7-.9v-6.1h-3.8v-2.3h6.4v10c-1.7.9-3.7 1.5-6.3 1.5-4.3 0-6.4-2.2-6.4-7.9v-6.7c0-4.1 2.1-6.7 6.4-6.7 4.4 0 6.5 1.6 6.4 5.9z" fill=#010101><path stroke=#010101 d="M1418.6 3002.1c0-2.4-1-3.7-3.6-3.7-.8 0-3.7.1-3.7 4.4v6.9c0 4.5 1.3 5.6 3.7 5.6 1.9 0 3.1-.5 3.7-.9v-6.1h-3.8v-2.3h6.4v10c-1.7.9-3.7 1.5-6.3 1.5-4.3 0-6.4-2.2-6.4-7.9v-6.7c0-4.1 2.1-6.7 6.4-6.7 4.4 0 6.5 1.6 6.4 5.9z" id=path9047 fill=none class=g6_1 stroke-width=.458><path id=path9049 class=g5_1 d="M1427.3 3017.1v-20.4h2.6v18.1h7.5v2.3z" fill=#010101><path stroke=#010101 d="M1427.3 3017.1v-20.4h2.6v18.1h7.5v2.3z" id=path9051 fill=none class=g6_1 stroke-width=.458><path id=path9053 class=g5_1 d="M1443.9 3017.1h-2.6v-20.4h2.6z" fill=#010101><path stroke=#010101 d="M1443.9 3017.1h-2.6v-20.4h2.6z" id=path9055 fill=none class=g6_1 stroke-width=.458><path id=path9057 class=g5_1 d="M1452 3011v.6c0 2.8 1.7 3.6 3.4 3.6 2.1 0 3.7-.8 3.7-3.3 0-4.5-9.2-4-9.2-10.1 0-3.6 2.6-5.6 6-5.6 3.7 0 5.8 1.8 5.7 6h-2.8c.1-2.2-.6-3.7-3.1-3.7-1.6 0-3.1.8-3.1 3 0 4.5 9.1 3.8 9.1 10.3 0 4.3-2.9 5.7-6.3 5.7-6 .1-6-4.5-6-6.5z" fill=#010101><path stroke=#010101 d="M1452 3011v.6c0 2.8 1.7 3.6 3.4 3.6 2.1 0 3.7-.8 3.7-3.3 0-4.5-9.2-4-9.2-10.1 0-3.6 2.6-5.6 6-5.6 3.7 0 5.8 1.8 5.7 6h-2.8c.1-2.2-.6-3.7-3.1-3.7-1.6 0-3.1.8-3.1 3 0 4.5 9.1 3.8 9.1 10.3 0 4.3-2.9 5.7-6.3 5.7-6 .1-6-4.5-6-6.5z" id=path9059 fill=none class=g6_1 stroke-width=.458><path id=path9061 class=g5_1 d="M1466.8 3017.1v-20.4h10.6v2.2h-7.9v6.6h7.3v2.2h-7.3v7.1h8v2.3z" fill=#010101><path stroke=#010101 d="M1466.8 3017.1v-20.4h10.6v2.2h-7.9v6.6h7.3v2.2h-7.3v7.1h8v2.3z" id=path9063 fill=none class=g6_1 stroke-width=.458><path id=path9065 class=g5_1 d="M975.5 2965.6c.1 1.8-.2 4.6 2.5 4.6 2.8 0 2.9-2.4 2.9-4.9v-13.8h2.6v15.4c0 1.1 0 5.5-5.6 5.5-1.1 0-3.3-.4-4.3-2-.8-1.4-.8-3.2-.8-4.8z" fill=#010101><path stroke=#010101 d="M975.5 2965.6c.1 1.8-.2 4.6 2.5 4.6 2.8 0 2.9-2.4 2.9-4.9v-13.8h2.6v15.4c0 1.1 0 5.5-5.6 5.5-1.1 0-3.3-.4-4.3-2-.8-1.4-.8-3.2-.8-4.8z" id=path9067 fill=none class=g6_1 stroke-width=.458><path id=path9069 class=g5_1 d="M999.6 2964.6v-6.9c0-4.3-2.9-4.4-3.8-4.4-.8 0-3.7.1-3.7 4.4v6.9c0 4.5 1.3 5.6 3.7 5.6 2.5 0 3.8-1.1 3.8-5.6m-10.2-.1v-6.7c0-4.1 2.1-6.7 6.4-6.7 4.4 0 6.5 2.6 6.5 6.7v6.7c0 5.6-2.1 7.9-6.5 7.9-4.3 0-6.4-2.3-6.4-7.9z" fill=#010101><path stroke=#010101 d="M999.6 2964.6v-6.9c0-4.3-2.9-4.4-3.8-4.4-.8 0-3.7.1-3.7 4.4v6.9c0 4.5 1.3 5.6 3.7 5.6 2.5 0 3.8-1.1 3.8-5.6zm-10.2-.1v-6.7c0-4.1 2.1-6.7 6.4-6.7 4.4 0 6.5 2.6 6.5 6.7v6.7c0 5.6-2.1 7.9-6.5 7.9-4.3 0-6.4-2.3-6.4-7.9z" id=path9071 fill=none class=g6_1 stroke-width=.458><path id=path9073 class=g5_1 d="M1007.9 2971.9v-20.4h2.6v18.2h7.5v2.2z" fill=#010101><path stroke=#010101 d="M1007.9 2971.9v-20.4h2.6v18.2h7.5v2.2z" id=path9075 fill=none class=g6_1 stroke-width=.458><path id=path9077 class=g5_1 d="M1025.1 2971.9h-2.6v-20.4h2.6z" fill=#010101><path stroke=#010101 d="M1025.1 2971.9h-2.6v-20.4h2.6z" id=path9079 fill=none class=g6_1 stroke-width=.458><path id=path9081 class=g5_1 d="M1040.2 2957.1c0-1.1-.1-2.3-.6-2.9-.5-.7-1.7-.9-2.3-.9-2.1 0-3 1.3-3.1 1.6-.1.2-.6.7-.6 4.2v5.5c0 5 1.7 5.6 3.7 5.6.8 0 3.2-.3 3.2-4.3h2.7c.1 6.5-4.4 6.5-5.8 6.5-2.5 0-6.4-.2-6.4-8.1v-5.8c0-5.8 2.5-7.4 6.5-7.4 4.1 0 5.6 2.1 5.4 6z" fill=#010101><path stroke=#010101 d="M1040.2 2957.1c0-1.1-.1-2.3-.6-2.9-.5-.7-1.7-.9-2.3-.9-2.1 0-3 1.3-3.1 1.6-.1.2-.6.7-.6 4.2v5.5c0 5 1.7 5.6 3.7 5.6.8 0 3.2-.3 3.2-4.3h2.7c.1 6.5-4.4 6.5-5.8 6.5-2.5 0-6.4-.2-6.4-8.1v-5.8c0-5.8 2.5-7.4 6.5-7.4 4.1 0 5.6 2.1 5.4 6z" id=path9083 fill=none class=g6_1 stroke-width=.458><path id=path9085 class=g5_1 d="M1058.2 2964.6v-6.9c0-4.3-3-4.4-3.8-4.4s-3.7.1-3.7 4.4v6.9c0 4.5 1.3 5.6 3.7 5.6 2.5 0 3.8-1.1 3.8-5.6m-10.2-.1v-6.7c0-4.1 2.1-6.7 6.4-6.7s6.4 2.6 6.4 6.7v6.7c0 5.6-2.1 7.9-6.4 7.9s-6.4-2.3-6.4-7.9z" fill=#010101><path stroke=#010101 d="M1058.2 2964.6v-6.9c0-4.3-3-4.4-3.8-4.4s-3.7.1-3.7 4.4v6.9c0 4.5 1.3 5.6 3.7 5.6 2.5 0 3.8-1.1 3.8-5.6zm-10.2-.1v-6.7c0-4.1 2.1-6.7 6.4-6.7s6.4 2.6 6.4 6.7v6.7c0 5.6-2.1 7.9-6.4 7.9s-6.4-2.3-6.4-7.9z" id=path9087 fill=none class=g6_1 stroke-width=.458><path id=path9089 class=g5_1 d="M1066.5 2971.9v-20.4h10.5v2.3h-7.9v6.5h7.4v2.3h-7.4v7.1h8.1v2.2z" fill=#010101><path stroke=#010101 d="M1066.5 2971.9v-20.4h10.5v2.3h-7.9v6.5h7.4v2.3h-7.4v7.1h8.1v2.2z" id=path9091 fill=none class=g6_1 stroke-width=.458><path id=path9093 class=g5_1 d="M1082 2951.5h2.6v13.1c0 4.5 1.4 5.6 3.8 5.6 2.5 0 3.8-1.1 3.8-5.6v-13.1h2.6v13c0 5.6-2.1 7.9-6.4 7.9s-6.4-2.3-6.4-7.9z" fill=#010101><path stroke=#010101 d="M1082 2951.5h2.6v13.1c0 4.5 1.4 5.6 3.8 5.6 2.5 0 3.8-1.1 3.8-5.6v-13.1h2.6v13c0 5.6-2.1 7.9-6.4 7.9s-6.4-2.3-6.4-7.9z" id=path9095 fill=none class=g6_1 stroke-width=.458><path id=path9097 class=g5_1 d="M1103.1 2960.3h3.9c1.8 0 2.7-1.6 2.7-3.4 0-1.5-.7-3.1-2.7-3.1h-3.9zm0 2.2v9.4h-2.7v-20.4h7.1c3.6 0 4.9 2.6 4.9 5.1 0 2.4-1.3 4.3-3.7 4.7 2.3.4 3.2 1.2 3.3 5.3 0 .9.3 4.1.7 5.3h-2.7c-.7-1.4-.6-4-.8-6.7-.2-2.5-2.2-2.7-3.1-2.7z" fill=#010101><path stroke=#010101 d="M1103.1 2960.3h3.9c1.8 0 2.7-1.6 2.7-3.4 0-1.5-.7-3.1-2.7-3.1h-3.9zm0 2.2v9.4h-2.7v-20.4h7.1c3.6 0 4.9 2.6 4.9 5.1 0 2.4-1.3 4.3-3.7 4.7 2.3.4 3.2 1.2 3.3 5.3 0 .9.3 4.1.7 5.3h-2.7c-.7-1.4-.6-4-.8-6.7-.2-2.5-2.2-2.7-3.1-2.7z" id=path9099 fill=none class=g6_1 stroke-width=.458><path id=path9101 class=g5_1 d="M965.4 3044.7h-2.5v-20.4h4.3l5.1 17.1h.1l5.2-17.1h4.3v20.4h-2.6v-18.2h-.1l-5.7 18.2H971l-5.6-18.2z" fill=#010101><path stroke=#010101 d="M965.4 3044.7h-2.5v-20.4h4.3l5.1 17.1h.1l5.2-17.1h4.3v20.4h-2.6v-18.2h-.1l-5.7 18.2H971l-5.6-18.2z" id=path9103 fill=none class=g6_1 stroke-width=.458><path id=path9105 class=g5_1 d="M997.7 3037.4v-6.9c0-4.3-2.9-4.5-3.7-4.5s-3.8.2-3.8 4.5v6.9c0 4.4 1.3 5.6 3.8 5.6 2.4 0 3.7-1.2 3.7-5.6m-10.2-.2v-6.7c0-4 2.1-6.6 6.5-6.6 4.3 0 6.4 2.6 6.4 6.6v6.7c0 5.7-2.1 7.9-6.4 7.9-4.4 0-6.5-2.2-6.5-7.9z" fill=#010101><path stroke=#010101 d="M997.7 3037.4v-6.9c0-4.3-2.9-4.5-3.7-4.5s-3.8.2-3.8 4.5v6.9c0 4.4 1.3 5.6 3.8 5.6 2.4 0 3.7-1.2 3.7-5.6zm-10.2-.2v-6.7c0-4 2.1-6.6 6.5-6.6 4.3 0 6.4 2.6 6.4 6.6v6.7c0 5.7-2.1 7.9-6.4 7.9-4.4 0-6.5-2.2-6.5-7.9z" id=path9107 fill=none class=g6_1 stroke-width=.458><path id=path9109 class=g5_1 d="M1020.2 3024.3v20.4h-3.6l-8-17.7h-.1v17.7h-2.3v-20.4h3.7l7.9 17.5h.1v-17.5z" fill=#010101><path stroke=#010101 d="M1020.2 3024.3v20.4h-3.6l-8-17.7h-.1v17.7h-2.3v-20.4h3.7l7.9 17.5h.1v-17.5z" id=path9111 fill=none class=g6_1 stroke-width=.458><path id=path9113 class=g5_1 d="M1026.6 3044.7v-20.4h2.6v9h.1l7.2-9h2.9l-7.4 9.2 7.8 11.2h-3.3l-7.2-10.6h-.1v10.6z" fill=#010101><path stroke=#010101 d="M1026.6 3044.7v-20.4h2.6v9h.1l7.2-9h2.9l-7.4 9.2 7.8 11.2h-3.3l-7.2-10.6h-.1v10.6z" id=path9115 fill=none class=g6_1 stroke-width=.458><path id=path9117 class=g5_1 d="M1259.2 3101h-3.1l-5.9-20.4h2.8l4.7 17.9h.1l4.7-17.9h2.7z" fill=#010101><path stroke=#010101 d="M1259.2 3101h-3.1l-5.9-20.4h2.8l4.7 17.9h.1l4.7-17.9h2.7z" id=path9119 fill=none class=g6_1 stroke-width=.458><path id=path9121 class=g5_1 d="M1269.8 3101v-20.4h10.6v2.2h-7.9v6.6h7.3v2.3h-7.3v7h8v2.3z" fill=#010101><path stroke=#010101 d="M1269.8 3101v-20.4h10.6v2.2h-7.9v6.6h7.3v2.3h-7.3v7h8v2.3z" id=path9123 fill=none class=g6_1 stroke-width=.458><path id=path9125 class=g5_1 d="M1288 3089.3h3.9c1.8 0 2.7-1.6 2.7-3.3 0-1.5-.7-3.2-2.7-3.2h-3.9zm0 2.3v9.4h-2.6v-20.4h7c3.6 0 4.9 2.5 4.9 5.1 0 2.4-1.3 4.2-3.7 4.6v.1c2.3.4 3.2 1.2 3.3 5.3 0 .8.3 4 .7 5.3h-2.7c-.7-1.4-.6-4.1-.8-6.8-.2-2.5-2.2-2.6-3.1-2.6z" fill=#010101><path stroke=#010101 d="M1288 3089.3h3.9c1.8 0 2.7-1.6 2.7-3.3 0-1.5-.7-3.2-2.7-3.2h-3.9zm0 2.3v9.4h-2.6v-20.4h7c3.6 0 4.9 2.5 4.9 5.1 0 2.4-1.3 4.2-3.7 4.6v.1c2.3.4 3.2 1.2 3.3 5.3 0 .8.3 4 .7 5.3h-2.7c-.7-1.4-.6-4.1-.8-6.8-.2-2.5-2.2-2.6-3.1-2.6z" id=path9127 fill=none class=g6_1 stroke-width=.458><path id=path9129 class=g5_1 d="M1305.2 3098.7h2.5c3.6 0 5-1.3 5-6.1v-4.1c0-4.1-1.3-5.7-4-5.7h-3.5zm-2.6-18.1h6.3c2.6 0 4.5.9 5.5 3.1.8 1.7.9 5.8.9 6.4 0 4.4-.4 6.9-1.2 8.3-1.1 1.7-3.2 2.6-6.8 2.6h-4.7z" fill=#010101><path stroke=#010101 d="M1305.2 3098.7h2.5c3.6 0 5-1.3 5-6.1v-4.1c0-4.1-1.3-5.7-4-5.7h-3.5zm-2.6-18.1h6.3c2.6 0 4.5.9 5.5 3.1.8 1.7.9 5.8.9 6.4 0 4.4-.4 6.9-1.2 8.3-1.1 1.7-3.2 2.6-6.8 2.6h-4.7z" id=path9131 fill=none class=g6_1 stroke-width=.458><path id=path9133 class=g5_1 d="M1320.4 3080.6h2.6v13.1c0 4.4 1.3 5.6 3.8 5.6 2.4 0 3.8-1.2 3.8-5.6v-13.1h2.6v12.9c0 5.7-2.1 7.9-6.4 7.9-4.4 0-6.4-2.2-6.4-7.9z" fill=#010101><path stroke=#010101 d="M1320.4 3080.6h2.6v13.1c0 4.4 1.3 5.6 3.8 5.6 2.4 0 3.8-1.2 3.8-5.6v-13.1h2.6v12.9c0 5.7-2.1 7.9-6.4 7.9-4.4 0-6.4-2.2-6.4-7.9z" id=path9135 fill=none class=g6_1 stroke-width=.458><path id=path9137 class=g5_1 d="M1353 3080.6v20.4h-3.5l-8.1-17.7h-.1v17.7h-2.3v-20.4h3.7l7.9 17.5h.1v-17.5z" fill=#010101><path stroke=#010101 d="M1353 3080.6v20.4h-3.5l-8.1-17.7h-.1v17.7h-2.3v-20.4h3.7l7.9 17.5h.1v-17.5z" id=path9139 fill=none class=g6_1 stroke-width=.458><path id=path9141 class=g5_1 d="M1317.4 2374.8h-2.5v-20.4h4.2l5.2 17.1 5.3-17.1h4.3v20.4h-2.6v-18.2h-.1l-5.7 18.2h-2.5l-5.6-18.2z" fill=#010101><path stroke=#010101 d="M1317.4 2374.8h-2.5v-20.4h4.2l5.2 17.1 5.3-17.1h4.3v20.4h-2.6v-18.2h-.1l-5.7 18.2h-2.5l-5.6-18.2z" id=path9143 fill=none class=g6_1 stroke-width=.458><path id=path9145 class=g5_1 d="M1346.3 2365.1c0-2.4-1.1-3-2-3-1.8 0-3 .9-3 4.8 0 4.6.6 6.3 3 6.3.5 0 2.1-.6 2-3.2h2.5c.1 4.1-2.9 5.1-4.5 5.1-3.1 0-5.5-.9-5.5-7.2 0-4.2.5-7.7 5.5-7.7 2.8 0 4.5 1.7 4.4 4.9z" fill=#010101><path stroke=#010101 d="M1346.3 2365.1c0-2.4-1.1-3-2-3-1.8 0-3 .9-3 4.8 0 4.6.6 6.3 3 6.3.5 0 2.1-.6 2-3.2h2.5c.1 4.1-2.9 5.1-4.5 5.1-3.1 0-5.5-.9-5.5-7.2 0-4.2.5-7.7 5.5-7.7 2.8 0 4.5 1.7 4.4 4.9z" id=path9147 fill=none class=g6_1 stroke-width=.458><path id=path9149 class=g5_1 d="M1363.8 2359.8c0-2.4-1-3.7-3.6-3.7-.8 0-3.7.2-3.7 4.4v6.9c0 4.5 1.3 5.6 3.7 5.6 1.9 0 3.1-.5 3.7-.9v-6.1h-3.8v-2.2h6.4v9.9c-1.7.9-3.7 1.5-6.3 1.5-4.3 0-6.4-2.2-6.4-7.9v-6.7c0-4.1 2.1-6.7 6.4-6.7 4.4 0 6.5 1.6 6.4 5.9z" fill=#010101><path stroke=#010101 d="M1363.8 2359.8c0-2.4-1-3.7-3.6-3.7-.8 0-3.7.2-3.7 4.4v6.9c0 4.5 1.3 5.6 3.7 5.6 1.9 0 3.1-.5 3.7-.9v-6.1h-3.8v-2.2h6.4v9.9c-1.7.9-3.7 1.5-6.3 1.5-4.3 0-6.4-2.2-6.4-7.9v-6.7c0-4.1 2.1-6.7 6.4-6.7 4.4 0 6.5 1.6 6.4 5.9z" id=path9151 fill=none class=g6_1 stroke-width=.458><path id=path9153 class=g5_1 d="M1375.1 2374.8h-2.6v-20.4h2.6z" fill=#010101><path stroke=#010101 d="M1375.1 2374.8h-2.6v-20.4h2.6z" id=path9155 fill=none class=g6_1 stroke-width=.458><path id=path9157 class=g5_1 d="M1381.2 2374.8v-20.4h2.6v18.1h7.5v2.3z" fill=#010101><path stroke=#010101 d="M1381.2 2374.8v-20.4h2.6v18.1h7.5v2.3z" id=path9159 fill=none class=g6_1 stroke-width=.458><path id=path9161 class=g5_1 d="M1395.5 2374.8v-20.4h2.6v18.1h7.5v2.3z" fill=#010101><path stroke=#010101 d="M1395.5 2374.8v-20.4h2.6v18.1h7.5v2.3z" id=path9163 fill=none class=g6_1 stroke-width=.458><path id=path9165 class=g5_1 d="M1274.9 2439.4h2.9c1 0 3.6-.3 3.6-3.5 0-3.1-2.3-3.4-2.9-3.4h-3.6zm-2.6 11.3v-20.5h6.1c2.7 0 5.7 1 5.7 5.9 0 4.6-3.7 5.6-5.8 5.6h-3.4v9z" fill=#010101><path stroke=#010101 d="M1274.9 2439.4h2.9c1 0 3.6-.3 3.6-3.5 0-3.1-2.3-3.4-2.9-3.4h-3.6zm-2.6 11.3v-20.5h6.1c2.7 0 5.7 1 5.7 5.9 0 4.6-3.7 5.6-5.8 5.6h-3.4v9z" id=path9167 fill=none class=g6_1 stroke-width=.458><path id=path9169 class=g5_1 d="M1288.3 2450.7v-20.5h10.5v2.3h-7.9v6.6h7.3v2.2h-7.3v7.1h8.1v2.3z" fill=#010101><path stroke=#010101 d="M1288.3 2450.7v-20.5h10.5v2.3h-7.9v6.6h7.3v2.2h-7.3v7.1h8.1v2.3z" id=path9171 fill=none class=g6_1 stroke-width=.458><path id=path9173 class=g5_1 d="M1304.1 2450.7v-20.5h10.6v2.3h-8v6.6h7.4v2.2h-7.4v7.1h8.1v2.3z" fill=#010101><path stroke=#010101 d="M1304.1 2450.7v-20.5h10.6v2.3h-8v6.6h7.4v2.2h-7.4v7.1h8.1v2.3z" id=path9175 fill=none class=g6_1 stroke-width=.458><path id=path9177 class=g5_1 d="M1320 2450.7v-20.5h2.6v18.2h7.5v2.3z" fill=#010101><path stroke=#010101 d="M1320 2450.7v-20.5h2.6v18.2h7.5v2.3z" id=path9179 fill=none class=g6_1 stroke-width=.458><path id=path9181 class=g5_1 d="M1051.9 2512.1c0-2.4-1-3.7-3.6-3.7-.8 0-3.8.1-3.8 4.4v6.9c0 4.5 1.3 5.6 3.8 5.6 1.9 0 3.1-.5 3.6-.9v-6.1h-3.7v-2.3h6.4v9.9c-1.7 1-3.7 1.6-6.3 1.6-4.3 0-6.4-2.3-6.4-7.9v-6.7c0-4.1 2.1-6.7 6.4-6.7 4.4 0 6.5 1.6 6.3 5.9z" fill=#010101><path stroke=#010101 d="M1051.9 2512.1c0-2.4-1-3.7-3.6-3.7-.8 0-3.8.1-3.8 4.4v6.9c0 4.5 1.3 5.6 3.8 5.6 1.9 0 3.1-.5 3.6-.9v-6.1h-3.7v-2.3h6.4v9.9c-1.7 1-3.7 1.6-6.3 1.6-4.3 0-6.4-2.3-6.4-7.9v-6.7c0-4.1 2.1-6.7 6.4-6.7 4.4 0 6.5 1.6 6.3 5.9z" id=path9183 fill=none class=g6_1 stroke-width=.458><path id=path9185 class=g5_1 d="M1060.5 2506.6h2.6v13.1c0 4.5 1.3 5.6 3.8 5.6s3.8-1.1 3.8-5.6v-13.1h2.6v13c0 5.6-2.1 7.9-6.4 7.9s-6.4-2.3-6.4-7.9z" fill=#010101><path stroke=#010101 d="M1060.5 2506.6h2.6v13.1c0 4.5 1.3 5.6 3.8 5.6s3.8-1.1 3.8-5.6v-13.1h2.6v13c0 5.6-2.1 7.9-6.4 7.9s-6.4-2.3-6.4-7.9z" id=path9187 fill=none class=g6_1 stroke-width=.458><path id=path9189 class=g5_1 d="M1088.5 2506.6h2.7l-5.6 12.7v7.8h-2.6v-7.8l-5.5-12.7h2.9l4 9.9z" fill=#010101><path stroke=#010101 d="M1088.5 2506.6h2.7l-5.6 12.7v7.8h-2.6v-7.8l-5.5-12.7h2.9l4 9.9z" id=path9191 fill=none class=g6_1 stroke-width=.458><path id=path9193 class=g5_1 d="M1092.4 2515.4h6.3v2.2h-6.3z" fill=#010101><path stroke=#010101 d="M1092.4 2515.4h6.3v2.2h-6.3z" id=path9195 fill=none class=g6_1 stroke-width=.458><path id=path9197 class=g5_1 d="M1112.7 2512.3c0-1.2-.1-2.4-.6-3-.5-.7-1.8-.9-2.3-.9-2.1 0-3 1.3-3.1 1.6-.1.2-.6.7-.6 4.2v5.5c0 5 1.7 5.6 3.7 5.6.8 0 3.2-.3 3.2-4.3h2.7c.1 6.5-4.4 6.5-5.8 6.5-2.5 0-6.4-.2-6.4-8.1v-5.8c0-5.8 2.5-7.4 6.5-7.4 4.1 0 5.6 2.1 5.4 6.1z" fill=#010101><path stroke=#010101 d="M1112.7 2512.3c0-1.2-.1-2.4-.6-3-.5-.7-1.8-.9-2.3-.9-2.1 0-3 1.3-3.1 1.6-.1.2-.6.7-.6 4.2v5.5c0 5 1.7 5.6 3.7 5.6.8 0 3.2-.3 3.2-4.3h2.7c.1 6.5-4.4 6.5-5.8 6.5-2.5 0-6.4-.2-6.4-8.1v-5.8c0-5.8 2.5-7.4 6.5-7.4 4.1 0 5.6 2.1 5.4 6.1z" id=path9199 fill=none class=g6_1 stroke-width=.458><path id=path9201 class=g5_1 d="M1130.7 2519.7v-6.9c0-4.3-3-4.4-3.8-4.4s-3.8.1-3.8 4.4v6.9c0 4.5 1.3 5.6 3.8 5.6s3.8-1.1 3.8-5.6m-10.2-.1v-6.7c0-4.1 2.1-6.7 6.4-6.7s6.4 2.6 6.4 6.7v6.7c0 5.6-2.1 7.9-6.4 7.9s-6.4-2.3-6.4-7.9z" fill=#010101><path stroke=#010101 d="M1130.7 2519.7v-6.9c0-4.3-3-4.4-3.8-4.4s-3.8.1-3.8 4.4v6.9c0 4.5 1.3 5.6 3.8 5.6s3.8-1.1 3.8-5.6zm-10.2-.1v-6.7c0-4.1 2.1-6.7 6.4-6.7s6.4 2.6 6.4 6.7v6.7c0 5.6-2.1 7.9-6.4 7.9s-6.4-2.3-6.4-7.9z" id=path9203 fill=none class=g6_1 stroke-width=.458><path id=path9205 class=g5_1 d="M1153.2 2506.6v20.5h-3.6l-8.1-17.8v17.8h-2.4v-20.5h3.7l8 17.5v-17.5z" fill=#010101><path stroke=#010101 d="M1153.2 2506.6v20.5h-3.6l-8.1-17.8v17.8h-2.4v-20.5h3.7l8 17.5v-17.5z" id=path9207 fill=none class=g6_1 stroke-width=.458><path id=path9209 class=g5_1 d="M1168 2512.3c0-1.2 0-2.4-.6-3-.5-.7-1.7-.9-2.3-.9-2.1 0-3 1.3-3.1 1.6 0 .2-.6.7-.6 4.2v5.5c0 5 1.7 5.6 3.7 5.6.8 0 3.2-.3 3.2-4.3h2.7c.1 6.5-4.4 6.5-5.8 6.5-2.5 0-6.4-.2-6.4-8.1v-5.8c0-5.8 2.5-7.4 6.6-7.4 4 0 5.6 2.1 5.3 6.1z" fill=#010101><path stroke=#010101 d="M1168 2512.3c0-1.2 0-2.4-.6-3-.5-.7-1.7-.9-2.3-.9-2.1 0-3 1.3-3.1 1.6 0 .2-.6.7-.6 4.2v5.5c0 5 1.7 5.6 3.7 5.6.8 0 3.2-.3 3.2-4.3h2.7c.1 6.5-4.4 6.5-5.8 6.5-2.5 0-6.4-.2-6.4-8.1v-5.8c0-5.8 2.5-7.4 6.6-7.4 4 0 5.6 2.1 5.3 6.1z" id=path9211 fill=none class=g6_1 stroke-width=.458><path id=path9213 class=g5_1 d="M1186 2519.7v-6.9c0-4.3-3-4.4-3.8-4.4s-3.7.1-3.7 4.4v6.9c0 4.5 1.3 5.6 3.7 5.6 2.5 0 3.8-1.1 3.8-5.6m-10.2-.1v-6.7c0-4.1 2.1-6.7 6.4-6.7 4.4 0 6.4 2.6 6.4 6.7v6.7c0 5.6-2 7.9-6.4 7.9-4.3 0-6.4-2.3-6.4-7.9z" fill=#010101><path stroke=#010101 d="M1186 2519.7v-6.9c0-4.3-3-4.4-3.8-4.4s-3.7.1-3.7 4.4v6.9c0 4.5 1.3 5.6 3.7 5.6 2.5 0 3.8-1.1 3.8-5.6zm-10.2-.1v-6.7c0-4.1 2.1-6.7 6.4-6.7 4.4 0 6.4 2.6 6.4 6.7v6.7c0 5.6-2 7.9-6.4 7.9-4.3 0-6.4-2.3-6.4-7.9z" id=path9215 fill=none class=g6_1 stroke-width=.458><path id=path9217 class=g5_1 d="M1196.9 2515.4h3.9c1.8 0 2.7-1.6 2.7-3.4 0-1.5-.7-3.1-2.7-3.1h-3.9zm0 2.3v9.4h-2.6v-20.5h7c3.6 0 4.9 2.6 4.9 5.1 0 2.4-1.3 4.3-3.7 4.7 2.3.4 3.2 1.2 3.3 5.3 0 .9.3 4.1.7 5.4h-2.7c-.7-1.5-.6-4.1-.8-6.8-.2-2.5-2.2-2.6-3.1-2.6z" fill=#010101><path stroke=#010101 d="M1196.9 2515.4h3.9c1.8 0 2.7-1.6 2.7-3.4 0-1.5-.7-3.1-2.7-3.1h-3.9zm0 2.3v9.4h-2.6v-20.5h7c3.6 0 4.9 2.6 4.9 5.1 0 2.4-1.3 4.3-3.7 4.7 2.3.4 3.2 1.2 3.3 5.3 0 .9.3 4.1.7 5.4h-2.7c-.7-1.5-.6-4.1-.8-6.8-.2-2.5-2.2-2.6-3.1-2.6z" id=path9219 fill=none class=g6_1 stroke-width=.458><path id=path9221 class=g5_1 d="M1214.4 2524.8h2.5c3.6 0 4.9-1.4 4.9-6.1v-4.2c0-4.1-1.2-5.6-4-5.6h-3.4zm-2.6-18.2h6.3c2.6 0 4.5 1 5.5 3.1.8 1.8.9 5.8.9 6.5 0 4.3-.4 6.9-1.3 8.2-1.1 1.8-3.1 2.7-6.7 2.7h-4.7z" fill=#010101><path stroke=#010101 d="M1214.4 2524.8h2.5c3.6 0 4.9-1.4 4.9-6.1v-4.2c0-4.1-1.2-5.6-4-5.6h-3.4zm-2.6-18.2h6.3c2.6 0 4.5 1 5.5 3.1.8 1.8.9 5.8.9 6.5 0 4.3-.4 6.9-1.3 8.2-1.1 1.8-3.1 2.7-6.7 2.7h-4.7z" id=path9223 fill=none class=g6_1 stroke-width=.458><path id=path9225 class=g5_1 d="M1232.6 2527.1h-2.6v-20.5h2.6z" fill=#010101><path stroke=#010101 d="M1232.6 2527.1h-2.6v-20.5h2.6z" id=path9227 fill=none class=g6_1 stroke-width=.458><path id=path9229 class=g5_1 d="M1245.4 2509h-.1l-3.2 10.9h6.6zm-1.6-2.4h3.3l6.7 20.5h-3l-1.4-4.9h-7.9l-1.6 4.9h-2.6z" fill=#010101><path stroke=#010101 d="M1245.4 2509h-.1l-3.2 10.9h6.6zm-1.6-2.4h3.3l6.7 20.5h-3l-1.4-4.9h-7.9l-1.6 4.9h-2.6z" id=path9231 fill=none class=g6_1 stroke-width=.458><path id=path9233 class=g5_1 d="M976.1 2456.7c0-1.1-.1-2.3-.6-2.9-.5-.7-1.7-.9-2.3-.9-2.1 0-3 1.3-3.1 1.6-.1.2-.6.7-.6 4.2v5.5c0 5 1.7 5.6 3.7 5.6.8 0 3.2-.3 3.2-4.3h2.7c.1 6.4-4.4 6.4-5.8 6.4-2.5 0-6.4-.1-6.4-8v-5.8c0-5.8 2.5-7.4 6.5-7.4 4.1 0 5.6 2.1 5.4 6z" fill=#010101><path stroke=#010101 d="M976.1 2456.7c0-1.1-.1-2.3-.6-2.9-.5-.7-1.7-.9-2.3-.9-2.1 0-3 1.3-3.1 1.6-.1.2-.6.7-.6 4.2v5.5c0 5 1.7 5.6 3.7 5.6.8 0 3.2-.3 3.2-4.3h2.7c.1 6.4-4.4 6.4-5.8 6.4-2.5 0-6.4-.1-6.4-8v-5.8c0-5.8 2.5-7.4 6.5-7.4 4.1 0 5.6 2.1 5.4 6z" id=path9235 fill=none class=g6_1 stroke-width=.458><path id=path9237 class=g5_1 d="M994.1 2464.2v-6.9c0-4.3-3-4.5-3.8-4.5s-3.8.2-3.8 4.5v6.9c0 4.4 1.4 5.6 3.8 5.6 2.5 0 3.8-1.2 3.8-5.6m-3.8-17.9-1.8 2.6h-2.3l2.8-4h2.6l2.9 4h-2.3zm-6.4 17.8v-6.8c0-4 2.1-6.6 6.4-6.6s6.4 2.6 6.4 6.6v6.8c0 5.6-2.1 7.8-6.4 7.8s-6.4-2.2-6.4-7.8z" fill=#010101><path stroke=#010101 d="M994.1 2464.2v-6.9c0-4.3-3-4.5-3.8-4.5s-3.8.2-3.8 4.5v6.9c0 4.4 1.4 5.6 3.8 5.6 2.5 0 3.8-1.2 3.8-5.6zm-3.8-17.9-1.8 2.6h-2.3l2.8-4h2.6l2.9 4h-2.3zm-6.4 17.8v-6.8c0-4 2.1-6.6 6.4-6.6s6.4 2.6 6.4 6.6v6.8c0 5.6-2.1 7.8-6.4 7.8s-6.4-2.2-6.4-7.8z" id=path9239 fill=none class=g6_1 stroke-width=.458><path id=path9241 class=g5_1 d="M1013.9 2451.1v2.3h-5.4v18.1h-2.6v-18.1h-5.4v-2.3z" fill=#010101><path stroke=#010101 d="M1013.9 2451.1v2.3h-5.4v18.1h-2.6v-18.1h-5.4v-2.3z" id=path9243 fill=none class=g6_1 stroke-width=.458><path id=path9245 class=g5_1 d="M1017.7 2471.5v-20.4h10.5v2.3h-7.9v6.5h7.4v2.3h-7.4v7.1h8.1v2.2z" fill=#010101><path stroke=#010101 d="M1017.7 2471.5v-20.4h10.5v2.3h-7.9v6.5h7.4v2.3h-7.4v7.1h8.1v2.2z" id=path9247 fill=none class=g6_1 stroke-width=.458><path id=path9249 class=g5_1 d="M1032.3 2462.7h6.2v2.2h-6.2z" fill=#010101><path stroke=#010101 d="M1032.3 2462.7h6.2v2.2h-6.2z" id=path9251 fill=none class=g6_1 stroke-width=.458><path id=path9253 class=g5_1 d="M1046.2 2469.3h2.5c3.6 0 4.9-1.4 4.9-6.2v-4.1c0-4.1-1.3-5.6-4-5.6h-3.4zm-2.6-18.2h6.3c2.6 0 4.4.9 5.5 3.1.8 1.7.9 5.8.9 6.5 0 4.3-.4 6.8-1.3 8.2-1.1 1.7-3.1 2.6-6.7 2.6h-4.7z" fill=#010101><path stroke=#010101 d="M1046.2 2469.3h2.5c3.6 0 4.9-1.4 4.9-6.2v-4.1c0-4.1-1.3-5.6-4-5.6h-3.4zm-2.6-18.2h6.3c2.6 0 4.4.9 5.5 3.1.8 1.7.9 5.8.9 6.5 0 4.3-.4 6.8-1.3 8.2-1.1 1.7-3.1 2.6-6.7 2.6h-4.7z" id=path9255 fill=none class=g6_1 stroke-width=.458><path id=path9257 class=g5_1 d="M1062 2471.5v-20.4h10.5v2.3h-7.9v6.5h7.3v2.3h-7.3v7.1h8.1v2.2z" fill=#010101><path stroke=#010101 d="M1062 2471.5v-20.4h10.5v2.3h-7.9v6.5h7.3v2.3h-7.3v7.1h8.1v2.2z" id=path9259 fill=none class=g6_1 stroke-width=.458><path id=path9261 class=g5_1 d="M1079.3 2465.4v.6c0 2.8 1.7 3.7 3.4 3.7 2 0 3.6-.9 3.6-3.3 0-4.6-9.1-4-9.1-10.2 0-3.6 2.5-5.5 6-5.5 3.7 0 5.8 1.8 5.6 5.9h-2.7c0-2.2-.7-3.7-3.1-3.7-1.6 0-3.2.8-3.2 3 0 4.5 9.2 3.9 9.2 10.4 0 4.3-3 5.6-6.3 5.6-6.1.1-6.1-4.5-6-6.5z" fill=#010101><path stroke=#010101 d="M1079.3 2465.4v.6c0 2.8 1.7 3.7 3.4 3.7 2 0 3.6-.9 3.6-3.3 0-4.6-9.1-4-9.1-10.2 0-3.6 2.5-5.5 6-5.5 3.7 0 5.8 1.8 5.6 5.9h-2.7c0-2.2-.7-3.7-3.1-3.7-1.6 0-3.2.8-3.2 3 0 4.5 9.2 3.9 9.2 10.4 0 4.3-3 5.6-6.3 5.6-6.1.1-6.1-4.5-6-6.5z" id=path9263 fill=none class=g6_1 stroke-width=.458><path id=path9265 class=g5_1 d="M1093.4 2462.7h6.2v2.2h-6.2z" fill=#010101><path stroke=#010101 d="M1093.4 2462.7h6.2v2.2h-6.2z" id=path9267 fill=none class=g6_1 stroke-width=.458><path id=path9269 class=g5_1 d="M1118.8 2451.1v20.4h-3.5l-8.1-17.7h-.1v17.7h-2.3v-20.4h3.7l8 17.5v-17.5z" fill=#010101><path stroke=#010101 d="M1118.8 2451.1v20.4h-3.5l-8.1-17.7h-.1v17.7h-2.3v-20.4h3.7l8 17.5v-17.5z" id=path9271 fill=none class=g6_1 stroke-width=.458><path id=path9273 class=g5_1 d="M1124.7 2471.5v-20.4h10.5v2.3h-7.9v6.5h7.4v2.3h-7.4v7.1h8.1v2.2z" fill=#010101><path stroke=#010101 d="M1124.7 2471.5v-20.4h10.5v2.3h-7.9v6.5h7.4v2.3h-7.4v7.1h8.1v2.2z" id=path9275 fill=none class=g6_1 stroke-width=.458><path id=path9277 class=g5_1 d="M1142.9 2471.5h-2.6v-20.4h2.6z" fill=#010101><path stroke=#010101 d="M1142.9 2471.5h-2.6v-20.4h2.6z" id=path9279 fill=none class=g6_1 stroke-width=.458><path id=path9281 class=g5_1 d="M1158.8 2456.6c0-2.5-1-3.8-3.6-3.8-.9 0-3.8.2-3.8 4.5v6.9c0 4.4 1.3 5.6 3.8 5.6 1.8 0 3.1-.5 3.6-.9v-6.2h-3.8v-2.2h6.4v9.9c-1.7.9-3.6 1.5-6.2 1.5-4.4 0-6.5-2.2-6.5-7.9v-6.7c0-4 2.1-6.6 6.5-6.6s6.5 1.6 6.3 5.9z" fill=#010101><path stroke=#010101 d="M1158.8 2456.6c0-2.5-1-3.8-3.6-3.8-.9 0-3.8.2-3.8 4.5v6.9c0 4.4 1.3 5.6 3.8 5.6 1.8 0 3.1-.5 3.6-.9v-6.2h-3.8v-2.2h6.4v9.9c-1.7.9-3.6 1.5-6.2 1.5-4.4 0-6.5-2.2-6.5-7.9v-6.7c0-4 2.1-6.6 6.5-6.6s6.5 1.6 6.3 5.9z" id=path9283 fill=none class=g6_1 stroke-width=.458><path id=path9285 class=g5_1 d="M1167.4 2471.5v-20.4h10.5v2.3h-7.9v6.5h7.4v2.3h-7.4v7.1h8.1v2.2z" fill=#010101><path stroke=#010101 d="M1167.4 2471.5v-20.4h10.5v2.3h-7.9v6.5h7.4v2.3h-7.4v7.1h8.1v2.2z" id=path9287 fill=none class=g6_1 stroke-width=.458><path id=path9289 class=g5_1 d="M1184.7 2465.4v.6c0 2.8 1.8 3.7 3.4 3.7 2.1 0 3.7-.9 3.7-3.3 0-4.6-9.2-4-9.2-10.2 0-3.6 2.6-5.5 6-5.5 3.8 0 5.8 1.8 5.7 5.9h-2.7c0-2.2-.7-3.7-3.2-3.7-1.5 0-3.1.8-3.1 3 0 4.5 9.1 3.9 9.1 10.4 0 4.3-2.9 5.6-6.3 5.6-6 .1-6-4.5-6-6.5z" fill=#010101><path stroke=#010101 d="M1184.7 2465.4v.6c0 2.8 1.8 3.7 3.4 3.7 2.1 0 3.7-.9 3.7-3.3 0-4.6-9.2-4-9.2-10.2 0-3.6 2.6-5.5 6-5.5 3.8 0 5.8 1.8 5.7 5.9h-2.7c0-2.2-.7-3.7-3.2-3.7-1.5 0-3.1.8-3.1 3 0 4.5 9.1 3.9 9.1 10.4 0 4.3-2.9 5.6-6.3 5.6-6 .1-6-4.5-6-6.5z" id=path9291 fill=none class=g6_1 stroke-width=.458><path id=path9293 class=g5_1 d="M787 2319.6h2.6v13c0 4.5 1.4 5.6 3.9 5.6 2.4 0 3.8-1.1 3.8-5.6v-13h2.6v12.9c0 5.7-2.1 7.9-6.4 7.9-4.4 0-6.5-2.2-6.5-7.9z" fill=#010101><path stroke=#010101 d="M787 2319.6h2.6v13c0 4.5 1.4 5.6 3.9 5.6 2.4 0 3.8-1.1 3.8-5.6v-13h2.6v12.9c0 5.7-2.1 7.9-6.4 7.9-4.4 0-6.5-2.2-6.5-7.9z" id=path9295 fill=none class=g6_1 stroke-width=.458><path id=path9297 class=g5_1 d="M819.7 2319.6v20.4h-3.6l-8-17.7h-.1v17.7h-2.3v-20.4h3.7l7.9 17.4h.1v-17.4z" fill=#010101><path stroke=#010101 d="M819.7 2319.6v20.4h-3.6l-8-17.7h-.1v17.7h-2.3v-20.4h3.7l7.9 17.4h.1v-17.4z" id=path9299 fill=none class=g6_1 stroke-width=.458><path id=path9301 class=g5_1 d="M828.5 2340h-2.6v-20.4h2.6z" fill=#010101><path stroke=#010101 d="M828.5 2340h-2.6v-20.4h2.6z" id=path9303 fill=none class=g6_1 stroke-width=.458><path id=path9305 class=g5_1 d="M842.2 2340h-3.1l-5.9-20.4h2.8l4.7 17.9h.1l4.7-17.9h2.7z" fill=#010101><path stroke=#010101 d="M842.2 2340h-3.1l-5.9-20.4h2.8l4.7 17.9h.1l4.7-17.9h2.7z" id=path9307 fill=none class=g6_1 stroke-width=.458><path id=path9309 class=g5_1 d="M852.6 2340v-20.4h10.5v2.2h-7.9v6.6h7.3v2.2h-7.3v7.1h8.1v2.3z" fill=#010101><path stroke=#010101 d="M852.6 2340v-20.4h10.5v2.2h-7.9v6.6h7.3v2.2h-7.3v7.1h8.1v2.3z" id=path9311 fill=none class=g6_1 stroke-width=.458><path id=path9313 class=g5_1 d="M871 2328.3h3.9c1.8 0 2.7-1.6 2.7-3.4 0-1.4-.7-3.1-2.7-3.1H871zm0 2.3v9.4h-2.6v-20.4h7c3.6 0 4.9 2.5 4.9 5.1 0 2.4-1.3 4.2-3.7 4.6v.1c2.3.3 3.2 1.1 3.3 5.2 0 .9.3 4.1.7 5.4h-2.7c-.7-1.4-.6-4.1-.8-6.8-.2-2.5-2.2-2.6-3.1-2.6z" fill=#010101><path stroke=#010101 d="M871 2328.3h3.9c1.8 0 2.7-1.6 2.7-3.4 0-1.4-.7-3.1-2.7-3.1H871zm0 2.3v9.4h-2.6v-20.4h7c3.6 0 4.9 2.5 4.9 5.1 0 2.4-1.3 4.2-3.7 4.6v.1c2.3.3 3.2 1.1 3.3 5.2 0 .9.3 4.1.7 5.4h-2.7c-.7-1.4-.6-4.1-.8-6.8-.2-2.5-2.2-2.6-3.1-2.6z" id=path9315 fill=none class=g6_1 stroke-width=.458><path id=path9317 class=g5_1 d="M887.6 2333.9v.6c0 2.8 1.7 3.6 3.4 3.6 2.1 0 3.7-.8 3.7-3.3 0-4.5-9.2-4-9.2-10.1 0-3.6 2.6-5.6 6-5.6 3.7 0 5.8 1.8 5.6 6h-2.7c.1-2.2-.6-3.7-3.1-3.7-1.6 0-3.2.8-3.2 3 0 4.5 9.2 3.8 9.2 10.3 0 4.3-3 5.7-6.3 5.7-6.1.1-6.1-4.5-6-6.5z" fill=#010101><path stroke=#010101 d="M887.6 2333.9v.6c0 2.8 1.7 3.6 3.4 3.6 2.1 0 3.7-.8 3.7-3.3 0-4.5-9.2-4-9.2-10.1 0-3.6 2.6-5.6 6-5.6 3.7 0 5.8 1.8 5.6 6h-2.7c.1-2.2-.6-3.7-3.1-3.7-1.6 0-3.2.8-3.2 3 0 4.5 9.2 3.8 9.2 10.3 0 4.3-3 5.7-6.3 5.7-6.1.1-6.1-4.5-6-6.5z" id=path9319 fill=none class=g6_1 stroke-width=.458><path id=path9321 class=g5_1 d="M905.4 2340h-2.6v-20.4h2.6z" fill=#010101><path stroke=#010101 d="M905.4 2340h-2.6v-20.4h2.6z" id=path9323 fill=none class=g6_1 stroke-width=.458><path id=path9325 class=g5_1 d="M923.5 2319.6v2.2h-5.4v18.2h-2.6v-18.2h-5.4v-2.2z" fill=#010101><path stroke=#010101 d="M923.5 2319.6v2.2h-5.4v18.2h-2.6v-18.2h-5.4v-2.2z" id=path9327 fill=none class=g6_1 stroke-width=.458><path id=path9329 class=g5_1 d="m936 2313.4-3.7 4h-1.9l2.5-4zm-8.1 26.6v-20.4h10.5v2.2h-7.9v6.6h7.3v2.2h-7.3v7.1h8.1v2.3z" fill=#010101><path stroke=#010101 d="m936 2313.4-3.7 4h-1.9l2.5-4zm-8.1 26.6v-20.4h10.5v2.2h-7.9v6.6h7.3v2.2h-7.3v7.1h8.1v2.3z" id=path9331 fill=none class=g6_1 stroke-width=.458><path id=path9333 class=g5_1 d="M942.7 2328.4h6.3v2.1h-6.3z" fill=#010101><path stroke=#010101 d="M942.7 2328.4h6.3v2.1h-6.3z" id=path9335 fill=none class=g6_1 stroke-width=.458><path id=path9337 class=g5_1 d="M767.4 2371h2.4c3.7 0 5-1.3 5-6.1v-4.1c0-4.1-1.3-5.7-4-5.7h-3.4zm-2.6-18.1h6.3c2.6 0 4.4.9 5.5 3.1.8 1.7.9 5.8.9 6.4 0 4.4-.4 6.9-1.3 8.3-1.1 1.7-3.2 2.6-6.7 2.6h-4.7z" fill=#010101><path stroke=#010101 d="M767.4 2371h2.4c3.7 0 5-1.3 5-6.1v-4.1c0-4.1-1.3-5.7-4-5.7h-3.4zm-2.6-18.1h6.3c2.6 0 4.4.9 5.5 3.1.8 1.7.9 5.8.9 6.4 0 4.4-.4 6.9-1.3 8.3-1.1 1.7-3.2 2.6-6.7 2.6h-4.7z" id=path9339 fill=none class=g6_1 stroke-width=.458><path id=path9341 class=g5_1 d="M782.9 2373.3v-20.4h10.5v2.2h-7.9v6.6h7.3v2.3h-7.3v7h8.1v2.3z" fill=#010101><path stroke=#010101 d="M782.9 2373.3v-20.4h10.5v2.2h-7.9v6.6h7.3v2.3h-7.3v7h8.1v2.3z" id=path9343 fill=none class=g6_1 stroke-width=.458><path id=path9345 class=g5_1 d="M797.4 2361.7h6.3v2.1h-6.3z" fill=#010101><path stroke=#010101 d="M797.4 2361.7h6.3v2.1h-6.3z" id=path9347 fill=none class=g6_1 stroke-width=.458><path id=path9349 class=g5_1 d="M811.2 2373.3h-2.5v-20.4h4.3l5.1 17.1h.1l5.2-17.1h4.3v20.4h-2.6v-18.2h-.1l-5.7 18.2h-2.5l-5.6-18.2z" fill=#010101><path stroke=#010101 d="M811.2 2373.3h-2.5v-20.4h4.3l5.1 17.1h.1l5.2-17.1h4.3v20.4h-2.6v-18.2h-.1l-5.7 18.2h-2.5l-5.6-18.2z" id=path9351 fill=none class=g6_1 stroke-width=.458><path id=path9353 class=g5_1 d="M843.5 2365.9v-6.9c0-4.2-2.9-4.4-3.7-4.4-.9 0-3.8.2-3.8 4.4v6.9c0 4.5 1.3 5.6 3.8 5.6 2.4 0 3.7-1.1 3.7-5.6m-10.2-.1v-6.7c0-4.1 2.1-6.7 6.5-6.7 4.3 0 6.4 2.6 6.4 6.7v6.7c0 5.7-2.1 7.9-6.4 7.9-4.4 0-6.5-2.2-6.5-7.9z" fill=#010101><path stroke=#010101 d="M843.5 2365.9v-6.9c0-4.2-2.9-4.4-3.7-4.4-.9 0-3.8.2-3.8 4.4v6.9c0 4.5 1.3 5.6 3.8 5.6 2.4 0 3.7-1.1 3.7-5.6zm-10.2-.1v-6.7c0-4.1 2.1-6.7 6.5-6.7 4.3 0 6.4 2.6 6.4 6.7v6.7c0 5.7-2.1 7.9-6.4 7.9-4.4 0-6.5-2.2-6.5-7.9z" id=path9355 fill=none class=g6_1 stroke-width=.458><path id=path9357 class=g5_1 d="M866 2352.9v20.4h-3.6l-8-17.7h-.1v17.7H852v-20.4h3.7l7.9 17.4h.1v-17.4z" fill=#010101><path stroke=#010101 d="M866 2352.9v20.4h-3.6l-8-17.7h-.1v17.7H852v-20.4h3.7l7.9 17.4h.1v-17.4z" id=path9359 fill=none class=g6_1 stroke-width=.458><path id=path9361 class=g5_1 d="M883.3 2352.9v2.2H878v18.2h-2.6v-18.2H870v-2.2z" fill=#010101><path stroke=#010101 d="M883.3 2352.9v2.2H878v18.2h-2.6v-18.2H870v-2.2z" id=path9363 fill=none class=g6_1 stroke-width=.458><path id=path9365 class=g5_1 d="M890.6 2361.6h3.9c1.8 0 2.7-1.6 2.7-3.4 0-1.4-.7-3.1-2.7-3.1h-3.9zm0 2.3v9.4H888v-20.4h7c3.6 0 4.9 2.5 4.9 5.1 0 2.4-1.3 4.2-3.7 4.6v.1c2.3.3 3.2 1.1 3.3 5.2 0 .9.3 4.1.7 5.4h-2.7c-.7-1.4-.6-4.1-.8-6.8-.2-2.5-2.2-2.6-3.1-2.6z" fill=#010101><path stroke=#010101 d="M890.6 2361.6h3.9c1.8 0 2.7-1.6 2.7-3.4 0-1.4-.7-3.1-2.7-3.1h-3.9zm0 2.3v9.4H888v-20.4h7c3.6 0 4.9 2.5 4.9 5.1 0 2.4-1.3 4.2-3.7 4.6v.1c2.3.3 3.2 1.1 3.3 5.2 0 .9.3 4.1.7 5.4h-2.7c-.7-1.4-.6-4.1-.8-6.8-.2-2.5-2.2-2.6-3.1-2.6z" id=path9367 fill=none class=g6_1 stroke-width=.458><path id=path9369 class=g5_1 d="m913.6 2346.7-3.7 4H908l2.5-4zm-8.2 26.6v-20.4H916v2.2h-7.9v6.6h7.3v2.3h-7.3v7h8v2.3z" fill=#010101><path stroke=#010101 d="m913.6 2346.7-3.7 4H908l2.5-4zm-8.2 26.6v-20.4H916v2.2h-7.9v6.6h7.3v2.3h-7.3v7h8v2.3z" id=path9371 fill=none class=g6_1 stroke-width=.458><path id=path9373 class=g5_1 d="M928.1 2355.3h-.1l-3.2 10.9h6.5zm-1.6-2.4h3.3l6.6 20.4h-2.9l-1.4-4.9h-7.9l-1.6 4.9H920z" fill=#010101><path stroke=#010101 d="M928.1 2355.3h-.1l-3.2 10.9h6.5zm-1.6-2.4h3.3l6.6 20.4h-2.9l-1.4-4.9h-7.9l-1.6 4.9H920z" id=path9375 fill=none class=g6_1 stroke-width=.458><path id=path9377 class=g5_1 d="M940.3 2373.3v-20.4h2.6v18.1h7.5v2.3z" fill=#010101><path stroke=#010101 d="M940.3 2373.3v-20.4h2.6v18.1h7.5v2.3z" id=path9379 fill=none class=g6_1 stroke-width=.458><path id=path9381 class=g5_1 d="m916.1 2220.2-3.7 4h-1.9l2.5-4zm-8.1 26.6v-20.4h10.5v2.2h-7.9v6.6h7.3v2.3h-7.3v7h8.1v2.3z" fill=#010101><path stroke=#010101 d="m916.1 2220.2-3.7 4h-1.9l2.5-4zm-8.1 26.6v-20.4h10.5v2.2h-7.9v6.6h7.3v2.3h-7.3v7h8.1v2.3z" id=path9383 fill=none class=g6_1 stroke-width=.458><path id=path9385 class=g5_1 d="M926.8 2244.5h2.4c3.7 0 5-1.3 5-6.1v-4.1c0-4.1-1.3-5.7-4-5.7h-3.4zm-2.6-18.1h6.3c2.6 0 4.4.9 5.4 3.1.9 1.7.9 5.8.9 6.4 0 4.4-.3 6.9-1.2 8.3-1.1 1.7-3.2 2.6-6.7 2.6h-4.7z" fill=#010101><path stroke=#010101 d="M926.8 2244.5h2.4c3.7 0 5-1.3 5-6.1v-4.1c0-4.1-1.3-5.7-4-5.7h-3.4zm-2.6-18.1h6.3c2.6 0 4.4.9 5.4 3.1.9 1.7.9 5.8.9 6.4 0 4.4-.3 6.9-1.2 8.3-1.1 1.7-3.2 2.6-6.7 2.6h-4.7z" id=path9387 fill=none class=g6_1 stroke-width=.458><path id=path9389 class=g5_1 d="M952.4 2239.4v-6.9c0-4.2-3-4.4-3.8-4.4s-3.8.2-3.8 4.4v6.9c0 4.5 1.3 5.7 3.8 5.7s3.8-1.2 3.8-5.7m-10.2-.1v-6.7c0-4.1 2.1-6.7 6.4-6.7s6.4 2.6 6.4 6.7v6.7c0 5.7-2.1 7.9-6.4 7.9s-6.4-2.2-6.4-7.9z" fill=#010101><path stroke=#010101 d="M952.4 2239.4v-6.9c0-4.2-3-4.4-3.8-4.4s-3.8.2-3.8 4.4v6.9c0 4.5 1.3 5.7 3.8 5.7s3.8-1.2 3.8-5.7zm-10.2-.1v-6.7c0-4.1 2.1-6.7 6.4-6.7s6.4 2.6 6.4 6.7v6.7c0 5.7-2.1 7.9-6.4 7.9s-6.4-2.2-6.4-7.9z" id=path9391 fill=none class=g6_1 stroke-width=.458><path id=path9393 class=g5_1 d="M960.6 2226.4h2.6v13c0 4.5 1.4 5.7 3.8 5.7 2.5 0 3.8-1.2 3.8-5.7v-13h2.7v12.9c0 5.7-2.1 7.9-6.5 7.9-4.3 0-6.4-2.2-6.4-7.9z" fill=#010101><path stroke=#010101 d="M960.6 2226.4h2.6v13c0 4.5 1.4 5.7 3.8 5.7 2.5 0 3.8-1.2 3.8-5.7v-13h2.7v12.9c0 5.7-2.1 7.9-6.5 7.9-4.3 0-6.4-2.2-6.4-7.9z" id=path9395 fill=none class=g6_1 stroke-width=.458><path id=path9397 class=g5_1 d="m985 2228.8-3.2 10.9h6.5zm-1.6-2.4h3.4l6.6 20.4h-2.9l-1.5-4.9h-7.9l-1.5 4.9H977z" fill=#010101><path stroke=#010101 d="m985 2228.8-3.2 10.9h6.5zm-1.6-2.4h3.4l6.6 20.4h-2.9l-1.5-4.9h-7.9l-1.5 4.9H977z" id=path9399 fill=none class=g6_1 stroke-width=.458><path id=path9401 class=g5_1 d="M999.8 2235.1h3.9c1.9 0 2.8-1.6 2.8-3.4 0-1.4-.7-3.1-2.8-3.1h-3.9zm0 2.3v9.4h-2.6v-20.4h7.1c3.6 0 4.8 2.5 4.8 5.1 0 2.4-1.3 4.2-3.7 4.6v.1c2.4.4 3.2 1.2 3.4 5.3 0 .8.3 4 .7 5.3h-2.8c-.7-1.4-.5-4.1-.7-6.8-.2-2.5-2.3-2.6-3.1-2.6z" fill=#010101><path stroke=#010101 d="M999.8 2235.1h3.9c1.9 0 2.8-1.6 2.8-3.4 0-1.4-.7-3.1-2.8-3.1h-3.9zm0 2.3v9.4h-2.6v-20.4h7.1c3.6 0 4.8 2.5 4.8 5.1 0 2.4-1.3 4.2-3.7 4.6v.1c2.4.4 3.2 1.2 3.4 5.3 0 .8.3 4 .7 5.3h-2.8c-.7-1.4-.5-4.1-.7-6.8-.2-2.5-2.3-2.6-3.1-2.6z" id=path9403 fill=none class=g6_1 stroke-width=.458><path id=path9405 class=g5_1 d="M1017.1 2244.5h2.4c3.7 0 5-1.3 5-6.1v-4.1c0-4.1-1.3-5.7-4-5.7h-3.4zm-2.6-18.1h6.3c2.6 0 4.4.9 5.4 3.1.9 1.7 1 5.8 1 6.4 0 4.4-.4 6.9-1.3 8.3-1.1 1.7-3.2 2.6-6.7 2.6h-4.7z" fill=#010101><path stroke=#010101 d="M1017.1 2244.5h2.4c3.7 0 5-1.3 5-6.1v-4.1c0-4.1-1.3-5.7-4-5.7h-3.4zm-2.6-18.1h6.3c2.6 0 4.4.9 5.4 3.1.9 1.7 1 5.8 1 6.4 0 4.4-.4 6.9-1.3 8.3-1.1 1.7-3.2 2.6-6.7 2.6h-4.7z" id=path9407 fill=none class=g6_1 stroke-width=.458><path id=path9409 class=g5_1 d="M1032.1 2235.2h6.3v2.2h-6.3z" fill=#010101><path stroke=#010101 d="M1032.1 2235.2h6.3v2.2h-6.3z" id=path9411 fill=none class=g6_1 stroke-width=.458><path id=path9413 class=g5_1 d="M891.2 2280.1h-2.4v-20.4h4.2l5.2 17.1 5.2-17.1h4.3v20.4h-2.6v-18.2l-5.7 18.2h-2.5l-5.6-18.2h-.1z" fill=#010101><path stroke=#010101 d="M891.2 2280.1h-2.4v-20.4h4.2l5.2 17.1 5.2-17.1h4.3v20.4h-2.6v-18.2l-5.7 18.2h-2.5l-5.6-18.2h-.1z" id=path9415 fill=none class=g6_1 stroke-width=.458><path id=path9417 class=g5_1 d="M923.6 2272.8v-7c0-4.2-3-4.4-3.8-4.4s-3.7.2-3.7 4.4v7c0 4.4 1.3 5.6 3.7 5.6 2.5 0 3.8-1.2 3.8-5.6m-10.2-.2v-6.7c0-4 2.1-6.6 6.4-6.6 4.4 0 6.4 2.6 6.4 6.6v6.7c0 5.7-2 7.9-6.4 7.9-4.3 0-6.4-2.2-6.4-7.9z" fill=#010101><path stroke=#010101 d="M923.6 2272.8v-7c0-4.2-3-4.4-3.8-4.4s-3.7.2-3.7 4.4v7c0 4.4 1.3 5.6 3.7 5.6 2.5 0 3.8-1.2 3.8-5.6zm-10.2-.2v-6.7c0-4 2.1-6.6 6.4-6.6 4.4 0 6.4 2.6 6.4 6.6v6.7c0 5.7-2 7.9-6.4 7.9-4.3 0-6.4-2.2-6.4-7.9z" id=path9419 fill=none class=g6_1 stroke-width=.458><path id=path9421 class=g5_1 d="M946.1 2259.7v20.4h-3.6l-8.1-17.7v17.7h-2.3v-20.4h3.6l8 17.5v-17.5z" fill=#010101><path stroke=#010101 d="M946.1 2259.7v20.4h-3.6l-8.1-17.7v17.7h-2.3v-20.4h3.6l8 17.5v-17.5z" id=path9423 fill=none class=g6_1 stroke-width=.458><path id=path9425 class=g5_1 d="M964 2259.7v2.2h-5.4v18.2H956v-18.2h-5.4v-2.2z" fill=#010101><path stroke=#010101 d="M964 2259.7v2.2h-5.4v18.2H956v-18.2h-5.4v-2.2z" id=path9427 fill=none class=g6_1 stroke-width=.458><path id=path9429 class=g5_1 d="M971.3 2268.8h2.9c1 0 3.6-.2 3.6-3.4 0-3.1-2.3-3.5-2.9-3.5h-3.6zm-2.6 11.3v-20.4h6c2.8 0 5.7 1 5.7 5.8 0 4.6-3.6 5.6-5.7 5.6h-3.4v9z" fill=#010101><path stroke=#010101 d="M971.3 2268.8h2.9c1 0 3.6-.2 3.6-3.4 0-3.1-2.3-3.5-2.9-3.5h-3.6zm-2.6 11.3v-20.4h6c2.8 0 5.7 1 5.7 5.8 0 4.6-3.6 5.6-5.7 5.6h-3.4v9z" id=path9431 fill=none class=g6_1 stroke-width=.458><path id=path9433 class=g5_1 d="M985.2 2280.1v-20.4h10.6v2.2h-8v6.6h7.4v2.3h-7.4v7h8.1v2.3z" fill=#010101><path stroke=#010101 d="M985.2 2280.1v-20.4h10.6v2.2h-8v6.6h7.4v2.3h-7.4v7h8.1v2.3z" id=path9435 fill=none class=g6_1 stroke-width=.458><path id=path9437 class=g5_1 d="M1012.8 2259.7v2.2h-5.4v18.2h-2.6v-18.2h-5.3v-2.2z" fill=#010101><path stroke=#010101 d="M1012.8 2259.7v2.2h-5.4v18.2h-2.6v-18.2h-5.3v-2.2z" id=path9439 fill=none class=g6_1 stroke-width=.458><path id=path9441 class=g5_1 d="M1019.9 2280.1h-2.6v-20.4h2.6z" fill=#010101><path stroke=#010101 d="M1019.9 2280.1h-2.6v-20.4h2.6z" id=path9443 fill=none class=g6_1 stroke-width=.458><path id=path9445 class=g5_1 d="M1038 2259.7v2.2h-5.4v18.2h-2.6v-18.2h-5.4v-2.2z" fill=#010101><path stroke=#010101 d="M1038 2259.7v2.2h-5.4v18.2h-2.6v-18.2h-5.4v-2.2z" id=path9447 fill=none class=g6_1 stroke-width=.458><path id=path9449 class=g5_1 d="m1065.4 2585.1-3.2 10.9h6.5zm-1.6-2.4h3.4l6.6 20.4h-2.9l-1.5-4.8h-7.9l-1.5 4.8h-2.6z" fill=#010101><path stroke=#010101 d="m1065.4 2585.1-3.2 10.9h6.5zm-1.6-2.4h3.4l6.6 20.4h-2.9l-1.5-4.8h-7.9l-1.5 4.8h-2.6z" id=path9451 fill=none class=g6_1 stroke-width=.458><path id=path9453 class=g5_1 d="M1087 2582.7v2.3h-5.3v18.1h-2.7V2585h-5.3v-2.3z" fill=#010101><path stroke=#010101 d="M1087 2582.7v2.3h-5.3v18.1h-2.7V2585h-5.3v-2.3z" id=path9455 fill=none class=g6_1 stroke-width=.458><path id=path9457 class=g5_1 d="M1090.1 2582.7h2.8l3.9 17.7 4.1-17.7h3.4l3.7 17.7h.1l4.1-17.7h2.7l-5.4 20.4h-3.1l-3.9-17.7h-.1l-4.1 17.7h-3.2z" fill=#010101><path stroke=#010101 d="M1090.1 2582.7h2.8l3.9 17.7 4.1-17.7h3.4l3.7 17.7h.1l4.1-17.7h2.7l-5.4 20.4h-3.1l-3.9-17.7h-.1l-4.1 17.7h-3.2z" id=path9459 fill=none class=g6_1 stroke-width=.458><path id=path9461 class=g5_1 d="m1123.7 2585.1-3.2 10.9h6.5zm-1.6-2.4h3.4l6.6 20.4h-2.9l-1.5-4.8h-7.9l-1.5 4.8h-2.6z" fill=#010101><path stroke=#010101 d="m1123.7 2585.1-3.2 10.9h6.5zm-1.6-2.4h3.4l6.6 20.4h-2.9l-1.5-4.8h-7.9l-1.5 4.8h-2.6z" id=path9463 fill=none class=g6_1 stroke-width=.458><path id=path9465 class=g5_1 d="M1145.9 2582.7v2.3h-5.4v18.1h-2.6V2585h-5.4v-2.3z" fill=#010101><path stroke=#010101 d="M1145.9 2582.7v2.3h-5.4v18.1h-2.6V2585h-5.4v-2.3z" id=path9467 fill=none class=g6_1 stroke-width=.458><path id=path9469 class=g5_1 d="M1149.7 2603.1v-20.4h10.5v2.3h-7.9v6.5h7.4v2.3h-7.4v7.1h8.1v2.2z" fill=#010101><path stroke=#010101 d="M1149.7 2603.1v-20.4h10.5v2.3h-7.9v6.5h7.4v2.3h-7.4v7.1h8.1v2.2z" id=path9471 fill=none class=g6_1 stroke-width=.458><path id=path9473 class=g5_1 d="M1168.1 2591.5h3.9c1.9 0 2.8-1.6 2.8-3.4 0-1.5-.7-3.1-2.8-3.1h-3.9zm0 2.2v9.4h-2.6v-20.4h7.1c3.6 0 4.9 2.6 4.9 5.1 0 2.4-1.4 4.2-3.8 4.7 2.4.4 3.2 1.2 3.4 5.3 0 .9.3 4.1.7 5.3h-2.8c-.7-1.4-.5-4-.7-6.8-.2-2.4-2.3-2.6-3.1-2.6z" fill=#010101><path stroke=#010101 d="M1168.1 2591.5h3.9c1.9 0 2.8-1.6 2.8-3.4 0-1.5-.7-3.1-2.8-3.1h-3.9zm0 2.2v9.4h-2.6v-20.4h7.1c3.6 0 4.9 2.6 4.9 5.1 0 2.4-1.4 4.2-3.8 4.7 2.4.4 3.2 1.2 3.4 5.3 0 .9.3 4.1.7 5.3h-2.8c-.7-1.4-.5-4-.7-6.8-.2-2.4-2.3-2.6-3.1-2.6z" id=path9475 fill=none class=g6_1 stroke-width=.458><path id=path9477 class=g5_1 d="m2045.8 1532.5-3.2 10.9h6.5zm-1.5-2.4h3.3l6.6 20.4h-2.9l-1.5-4.8h-7.9l-1.5 4.8h-2.6z" fill=#010101><path stroke=#010101 d="m2045.8 1532.5-3.2 10.9h6.5zm-1.5-2.4h3.3l6.6 20.4h-2.9l-1.5-4.8h-7.9l-1.5 4.8h-2.6z" id=path9479 fill=none class=g6_1 stroke-width=.458><path id=path9481 class=g5_1 d="M2060.1 1544.4v.6c0 2.8 1.7 3.7 3.4 3.7 2.1 0 3.7-.9 3.7-3.3 0-4.6-9.2-4-9.2-10.2 0-3.6 2.6-5.5 6-5.5 3.7 0 5.8 1.8 5.6 5.9h-2.7c.1-2.2-.6-3.7-3.1-3.7-1.6 0-3.2.8-3.2 3 0 4.5 9.2 3.9 9.2 10.4 0 4.3-3 5.7-6.3 5.7-6.1 0-6.1-4.6-6-6.6z" fill=#010101><path stroke=#010101 d="M2060.1 1544.4v.6c0 2.8 1.7 3.7 3.4 3.7 2.1 0 3.7-.9 3.7-3.3 0-4.6-9.2-4-9.2-10.2 0-3.6 2.6-5.5 6-5.5 3.7 0 5.8 1.8 5.6 5.9h-2.7c.1-2.2-.6-3.7-3.1-3.7-1.6 0-3.2.8-3.2 3 0 4.5 9.2 3.9 9.2 10.4 0 4.3-3 5.7-6.3 5.7-6.1 0-6.1-4.6-6-6.6z" id=path9483 fill=none class=g6_1 stroke-width=.458><path id=path9485 class=g5_1 d="M2077 1544.4v.6c0 2.8 1.7 3.7 3.4 3.7 2 0 3.6-.9 3.6-3.3 0-4.6-9.1-4-9.1-10.2 0-3.6 2.5-5.5 6-5.5 3.7 0 5.8 1.8 5.6 5.9h-2.7c0-2.2-.7-3.7-3.1-3.7-1.6 0-3.2.8-3.2 3 0 4.5 9.2 3.9 9.2 10.4 0 4.3-3 5.7-6.3 5.7-6.1 0-6.1-4.6-6-6.6z" fill=#010101><path stroke=#010101 d="M2077 1544.4v.6c0 2.8 1.7 3.7 3.4 3.7 2 0 3.6-.9 3.6-3.3 0-4.6-9.1-4-9.1-10.2 0-3.6 2.5-5.5 6-5.5 3.7 0 5.8 1.8 5.6 5.9h-2.7c0-2.2-.7-3.7-3.1-3.7-1.6 0-3.2.8-3.2 3 0 4.5 9.2 3.9 9.2 10.4 0 4.3-3 5.7-6.3 5.7-6.1 0-6.1-4.6-6-6.6z" id=path9487 fill=none class=g6_1 stroke-width=.458><path id=path9489 class=g5_1 d="M2101.9 1543.2v-6.9c0-4.3-2.9-4.5-3.7-4.5-.9 0-3.8.2-3.8 4.5v6.9c0 4.4 1.3 5.6 3.8 5.6 2.4 0 3.7-1.2 3.7-5.6m-10.2-.1v-6.8c0-4 2.1-6.6 6.5-6.6 4.3 0 6.4 2.6 6.4 6.6v6.8c0 5.6-2.1 7.8-6.4 7.8-4.4 0-6.5-2.2-6.5-7.8z" fill=#010101><path stroke=#010101 d="M2101.9 1543.2v-6.9c0-4.3-2.9-4.5-3.7-4.5-.9 0-3.8.2-3.8 4.5v6.9c0 4.4 1.3 5.6 3.8 5.6 2.4 0 3.7-1.2 3.7-5.6zm-10.2-.1v-6.8c0-4 2.1-6.6 6.5-6.6 4.3 0 6.4 2.6 6.4 6.6v6.8c0 5.6-2.1 7.8-6.4 7.8-4.4 0-6.5-2.2-6.5-7.8z" id=path9491 fill=none class=g6_1 stroke-width=.458><path id=path9493 class=g5_1 d="M2112.7 1550.5h-2.4v-20.4h4.2l5.1 17.1h.1l5.2-17.1h4.3v20.4h-2.6v-18.1h-.1l-5.7 18.1h-2.4l-5.6-18.1h-.1z" fill=#010101><path stroke=#010101 d="M2112.7 1550.5h-2.4v-20.4h4.2l5.1 17.1h.1l5.2-17.1h4.3v20.4h-2.6v-18.1h-.1l-5.7 18.1h-2.4l-5.6-18.1h-.1z" id=path9495 fill=none class=g6_1 stroke-width=.458><path id=path9497 class=g5_1 d="M2137.9 1539.3h2.9c1 0 3.6-.3 3.6-3.5 0-3.1-2.3-3.4-2.9-3.4h-3.6zm-2.6 11.2v-20.4h6.1c2.7 0 5.6 1 5.6 5.8 0 4.7-3.6 5.6-5.7 5.6h-3.4v9z" fill=#010101><path stroke=#010101 d="M2137.9 1539.3h2.9c1 0 3.6-.3 3.6-3.5 0-3.1-2.3-3.4-2.9-3.4h-3.6zm-2.6 11.2v-20.4h6.1c2.7 0 5.6 1 5.6 5.8 0 4.7-3.6 5.6-5.7 5.6h-3.4v9z" id=path9499 fill=none class=g6_1 stroke-width=.458><path id=path9501 class=g5_1 d="M2163.9 1530.1v2.3h-5.4v18.1h-2.6v-18.1h-5.4v-2.3z" fill=#010101><path stroke=#010101 d="M2163.9 1530.1v2.3h-5.4v18.1h-2.6v-18.1h-5.4v-2.3z" id=path9503 fill=none class=g6_1 stroke-width=.458><path id=path9505 class=g5_1 d="M2171.2 1550.5h-2.6v-20.4h2.6z" fill=#010101><path stroke=#010101 d="M2171.2 1550.5h-2.6v-20.4h2.6z" id=path9507 fill=none class=g6_1 stroke-width=.458><path id=path9509 class=g5_1 d="M2187.1 1543.2v-6.9c0-4.3-3-4.5-3.8-4.5s-3.8.2-3.8 4.5v6.9c0 4.4 1.3 5.6 3.8 5.6s3.8-1.2 3.8-5.6m-10.2-.1v-6.8c0-4 2.1-6.6 6.4-6.6s6.4 2.6 6.4 6.6v6.8c0 5.6-2.1 7.8-6.4 7.8s-6.4-2.2-6.4-7.8z" fill=#010101><path stroke=#010101 d="M2187.1 1543.2v-6.9c0-4.3-3-4.5-3.8-4.5s-3.8.2-3.8 4.5v6.9c0 4.4 1.3 5.6 3.8 5.6s3.8-1.2 3.8-5.6zm-10.2-.1v-6.8c0-4 2.1-6.6 6.4-6.6s6.4 2.6 6.4 6.6v6.8c0 5.6-2.1 7.8-6.4 7.8s-6.4-2.2-6.4-7.8z" id=path9511 fill=none class=g6_1 stroke-width=.458><path id=path9513 class=g5_1 d="M2209.6 1530.1v20.4h-3.6l-8.1-17.7v17.7h-2.4v-20.4h3.7l8 17.5v-17.5z" fill=#010101><path stroke=#010101 d="M2209.6 1530.1v20.4h-3.6l-8.1-17.7v17.7h-2.4v-20.4h3.7l8 17.5v-17.5z" id=path9515 fill=none class=g6_1 stroke-width=.458><path id=path9517 class=g5_1 d="M906.8 1775.6h2.5c3.6 0 4.9-1.4 4.9-6.1v-4.2c0-4.1-1.2-5.6-4-5.6h-3.4zm-2.6-18.2h6.3c2.6 0 4.5 1 5.5 3.1.8 1.8.9 5.8.9 6.5 0 4.3-.4 6.9-1.2 8.2-1.1 1.8-3.2 2.7-6.8 2.7h-4.7z" fill=#010101><path stroke=#010101 d="M906.8 1775.6h2.5c3.6 0 4.9-1.4 4.9-6.1v-4.2c0-4.1-1.2-5.6-4-5.6h-3.4zm-2.6-18.2h6.3c2.6 0 4.5 1 5.5 3.1.8 1.8.9 5.8.9 6.5 0 4.3-.4 6.9-1.2 8.2-1.1 1.8-3.2 2.7-6.8 2.7h-4.7z" id=path9519 fill=none class=g6_1 stroke-width=.458><path id=path9521 class=g5_1 d="M922.3 1777.9v-20.5h10.5v2.3h-7.9v6.6h7.4v2.2h-7.4v7.1h8.1v2.3z" fill=#010101><path stroke=#010101 d="M922.3 1777.9v-20.5h10.5v2.3h-7.9v6.6h7.4v2.2h-7.4v7.1h8.1v2.3z" id=path9523 fill=none class=g6_1 stroke-width=.458><path id=path9525 class=g5_1 d="M954 1763.1c0-1.2 0-2.4-.6-3-.5-.7-1.7-.9-2.3-.9-2.1 0-3 1.3-3.1 1.6 0 .2-.6.7-.6 4.2v5.5c0 5 1.7 5.6 3.7 5.6.8 0 3.2-.3 3.2-4.3h2.7c.1 6.5-4.4 6.5-5.8 6.5-2.5 0-6.4-.2-6.4-8.1v-5.8c0-5.8 2.5-7.4 6.6-7.4 4 0 5.6 2.1 5.3 6.1z" fill=#010101><path stroke=#010101 d="M954 1763.1c0-1.2 0-2.4-.6-3-.5-.7-1.7-.9-2.3-.9-2.1 0-3 1.3-3.1 1.6 0 .2-.6.7-.6 4.2v5.5c0 5 1.7 5.6 3.7 5.6.8 0 3.2-.3 3.2-4.3h2.7c.1 6.5-4.4 6.5-5.8 6.5-2.5 0-6.4-.2-6.4-8.1v-5.8c0-5.8 2.5-7.4 6.6-7.4 4 0 5.6 2.1 5.3 6.1z" id=path9527 fill=none class=g6_1 stroke-width=.458><path id=path9529 class=g5_1 d="M968.1 1759.8h-.1l-3.2 10.9h6.6zm-1.6-2.4h3.3l6.7 20.5h-3l-1.4-4.9h-7.9l-1.6 4.9H960z" fill=#010101><path stroke=#010101 d="M968.1 1759.8h-.1l-3.2 10.9h6.6zm-1.6-2.4h3.3l6.7 20.5h-3l-1.4-4.9h-7.9l-1.6 4.9H960z" id=path9531 fill=none class=g6_1 stroke-width=.458><path id=path9533 class=g5_1 d="M982.3 1771.8v.6c0 2.7 1.8 3.6 3.4 3.6 2.1 0 3.7-.9 3.7-3.3 0-4.5-9.2-4-9.2-10.2 0-3.6 2.6-5.5 6-5.5 3.8 0 5.9 1.8 5.7 6h-2.7c0-2.3-.7-3.7-3.2-3.7-1.5 0-3.1.8-3.1 3 0 4.5 9.2 3.8 9.2 10.3 0 4.3-3 5.7-6.4 5.7-6 0-6-4.6-6-6.5z" fill=#010101><path stroke=#010101 d="M982.3 1771.8v.6c0 2.7 1.8 3.6 3.4 3.6 2.1 0 3.7-.9 3.7-3.3 0-4.5-9.2-4-9.2-10.2 0-3.6 2.6-5.5 6-5.5 3.8 0 5.9 1.8 5.7 6h-2.7c0-2.3-.7-3.7-3.2-3.7-1.5 0-3.1.8-3.1 3 0 4.5 9.2 3.8 9.2 10.3 0 4.3-3 5.7-6.4 5.7-6 0-6-4.6-6-6.5z" id=path9535 fill=none class=g6_1 stroke-width=.458><path id=path9537 class=g5_1 d="M1009.2 1757.4v2.3h-5.4v18.2h-2.6v-18.2h-5.3v-2.3z" fill=#010101><path stroke=#010101 d="M1009.2 1757.4v2.3h-5.4v18.2h-2.6v-18.2h-5.3v-2.3z" id=path9539 fill=none class=g6_1 stroke-width=.458><path id=path9541 class=g5_1 d="M1013.9 1777.9v-20.5h10.5v2.3h-7.9v6.6h7.4v2.2h-7.4v7.1h8.1v2.3z" fill=#010101><path stroke=#010101 d="M1013.9 1777.9v-20.5h10.5v2.3h-7.9v6.6h7.4v2.2h-7.4v7.1h8.1v2.3z" id=path9543 fill=none class=g6_1 stroke-width=.458><path id=path9545 class=g5_1 d="M1029.2 1777.9v-20.5h2.6v18.2h7.5v2.3z" fill=#010101><path stroke=#010101 d="M1029.2 1777.9v-20.5h2.6v18.2h7.5v2.3z" id=path9547 fill=none class=g6_1 stroke-width=.458><path id=path9549 class=g5_1 d="M1057.6 1757.4v20.5h-3.6l-8-17.8h-.1v17.8h-2.3v-20.5h3.7l7.9 17.5h.1v-17.5z" fill=#010101><path stroke=#010101 d="M1057.6 1757.4v20.5h-3.6l-8-17.8h-.1v17.8h-2.3v-20.5h3.7l7.9 17.5h.1v-17.5z" id=path9551 fill=none class=g6_1 stroke-width=.458><path id=path9553 class=g5_1 d="M1069.7 1759.8h-.1l-3.2 10.9h6.5zm-1.6-2.4h3.3l6.6 20.5h-2.9l-1.5-4.9h-7.9l-1.5 4.9h-2.6z" fill=#010101><path stroke=#010101 d="M1069.7 1759.8h-.1l-3.2 10.9h6.5zm-1.6-2.4h3.3l6.6 20.5h-2.9l-1.5-4.9h-7.9l-1.5 4.9h-2.6z" id=path9555 fill=none class=g6_1 stroke-width=.458><path id=path9557 class=g5_1 d="M1081.8 1757.4h2.6v13.1c0 4.5 1.4 5.6 3.8 5.6 2.5 0 3.8-1.1 3.8-5.6v-13.1h2.6v13c0 5.6-2 7.9-6.4 7.9-4.3 0-6.4-2.3-6.4-7.9z" fill=#010101><path stroke=#010101 d="M1081.8 1757.4h2.6v13.1c0 4.5 1.4 5.6 3.8 5.6 2.5 0 3.8-1.1 3.8-5.6v-13.1h2.6v13c0 5.6-2 7.9-6.4 7.9-4.3 0-6.4-2.3-6.4-7.9z" id=path9559 fill=none class=g6_1 stroke-width=.458><path id=path9561 class=g5_1 d="M1410.7 2916.9v-20.4h2.6v18.1h7.5v2.3z" fill=#010101><path stroke=#010101 d="M1410.7 2916.9v-20.4h2.6v18.1h7.5v2.3z" id=path9563 fill=none class=g6_1 stroke-width=.458><path id=path9565 class=g5_1 d="m1432 2898.9-3.2 10.9h6.5zm-1.6-2.4h3.3l6.7 20.4h-2.9l-1.5-4.9h-7.9l-1.5 4.9h-2.6z" fill=#010101><path stroke=#010101 d="m1432 2898.9-3.2 10.9h6.5zm-1.6-2.4h3.3l6.7 20.4h-2.9l-1.5-4.9h-7.9l-1.5 4.9h-2.6z" id=path9567 fill=none class=g6_1 stroke-width=.458><path id=path9569 class=g5_1 d="M1446.3 2910.8v.6c0 2.8 1.7 3.7 3.4 3.7 2.1 0 3.6-.9 3.6-3.4 0-4.5-9.1-4-9.1-10.1 0-3.6 2.5-5.6 6-5.6 3.7 0 5.8 1.8 5.6 6h-2.7c0-2.2-.7-3.7-3.1-3.7-1.6 0-3.2.8-3.2 3 0 4.5 9.2 3.8 9.2 10.3 0 4.3-3 5.7-6.3 5.7-6.1.1-6.1-4.5-6-6.5z" fill=#010101><path stroke=#010101 d="M1446.3 2910.8v.6c0 2.8 1.7 3.7 3.4 3.7 2.1 0 3.6-.9 3.6-3.4 0-4.5-9.1-4-9.1-10.1 0-3.6 2.5-5.6 6-5.6 3.7 0 5.8 1.8 5.6 6h-2.7c0-2.2-.7-3.7-3.1-3.7-1.6 0-3.2.8-3.2 3 0 4.5 9.2 3.8 9.2 10.3 0 4.3-3 5.7-6.3 5.7-6.1.1-6.1-4.5-6-6.5z" id=path9571 fill=none class=g6_1 stroke-width=.458><path id=path9573 class=g5_1 d="m1467.3 2898.9-3.2 10.9h6.5zm-1.6-2.4h3.3l6.7 20.4h-2.9l-1.5-4.9h-7.9l-1.5 4.9h-2.6z" fill=#010101><path stroke=#010101 d="m1467.3 2898.9-3.2 10.9h6.5zm-1.6-2.4h3.3l6.7 20.4h-2.9l-1.5-4.9h-7.9l-1.5 4.9h-2.6z" id=path9575 fill=none class=g6_1 stroke-width=.458><path id=path9577 class=g5_1 d="M1479.6 2916.9v-20.4h2.6v18.1h7.5v2.3z" fill=#010101><path stroke=#010101 d="M1479.6 2916.9v-20.4h2.6v18.1h7.5v2.3z" id=path9579 fill=none class=g6_1 stroke-width=.458><path id=path9581 class=g5_1 d="M1493.8 2916.9v-20.4h2.6v18.1h7.5v2.3z" fill=#010101><path stroke=#010101 d="M1493.8 2916.9v-20.4h2.6v18.1h7.5v2.3z" id=path9583 fill=none class=g6_1 stroke-width=.458><path id=path9585 class=g5_1 d="M1508.1 2916.9v-20.4h10.5v2.2h-7.9v6.6h7.3v2.3h-7.3v7h8.1v2.3z" fill=#010101><path stroke=#010101 d="M1508.1 2916.9v-20.4h10.5v2.2h-7.9v6.6h7.3v2.3h-7.3v7h8.1v2.3z" id=path9587 fill=none class=g6_1 stroke-width=.458><path id=path9589 class=g5_1 d="M1354.7 2684.7c0-2.4-.9-3.7-3.6-3.7-.8 0-3.7.1-3.7 4.4v6.9c0 4.5 1.3 5.6 3.7 5.6 1.9 0 3.1-.5 3.7-.9v-6.1h-3.8v-2.3h6.4v10c-1.7.9-3.6 1.5-6.3 1.5-4.3 0-6.4-2.2-6.4-7.9v-6.7c0-4.1 2.1-6.7 6.4-6.7 4.4 0 6.5 1.6 6.4 5.9z" fill=#010101><path stroke=#010101 d="M1354.7 2684.7c0-2.4-.9-3.7-3.6-3.7-.8 0-3.7.1-3.7 4.4v6.9c0 4.5 1.3 5.6 3.7 5.6 1.9 0 3.1-.5 3.7-.9v-6.1h-3.8v-2.3h6.4v10c-1.7.9-3.6 1.5-6.3 1.5-4.3 0-6.4-2.2-6.4-7.9v-6.7c0-4.1 2.1-6.7 6.4-6.7 4.4 0 6.5 1.6 6.4 5.9z" id=path9591 fill=none class=g6_1 stroke-width=.458><path id=path9593 class=g5_1 d="M1363.7 2699.7v-20.4h10.5v2.2h-7.9v6.6h7.3v2.2h-7.3v7.1h8.1v2.3z" fill=#010101><path stroke=#010101 d="M1363.7 2699.7v-20.4h10.5v2.2h-7.9v6.6h7.3v2.2h-7.3v7.1h8.1v2.3z" id=path9595 fill=none class=g6_1 stroke-width=.458><path id=path9597 class=g5_1 d="M1389.1 2692.3v-6.9c0-4.3-3-4.4-3.8-4.4s-3.8.1-3.8 4.4v6.9c0 4.5 1.3 5.6 3.8 5.6 2.4 0 3.8-1.1 3.8-5.6m-10.2-.1v-6.7c0-4.1 2.1-6.7 6.4-6.7s6.4 2.6 6.4 6.7v6.7c0 5.7-2.1 7.9-6.4 7.9s-6.4-2.2-6.4-7.9z" fill=#010101><path stroke=#010101 d="M1389.1 2692.3v-6.9c0-4.3-3-4.4-3.8-4.4s-3.8.1-3.8 4.4v6.9c0 4.5 1.3 5.6 3.8 5.6 2.4 0 3.8-1.1 3.8-5.6zm-10.2-.1v-6.7c0-4.1 2.1-6.7 6.4-6.7s6.4 2.6 6.4 6.7v6.7c0 5.7-2.1 7.9-6.4 7.9s-6.4-2.2-6.4-7.9z" id=path9599 fill=none class=g6_1 stroke-width=.458><path id=path9601 class=g5_1 d="M1399.9 2688h3.9c1.9 0 2.8-1.6 2.8-3.4 0-1.4-.7-3.1-2.7-3.1h-4zm0 2.3v9.4h-2.6v-20.4h7.1c3.6 0 4.9 2.5 4.9 5s-1.4 4.3-3.8 4.7v.1c2.4.3 3.2 1.1 3.4 5.2 0 .9.3 4.1.7 5.4h-2.7c-.8-1.4-.6-4.1-.8-6.8-.2-2.5-2.2-2.6-3.1-2.6z" fill=#010101><path stroke=#010101 d="M1399.9 2688h3.9c1.9 0 2.8-1.6 2.8-3.4 0-1.4-.7-3.1-2.7-3.1h-4zm0 2.3v9.4h-2.6v-20.4h7.1c3.6 0 4.9 2.5 4.9 5s-1.4 4.3-3.8 4.7v.1c2.4.3 3.2 1.1 3.4 5.2 0 .9.3 4.1.7 5.4h-2.7c-.8-1.4-.6-4.1-.8-6.8-.2-2.5-2.2-2.6-3.1-2.6z" id=path9603 fill=none class=g6_1 stroke-width=.458><path id=path9605 class=g5_1 d="M1424.3 2684.7c0-2.4-1-3.7-3.6-3.7-.8 0-3.8.1-3.8 4.4v6.9c0 4.5 1.3 5.6 3.8 5.6 1.9 0 3.1-.5 3.7-.9v-6.1h-3.8v-2.3h6.4v10c-1.7.9-3.7 1.5-6.3 1.5-4.3 0-6.4-2.2-6.4-7.9v-6.7c0-4.1 2.1-6.7 6.4-6.7 4.4 0 6.5 1.6 6.3 5.9z" fill=#010101><path stroke=#010101 d="M1424.3 2684.7c0-2.4-1-3.7-3.6-3.7-.8 0-3.8.1-3.8 4.4v6.9c0 4.5 1.3 5.6 3.8 5.6 1.9 0 3.1-.5 3.7-.9v-6.1h-3.8v-2.3h6.4v10c-1.7.9-3.7 1.5-6.3 1.5-4.3 0-6.4-2.2-6.4-7.9v-6.7c0-4.1 2.1-6.7 6.4-6.7 4.4 0 6.5 1.6 6.3 5.9z" id=path9607 fill=none class=g6_1 stroke-width=.458><path id=path9609 class=g5_1 d="M1433 2699.7v-20.4h10.5v2.2h-7.9v6.6h7.3v2.2h-7.3v7.1h8.1v2.3z" fill=#010101><path stroke=#010101 d="M1433 2699.7v-20.4h10.5v2.2h-7.9v6.6h7.3v2.2h-7.3v7.1h8.1v2.3z" id=path9611 fill=none class=g6_1 stroke-width=.458><path id=path9613 class=g5_1 d="M1450.3 2693.6v.6c0 2.8 1.7 3.6 3.4 3.6 2 0 3.6-.8 3.6-3.3 0-4.5-9.1-4-9.1-10.1 0-3.6 2.5-5.6 6-5.6 3.7 0 5.8 1.8 5.6 6h-2.7c0-2.2-.7-3.7-3.1-3.7-1.6 0-3.2.8-3.2 3 0 4.5 9.2 3.8 9.2 10.3 0 4.3-3 5.7-6.3 5.7-6.1.1-6.1-4.5-6-6.5z" fill=#010101><path stroke=#010101 d="M1450.3 2693.6v.6c0 2.8 1.7 3.6 3.4 3.6 2 0 3.6-.8 3.6-3.3 0-4.5-9.1-4-9.1-10.1 0-3.6 2.5-5.6 6-5.6 3.7 0 5.8 1.8 5.6 6h-2.7c0-2.2-.7-3.7-3.1-3.7-1.6 0-3.2.8-3.2 3 0 4.5 9.2 3.8 9.2 10.3 0 4.3-3 5.7-6.3 5.7-6.1.1-6.1-4.5-6-6.5z" id=path9615 fill=none class=g6_1 stroke-width=.458><path id=path9617 class=g5_1 d="M1464.4 2688.1h6.2v2.1h-6.2z" fill=#010101><path stroke=#010101 d="M1464.4 2688.1h6.2v2.1h-6.2z" id=path9619 fill=none class=g6_1 stroke-width=.458><path id=path9621 class=g5_1 d="M1482.8 2699.7h-3.1l-5.9-20.4h2.8l4.7 17.9 4.8-17.9h2.7z" fill=#010101><path stroke=#010101 d="M1482.8 2699.7h-3.1l-5.9-20.4h2.8l4.7 17.9 4.8-17.9h2.7z" id=path9623 fill=none class=g6_1 stroke-width=.458><path id=path9625 class=g5_1 d="m1497.4 2681.7-3.2 10.9h6.5zm-1.6-2.4h3.4l6.6 20.4h-2.9l-1.5-4.9h-7.9l-1.5 4.9h-2.6z" fill=#010101><path stroke=#010101 d="m1497.4 2681.7-3.2 10.9h6.5zm-1.6-2.4h3.4l6.6 20.4h-2.9l-1.5-4.9h-7.9l-1.5 4.9h-2.6z" id=path9627 fill=none class=g6_1 stroke-width=.458><path id=path9629 class=g5_1 d="M1523.8 2679.3v20.4h-3.6l-8-17.7h-.1v17.7h-2.3v-20.4h3.7l7.9 17.4h.1v-17.4z" fill=#010101><path stroke=#010101 d="M1523.8 2679.3v20.4h-3.6l-8-17.7h-.1v17.7h-2.3v-20.4h3.7l7.9 17.4h.1v-17.4z" id=path9631 fill=none class=g6_1 stroke-width=.458><path id=path9633 class=g5_1 d="M1532.6 2699.7h-2.6v-20.4h2.6z" fill=#010101><path stroke=#010101 d="M1532.6 2699.7h-2.6v-20.4h2.6z" id=path9635 fill=none class=g6_1 stroke-width=.458><path id=path9637 class=g5_1 d="M1538.7 2699.7v-20.4h10.5v2.2h-7.9v6.6h7.3v2.2h-7.3v7.1h8.1v2.3z" fill=#010101><path stroke=#010101 d="M1538.7 2699.7v-20.4h10.5v2.2h-7.9v6.6h7.3v2.2h-7.3v7.1h8.1v2.3z" id=path9639 fill=none class=g6_1 stroke-width=.458><path id=path9641 class=g5_1 d="M1557.1 2688h3.9c1.8 0 2.8-1.6 2.8-3.4 0-1.4-.8-3.1-2.8-3.1h-3.9zm0 2.3v9.4h-2.6v-20.4h7c3.6 0 4.9 2.5 4.9 5s-1.3 4.3-3.7 4.7v.1c2.3.3 3.2 1.1 3.3 5.2 0 .9.3 4.1.7 5.4h-2.7c-.7-1.4-.6-4.1-.8-6.8-.2-2.5-2.2-2.6-3.1-2.6z" fill=#010101><path stroke=#010101 d="M1557.1 2688h3.9c1.8 0 2.8-1.6 2.8-3.4 0-1.4-.8-3.1-2.8-3.1h-3.9zm0 2.3v9.4h-2.6v-20.4h7c3.6 0 4.9 2.5 4.9 5s-1.3 4.3-3.7 4.7v.1c2.3.3 3.2 1.1 3.3 5.2 0 .9.3 4.1.7 5.4h-2.7c-.7-1.4-.6-4.1-.8-6.8-.2-2.5-2.2-2.6-3.1-2.6z" id=path9643 fill=none class=g6_1 stroke-width=.458></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></a></path></a></path></a></path></a></path></a></path></a></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></a></path></a></path></a></path></path></a></path></path></a></path></a></path></a></path></path></a></path></a></path></a></path></a></path></a></path></a></path></a></path></a></path></path></path></path></path></a></path></path></a></path></a></path></a></path></a></path></a></path></a></path></a></path></a></path></a></path></a></path></a></path></path></a></path></a></path></a></path></path></path></a></path></a></path></path></a></path></a></path></path></a></path></a></path></a></path></a></path></path></a></path></a></path></a></path></a></path></a></path></a></path></a></path></a></path></a></path></a></path></a></path></a></path></a></path></a></path></a></path></a></path></a></path></a></path></a></path></a></path></a></path></a></path></a></path></a></path></a></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></path></g></svg></p> <ul> <li><a href="https://veronneau.org/media/blog/2022-01-21/graphs/orange.png">Orange line</a> (<a href="https://veronneau.org/media/blog/2022-01-21/graphs/orange_top10.png">top10</a>)</li> <li><a href="https://veronneau.org/media/blog/2022-01-21/graphs/green.png">Green line</a> (<a href="https://veronneau.org/media/blog/2022-01-21/graphs/green_top10.png">top10</a>)</li> <li><a href="https://veronneau.org/media/blog/2022-01-21/graphs/blue.png">Blue line</a></li> <li><a href="https://veronneau.org/media/blog/2022-01-21/graphs/yellow.png">Yellow line</a></li> <li><a href="https://veronneau.org/media/blog/2022-01-21/graphs/global_top10.png">Global Top 10</a></li> </ul> <h2>Licences</h2> <ul> <li> <p>The subway map displayed on this page, the <a href="https://veronneau.org/media/blog/2022-01-21/source_data_2021.csv">original dataset</a> and my <a href="https://veronneau.org/media/blog/2022-01-21/dataset.csv">modified dataset</a> are licenced under <a href="https://creativecommons.org/publicdomain/zero/1.0/deed.en">CCO 1.0</a>: they are in the public domain.</p> </li> <li> <p>The <a href="https://veronneau.org/media/blog/2022-01-21/stm.R">R code I wrote</a> is licensed under the GPLv3+. It's pretty much the same code as last year. I've also added <a href="https://veronneau.org/media/blog/2022-01-21/convert.R">a converter script</a> this time around. I takes the manually cleaned 2021 source data and turns it into something that can be merged with the global dataset. I had one last year and deleted it, for some reason...</p> </li> </ul>

Planet DebianReproducible Builds (diffoscope): diffoscope 201 released

The diffoscope maintainers are pleased to announce the release of diffoscope version 201. This version includes the following changes:

[ Chris Lamb ]
* If the debian.deb822 module raises any exception on import, re-raise it as
  an ImportError instead. This should fix diffoscope on some Fedora systems.
  Thanks to Mattia Rizzolo for suggesting this particular solution.
  (Closes: reproducible-builds/diffoscope#300)

[ Zbigniew Jędrzejewski-Szmek ]
* Fix json detection with file-5.41-3.fc36.x86_64.

You find out more by visiting the project homepage.

,

Planet DebianSven Hoexter: Running OpenWRT x86 in qemu

Sometimes it's nice for testing purpose to have the OpenWRT userland available locally. Since there is an x86 build available one can just run it within qemu.

wget https://downloads.openwrt.org/releases/21.02.1/targets/x86/64/openwrt-21.02.1-x86-64-generic-squashfs-combined.img.gz
gunzip openwrt-21.02.1-x86-64-generic-squashfs-combined.img.gz
qemu-img convert -f raw -O qcow2 openwrt-21.02.1-x86-64-generic-squashfs-combined.img openwrt-21.02.1.qcow2
qemu-img resize openwrt-21.02.1.qcow2 200M
qemu-system-x86_64 -M q35 \
  -drive file=openwrt-21.02.1.qcow2,id=d0,if=none,bus=0,unit=0 \
  -device ide-hd,drive=d0,bus=ide.0 -nic user,hostfwd=tcp::5556-:22
# you've to change the network configuration to retrieve an IP via
# dhcp for the lan bridge br-lan
vi /etc/config/network
  - change option proto 'static' to 'dhcp'
  - remove IP address and netmask setting
/etc/init.d/network restart
# now you should've an ip out of 10.0.2.0/24
ssh root@localhost -p 5556
# remember ICMP does not work but otherwise you should have
# IP networking available
opkg update
opkg install curl

Planet DebianDirk Eddelbuettel: RQuantLib 0.4.15: Regular Update

A new release 0.4.15 of RQuantLib arrived at CRAN earlier today, and has been uploaded to Debian as well.

QuantLib is a very comprehensice free/open-source library for quantitative finance; RQuantLib connects it to the R environment and language.

The release of RQuantLib comes four months after the previous release, and brings a momitor update for the just-released QuantLib 1.2.5 version along with a few small cleanups to calendars and daycounters.

Changes in RQuantLib version 0.4.15 (2022-01-19)

  • Changes in RQuantLib code:

    • Calendar support has been updated and completed to current QuantLib standards (Dirk in #161)

    • More daycounters have been added (Kai Lin in #163 fixing #162, #164)

    • The bonds pricers were update to changes in QuantLib 1.25 (Dirk)

  • Changes in RQuantLib package and setup:

    • Some package metadata was removed from the README.md (Dirk)

Courtesy of my CRANberries, there is also a diffstat report for the this release. As always, more detailed information is on the RQuantLib page. Questions, comments etc should go to the new rquantlib-devel mailing list. Issue tickets can be filed at the GitHub repo.

If you like this or other open-source work I do, you can now sponsor me at GitHub.

This post by Dirk Eddelbuettel originated on his Thinking inside the box blog. Please report excessive re-aggregation in third-party for-profit settings.

Planet DebianCaleb Adepitan: I'm Thinking About You Right Now!

Just in case you stumbled on this incidentally and you wonder “Who in the seven fat worlds is this mysterious...?” Ha! That was what I was thinking about you you were thinking about me. You gerrit!?

I heard you listening to my thoughts; I listened to yours too. I wonder if you heard me too.

I will like to talk, today, about what it is I do at Debian as an Outreachy Intern under the JavaScript team. I woke up this morning and decided to bore you with so much details. I must have woken up glorified!

A Broader View

My sole role at Debian alongside my teammate, aided by our mentors, is to facilitate the Node.js 16 and Webpack 5 Transitioning. What exactly does that mean?

Node.js 16, as of the time of this writing, is the active LTS release from the Node.js developers while Webpack 5 is also the current release from the Webpack developers. At Debian we have to work towards supporting these packages.

Debian as an OS comes with a package manager coined Advanced Package Tool or simply APT on which command-line programs specific to Debian and it's many-flavored distributions, apt, apt-get, apt-cache are based. This means before the conception of yarn and npm, the typical JavaScript developer's package managers, apt has been. Debian unlike yarn and npm, ideally, only supports one version of a software at any point in time and on edge cases may have to support an extra one as noted in this chat between my mentor and a member.

To provide support for Webpack 5 and Node.js 16 which as regards to Debian are currently in experimental and only can be migrated to unstable after our transitioning, we have to test, reverse build, report and fix bugs till a certain level of compatibility has been attained with dependent packages currently in unstable.

Webpack and Node.js have thier respective dependencies, but there are certain software and packages also dependent on Webpack and/or Node.js, these are termed as reverse-dependencies. We have to test and build these reverse-dependencies, report and fix bugs and incompatibilities with the new versions of Webpack and Node.js. For reverse-dependent packages not yet supporting Webpack 5 and/or Node.js 16, we'll open an issue in form of a feature-request in upstream repository asking for Webpack 5 and/or Node.js 16 support.

Ideally, Debian manages a repository of all supported packages on a GitLab–managed–Git–based VCS. For JavaScript packages maintained by the JS Team, the home of those packages sits at https://salsa.debian.org/js-team/.

Supported packages are pulled from upstream repository, mostly GitHub, using some certian packaging tools provided by Debian. The pulled source cannot be directly modified else it will break build. So there exists a dedicated folder named “debian” where certain cofiguration files, scripts and rules to convey to the debian package builder live at. In some cases, source code needs to be modified; these are done via patching which means the modifications won't live in the source but in a dedicated patch file inside the debian/patches/ folder. The modifications are diffed line by line with the original source (just as with git) and the result is output in a file managed by debian utility tool, Quilt. The contents of the debian folder are instructions on how to build the source into binaries or an installable archive .deb (like Java's .jar or Android's .apk).

Understanding Debian Software Release Cycle

There are quite some interesting things about the software release cycle at Debian to get familiar with. Listed here are some release repositories alongside thier codenames as of Debian 11:

  1. Unstable (Sid)
  2. Testing (Bookworm)
  3. Stable (Bullseye)
  4. Old stable (Buster)
  5. Old old stable (Stretch)

Ha! Isn't it ironic that unstable is the only one with a stable codename?

Some of these, if not all, have codenames subject to change after every new release and/or migration. Only unstable which is referred to as Sid never changes. The current stable release which is Debian 11 is codenamed Bullseye. The next stable release which will be Debian 12 will be codenamed Bookworm because the current testing repository will me migrated to stable and released as Debian 12. The previous stable release which was Debian 10, now old stable, was codenamed Buster. To better understand Debian releases you may take a look at this wiki that completely defines them.

Basically, as explained by one of my mentors remixed in my own words, experimental software are migrated to unstable after (as I said earlier) they have attained a certain level of compatibility with dependent software. They remain in unstable for a long period of time undergoing testing, autopkgtest tests, regression tests, etc. At this point bugs are reported and fixed to a satisfactory level. The unstable repository is then migrated to testing where release-critical bugs are reported and fixed to a satisfactory level where one can comfortably say “testing is almost stable”, and voila (!), testing is released as a Debian stable version. This happens roughly every two years.

Some months before a new stable release, a soft freeze is turned on such that no new versions or transitions should be uploaded to unstable. Only fixes will be uploaded at this point. In like 4-6 weeks before the release, a hard freeze is turned on that completely disallows uploading to unstable, not even fixes. In due time, testing becomes the new stable release and freeze is lifted.

References

  1. Packaging pre-requisites
  2. Working with chroots
  3. Sbuild (clean builds)
  4. Updating a Debian Package by Abraham Raji

Worse Than FailureCodeSOD: Commentary

"Include descriptive comments for each method," isn't bad advice. I mean, ideally, the method name and parameters would be descriptive enough that you don't need to add lots of comments, but more comments is rarely going to hurt things. Unfortunately, "include descriptive comments" usually decays into "include comments". And that's how we get piles of code like this one, from Patrick:

// // Function name : CZiArecaRaidController::ReadAllRaidsetInfo // Machine : w7gre7 // Environment : Visual Studio .Net 2008 // doxygen : /// \fn CZiArecaRaidController::ReadAllRaidsetInfo(BSTR ContextInfo, IZiArecaDataCollection *pRaidsetInfoCollection, IZiArecaDataCollection *pVolumesetInfoCollection, IZiArecaDataCollection *pPhysicalDriveInfoCollection) /// \brief /// \details /// \param ContextInfo /// \param *pRaidsetInfoCollection /// \param *pVolumesetInfoCollection /// \param *pPhysicalDriveInfoCollection /// \return STDMETHODIMP /// \author (redacted) /// \date 24.01.2011 09:59:10 // STDMETHODIMP CZiArecaRaidController::ReadAllRaidsetInfo(BSTR ContextInfo, IZiArecaDataCollection **pRaidsetInfoCollection, IZiArecaDataCollection **pVolumesetInfoCollection, IZiArecaDataCollection **pPhysicalDriveInfoCollection) { // ... } // // Function name : CZiArecaRaidController::GetArecaErrorMessage // Description : // Return type : string // Argument : ARC_STATUS stat // Author : (redacted) // Machine : Lapgre5 // Environment : Visual Studio .Net 2005 // Date/Time : 05.06.2007 15:24:53 // string CZiArecaRaidController::GetArecaErrorMessage(ARC_STATUS stat) { // ... }

This is the secret sauce of bad documentation: just repeat information already in the code, include information that absolutely doesn't need to be there, and make the whole thing take up more space than the code itself. The only way to make this documentation worse is to make it wrong.

It's the useless information which mystifies me. While knowing what environment was used to build the code is useful, why tag that onto individual methods? Why track which machine made the change? Why do source control by comment when the team was already using Subversion?

There is one thing that the documentation includes, though, that's useful to us. Sometime between 2007 and 2011 they added Doxygen to their toolchain. Perhaps between 2011 and 2022 they've also added meaningful documentation which would make Doxygen useful, but probably not.

[Advertisement] BuildMaster allows you to create a self-service release management platform that allows different teams to manage their applications. Explore how!

Planet DebianRuss Allbery: DocKnot 7.01

Continuing to flush out bugs in the recent changes to my static web site generator.

I had missed some Unicode implications for how output from external programs was handled, and also missed Unicode decoding of the output from Pod::Thread, since Pod::Simple always encodes its output even if that output is to a scalar. I also missed an implication for how symlinks were handled in Path::Iterator::Rule, causing docknot spin to fail to copy files into the output tree that were symlinks in the input tree. Both of those bugs are fixed in this release.

I also fixed a minor output issue from the \size command, which was using SI units when it meant IEC units.

You can get the latest release from CPAN or from the DocKnot distribution page.

,

Planet DebianJoerg Jaspert: Funny CPU usage

Munin plugin and it’s CPU usage (shell fixup)

So at work we do have a munin server running, and one of the graphs we do for every system is a network statistics one with a resolution of 1 second. That’s a simple enough script to have, and it is working nicely - on 98% of our machines. You just don’t notice the data gatherer at all, so that we also have some other graphs done with a 1 second resolution. For some, this really helps.

Basics

The basic code for this is simple. There is a bunch of stuff to start the background gathering, some to print out the config, and some to hand out the data when munin wants it. Plenty standard.

The interesting bit that goes wrong and uses too much CPU on one Linux Distribution is this:

run_acquire() {
   echo "$$" > ${pidfile}

   while :; do
     TSTAMP=$(date +%s)
     echo ${IFACE}_tx.value ${TSTAMP}:$(cat /sys/class/net/${IFACE}/statistics/tx_bytes ) >> ${cache}
     echo ${IFACE}_rx.value ${TSTAMP}:$(cat /sys/class/net/${IFACE}/statistics/rx_bytes ) >> ${cache}
     # Sleep for the rest of the second
     sleep 0.$(printf '%04d' $((10000 - 10#$(date +%4N))))
   done
}

That code works, and none of Debian wheezy, stretch and buster as well as RedHat 6 or 7 shows anything, it just works, no noticable load generated.

Now, Oracle Linux 7 thinks differently. The above code run there generates between 8 and 15% CPU usage (on fairly recent Intel CPUs, but that shouldn’t matter). (CPU usage measured with the highly accurate use of top and looking what it tells…)

Whyever.

Fixing

Ok, well, the code above isn’t all the nicest shell, actually. There is room for improvement. But beware, the older the bash, the less one can fix it.

  • So, first of, there are two useless uses of cat. Bash can do that for us, just use the $(< /PATH/TO/FILE ) way.
  • Oh, Bash5 knows the epoch directly, we can replace the date call for the timestamp and use ${EPOCHSECONDS}
  • Too bad Bash4 can’t do that. But hey, it’s builtin printf can help out, a nice TSTAMP=$(printf ‘%(%s)T\n’ -1) works.
  • Unfortunately, Bash4.2 and later, not 4.1, and meh, we have a 4.1 system, so that has to stay with the date call there.

Taking that, we end up with 3 different possible versions, depending on the Bash on the system.

obtain5() {
  ## Purest bash version, Bash can tell us epochs directly
  echo ${IFACE}_tx.value ${EPOCHSECONDS}:$(</sys/class/net/${IFACE}/statistics/tx_bytes) >> ${cache}
  echo ${IFACE}_rx.value ${EPOCHSECONDS}:$(</sys/class/net/${IFACE}/statistics/rx_bytes) >> ${cache}
  # Sleep for the rest of the second
  sleep 0.$(printf '%04d' $((10000 - 10#$(date +%4N))))
}

obtain42() {
  ## Bash cant tell us epochs directly, but the builtin printf can
  TSTAMP=$(printf '%(%s)T\n' -1)
  echo ${IFACE}_tx.value ${TSTAMP}:$(</sys/class/net/${IFACE}/statistics/tx_bytes) >> ${cache}
  echo ${IFACE}_rx.value ${TSTAMP}:$(</sys/class/net/${IFACE}/statistics/rx_bytes) >> ${cache}
  # Sleep for the rest of the second
  sleep 0.$(printf '%04d' $((10000 - 10#$(date +%4N))))
}

obtain41() {
  ## Bash needs help from a tool to get epoch, means one exec() all the time
  TSTAMP=$(date +%s)
  echo ${IFACE}_tx.value ${TSTAMP}:$(</sys/class/net/${IFACE}/statistics/tx_bytes) >> ${cache}
  echo ${IFACE}_rx.value ${TSTAMP}:$(</sys/class/net/${IFACE}/statistics/rx_bytes) >> ${cache}
  # Sleep for the rest of the second
  sleep 0.$(printf '%04d' $((10000 - 10#$(date +%4N))))
}

run_acquire() {
   echo "$$" > ${pidfile}

   case ${BASH_VERSINFO[0]} in
     5) while :; do
          obtain5
        done
        ;;
     4) if [[ ${BASHVERSION[1]} -ge 2 ]]; then
          while :; do
            obtain42
          done
        else
          while :; do
            obtain41
          done
        fi
        ;;
   esac
}

Does it help?

Oh yes, it does. Oracle Linux 7 appears to use Bash 4.2, so uses obtain42 and hey, removing one date and two cat calls, and it has a sane CPU usage of 0 (again, highly accurate number generated from top…). Appears OL7 is doing heck-what-do-i-know extra, when calling other tools, for whatever gains, removing that does help (who would have thought).

(None of RedHat or Oracle Linux has SELinux turned on, so that one shouldn’t bite. But it is clear OL7 doing something extra for everything that bash spawns.)

Cryptogram China’s Olympics App Is Horribly Insecure

China is mandating that athletes download and use a health and travel app when they attend the Winter Olympics next month. Citizen Lab examined the app and found it riddled with security holes.

Key Findings:

  • MY2022, an app mandated for use by all attendees of the 2022 Olympic Games in Beijing, has a simple but devastating flaw where encryption protecting users’ voice audio and file transfers can be trivially sidestepped. Health customs forms which transmit passport details, demographic information, and medical and travel history are also vulnerable. Server responses can also be spoofed, allowing an attacker to display fake instructions to users.
  • MY2022 is fairly straightforward about the types of data it collects from users in its public-facing documents. However, as the app collects a range of highly sensitive medical information, it is unclear with whom or which organization(s) it shares this information.
  • MY2022 includes features that allow users to report “politically sensitive” content. The app also includes a censorship keyword list, which, while presently inactive, targets a variety of political topics including domestic issues such as Xinjiang and Tibet as well as references to Chinese government agencies.
  • While the vendor did not respond to our security disclosure, we find that the app’s security deficits may not only violate Google’s Unwanted Software Policy and Apple’s App Store guidelines but also China’s own laws and national standards pertaining to privacy protection, providing potential avenues for future redress.

News article:

It’s not clear whether the security flaws were intentional or not, but the report speculated that proper encryption might interfere with some of China’s ubiquitous online surveillance tools, especially systems that allow local authorities to snoop on phones using public wireless networks or internet cafes. Still, the researchers added that the flaws were probably unintentional, because the government will already be receiving data from the app, so there wouldn’t be a need to intercept the data as it was being transferred.

[…]

The app also included a list of 2,422 political keywords, described within the code as “illegalwords.txt,” that worked as a keyword censorship list, according to Citizen Lab. The researchers said the list appeared to be a latent function that the app’s chat and file transfer function was not actively using.

The US government has already advised athletes to leave their personal phones and laptops home and bring burners.

Krebs on SecurityIRS Will Soon Require Selfies for Online Access

If you created an online account to manage your tax records with the U.S. Internal Revenue Service (IRS), those login credentials will cease to work later this year. The agency says that by the summer of 2022, the only way to log in to irs.gov will be through ID.me, an online identity verification service that requires applicants to submit copies of bills and identity documents, as well as a live video feed of their faces via a mobile device.

The IRS says it will require ID.me for all logins later this summer.

McLean, Va.-based ID.me was originally launched in 2010 with the goal of helping e-commerce sites validate the identities of customers who might be eligible for discounts at various retail establishments, such as veterans, teachers, students, nurses and first responders.

These days, ID.me is perhaps better known as the online identity verification service that many states now use to help stanch the loss of billions of dollars in unemployment insurance and pandemic assistance stolen each year by identity thieves. The privately-held company says it has approximately 64 million users, and gains roughly 145,000 new users each day.

Some 27 states already use ID.me to screen for identity thieves applying for benefits in someone else’s name, and now the IRS is joining them. The service requires applicants to supply a great deal more information than typically requested for online verification schemes, such as scans of their driver’s license or other government-issued ID, copies of utility or insurance bills, and details about their mobile phone service.

When an applicant doesn’t have one or more of the above — or if something about their application triggers potential fraud flags — ID.me may require a recorded, live video chat with the person applying for benefits.

Since my credentials at the IRS will soon no longer work, I opted to create an ID.me account and share the experience here. An important preface to this walk-through is that verifying one’s self with Id.me requires one to be able to take a live, video selfie — either with the camera on a mobile device or a webcam attached to a computer (your webcam must be able to open on the device you’re using to apply for the ID.me account).

Also, successfully verifying your identity with ID.me may require a significant investment of time, and quite a bit of patience. For example, stepping away from one part of the many-step application process for a little more than five minutes necessitated another login, and then the re-submission of documents I’d previously uploaded.

After entering an email address and picking a password, you are prompted to confirm your email address by clicking a link sent to that address. After confirmation, ID.me prompts users to choose a multi-factor authentication (MFA) option.

The MFA options range from a six-digit code sent via text message or phone call to code generator apps and FIDO Security Keys. ID.me even suggests using its own branded one-time code generating app, which can “push” a prompt to your mobile device for you to approve whenever you log in. I went with and would encourage others to use the strongest MFA option — a physical Security Key. For more on the benefits of using a Security Key for MFA, see this post.

When the MFA option is verified, the system produces a one-time backup code and suggests you save that in a safe place in case your chosen MFA option is unavailable the next time you try to use a service that requires ID.me.

Next, applicants are asked to upload images of their driver’s license, state-issued ID, or passport — either via a saved file or by scanning them with a webcam or mobile device.

If your documents get accepted, ID.me will then prompt you to take a live selfie with your mobile device or webcam. That took several attempts. When my computer’s camera produced an acceptable result, ID.me said it was comparing the output to the images on my driver’s license scans.

After this, ID.me requires the verification of your phone number, which means they will ask your mobile or landline provider to validate you are indeed an existing, paying customer who can be reached at that number. ID.me says it currently does not accept phone numbers tied to voice-over-IP services like Google Voice and Skype.

My application got stuck interminably at the “Confirming Your Phone” stage, which is somewhere near the middle of the entire verification process.

An email to ID.me’s support people generated a message with a link to complete the verification process via a live video chat. Unfortunately, clicking that link brought up prompts to re-upload all of the information I’d already supplied, and then some.

Some of the primary and secondary documents requested by ID.me.

For example, completing the process requires submitting at least two secondary identification documents, such as as a Social Security card, a birth certificate, health insurance card, W-2 form, electric bill, or financial institution statement.

After re-uploading all of this information, ID.me’s system prompted me to “Please stay on this screen to join video call.” However, the estimated wait time when that message first popped up said “3 hours and 27 minutes.”

I appreciate that ID.me’s system relies on real human beings seeking to interview applicants in real-time, and that not all of those representatives can be expected to handle all of these immediately. And I get that slowing things down is an important part of defeating identity fraudsters who are seeking to exploit automated identity verification systems that largely rely on static data about consumers.

That said, I started this “Meet an agent” process at around 9:30 in the evening, and I wasn’t particularly looking forward to staying up until midnight to complete it. But not long after the message about waiting 3 hours came up, I got a phone call from an ID.me technician who was CC’d on my original email to ID.me’s founder. Against my repeated protests that I wanted to wait my turn like everyone else, he said he would handle the process himself.

Sure enough, a minute later I was connected with the ID.me support person, who finished the verification in a video phone call. That took about one minute. But for anyone who fails the automated signup, count on spending several hours getting verified.

When my application was finally approved, I headed back to irs.gov and proceeded to log in with my new ID.me account. After granting the IRS access to the personal data I’d shared with ID.me, I was looking at my most recent tax data on the IRS website.

I was somewhat concerned that my ID verification might fail because I have a security freeze on my credit file with the three major consumer credit bureaus. But at no time during my application process did ID.me even mention the need to lift or thaw that security freeze to complete the authentication process.

The IRS previously relied upon Equifax for its identity proofing process, and even then anyone with frozen credit files had to lift the freeze to make it through the IRS’s legacy authentication system. For several years, the result of that reliance was that ID thieves massively abused the IRS’s own website to impersonate taxpayers, view their confidential tax records, and ultimately obtain fraudulent tax refunds in their names.

The IRS canceled its “taxpayer identity” contract with Equifax in October 2017, after the credit bureau disclosed that a failure to patch a four-month-old zero-day security flaw led to the theft of Social Security numbers and personal and financial information on 148 million Americans.

Perhaps in light of that 2017 megabreach, many readers will be rightfully concerned about being forced to provide so much sensitive information to a relatively unknown private company. KrebsOnSecurity spoke with ID.me founder and CEO Blake Hall in last year’s story, How $100 Million in Jobless Claims Went to Inmates. I asked Hall what ID.me does to secure all this sensitive information it collects, which would no doubt serve as an enticing target for hackers and identity thieves.

Hall said ID.me is certified against the NIST 800-63-3 digital identity guidelines, employs multiple layers of security, and fully segregates static consumer data tied to a validated identity from a token used to represent that identity.

“We take a defense-in-depth approach, with partitioned networks, and use very sophisticated encryption scheme so that when and if there is a breach, this stuff is firewalled,” Hall said. “You’d have to compromise the tokens at scale and not just the database. We encrypt all that stuff down to the file level with keys that rotate and expire every 24 hours. And once we’ve verified you we don’t need that data about you on an ongoing basis.”

ID.me’s privacy policy states that if you sign up for ID.me “in connection with legal identity verification or a government agency we will not use your verification information for any type of marketing or promotional purposes.”

Signing up at ID.me requires users to approve a biometric data policy that states the company will not sell, lease, or trade your biometric data to any third parties or seek to derive any profit from that information. ID.me says users can delete their biometric data at any time, but there was no apparent option to do so when I logged straight into my new account at ID.me.

When I asked the support technician who conducted the video interview to remove my biometric data, he sent me a link to a process for deleting one’s ID.me account. So, it seems that removing one’s data from ID.me post-verification equals deleting one’s account, and potentially having to re-register at some point in the future.

Over the years, I’ve tried to stress the importance of creating accounts online tied to your various identity, financial and communications services before identity thieves do it for you. But all of those places where you should “Plant Your Flag” conduct identity verification in an automated fashion, using entirely static data points about consumers that have been breached many times over (SSNs, DoBs, etc).

Love it or hate it, ID.me is likely to become one of those places where Americans need to plant their flag and mark their territory, if for no other reason than it will probably be needed at some point to manage your relationship with the federal government and/or your state. And given the potential time investment needed to successfully create an ID.me account, it might be a good idea to do that before you’re forced to do so at the last minute (such as waiting until the eleventh hour to pay your quarterly or annual estimated taxes).

If you’ve visited the sign-in page at the U.S. Social Security Administration (SSA) lately, you’ll notice that on or around Sept. 18, 2021 the agency stopped allowing new accounts to be created with only a username and password. Anyone seeking to create an account at the SSA is now steered toward either ID.me or Login.gov, a single sign-on solution for U.S. government websites.

Cryptogram San Francisco Police Illegally Spying on Protesters

Last summer, the San Francisco police illegally used surveillance cameras at the George Floyd protests. The EFF is suing the police:

This surveillance invaded the privacy of protesters, targeted people of color, and chills and deters participation and organizing for future protests. The SFPD also violated San Francisco’s new Surveillance Technology Ordinance. It prohibits city agencies like the SFPD from acquiring, borrowing, or using surveillance technology, without prior approval from the city’s Board of Supervisors, following an open process that includes public participation. Here, the SFPD went through no such process before spying on protesters with this network of surveillance cameras.

It’s feels like a pretty easy case. There’s a law, and the SF police didn’t follow it.

Tech billionaire Chris Larsen is on the side of the police. He thinks that the surveillance is a good thing, and wrote an op-ed defending it.

I wouldn’t be writing about this at all except that Chris is a board member of EPIC, and used his EPIC affiliation in the op-ed to bolster his own credentials. (Bizarrely, he linked to an EPIC page that directly contradicts his position.) In his op-ed, he mischaracterized the EFF’s actions and the facts of the lawsuit. It’s a mess.

The plaintiffs in the lawsuit wrote a good rebuttal to Larsen’s piece. And this week, EPIC published what is effectively its own rebuttal:

One of the fundamental principles that underlies EPIC’s work (and the work of many other groups) on surveillance oversight is that individuals should have the power to decide whether surveillance tools are used in their communities and to impose limits on their use. We have fought for years to shed light on the development, procurement, and deployment of such technologies and have worked to ensure that they are subject to independent oversight through hearings, legal challenges, petitions, and other public forums. The CCOPS model, which was developed by ACLU affiliates and other coalition partners in California and implemented through the San Francisco ordinance, is a powerful mechanism to enable public oversight of dangerous surveillance tools. The access, retention, and use policies put in place by the neighborhood business associations operating these networks provide necessary, but not sufficient, protections against abuse. Strict oversight is essential to promote both privacy and community safety, which includes freedom from arbitrary police action and the freedom to assemble.

So far, EPIC has not done anything about Larsen still being on its board. (Others have criticized them for keeping him on.) I don’t know if I have an opinion on this. Larsen has done good work on financial privacy regulations, which is a good thing. But he seems to be funding all these surveillance cameras in San Francisco, which is really bad.

Worse Than FailureDocument Soup

An Enterprise Resource Planning system needs to keep track of your enterprise resources. Many of those resources, especially the expensive ones, need lots of documents tracked about them- inspections, service reports, maintenance bills, etc. So the ERP and the Document Management System need to talk.

Years ago, for Coyne, this presented a few problems. First, the ERP was a mainframe application running on an IBM mainframe. Second, it was getting retired. Third, the DMS didn't talk directly to it, but instead communicated through a terminal emulator and used configuration files to correctly parse the screen contents coming back from the mainframe.

The final, and key problem, was that, when examining the documents stored in the DMS, were that there were big confused piles of unrelated documents getting stored together. Specifically, if you looked for documents for the asset tagged 490, it'd fetch those, and also 49, 4900, 49000, or 490000. And vice versa, searches for 490000 would return all the other documents as well.

Now, within the mainframe, the same data might get displayed on multiple panels. So, for example, the tag for a requisition document might be displayed in RQ01 on one panels, RQ02 in another, and RQ03 in yet another. And each of these fields could display the field differently, "depending on design, whim, programmer laziness and phases of the moon," as Coyne writes.

RQ01: [0000000049] RQ02: [ 49] RQ03: [49 ]

Now, the DMS configuration file had a few flags meant to help parse this. For any field, you could set it to strip leading zeros, justify to the left, right or not at all, and whether or not to pad back with zeroes.

The people who designed the module for handling the "fixed assets" documents, the specific documents giving Coyne issues, opted to strip leading zeroes, justify left, and then fill back with zeroes. They deployed this solution, and it had been running for years.

Let's see how it handles common situations:

Key field ⇒ Normalized key [49 ] ⇒ [4900000000] [ 490] ⇒ [4900000000] [4900 ] ⇒ [4900000000] [0000049000] ⇒ [4900000000]

Coyne sums it up:

Presto: document soup. Since there were a three-quarters of a million tags in fixed-assets, a whole lot of document soup.

[Advertisement] BuildMaster allows you to create a self-service release management platform that allows different teams to manage their applications. Explore how!

,

Cryptogram Are Fake COVID Testing Sites Harvesting Data?

Over the past few weeks, I’ve seen a bunch of writing about what seems to be fake COVID-19 testing sites. They take your name and info, and do a nose swab, but you never get test results. Speculation centered around data harvesting, but that didn’t make sense because it was far too labor intensive for that and — sorry to break it to you — your data isn’t worth all that much.

It seems to be multilevel marketing fraud instead:

The Center for COVID Control is a management company to Doctors Clinical Laboratory. It provides tests and testing supplies, software, personal protective equipment and marketing services — online and printed — to testing sites, said a person who was formerly associated with the Center for COVID Control. Some of the sites are owned independently but operate in partnership with the chain under its name and with its guidance.

[…]

Doctors Clinical Lab, the lab Center for COVID Control uses to process tests, makes money by billing patients’ insurance companies or seeking reimbursement from the federal government for testing. Insurance statements reviewed by Block Club show the lab has, in multiple instances, billed insurance companies $325 for a PCR test, $50 for a rapid test, $50 for collecting a person’s sample and $80 for a “supplemental fee.”

In turn, the testing sites are paid for providing samples to the lab to be processed, said a person formerly associated with the Center for COVID Control.

In a January video talking to testing site operators, Syed said the Center for COVID Control will no longer provide them with PCR tests, but it will continue supplying them with rapid tests at a cost of $5 per test. The companies will keep making money for the rapid tests they collect, he said.

“You guys will continue making the $28.50 you’re making for the rapid test,” Syed said in the video.

Read the article for the messy details. Or take a job and see for yourself.

Sam VargheseOld is gold: 1937 crime thriller Death on the Nile is being remade

In recent years, there have been a number of remakes of old films, underlining the fact that people in the industry appear to be running out of good ideas.

That trend will be emphasised in February 2022 when a version of the Agatha Christie novel Death on the Nile is released, with Kenneth Branagh playing the role of the detective Hercule Poirot.

It is worth noting that this film was first made in 1978, with the late Peter Ustinov leading a cast full of big names: Mia Farrow, David Niven, George Kennedy, Olivia Hussey, Angela Lansbury and I.S. Johar.

The film was not exceptional in any way, with Ustinov rendering a rather buffoonish performance as Poirot, who by any standards is at least the second best-known detective of fiction after Sherlock Holmes.

There is also plenty of stupidity in the films starring Ustinov as Poirot. In Evil under the Sun, Ustinov as Poirot agrees with the proprietor of the hotel where a murder takes place not to inform the police after the body is found. In the book, of course, this is not the case as it would be silly to act in this manner and against the law.

But the fact that film producers have to keep turning back to old ideas is of greater note. Christie’s novels and short stories, especially those that feature Poirot, have extremely well-crafted plots that would satisfy even the most demanding of audiences.

A much better version of Death on the Nile was made in 2004 by a British TV company, with David Suchet in the role of Poirot. Suchet brought Poirot to life over a 25-year period of playing the little detective, appearing in 70 films featuring the man.

Probably the one reason why Suchet was so good in this role was because he stuck carefully to the character that Christie had crafted, noting all the little mannerisms and eccentricities that were part of his personality and faithfully reproducing them on screen. He did not try to add anything of his own to the character as Americans often do.

Other well-known actors have also appeared as Poirot: Albert Finney, Ian Holm, Alfred Molina, Austin Trevor, John Moffatt, Tony Randall, Orson Welles and John Malkovich. None of them has taken over the character as Suchet did. It remains to be seen what kind of a performance Branagh will produce though it would be fair to assume that at best he would be a poor second to Suchet.

Branagh played Poirot in a 2017 remake of the film Murder on the Orient Express. The film was a glorious mess compared to the version in which Suchet starred some years earlier.

The new Death on the Nile film will be an American production, even though the director, Branagh, is British. Thus it is very likely that it will be somewhat garish with plenty of embellishments, exactly the kind of thing that has ruined many a film in the past.

Worse Than FailureThe Tech Lead

Years ago, Karthika was working as a contractor. She got hired on to develop an intranet application for a small government project. The website in question was already in use, and was absolutely mission critical for the organization, but it also had a very small user base- roughly five users depended on this application.

When Karthika started, she immediately encountered a few surprises. The first was the size of the team- 8 developers, including a Team Lead. That seemed like a large team for that small number of users, and that didn't even include the management overhead. The code base itself was similarly oversized; while the product was important, it was a pretty prosaic CRUD app with a few tricky financial calculations involved.

The core surprise was how awful the application was to use. It was slow to the point of sometimes timing out in the browser, even when running on your local machine. It was buggy, and even when Karthika patched those bugs, there was so much duplicated code in the system that the same bug would linger hidden in other screens for months. "I thought you said you'd fixed this," was a common refrain from the users.

This was long enough ago that the UI was built in ASP.Net WebForms, but new enough that the data access was handled by Entity Framework. And it was one specific feature of WebForms that they were abusing that made everything terrible: UserControls.

UserControls were designed to let developers create reusable widgets. For example a "User Information" screen may group the "User Name" and "Password" fields into a single "Credentials" UserControl, while the address fields would all get grouped together in an "Address" UserControl. That same "Credentials" control could then be dropped into other pages.

When the user interacts with this data, Entity Framework can lookup a User object, hand it off to the UserControls, who allow the user to manipulate it, and then the controls can invoke the save on the User.

The Tech Lead had encountered a problem with this. You see, he didn't want to share the same reference across controls because of "separation of concerns". So instead, each UserControl would create its own User object, populate it with database values, and then let the user interact with it. This meant when each UserControl had its own picture of the user object, and when it was time to save the data on the page, one control could overwrite the changes made by another control.

So the Tech Lead invented CopyOldValues, a method which, during a save operation, would go out to the database, fetch the current data, and then compare it to the object being saved. Any NULL values in the object being saved would be updated to the database values, and then the object would be saved. This way, a UserControl could have a whole User object, but only populate the fields it was responsible for, leaving the rest as null. So yes, this meant that to save an object to the database, it required two round-trips to the database, per UserControl. And each page could have multiple UserControls.

Karthika saw this, and put together a simple plan to fix this problem: just use the frameworks like they were meant to be used and cut this whole CopyOldValues nonsense out. She went to the Tech Lead and laid out a plan.

"This isn't an issue," he said. "You're wrong to be worrying about this. Stop wasting my time, and stop wasting yours. Instead, you should look into the date bug."

So, Karthika tracked down the issue related to the date bug. Specifically, the database and the application were supposed to allow certain date fields to be NULL. But, since CopyOldValues used NULLs to decide which data to save, it was impossible to update a stored value to a NULL. Once again, the fix was obvious: just stop doing this weird intermediate step.

"Wrong," the Team Lead said. "That's totally not the correct way to do it. I have a better plan already."

The "better plan" was to create a custom save method for each UserControl- of which there were hundreds. Each one of these would define an array which used the string names of each field it was responsible for, and then the object and the array would get passed to a new method, FindDifferences, which would use reflection to inspect the object, copy the updated values to a new object, and prepare to save to the database.

The shocking end result of this, however, is that this made the application even slower. It didn't reduce the number of database round trips, and it added this whole reflection step which made accessing properties even slower. Despite only having five users, and running on a decently powerful machine, it was nigh unusuable. The Team Lead knew what the problem was though: the machine wasn't powerful enough.

Strangely, however, throwing hardware at the problem didn't fix it. So the Team Lead invented his own caching solution, which made things worse. He started reinventing more wheels of Entity Framework and made things worse. He started copy/pasting utility functions into the places they were used to "reduce overhead", which didn't make things worse but made every developer's life demonstrably worse as the repeated code just multiplied.

These problems made the customer angry, and that anger eventually turned into an all hands meeting, with representatives from the client side and the project manager as well. After the venting and complaining was over, the project manager wanted explanations.

"Why," she said, "aren't we able to fix this?"

A round of blamestorming followed, but eventually, Karthika had to get specific and concrete: "We have a set of fixes that could address many of these problems, but the Tech Lead isn't letting us implement them and isn't giving us a good reason why we can't."

The project manager blinked, puzzled. "Who? There's no defined tech lead on this project. You're a team of peers."

"Well," the 'Tech Lead' said, "I… uh… have seniority."

"Seniority?" the project manager asked, no less confused. "You started two weeks earlier, and that was just because you were the one contractor on the bench and we needed someone to knowledge-transfer from the outgoing team."

The Project Manager had been overwhelmed by handling customer complaints, and hadn't been able to carve out time to attend any of the development team meetings. This meant that the Tech Lead's self-appointed promotion went unnoticed for eight months. At this point, the project was too far off the rails for any hope of recovery. The government office "fired" the contracting firm the next week, and all the developers, including Karthika, were fired from the contracting firm the week after that.

[Advertisement] BuildMaster allows you to create a self-service release management platform that allows different teams to manage their applications. Explore how!

Charles StrossBrief commercial interlude

Thanks to COVID19 I'm not currently attending SF conventions in person, or traveling.

This means that for the time being there is only one source of signed copies of my books: Transreal Fiction in Edinburgh. Follow the link to order copies for mail delivery within the UK.

(You can also email for details of international postage, but be warned, Brexit has messed everything up, and we have a pandemic and a print supply chain crunch on top.)

Note that Transreal is not currently open to walk-ins—the ceiling collapsed just before Christmas, and Mike has the builders in. Hopefully he'll reopen within a week or two: in the meantime, he's operating as mail-order only.

Update (16 January): Supply chain issues have intervened and not all Transreal's stock has arrived yet. I'm staying home to avoid Omicron (I have a book to finish, I do not need COVID-induced brain fog), so I'm deferring my trip to Transreal to sign stock until they're all ready for me. This will not be before Friday 21st—most likely in the week beginning Monday 24th.

Planet DebianJoey Hess: encountered near the start of a new chapter

,

Cryptogram UK Government to Launch PR Campaign Undermining End-to-End Encryption

Rolling Stone is reporting that the UK government has hired the M&C Saatchi advertising agency to launch an anti-encryption advertising campaign. Presumably they’ll lean heavily on the “think of the children!” rhetoric we’re seeing in this current wave of the crypto wars. The technical eavesdropping mechanisms have shifted to client-side scanning, which won’t actually help — but since that’s not really the point, it’s not argued on its merits.

Planet DebianRuss Allbery: DocKnot 7.00

The recent 6.01 release of my static web site generator was kind of a buggy mess, which uncovered a bunch of holes in my test suite and immediately turned up problems when I tried to use it to rebuild my actual web site. Most of the problems were Unicode-related; this release hopefully sorts out Unicode properly and handles it consistently.

Other bugs fixed include processing of old-style pointers in a spin input tree, several rather obvious bugs in the new docknot release command, and a few long-standing issues with docknot dist that should make its results more consistent and reliable.

I also got on a roll and finished the Path::Tiny transition in DocKnot, so now (nearly) all paths are internally represented as Path::Tiny objects. This meant changing some APIs, hence the version bump to 7.00.

For anyone who still does a lot of Perl, I highly recommend the Path::Tiny module. If you also write Python, you will be reminded (in a good way) of Python's pathlib module, which I now use whenever possible.

You can get the latest version of DocKnot from CPAN or from its distribution page.

Planet DebianWouter Verhelst: Different types of Backups

In my previous post, I explained how I recently set up backups for my home server to be synced using Amazon's services. I received a (correct) comment on that by Iustin Pop which pointed out that while it is reasonably cheap to upload data into Amazon's offering, the reverse -- extracting data -- is not as cheap.

He is right, in that extracting data from S3 Glacier Deep Archive costs over an order of magnitude more than it costs to store it there on a monthly basis -- in my case, I expect to have to pay somewhere in the vicinity of 300-400 USD for a full restore. However, I do not consider this to be a major problem, as these backups are only to fulfill the rarer of the two types of backups cases.

There are two reasons why you should have backups.

The first is the most common one: "oops, I shouldn't have deleted that file". This happens reasonably often; people will occasionally delete or edit a file that they did not mean to, and then they will want to recover their data. At my first job, a significant part of my job was to handle recovery requests from users who had accidentally deleted a file that they still needed.

Ideally, backups to handle this type of situation are easily accessible to end users, and are performed reasonably frequently. A system that automatically creates and deletes filesystem snapshots (such as the zfsnap script for ZFS snapshots, which I use on my server) works well. The crucial bit here is to ensure that it is easier to copy an older version of a file than it is to start again from scratch -- if a user must file a support request that may or may not be answered within a day or so, it is likely they will not do so for a file they were working on for only half a day, which means they lose half a day of work in such a case. If, on the other hand, they can just go into the snapshots directory themselves and it takes them all of two minutes to copy their file, then they will also do that for files they only created half an hour ago, so they don't even lose half an hour of work and can get right back to it. This means that backup strategies to mitigate the "oops I lost a file" case ideally do not involve off-site file storage, and instead are performed online.

The second case is the much rarer one, but (when required) has the much bigger impact: "oops the building burned down". Variants of this can involve things like lightning strikes, thieves, earth quakes, and the like; in all cases, the point is that you want to be able to recover all your files, even if every piece of equipment you own is no longer usable.

That being the case, you will first need to replace that equipment, which is not going to be cheap, and it is also not going to be an overnight thing. In order to still be useful after you lost all your equipment, they must also be stored off-site, and should preferably be offline backups, too. Since replacing your equipment is going to cost you time and money, it's fine if restoring the backups is going to take a while -- you can't really restore from backup any time soon anyway. And since you will lose a number of days of content that you can't create when you can only fall back on your off-site backups, it's fine if you also lose a few days of content that you will have to re-create.

All in all, the two types of backups have opposing requirements: "oops I lost a file" backups should be performed often and should be easily available; "oops I lost my building" backups should not be easily available, and are ideally done less often, so you don't pay a high amount of money for storage of your off-sites.

In my opinion, if you have good "lost my file" backups, then it's also fine if the recovery of your backups are a bit more expensive. You don't expect to have to ever pay for these; you may end up with a situation where you don't have a choice, and then you'll be happy that the choice is there, but as long as you can reasonably pay for the worst case scenario of a full restore, it's not a case you should be worried about much.

As such, and given that a full restore from Amazon Storage Gateway is going to be somewhere between 300 and 400 USD for my case -- a price I can afford, although it's not something I want to pay every day -- I don't think it's a major issue that extracting data is significantly more expensive than uploading data.

But of course, this is something everyone should consider for themselves...

Worse Than FailureCodeSOD: Classic WTF: The Old Ways

It's a holiday in the US today, so we're taking a trip into the past for a haunting classic about how things used to be. Original. -- Remy

Greg never thought he’d meet a real-life mentat.

“We’re so happy to have you aboard,” said Jordan, the CEO of IniTech. She showed Greg to the back end of the office, to a closed door marked with just one word: Frank. Jordan, not bothering to knock, opening the door.

A mentat from the film Dune

Greg was overwhelmed with the stench of burned coffee and old-man smell. The office was unadorned and dark, the blinds drawn, illuminated by the blue light coming from an aging CRT screen. He saw a wrinkled scalp behind a tall, black office chair.

“I’m busy,” Frank said.

Jordan cleared her throat. “This is your new programming partner.”

“I’m Greg. It’s nice to meet you–” Greg offered his hand, but a wrinkled appendage slapped it away.

“Get yourself a chair. I know where everything is. You just show me you can type.”

Greg shot Jordan a glance as they left Frank’s office.

“He’s been with us 22 years,” she said. “He knows everything about our code. But his typing’s not what it used to be. Just do what he says. With some luck he’ll be retiring in a few months.”

Total Recall

Greg pulled a spare office chair into Frank’s den. He could see Frank’s face in profile now, resembling the mummy of Rameses II. Frank slid his keyboard to Greg. “Open C:\project.make in Vim,” Frank said, “and go to line 22.”

Greg thought it was odd that a makefile would right under C:\, but he did so. He moved the cursor to line 22.

“Increment $VERSION to 8.3.3.”

Greg noticed that Frank had his eyes shut, but humored him. In fact, line 22 did declare a $VERSION constant, and Greg changed it to 8.3.3.

“You’ll be suitable,” Frank said, crossing his arms. “You’ll do your work from the SMB server. Don’t make any changes without my authorization first.”

Change Management

Back at his desk, Greg found the SMB server where Frank kept all of his code. Or rather, the SMB mapped all of the files on Frank’s hard drive. Curious, Greg searched for .pas, .make, and other source files, wondering why Frank would keep his principle makefile under C:\.

There were 440 source files, about 200 megabytes, spread out all over the directory strucure. C:\Windows\System32, C:\Users\Shared\Project, C:\Program Files\… Frank’s entire computer was the de facto source repository.

Greg knew if he ever had to make an on-the-fly change to the source, it would take hours just tracking down the right file on SMB. Surely they had a repository he could check changes into. Greg took a deep breath and re-entered Frank’s den.

“Frank, do we have any of this in a repo somewhere? I don’t want to SMB onto your computer every time we make a change. What if we have to patch something overnight?”

“What?!” Frank rose from his office chair, unsteady on his disused legs. “There will be no code changes without my direct supervision! It’s worked just fine for 22 years. Is that understood?”

In Memory

Greg endured this for several months. Frank would harbor no suggestions of version control or repos. Everything, Frank said, was in his head. As long as no one changed the source without his permission, he would know where everything was.

Despite his frustrations, it greatly impressed Greg. Especially when Frank had memorized loop variables such as these:

for RecursiveWaypointCompressionThreadModuleIndexVerifierPropertyHandleIndex := 1 to 99 do ...  

Less amusing was Frank’s insistence on using HEX constants for any encoded string. “You can’t trust any string encoding,” Frank said. It even extended to embedded web pages in their embedded manual:

const
    ThirdWebPage : array of byte = [ $2d, $20, ... 660k OF HEX CONSTS..... ];
    JQuery33WebPage : array of byte = [ $2d, $20, ... 3,660k OF HEX CONSTS..... ];  

But Greg wondered. What would happen if he slipped in just a little change? How long would it take before Frank found out?

One night, he came into the office and logged into Frank’s SMB server. He opened a file and found an innocuous for-loop block. He replaced the twenty-something variable name with i, saved a backup on his own machine, and went home.

Greg arrived in the office late that morning, stuck in traffic, and was met by Jordan at the door. “Keep this quiet, but Frank just passed away.”

“Was it last night?”

“Brain aneurysm in his sleep.”

Frank probably died before he had a chance to see Greg’s unauthorized change. Greg would never know if Frank actually had the entire codebase memorized. Sometimes Greg would memorize a line or two, or find himself looking up mnemonic tricks to remember long sequences of characters. But it wasn’t like Frank rubbed off on him. Not really.

[Advertisement] Keep the plebs out of prod. Restrict NuGet feed privileges with ProGet. Learn more.

Planet DebianMatthew Garrett: Boot Guard and PSB have user-hostile defaults

Compromising an OS without it being detectable is hard. Modern operating systems support the imposition of a security policy or the launch of some sort of monitoring agent sufficient early in boot that even if you compromise the OS, you're probably going to have left some sort of detectable trace[1]. You can avoid this by attacking the lower layers - if you compromise the bootloader then it can just hotpatch a backdoor into the kernel before executing it, for instance.

This is avoided via one of two mechanisms. Measured boot (such as TPM-based Trusted Boot) makes a tamper-proof cryptographic record of what the system booted, with each component in turn creating a measurement of the next component in the boot chain. If a component is tampered with, its measurement will be different. This can be used to either prevent the release of a cryptographic secret if the boot chain is modified (for instance, using the TPM to encrypt the disk encryption key), or can be used to attest the boot state to another device which can tell you whether you're safe or not. The other approach is verified boot (such as UEFI Secure Boot), where each component in the boot chain verifies the next component before executing it. If the verification fails, execution halts.

In both cases, each component in the boot chain measures and/or verifies the next. But something needs to be the first link in this chain, and traditionally this was the system firmware. Which means you could tamper with the system firmware and subvert the entire process - either have the firmware patch the bootloader in RAM after measuring or verifying it, or just load a modified bootloader and lie about the measurements or ignore the verification. Attackers had already been targeting the firmware (Hacking Team had something along these lines, although this was pre-secure boot so just dropped a rootkit into the OS), and given a well-implemented measured and verified boot chain, the firmware becomes an even more attractive target.

Intel's Boot Guard and AMD's Platform Secure Boot attempt to solve this problem by moving the validation of the core system firmware to an (approximately) immutable environment. Intel's solution involves the Management Engine, a separate x86 core integrated into the motherboard chipset. The ME's boot ROM verifies a signature on its firmware before executing it, and once the ME is up it verifies that the system firmware's bootblock is signed using a public key that corresponds to a hash blown into one-time programmable fuses in the chipset. What happens next depends on policy - it can either prevent the system from booting, allow the system to boot to recover the firmware but automatically shut it down after a while, or flag the failure but allow the system to boot anyway. Most policies will also involve a measurement of the bootblock being pushed into the TPM.

AMD's Platform Secure Boot is slightly different. Rather than the root of trust living in the motherboard chipset, it's in AMD's Platform Security Processor which is incorporated directly onto the CPU die. Similar to Boot Guard, the PSP has ROM that verifies the PSP's own firmware, and then that firmware verifies the system firmware signature against a set of blown fuses in the CPU. If that fails, system boot is halted. I'm having trouble finding decent technical documentation about PSB, and what I have found doesn't mention measuring anything into the TPM - if this is the case, PSB only implements verified boot, not measured boot.

What's the practical upshot of this? The first is that you can't replace the system firmware with anything that doesn't have a valid signature, which effectively means you're locked into firmware the vendor chooses to sign. This prevents replacing the system firmware with either a replacement implementation (such as Coreboot) or a modified version of the original implementation (such as firmware that disables locking of CPU functionality or removes hardware allowlists). In this respect, enforcing system firmware verification works against the user rather than benefiting them.
Of course, it also prevents an attacker from doing the same thing, but while this is a real threat to some users, I think it's hard to say that it's a realistic threat for most users.

The problem is that vendors are shipping with Boot Guard and (increasingly) PSB enabled by default. In the AMD case this causes another problem - because the fuses are in the CPU itself, a CPU that's had PSB enabled is no longer compatible with any motherboards running firmware that wasn't signed with the same key. If a user wants to upgrade their system's CPU, they're effectively unable to sell the old one. But in both scenarios, the user's ability to control what their system is running is reduced.

As I said, the threat that these technologies seek to protect against is real. If you're a large company that handles a lot of sensitive data, you should probably worry about it. If you're a journalist or an activist dealing with governments that have a track record of targeting people like you, it should probably be part of your threat model. But otherwise, the probability of you being hit by a purely userland attack is so ludicrously high compared to you being targeted this way that it's just not a big deal.

I think there's a more reasonable tradeoff than where we've ended up. Tying things like disk encryption secrets to TPM state means that if the system firmware is measured into the TPM prior to being executed, we can at least detect that the firmware has been tampered with. In this case nothing prevents the firmware being modified, there's just a record in your TPM that it's no longer the same as it was when you encrypted the secret. So, here's what I'd suggest:

1) The default behaviour of technologies like Boot Guard or PSB should be to measure the firmware signing key and whether the firmware has a valid signature into PCR 7 (the TPM register that is also used to record which UEFI Secure Boot signing key is used to verify the bootloader).
2) If the PCR 7 value changes, the disk encryption key release will be blocked, and the user will be redirected to a key recovery process. This should include remote attestation, allowing the user to be informed that their firmware signing situation has changed.
3) Tooling should be provided to switch the policy from merely measuring to verifying, and users at meaningful risk of firmware-based attacks should be encouraged to make use of this tooling

This would allow users to replace their system firmware at will, at the cost of having to re-seal their disk encryption keys against the new TPM measurements. It would provide enough information that, in the (unlikely for most users) scenario that their firmware has actually been modified without their knowledge, they can identify that. And it would allow users who are at high risk to switch to a higher security state, and for hardware that is explicitly intended to be resilient against attacks to have different defaults.

This is frustratingly close to possible with Boot Guard, but I don't think it's quite there. Before you've blown the Boot Guard fuses, the Boot Guard policy can be read out of flash. This means that you can drop a Boot Guard configuration into flash telling the ME to measure the firmware but not prevent it from running. But there are two problems remaining:

1) The measurement is made into PCR 0, and PCR 0 changes every time your firmware is updated. That makes it a bad default for sealing encryption keys.
2) It doesn't look like the policy is measured before being enforced. This means that an attacker can simply reflash modified firmware with a policy that disables measurement and then make a fake measurement that makes it look like the firmware is ok.

Fixing this seems simple enough - the Boot Guard policy should always be measured, and measurements of the policy and the signing key should be made into a PCR other than PCR 0. If an attacker modified the policy, the PCR value would change. If an attacker modified the firmware without modifying the policy, the PCR value would also change. People who are at high risk would run an app that would blow the Boot Guard policy into fuses rather than just relying on the copy in flash, and enable verification as well as measurement. Now if an attacker tampers with the firmware, the system simply refuses to boot and the attacker doesn't get anything.

Things are harder on the AMD side. I can't find any indication that PSB supports measuring the firmware at all, which obviously makes this approach impossible. I'm somewhat surprised by that, and so wouldn't be surprised if it does do a measurement somewhere. If it doesn't, there's a rather more significant problem - if a system has a socketed CPU, and someone has sufficient physical access to replace the firmware, they can just swap out the CPU as well with one that doesn't have PSB enabled. Under normal circumstances the system firmware can detect this and prompt the user, but given that the attacker has just replaced the firmware we can assume that they'd do so with firmware that doesn't decide to tell the user what just happened. In the absence of better documentation, it's extremely hard to say that PSB actually provides meaningful security benefits.

So, overall: I think Boot Guard protects against a real-world attack that matters to a small but important set of targets. I think most of its benefits could be provided in a way that still gave users control over their system firmware, while also permitting high-risk targets to opt-in to stronger guarantees. Based on what's publicly documented about PSB, it's hard to say that it provides real-world security benefits for anyone at present. In both cases, what's actually shipping reduces the control people have over their systems, and should be considered user-hostile.

[1] Assuming that someone's both turning this on and actually looking at the data produced

comment count unavailable comments

David BrinScience updates: A focus on biotech and biology wonders!

Ever more it is a world where biology becomes the foremost science. That is, if we can save science (and all other fact professions) from those seeking to impose a new Dark Age.

For starters: 

== Biotech updates ==

In the journal Neuron, a team of researchers expected to show biological neurons are more complex—they were surprised at just how much more complex they actually are. They found it took a five- to eight-layer neural network, or nearly 1,000 artificial neurons, to mimic the behavior of a single biological neuron from the brain’s cortex. They called this an upper bound to complexity, but I doubt that aspect, and predict we will find computational aspects to the glial and astrocyte cells that surround neurons in a functioning brain.

From where does this complexity arise? As it turns out, it’s mostly due to a type of chemical receptor in dendrites—the NMDA ion channel—and the branching of dendrites in space. “Take away one of those things, and a neuron turns [into] a simple device.” Alas, this model is actually theoretical. Measurement in actual neurons will have to wait.

And of course, all of this complexity is before admitting to the possibility that quantum effects are involved, akin to Penrose-Hameroff theory.

How are nerves controlled? Some invertebrates, such as the hydra, can regenerate their heads after decapitation. Researchers are studying "which genes are switched on and off during regeneration and how they're controlled."

Meanwhile, the origins of some of our ‘junk DNA” may go back to the origins of mammals, in ways creepily like my chilling-creepy story “Chrysalis.”


== More bio wonders ==


A decade after gene therapy, children born with deadly immune disorder remain healthy. 


An anti-aging vaccine? Japanese researchers are developing a vaccine to remove "zombie cells," senescent cells that accumulate with age - can can harm nearby cells by releasing chemicals that lead to inflammation.


Researchers discovered a bizarre way that a cancer cell can disarm its would-be cellular attackers by extending out nanoscale tentacles that can reach into an immune cell and pull out its powerpack mitochondria. One more reason to believe there must be something more to cancer than just wild, malfunctioning reproduction. Again, see my story "Chrysalis" for a theory about that... one that triggered correspondence with researchers


Almost yearly, we learn of yet another promising treatment for spinal injury and paralysis. This one using ‘dancing’ molecules appears to have truly breakthrough effects on neural connection restoration. 


The rise of multidrug-resistant bacteria has already led to a significant increase in human disease and death. The U.S. Centers for Disease Control and Prevention estimates that approximately 2.8 million people worldwide are infected with antibiotic-resistant bacteria, accounting for 35,000 deaths each year in the U.S. and 700,000 deaths around the globe.


Researchers at Vanderbilt University have identified nanoparticles released from cells - supermeres - which transmit chemical 'messages' between cells. These may serve as biomarkers for disease.


Nanome is a UCSD spinoff that uses VR and Augmented Reality to visualize complex molecules for science, pharma and other advanced uses. Take a look at their great new demo video. Full disclosure: I am on the advisory board. 


Gradually, some companies are coming to realize what some of us forecast long ago, e.g. in novels of Vernor Vinge – that the ‘neurodivergent” or folks along the autism spectrum often have traits that make them superior employees at many kinds of tasks. Adjustments to interview processes have opened doors and assessments show good results and now the trend is growing in India. Oh, but there are five very different "spectrum people" with roles in my novel EXISTENCE.


Can poor nutrition and ultra-processed foods contribute to irritability and outbursts of angry rhetoric? 


== Adaptive animals ==

Increasingly, researchers are gaining up-close insights into animal behaviors in the wild - using bio-mimetic robots, realistic-looking programmed versions embedded in the swarm, herd, flock or school of animals. Robotic bees, falcons, termites and fish are some of the early experiments that have yielded fresh insights into animal's social behavior.

While it’s long been known that some fish and amphibians can do parthenogenesis… females producing young without contributions from a male… it is very rare among warm-blooded creatures. But lately it’s proved that California Condors have done it recently, much as in my novel Glory Season.

A fascinating article on The Post-Human Dog: Much like the History Channel show Life After People, a new book - A Dog's World: Imagining the lives of dogs in a world without humans - by J. Pierce and M. Bekoff imagines possible future evolutionary trajectories for how our canine friends would adapt and survive in the absence of humans. Though large numbers would die off in the beginning, others would go feral and spread to newly changed ecological niches across planet earth.

And a fascinating look backward: The bizarre dog types that time forgot: a vast variety of canines that no longer exist: wooly dogs, vegetarian dogs, lion-fighting dogs and other working dogs - chronicled in The Invention of the Modern Dog, when the Victorians instigated and propagated rigorous 'breeds' of dogs.

Talking with cetaceans? A project is underway, using advanced machine learning methods to parse the language (if any) of sperm whales. It will be an ambitious undertaking, calling for drones and robots to collect data on whale actions, to correlate with the utterances... hoping the robots won't interfere or bother the creatures, lest most of the translations turn out to be stuff like "I knew I shouldn't have swallowed that thing; it complains more than Jonah did!"


== And pig hearts... ==

Yes, sure. Xenotransplantation is a big deal. More later.


And finally....


The rapid progress true Science now makes, occasions my Regretting sometimes that I was born so soon. It is impossible to imagine the Height to which may be carried in a 1000 Years the Power of Man over Matter. We may perhaps learn to deprive large Masses of their Gravity & give them absolute Levity, for the sake of easy Transport. Agriculture may diminish its Labour & double its Produce. All Diseases may by sure means be prevented or cured, not excepting even that of Old Age, and our Lives lengthened at pleasure even beyond the antediluvian Standard. O that moral Science were in as fair a Way of Improvement, that Men would cease to be Wolves to one another, and the human Beings would at length learn what they now improperly call Humanity. 


                        —Benjamin Franklin




,

Planet DebianChris Lamb: Favourite films of 2021

In my four most recent posts, I went over the memoirs and biographies, the non-fiction, the fiction and the 'classic' novels that I enjoyed reading the most in 2021. But in the very last of my 2021 roundup posts, I'll be going over some of my favourite movies. (Saying that, these are perhaps less of my 'favourite films' than the ones worth remarking on — after all, nobody needs to hear that The Godfather is a good movie.)

It's probably helpful to remark you that I took a self-directed course in film history in 2021, based around the first volume of Roger Ebert's The Great Movies. This collection of 100-odd movie essays aims to “make a tour of the landmarks of the first century of cinema,” and I watched all but a handul before the year was out. I am slowly making my way through volume two in 2022. This tome was tremendously useful, and not simply due to the background context that Ebert added to each film: it also brought me into contact with films I would have hardly come through some other means. Would I have ever discovered the sly comedy of Trouble in Paradise (1932) or the touching proto-realism of L'Atalante (1934) any other way? It also helped me to 'get around' to watching films I may have put off watching forever — the influential Battleship Potemkin (1925), for instance, and the ur-epic Lawrence of Arabia (1962) spring to mind here.

Choosing a 'worst' film is perhaps more difficult than choosing the best. There are first those that left me completely dry (Ready or Not, Written on the Wind, etc.), and those that were simply poorly executed. And there are those that failed to meet their own high opinions of themselves, such as the 'made for Reddit' Tenet (2020) or the inscrutable Vanilla Sky (2001) — the latter being an almost perfect example of late-20th century cultural exhaustion.

But I must save my most severe judgement for those films where I took a visceral dislike how their subjects were portrayed. The sexually problematic Sixteen Candles (1984) and the pseudo-Catholic vigilantism of The Boondock Saints (1999) both spring to mind here, the latter of which combines so many things I dislike into such a short running time I'd need an entire essay to adequately express how much I disliked it.

§

Dogtooth (2009)

A father, a mother, a brother and two sisters live in a large and affluent house behind a very high wall and an always-locked gate. Only the father ever leaves the property, driving to the factory that he happens to own. Dogtooth goes far beyond any allusion to Josef Fritzl's cellar, though, as the children's education is a grotesque parody of home-schooling. Here, the parents deliberately teach their children the wrong meaning of words (e.g. a yellow flower is called a 'zombie'), all of which renders the outside world utterly meaningless and unreadable, and completely mystifying its very existence. It is this creepy strangeness within a 'regular' family unit in Dogtooth that is both socially and epistemically horrific, and I'll say nothing here of its sexual elements as well.

Despite its cold, inscrutable and deadpan surreality, Dogtooth invites all manner of potential interpretations. Is this film about the artificiality of the nuclear family that the West insists is the benchmark of normality? Or is it, as I prefer to believe, something more visceral altogether: an allegory for the various forms of ontological violence wrought by fascism, as well a sobering nod towards some of fascism's inherent appeals? (Perhaps it is both. In 1972, French poststructuralists Gilles and Félix Guattari wrote Anti-Oedipus, which plays with the idea of the family unit as a metaphor for the authoritarian state.) The Greek-language Dogtooth, elegantly shot, thankfully provides no easy answers.

§

Holy Motors (2012)

There is an infamous scene in Un Chien Andalou, the 1929 film collaboration between Luis Buñuel and famed artist Salvador Dalí. A young woman is cornered in her own apartment by a threatening man, and she reaches for a tennis racquet in self-defence. But the man suddenly picks up two nearby ropes and drags into the frame two large grand pianos... each leaden with a dead donkey, a stone tablet, a pumpkin and a bewildered priest.

This bizarre sketch serves as a better introduction to Leos Carax's Holy Motors than any elementary outline of its plot, which ostensibly follows 24 hours in the life of a man who must play a number of extremely diverse roles around Paris... all for no apparent reason. (And is he even a man?) Surrealism as an art movement gets a pretty bad wrap these days, and perhaps justifiably so. But Holy Motors and Un Chien Andalou serve as a good reminder that surrealism can be, well, 'good, actually'. And if not quite high art, Holy Motors at least demonstrates that surrealism can still unnerving and hilariously funny. Indeed, recalling the whimsy of the plot to a close friend, the tears of laughter came unbidden to my eyes once again. ("And then the limousines...!")

Still, it is unclear how Holy Motors truly refreshes surrealism for the twenty-first century. Surrealism was, in part, a reaction to the mechanical and unfeeling brutality of World War I and ultimately sought to release the creative potential of the unconscious mind. Holy Motors cannot be responding to another continental conflagration, and so it appears to me to be some kind of commentary on the roles we exhibit in an era of 'post-postmodernity': a sketch on our age of performative authenticity, perhaps, or an idle doodle on the function and psychosocial function of work.

Or perhaps not. After all, this film was produced in a time that offers the near-universal availability of mind-altering substances, and this certainly changes the context in which this film was both created. And, how can I put it, was intended to be watched.

§

Manchester by the Sea (2016)

An absolutely devastating portrayal of a character who is unable to forgive himself and is hesitant to engage with anyone ever again. It features a near-ideal balance between portraying unrecoverable anguish and tender warmth, and is paradoxically grandiose in its subtle intimacy. The mechanics of life led me to watch this lying on a bed in a chain hotel by Heathrow Airport, and if this colourless circumstance blunted the film's emotional impact on me, I am probably thankful for it. Indeed, I find myself reduced in this review to fatuously recalling my favourite interactions instead of providing any real commentary. You could write a whole essay about one particular incident: its surfaces, subtexts and angles... all despite nothing of any substance ever being communicated. Truly stunning.

§

McCabe & Mrs. Miller (1971)

Roger Ebert called this movie “one of the saddest films I have ever seen, filled with a yearning for love and home that will not ever come.” But whilst it is difficult to disagree with his sentiment, Ebert's choice of “sad” is somehow not quite the right word. Indeed, I've long regretted that our dictionaries don't have more nuanced blends of tragedy and sadness; perhaps the Ancient Greeks can loan us some.

Nevertheless, the plot of this film is of a gambler and a prostitute who become business partners in a new and remote mining town called Presbyterian Church. However, as their town and enterprise booms, it comes to the attention of a large mining corporation who want to bully or buy their way into the action. What makes this film stand out is not the plot itself, however, but its mood and tone — the town and its inhabitants seem to be thrown together out of raw lumber, covered alternatively in mud or frozen ice, and their days (and their personalities) are both short and dark in equal measure.

As a brief aside, if you haven't seen a Roger Altman film before, this has all the trappings of being a good introduction. As Ebert went on to observe: “This is not the kind of movie where the characters are introduced. They are all already here.” Furthermore, we can see some of Altman's trademark conversations that overlap, a superb handling of ensemble casts, and a quietly subversive view of the tyranny of 'genre'... and the latter in a time when the appetite for revisionist portrays of the West was not very strong. All of these 'Altmanian' trademarks can be ordered in much stronger measures in his later films: in particular, his comedy-drama Nashville (1975) has 24 main characters, and my jejune interpretation of Gosford Park (2001) is that it is purposefully designed to poke fun those who take a reductionist view of 'genre', or at least on the audience's expectations. (In this case, an Edwardian-era English murder mystery in the style of Agatha Christie, but where no real murder or detection really takes place.)

On the other hand, McCabe & Mrs. Miller is actually a poor introduction to Altman. The story is told in a suitable deliberate and slow tempo, and the two stars of the film are shown thoroughly defrocked of any 'star status', in both the visual and moral dimensions. All of these traits are, however, this film's strength, adding up to a credible, fascinating and riveting portrayal of the old West.

§

Detour (1945)

Detour was filmed in less than a week, and it's difficult to decide — out of the actors and the screenplay — which is its weakest point.... Yet it still somehow seemed to drag me in.

The plot revolves around luckless Al who is hitchhiking to California. Al gets a lift from a man called Haskell who quickly falls down dead from a heart attack. Al quickly buries the body and takes Haskell's money, car and identification, believing that the police will believe Al murdered him. An unstable element is soon introduced in the guise of Vera, who, through a set of coincidences that stretches credulity, knows that this 'new' Haskell (ie. Al pretending to be him) is not who he seems. Vera then attaches herself to Al in order to blackmail him, and the world starts to spin out of his control.

It must be understood that none of this is executed very well. Rather, what makes Detour so interesting to watch is that its 'errors' lend a distinctively creepy and unnatural hue to the film. Indeed, in the early twentieth century, Sigmund Freud used the word unheimlich to describe the experience of something that is not simply mysterious, but something creepy in a strangely familiar way. This is almost the perfect description of watching Detour — its eerie nature means that we are not only frequently second-guessed about where the film is going, but are often uncertain whether we are watching the usual objective perspective offered by cinema.

In particular, are all the ham-fisted segues, stilted dialogue and inscrutable character motivations actually a product of Al inventing a story for the viewer? Did he murder Haskell after all, despite the film 'showing' us that Haskell died of natural causes? In other words, are we watching what Al wants us to believe? Regardless of the answers to these questions, the film succeeds precisely because of its accidental or inadvertent choices, so it is an implicit reminder that seeking the director's original intention in any piece of art is a complete mirage. Detour is certainly not a good film, but it just might be a great one. (It is a short film too, and, out of copyright, it is available online for free.)

§

Safe (1995)

Safe is a subtly disturbing film about an upper-middle-class housewife who begins to complain about vague symptoms of illness. Initially claiming that she “doesn't feel right,” Carol starts to have unexplained headaches, a dry cough and nosebleeds, and eventually begins to have trouble breathing. Carol's family doctor treats her concerns with little care, and suggests to her husband that she sees a psychiatrist.

Yet Carol's episodes soon escalate. For example, as a 'homemaker' and with nothing else to occupy her, Carol's orders a new couch for a party. But when the store delivers the wrong one (although it is not altogether clear that they did), Carol has a near breakdown. Unsure where to turn, an 'allergist' tells Carol she has "Environmental Illness," and so Carol eventually checks herself into a new-age commune filled with alternative therapies.

On the surface, Safe is thus a film about the increasing about of pesticides and chemicals in our lives, something that was clearly felt far more viscerally in the 1990s. But it is also a film about how lack of genuine healthcare for women must be seen as a critical factor in the rise of crank medicine. (Indeed, it made for something of an uncomfortable watch during the coronavirus lockdown.) More interestingly, however, Safe gently-yet-critically examines the psychosocial causes that may be aggravating Carol's illnesses, including her vacant marriage, her hollow friends and the 'empty calorie' stimulus of suburbia. None of this should be especially new to anyone: the gendered Victorian term 'hysterical' is often all but spoken throughout this film, and perhaps from the very invention of modern medicine, women's symptoms have often regularly minimised or outright dismissed. (Hilary Mantel's 2003 memoir, Giving Up the Ghost is especially harrowing on this.)

As I opened this review, the film is subtle in its messaging. Just to take one example from many, the sound of the cars is always just a fraction too loud: there's a scene where a group is eating dinner with a road in the background, and the total effect can be seen as representing the toxic fumes of modernity invading our social lives and health. I won't spoiler the conclusion of this quietly devasting film, but don't expect a happy ending.

§

The Driver (1978)

Critics grossly misunderstood The Driver when it was first released. They interpreted the cold and unemotional affect of the characters with the lack of developmental depth, instead of representing their dissociation from the society around them. This reading was encouraged by the fact that the principal actors aren't given real names and are instead known simply by their archetypes instead: 'The Driver', 'The Detective', 'The Player' and so on. This sort of quasi-Jungian erudition is common in many crime films today (Reservoir Dogs, Kill Bill, Layer Cake, Fight Club), so the critics' misconceptions were entirely reasonable in 1978.

The plot of The Driver involves the eponymous Driver, a noted getaway driver for robberies in Los Angeles. His exceptional talent has far prevented him from being captured thus far, so the Detective attempts to catch the Driver by pardoning another gang if they help convict the Driver via a set-up robbery. To give himself an edge, however, The Driver seeks help from the femme fatale 'Player' in order to mislead the Detective.

If this all sounds eerily familiar, you would not be far wrong. The film was essentially remade by Nicolas Winding Refn as Drive (2011) and in Edgar Wright's 2017 Baby Driver. Yet The Driver offers something that these neon-noir variants do not. In particular, the car chases around Los Angeles are some of the most captivating I've seen: they aren't thrilling in the sense of tyre squeals, explosions and flying boxes, but rather the vehicles come across like wild animals hunting one another. This feels especially so when the police are hunting The Driver, which feels less like a low-stakes game of cat and mouse than a pack of feral animals working together — a gang who will tear apart their prey if they find him. In contrast to the undercar neon glow of the Fast & Furious franchise, the urban realism backdrop of the The Driver's LA metropolis contributes to a sincere feeling of artistic fidelity as well.

To be sure, most of this is present in the truly-excellent Drive, where the chase scenes do really communicate a credible sense of stakes. But the substitution of The Driver's grit with Drive's soft neon tilts it slightly towards that common affliction of crime movies: style over substance. Nevertheless, I can highly recommend watching The Driver and Drive together, as it can tell you a lot about the disconnected socioeconomic practices of the 1980s compared to the 2010s. More than that, however, the pseudo-1980s synthwave soundtrack of Drive captures something crucial to analysing the world of today. In particular, these 'sounds from the past filtered through the present' bring to mind the increasing role of nostalgia for lost futures in the culture of today, where temporality and pop culture references are almost-exclusively citational and commemorational.

§

The Souvenir (2019)

The ostensible outline of this quietly understated film follows a shy but ambitious film student who falls into an emotionally fraught relationship with a charismatic but untrustworthy older man. But that doesn't quite cover the plot at all, for not only is The Souvenir a film about a young artist who is inspired, derailed and ultimately strengthened by a toxic relationship, it is also partly a coming-of-age drama, a subtle portrait of class and, finally, a film about the making of a film.

Still, one of the geniuses of this truly heartbreaking movie is that none of these many elements crowds out the other. It never, ever feels rushed. Indeed, there are many scenes where the camera simply 'sits there' and quietly observes what is going on. Other films might smother themselves through references to 18th-century oil paintings, but The Souvenir somehow evades this too. And there's a certain ring of credibility to the story as well, no doubt in part due to the fact it is based on director Joanna Hogg's own experiences at film school. A beautifully observed and multi-layered film; I'll be happy if the sequel is one-half as good.

§

The Wrestler (2008)

Randy 'The Ram' Robinson is long past his prime, but he is still rarin' to go in the local pro-wrestling circuit. Yet after a brutal beating that seriously threatens his health, Randy hangs up his tights and pursues a serious relationship... and even tries to reconnect with his estranged daughter. But Randy can't resist the lure of the ring, and readies himself for a comeback.

The stage is thus set for Darren Aronofsky's The Wrestler, which is essentially about what drives Randy back to the ring. To be sure, Randy derives much of his money from wrestling as well as his 'fitness', self-image, self-esteem and self-worth. Oh, it's no use insisting that wrestling is fake, for the sport is, needless to say, Randy's identity; it's not for nothing that this film is called The Wrestler.

In a number of ways, The Sound of Metal (2019) is both a reaction to (and a quiet remake of) The Wrestler, if only because both movies utilise 'cool' professions to explore such questions of identity. But perhaps simply when The Wrestler was produced makes it the superior film. Indeed, the role of time feels very important for the Wrestler. In the first instance, time is clearly taking its toll on Randy's body, but I felt it more strongly in the sense this was very much a pre-2008 film, released on the cliff-edge of the global financial crisis, and the concomitant precarity of the 2010s.

Indeed, it is curious to consider that you couldn't make The Wrestler today, although not because the relationship to work has changed in any fundamentalway. (Indeed, isn't it somewhat depressing the realise that, since the start of the pandemic and the 'work from home' trend to one side, we now require even more people to wreck their bodies and mental health to cover their bills?) No, what I mean to say here is that, post-2016, you cannot portray wrestling on-screen without, how can I put it, unwelcome connotations. All of which then reminds me of Minari's notorious red hat...

But I digress. The Wrestler is a grittily stark darkly humorous look into the life of a desperate man and a sorrowful world, all through one tragic profession.

§

Thief (1981)

Frank is an expert professional safecracker and specialises in high-profile diamond heists. He plans to use his ill-gotten gains to retire from crime and build a life for himself with a wife and kids, so he signs on with a top gangster for one last big score. This, of course, could be the plot to any number of heist movies, but Thief does something different. Similar to The Wrestler and The Driver (see above) and a number of other films that I watched this year, Thief seems to be saying about our relationship to work and family in modernity and postmodernity.

Indeed, the 'heist film', we are told, is an understudied genre, but part of the pleasure of watching these films is said to arise from how they portray our desired relationship to work. In particular, Frank's desire to pull off that last big job feels less about the money it would bring him, but a displacement from (or proxy for) fulfilling some deep-down desire to have a family or indeed any relationship at all. Because in theory, of course, Frank could enter into a fulfilling long-term relationship right away, without stealing millions of dollars in diamonds... but that's kinda the entire point: Frank needing just one more theft is an excuse to not pursue a relationship and put it off indefinitely in favour of 'work'. (And being Federal crimes, it also means Frank cannot put down meaningful roots in a community.) All this is communicated extremely subtly in the justly-lauded lowkey diner scene, by far the best scene in the movie.

The visual aesthetic of Thief is as if you set The Warriors (1979) in a similarly-filthy Chicago, with the Xenophon-inspired plot of The Warriors replaced with an almost deliberate lack of plot development... and the allure of The Warriors' fantastical criminal gangs (with their alluringly well-defined social identities) substituted by a bunch of amoral individuals with no solidarity beyond the immediate moment. A tale of our time, perhaps.

I should warn you that the ending of Thief is famously weak, but this is a gritty, intelligent and strangely credible heist movie before you get there.

§

Uncut Gems (2019)

The most exhausting film I've seen in years; the cinematic equivalent of four cups of double espresso, I didn't even bother even trying to sleep after downing Uncut Gems late one night. Directed by the two Safdie Brothers, it often felt like I was watching two films that had been made at the same time. (Or do I mean two films at 2X speed?)

No, whatever clumsy metaphor you choose to adopt, the unavoidable effect of this film's finely-tuned chaos is an uncompromising and anxiety-inducing piece of cinema. The plot follows Howard as a man lost to his countless vices — mostly gambling with a significant side hustle in adultery, but you get the distinct impression he would be happy with anything that will give him another high. A true junkie's junkie, you might say. You know right from the beginning it's going to end in some kind of disaster, the only question remaining is precisely how and what.

Portrayed by an (almost unrecognisable) Adam Sandler, there's an uncanny sense of distance in the emotional chasm between 'Sandler-as-junkie' and 'Sandler-as-regular-star-of-goofy-comedies'. Yet instead of being distracting and reducing the film's affect, this possibly-deliberate intertextuality somehow adds to the masterfully-controlled mayhem. My heart races just at the memory. Oof.

§

Woman in the Dunes (1964)

I ended up watching three films that feature sand this year: Denis Villeneuve's Dune (2021), Lawrence of Arabia (1962) and Woman in the Dunes. But it is this last 1964 film by Hiroshi Teshigahara that will stick in my mind in the years to come. Sure, there is none of the Medician intrigue of Dune or the Super Panavision-70 of Lawrence of Arabia (or its quasi-orientalist score, itself likely stolen from Anton Bruckner's 6th Symphony), but Woman in the Dunes doesn't have to assert its confidence so boldly, and it reveals the enormity of its plot slowly and deliberately instead. Woman in the Dunes never rushes to get to the film's central dilemma, and it uncovers its terror in little hints and insights, all whilst establishing the daily rhythm of life.

Woman in the Dunes has something of the uncanny horror as Dogtooth (see above), as well as its broad range of potential interpretations. Both films permit a wide array of readings, without resorting to being deliberately obscurantist or being just plain random — it is perhaps this reason why I enjoyed them so much. It is true that asking 'So what does the sand mean?' sounds tediously sophomoric shorn of any context, but it somehow applies to this thoughtfully self-contained piece of cinema.

§

A Quiet Place (2018)

Although A Quiet Place was not actually one of the best films I saw this year, I'm including it here as it is certainly one of the better 'mainstream' Hollywood franchises I came across. Not only is the film very ably constructed and engages on a visceral level, I should point out that it is rare that I can empathise with the peril of conventional horror movies (and perhaps prefer to focus on its cultural and political aesthetics), but I did here.

The conceit of this particular post-apocalyptic world is that a family is forced to live in almost complete silence while hiding from creatures that hunt by sound alone. Still, A Quiet Place engages on an intellectual level too, and this probably works in tandem with the pure 'horrorific' elements and make it stick into your mind. In particular, and to my mind at least, A Quiet Place a deeply American conservative film below the surface: it exalts the family structure and a certain kind of sacrifice for your family. (The music often had a passacaglia-like strain too, forming a tombeau for America.) Moreover, you survive in this dystopia by staying quiet — that is to say, by staying stoic — suggesting that in the wake of any conflict that might beset the world, the best thing to do is to keep quiet. Even communicating with your loved ones can be deadly to both of you, so not emote, acquiesce quietly to your fate, and don't, whatever you do, speak up. (Or join a union.)

I could go on, but The Quiet Place is more than this. It's taut and brief, and despite cinema being an increasingly visual medium, it encourages its audience to develop a new relationship with sound.

Planet DebianWouter Verhelst: Backing up my home server with Bacula and Amazon Storage Gateway

I have a home server.

Initially conceived and sized so I could digitize my (rather sizeable) DVD collection, I started using it for other things; I added a few play VMs on it, started using it as a destination for the deja-dup-based backups of my laptop and the time machine-based ones of the various macs in the house, and used it as the primary location of all the photos I've taken with my cameras over the years (currently taking up somewhere around 500G) as well as those that were taking at our wedding (another 100G). To add to that, I've copied the data that my wife had on various older laptops and external hard drives onto this home server as well, so that we don't lose the data should something happen to one or more of these bits of older hardware.

Needless to say, the server was running full, so a few months ago I replaced the 4x2T hard drives that I originally put in the server with 4x6T ones, and there was much rejoicing.

But then I started considering what I was doing. Originally, the intent was for the server to contain DVD rips of my collection; if I were to lose the server, I could always re-rip the collection and recover that way (unless something happened that caused me to lose both at the same time, of course, but I consider that sufficiently unlikely that I don't want to worry about it). Much of the new data on the server, however, cannot be recovered like that; if the server dies, I lose my photos forever, with no way of recovering them. Obviously that can't be okay.

So I started looking at options to create backups of my data, preferably in ways that make it easily doable for me to automate the backups -- because backups that have to be initiated are backups that will be forgotten, and backups that are forgotten are backups that don't exist. So let's not try that.

When I was still self-employed in Belgium and running a consultancy business, I sold a number of lower-end tape libraries for which I then configured bacula, and I preferred a solution that would be similar to that without costing an arm and a leg. I did have a look at a few second-hand tape libraries, but even second hand these are still way outside what I can budget for this kind of thing, so that was out too.

After looking at a few solutions that seemed very hackish and would require quite a bit of handholding (which I don't think is a good idea), I remembered that a few years ago, I had a look at the Amazon Storage Gateway for a customer. This gateway provides a virtual tape library with 10 drives and 3200 slots (half of which are import/export slots) over iSCSI. The idea is that you install the VM on a local machine, you connect it to your Amazon account, you connect your backup software to it over iSCSI, and then it syncs the data that you write to Amazon S3, with the ability to archive data to S3 Glacier or S3 Glacier Deep Archive. I didn't end up using it at the time because it required a VMWare virtualization infrastructure (which I'm not interested in), but I found out that these days, they also provide VM images for Linux KVM-based virtual machines (amongst others), so that changes things significantly.

After making a few calculations, I figured out that for the amount of data that I would need to back up, I would require a monthly budget of somewhere between 10 and 20 USD if the bulk of the data would be on S3 Glacier Deep Archive. This is well within my means, so I gave it a try.

The VM's technical requirements state that you need to assign four vCPUs and 16GiB of RAM, which just so happens to be the exact amount of RAM and CPU that my physical home server has. Obviously we can't do that. I tried getting away with 4GiB and 2 vCPUs, but that didn't work; the backup failed out after about 500G out of 2T had been written, due to the VM running out of resources. On the VM's console I found complaints that it required more memory, and I saw it mention something in the vicinity of 7GiB instead, so I decided to try again, this time with 8GiB of RAM rather than 4. This worked, and the backup was successful.

As far as bacula is concerned, the tape library is just a (very big...) normal tape library, and I got data throughput of about 30M/s while the VM's upload buffer hadn't run full yet, with things slowing down to pretty much my Internet line speed when it had. With those speeds, Bacula finished the backup successfully in "1 day 6 hours 43 mins 45 secs", although the storage gateway was still uploading things to S3 Glacier for a few hours after that.

All in all, this seems like a viable backup solution for large(r) amounts of data, although I haven't yet tried to perform a restore.

Planet DebianRussell Coker: SSD Endurance

I previously wrote about the issue of swap potentially breaking SSD [1]. My conclusion was that swap wouldn’t be a problem as no normally operating systems that I run had swap using any significant fraction of total disk writes. In that post the most writes I could see was 128GB written per day on a 120G Intel SSD (writing the entire device once a day).

My post about swap and SSD was based on the assumption that you could get many thousands of writes to the entire device which was incorrect. Here’s a background on the terminology from WD [2]. So in the case of the 120G Intel SSD I was doing over 1 DWPD (Drive Writes Per Day) which is in the middle of the range of SSD capability, Intel doesn’t specify the DWPD or TBW (Tera Bytes Written) for that device.

The most expensive and high end NVMe device sold by my local computer store is the Samsung 980 Pro which has a warranty of 150TBW for the 250G device and 600TBW for the 1TB device [3]. That means that the system which used to have an Intel SSD would have exceeded the warranty in 3 years if it had a 250G device.

My current workstation has been up for just over 7 days and has averaged 110GB written per day. It has some light VM use and the occasional kernel compile, a fairly typical developer workstation. It’s storage is 2*Crucial 1TB NVMe devices in a BTRFS RAID-1, the NVMe devices are the old series of Crucial ones and are rated for 200TBW which means that they can be expected to last for 5 years under the current load. This isn’t a real problem for me as the performance of those devices is lower than I hoped for so I will buy faster ones before they are 5yo anyway.

My home server (and my wife’s workstation) is averaging 325GB per day on the SSDs used for the RAID-1 BTRFS filesystem for root and for most data that is written much (including VMs). The SSDs are 500G Samsung 850 EVOs [4] which are rated at 150TBW which means just over a year of expected lifetime. The SSDs are much more than a year old, I think Samsung stopped selling them more than a year ago. Between the 2 SSDs SMART reports 18 uncorrectable errors and “btrfs device stats” reports 55 errors on one of them. I’m not about to immediately replace them, but it appears that they are well past their prime.

The server which runs my blog (among many other things) is averaging over 1TB written per day. It currently has a RAID-1 of hard drives for all storage but it’s previous incarnation (which probably had about the same amount of writes) had a RAID-1 of “enterprise” SSDs for the most written data. After a few years of running like that (and some time running with someone else’s load before it) the SSDs became extremely slow (sustained writes of 15MB/s) and started getting errors. So that’s a pair of SSDs that were burned out.

Conclusion

The amounts of data being written are steadily increasing. Recent machines with more RAM can decrease storage usage in some situations but that doesn’t compare to the increased use of checksummed and logged filesystems, VMs, databases for local storage, and other things that multiply writes. The amount of writes allowed under warranty isn’t increasing much and there are new technologies for larger SSD storage that decrease the DWPD rating of the underlying hardware.

For the systems I own it seems that they are all going to exceed the rated TBW for the SSDs before I have other reasons to replace them, and they aren’t particularly high usage systems. A mail server for a large number of users would hit it much earlier.

RAID of SSDs is a really good thing. Replacement of SSDs is something that should be planned for and a way of swapping SSDs to less important uses is also good (my parents have some SSDs that are too small for my current use but which work well for them). Another thing to consider is that if you have a server with spare drive bays you could put some extra SSDs in to spread the wear among a larger RAID-10 array. Instead of having a 2*SSD BTRFS RAID-1 for a server you could have 6*SSD to get a 3* longer lifetime than a regular RAID-1 before the SSDs wear out (BTRFS supports this sort of thing).

Based on these calculations and the small number of errors I’ve seen on my home server I’ll add a 480G SSD I have lying around to the array to spread the load and keep it running for a while longer.

Planet DebianRuss Allbery: Review: The Brightest Fell

Review: The Brightest Fell, by Seanan McGuire

Series: October Daye #11
Publisher: DAW
Copyright: 2017
ISBN: 0-698-18352-5
Format: Kindle
Pages: 353

This is the eleventh book in the October Daye urban fantasy series, not counting various novellas and side stories. You really cannot start here, particularly given how many ties this book has to the rest of the series.

I would like to claim there's some sort of plan or strategy in how I read long series, but there are just a lot of books to read and then I get distracted and three years have gone by. The advantage of those pauses, at least for writing reviews, is that I return to the series with fresh eyes and more points of comparison. My first thought this time around was "oh, these books aren't that well written, are they," followed shortly thereafter by staying up past midnight reading just one more chapter.

Plot summaries are essentially impossible this deep into a series, when even the names of the involved characters can be a bit of a spoiler. What I can say is that we finally get the long-awaited confrontation between Toby and her mother, although it comes in an unexpected (and unsatisfying) form. This fills in a few of the gaps in Toby's childhood, although there's not much there we didn't already know. It fills in considerably more details about the rest of Toby's family, most notably her pure-blood sister.

The writing is indeed not great. This series is showing some of the signs I've seen in other authors (Mercedes Lackey, for instance) who wrote too many books per year to do each of them justice. I have complained before about McGuire's tendency to reuse the same basic plot structure, and this instance seemed particularly egregious. The book opens with Toby enjoying herself and her found family, feeling like they can finally relax. Then something horrible happens to people she cares about, forcing her to go solve the problem. This in theory requires her to work out some sort of puzzle, but in practice is fairly linear and obvious because, although I love Toby as a character, she can't puzzle her way out of a wet sack. Everything is (mostly) fixed in the end, but there's a high cost to pay, and everyone ends the book with more trauma.

The best books of this series are the ones where McGuire manages to break with this formula. This is not one of them. The plot is literally on magical rails, since The Brightest Fell skips even pretending that Toby is an actual detective (although it establishes that she's apparently still working as one in the human world, a detail that I find baffling) and gives her a plot compass that tells her where to go. I don't really mind this since I read this series for emotional catharsis rather than Toby's ingenuity, but alas that's mostly missing here as well. There is a resolution of sorts, but it's the partial and conditional kind that doesn't include awful people getting their just deserts.

This is also not a good series entry for world-building. McGuire has apparently been dropping hints for this plot back at least as far as Ashes of Honor. I like that sort of long-term texture to series like this, but the unfortunate impact on this book is a lot of revisiting of previous settings and very little in the way of new world-building. The bit with the pixies was very good; I wanted more of that, not the trip to an Ashes of Honor setting to pick up a loose end, or yet another significant scene in Borderland Books.

As an aside, I wish authors would not put real people into their books as characters, even when it's with permission as I'm sure it was here. It's understandable to write a prominent local business into a story as part of the local color (although even then I would rather it not be a significant setting in the story), but having the actual owner and staff show up, even in brief cameos, feels creepy and weird to me. It also comes with some serious risks because real people are not characters under the author's control. (All the content warnings for that link, which is a news story from three years after this book was published.)

So, with all those complaints, why did I stay up late reading just one more chapter? Part of the answer is that McGuire writes very grabby books, at least for me. Toby is a full-speed-ahead character who is constantly making things happen, and although the writing in this book had more than the usual amount of throat-clearing and rehashing of the same internal monologue, the plot still moved along at a reasonable clip. Another part of the answer is that I am all-in on these characters: I like them, I want them to be happy, and I want to know what's going to happen next. It helps that McGuire has slowly added characters over the course of a long series and given most of them a chance to shine. It helps even more that I like all of them as people, and I like the style of banter that McGuire writes. Also, significant screen time for the Luidaeg is never a bad thing.

I think this was the weakest entry in the series in a while. It wrapped up some loose ends that I wasn't that interested in wrapping up, introduced a new conflict that it doesn't resolve, spent a bunch of time with a highly unpleasant character I didn't enjoy reading about, didn't break much new world-building ground, and needed way more faerie court politics. But some of the banter was excellent, the pixies and the Luidaeg were great, and I still care a lot about these characters. I am definitely still reading.

Followed by Nights and Silences.

Continuing a pattern from Once Broken Faith, the ebook version of The Brightest Fell includes a bonus novella. (I'm not sure if it's also present in the print version.)

"Of Things Unknown": As is usual for the short fiction in this series, this is a side story from the perspective of someone other than Toby. In this case, that's April O'Leary, first introduced all the way back in A Local Habitation, and the novella focuses on loose ends from that novel. Loose ends are apparently the theme of this book.

This was... fine. I like April, I enjoyed reading a story from her perspective, and I'm always curious to see how Toby looks from the outside. I thought the plot was strained and the resolution a bit too easy and painless, and I was not entirely convinced by April's internal thought processes. It felt like McGuire left some potential for greater plot complications on the table here, and I found it hard to shake the impression that this story was patching an error that McGuire felt she'd made in the much earlier novel. But it was nice to have an unambiguously happy ending after the more conditional ending of the main story. (6)

Rating: 6 out of 10

Planet DebianRuss Allbery: DocKnot 6.01

This release of my static site generator and software release manager finishes incorporating the last piece of my old release script that I was still using: copying a new software release into a software distribution archive tree, updating symlinks, updating the version database used to generate my web pages, and archiving the old version.

I also added a new docknot update-spin command that updates an input tree for the spin static site generator, fixing any deprecations or changes in the input format. Currently, all this does is convert the old-style *.rpod pointer files to new-style *.spin pointers.

This release also has a few other minor bug fixes, including for an embarrassing bug that required docknot spin be run from a package source tree because it tried to load per-package metadata (even though it doesn't use that data).

You can get the latest release from CPAN or from the DocKnot distribution page.

,

Krebs on SecurityAt Request of U.S., Russia Rounds Up 14 REvil Ransomware Affiliates

The Russian government said today it arrested 14 people accused of working for “REvil,” a particularly aggressive ransomware group that has extorted hundreds of millions of dollars from victim organizations. The Russian Federal Security Service (FSB) said the actions were taken in response to a request from U.S. officials, but many experts believe the crackdown is part of an effort to reduce tensions over Russian President Vladimir Putin’s decision to station 100,000 troops along the nation’s border with Ukraine.

The FSB headquarters at Lubyanka Square, Moscow. Image: Wikipedia.

The FSB said it arrested 14 REvil ransomware members, and searched more than two dozen addresses in Moscow, St. Petersburg, Leningrad and Lipetsk. As part of the raids, the FSB seized more than $600,000 US dollars, 426 million rubles (~$USD 5.5 million), 500,000 euros, and 20 “premium cars” purchased with funds obtained from cybercrime.

“The search activities were based on the appeal of the US authorities, who reported on the leader of the criminal community and his involvement in encroaching on the information resources of foreign high-tech companies by introducing malicious software, encrypting information and extorting money for its decryption,” the FSB said. “Representatives of the US competent authorities have been informed about the results of the operation.”

The FSB did not release the names of any of the individuals arrested, although a report from the Russian news agency TASS mentions two defendants: Roman Gennadyevich Muromsky, and Andrey Sergeevich Bessonov. Russian media outlet RIA Novosti released video footage from some of the raids:

REvil is widely thought to be a reincarnation of GandCrab, a Russian-language ransomware affiliate program that bragged of stealing more than $2 billion when it closed up shop in the summer of 2019. For roughly the next two years, REvil’s “Happy Blog” would churn out press releases naming and shaming dozens of new victims each week. A February 2021 analysis from researchers at IBM found the REvil gang earned more than $120 million in 2020 alone.

But all that changed last summer, when REvil associates working with another ransomware group — DarkSide — attacked Colonial Pipeline, causing fuel shortages and price spikes across the United States. Just months later, a multi-country law enforcement operation allowed investigators to hack into the REvil gang’s operations and force the group offline.

In November 2021, Europol announced it arrested seven REvil affliates who collectively made more than $230 million worth of ransom demands since 2019. At the same time, U.S. authorities unsealed two indictments against a pair of accused REvil cybercriminals, which referred to the men as “REvil Affiliate #22” and “REvil Affiliate #23.”

It is clear that U.S. authorities have known for some time the real names of REvil’s top captains and moneymakers. Last fall, President Biden told Putin that he expects Russia to act when the United States shares information on specific Russians involved in ransomware activity.

So why now? Russia has amassed approximately 100,000 troops along its southern border with Ukraine, and diplomatic efforts to defuse the situation have reportedly broken down. The Washington Post and other media outlets today report that the Biden administration has accused Moscow of sending saboteurs into Eastern Ukraine to stage an incident that could give Putin a pretext for ordering an invasion.

“The most interesting thing about these arrests is the timing,” said Kevin Breen, director of threat research at Immersive Labs. “For years, Russian Government policy on cybercriminals has been less than proactive to say the least. With Russia and the US currently at the diplomatic table, these arrests are likely part of a far wider, multi-layered, political negotiation.”

President Biden has warned that Russia can expect severe sanctions should it choose to invade Ukraine. But Putin in turn has said such sanctions could cause a complete break in diplomatic relations between the two countries.

Dmitri Alperovitch, co-founder of and former chief technology officer for the security firm CrowdStrike, called the REvil arrests in Russia “ransomware diplomacy.”

“This is Russian ransomware diplomacy,” Alperovitch said on Twitter. “It is a signal to the United States — if you don’t enact severe sanctions against us for invasion of Ukraine, we will continue to cooperate with you on ransomware investigations.”

The REvil arrests were announced as many government websites in Ukraine were defaced by hackers with an ominous message warning Ukrainians that their personal data was being uploaded to the Internet. “Be afraid and expect the worst,” the message warned.

Experts say there is good reason for Ukraine to be afraid. Ukraine has long been used as the testing grounds for Russian offensive hacking capabilities. State-backed Russian hackers have been blamed for the Dec. 23, 2015 cyberattack on Ukraine’s power grid that left 230,000 customers shivering in the dark.

The warning left behind on Ukrainian government websites that were defaced in the last 24 hours. The same statement is written in Ukrainian, Russian and Polish.

Russia also has been suspected of releasing NotPetya, a large-scale cyberattack initially aimed at Ukrainian businesses that ended up creating an extremely disruptive and expensive global malware outbreak.

Although there has been no clear attribution of these latest attacks to Russia, there is reason to suspect Russia’s hand, said David Salvo, deputy director of The Alliance for Securing Democracy.

“These are tried and true Russian tactics. Russia used cyber operations and information operations in the run-up to its invasion of Georgia in 2008. It has long waged massive cyberattacks against Ukrainian infrastructure, as well as information operations targeting Ukrainian soldiers and Ukrainian citizens. And it is completely unsurprising that it would use these tactics now when it is clear Moscow is looking for any pretext to invade Ukraine again and cast blame on the West in its typical cynical fashion.”

Planet DebianDebian Social Team: Some site updates

  • Pleroma has been updated to version 2.4.1. We also suffered some downtime during the 11th of January. Upgrading to the latest version fixed our issues.
  • Peertube has been upgraded to version 4.0.0.
  • Jitsi Meet has been upgraded to version 2.0.6726.
  • Mjolnr has been upgraded to 1.2.1.
  • Our upgrade to bullseye is complete, we haven’t encountered any problems upgrading to bullseye \o/.

Worse Than FailureError'd: Up Up Down Down Left Right Left...

...Right B A. Right? Every so often, someone sends us a submission with a hidden agenda. Of course we get the usual solicitations for marriageable exotic beauties and offers to trade linkspam locations. But then there are the really interesting ones. Maybe they're legitimate, maybe they're photoshopped or otherwise faked, and maybe they're an attempt to bypass someone's ban on political propaganda or quack science. In any case, there isn't any of that here this week, but we're saving them up and maybe we'll feature a future issue of spot the fraud for you.

First up is dog lover George with a hysterical spam-blocking email address, sharing a help message that must have been crafted by Catbert himself. "My sixty seconds of glory awaits!" he howls, but then whimpers "I will be real disappointed if the agent isn't [Gone in Sixty Seconds headliner] Nicolas Cage."

precision

 

Not to single out Insperity, though. Job hunter Quentin G. growls at iCIMS "I suppose since they don't have an email that does make them pretty unavailable." Anybody want to argue that at least "unvailable variable" is a better failure mode than "undefined"? I'm on the fence.

talent

 

Music fan Joel has sent us a rash of submissions. His explanation is that "While either the image or the text are obviously a reasonable result for the search terms, the combination is... interesting."
We suggest trying a different laundry detergent.

itch

 

Bug Hunter David B. screenshots this from his iPhone. "I was just checking for a potential version error. I didn't find the one I was expecting."

version

 

One of the most famous rivers in Western history has been famously lost for centuries. How do you lose a river? Historians recently have declared it found, but even so, it is scarcely safe home and dry.
Reader Jeremy Pereira reckons it's been smuggling messages through the Web. "A fairly run of the mill error on a Wikipedia page, but it ends with a heartbreaking plea." Can't somebody do something?

help

 

[Advertisement] Otter - Provision your servers automatically without ever needing to log-in to a command prompt. Get started today!

Planet DebianNorbert Preining: Future of “my” packages in Debian

After having been (again) demoted (timed perfectly to my round birthday!) based on flimsy arguments, I have been forced to rethink the level of contribution I want to do for Debian. Considering in particular that I have switched my main desktop to dual-boot into Arch Linux (all on the same btrfs fs with subvolumes, great!) and have run Arch now for several days exclusively, I think it is time to review the packages I am somehow responsible for (full list of packages).

After about 20 years in Debian, time to send off quite some stuff that has accumulated over time.

KDE/Plasma, frameworks, Gears, and related packages

All these packages are group maintained, so there is not much to worry about. Furthermore, a few new faces have joined the team and are actively working on the packages, although mostly on Qt6. I guess that with me not taking action, frameworks, gears, and plasma will fall back over time (frameworks: Debian 5.88 versus current 5.90, gears: Debian 21.08 versus current 21.12, plasma uptodate at the moment).

With respect to my packages on OBS, they will probably also go stale over time. Using Arch nowadays I lack the development tools necessary to build Debian packages, and above all, the motivation.

I am sorry for all those who have learned to rely on my OBS packages over the last years, bringing modern and uptodate KDE/Plasma to Debian/stable, please direct your complaints at the responsible entities in Debian.

Cinnamon

As I have written already here, I have reduced my involvement quite a lot, and nowadays Fabio and Joshua are doing the work. But both are not even DM (AFAIR) and I am the only one doing uploads (I got DM upload permissions for it). But I am not sure how long I will continue doing this. This also means that in the near future, Cinnamon will also go stale.

TeX related packages

Hilmar has DM upload permissions and is very actively caring for the packages, so I don’t see any source of concern here. New packages will need to find a new uploader, though. With myself also being part of upstream, I can surely help out in the future with difficult problems.

Calibre and related packages

Yokota-san (another DM I have sponsored) has DM upload permissions and is very actively caring for the packages, so also here there is not much of concern.

Onedrive

This is already badly outdated, and I recommend using the OBS builds which are current and provide binaries for Ubuntu and Debian for various versions.

ROCm

Here fortunately a new generation of developers has taken over maintenance and everything is going smoothly, much better than I could have done, yeah to that!

Qalculate related packages

These are group maintained, but unfortunately nobody else but me has touched the repos for quite some time. I fear that the packages will go stale rather soon.

isync/mbsync

I have recently salvaged this package, and use it daily, but I guess it needs to be orphaned sooner or later.

CafeOBJ

While I am also part of upstream here, I guess it will be orphaned.

Julia

Julia is group maintained, but unfortunately nobody else but me has touched the repo for quite some time, and we are already far behind the normal releases (and julia got removed from testing). While go stale/orphaned. I recommend installing upstream binaries.

python-mechanize

Another package that is group maintained in the Python team, but with only me as uploader I guess it will go stale and effectively be orphaned soon.

xxhash

Has already by orphaned.

qpdfview

No upstream development, so not much to do, but will be orphaned, too.


Cryptogram Upcoming Speaking Engagements

This is a current list of where and when I am scheduled to speak:

  • I’m giving an online-only talk on “Securing a World of Physically Capable Computers” as part of Teleport’s Security Visionaries 2022 series, on January 18, 2022.
  • I’m speaking at IT-S Now 2022 in Vienna on June 2, 2022.
  • I’m speaking at the 14th International Conference on Cyber Conflict, CyCon 2022, in Tallinn, Estonia on June 3, 2022.
  • I’m speaking at the RSA Conference 2022 in San Francisco, June 6-9, 2022.

The list is maintained on this page.

Planet DebianDirk Eddelbuettel: Rcpp 1.0.8: Updated, Strict Headers

rcpp logo

The Rcpp team is thrilled to share the news of the newest release 1.0.8 of Rcpp which hit CRAN today, and has already been uploaded to Debian as well. Windows and macOS builds should appear at CRAN in the next few days. This release continues with the six-months cycle started with release 1.0.5 in July 2020. As a reminder, interim ‘dev’ or ‘rc’ releases will alwasys be available in the Rcpp drat repo; this cycle there were once again seven (!!) – times two as we also tested the modified header (more below). These rolling release tend to work just as well, and are also fully tested against all reverse-dependencies.

Rcpp has become the most popular way of enhancing R with C or C++ code. Right now, around 2478 packages on CRAN depend on Rcpp for making analytical code go faster and further, along with 242 in BioConductor.

This release finally brings a change we have worked on quite a bit over the last few months. The idea of enforcing the setting of STRICT_R_HEADERS was prososed years ago in 2016 and again in 2018. But making such a chance against a widely-deployed code base has repurcussions, and we were not ready then. Last April, this was revisited in issue #1158. Over the course of numerous lengthy runs of tests of a changed Rcpp package against (essentially) all reverse-dependencies (i.e. packages which use Rcpp) we identified ninetyfour packages in total which needed a change. We provided either a patch we emailed, or a GitHub pull request, to all ninetyfour. And we are happy to say that eighty cases were resolved via a new CRAN upload, with a seven more having merged the pull request but not yet uploaded.

Hence, we could make the case to CRAN (who were always CC’ed on the monthly ‘nag’ emails we sent to maintainers of packages needing a change) that an upload was warranted. And after a brief period for their checks and inspection, our January 11 release of Rcpp 1.0.8 arrived on CRAN on January 13.

So with that, a big and heartfelt Thank You! to all eighty maintainers for updating their packages to permit this change at the Rcpp end, to CRAN for the extra checking, and to everybody else who I bugged with the numerous emails and updated to the seemingly never-ending issue #1158. We all got this done, and that is a Good Thing (TM).

Other than the aforementioned change which will not automatically set STRICT_R_HEADERS (unless opted out which one can), a number of nice pull request by a number of contributors are included in this release:

  • Iñaki generalized use of finalizers for external pointers in #1180
  • Kevin ensured include paths are always quoted in #1189
  • Dirk added new headers to allow a more fine-grained choice of Rcpp feature for faster builds in #1191
  • Travers Ching extended the function signature generator to allow for a default R argument in #1184 and #1187
  • Dirk extended documentation, removed old example code, updated references and refreshed CI setup in several PRs (see below)

The full list of details follows.

Changes in Rcpp release version 1.0.8 (2022-01-11)

  • Changes in Rcpp API:

    • STRICT_R_HEADERS is now enabled by default, see extensive discussion in #1158 closing #898.

    • A new #define allows default setting of finalizer calls for external pointers (Iñaki in #1180 closing #1108).

    • Rcpp:::CxxFlags() now quotes the include path generated, (Kevin in #1189 closing #1188).

    • New header files Rcpp/Light, Rcpp/Lighter, Rcpp/Lightest and default Rcpp/Rcpp for fine-grained access to features (and compilation time) (Dirk #1191 addressing #1168).

  • Changes in Rcpp Attributes:

    • A new option signature allows customization of function signatures (Travers Ching in #1184 and #1187 fixing #1182)
  • Changes in Rcpp Documentation:

    • The Rcpp FAQ has a new entry on how not to grow a vector (Dirk in #1167).

    • Some long-spurious calls to RNGSope have been removed from examples (Dirk in #1173 closing #1172).

    • DOI reference in the bibtex files have been updated per JSS request (Dirk in #1186).

  • Changes in Rcpp Deployment:

    • Some continuous integration components have been updated (Dirk in #1174, #1181, and #1190).

Thanks to my CRANberries, you can also look at a diff to the previous release. Questions, comments etc should go to the rcpp-devel mailing list off the R-Forge page. Bugs reports are welcome at the GitHub issue tracker as well (where one can also search among open or closed issues); questions are also welcome under rcpp tag at StackOverflow which also allows searching among the (currently) 2822 previous questions.

If you like this or other open-source work I do, you can sponsor me at GitHub.

This post by Dirk Eddelbuettel originated on his Thinking inside the box blog. Please report excessive re-aggregation in third-party for-profit settings.

Planet DebianReproducible Builds (diffoscope): diffoscope 200 released

The diffoscope maintainers are pleased to announce the release of diffoscope version 200. This version includes the following changes:

* Even if a Sphinx .inv inventory file is labelled "The remainder of this
  file is compressed using zlib", it might not actually be. In this case,
  don't traceback, and simply return the original content.
  (Closes: reproducible-builds/diffoscope#299)
* Update "X has been modified after NT_GNU_BUILD_ID has been applied" message
  to, for instance, not duplicating the full filename in the primary
  diffoscope's output.

You find out more by visiting the project homepage.

,

Cryptogram Friday Squid Blogging: The Evolution of Squid Eyes

New research:

The researchers from the FAS Center for Systems Biology discovered a network of genes important in squid eye development that are known to also play a crucial role in limb development across animals, including vertebrates and insects. The scientists say these genes have been repurposed in squid to make camera-lens-type eyes.

As usual, you can also use this squid post to talk about the security stories in the news that I haven’t covered.

Read my blog posting guidelines here.

Cryptogram An Examination of the Bug Bounty Marketplace

Here’s a fascinating report: “Bounty Everything: Hackers and the Making of the Global Bug Marketplace.” From a summary:

…researchers Ryan Ellis and Yuan Stevens provide a window into the working lives of hackers who participate in “bug bounty” programs­ — programs that hire hackers to discover and report bugs or other vulnerabilities in their systems. This report illuminates the risks and insecurities for hackers as gig workers, and how bounty programs rely on vulnerable workers to fix their vulnerable systems.

Ellis and Stevens’s research offers a historical overview of bounty programs and an analysis of contemporary bug bounty platforms — ­the new intermediaries that now structure the vast majority of bounty work. The report draws directly from interviews with hackers, who recount that bounty programs seem willing to integrate a diverse workforce in their practices, but only on terms that deny them the job security and access enjoyed by core security workforces. These inequities go far beyond the difference experienced by temporary and permanent employees at companies such as Google and Apple, contend the authors. The global bug bounty workforce is doing piecework — they are paid for each bug, and the conditions under which a bug is paid vary greatly from one company to the next.

Cryptogram Using EM Waves to Detect Malware

I don’t even know what I think about this. Researchers have developed a malware detection system that uses EM waves: “Obfuscation Revealed: Leveraging Electromagnetic Signals for Obfuscated Malware Classification.”

Abstract: The Internet of Things (IoT) is constituted of devices that are exponentially growing in number and in complexity. They use numerous customized firmware and hardware, without taking into consideration security issues, which make them a target for cybercriminals, especially malware authors.

We will present a novel approach of using side channel information to identify the kinds of threats that are targeting the device. Using our approach, a malware analyst is able to obtain precise knowledge about malware type and identity, even in the presence of obfuscation techniques which may prevent static or symbolic binary analysis. We recorded 100,000 measurement traces from an IoT device infected by various in-the-wild malware samples and realistic benign activity. Our method does not require any modification on the target device. Thus, it can be deployed independently from the resources available without any overhead. Moreover, our approach has the advantage that it can hardly be detected and evaded by the malware authors. In our experiments, we were able to predict three generic malware types (and one benign class) with an accuracy of 99.82%. Even more, our results show that we are able to classify altered malware samples with unseen obfuscation techniques during the training phase, and to determine what kind of obfuscations were applied to the binary, which makes our approach particularly useful for malware analysts.

This seems impossible. It’s research, not a commercial product. But it’s fascinating if true.

Planet DebianBits from Debian: New Debian Developers and Maintainers (November and December 2021)

The following contributors got their Debian Developer accounts in the last two months:

  • Douglas Andrew Torrance (dtorrance)
  • Mark Lee Garrett (lee)

The following contributors were added as Debian Maintainers in the last two months:

  • Lukas Matthias Märdian
  • Paulo Roberto Alves de Oliveira
  • Sergio Almeida Cipriano Junior
  • Julien Lamy
  • Kristian Nielsen
  • Jeremy Paul Arnold Sowden
  • Jussi Tapio Pakkanen
  • Marius Gripsgard
  • Martin Budaj
  • Peymaneh
  • Tommi Petteri Höynälänmaa

Congratulations!

Cryptogram Using Foreign Nationals to Bypass US Surveillance Restrictions

Remember when the US and Australian police surreptitiously owned and operated the encrypted cell phone app ANOM? They arrested 800 people in 2021 based on that operation.

New documents received by Motherboard show that over 100 of those phones were shipped to users in the US, far more than previously believed.

What’s most interesting to me about this new information is how the US used the Australians to get around domestic spying laws:

For legal reasons, the FBI did not monitor outgoing messages from Anom devices determined to be inside the U.S. Instead, the Australian Federal Police (AFP) monitored them on behalf of the FBI, according to previously published court records. In those court records unsealed shortly before the announcement of the Anom operation, FBI Special Agent Nicholas Cheviron wrote that the FBI received Anom user data three times a week, which contained the messages of all of the users of Anom with some exceptions, including “the messages of approximately 15 Anom users in the U.S. sent to any other Anom device.”

[…]

Stewart Baker, partner at Steptoe & Johnson LLP, and Bryce Klehm, associate editor of Lawfare, previously wrote that “The ‘threat to life; standard echoes the provision of U.S. law that allows communications providers to share user data with law enforcement without legal process under 18 U.S.C. § 2702. Whether the AFP was relying on this provision of U.S. law or a more general moral imperative to take action to prevent imminent threats is not clear.” That section of law discusses the voluntary disclosure of customer communications or records.

When asked about the practice of Australian law enforcement monitoring devices inside the U.S. on behalf of the FBI, Senator Ron Wyden told Motherboard in a statement “Multiple intelligence community officials have confirmed to me, in writing, that intelligence agencies cannot ask foreign partners to conduct surveillance that the U.S. would be legally prohibited from doing itself. The FBI should follow this same standard. Allegations that the FBI outsourced warrantless surveillance of Americans to a foreign government raise troubling questions about the Justice Department’s oversight of these practices.”

I and others have long suspected that the NSA uses foreign nationals to get around restrictions that prevent it from spying on Americans. It is interesting to see the FBI using the same trick.

Cryptogram People Are Increasingly Choosing Private Web Search

DuckDuckGo has had a banner year:

And yet, DuckDuckGo. The privacy-oriented search engine netted more than 35 billion search queries in 2021, a 46.4% jump over 2020 (23.6 billion). That’s big. Even so, the company, which bills itself as the “Internet privacy company,” offering a search engine and other products designed to “empower you to seamlessly take control of your personal information online without any tradeoffs,” remains a rounding error compared to Google in search.

I use it. It’s not as a good a search engine as Google. Or, at least, Google often gets me what I want faster than DuckDuckGo does. To solve that, I use use the feature that allows me to use Google’s search engine through DuckDuckGo: prepend “!Google” to searches. Basically, DuckDuckGo launders my search.

EDITED TO ADD (1/12): I was wrong. DuckDuckGo does not provide privacy protections when searching using Google.

Charles StrossOmicron

I was supposed to be in Frankfurt by now, but my winter break—the first in three years—has been cancelled (thanks, Omicron!) and I'm still at home.

Probably very few of you track Nicola Sturgeon's weekly COVID briefings to the Scottish Parliament, but I find them very useful—unlike Boris Johnson there's zero bullshit and she seems to be listening to the scientists.

Today's briefing was palpably anxious. Some key points:

  • 99 confirmed Omicron cases in Scotland (pop. 5.6 million), up 28 from yesterday

  • Omicron confirmed in 9 out of 14 health districts, community transmission highly likely

  • Doubling time appears to be 2-3 days(!) with an R number significantly higher than 2 (!!)

  • Scope for vaccine immunity escape is not yet known, although hopefully it's not huge. However, Omicron is confirmed to be more able to evade acquired natural immunity after infection by other strains—if you didn't get jabbed and think having had Beta or Delta protects, you're in for a nasty surprise

  • It's not clear how deadly it is yet, but seems to be comparable to Delta. However, it's much more contagious

  • Scottish government is advising all businesses to go back to work-from-home, everyone should mask up and socially distance in public, and everyone should take a lateral flow test before going out in public for any purpose—work, pub, shopping, meeting people

  • Scot.gov moving to review the situation daily as of 8/12, rather than weekly (hitherto)

  • And get your booster shot (or first/second shot) the instant you're eligible for it

I'm bringing this up because this is the shit that the Johnson government should be doing, and on past form will probably copy badly in about 2 weeks (by which time it'll be 5-7 doublings down the line, i.e. utterly out of control).

It has not gone unnoticed that a strain that is twice as transmissible is much deadlier than a strain with twice the immediate mortality rate, because exponential growth in the number of cases means it ends up with many more people to kill.

My current expectation is that Boris Johnson and Sajid Javid will—have already—fucked up the response to Omicron and that the English NHS will come dangerously close to (or may actually) collapse by Christmas. Scotland handled successive waves better, but will probably still have a very bad winter (our border with England is porous, as in non-existent). And we may end up back in April 2020 levels of lockdown before this is over.

Charles StrossPSA: Publishing supply chain shortages

Quantum of Nightmares (UK link) comes out on January 11th in the USA and January 13th in the UK. It's the second New Management novel, and a direct sequel to Dead Lies Dreaming.

If you want to buy the ebook, you're fine, but if you want a paper edition you really ought to preorder it now.

The publishing industry is being sandbagged by horrible supply chain problems. This is a global problem: shipping costs are through the roof, there's a shortage of paper, a shortage of workers (COVID19 is still happening, after all) and publishers are affected everywhere. If you regularly buy comics, especially ones in four colour print, you'll already have noticed multi-month delays stacking up. Now the printing and logistics backlogs are hitting novels, just in time for the festive season.

Tor are as well-positioned to cope with the supply chain mess as any publisher, and they've already allocated a production run to Quantum of Nightmares. (Same goes for Orbit in the UK.) But if it sells well and demand outstrips their advance estimates, the book will need to go into reprint—and instead of this taking 1-2 weeks (as in normal times) it's likely to be out of stock for much longer.

Of course the ebook edition won't be affected by this. But if you want a paper copy you may want to order it ASAP.

Worse Than FailureCodeSOD: A Pointer to your References

John C works at a defense contractor, and his peers are well versed in C. Unfortunately, many years ago, a lot of their software started being developed in Java. While references are often described as "pointers, but safer," they are not pointers, so your intuitions about how memory gets allocated and released are likely to be wrong.

Which is definitely the case for John's peers. For example, in C, you generally want really clear understandings of who owns a given block of memory. You don't want to allocate memory and hand it off to another module without being really clear about who is responsible for cleaning it up later. This means that you'll often write methods that expect buffers and other blocks of memory passed into them, so that they don't have to worry about memory ownership.

Which is how we get this block of code:

Set<UniqueArray> myArrays = UniqueArrayUtils.getUniqueArrays(new LinkedHashSet<UniqueArray>()); public static Set<UniqueArray> getUniqueArrays(Set<UniqueArray> pUniqueArraySet) { ... for (sensor in getSomeSensors()) { if (blah == blahblah) { pUniqueArraySet.add(new UniqueArray(sensor.special_id, sensor...)); } } ... return pUniqueArraySet; }

"Arrays" here don't refer to arrays in the programming sense, but instead to arrays in the "sensor array" sense. This method is called only once, like you see it here, and could easily have been private.

But what you can see here is some vestige of "who owns the memory". getUniqueArrays could easily create its own Set, return it, and be done. But no, it needs to accept a Set as its input, to manipulate it.

In the scheme of things, this isn't terrible, but this pattern reasserts itself again and again. Methods which could easily construct and return objects instead expect empty objects passed into them.

As John writes:

I imagine an angry C programmer saying, "What do you MEAN there's no pointers?!"

[Advertisement] Keep the plebs out of prod. Restrict NuGet feed privileges with ProGet. Learn more.

,

Planet DebianMichael Prokop: Revisiting 2021

*

Uhm yeah, so this shirt didn’t age well. :) Mainly to recall what happened, I’m once again revisiting my previous year (previous edition: 2020).

2021 was quite challenging overall. It started with four weeks of distance learning at school. Luckily at least at school things got back to "some kind of normal" afterwards. The lockdowns turned out to be an excellent opportunity for practising Geocaching though, and that’s what I started to do with my family. It’s a great way to grab some fresh air, get to know new areas, and spend time with family and friends – I plan to continue doing this. :)

We bought a family season ticket for Freibäder (open-air baths) in Graz; this turned out to be a great investment – I enjoyed the open air swimming with family, as well as going for swimming laps on my own very much, and plan to do the same in 2022. Due to the lockdowns and the pandemics, the weekly Badminton sessions sadly didn’t really take place, so I pushed towards the above-mentioned outdoor swimming and also some running; with my family we managed to do some cycling, inline skating and even practiced some boulder climbing.

For obvious reasons plenty of concerts I was looking forward didn’t take place. With my parents we at least managed to attend a concert performance of Puccinis Tosca with Jonas Kaufmann at Schloßbergbühne Kasematten/Graz, and with the kids we saw "Robin Hood" in Oper Graz and "Pippi Langstrumpf" at Studiobühne of Oper Graz. The lack of concerts and rehearsals once again and still severely impacts my playing the drums, including at HTU BigBand Graz. :-/

Grml-wise we managed to publish release 2021.07, codename JauKerl. Debian-wise we got version 11 AKA bullseye released as new stable release in August.

For 2021 I planned to and also managed to minimize buying (new) physical stuff, except for books and other reading stuff. Speaking of reading, 2021 was nice — I managed to finish more than 100 books (see “Mein Lesejahr 2021“), and I’d like to keep the reading pace.

Now let’s hope for better times in 2022!

Planet DebianSteinar H. Gunderson: Training apps

I've been using various training apps (and their associated web sites) since 2010 now, forward-porting data to give me twelve years of logs. (My primary migration path has been CardioTrianer → Endomondo → Strava.) However, it strikes me that they're just becoming worse and worse, and I think I've figured out why: What I want is a training site with some social functions, but what companies are creating are social networks. Not social networks about training; just social networks.

To be a bit more concrete: I want something that's essentially a database. I want to quickly search for workouts in a given area and of a given length, and then bring up key information, compare, contrast, get proper graphs (not something where you can't see the difference between 3:00/km and 4:00/km!), and so on. (There's a long, long list of features and bugs I'd like to get fixed, but I won't list them all.)

But Strava is laser-focused on what's happened recently; there's a stream with my own workouts and my friends', just like a social network, and that's pretty much the main focus (and they have not even tried to solve the stream problem; if I have a friend that's too active, I don't see anything else). I'd need to pay a very steep price (roughly $110/year, the same price of a used GPS watch!) to even get a calendar; without that, I need to go back through a super-slow pagination UI 20 and 20 workouts at a time to even see something older.

Garmin Connect is somewhat better here; at least I can query on length and such. (Not so strange; Garmin is in the business of selling devices, not making social networks.) But it's very oriented around one specific watch brand, and it's far from perfect either. My big issue is that nobody's even trying, it seems. But I guess there's simply no money in that.

Worse Than FailureA Basic Print Algorithm

Common snail

In the late 90s, Aaron was employed at a small software company. When his coworker Mark submitted a letter of resignation, Aaron was assigned to maintaining the vast system Mark had implemented for an anonymous worldwide company. The system was built in the latest version of Visual Basic at the time, and connected to an Oracle database. Aaron had never written a single line of VB, but what did that matter? No one else in the company knew a thing about it, either.

Before Mark parted ways with the company, he and Aaron traveled to their customer's headquarters so that Aaron could meet the people he'd be supporting and see the system perform in its live environment. A fellow named Boris met them and gave a demo at his cubicle. At one point, he pressed the Print button to print out a report of certain records. After some serious hourglassing, the system displayed a dialog box asking, Do you want to print page 1?, with Yes and No as options. Boris chose No.

More hourglassing. Do you want to print page 2?

And on it went. Not only did Boris have to choose Yes or No for every page, the time to display each prompt was ridiculous, anywhere from 30 to 90 seconds per page.

By the time they crawled to page 30, Aaron was dying inside and could no longer restrain himself. "Why is it like this?!" he half-asked, half-accused Mark.

"The customer wanted it this way," Mark replied, either unaware or indifferent to his coworker's frustration.

"This is the way we want it," Boris chimed in. "We don’t always want to print every page. Sometimes we just want one page, could be page 73."

"But why not give one prompt where the user can type in the specific pages they want?" Aaron asked.

"Is that possible?" Wide-eyed, Boris turned to Mark. "You told us it wasn't possible!"

"It isn't," Mark said with conviction.

Aaron flushed with embarrassment. He assumed he'd put his foot in his mouth in front of an important customer. "Sorry. You're the expert."

Still, the issue niggled at Aaron long after they returned from the customer's site. Once Mark had packed up his cube and departed for good, Aaron tracked down the report-printing code. He found a loop that started off something like this:


  for k = 1 to SELECT MAX(PAGENO) from REPORTTABLE WHERE REPORTNUMBER = theReportNo  
  
begin
SELECT * from REPORTTABLE WHERE REPORTNUMBER = theReportNo;
...

So, for every single page to be printed, the max page number was re-queried and every single record for the report was retrieved anew, never to be retained in memory.

Aaron didn't have to be a VB genius to realize how much this was killing performance. With a little experimentation, he figured out how to implement a dialog box more like the one he'd described in front of the customer. Boris and the other users were thrilled to receive the "impossible" time-saving fix, and Aaron learned an important lesson about how an Expert's word isn't necessarily gospel.

[Advertisement] ProGet’s got you covered with security and access controls on your NuGet feeds. Learn more.

Krebs on SecurityWho is the Network Access Broker ‘Wazawaka?’

In a great many ransomware attacks, the criminals who pillage the victim’s network are not the same crooks who gained the initial access to the victim organization. More commonly, the infected PC or stolen VPN credentials the gang used to break in were purchased from a cybercriminal middleman known as an initial access broker. This post examines some of the clues left behind by “Wazawaka,” the hacker handle chosen by a major access broker in the Russian-speaking cybercrime scene.

Wazawaka has been a highly active member of multiple cybercrime forums over the past decade, but his favorite is the Russian-language community Exploit. Wazawaka spent his early days on Exploit and other forums selling distributed denial-of-service (DDoS) attacks that could knock websites offline for about USD $80 a day. But in more recent years, Wazawaka has focused on peddling access to organizations and to databases stolen from hacked companies.

“Come, rob, and get dough!,” reads a thread started by Wazawaka on Exploit in March 2020, in which he sold access to a Chinese company with more than $10 billion in annual revenues. “Show them who is boss.”

According to their posts on Exploit, Wazawaka has worked with at least two different ransomware affiliate programs, including LockBit. Wazawaka said LockBit had paid him roughly $500,000 in commissions for the six months leading up to September 2020.

Wazawaka also said he’d teamed up with DarkSide, the ransomware affiliate group responsible for the six-day outage at Colonial Pipeline last year that caused nationwide fuel shortages and price spikes. The U.S. Department of State has since offered a $5 million reward for information leading to the arrest and conviction of any DarkSide affiliates.

Wazawaka seems to have adopted the uniquely communitarian view that when organizations being held for ransom decline to cooperate or pay up, any data stolen from the victim should be published on the Russian cybercrime forums for all to plunder — not privately sold to the highest bidder. In thread after thread on the crime forum XSS, Wazawaka’s alias “Uhodiransomwar” can be seen posting download links to databases from companies that have refused to negotiate after five days.

“The only and the main principle of ransomware is: the information that you steal should never be sold,” Uhodiransomwar wrote in August 2020. “The community needs to receive it absolutely free of charge if the ransom isn’t paid by the side that this information is stolen from.”

Wazawaka hasn’t always been so friendly to other cybercrooks. Over the past ten years, his contact information has been used to register numerous phishing domains intended to siphon credentials from people trying to transact on various dark web marketplaces. In 2018, Wazawaka registered a slew of domains spoofing the real domain for the Hydra dark web market. In 2014, Wazawaka confided to another crime forum member via private message that he made good money stealing accounts from drug dealers on these marketplaces.

“I used to steal their QIWI accounts with up to $500k in them,” Wazawaka recalled. “A dealer would never go to the cops and tell them he was selling stuff online and someone stole his money.”

WHO IS WAZAWAKA?

Wazawaka used multiple email addresses and nicknames on several Russian crime forums, but data collected by cybersecurity firm Constella Intelligence show that Wazawaka’s alter egos always used one of three fairly unique passwords: 2k3x8x57, 2k3X8X57, and 00virtual.

Those three passwords were used by one or all of Wazawaka’s email addresses on the crime forums over the years, including wazawaka@yandex.ru, mixseo@mail.ru, mixseo@yandex.ru, mixfb@yandex.ru.

That last email address was used almost a decade ago to register a Vkontakte (Russian version of Facebook) account under the name Mikhail “Mix” Matveev. The phone number tied to that Vkontakte account — 7617467845 — was assigned by the Russian telephony provider MegaFon to a resident in Khakassia, situated in the southwestern part of Eastern Siberia.

DomainTools.com [an advertiser on this site] reports mixfb@yandex.ru was used to register three domains between 2008 and 2010: ddosis.ru, best-stalker.com, and cs-arena.org. That last domain was originally registered in 2009 to a Mikhail P. Matveyev, in Abakan, Khakassia.

Mikhail Matveev is not the most unusual name in Russia, but other clues help narrow things down quite a bit. For example, early in his postings to Exploit, Wazawaka can be seen telling members that he can be contacted via the ICQ instant message account 902228.

An Internet search for Wazawaka’s ICQ number brings up a 2009 account for a Wazawaka on a now defunct discussion forum about Kopyovo-a, a town of roughly 4,400 souls in the Russian republic of Khakassia:

MIKHAIL’S MIX

Also around 2009, someone using the nickname Wazawaka and the 902228 ICQ address started posting to Russian social media networks trying to convince locals to frequent the website “fureha.ru,” which was billed as another website catering to residents of Khakassia.

According to the Russian domain watcher 1stat.ru, fureha.ru was registered in January 2009 to the email address mix@devilart.net and the phone number +79617467845, which is the same number tied to the Mikhail “Mix” Matveev Vkontakte account.

DomainTools.com says the mix@devilart.net address was used to register two domains: one called badamania[.]ru, and a defunct porn site called tvporka[.]ru. The phone number tied to that porn site registration back in 2010 was 79235810401, also issued by MegaFon in Khakassia.

A search in Skype for that number shows that it was associated more than a decade ago with the username “matveevatanya1.” It was registered to a now 29-year-old Tatayana Matveeva Deryabina, whose Vkontakte profile says she currently resides in Krasnoyarsk, the largest city that is closest to Abakan and Abaza.

It seems likely that Tatayana is a relative of Mikhail Matveev, perhaps even his sister. Neither responded to requests for comment. In 2009, a Mikhail Matveev from Abaza, Khakassia registered the username Wazawaka on weblancer.net, a freelance job exchange for Russian IT professionals. The Weblancer account says Wazawaka is currently 33 years old.

In March 2019, Wazawaka explained a lengthy absence on Exploit by saying he’d fathered a child. “I will answer everyone in a week or two,” the crime actor wrote. “Became a dad — went on vacation for a couple of weeks.”

One of the many email addresses Wazawaka used was devdelphi@yandex.ru, which is tied to a more recent but since-deleted Vkontakte account for a Mikhail Matveev and used the password 2k3X8X57. As per usual, I put together a mind map showing the connections referenced in this story:

A rough mind map of the connections mentioned in this story.

Analysts with cyber intelligence firm Flashpoint say Wazawaka’s postings on various Russian crime forums show he is proficient in many specializations, including botnet operations, keylogger malware, spam botnets, credential harvesting, Google Analytics manipulation, selling databases for spam operations, and launching DDoS attacks.

Flashpoint says it is likely Wazawaka/Mix/M1x has shared cybercriminal identities and accounts with multiple other forum members, most of whom appear to have been partners in his DDoS-for-hire business a decade ago. For example, Flashpoint points to an Antichat forum thread from 2009 where members said M1x worked on his DDoS service with a hacker by the nickname “Vedd,” who was reputedly also a resident of Abakan.

STAY  TRUE, & MOTHER RUSSIA WILL HELP YOU

All of this is academic, of course, provided Mr. Wazawaka chooses to a) never leave Russia and b) avoid cybercrime activities that target Russian citizens. In a January 2021 thread on Exploit regarding the arrest of an affiliate for the NetWalker ransomware program and its subsequent demise, Wazawaka seems already resigned those limitations.

“Don’t shit where you live, travel local, and don’t go abroad,” Wazawaka said of his own personal mantra.

Which might explain why Wazawaka is so lackadaisical about hiding and protecting his cybercriminal identities: Incredibly, Wazawaka’s alter ego on the forum XSS — Uhodiransomware — still uses the same password on the forum that he used for his Vkontakte account 10 years ago. Lucky for him, XSS also demands a one-time code from his mobile authentication app.

The second step of logging into Wazawaka’s account on XSS (Uhodiransomwar).

Wazawaka said NetWalker’s closure was the result of its administrator (a.k.a. “Bugatti”) getting greedy, and then he proceeds to preach about the need to periodically re-brand one’s cybercriminal identity.

“I’ve had some business with Bugatti,” Wazawaka said. “The guy got too rich and began recruiting Americans as affiliate partners. What happened now is the result. That’s okay, though. I wish Bugatti to do some rebranding and start from the beginning 🙂 As for the servers that were seized, they should’ve hosted their admin panels in Russia to avoid getting their servers seized by INTERPOL, the FBI, or whatever.”

“Mother Russia will help you,” Wazawaka concluded. “Love your country, and you will always get away with everything.”

If you liked this post, you may also enjoy Who Is the Network Access Broker “Babam”?

,

Krebs on Security‘Wormable’ Flaw Leads January 2022 Patch Tuesday

Microsoft today released updates to plug nearly 120 security holes in Windows and supported software. Six of the vulnerabilities were publicly detailed already, potentially giving attackers a head start in figuring out how to exploit them in unpatched systems. More concerning, Microsoft warns that one of the flaws fixed this month is “wormable,” meaning no human interaction would be required for an attack to spread from one vulnerable Windows box to another.

Nine of the vulnerabilities fixed in this month’s Patch Tuesday received Microsoft’s “critical” rating, meaning malware or miscreants can exploit them to gain remote access to vulnerable Windows systems through no help from the user.

By all accounts, the most severe flaw addressed today is CVE-2022-21907, a critical, remote code execution flaw in the “HTTP Protocol Stack.” Microsoft says the flaw affects Windows 10 and Windows 11, as well as Server 2019 and Server 2022.

“While this is definitely more server-centric, remember that Windows clients can also run http.sys, so all affected versions are affected by this bug,” said Dustin Childs from Trend Micro’s Zero Day Initiative. “Test and deploy this patch quickly.”

Quickly indeed. In May 2021, Microsoft patched a similarly critical and wormable vulnerability in the HTTP Protocol Stack; less than a week later, computer code made to exploit the flaw was posted online.

Microsoft also fixed three more remote code execution flaws in Exchange Server, a technology that hundreds of thousands of organizations worldwide use to manage their email. Exchange flaws are a major target of malicious hackers. Almost a year ago, hundreds of thousands of Exchange servers worldwide were compromised by malware after attackers started mass-exploiting four zero-day flaws in Exchange.

Microsoft says the limiting factor with these three newly found Exchange flaws is that an attacker would need to be tied to the target’s network somehow to exploit them. But Satnam Narang at Tenable notes Microsoft has labeled all three Exchange flaws as “exploitation more likely.”

“One of the flaws, CVE-2022-21846, was disclosed to Microsoft by the National Security Agency,” Narang said. “Despite the rating, Microsoft notes the attack vector is adjacent, meaning exploitation will require more legwork for an attacker, unlike the ProxyLogon and ProxyShell vulnerabilities which were remotely exploitable.”

Security firm Rapid7 points out that roughly a quarter of the security updates this month address vulnerabilities in Microsoft’s Edge browser via Chromium.

“None of these have yet been seen exploited in the wild, though six were publicly disclosed prior to today,” Rapid7’s Greg Wiseman said. “This includes two Remote Code Execution vulnerabilities affecting open source libraries that are bundled with more recent versions of Windows: CVE-2021-22947, which affects the curl library, and CVE-2021-36976 which affects libarchive.”

Wiseman said slightly less scary than the HTTP Protocol Stack vulnerability is CVE-2022-21840, which affects all supported versions of Office, as well as Sharepoint Server.

“Exploitation would require social engineering to entice a victim to open an attachment or visit a malicious website,” he said. “Thankfully the Windows preview pane is not a vector for this attack.”

Other patches include fixes for .NET Framework, Microsoft Dynamics, Windows Hyper-V, Windows Defender, and the Windows Remote Desktop Protocol (RDP). As usual, the SANS Internet Storm Center has a per-patch breakdown by severity and impact.

Standard disclaimer: Before you update Windows, please make sure you have backed up your system and/or important files. It’s not uncommon for a Windows update package to hose one’s system or prevent it from booting properly, and some updates have been known to erase or corrupt files.

So do yourself a favor and backup before installing any patches. Windows 10 even has some built-in tools to help you do that, either on a per-file/folder basis or by making a complete and bootable copy of your hard drive all at once.

And if you wish to ensure Windows has been set to pause updating so you can back up your files and/or system before the operating system decides to reboot and install patches on its own schedule, see this guide.

If you experience glitches or problems installing any of these patches this month, please consider leaving a comment about it below; there’s a decent chance other readers have experienced the same and may chime in here with useful tips.

Update, Jan. 12, 9:02 a.m.: Apparently some of the updates Microsoft released yesterday — KB5009557 (2019) and KB5009555 (2022) — are causing something to fail on domain controllers, which then keep rebooting every few minutes. That’s according to this growing thread on Reddit (hat tip to @campuscodi).

Cryptogram Faking an iPhone Reboot

Researchers have figured how how to intercept and fake an iPhone reboot:

We’ll dissect the iOS system and show how it’s possible to alter a shutdown event, tricking a user that got infected into thinking that the phone has been powered off, but in fact, it’s still running. The “NoReboot” approach simulates a real shutdown. The user cannot feel a difference between a real shutdown and a “fake shutdown.” There is no user-interface or any button feedback until the user turns the phone back “on.”

It’s a complicated hack, but it works.

Uses are obvious:

Historically, when malware infects an iOS device, it can be removed simply by restarting the device, which clears the malware from memory.

However, this technique hooks the shutdown and reboot routines to prevent them from ever happening, allowing malware to achieve persistence as the device is never actually turned off.

I see this as another manifestation of the security problems that stem from all controls becoming software controls. Back when the physical buttons actually did things — like turn the power, the Wi-Fi, or the camera on and off — you could actually know that something was on or off. Now that software controls those functions, you can never be sure.

Cryptogram Apple’s Private Relay Is Being Blocked

Some European cell phone carriers, and now T-Mobile, are blocking Apple’s Private Relay anonymous browsing feature.

This could be an interesting battle to watch.

Slashdot thread.

Planet DebianRitesh Raj Sarraf: ThinkPad AMD Debian

After a hiatus of 6 years, it was nice to be back with the ThinkPad. This blog post briefly touches upon my impressions with the current generation ThinkPad T14 Gen2 AMD variant.

Lenovo

It took 8 weeks to get my hands on the machine. Given the pandemic, restrictions and uncertainities, not sure if I should call it an ontime delivery. This was a CTO - Customise-to-order; so was nice to get rid of things I really didn’t care/use much. On the other side, it also meant I could save on some power. It also came comparatively cheaper overall.

  • No fingerprint reader
  • No Touch screen

There’s still parts where Lenovo could improve. Or less frustate a customer. I don’t understand why a company would provide a full customization option on their portal, while at the same time, not provide an explicit option to choose the make/model of the hardware one wants. Lenovo deliberately chooses to not show/specify which WiFi adapter one could choose. So, as I suspected, I ended up with a MEDIATEK Corp. Device 7961 wifi adapter.

AMD

For the first time in my computing life, I’m now using AMD at the core. I was pretty frustrated with annoying Intel Graphics bugs, so decided to take the plunge and give AMD/ATI a shot, knowing that the radeon driver does have decent support. So far, on the graphics side of things, I’m glad that things look bright. The stock in-kernel radeon driver has been working perfect for my needs and I haven’t had to tinker even once so far, in my 30 days of use.

On the overall system performance, I have not done any benchmarks nor do I want to do. But wholly, the system performance is smooth.

Power/Thermal

This is where things need more improvement on the AMD side. This AMD laptop terribly draws a lot of power in suspend mode. And it isn’t just this machine, but also the previous T14 Gen1 which has similar problems. I’m not sure if this is a generic ThinkPad problem, or an AMD specific problem. But coming from the Dell XPS 13 9370 Intel, this does draw a lot lot more power. So much, that I chose to use hibernation instead.

Similarly, on the thermal side, this machine doesn’t cool down well as compared the the Dell XPS Intel one. On an idle machine, its temperature are comparatively higher. Looking at powertop reports, it does show to consume an average of 10 watts power even while idle.

I’m hoping these are Linux ingeration issues and that Lenovo/AMD will improve things in the coming months. But given the user feedback on the ThinkPad T14 Gen1 thread, it may just be wishful thinking.

Linux

The overall hardware support has been surprisingly decent. The MediaTek WiFi driver had some glitches but with Linux 5.15+, things have considerably improved. And I hope the trend will continue with forthcoming Linux releases. My previous device driver experience with MediaTek wasn’t good but I took the plunge, considering that in the worst scenario I’d have the option to swap the card.

There’s a lot of marketing about Linux + Intel. But I took a jibe with Linux + AMD. There are glitches but nothing so far that has been a dealbreaker. If anything, I wish Lenovo/AMD would seriously work on the power/thermal issues.

Migration

Other than what’s mentioned above, I haven’t had any serious issues. I may have had some rare occassional hangs but they’ve been so infrequent that I haven’t spent time to investigate those.

Upon receiving the machine, my biggest requirement was how to switch my current workstation from Dell XPS to Lenovo ThinkPad. I’ve been using btrfs for some time now. And over the years, built my own practise on how to structure it. Things like, provisioning [sub]volumes, based on use cases is one thing I see. Like keeping separate subvols for: cache/temporary data, copy-on-write data , swap etc. I wish these things could be simplified; either on the btrfs tooling side or some different tool on top of it.

Below is filtered list of subvols created over years, that were worthy of moving to the new machine.

rrs@priyasi:~$ cat btrfs-volume-layout 
ID 550 gen 19166 top level 5 path home/foo/.cache
ID 552 gen 1522688 top level 5 path home/rrs
ID 553 gen 1522688 top level 552 path home/rrs/.cache
ID 555 gen 1426323 top level 552 path home/rrs/rrs-home/Libvirt-Images
ID 618 gen 1522672 top level 5 path var/spool/news
ID 634 gen 1522670 top level 5 path var/tmp
ID 635 gen 1522688 top level 5 path var/log
ID 639 gen 1522226 top level 5 path var/cache
ID 992 gen 1522670 top level 5 path disk-tmp
ID 1018 gen 1522688 top level 552 path home/rrs/NoBackup
ID 1196 gen 1522671 top level 5 path etc
ID 23721 gen 775692 top level 5 path swap
18:54 ♒ � ♅ ♄ ⛢     ☺ 😄    

btrfs send/receive

This did come in handy but I sorely missed some feature. Maybe they aren’t there, or are there and I didn’t look close enough. Over the years, different attributes were set to different subvols. Over time I forget what feature was added where. But from a migration point of view, it’d be nice to say, “Take this volume and take it with all its attributes�. I didn’t find that functionality in send/receive.

There’s get/set-property which I noticed later but by then it was late. So some sort of tooling, ideally something like btrfs migrate or somesuch would be nicer.

In the file system world, we already have nice tools to take care of similar scenarios. Like with rsync, I can request it to carry all file attributes.

Also, iirc, send/receive works only on ro volumes. So there’s more work one needs to do in:

  1. create ro vol
  2. send
  3. receive
  4. don’t forget to set rw property
  5. And then somehow find out other properties set on each individual subvols and [re]apply the same on the destination

I wish this all be condensed into a sub-command.

For my own sake, for this migration, the steps used were:

user@debian:~$ for volume in `sudo btrfs sub list /media/user/TOSHIBA/Migrate/ | cut -d ' ' -f9 | grep -v ROOTVOL | grep -v etc | grep -v btrbk`; do echo $volume; sud
o btrfs send /media/user/TOSHIBA/$volume | sudo btrfs receive /media/user/BTRFSROOT/ ; done            
Migrate/snapshot_disk-tmp
At subvol /media/user/TOSHIBA/Migrate/snapshot_disk-tmp
At subvol snapshot_disk-tmp
Migrate/snapshot-home_foo_.cache
At subvol /media/user/TOSHIBA/Migrate/snapshot-home_foo_.cache
At subvol snapshot-home_foo_.cache
Migrate/snapshot-home_rrs
At subvol /media/user/TOSHIBA/Migrate/snapshot-home_rrs
At subvol snapshot-home_rrs
Migrate/snapshot-home_rrs_.cache
At subvol /media/user/TOSHIBA/Migrate/snapshot-home_rrs_.cache
At subvol snapshot-home_rrs_.cache
ERROR: crc32 mismatch in command
Migrate/snapshot-home_rrs_rrs-home_Libvirt-Images
At subvol /media/user/TOSHIBA/Migrate/snapshot-home_rrs_rrs-home_Libvirt-Images
At subvol snapshot-home_rrs_rrs-home_Libvirt-Images
ERROR: crc32 mismatch in command
Migrate/snapshot-var_spool_news
At subvol /media/user/TOSHIBA/Migrate/snapshot-var_spool_news
At subvol snapshot-var_spool_news
Migrate/snapshot-var_lib_machines
At subvol /media/user/TOSHIBA/Migrate/snapshot-var_lib_machines
At subvol snapshot-var_lib_machines
Migrate/snapshot-var_lib_machines_DebianSidTemplate
..... snipped .....

And then, follow-up with:

user@debian:~$ for volume in `sudo btrfs sub list /media/user/BTRFSROOT/ | cut -d ' ' -f9`; do echo $volume; sudo btrfs property set -ts /media/user/BTRFSROOT/$volume ro false; done
ROOTVOL
ERROR: Could not open: No such file or directory
etc
snapshot_disk-tmp
snapshot-home_foo_.cache
snapshot-home_rrs
snapshot-var_spool_news
snapshot-var_lib_machines
snapshot-var_lib_machines_DebianSidTemplate
snapshot-var_lib_machines_DebSidArmhf
snapshot-var_lib_machines_DebianJessieTemplate
snapshot-var_tmp
snapshot-var_log
snapshot-var_cache
snapshot-disk-tmp

And then finally, renaming everything to match proper:

user@debian:/media/user/BTRFSROOT$ for x in snapshot*; do vol=$(echo $x | cut -d '-' -f2 | sed -e "s|_|/|g"); echo $x $vol; sudo mv $x $vol; done
snapshot-var_lib_machines var/lib/machines
snapshot-var_lib_machines_Apertisv2020ospackTargetARMHF var/lib/machines/Apertisv2020ospackTargetARMHF
snapshot-var_lib_machines_Apertisv2021ospackTargetARM64 var/lib/machines/Apertisv2021ospackTargetARM64
snapshot-var_lib_machines_Apertisv2022dev3ospackTargetARMHF var/lib/machines/Apertisv2022dev3ospackTargetARMHF
snapshot-var_lib_machines_BusterArm64 var/lib/machines/BusterArm64
snapshot-var_lib_machines_DebianBusterTemplate var/lib/machines/DebianBusterTemplate
snapshot-var_lib_machines_DebianJessieTemplate var/lib/machines/DebianJessieTemplate
snapshot-var_lib_machines_DebianSidTemplate var/lib/machines/DebianSidTemplate
snapshot-var_lib_machines_DebianSidTemplate_var_lib_portables var/lib/machines/DebianSidTemplate/var/lib/portables
snapshot-var_lib_machines_DebSidArm64 var/lib/machines/DebSidArm64
snapshot-var_lib_machines_DebSidArmhf var/lib/machines/DebSidArmhf
snapshot-var_lib_machines_DebSidMips var/lib/machines/DebSidMips
snapshot-var_lib_machines_JenkinsApertis var/lib/machines/JenkinsApertis
snapshot-var_lib_machines_v2019 var/lib/machines/v2019
snapshot-var_lib_machines_v2019LinuxSupport var/lib/machines/v2019LinuxSupport
snapshot-var_lib_machines_v2020 var/lib/machines/v2020
snapshot-var_lib_machines_v2021dev3Slim var/lib/machines/v2021dev3Slim
snapshot-var_lib_machines_v2021dev3SlimTarget var/lib/machines/v2021dev3SlimTarget
snapshot-var_lib_machines_v2022dev2OspackMinimal var/lib/machines/v2022dev2OspackMinimal
snapshot-var_lib_portables var/lib/portables
snapshot-var_log var/log
snapshot-var_spool_news var/spool/news
snapshot-var_tmp var/tmp

snapper

Entirely independent of this, but indirectly related. I use snapper as my snapshotting tool. It worked perfect on my previous machine. While everything got migrated, the only thing that fell apart was snapper. It just wouldn’t start/run proper. Funny thing is that I just removed the snapper configs and reinitialized with the exact same config again, and voila snapper was happy.

Conclusion

That was pretty much it. With the above and then also migrating /boot and then just chroot to install the boot loader. At some time, I’d like to explore other boot options but given that that is such a non-essential task, it is low on the list.

The good part was that I booted into my new machine with my exact workstation setup as it was. All the way to the user cache and the desktop session. So it was nice on that part.

But I surely think there’s room for a better migration experience here. If not directly as btrfs migrate, then maybe as an independent tool. The problem is that such a tool is going to be used once in years, so I didn’t find the motivation to write one. But this surely would be a good use case for the distribution vendors.

Worse Than FailureCodeSOD: The Correct Browser

Sometimes, it's not the code that's bad, but what the code costs. For Elizabeth's company, that cost was significant in terms of dollars and cents. They needed to staff up to accomplish some major Java Enterprise work, so they went with the highest of the highly paid consultants they could find. These consultants came from a big name firm, and were billed at an eye-watering hourly rate.

Elizabeth warns us that the Java code is a behemoth of WTFs that is "too difficult to describe", but one particular WTF leapt out at her. Specifically, included in the application was a file called nonIEUser.html. This project was happening circa 2012, which is after Microsoft finally admitted standards might need to be a thing, and definitely well outside of the time when your web application should only work in Internet Explorer. For a greenfield project, there was no reason to do anything IE only, and fortunately, they didn't- aside from forcing a check to yell at you if you didn't use IE.

This is the error page that it would display:

<!-- View-Page for errors --> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <head> <title>Technical error</title> <meta http-equiv="expires" content="0"> <meta http-equiv="Cache-Control" CONTENT="no-store,no-cache,must-revalidate,post-check=0,pre-check=0"> <meta http-equiv="Pragma" CONTENT="no-cache"> <!--<META name="GENERATOR" content="IBM WebSphere Studio">--> <link rel="STYLESHEET" type="text/css" href="../css/initech.css"> </head> <body> <html lang="en"> <!-- 100 lines omitted --> <p><strong><h2>This application can only be used with Internet Explorer!</h2></strong></p> <p>&nbsp;</p> <p><strong><h2>Other browsers are not supported.</h2></strong></p> <!-- 100 lines omitted --> </html> </body>

The "fun" part of this is that the page isn't wrapped in an <html> tag, and instead the tag is embedded inside the <body>. In the omitted sections is a pile of JavaScript that didn't work in any browser, IE included.

The real killer, though, is that the consultants billed 32 hours on "enforcing IE only compatibility". As it usually goes with consultant-driven projects, nobody in Elizabeth's management blinked twice at paying through the nose for a feature they didn't need, implemented badly.

[Advertisement] ProGet’s got you covered with security and access controls on your NuGet feeds. Learn more.

Planet DebianRuss Allbery: Review: Hench

Review: Hench, by Natalie Zina Walschots

Publisher: William Morrow
Copyright: September 2020
ISBN: 0-06-297859-4
Format: Kindle
Pages: 403

Anna Tromedlov is a hench, which means she does boring things for terrible people for money. Supervillains need a lot of labor to keep their bases and criminal organizations running, and they get that labor the same way everyone else does: through temporary agencies. Anna does spreadsheets, preferably from home on her couch.

On-site work was terrifying and she tried to avoid it, but the lure of a long-term contract was too strong. The Electric Eel, despite being a creepy sleazeball, seemed to be a manageable problem. He needed some support at a press conference, which turns out to be code for being a diversity token in front of the camera, but all she should have to do is stand there.

That's how Anna ends up holding the mind control device to the head of the mayor's kid when the superheroes attack, followed shortly by being thrown across the room by Supercollider.

Left with a complex fracture of her leg that will take months to heal, a layoff notice and a fruit basket from Electric Eel's company, and a vaguely menacing hospital conversation with the police (including Supercollider in a transparent disguise) in which it's made clear to her that she is mistaken about Supercollider's hand-print on her thigh, Anna starts wondering just how much damage superheroes have done. The answer, when analyzed using the framework for natural disasters, is astonishingly high. Anna's resulting obsession with adding up the numbers leads to her starting a blog, the Injury Report, with a growing cult following. That, in turn, leads to a new job and a sponsor: the mysterious supervillain Leviathan.

To review this book properly, I need to talk about Watchmen.

One of the things that makes superheroes interesting culturally is the straightforwardness of their foundational appeal. The archetypal superhero story is an id story: an almost pure power fantasy aimed at teenage boys. Like other pulp mass media, they reflect the prevailing cultural myths of the era in which they're told. World War II superheroes are mostly all-American boy scouts who punch Nazis. 1960s superheroes are a more complex mix of outsider misfits with a moral code and sarcastic but earnestly ethical do-gooders. The superhero genre is vast, with numerous reinterpretations, deconstructions, and alternate perspectives, but its ur-story is a good versus evil struggle of individual action, in which exceptional people use their powers for good to defeat nefarious villains.

Watchmen was not the first internal critique of the genre, but it was the one that everyone read in the 1980s and 1990s. It takes direct aim at that moral binary. The superheroes in Watchmen are not paragons of virtue (some of them are truly horrible people), and they have just as much messy entanglement with the world as the rest of us. It was superheroes re-imagined for the post-Vietnam, post-Watergate era, for the end of the Cold War when we were realizing how many lies about morality we had been told. But it still put superheroes and their struggles with morality at the center of the story.

Hench is a superhero story for the modern neoliberal world of reality TV and power inequality in the way that Watchmen was a superhero story for the Iran-Contra era and the end of the Cold War.

Whether our heroes have feet of clay is no longer a question. Today, a better question is whether the official heroes, the ones that are celebrated as triumphs of individual achievement, are anything but clay. Hench doesn't bother asking whether superheroes have fallen short of their ideal; that answer is obvious. What Hench asks instead is a question familiar to those living in a world full of televangelists, climate denialism, manipulative advertising, and Facebook: are superheroes anything more than a self-perpetuating scam? Has the good superheroes supposedly do ever outweighed the collateral damage? Do they care in the slightest about the people they're supposedly protecting? Or is the whole system of superheroes and supervillains a performance for an audience, one that chews up bystanders and spits them out mangled while delivering simplistic and unquestioned official morality?

This sounds like a deeply cynical premise, but Hench is not a cynical book. It is cynical about superheroes, which is not the same thing. The brilliance of Walschots's approach is that Anna has a foot in both worlds. She works for a supervillain and, over the course of the book, gains access to real power within the world of superheroic battles. But she's also an ordinary person with ordinary problems: not enough money, rocky friendships, deep anger at the injustices of the world and the way people like her are discarded, and now a disability and PTSD. Walschots perfectly balances the tension between those worlds and maintains that tension straight to the end of the book. From the supervillain world, Anna draws support, resources, and a mission, but all of the hope, true morality, and heart of this book comes from the ordinary side.

If you had the infrastructure of a supervillain at your disposal, what would you do with it?

Anna's answer is to treat superheroes as a destructive force like climate change, and to do whatever she can to drive them out of the business and thus reduce their impact on the world. The tool she uses for that is psychological warfare: make them so miserable that they'll snap and do something too catastrophic to be covered up. And the raw material for that psychological warfare is data.

That's the foot in the supervillain world. In descriptions of this book, her skills with data are often called her superpower. That's not exactly wrong, but the reason why she gains power and respect is only partly because of her data skills. Anna lives by the morality of the ordinary people world: you look out for your friends, you treat your co-workers with respect as long as they're not assholes, and you try to make life a bit better for the people around you. When Leviathan gives her the opportunity to put together a team, she finds people with skills she admires, funnels work to people who are good at it, and worries about the team dynamics. She treats the other ordinary employees of a supervillain as people, with lives and personalities and emotions and worth. She wins their respect.

Then she uses their combined skills to destroy superhero lives.

I was fascinated by the moral complexity in this book. Anna and her team do villainous things by the morality of the superheroic world (and, honestly, by the morality of most readers), including some things that result in people's deaths. By the end of the book, one could argue that Anna has been driven by revenge into becoming an unusual sort of supervillain. And yet, she treats the people around her so much better than either the heroes or the villains do. Anna is fiercely moral in all the ordinary person ways, and that leads directly to her becoming a villain in the superhero frame. Hench doesn't resolve that conflict; it just leaves it on the page for the reader to ponder.

The best part about this book is that it's absurdly grabby, unpredictable, and full of narrative momentum. Walschots's pacing kept me up past midnight a couple of times and derailed other weekend plans so that I could keep reading. I had no idea where the plot was going even at the 80% mark. The ending is ambiguous and a bit uncomfortable, just like the morality throughout the book, but I liked it the more I thought about it.

One caveat, unfortunately: Hench has some very graphic descriptions of violence and medical procedures, and there's an extended torture sequence with some incredibly gruesome body horror that I thought went on far too long and was unnecessary to the plot. If you're a bit squeamish like I am, there are some places where you'll want to skim, including one sequence that's annoyingly intermixed with important story developments.

Otherwise, though, this is a truly excellent book. It has a memorable protagonist with a great first-person voice, an epic character arc of empowerment and revenge, a timely take on the superhero genre that uses it for sharp critique of neoliberal governance and reality TV morality, a fascinatingly ambiguous and unsettled moral stance, a gripping and unpredictable plot, and some thoroughly enjoyable competence porn. I had put off reading it because I was worried that it would be too cynical or dark, but apart from the unnecessary torture scene, it's not at all. Highly recommended.

Rating: 9 out of 10

,

Cory DoctorowScience Fiction is a Luddite Literature

An old Ace Double paperback whose cover has been altered; it now has a fragment of an antique woodcut of Ned Ludd leading workers to battle, and has been retitled 'The Luddites' with the slug 'Smashing looms was their tactic, not their goal.'

This week on my podcast, I read my latest Locus column, Science Fiction is a Luddite Literature about the technological critique the Luddites embodied, the unfair rep they got, and how it applies to today’s tech hellscape.

MP3

Worse Than FailureThe New Management

For a young college graduate in the early 80s, Argle was fortunate to already have some real-world experience. That served him well, because businesses which were looking towards the future were already looking into how they could improve their automation with the new and relatively cheap computer systems that were hitting the market.

One such company was a family-owned, multi-generational manufacturing company. They had a vision for the future, and the future involved the latest in CNC milling machines and robotic manufacturing. They needed the team that could send them into the future, and were hiring to build that team.

Argle was one of those hires, brought on as a junior developer. His mentor, Stanley, was an old Texas Instruments guy who had helped design many of the chips that were driving the fancy robots. Stanley leaned into his mentor role, both in terms of being a good mentor, but also in terms of the aesthetic: he was a bearded pipe smoker in a tweed jacket with patches on the elbows, and a pocket protector loaded with pens and a compact slide rule.

For a small manufacturing firm, the owner was happy to invest in this team. He brought on vets from JPL or mechanical engineers who had helped automate German auto plants. The owner himself heavily recruited from the same college that Argle attended, giving talks about the future of automation and reinforcing his company's commitment to the future. Interns and junior developers bulked out the team.

The owner walked the walk, talked the talk, and was putting money where it needed to go. The job was an absolute delight for Argle and the rest of the team. He learned a lot from Stanley, and also from the work itself.

And then, one day, the owner introduced Gordon. "This, is our new President, Gordon. He'll be handling the overall operations of the company while I focus on our vision and direction."

Now, for most employees, the introduction of Gordon was barely worth commenting on. New management slotting into leadership positions was just background noise and didn't really impact the work. Except for Argle. Argle actually knew Gordon, at least by reputation, because Gordon was the VP at the local public broadcasting company.

Now you might wonder, "how does experience in broadcasting help someone oversee a manufacturing company?" Well, Argle had the inside scoop on exactly how Gordon would lead. Argle's father worked at the local PBS affiliate, and had regaled Argle with all sorts of stories about Gordon's style. That style was a blend of bullying and cronyism.

Now, up to this point, Argle's team had acted more or less like a leaderless collective. They all had a goal, they all understood the goal, and they all pushed together to achieve the goal. There was no manager. They'd defer to the senior members on matters of disagreement, but even then it was never "Stanley said so," and more "Stanley will explain this so everyone comes to an agreement."

That, of course, couldn't stand under Gordon's leadership. So Gordon hired Dave to provide management. Like Gordon, Dave also had no background in manufacturing, technology, automation or robotics. Or, in actuality, project management, as Dave illustrated in his first project meeting.

As this was the 80s, the conference room was a nicotine stained room with a transparency projector. Stanley sat in a corner, puffing away at his pipe. Dave had a stack of transparencies and a red dry erase marker to scribble on them with.

"So, Stanley," Dave said as he slapped one of the estimates Stanley had assembled onto the projector. "How long did you think this effort would take?"

Stanley pointed his pipe stem at the numbers Dave was projecting. "An effort like this will take a year."

"That's much too long," Dave said. "I was looking this over, and you had 6 weeks for milling these parts, but I think we can outsource that and get them back in three weeks. I have a vendor already committed." Dave edited the numbers with his red pen. "And then development time, you've got poor Argle booked for six months, after the hardware design is finalized, but we can start development earlier than that…"

People around the room started raising their objections. Dave had no time for these naysayers. "You would think that, but you haven't even finished with college," he told an intern. "Maybe things worked that way at JPL, but we live in the real world here." "If TI was such a good company, you'd probably still work there- either they suck or you're an idiot."

By the time Dave finished his tirade, he had individually insulted everyone on the team, and had cut the project time down to six months. "You see? We can totally do this project in six months."

Stanley took a few puffs of his pipe and said, "You can say it will take six months, but it will still take a year."

As Dave started piloting the team straight into the ground, Argle got an offer. A few of his college friends had moved out to another state, launched a startup, and were offering him a 40% wage increase plus moving expenses. Add into the fact that Dave had explained that nobody on the team would be eligible for a raise for five years, Argle was halfway out the door.

But only halfway. Argle was young, still had some optimism, and wanted to be loyal to his team, even if he wasn't loyal to the company. So he talked it over with Stanley.

"I like this team, and I like the work that we're doing, and I'd hate to leave the team in a lurch."

Stanley puffed on his pipe, and then answered. "The company will be sad to see you go. I'll be sad to see you go. But the company could lay you off tomorrow, and they'd be just as sad about it too. But they'd do it if they thought it was necessary. You don't owe this company anything more than that."

So Argle submitted his notice. By coincidence, it was on April First, which Dave tried to use as an excuse to bully Argle into feeling guilty about either a bad prank or bad timing for quitting. Dave wanted to make a counter offer, but he couldn't do it without insulting Argle on the way to offering him a raise, which made Argle's choice very easy.

Two weeks later, he was loading a truck with all his worldly possessions, and two weeks after that he was settled into a new house, and a new job, and even happier than he'd been at the manufacturing company.

Over a year later, Argle went back to visit family, and swung by the old company to see how the team was doing. Stanley was still there, but Dave and Gordon were long gone. The owner was fooled for a bit, but was too smart to stay fooled. Dave and Gordon were out the door only a few months after Argle left.

"So," he asked Stanley, "how'd that project go? How long did it take?"

Stanley puffed on his pipe and chuckled. "Oh, about a year."

[Advertisement] Continuously monitor your servers for configuration changes, and report when there's configuration drift. Get started with Otter today!

Planet DebianLouis-Philippe Véronneau: Grading using the Wacom Intuos S

I've been teaching economics for a few semesters already and, slowly but surely, I'm starting to get the hang of it. Having to deal with teaching remotely hasn't been easy though and I'm really hoping the winter semester will be in-person again.

Although I worked way too much last semester1, I somehow managed to transition to using a graphics tablet. I bought a Wacom Intuos S tablet (model CTL-4100) in late August 2021 and overall, I have been very happy with it. Wacom Canada offers a small discount for teachers and I ended up paying 115 CAD (~90 USD) for the tablet, an overall very reasonable price.

Unsurprisingly, the Wacom support on Linux is very good and my tablet worked out of the box. The only real problem I had was by default, the tablet sometimes boots up in Android mode, making it unusable. This is easily solved by pressing down on the pad's first and last buttons for a few seconds, until the LED turns white.

The included stylus came with hard plastic nibs, but I find them too slippery. I eventually purchased hard felt nibs, which increase the friction and makes for a more paper-like experience. They are a little less durable, but I wrote quite a fair bit and still haven't gone through a single one yet.

Learning curve

Learning how to use a graphical tablet took me at least a few weeks! When writing on a sheet of paper, the eyes see what the hand writes directly. This is not the case when using a graphical tablet: you are writing on a surface and see the result on your screen, a completely different surface. This dissociation takes a bit of practise to master, but after going through more than 300 pages of notes, it now feels perfectly normal.

Here is a side-by-side comparison of my very average hand-writing2:

  1. on paper
  2. using the tablet, the first week
  3. using the tablet, after a couple of months

Comparison of my writing, on paper, using the tablet and using the tablet after a few weeks

I still prefer the result of writing on paper, but I think this is mostly due to me not using the pressure sensitivity feature. The support in xournal wasn't great, but now that I've tried it in xournalpp (more on this below), I think I will be enabling it in the future. The result on paper is also more consistent, but I trust my skills will improve over time.

Pressure sensitivity on vs off

Use case

The first use case I have for the tablet is grading papers. I've been asking my students to submit their papers via Moodle for a few semesters already, but until now, I was grading them using PDF comments. The experience wasn't great3 and was rather slow compared to grading physical copies.

I'm also a somewhat old-school teacher: I refuse to teach using slides. Death by PowerPoint is real. I write on the blackboard a lot4 and I find it much easier to prepare my notes by hand than by typing them, as the end result is closer to what I actually end up writing down on the board.

Writing notes by hand on sheets of paper is a chore too, especially when you revisit the same materiel regularly. Being able to handwrite digital notes gives me a lot more flexibility and it's been great.

So far, I have been using xournal to write notes and grade papers, and although it is OK, it has a bunch of quirks I dislike. I was waiting for xournalpp to be packaged in Debian, and it now is5! I'm looking forward to using it next semester.

Towards a better computer monitor

I have also been feeling the age of my current computer monitor. I am currently using an old 32" 1080p TV from LG and up until now, I had been able to deal with the drawbacks. The colors are pretty bad and 1080p for such a large display isn't great, but I got used to it.

What I really noticed when I started using my graphics tablet was the input lag. It's bad enough that there's a clear jello effect when writing and it eventually gives me a headache. It's so bad I usually prefer to work on my laptop, which has a nicer but noticeably smaller panel.

I'm currently looking to replace this aging TV6 by something more modern. I have been waiting out since I would like to buy something that will last me another 10 years if possible. Sadly, 32" high refresh rate 4K monitors aren't exactly there yet and I haven't found anything matching my criteria. I would probably also need a new GPU, something that is not easy to come by these days.


  1. I worked at two colleges at the same time, teaching 2 different classes (one of which I was giving for the first time...) to 6 groups in total. I averaged more than 60h per week for sure. 

  2. Yes, I only write in small caps. Students love it, as it's much easier to read on the blackboard. 

  3. Although most PDF readers support displaying comments, some of my more clueless students still had trouble seeing them and I had to play tech support more than I wanted. 

  4. Unsurprisingly, my students also love it. One of the most common feedback I get at the end of the semester is they hate slides too and are very happy I'm one of the few teachers who writes on the board. 

  5. Many thanks to Barak A. Pearlmutter for maintaining this package. 

  6. It dates back from 2010, when my mom replaced our old CRT by a flat screen. FullHD TVs were getting affordable and I wasn't sad to see our tiny 20-something inches TV go. I eventually ended up with the LG flatscreen a few years later when I moved out in my first apartment and my mom got something better. 

,

Planet DebianDirk Eddelbuettel: Rblpapi 0.3.13: Some Fixes and Documentation

A new version, now at 0.3.13, of the Rblpapi package just arrived at CRAN. Rblpapi provides a direct interface between R and the Bloomberg Terminal via the C++ API provided by Bloomberg (but note that a valid Bloomberg license and installation is required).

This is the thirteenth release since the package first appeared on CRAN in 2016. It comprises the PRs from three different contributors (with special thanks once again to Michael Kerber), and extends test and documentation, and extends two function interfaces to control explicitly whether returned lists of length one should be simplified.

The list of changes follow below.

Changes in Rblpapi version 0.3.13 (2022-01-09)

  • Add a test for bds (Michael Kerber in #352)

  • Add simplify argument (and option) to bdh and bds (Dirk in #354 closing #353, #351)

  • Improve documentation for bsearch (John in #357 closing #356)

Courtesy of my CRANberries, there is also a diffstat report for the this release. As always, more detailed information is on the Rblpapi page. Questions, comments etc should go to the issue tickets system at the GitHub repo.

If you like this or other open-source work I do, you can now sponsor me at GitHub.

This post by Dirk Eddelbuettel originated on his Thinking inside the box blog. Please report excessive re-aggregation in third-party for-profit settings.

Sociological ImagesHappy New Year?

As the new year brings in a new peak in COVID cases across the country, we all have a right to feel a little down in the dumps.

One trend picked up by surveys earlier in the pandemic was a drop in self-reported happiness. Now, with a new year of General Social Survey data released, it looks like the trend continues.

Trends in the General Social Survey show a drop in people saying they are "very happy" and a spike in people saying they are "not too happy" in 2021.
Part of this change could also be explained by the survey’s new online administration method, but the pattern is consistent with NORC’s previous pandemic tracking survey.

I’ve been thinking a lot about happiness and wellbeing as I launch into teaching Introduction to Sociology this year, both because we want to do right by our students in a tough time and because new students thinking about majoring have a right to ask us: how is our field helping the world?

That’s why I was especially hopeful to hear about this study making its way around Twitter. The authors conducted interviews and surveys with experts in the field of happiness research to rank the things they thought would be most likely to increase life satisfaction based on their understanding of the research literature. Two important points caught my attention.

First, the researchers ranked both personal solutions and policy solutions to improve life satisfaction. This is important because we often think about our own happiness as an individual experience and an individual effort (often bolstered by the self-help industry). Focusing on policy reminds us that our individual wellbeing is linked to collective wellbeing, too.

Second, many of these experts’ top ranked solutions were explicitly about social relationships. For personal solutions, two of the top ranked suggestions were investing in friends and family and joining a club. For policy solutions, some of the top answers included promoting voluntary work or civil service and reducing loneliness.

Results from the paper show expert consensus that investing in friends and family and joining a club can improve life satisfaction.
It wasn’t just high expert ratings, low expert standard deviations indicated a lot of agreement about the value of social bonds. You can see the full set of results here, and the full paper here.

Expert consensus studies like this have a lot of limitations, since they only show us a glimpse of the current conventional wisdom. But this study also shows us the positive stakes of sociology. It reminds us that developing a better understanding of our relationships and investing in those relationships is not just a self-help fad; it can be a social policy priority to get us through tough times together.

Evan Stewart is an assistant professor of sociology at University of Massachusetts Boston. You can follow him on Twitter.

(View original at https://thesocietypages.org/socimages)

Planet DebianRussell Coker: Video Conferencing (LCA)

I’ve just done a tech check for my LCA lecture. I had initially planned to do what I had done before and use my phone for recording audio and video and my PC for other stuff. The problem is that I wanted to get an external microphone going and plugging in a USB microphone turned off the speaker in the phone (it seemed to direct audio to a non-existent USB audio output). I tried using bluetooth headphones with the USB microphone and that didn’t work. Eventually a viable option seemed to be using USB headphones on my PC with the phone for camera and microphone. Then it turned out that my phone (Huawei Mate 10 Pro) didn’t support resolutions higher than VGA with Chrome (it didn’t have the “advanced” settings menu to select resolution), this is probably an issue of Android build features. So the best option is to use a webcam on the PC, I was recommended a Logitech C922 but OfficeWorks only has a Logitech C920 which is apparently OK.

The free connection test from freeconference.com [1] is good for testing out how your browser works for videoconferencing. It tests each feature separately and is easy to run.

After buying the C920 webcam I found that it sometimes worked and sometimes caused a kernel panic like the following (partial panic log included for the benefit of people Googling this Logitech C920 problem):

[95457.805417] BUG: kernel NULL pointer dereference, address: 0000000000000000
[95457.805424] #PF: supervisor read access in kernel mode
[95457.805426] #PF: error_code(0x0000) - not-present page
[95457.805429] PGD 0 P4D 0 
[95457.805431] Oops: 0000 [#1] SMP PTI
[95457.805435] CPU: 2 PID: 75486 Comm: v4l2src0:src Not tainted 5.15.0-2-amd64 #1  Debian 5.15.5-2
[95457.805438] Hardware name: HP ProLiant ML110 Gen9/ProLiant ML110 Gen9, BIOS P99 02/17/2017
[95457.805440] RIP: 0010:usb_ifnum_to_if+0x3a/0x50 [usbcore]
...
[95457.805481] Call Trace:
[95457.805484]  
[95457.805485]  usb_hcd_alloc_bandwidth+0x23d/0x360 [usbcore]
[95457.805507]  usb_set_interface+0x127/0x350 [usbcore]
[95457.805525]  uvc_video_start_transfer+0x19c/0x4f0 [uvcvideo]
[95457.805532]  uvc_video_start_streaming+0x7b/0xd0 [uvcvideo]
[95457.805538]  uvc_start_streaming+0x2d/0xf0 [uvcvideo]
[95457.805543]  vb2_start_streaming+0x63/0x100 [videobuf2_common]
[95457.805550]  vb2_core_streamon+0x54/0xb0 [videobuf2_common]
[95457.805555]  uvc_queue_streamon+0x2a/0x40 [uvcvideo]
[95457.805560]  uvc_ioctl_streamon+0x3a/0x60 [uvcvideo]
[95457.805566]  __video_do_ioctl+0x39b/0x3d0 [videodev]

It turns out that Ubuntu Launchpad bug #1827452 has great information on this problem [2]. Apparently if the device decides it doesn’t have enough power then it will reconnect and get a different USB bus device number and this often happens when the kernel is initialising it. There’s a race condition in the kernel code in which the code to initialise the device won’t realise that the device has been detached and will dereference a NULL pointer and then mess up other things in USB device management. The end result for me is that all USB devices become unusable in this situation, commands like “lsusb” hang, and a regular shutdown/reboot hangs because it can’t kill the user session because something is blocked on USB.

One of the comments on the Launchpad bug is that a powered USB hub can alleviate the problem while a USB extension cable (which I had been using) can exacerbate it. Officeworks currently advertises only one powered USB hub, it’s described as “USB 3” but also “maximum speed 480 Mbps” (USB 2 speed). So basically they are selling a USB 2 hub for 4* the price that USB 2 hubs used to sell for.

When debugging this I used the “cheese” webcam utility program and ran it in a KVM virtual machine. The KVM parameters “-device qemu-xhci -usb -device usb-host,hostbus=1,hostaddr=2” (where 1 and 2 are replaced by the Bus and Device numbers from “lsusb”) allow the USB device to be passed through to the VM. Doing this meant that I didn’t have to reboot my PC every time a webcam test failed.

For audio I’m using the Sades Wand gaming headset I wrote about previously [3].

Planet DebianFrançois Marier: Removing an alias/domain from a Let's Encrypt certificate managed by certbot

I recently got an error during a certbot renewal:

Challenge failed for domain echo.fmarier.org
Failed to renew certificate jabber-gw.fmarier.org with error: Some challenges have failed.
The following renewals failed:
  /etc/letsencrypt/live/jabber-gw.fmarier.org/fullchain.pem (failure)
1 renew failure(s), 0 parse failure(s)

due to the fact that I had removed the DNS entry for echo.fmarier.org.

I tried to find a way to remove that name from the certificate before renewing it, but it seems like the only way to do it is to create a new certificate without that alternative name.

First, I looked for the domains included in the certificate:

$ certbot certificates
...
  Certificate Name: jabber-gw.fmarier.org
    Serial Number: 31485424904a33fb2ab43ab174b4b146512
    Key Type: RSA
    Domains: jabber-gw.fmarier.org echo.fmarier.org fmarier.org
    Expiry Date: 2022-01-04 05:28:57+00:00 (VALID: 29 days)
    Certificate Path: /etc/letsencrypt/live/jabber-gw.fmarier.org/fullchain.pem
    Private Key Path: /etc/letsencrypt/live/jabber-gw.fmarier.org/privkey.pem

Then, deleted the existing certificate:

$ certbot delete jabber-gw.fmarier.org

and finally created a new certificate with all other names except for the obsolete one:

$ certbot certonly -d jabber-gw.fmarier.org -d fmarier.org --duplicate

Planet DebianRuss Allbery: Review: Redemptor

Review: Redemptor, by Jordan Ifueko

Series: Raybearer #2
Publisher: Amulet Books
Copyright: 2021
ISBN: 1-68335-720-5
Format: Kindle
Pages: 328

Redemptor is the second half of a duology that started with Raybearer. You could read the first book without the second, but reading the second without the first will not make much sense. I'm going to be a bit elliptical in my plot description since there's a lot of potential for spoilers for the first book.

Tarisai has reached a point of stability and power, but she's also committed herself to a goal, one that will right a great historical and ongoing injustice. She's also now in a position to both notice and potentially correct numerous other injustices in the structure of her society, and plans to start by defending those closest to her. But in the midst of her opening gambit to save someone she believes is unjustly imprisoned, the first murderous undead child appears, attacking both Tarisai's fragile sense of security and her self-esteem and self-worth. Before long, she's drowning in feelings of inadequacy and isolation, and her grand plans for reordering the world have turned into an anxiety loop of self-flagellating burnout.

I so much wanted to like this book. Argh.

I think I see what Ifueko was aiming for, and it's a worthy topic for a novel. In Raybearer, Tarisai got the sort of life that she previously could only imagine, but she's also the sort of person who shoulders massive obligations. Imposter syndrome, anxiety, overwork, and burnout are realistic risks, and are also important topics to write about. There are some nicely subtle touches buried in this story, such as the desire of her chosen family to have her present and happy without entirely understanding why she isn't, and without seeing the urgency that she sees in the world's injustice. The balancing act of being effective without overwhelming oneself is nearly impossible, and Tarisai has very little preparation or knowledgeable support.

But this story is told with the subtlety of a sledgehammer, and in a way that felt forced rather than arising naturally from the characters. If the point of emphasis had been a disagreement with her closest circle over when and how much the world should be changed, I think this would be a better book. In the places where this drives the plot, it is a better book. But Ifueko instead externalizes anxiety and depression in the form of obviously manipulative demonic undead children who (mostly) only Tarisai can see, and it's just way too much. Her reactions are manipulated and sometimes externally imposed in a way that turns what should have been a character vs. self plot into a character vs. character plot in which the protagonist is very obviously making bad decisions and the antagonist is an uninteresting cliche.

The largest problem I had with this book is that I found it thuddingly obvious, in part because the plot felt like it was on narrowly constrained rails to ensure it hit all of the required stops. When the characters didn't want the plot to go somewhere, they're sidelined, written out of the story, or otherwise forcibly overridden. Tarisai has to feel isolated, so all the people who, according to the events of the previous book and the established world-building rules, would not let her be isolated are pushed out of her life. When this breaks the rules of magic in this world, those rules are off-handedly altered. Characters that could have had their own growth arcs after Raybearer become static and less interesting, since there's no room for them in the plot. Instead, we get all new characters, which gives Redemptor a bit of a cast size problem.

Underneath this, there is an occasional flash of great writing. Ifueko chooses to introduce a dozen mostly-new characters to an already large cast and I was still able to mostly keep them straight, which shows real authorial skill. She is very good with short bursts of characterization to make new characters feel fresh and interesting. Even the most irritating of the new characters (Crocodile, whose surprise twist I thought was obvious and predictable) is an interesting archetype to explore in a book about activism and activist burnout. I can see some pieces of a better book here. But I desperately wanted something to surprise me, for Tarisai or one of the other characters to take the plot in some totally unexpected direction the way that Raybearer did. It never happened.

That leads directly to another complaint: I liked Raybearer in part because of the freshness of a different mythological system and a different storytelling tradition than what we typically get in fantasy novels. I was hoping for more of the same in Redemptor, which meant I was disappointed when I got a mix of Christianity and Greek mythology.

As advertised by Raybearer, the central mythological crisis of Redemptor concerns the Underworld. This doesn't happen until about 80% into the book (which is also a bit of a problem; the ending felt rushed given how central it was to the plot), so I can't talk about it in detail without spoiling it. But what I think I can say is that unfortunately the religious connotations of the title are not an accident. Rather than something novel that builds on the excellent idea of the emi-ehran spirit animal, there is a lot of Christ symbolism mixed with an underworld that could have come from an Orpheus retelling. There's nothing inherently wrong with this (although the Christian bits landed poorly for me), but it wasn't what I was hoping for from the mythology of this world.

I rarely talk much about the authors in fiction reviews. I prefer to let books stand on their own without trying too hard to divine the author's original intentions. But here, I think it's worth acknowledging Ifueko's afterword in which she says that writing Redemptor in the middle of a pandemic, major depression, and the George Floyd protests was the most difficult thing she'd ever done. I've seen authors write similar things in afterwords when the effect on the book was minimal or invisible, but I don't think that was the case here. Redemptor is furious, anxious, depressed, and at points despairing, and while it's okay for novels to be all of those things when it's under the author's control, here they felt like emotions that were imposed on the story from outside.

Raybearer was an adventure story about found family and ethics that happened to involve a lot of politics. Redemptor is a story about political activism and governance, but written in a universe whose bones are set up for an adventure story. The mismatch bothered me throughout; not only did these not feel like the right characters to tell this story with, but the politics were too simple, too morally clear-cut, and too amenable to easy solutions for a good political fantasy. Raybearer focused its political attention on colonialism. That's a deep enough topic by itself to support a duology (or more), but Redemptor adds in property rights, land reform, economic and social disparity, unfair magical systems, and a grab bag of other issues, and it overwhelms the plot. There isn't space and time to support solutions with sufficient complexity to satisfyingly address the problems. Ifueko falls back on benevolent dictator solutions, and I understand why, but that's not the path to a satisfying resolution in an overtly political fantasy.

This is the sort of sequel that leaves me wondering if I can recommend reading the first book and not the second, and that makes me sad. Redemptor is not without its occasional flashes of brilliance, but I did not have fun reading this book and I can't recommend the experience. That said, I think this is a book problem, not an author problem; I will happily read Ifueko's next novel, and I suspect it will be much better.

Rating: 5 out of 10

Planet DebianMatthew Garrett: Pluton is not (currently) a threat to software freedom

At CES this week, Lenovo announced that their new Z-series laptops would ship with AMD processors that incorporate Microsoft's Pluton security chip. There's a fair degree of cynicism around whether Microsoft have the interests of the industry as a whole at heart or not, so unsurprisingly people have voiced concerns about Pluton allowing for platform lock-in and future devices no longer booting non-Windows operating systems. Based on what we currently know, I think those concerns are understandable but misplaced.

But first it's helpful to know what Pluton actually is, and that's hard because Microsoft haven't actually provided much in the way of technical detail. The best I've found is a discussion of Pluton in the context of Azure Sphere, Microsoft's IoT security platform. This, in association with the block diagrams on page 12 and 13 of this slidedeck, suggest that Pluton is a general purpose security processor in a similar vein to Google's Titan chip. It has a relatively low powered CPU core, an RNG, and various hardware cryptography engines - there's nothing terribly surprising here, and it's pretty much the same set of components that you'd find in a standard Trusted Platform Module of the sort shipped in pretty much every modern x86 PC. But unlike Titan, Pluton seems to have been designed with the explicit goal of being incorporated into other chips, rather than being a standalone component. In the Azure Sphere case, we see it directly incorporated into a Mediatek chip. In the Xbox Series devices, it's incorporated into the SoC. And now, we're seeing it arrive on general purpose AMD CPUs.

Microsoft's announcement says that Pluton can be shipped in three configurations:as the Trusted Platform Module; as a security processor used for non-TPM scenarios like platform resiliency; or OEMs can choose to ship with Pluton turned off. What we're likely to see to begin with is the former - Pluton will run firmware that exposes a Trusted Computing Group compatible TPM interface. This is almost identical to the status quo. Microsoft have required that all Windows certified hardware ship with a TPM for years now, but for cost reasons this is often not in the form of a separate hardware component. Instead, both Intel and AMD provide support for running the TPM stack on a component separate from the main execution cores on the system - for Intel, this TPM code runs on the Management Engine integrated into the chipset, and for AMD on the Platform Security Processor that's integrated into the CPU package itself.

So in this respect, Pluton changes very little; the only difference is that the TPM code is running on hardware dedicated to that purpose, rather than alongside other code. Importantly, in this mode Pluton will not do anything unless the system firmware or OS ask it to. Pluton cannot independently block the execution of any other code - it knows nothing about the code the CPU is executing unless explicitly told about it. What the OS can certainly do is ask Pluton to verify a signature before executing code, but the OS could also just verify that signature itself. Windows can already be configured to reject software that doesn't have a valid signature. If Microsoft wanted to enforce that they could just change the default today, there's no need to wait until everyone has hardware with Pluton built-in.

The two things that seem to cause people concerns are remote attestation and the fact that Microsoft will be able to ship firmware updates to Pluton via Windows Update. I've written about remote attestation before, so won't go into too many details here, but the short summary is that it's a mechanism that allows your system to prove to a remote site that it booted a specific set of code. What's important to note here is that the TPM (Pluton, in the scenario we're talking about) can't do this on its own - remote attestation can only be triggered with the aid of the operating system. Microsoft's Device Health Attestation is an example of remote attestation in action, and the technology definitely allows remote sites to refuse to grant you access unless you booted a specific set of software. But there are two important things to note here: first, remote attestation cannot prevent you from booting whatever software you want, and second, as evidenced by Microsoft already having a remote attestation product, you don't need Pluton to do this! Remote attestation has been possible since TPMs started shipping over two decades ago.

The other concern is Microsoft having control over the firmware updates. The context here is that TPMs are not magically free of bugs, and sometimes these can have security consequences. One example is Infineon TPMs producing weak RSA keys, a vulnerability that could be rectified by a firmware update to the TPM. Unfortunately these updates had to be issued by the device manufacturer rather than Infineon being able to do so directly. This meant users had to wait for their vendor to get around to shipping an update, something that might not happen at all if the machine was sufficiently old. From a security perspective, being able to ship firmware updates for the TPM without them having to go through the device manufacturer is a huge win.

Microsoft's obviously in a position to ship a firmware update that modifies the TPM's behaviour - there would be no technical barrier to them shipping code that resulted in the TPM just handing out your disk encryption secret on demand. But Microsoft already control the operating system, so they already have your disk encryption secret. There's no need for them to backdoor the TPM to give them something that the TPM's happy to give them anyway. If you don't trust Microsoft then you probably shouldn't be running Windows, and if you're not running Windows Microsoft can't update the firmware on your TPM.

So, as of now, Pluton running firmware that makes it look like a TPM just isn't a terribly interesting change to where we are already. It can't block you running software (either apps or operating systems). It doesn't enable any new privacy concerns. There's no mechanism for Microsoft to forcibly push updates to it if you're not running Windows.

Could this change in future? Potentially. Microsoft mention another use-case for Pluton "as a security processor used for non-TPM scenarios like platform resiliency", but don't go into any more detail. At this point, we don't know the full set of capabilities that Pluton has. Can it DMA? Could it play a role in firmware authentication? There are scenarios where, in theory, a component such as Pluton could be used in ways that would make it more difficult to run arbitrary code. It would be reassuring to hear more about what the non-TPM scenarios are expected to look like and what capabilities Pluton actually has.

But let's not lose sight of something more fundamental here. If Microsoft wanted to block free operating systems from new hardware, they could simply mandate that vendors remove the ability to disable secure boot or modify the key databases. If Microsoft wanted to prevent users from being able to run arbitrary applications, they could just ship an update to Windows that enforced signing requirements. If they want to be hostile to free software, they don't need Pluton to do it.

(Edit: it's been pointed out that I kind of gloss over the fact that remote attestation is a potential threat to free software, as it theoretically allows sites to block access based on which OS you're running. There's various reasons I don't think this is realistic - one is that there's just way too much variability in measurements for it to be practical to write a policy that's strict enough to offer useful guarantees without also blocking a number of legitimate users, and the other is that you can just pass the request through to a machine that is running the appropriate software and have it attest for you. The fact that nobody has actually bothered to use remote attestation for this purpose even though most consumer systems already ship with TPMs suggests that people generally agree with me on that)

comment count unavailable comments

,

Planet DebianJonathan Dowland: 2021 in Fiction

Cover for *This is How You Lose the Time War*
Cover for *Robot*
Cover for *The Glass Hotel*

Following on from last year's round-up of my reading, here's a look at the fiction I enjoyed in 2021.

I managed to read 42 books in 2021, up from 31 last year. That's partly to do with buying an ereader: 33/36% of my reading (by pages/by books) was ebooks. I think this demonstrates that ebooks have mostly complemented paper books for me, rather than replacing them.

My book of the year (although it was published in 2019) was This is How You Lose the Time War by Amal El-Mohtar and Max Gladstone: A short epistolary love story between warring time travellers and quite unlike anything else I've read for a long time. Other notables were The Glass Hotel by Emily St John Mandel and Robot by Adam Wiśniewski-Snerg.

The biggest disappointment for me was The Ministry for the Future by Kim Stanley Robinson (KSR), which I haven't even finished. I love KSRs writing: I've written about him many times on this blog, at least in 2002, 2006 and 2009, I think I've read every other novel he's published and most of his short stories. But this one was too much of something for me. He's described this novel a the end-point of a particular journey and approach to writing he's taken, which I felt relieved to learn, assuming he writes any more novels (and I really hope that he does) they will likely be in a different "mode".

My "new author discovery" for 2021 was Chris Beckett: I tore through Two Tribes and America City before promptly buying all his other work. He fits roughly into the same bracket as Adam Roberts and Christopher Priest, two of my other favourite authors.

5 of the books I read (12%) were from my "backlog" of already-purchased physical books. I'd like to try and reduce my Backlog further so I hope to push this figure up next year.

I made a small effort to read more diverse authors this year. 24% of the books I read (by book count and page count) were by women. 15% by page count were (loosely) BAME (19% by book count). Again I'd like to increase these numbers modestly in 2022.

Unlike 2020, I didn't complete any short story collections in 2021! This is partly because there was only one issue of Interzone published in all of 2021, a double-issue which I haven't yet finished. This is probably a sad date point in terms of Interzone's continued existence, but it's not dead yet.

Krebs on Security500M Avira Antivirus Users Introduced to Cryptomining

Many readers were surprised to learn recently that the popular Norton 360 antivirus suite now ships with a program which lets customers make money mining virtual currency. But Norton 360 isn’t alone in this dubious endeavor: Avira antivirus — which has built a base of 500 million users worldwide largely by making the product free — was recently bought by the same company that owns Norton 360 and is introducing its customers to a service called Avira Crypto.

Avira Crypto

Founded in 2006, Avira Operations GmbH & Co. KG is a German multinational software company best known for their Avira Free Security (a.k.a. Avira Free Antivirus). In January 2021, Avira was acquired by Tempe, Ariz.-based NortonLifeLock Inc., the same company that now owns Norton 360.

In 2017, the identity theft protection company LifeLock was acquired by Symantec Corp., which was renamed to NortonLifeLock in 2019. LifeLock is now included in the Norton 360 service; Avira offers users a similar service called Breach Monitor.

Like Norton 360, Avira comes with a cryptominer already installed, but customers have to opt in to using the service that powers it. Avira’s FAQ on its cryptomining service is somewhat sparse. For example, it doesn’t specify how much NortonLifeLock gets out of the deal (NortonLifeLock keeps 15 percent of any cryptocurrency mined by Norton Crypto).

“Avira Crypto allows you to use your computer’s idle time to mine the cryptocurrency Ethereum (ETH),” the FAQ explains. “Since cryptomining requires a high level of processing power, it is not suitable for users with an average computer. Even with compatible hardware, mining cryptocurrencies on your own can be less rewarding. Your best option is to join a mining pool that shares their computer power to improve their chance of mining cryptocurrency. The rewards are then distributed evenly to all members in the pool.”

NortonLifeLock hasn’t yet responded to requests for comment, so it’s unclear whether Avira uses the same cryptomining code as Norton Crypto. But there are clues that suggest that’s the case. NortonLifeLock announced Avira Crypto in late October 2021, but multiple other antivirus products have flagged Avira’s installer as malicious or unsafe for including a cryptominer as far back as Sept. 9, 2021.

Avira was detected as potentially unsafe for including a cryptominer back in Sept. 2021. Image: Virustotal.com.

The above screenshot was taken on Virustotal.com, a service owned by Google that scans submitted files against dozens of antivirus products. The detection report pictured was found by searching Virustotal for “ANvOptimusEnablementCuda,” a function included in the Norton Crypto mining component “Ncrypt.exe.”

Some longtime Norton customers took to NortonLifeLock’s online forum to express horror at the prospect of their antivirus product installing coin-mining software, regardless of whether the mining service was turned off by default.

“Norton should be DETECTING and killing off crypto mining hijacking, not installing their own,” reads a Dec. 28 thread on Norton’s forum titled “Absolutely furious.”

Others have charged that the crypto offering will end up costing customers more in electricity bills than they can ever hope to gain from letting their antivirus mine ETH. What’s more, there are hefty fees involved in moving any ETH mined by Norton or Avira Crypto to an account that the user can cash out, and many users apparently don’t understand they can’t cash out until they at least earn enough ETH to cover the fees.

In August 2021, NortonLifeLock said it had reached an agreement to acquire Avast, another longtime free antivirus product that also claims to have around 500 million users. It remains to be seen whether Avast Crypto will be the next brilliant offering from NortonLifeLock.

As mentioned in this week’s story on Norton Crypto, I get that participation in these cryptomining schemes is voluntary, but much of that ultimately hinges on how these crypto programs are pitched and whether users really understand what they’re doing when they enable them. But what bugs me most is they will be introducing hundreds of millions of perhaps less savvy Internet users to the world of cryptocurrency, which comes with its own set of unique security and privacy challenges that require users to “level up” their personal security practices in fairly significant ways.

Planet DebianJohn Goerzen: Make the Internet Yours Again With an Instant Mesh Network

I’m going to lead with the technical punch line, and then explain it:

Yggdrasil Network is an opportunistic mesh that can be deployed privately or as part of a global-scale network. Each node gets a stable IPv6 address (or even an entire /64) that is derived from its public key and is bound to that node as long as the node wants it (of course, it can generate a new keypair anytime) and is valid wherever the node joins the mesh. All traffic is end-to-end encrypted.

Yggdrasil will automatically discover peers on a LAN via broadcast beacons, and requires zero configuration to peer in such a way. It can also run as an overlay network atop the public Internet. Public peers serve as places to join the global network, and since it’s a mesh, if one device on your LAN joins the global network, the others will automatically have visibility on it also, thanks to the mesh routing.

It neatly solves a lot of problems of portability (my ssh sessions stay live as I move networks, for instance), VPN (incoming ports aren’t required since local nodes can connect to a public peer via an outbound connection), security, and so forth.

Now on to the explanation:

The Tyranny of IP rigidity

Every device on the Internet, at one time, had its own globally-unique IP address. This number was its identifier to the world; with an IP address, you can connect to any machine anywhere. Even now, when you connect to a computer to download a webpage or send a message, under the hood, your computer is talking to the other one by IP address.

Only, now it’s hard to get one. The Internet protocol we all grew up with, version 4 (IPv4), didn’t have enough addresses for the explosive growth we’ve seen. Internet providers and IT departments had to use a trick called NAT (Network Address Translation) to give you a sort of fake IP address, so they could put hundreds or thousands of devices behind a single public one. That, plus the mobility of devices — changing IPs whenever they change locations — has meant that a fundamental rule of the old Internet is now broken:

Every participant is an equal peer. (Well, not any more.)

Nowadays, you can’t you host your own website from your phone. Or share files from your house. (Without, that is, the use of some third-party service that locks you down and acts as an intermediary.)

Back in the 90s, I worked at a university, and I, like every other employee, had a PC on my desk with an unfirewalled public IP. I installed a webserver, and poof – instant website. Nowadays, running a website from home is just about impossible. You may not have a public IP, and if you do, it likely changes from time to time. And even then, your ISP probably blocks you from running servers on it.

In short, you have to buy your way into the resources to participate on the Internet.

I wrote about these problems in more detail in my article Recovering Our Lost Free Will Online.

Enter Yggdrasil

I already gave away the punch line at the top. But what does all that mean?

  • Every device that participates gets an IP address that is fully live on the Yggdrasil network.
  • You can host a website, or a mail server, or whatever you like with your Yggdrasil IP.
  • Encryption and authentication are smaller (though not nonexistent) worries thanks to the built-in end-to-end encryption.
  • You can travel the globe, and your IP will follow you: onto a plane, from continent to continent, wherever. Yggdrasil will find you.
  • I’ve set up /etc/hosts on my laptop to use the Yggdrasil IPs for other machines on my LAN. Now I can just “ssh foo” and it will work — from home, from a coffee shop, from a 4G tether, wherever. Now, other tools like tinc can do this, obviously. And I could stop there; I could have a completely closed, private Yggdrasil network.

    Or, I can join the global Yggdrasil network. Each device, in addition to accepting peers it finds on the LAN, can also be configured to establish outbound peering connections or accept inbound ones over the Internet. Put a public peer or two in your configuration and you’ve joined the global network. Most people will probably want to do that on every device (because why not?), but you could also do that from just one device on your LAN. Again, there’s no need to explicitly build routes via it; your other machines on the LAN will discover the route’s existence and use it.

    This is one of many projects that are working to democratize and decentralize the Internet. So far, it has been quite successful, growing to over 2000 nodes. It is the direct successor to the earlier cjdns/Hyperboria and BATMAN networks, and aims to be a proof of concept and a viable tool for global expansion.

    Finally, think about how much easier development is when you don’t have to necessarily worry about TLS complexity in every single application. When you don’t have to worry about port forwarding and firewall penetration. It’s what the Internet should be.

    Planet DebianAyoyimika Ajibade: Nodejs 16 and Webpack 5 transition in Debian🍥

    What is Debian � ?

    Debian is also known as Debian GNU/Linux is a free open-source operating system (OS) based currently on the Linux kernel or the FreeBSD kernel, developed by the community-supported Debian Project; although efforts are in place to provide Debian for other kernels, primarily for the Hurd.

    Fun fact about Debian �💃💃

    • Debian was the first Linux distribution to include a package management system for easy installation and removal of software. It was also the first Linux distribution that could be upgraded without requiring reinstallation.

    • To protect your system against “Trojan horsesâ€� and other malevolent software, Debian's servers verify that uploaded packages come from their registered Debian maintainers.

    • Debian comes with over 59000 packages; as of this writing (precompiled software that is bundled up in a nice format for easy installation on your machine), a package manager (APT), and other utilities that make it possible to manage thousands of packages on thousands of computers as easily as installing a single application. All of it is FREE!

    • Debian is also the basis for many other distributions, most notably Ubuntu

    What is Webpack ?

    Webpack is a static module bundler for modern JavaScript applications. When webpack processes your application, it internally builds a dependency graph from one or more entry points and then combines every module your project needs into one or more bundles, which are static assets to serve your content from

    What is nodejs ?

    Node.js is an open-source, cross-platform built on Chrome's JavaScript runtime for easily building fast and scalable network applications and also developing server-side applications, Here javascript code is no longer limited to the traditional method of running on the web browser

    What does Transitioning mean in Debian?

    Transitioning is a concept in Debian about maintaining only one version of a library like webpack, nodejs. There is a bottleneck as other libraries and applications may not support the version we have in Debian. So we have to port that software which For example, node-mini-css-extract-plugin, node-mermaid and so many packages uses webpack. In buster we had webpack4 and in bullseye, we want to update it to webpack5. node-mini-css-extract-plugin already supports webpack5, but others like node-mermaid don't support it yet. So either we wait or we help those projects to update their webpack version. Check out this chat between my mentor and a community member on transitioning of rails6

    Getting Started with Creating or Updating packages in Debian

    To be able to create or maintain packages suitable for uploading to Debian you must be in a sid/unstable environment or distribution. See recommended instructions on how to setup Debian Sid via this link

    See link on how to debianize a new package

    See link for brief steps on how to update a package to its new upstream version. For more detailed content on the whys and hows of updating a package to its new upstream version visit here

    Note💡 In updating to the new upstream version we have to watch out for breaking changes caused by both minor updates or major updates. As per https://semver.org major updates(e.g If the current version is 2.3.4, then 3.0 is a major update) of libraries with versions greater than 1.0 and minor updates(e.g If the current version is 0.10 then 0.11 is a minor update) of libraries with versions less than 1.0 can have breaking changes

    The overall flow of webpack5 and nodejs16 transitioning in Debian

    After grasping the fundamental process and flow on how to update a package, you are well on your way to transitioning🚀🚀. Transitioning in webpack or nodejs involves building and testing of dependencies or packages that depend on webpack or nodejs respectively called reverse-dependencies, these reverse dependencies are tested and built with the new updated version usually uploaded to the experimental distribution if reverse dependencies are built and tested successfully both reverse dependencies and dependency in this case nodejs or webpack are then uploaded to the unstable/sid distribution for further processing

    The major guidelines to follow while transitioning are

    • Find a list of reverse dependencies to fix

    • See if new upstream versions of reverse dependencies are available that supports the transitioning version

    • See if new upstream of reverse dependencies are available that supports the transitioning version works

    • Report bugs found while rebuilding and testing reverse dependencies in Debian

    • Forward bugs found while rebuilding and testing reverse dependencies upstream

    • Fix or update packages and forward patches upstream

    After a successful transitioning phase users of the Debian OS have access to the latest and also oldest installation of these packages via apt based on their preferences, which implies having the benefit of more features, bug fixes, updated security patches from those packages, all these are possible due to the community of amazing people💗🔥

    ,

    Planet DebianIngo Juergensmann: Moving my repositories from Github to Codeberg.org

    Some weeks ago I moved my repositories from Github (evil, Microsoft, blabla) to Codeberg. Codeberg is a non-profit organisation located in Germany. When you really dislike Microsoft products it is somewhat a natural reaction (at least for me) to move away from Github, which was bought by Microsoft, to some more independent service provider for hosting source code. Nice thing with Codeberg is as well that it offers a migration tool from Github to Codeberg. Additionally Codeberg is also on Mastodon. If you are looking for a good service hosting your git repositories and want to move away from Github as well, please give Codeberg a try.

    So, please update your git settings to https://github.com/ingoj to https://codeberg.org/Windfluechter (or the specific repo).

    David BrinPolitics, polemics, but especially... prediction!

    First, an item from the news.
    So, only the Cheneys sat on the right side of the Aisle as every Republican member of the House boycotted… um, found ‘important business elsewhere’… when the House met to memorialize the officers killed by the rioters on 1/6/21. 

    When the Cheneys - who stole billions from us in the Great Iraq Logistics Scam that was the sole real purpose of the Second Saddam War - say THEY have had enough of the Trumpist nightmare they helped create?

    Sigh, history repeats. Like the Prussian "Junkers caste" lords who in the 1920s were SO sure they could 'control' the brown shirts they had subsidized. And around 1936 started murmuring: "what have we done?"



    Heed this from The Sorcerer's Apprentice, from Johann Wolfgang von Goethe:



    Oh, here comes my master! Help me Lord, I plead!

    Spirits I have conjured, no longer pay me heed.


    == Prediction time? ==

    It’s ‘prediction season' again! For example Mark Anderson of the Strategic News Service has one of the most brilliant predictive success records around. See Unveiling SNS's 2022 Predictions

    I’ve dribbled-out my own across the years and have written extensively about the need for predictions registries and the use of wager demands to hold blowhards accountable.

    But for years I’ve gone on record in many places calling 2023 the Year of the Flying Car… though at first it will likely be hobbyists away from town… plus licensed air-limo services in cities. For the Rich, of course. And watch how that works out!


    One of my better recent items: Repairing the World: is that creative, preserving power in human hands?” I am interviewed by the legendary John Elkington for Green Swans Observatory. (October 2021).  A PDF transcription is available.


    I participated in this report by the World Economic Forum on Positive AI Economic Futures. "Many computer science experts believe that, in this century, machines will be able to do most tasks better than humans. Given these sorts of predictions, it is important to think about the possible consequences of AI for the future of work and to prepare for different scenarios. Continued progress in these technologies could have disruptive effects: from further exacerbating recent trends in inequality to denying more and more people their sense of purpose and fulfillment in life, given that work is much more than just a source of income."

    One of my most biting essays about politics and economics has been updated and reposted on The Street. As is my wont, I pause often to demand wagers, e.g. whether Supply Side/Thatcherism ever made a successful prediction of positive outcomes. No one ever steps up to bet, proving the cowardice of adherents of that mad cult... but also the polemical stupidity of Keynesians, for not using this simple method to highlight who's been right a lot... vs. who is always, always wrong.


    Oh, any guesses why the Street folks chose to conclude the essay with an image of the grave of Karl Marx?


    "Former White House strategist Steve Bannon on Monday dug in on this threat that Donald Trump-loyal “shock troops” will move to “deconstruct” the federal government the minute a Republican takes over the Oval Office again.

    “We need to get ready now,” Bannon said on his “War Room” podcast. “We control the country. We’ve got to start acting like it. And one way we’re going to act like it, we’re not going to have 4,000 [shock troops] ready to go, we’re going to have 20,000 ready to go.""

    == we’ve got anti-vax & climate denialism backwards! ==


    Everyone (it seems) gets this backward. It's accepted that our fact professions - from science/teaching/journalism/medicine to the 'deep state' intel/military officers - are attacked by the Mad Right in order to prevent action on climate change. 


    Wrong! 


    Instead, climate denialism... and anti-vax and the rest ... are agitprop used to rile up confed/MAGAs, getting hem to aim their resentment at 'elites' of knowledge, rather than the elites of money/lordship who are actually stealing from those poor schlumps. In other words, oligarchy is applying exactly the same trick used by plantation lords in the 1860s to get a million poor whites to march and die for their class oppressors. 


    Just watch Fox for a while or listen to Sinclair radio (kremlin) jocks. Vastly more time and energy is spent explicitly attacking nerds in the various fact professions than explicitly attacking races/genders etc. Make that a wager. Moreover, there's a reason for that. While disempowered victims (races/genders/the poor etc.) are hurt most by Mad Right policies, they are not the ones standing in the way of oligarchy's current putsch to grab all world power.


    (Think. The powerless aren't the chief worry of the powerful. That is a tautology.)


    The empowered clades who are blocking that ambition are the fact and knowledge professions. Including law and civil service and the officer corps and above all scientists. Discrediting the boffins is among the very top oligarchy priorities.


    Hence, the anti-vax 'movement' and denialism and all that are inexplicable except in this context, where it suddenly becomes clear WHY the Foxites are deliberately killing thousands of their own followers with a campaign to divert them away from life-saving medicine. If they did not have climate denialism and anti-vax and abortion, they would have to concoct some other cult mythologies to use in the war on nerds.


    Stop fracturing the coalition to save democracy and the enlightenment! See "Democracy Cannot survive the fracturing of the Democratic Coalition" by Ian Bassin in The Bulwark: “In the early days of the first Trump presidency, our organization cohosted a “Summit for Democracy” at which the keynote speakers were a Democratic senator, a Republican senator, and opposition leaders from Russia, Poland, and Egypt who had experience facing off against autocrats. At the end of the event, the foreign opposition leaders were asked to each give one piece of advice to Americans now facing the specter of authoritarianism. 


    The Polish MP Agnieska Pomaska said this: “Don’t let the opposition fracture.” Her advice was born of experience. In Poland, the increasingly autocratic ruling party, Law and Justice (PiS), initially rose to power in 2015 on only plurality support (35 percent in the first round of voting) because the opposition could not stay united. In Hungary, the autocratic Fidesz Party managed to translate its own plurality support into legislative supermajorities in large part because the Hungarian opposition fractured in the lead-up to both the 2014 and 2018 elections. Once in power, both PiS and Fidesz then engaged in a program of dismantling democratic institutions and checks and balances. …”


    The conclusion of the Bulwark article: Bassin notes, “In their book How Democracies Die, the Harvard scholars Steven Levitsky and Daniel Ziblatt compared four countries’ experiences in interwar Europe. In Belgium and Finland, far-right extremist parties gained some traction after World War I. In both countries, the center-right united with the left to block those anti-democratic parties from ascending further to power. 

    In Italy and Germany on the other hand, the center-right in both cases chose not to do that, and instead sought to co-opt the political appeal of rising far-right movements by incorporating them into their ranks. We all know what happened next. Thus far, most pro-democracy Republicans have chosen to try to tame, or co-opt, the rising authoritarians in their midst. This is a mistake. Stopping the next authoritarian attempt will require a broad, united opposition. This unity of purpose is more crucial than any legislation.”

    Planet DebianAyoyimika Ajibade: Everyone Struggles

    Starting anything new always has in it an element of uncertainty, doubt, fears, and struggle to forge ahead, this has been my current situation as an outreachy intern working on the transition of nodejs16 and webpack5 which is about updating all packages that depend on nodejs14 and webpack4 to work well with the updated version of nodejs16 and webpack5 in the Debian operations system. Juicy right!😋

    As a software developer struggling to grasp both basic and advanced knowledge of a concept can seem daunting, much like learning anything new, you can be overwhelmed when you are surrounded and know there is a whole lot of other new concept, tools, process, languages you have to learn that are linked to what you are currently learning, as you are struggling to grasp the fundamental idea of what you are currently learning. imbued in any struggle to get a solution to the problem is where innovation and inventions lie in, and our learning becomes improved as we dive into fact-finding, getting your hypothesis after a series of tests and ultimately proffering a solution

    Some of my struggles as I intern with Debian has been lack of skill of the shell scripting language as that is one of the core languages to understand so as to navigate your way around maintaining packages for Debian, also funny enough having just an intermediate knowledge of the javascript programming language as arguably having a basic knowledge of javascript is necessary to building and testing javascript packages in Debian as I know only the basic of javascript since my core language is Python, that I struggle with. The good thing is that the more I keep at it the faster the chance of the struggles reducing

    Now to the fun part! having a community of developers who have been through the struggling phase is divine, as they make your learning experience much easier, my mentors and other community member have made learning to package modules for Debian much easier as all hands are on deck to always help out with our challenges. I remember it felt so wonderful when my first contribution got merged and I became more encouraged to update more packages. These helped me a lot in the contribution stage for Debian as I better familiar with how the system worked. I’m super grateful to my mentors and co-intern as they are always there to assist me.

    How I Navigate my way through my struggles

    I guess the first thing about any challenge is to be aware of it and admit your limitations of particular knowledge, then you move on to creatively seek solutions by asking for help from those who know the way. Voila! Now comes the part where you have to take up their solutions, ideas, opinions and make it work for your particular case scenario that is a skill set that all Software developers must-have.

    Going through documentation has immensely helped solve my problems much faster and build new knowledge, as I get the fundamental idea of why and how things work. I also try to break each concept down into steps, achieve my goals for each step, then build all solutions in each step together, surfing the internet to find solutions also has a huge benefit.

    Vocabulary terms Used in Debian �

    1. uscan => a tool to identify and download upstream source code from the repository, also compressing it into the required format.

    2. apt => a package manager to manage packages in Debian, similar to pip in python, npm in javascript.

    3. stretch/buster/bullseye/bookworm/sid => old old stable Debian9 - The codename for the release before the previous stable release (stretch). old stable Debian10 - The previous stable release (Buster). stable Debian11 - The current stable release (Bullseye). testing Debian12 - The next-generation stable release (Bookworm). unstable - The unstable development release (Sid) where new or updated packages are introduced. To understand more on debian release cycle

    4. reverse-rebuild => is building all modules that depend on a package in Debian while building the main package.

    5. lintian => A helper tool used to check for inconsistencies and errors in a Debian Package based on Debian standards.

    6. pkg-js-tools => A collection of tools to aid packaging Node modules in Debian.

    7. dpkg-buildpackage => A command to build upstream code in an unclean chroot or environment.

    8. quilt => A patch creation and management automation script. quilt helps manage a series of patches that a Debian package maintainer needs to be applied to upstream source when building the package.

    9. autopkgtest => a script used to test an installed binary package using the source package's tests

    10. RFS => (Request For Sponsorship) Working in the Debian ecosystem includes two roles either as a Debian Maintainer with restricted rights and privileges like uploading to the Debian archive or as a Debian Developer with all rights and privileges such as uploading to the Debian archive, as a new contributor or a Debian maintainer (with few rights and privileges) in Debian you can RFS so that your pull request (PR) can be merged to the Debian archive by a Debian Developer, much like your contribution has been accepted 😸

    There are so many terms and tools you have to get accustomed to, but they are easy to understand and use, as enough and frequently updated wiki documentation are available to guide you through, plus a whole lot of community members you can ask questions from.

    “strength and growth come only through continuous effort and struggle.� — Napoleon Hill

    Worse Than FailureError'd: Everything Old is New Again

    Whenever there's a major change in the world, it always takes application developers a little time to adjust. Remember when the US government thought it would be a great idea to mess around with their Daylight Saving Time schedule with only two years warning? (I'm guessing nobody remembers the fiddling done by earlier administrations because they were too young to care, or not born yet.) Two years warning probably seemed like plenty to non-technical legislators, not thinking about all the software that was in place with built-in calendars. Well, someone has apparently decided to one-up a measly time change, by inventing something called a New YEAR. This resets the entire calendar, and it must be a novel practice because surely websites wouldn't break due to some routine event that has been happening for at least a dozen years or more, right? Right?

    Aspiring Poké trainer Valts S. began a long long time ago far far away.

    journey

     

    Resubmitter David B. is strong with the zero balances. "My friend was notified that his brand new insurance policy for 2022 is already past due. The interest is going to be killer."

    insurance

     

    Unlike David's friend, contributor JP is getting a head start. "I'll sign up with Netflix in a year, but I'm paying now."

    netflix

     

    While an anonymous contributor is way, way, way ahead of the game. Anonymous EA predicts Apex Legends will be very popular in 10 years.

    unknown

     

    Finally, if you're sick of all the weak puns, Ron K. has a favored medical provider. Good luck scheduling an appointment.

    december

     

    [Advertisement] ProGet’s got you covered with security and access controls on your NuGet feeds. Learn more.

    Cryptogram Fake QR Codes on Parking Meters

    The City of Austin is warning about QR codes stuck to parking meters that take people to fraudulent payment sites.

    Cryptogram Norton’s Antivirus Product Now Includes an Ethereum Miner

    Norton 360 can now mine Ethereum. It’s opt-in, and the company keeps 15%.

    It’s hard to uninstall this option.

    Cryptogram Friday Squid Blogging: Squid Prices Are Rising

    The price of squid in Korea is rising due to limited supply.

    As usual, you can also use this squid post to talk about the security stories in the news that I haven’t covered.

    Read my blog posting guidelines here.

    Planet DebianReproducible Builds (diffoscope): diffoscope 199 released

    The diffoscope maintainers are pleased to announce the release of diffoscope version 199. This version includes the following changes:

    [ Chris Lamb ]
    * Support both variants of "odt2txt", including the one provided by unoconv.
      (Closes: reproducible-builds/diffoscope#298)
    
    [ Jelle van der Waa ]
    * Add external tool reference on Arch Linux for xb-tool.
    

    You find out more by visiting the project homepage.

    ,

    Krebs on SecurityNorton 360 Now Comes With a Cryptominer

    Norton 360, one of the most popular antivirus products on the market today, has installed a cryptocurrency mining program on its customers’ computers. Norton’s parent firm says the cloud-based service that activates the program and allows customers to profit from the scheme — in which the company keeps 15 percent of any currencies mined — is “opt-in,” meaning users have to agree to enable it. But many Norton users complain the mining program is difficult to remove, and reactions from longtime customers have ranged from unease and disbelief to, “Dude, where’s my crypto?”

    Norton 360 is owned by Tempe, Ariz.-based NortonLifeLock Inc. In 2017, the identity theft protection company LifeLock was acquired by Symantec Corp., which was renamed to NortonLifeLock in 2019 (LifeLock is now included in the Norton 360 service).

    According to the FAQ posted on its site, “Norton Crypto” will mine Ethereum (ETH) cryptocurrency while the customer’s computer is idle. The FAQ also says Norton Crypto will only run on systems that meet certain hardware and software requirements (such as an NVIDIA graphics card with at least 6 GB of memory).

    “Norton creates a secure digital Ethereum wallet for each user,” the FAQ reads. “The key to the wallet is encrypted and stored securely in the cloud. Only you have access to the wallet.”

    NortonLifeLock began offering the mining service in July 2021, and early news coverage of the program did not immediately receive widespread attention. That changed on Jan. 4, when Boing Boing co-editor Cory Doctorow tweeted that NortonCrypto would run by default for Norton 360 users.

    NortonLifeLock says Norton Crypto is an opt-in feature only and is not enabled without user permission.

    “If users have turned on Norton Crypto but no longer wish to use the feature, it can be disabled by temporarily shutting off ‘tamper protection’ (which allows users to modify the Norton installation) and deleting NCrypt.exe from your computer,” NortonLifeLock said in a written statement. However, many users have reported difficulty removing the mining program.

    From reading user posts on the Norton Crypto community forum, it seems some longtime Norton customers were horrified at the prospect of their antivirus product installing coin-mining software, regardless of whether the mining service was turned off by default.

    “How on Earth could anyone at Norton think that adding crypto mining within a security product would be a good thing?,” reads a Dec. 28 thread titled “Absolutely furious.”

    “Norton should be DETECTING and killing off crypto mining hijacking, not installing their own,” the post reads. “The product people need firing. What’s the next ‘bright idea’? Norton Botnet? ‘ And I was just about to re-install Norton 360 too, but this has literally has caused me to no longer trust Norton and their direction.”

    It’s an open question whether Norton Crypto users can expect to see much profit from participating in this scheme, at least in the short run. Mining cryptocurrencies basically involves using your computer’s spare resources to help validate financial transactions of other crypto users. Crypto mining causes one’s computer to draw more power, which can increase one’s overall electricity costs.

    “Norton is pretty much amplifying energy consumption worldwide, costing their customers more in electricity use than the customer makes on the mining, yet allowing Norton to make a ton of profit,” tweeted security researcher Chris Vickery. “It’s disgusting, gross, and brand-suicide.”

    Then there’s the matter of getting paid. Norton Crypto lets users withdraw their earnings to an account at cryptocurrency platform CoinBase, but as Norton Crypto’s FAQ rightly points out, there are coin mining fees as well as transaction costs to transfer Ethereum.

    “The coin mining fee is currently 15% of the crypto allocated to the miner,” the FAQ explains. “Transfers of cryptocurrencies may result in transaction fees (also known as “gas” fees) paid to the users of the cryptocurrency blockchain network who process the transaction. In addition, if you choose to exchange crypto for another currency, you may be required to pay fees to an exchange facilitating the transaction. Transaction fees fluctuate due to cryptocurrency market conditions and other factors. These fees are not set by Norton.”

    Which might explain why so many Norton Crypto users have taken to the community’s online forum to complain they were having trouble withdrawing their earnings. Those gas fees are the same regardless of the amount of crypto being moved, so the system simply blocks withdrawals if the amount requested can’t cover the transfer fees.

    Norton Crypto. Image: Bleeping Computer.

    I guess what bothers me most about Norton Crypto is that it will be introducing millions of perhaps less savvy Internet users to the world of cryptocurrency, which comes with its own set of unique security and privacy challenges that require users to “level up” their personal security practices in fairly significant ways.

    Several of my elder family members and closest friends are longtime Norton users who renew their subscription year after year (despite my reminding them that it’s way cheaper just to purchase it again each year as a new user). None of them are particularly interested in or experts at securing their computers and digital lives, and the thought of them opening CoinBase accounts and navigating that space is terrifying.

    Big Yellow is not the only brand that’s cashing in on investor fervor over cryptocurrencies and hoping to appeal to a broader (or maybe just older) audience: The venerable electronics retailer RadioShack, which relaunched in 2020 as an online-focused brand, now says it plans to chart a future as a cryptocurrency exchange.

    “RadioShack’s argument is basically that as a very old brand, it’s primed to sell old CEOs on cryptocurrency,” writes Adi Robertson for The Verge.

    “Too many [cryptocurrency companies] focused on speculation and not enough on making the ‘old-school’ customer feel comfortable,” the company’s website states, claiming that the average “decision-making” corporate CEO is 68 years old. “The older generation simply doesn’t trust the new-fangled ideas of the Bitcoin youth.”

    Worse Than FailureCodeSOD: Well Trained

    Mandatory compliance training is a thing. The reasons behind it range from companies trying to reduce civil liabilities to actual legal mandates which require the training. The quality of mandatory training ranges from "useless" to "actively awful", and it's mostly PowerPoint-style slides interspersed with quizzes to make sure you were "paying attention". The worse ones will usually have timers on the slides so you can't just click past, and have to actually idle to "force" you to read it.

    Also, since legal compliance tends to move slower than technology, training built years ago is frequently still relevant. So, for example, Duncan's company built training back when you could reasonably expect Flash to run in the browser. Building the training and the content cost money, so once Flash got deprecated, they weren't just going to throw that money away- they found a contractor who'd convert it to "HTML5".

    Now, this means that the code quality is garbage, which is fine. We can't really fault the tool. But there are some assumptions about the very use of the tool that render these quizzes even more useless than the usual fare:

    function checkQuestions( bFeedback, bForce ) { if( !bForce ) if( bFeedback && !forceCheckQuestions() ) return 0; var ans_VarQuestion_05 = VarQuestion_05.getValue() if( bFeedback && currFeedbackIdx == 0 && !qu84909.hasBeenProcessed) { if( ans_VarQuestion_05 == 'A. ' ) { settings = 'height=300,width=400,top='+(screen.height-300)/2+',left='+(screen.width-400)/2 if( is.ns ) settings += ",modal=yes,dialog=yes" trivWndFeedback = new jsDlgBox( '84909', '20013', 'page81719.html', function(){ trivWndFeedback=null; setTimeout( 'checkLeavePage()', 100); }, 400, 300 ); trivWndFeedback.create(); return 0; } else if( ans_VarQuestion_05 == 'B. ' ) { settings = 'height=300,width=400,top='+(screen.height-300)/2+',left='+(screen.width-400)/2 if( is.ns ) settings += ",modal=yes,dialog=yes" trivWndFeedback = new jsDlgBox( '84909', '20013', 'page81714.html', function(){ trivWndFeedback=null; setTimeout( 'checkLeavePage()', 100); }, 400, 300 ); trivWndFeedback.create(); return 0; } else if( ans_VarQuestion_05 == 'C. ' ) { settings = 'height=300,width=400,top='+(screen.height-300)/2+',left='+(screen.width-400)/2 if( is.ns ) settings += ",modal=yes,dialog=yes" trivWndFeedback = new jsDlgBox( '84909', '20013', 'page81719.html', function(){ trivWndFeedback=null; setTimeout( 'checkLeavePage()', 100); }, 400, 300 ); trivWndFeedback.create(); return 0; } else if( ans_VarQuestion_05 == 'D. ' ) { settings = 'height=300,width=400,top='+(screen.height-300)/2+',left='+(screen.width-400)/2 if( is.ns ) settings += ",modal=yes,dialog=yes" trivWndFeedback = new jsDlgBox( '84909', '20013', 'page81719.html', function(){ trivWndFeedback=null; setTimeout( 'checkLeavePage()', 100); }, 400, 300 ); trivWndFeedback.create(); return 0; } } if( !bFeedback ) currFeedbackIdx = 1; return 1 }

    Now, the page quite "securely" disabled right click, so it was "impossible" to open debugging tools or view source, short of knowing how to navigate menus or use keyboard shortcuts.

    If one reads the code carefully, we know that B. is the correct answer- the other three answers all go to the same page, but B. is the odd one out.

    Now, is this actually easier than just using common sense, because these trainings aren't designed to actually test people and instead just provide a veneer of plausible "we made them take a quiz" logic?

    Probably not. But at least Duncan was more entertained than he would be by actually doing the training.

    [Advertisement] Otter - Provision your servers automatically without ever needing to log-in to a command prompt. Get started today!

    Planet DebianJacob Adams: Linux Hibernation Documentation

    Recently I’ve been curious about how hibernation works on Linux, as it’s an interesting interaction between hardware and software. There are some notes in the Arch wiki and the kernel documentation (as well as some kernel documentation on debugging hibernation and on sleep states more generally), and of course the ACPI Specification

    The Formal Definition

    ACPI (Advanced Configuration and Power Interface) is, according to the spec, “an architecture-independent power management and configuration framework that forms a subsystem within the host OS” which defines “a hardware register set to define power states.”

    ACPI defines four global system states G0, working/on, G1, sleeping, G2, soft off, and G3, mechanical off1. Within G1 there are 4 sleep states, numbered S1 through S4. There are also S0 and S5, which are equivalent to G0 and G2 respectively2.

    Sleep

    According to the spec, the ACPI S1-S4 states all do the same thing from the operating system’s perspective, but each saves progressively more power, so the operating system is expected to pick the deepest of these states when entering sleep. However, most operating systems3 distinguish between S1-S3, which are typically referred to as sleep or suspend, and S4, which is typically referred to as hibernation.

    S1: CPU Stop and Cache Wipe

    The CPU caches are wiped and then the CPU is stopped, which the spec notes is equivalent to the WBINVD instruction followed by the STPCLK signal on x86. However, nothing is powered off.

    S2: Processor Power off

    The system stops the processor and most system clocks (except the real time clock), then powers off the processor. Upon waking, the processor will not continue what it was doing before, but instead use its reset vector4.

    S3: Suspend/Sleep (Suspend-to-RAM)

    Mostly equivalent to S2, but hardware ensures that only memory and whatever other hardware memory requires are powered.

    S4: Hibernate (Suspend-to-Disk)

    In this state, all hardware is completely powered off and an image of the system is written to disk, to be restored from upon reapplying power. Writing the system image to disk can be handled by the operating system if supported, or by the firmware.

    Linux Sleep States

    Linux has its own set of sleep states which mostly correspond with ACPI states.

    Suspend-to-Idle

    This is a software only sleep that puts all hardware into the lowest power state it can, suspends timekeeping, and freezes userspace processes.

    All userspace and some kernel threads5, except those tagged with PF_NOFREEZE, are frozen before the system enters a sleep state. Frozen tasks are sent to the __refrigerator(), where they set TASK_UNINTERRUPTIBLE and PF_FROZEN and infinitely loop until PF_FROZEN is unset6.

    This prevents these tasks from doing anything during the imaging process. Any userspace process running on a different CPU while the kernel is trying to create a memory image would cause havoc. This is also done because any filesystem changes made during this would be lost and could cause the filesystem and its related in-memory structures to become inconsistent. Also, creating a hibernation image requires about 50% of memory free, so no tasks should be allocating memory, which freezing also prevents.

    Standby

    This is equivalent to ACPI S1.

    Suspend-to-RAM

    This is equivalent to ACPI S3.

    Hibernation

    Hibernation is mostly equivalent to ACPI S4 but does not require S4, only requiring “low-level code for resuming the system to be present for the underlying CPU architecture” according to the Linux sleep state docs.

    To hibernate, everything is stopped and the kernel takes a snapshot of memory. Then, the system writes out the memory image to disk. Finally, the system either enters S4 or turns off completely.

    When the system restores power it boots a new kernel, which looks for a hibernation image and loads it into memory. It then overwrites itself with the hibernation image and jumps to a resume area of the original kernel7. The resumed kernel restores the system to its previous state and resumes all processes.

    Hybrid Suspend

    Hybrid suspend does not correspond to an official ACPI state, but instead is effectively a combination of S3 and S4. The system writes out a hibernation image, but then enters suspend-to-RAM. If the system wakes up from suspend it will discard the hibernation image, but if the system loses power it can safely restore from the hibernation image.

    1. The difference between soft and mechanical off is that mechanical off is “entered and left by a mechanical means (for example, turning off the system’s power through the movement of a large red switch)” 

    2. It’s unclear to me why G and S states overlap like this. I assume this is a relic of an older spec that only had S states, but I have not as yet found any evidence of this. If someone has any information on this, please let me know and I’ll update this footnote. 

    3. Of the operating systems I know of that support ACPI sleep states (I checked Windows, Mac, Linux, and the three BSDs8), only MacOS does not allow the user to deliberately enable hibernation, instead supporting a hybrid suspend it calls safe sleep 

    4. “The reset vector of a processor is the default location where, upon a reset, the processor will go to find the first instruction to execute. In other words, the reset vector is a pointer or address where the processor should always begin its execution. This first instruction typically branches to the system initialization code.” Xiaocong Fan, Real-Time Embedded Systems, 2015 

    5. All kernel threads are tagged with PF_NOFREEZE by default, so they must specifically opt-in to task freezing. 

    6. This is not from the docs, but from kernel/freezer.c which also notes “Refrigerator is place where frozen processes are stored :-).” 

    7. This is the operation that requires “special architecture-specific low-level code”. 

    8. Interestingly NetBSD has a setting to enable hibernation, but does not actually support hibernation 

    ,

    Planet DebianReproducible Builds: Reproducible Builds in December 2021

    Welcome to the December 2021 report from the Reproducible Builds project! In these reports, we try and summarise what we have been up to over the past month, as well as what else has been occurring in the world of software supply-chain security.

    As a quick recap of what reproducible builds is trying to address, whilst anyone may inspect the source code of free software for malicious flaws, almost all software is distributed to end users as pre-compiled binaries. The motivation behind the reproducible builds effort is to ensure no flaws have been introduced during this compilation process by promising identical results are always generated from a given source, thus allowing multiple third-parties to come to a consensus on whether a build was compromised. As always, if you would like to contribute to the project, please get in touch with us directly or visit the Contribute page on our website.


    Early in December, Julien Voisin blogged about setting up a rebuilderd instance in order to reproduce Tails images. Working on previous work from 2018, Julien has now set up a public-facing instance which is providing build attestations.

    As Julien dryly notes in his post, “Currently, this isn’t really super-useful to anyone, except maybe some Tails developers who want to check that the release manager didn’t backdoor the released image.” Naturally, we would contend — sincerely — that this is indeed useful.


    The secure/anonymous Tor browser now supports reproducible source releases. According to the project’s changelog, version 0.4.7.3-alpha of Tor can now build reproducible tarballs via the make dist-reprod command. This issue was tracked via Tor issue #26299.


    Fabian Keil posted a question to our mailing list this month asking how they might analyse differences in images produced with the FreeBSD and ElectroBSD’s mkimg and makefs commands:

    After rebasing ElectroBSD from FreeBSD stable/11 to stable/12
    I recently noticed that the "memstick" images are unfortunately
    still not 100% reproducible.

    Fabian’s original post generated a short back-and-forth with Chris Lamb regarding how diffoscope might be able to support the particular format of images generated by this command set.


    diffoscope

    diffoscope is our in-depth and content-aware diff utility. Not only can it locate and diagnose reproducibility issues, it can provide human-readable diffs from many kinds of binary formats. This month, Chris Lamb prepared and uploading versions 195, 196, 197 and 198 to Debian, as well as made the following changes:

    • Support showing Ordering differences only within .dsc field values. []
    • Add support for ‘XMLb’ files. []
    • Also add, for example, /usr/lib/x86_64-linux-gnu to our local binary search path. []
    • Support OCaml versions 4.11, 4.12 and 4.13. []
    • Drop some unnecessary has_same_content_as logging calls. []
    • Replace token variable with an anonymously-named variable instead to remove extra lines. []
    • Don’t use the runtime platform’s native endianness when unpacking .pyc files. This fixes test failures on big-endian machines. []

    Mattia Rizzolo also made a number of changes to diffoscope this month as well, such as:

    • Also recognize GnuCash files as XML. []
    • Support the pgpdump PGP packet visualiser version 0.34. []
    • Ignore the new Lintian tag binary-with-bad-dynamic-table. []
    • Fix the Enhances field in debian/control. []

    Finally, Brent Spillner fixed the version detection for Black ‘uncompromising code formatter’ [], Jelle van der Waa added an external tool reference for Arch Linux [] and Roland Clobus added support for reporting when the GNU_BUILD_ID field has been modified []. Thank you for your contributions!


    Distribution work

    In Debian this month, 70 reviews of packages were added, 27 were updated and 41 were removed, adding to our database of knowledge about specific issues. A number of issue types were created as well, including:

    strip-nondeterminism version 1.13.0-1 was uploaded to Debian unstable by Holger Levsen. It included contributions already covered in previous months as well as new ones from Mattia Rizzolo, particularly that the dh_strip_nondeterminism Debian integration interface uses the new get_non_binnmu_date_epoch() utility when available: this is important to ensure that strip-nondeterminism does not break some kinds of binNMUs.


    In the world of openSUSE, however, Bernhard M. Wiedemann posted his monthly reproducible builds status report.


    In NixOS, work towards the longer-term goal of making the graphical installation image reproducible is ongoing. For example, Artturin made the gnome-desktop package reproducible.


    Upstream patches

    The Reproducible Builds project attempts to fix as many currently-unreproducible packages as possible. In December, we wrote a large number of such patches, including:


    Testing framework

    The Reproducible Builds project runs a significant testing framework at tests.reproducible-builds.org, to check packages and other artifacts for reproducibility. This month, the following changes were made:

    • Holger Levsen:

      • Run the Debian scheduler less often. []
      • Fix the name of the Debian ‘testing’ suite name. []
      • Detect builds that are rescheduling due to problems with the diffoscope container. []
      • No longer special-case particular machines having a different /boot partition size. []
      • Automatically fix failed apt-daily and apt-daily-upgrade services [], failed e2scrub_all.service & user@ systemd units [][] as well as ‘generic’ build failures [].
      • Simplify a script to powercycle arm64 architecture nodes hosted at/by codethink.co.uk. []
      • Detect if the udd-mirror.debian.net service is down. []
      • Various miscellaneous node maintenance. [][]
    • Roland Clobus (Debian ‘live’ image generation):

      • If the latest snapshot is not complete yet, try to use the previous snapshot instead. []
      • Minor: whitespace correction + comment correction. []
      • Use unique folders and reports for each Debian version. []
      • Turn off debugging. []
      • Add a better error description for incorrect/missing arguments. []
      • Report non-reproducible issues in Debian sid images. []

    Lastly, Mattia Rizzolo updated the automatic logfile parsing rules in a number of ways (eg. to ignore a warning about the Python setuptools deprecation) [][] and Vagrant Cascadian adjusted the config for the Squid caching proxy on a node. []



    If you are interested in contributing to the Reproducible Builds project, please visit our Contribute page on our website. However, you can get in touch with us via:

    Planet DebianJonathan Wiltshire: Continuing adventures of the mystery cable

    My 4×2 has been in action again, trying to find the remainder of the mystery sometimes-4mm/sometimes-2.5mm/sometimes-1.5mm cable. It finally appeared in the tiniest gap possible between back wall and joist.

    As we had suspected by tracing everything else, the junction is an unfused union of all three cable types with a 230V 32A circuit breaker on one end and a light switch on the other. So in the event of fault current at the kitchen lights, the 1.5mm cable is definitely going to burn out and almost certainly set fire to the flat roof. Delightful.

    It is no longer like this.

    More hunting for the mystery cable (bonus glimpse of one of the new light fittings)
    The 4×2 ceiling removal device in action
    At last, quarry in sight!
    Mystery Cable Junction Box of Fire and Doom ™?
    All the terrifying branches removed and ready to go back into the ceiling for now, until the next room is refurbished

    Planet DebianThomas Lange: FAI.me service now support backports for Debian 11 (bullseye)

    The FAI.me service for creating customized installation and cloud images now supports a backports kernel for the stable release Debian 11 (aka bullseye). If you enable the backports option, you will currently get kernel 5.14. This will help you if you have newer hardware that is not support by the default kernel 5.10. The backports option is also still available for the images when using the old Debian 10 (buster) release.

    The URL of the FAI.me service is

    https://fai-project.org/FAIme/

    FAI.me

    Worse Than FailureCodeSOD: Do Nothing

    Ivan encountered a strange bug. His organization uses the R language, which has a handy-dandy documentation language attached to it, for Rd files. The language itself is an organically grown hodge-podge of R and LaTeX, built to make it easy to format both plain text and R code within the documentation. It lets you use LaTeX-like commands, but also mix in R code to control the output.

    Ivan's problem was that one of his macros, which we'll call \mymacro, only worked sometimes. The specific cases where it failed were where the macro expanded into multi-line output, which once upon a time wasn't a thing that Rd supported, but is supported, and clearly wasn't the problem. Ivan poked at it from that direction, suspecting there was maybe a regression, and then spent a lot of time trying to understand the places where the macro did and didn't work.

    It took some time, but eventually the key difference was that the pages that worked also called another macro, \doi{}, which itself called \Sexpr[stage=build]{...}. Now, there's one important thing to note about the \Sexpr macro: it's meant to invoke R code inside of your documentation. And that made all the difference.

    The documentation which didn't contain R code would be stored as a raw documentation file in the package. Before rendering the documentation, the parseRd tool would need to parse the file and generate the documentation output. This would happen after the package was built and distributed. Since the \mymacro might expand into nothing, this was technically unparseable at that point, and would cause the documentation render to fail.

    On the other hand, documentation which did contain R code would be parsed and the parse tree would be stored in the package. There would be no parse step when the documentation got rendered. The whole "expanding to nothing" problem didn't exist in this situation.

    So the fix was obvious, at least to Ivan:

    --- man/macros/macros.Rd +++ man/macros/macros.Rd @@ -1,2 +1,3 @@ +\newcommand{\mustbuild}{\Sexpr[results=hide,stage=build]{}} -\newcommand{\mymacro}{\ifelse{html}{\out{...}}{...}} +\newcommand{\mymacro}{\mustbuild\ifelse{html}{\out{...}}{...}}

    He added a \mustbuild macro which hides the results of a null operation, then added a call to that macro inside \mymacro. Now the documentation generates properly, even in older version of R which don't support some of the macro techniques being used (since the parse tree itself is cached, after macro expansion is complete).

    [Advertisement] ProGet’s got you covered with security and access controls on your NuGet feeds. Learn more.

    Cryptogram More Russian Cyber Operations against Ukraine

    Both Russia and Ukraine are preparing for military operations in cyberspace.

    ,

    Planet DebianRussell Coker: Terrorists Inspired by Fiction

    The Tom Clancy book Debt of Honor published in August 1994 first introduced the concept of a heavy passenger aircraft being used as a weapon by terrorists against a well defended building. In April 1994 there was an attempt to hijack and deliberately crash FedEx flight 705. It’s possible for a book to be changed 4 months before publication, but it seems unlikely that a significant plot point in a series of books was changed in such a small amount of time so it’s likely that Tom Clancy got the idea first. There have been other variations on that theme, such as the Yokosuka_MXY-7 Kamakazi flying bomb (known by the Allies as “Baka” which is Japanese for idiot). But Tom Clancy seemed to pioneer the idea of a commercial passenger jet being subverted for the purpose of ground attack.

    7 years after Tom Clancy’s book was published the 911 hijackings happened.

    The TV series Black Mirror first aired in 2011, and the first episode was about terrorists kidnapping a princess and demanding that the UK PM perform an indecent act with a pig for her release. While the plot was a little extreme (the entire series is extreme) the basic concept of sexual extortion based on terrorist acts is something that could be done in real life, and if terrorists were inspired by this they are taking longer than expected to do it.

    Most democracies seem to end up with two major parties that are closely matched. Even if a government was strict about not negotiating with terrorists it seems likely that terrorists demanding that a politician perform an unusual sex act on TV would change things, supporters would be divided into groups that support and oppose negotiating. Discussions wouldn’t be as civil as when the negotiation involves money or freeing prisoners. If an election result was perceived to have been influenced by such terrorism then supporters of the side that lost would claim it to be unfair and reject the result. If the goal of terrorists was to cause chaos then that would be one way of achieving it, and they have had over 10 years to consider this possibility.

    Are we overdue for a terror attack inspired by Black Mirror?

    Planet DebianJelmer Vernooij: Personal Streaming Audio Server

    For a while now, I’ve been looking for a good way to stream music from my home music collection on my phone.

    There are quite a few options for music servers that support streaming. However, Android apps that can stream music from one of those servers tend to be unmaintained, clunky or slow (or more than one of those).

    It is possible to use something that runs in a web server, but that means no offline caching - which can be quite convenient in spots without connectivity, such as the Underground or other random bits of London with poor cell coverage.

    Server

    Most music servers today support some form of the subsonic API.

    I’ve tried a couple, with mixed results:

    • supysonic; Python. Slow. Ran into some issues with subsonic clients. No real web UI.
    • gonic; Go. Works well & fast enough. Minimal web UI, i.e. no ability to play music from a browser.
    • airsonic; Java. Last in a chain of (abandoned) forks. More effort to get to work, and resource intensive.

    Eventually, I’ve settled on Navidrome. It’s got a couple of things going for it:

    • Good subsonic implementation that worked with all the Android apps I used it with.
    • Great Web UI for use in a browser

    I run Navidrome in Kubernetes. It’s surprisingly easy to get going. Here’s the deployment I’m using:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    apiVersion: apps/v1
    kind: Deployment
    metadata:
     name: navidrome
    spec:
     replicas: 1
     selector:
       matchLabels:
         app: navidrome
     template:
       metadata:
         labels:
           app: navidrome
       spec:
         containers:
           - name: navidrome
             image: deluan/navidrome:latest
             imagePullPolicy: Always
             resources:
               limits:
                 cpu: ".5"
                 memory: "2Gi"
               requests:
                 cpu: "0.1"
                 memory: "10M"
             ports:
               - containerPort: 4533
             volumeMounts:
               - name: navidrome-data-volume
                 mountPath: /data
               - name: navidrome-music-volume
                 mountPath: /music
             env:
               - name: ND_SCANSCHEDULE
                 value: 1h
               - name: ND_LOGLEVEL
                 value: info
               - name: ND_SESSIONTIMEOUT
                 value: 24h
               - name: ND_BASEURL
                 value: /navidrome
             livenessProbe:
                httpGet:
                  path: /navidrome/app
                  port: 4533
                initialDelaySeconds: 30
                periodSeconds: 3
                timeoutSeconds: 90
         volumes:
            - name: navidrome-data-volume
              hostPath:
               path: /srv/navidrome
               type: Directory
            - name: navidrome-music-volume
              hostPath:
                path: /srv/media/music
                type: Directory
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: navidrome
    spec:
      ports:
        - port: 4533
          name: web
      selector:
        app: navidrome
      type: ClusterIP
    

    At the moment, this deployment is still tied to the machine with my music on it since it relies on hostPath volumes, but I’m planning to move that to ceph in the future.

    I then expose this service on /navidrome on my private domain (here replaced with example.com) using an Ingress:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: navidrome
    spec:
      ingressClassName: nginx
      rules:
      - host: example.com
        http:
          paths:
          - backend:
              service:
                name: navidrome
                port:
                  name: web
            path: /navidrome(/|$)(.*)
            pathType: Prefix
    

    Client

    On the desktop, I usually just use navidrome’s web interface. Clementine’s support for subsonic is also okay. sublime-music is meant to be a music player specifically for Subsonic, but I’ve not really found it stable enough for day-to-day usage.

    There are various Android clients for Subsonic, but I’ve only really considered the Open Source ones that are hosted on F-Droid. Most of those are abandoned, but D-Sub works pretty well - as does my preferred option, Subtracks.

    Worse Than FailureCodeSOD: Cloudy Optimizations

    Search engine optimization is both a dark art and a corrupt industry. Search providers work hard to keep their algorithms opaque. SEO is a mix of guessing and snake oil and sometimes outright lying.

    For example, Mark M recently inherited a rather… bad PHP website. One of its notable SEO tweaks was that it had a tag cloud that slapped a bunch of keywords together to give a sense of what kinds of articles had been posted recently. At least, that was the idea. But when Mark dug into the code, there was no sign that there was any source of tags in the database. In fact, articles didn't get tagged at all. So where was the tag cloud coming from?

    <div id="tag_cloud"> <h2>Popular tags</h2> <p> <?php $last_rand = ''; $words[0] = 'Raffle'; $words[1] = 'Skill'; $words[2] = 'Game'; $words[3] = 'Win'; $words[4] = 'Cars'; $words[5] = 'Bikes'; $words[6] = 'Holidays'; $words[7] = 'Competition'; $words[8] = 'Electronics'; $words[9] = 'Fun'; $words[10] = 'Ferrari'; $words[12] = 'Lamborgini'; $words[13] = 'Maserati'; $words[14] = 'Ducati'; $words[15] = 'Barbados'; $words[16] = 'MacBook Air'; $words[17] = 'Triumph'; $words[18] = 'Sri-Lanka'; $words[19] = 'Bentley'; $words[20] = 'Rolls Royce'; for ($i=1; $i < count($words); $i++) { $rand = random(1, 10, $last_rand); $last_rand = $rand; ?> <span class="tag_<?php eh($rand); ?>"><?php eh($words[$i]); ?></span> <?php } ?> </p> </div><!-- tag_cloud -->

    Yes, they just hard coded a bunch of tags that they presumed would drive clicks, then dump them into the document while applying a randomly selected CSS class to style them all differently.

    It's… a choice. A series of choices, really. A series of bad choices, and I don't like any of it.

    [Advertisement] ProGet’s got you covered with security and access controls on your NuGet feeds. Learn more.

    ,

    Charles StrossOutage report

    The blog was hacked: some arsewipe had figured out how to use it to host a bunch of links to dodgy sports videos, and in the process they messed up the permissions on the directory housing the scripts that run the blog.

    All cleaned up now, everything back online. Free bonus extra: Markdown should be working in comments as well as basic HTML tags.

    I plan to throw in some really major changes on the blog in the not too distant future—between April and September next year. (Hint: new and much faster server (this one is a 2008-spec machine), new blog engine, design overhaul, possibly a separate conferencing system—but right now I have other things on my plate.

    Worse Than FailureMy Many Girlfriends

    In the long ago, wild-west days of the late 90s, there was an expectation that managers would put up with a certain degree of eccentricity from their software developers. The IT and software boom was still new, people didn't quite know what worked and what didn't, the "nerds had conquered the Earth" and managers just had to roll with this reality. So when Barry D gave the okay to hire Sten, who came with glowing recommendations from his previous employers, Barry and his team were ready to deal with eccentricities.

    Of course, on the first day, building services came to Barry with some concerns about Sten's requests for his workspace. No natural light. No ventilation ducts that couldn't be closed. And then the co-workers who had interacted with Sten expressed their concerns.

    During the hiring process, Sten had come off as a bit odd, but this seemed unusual. So Barry descended the stairs into the basement, to find Sten's office, hidden between a janitorial closet and the breaker box for the building. Barry knocked on the door.

    "Sten awaits you. Enter."

    Barry entered, and found Sten precariously perched on an office chair, removing several of the fluorescent bulbs from the ceiling fixture. The already dark space was downright cave-like with Sten's twilight lighting arrangement. "He welcomes you," Sten said.

    "Uh, yeah, hi. I'm Barry, I'm working on the Netware 3.x portion of the product, and Carl just wanted be to check in. Everything okay?

    "This is acceptable to Sten," Sten said, gesturing at the dim office as he descended from the chair. Sten's watched beeped on the hour, and Sten carefully placed the fluorescent bulb off to the side, in a stack of similarly removed bulbs, and then went to his desk. In rapid succession, he popped open a few pill containers- 5000mg of vitamin C, a handful of herbal and homeopathic pills- and gulped them down. He then washed the pills down with a tea that smelled like a mixture of kombucha and a dead raccoon buried in a dumpster.

    "He is pleased to meet you," Sten said, with a friendly nod. Barry blinked, trying to track the conversation. "And he is pleased with it, and has made great progress on building it. You will like his things, yes?"

    "Uh… yes?"

    "He is pleased, and I hope you can go to him and tell him that he is pleased with this, and set his mind at ease about Sten."

    So it went with Sten. He strictly referred to himself in the third person. He frequently spoke in sentences with nothing but pronouns, and frequently reused the same pronoun to refer to different people. The vagueness was confounding, but Sten's skill was in Netware 2.x- a rare and difficult set of skills to find. So long as the code was clear, everything would be fine.

    Everything was not fine. While Sten's code didn't have the empty vagueness of unclear pronouns, it also didn't have the clarity of meaningful variable names. Every variable and every method name was given a female first name. "Each of these is named for one of Sten's girlfriends." Given the number of names required, it was improbable that these were real girlfriends, but Sten gave no hint about this being fiction.

    There was some consistency about the names. Instead of i, j, and k loop variables, you had Ingrid, Jane, and Katy. Zaria seemed to be only used as a parameter to methods. Karla seemed to be a temporary variable to hold intermediate results. None of these conventions were documented, obviously, and getting Sten to explain them was an exercise in confusion.

    It led to some entertaining code reviews. "Michelle here talks to Nancy about Francine, and then Ingrid goes through Francine's purse to find Stacy." This described a method (Michelle) which called another method (Nancy), passing an array (Francine). Nancy iterates across the array (using Ingrid), to find a specific entry in the array (Stacy).

    Sten lasted a few weeks at the job. It wasn't a very successful period of time for anyone. Peculiarities aside, the final straw wasn't the odd personal habits or the strange coding conventions- Sten just couldn't produce working code quickly enough to keep up with the rest of the team. Sten had to be let go.

    A few weeks later, Barry got a call from a hiring manager at Initrode. Sten had applied, and they were checking the reference. "Yes, Sten worked here," Barry confirmed. After a moment's thought, he added, "I suggest that you bring him in for a second interview, and have him walk you through some code that he's written."

    A few weeks after that, Barry got a gift basket from the manager at Initrode.

    Thanks for the tip

    Sten did not get hired at Initrode.

    [Advertisement] Otter - Provision your servers automatically without ever needing to log-in to a command prompt. Get started today!

    ,

    David BrinLife in the cosmos: reflecting on SETI

    I have studied and listened and written extensively - in fiction and nonfiction, for most of my life - about SETI, METI and life in the cosmos. For decades I have refused to glom onto premature conclusions or "Aha! This must be it!" declarations. Though new information or insights by others can change how I rank-order the possibilities.


    In discussing the possibility of alien life, the UK Astronomer Royal, Lord Martin Rees, pretty much describes one of the plot lines in my novel Existence in this article: Why Intelligent Extraterrestrials are more likely to be artificial than biological. He notes, "I’d argue it would even be worth looking for traces of aliens in our own solar system. While we can probably rule out visits by human-like species, there are other possibilities. An extraterrestrial civilisation that had mastered nanotechnology may have transferred its intelligence to tiny machines, for example. It could then invade other worlds, or even asteroid belts, with swarms of microscopic probes."


    And yes, I agree with Martin, which is one more reason we should emphasize missions to asteroids over the sterile-poison and almost useless (in the near term) Luna. (That sandbox should mostly be left to the kiddies - with some important exceptions.)


    Here's one explanation for alien behavior, curtesy of Candorville by Darrin Bell. I've discussed the "cat laser hypothesis" in my posting: What's really up with UAPs/UFOs?  Another take can be found in my story Those Eyes.



    == They keep getting fuzzier. Why would ‘aliens’ do that? ==


    Eray Ozkural shares “UAP” footage he took last June, showing glowing dots dancing over waters near the Princess Islands, darting about and occasionally causing explosion-like airbursts. The latter phenomenon I’ve not seen before and it’s worth a viewing. Still, instead of refuting my “cat laser” scenario, these airbursts only re-double the likelihood of that explanation! 


    Alas, zealots keep repeating the fundamental assumption that these are 'objects' experiencing 'propulsion', and hence, since the movements seem to violate Newton, inertia, and even Einstein, they must be super-advanced alien ships. 


    Alas for that scenario (and I have spent my life exploring concepts of the ‘alien’, including many decades involved in SETI), what I see there has NONE of the properties of an actual, physical 'object' and all properties of an excited patch of atmosphere! A compact patch (of probably excited plasma) that glows and occasionally causes air detonations. 


    What always lingers in the air, after one of these sightings, is one of the several key questions that I ask in my most recent UAP/UFO posting, which is why do these sightings keep getting fuzzier and fuzzier, now that there are approximately a MILLION times as many active cameras as there were in the 1950s? 

    I'm not the only one discussing this vexing (actually damning) paradox. See this appraisal.

    Then there is the locale, once again over an ocean where the real 'objects' doing all this – presumably ships on the water - aren't being watched by any of the people aiming cameras at this blatant example of a 3D cat laser.  


    Of course the crews of those ships aren’t posting videos. I bet they are too busy messing with us.


    Good kitties. Oh, you funny kitties, chase the spot! Chase it!



    == Oh, it gets much worse! We're being messed with. ==


    Oh. While we’re at it… and not a lot dumber than UFO fetishism… Flat Earthers are doing what all of that ilk do, when refuted... doubling down on the mystical inanity. In a blatant hearkening to Teutonic (Yggdrasil) mythology (a romanticism that then fed right into naziism), this latest hate-science chant-incantation spends 90 minutes persuading more of the gullible than you'd believe possible. “Flat-Earthers Have a Wild New Theory About Forests: What it means to believe that “real” trees no longer exist.”  


    Oh and what's with "birds are fake?"  


    Only one thing makes these - and political - cultists flee. 

    Demands for cash wagers. 

    Watch them vanish, poof, like magic!



    == Planetary protection provisions ==


    A highly controversial proposal may be overdue… to allow careful relaxation of some ‘planetary protection’ rules for spacecraft sent to certain parts of Mars where instruments show no substantial presence of water ice or brines near the surface. 


    “Such regions could include a significant portion of the surface of Mars, because the UV environment is so biocidal that terrestrial organisms are, in most cases, not likely to survive more than one to two sols, or Martian days. For missions that access the subsurface (down to 1 meter), regions on Mars expected to have patchy or no water ice below the surface might also be visited by spacecraft more relaxed bioburden requirements, because such patchy ice is likely not conducive to the proliferation of terrestrial microorganisms.”


    Erring on the side of caution is good and wise! We stand on a mountain of our ancestors (oft well-intended) mistakes! Still, it is worthwhile seeking a path that still enables forward movement.


    == An age of wonders! ==


    Earlier in 2021 we watched robots scoop asteroids and Perseverance land on Mars and a tiny helicopter fit over the Red Planet... and so much more!


    Oh, and see fabulous video of how the Webb Space Telescope will unfold...


    ... and a list of amazing space endeavors we hope humanity will accomplish in the coming year.


    And yes, we are amazing, accomplishing wonders through goodwill, cooperation, FAIR competition and science and - above all - citizenship. Which is why enemies try so hard to get us at each others' throats. 


    Let's defy them and make a better tomorrow. Start by opening a window and shouting "I am NOT 'mad as hell' and I refuse to let you lure me into that self-destructive trip!"


    May 2022 be your best yet! And the worst of all that follow.




    ,

    Cryptogram Friday Squid Blogging: Deep-Dwelling Squid

    We have discovered a squid — (Oegopsida, Magnapinnidae, Magnapinna sp.) — that lives at 6,000 meters deep.

    :They’re really weird,” says Vecchione. “They drift along with their arms spread out and these really long, skinny, spaghetti-like extensions dangling down underneath them.” Microscopic suckers on those filaments enable the squid to capture their prey.

    But the squid that Jamieson and Vecchione saw in the footage captured 6,212 meters below the ocean’s surface is a small one. They estimate that its mantle measured 10 centimeters long — ­about a third the size of the largest-known magnapinnid. And the characteristically long extensions observed on other magnapinnids were nowhere to be seen in the video. That could mean, says Vecchione, that this bigfin squid was a juvenile.

    Research paper.

    As usual, you can also use this squid post to talk about the security stories in the news that I haven’t covered.

    Read my blog posting guidelines here.

    Cryptogram Apple AirTags Are Being Used to Track People and Cars

    This development suprises no one who has been paying attention:

    Researchers now believe AirTags, which are equipped with Bluetooth technology, could be revealing a more widespread problem of tech-enabled tracking. They emit a digital signal that can be detected by devices running Apple’s mobile operating system. Those devices then report where an AirTag has last been seen. Unlike similar tracking products from competitors such as Tile, Apple added features to prevent abuse, including notifications like the one Ms. Estrada received and automatic beeping. (Tile plans to release a feature to prevent the tracking of people next year, a spokeswoman for that company said.)

    […]

    A person who doesn’t own an iPhone might have a harder time detecting an unwanted AirTag. AirTags aren’t compatible with Android smartphones. Earlier this month, Apple released an Android app that can scan for AirTags — but you have to be vigilant enough to download it and proactively use it.

    Apple declined to say if it was working with Google on technology that would allow Android phones to automatically detect its trackers.

    People who said they have been tracked have called Apple’s safeguards insufficient. Ms. Estrada said she was notified four hours after her phone first noticed the rogue gadget. Others said it took days before they were made aware of an unknown AirTag. According to Apple, the timing of the alerts can vary depending on the iPhone’s operating system and location settings.

    MELinks December 2021

    Wired magazine has many short documentary films on YouTube, this one about How Photography is Affecting Our Brains is particularly good [1].

    Matt Blaze wrote an informative blog post about Faraday cages for phones [2]. It seems that the commercial shielded bags are all pretty good while doing it yourself with aluminium foil may get similar results or may get much worse results with no obvious difference in the quality of the wrapping. Aluminium foil doesn’t protect that well and doesn’t protect consistently. A metal biscuit tin performed quite well and consistently, so that’s a cheap option for reducing signals.

    Umair Haque wrote an insightful article about the single word that describes most of the problems the world faces right now [3].

    Forbes has an informative article about the early days of the Ford company when they doubled wages, it proves that they didn’t do so to enable workders to afford cars but to avoid staff turnover (which is expensive) [4]. Also the Ford company had a fascistic approach to employees, controlling what they were allowed to do in their spare time if they wanted the bonus payment. The wages weren’t doubled, there was a bonus payment that would double the salary if the employee was eligible for the bonus. One thing that Forbes gets wrong is that they claim that it was only having higher pay than other companies that provided a benefit and that a higher minimum wage wouldn’t, the problem with that idea is that a higher minimum wage would discourage people from having multiple jobs and allow more families to not have the mother working (a condition for a man to get the Ford bonus was for his wife to not work).

    The WSJ has an interesting article about Intel’s datacenter for running all the different configurations of CPUs that they have supported over the last 10 years for security tests [5]. My Thinkpad (which is less than 10yo) is vulnerable to one of the SPECTRE family of exploits as Intel hasn’t released microcode to fix it, getting fixed microcode out for all the systems from major vendors like Lenovo would be a good idea if they want to improve their security.

    NPR has an interesting article about the correlation between support for Trump in counties of the US with lack of vaccination and Covid19 deaths [6]. No surprises, but it’s good to see the graphs.

    Cory Doctorow wrote an interesting article on the lack of “slack” in the current American education system [7]. It’s not that bad in Australia but we are unfortunately moving in the American direction.

    Teen Vogue has an insightful article about the problems with the focus on resilience [8], while resilience is good we should make it a higher priority to avoid putting people in situations where they need to be resiliant than on encouraging resilience.

    Worse Than FailureError'd: Fin

    At the end of the year, it's customary to reflect on the past and imagine a future. Here at Error'd, reflecting on the past is natural, but all we can do about the future is hope. So to close out the longest 2020, here are a handful of little muffed missives.

    Occasional contributor Peter diagnoses a counting error. "Looks like the web server had a thing or two to add to the discussion."

    count

     

    Long-time reader Willy M. has been sending us goodies for over a decade. This time he's a bit heated. "Hard to plan finances when your 0-month energy plan ends on invalid date."

    nrg

     

    Willy is not to be outdone by multiple contributor Ryan S. who shares a tasty morsel. "I wasn't brave enough to chance the mystery dish."

    mystery

     

    And in with a BOGO, it's Ryan S. again, who has found something emptier than a vacuum. "I guess Kohls started using qubits for inventory quantity."

    left

     

    Finally, to ring out the year (honestly, it really was 2021), handy shopper Stewart cleans up. "Screwfix maths goes screwy: £3.89 less the £0.64 tax makes £14.25??? Can’t even think what they did to make this so wrong."

    neg

     

    Happy New Year, and we'll see you again on the other side of that arbitrary Gregorian divide.

    [Advertisement] BuildMaster allows you to create a self-service release management platform that allows different teams to manage their applications. Explore how!

    ,

    Worse Than FailureBest of…: Best Of 2021: Totally Up To Date

    2021 has been a year that flew by so quickly it's hard to keep up. But keeping up with changes can frequently be harder than it seems.

    NOAA Central Library Card Catalog 1

    The year was 2015. Erik was working for LibCo, a company that offered management software for public libraries. The software managed inventory, customer tracking, fine calculations, and everything else the library needed to keep track of their books. This included, of course, a huge database with all book titles known to the entire library system.

    Having been around since the early 90s, the company had originally not implemented Internet connectivity. Instead, updates would be mailed out as physical media (originally floppies, then CDs). The librarian would plug the media into the only computer the library had, and it would update the catalog. Because the libraries could choose how often to update, these disks didn't just contain a differential; they contained the entire catalog over again, which would replace the whole database's contents on update. That way, the database would always be updated to this month's data, even if it hadn't changed in a year.

    Time marched on. The book market grew exponentially, especially with the advent of self-publishing, and the Internet really caught on. Now the libraries would have dozens of computers, and all of them would be connected to the Internet. There was the possibility for weekly, maybe even daily updates, all through the magic of the World Wide Web.

    For a while, everything Just Worked. Erik was with the company for a good two years without any problems. But when things went off the rails, they went fast. The download and update times grew longer and longer, creeping ever closer to that magic 24-hour mark where the device would never finish updating because a new update would be out before the last one was complete. So Erik was assigned to find some way, any way, to speed up the process.

    And he quickly found such a way.

    Remember that whole drop the database and replace the data thing? That was still happening. Over the years, faster hardware had been concealing the issue. But the exponential catalogue growth had finally outstripped Moore's Law, meaning even the newest library computers couldn't keep up with downloading the whole thing every day. Not on library Internet plans.

    Erik took it upon himself to fix this issue once and for all. It only took two days for him to come up with a software update, which was in libraries across the country after 24 hours. The total update time afterward? Only a few minutes. All he had to do was rewrite the importer/updater to accept lists of changed database entries, which numbered in the dozens, as opposed to full data sets, which numbered in the millions. No longer were libraries skipping updates, after all.

    Erik's reward for his hard work? A coupon for a free personal pizza, which he suspected his manager clipped from the newspaper. But at least it was something.

    [Advertisement] Continuously monitor your servers for configuration changes, and report when there's configuration drift. Get started with Otter today!

    ,

    Krebs on SecurityHappy 12th Birthday, KrebsOnSecurity.com!


    KrebsOnSecurity.com celebrates its 12th anniversary today! Maybe “celebrate” is too indelicate a word for a year wracked by the global pandemics of COVID-19 and ransomware. Especially since stories about both have helped to grow the audience here tremendously in 2021. But this site’s birthday also is a welcome opportunity to thank you all for your continued readership and support, which helps keep the content here free to everyone.

    More than seven million unique visitors came to KrebsOnSecurity.com in 2021, generating some 12 million+ pageviews and leaving almost 8,000 comments. We also now have nearly 50,000 subscribers to our email newsletter, which is still just a text-based (non-HTML) email that goes out each time a new story is published here (~2-3 times a week).

    Back when this site first began 12 years ago, I never imagined it would attract such a level of engagement. Before launching KrebsOnSecurity, I was a tech reporter for washingtonpost.com. For many years, The Post’s website was physically, financially and editorially separate from what the dot-com employees affectionately called “The Dead Tree Edition.” When the two newsrooms finally merged in 2009, my position was eliminated.

    Happily, the blog I authored for four years at washingtonpost.com — Security Fix — had attracted a sizable readership, and it seemed clear that the worldwide appetite for in-depth news about computer security and cybercrime would become practically insatiable in the coming years.

    Happier still, The Post offered a severance package equal to six months of my salary. Had they not thrown that lifeline, I doubt I’d have had the guts to go it alone. But at the time, my wife basically said I had six months to make this “blog thing” work, or else find a “real job.”

    God bless her eternal patience with my adopted occupation, because KrebsOnSecurity has helped me avoid finding a real job for a dozen years now. And hopefully they let me keep doing this, because at this point I’m certainly unqualified to do much else.

    I’d be remiss if I didn’t take this opportunity to remind Dear Readers that advertisers do help keep the content free here to everyone. For security and privacy reasons, KrebsOnSecurity does not host any third-party content on this site — and this includes the ad creatives, which are simply images or GIFs vetted by Yours Truly and served directly from krebsonsecurity.com.

    That’s a long-winded way of asking: If you regularly visit KrebsOnSecurity.com with an ad blocker, please consider adding an exception for this site.

    Thanks again, Dear Readers. Please stay safe, healthy and alert in 2022. See you on the other side!

    Worse Than FailureBest of…: Best of 2021: The Therac-25 Incident

    It's not always "fun" bugs and flaws. Earlier this year, we did a deep dive on a much more serious example of what can go wrong.

    A few months ago, someone noted in the comments that they hadn't heard about the Therac-25 incident. I was surprised, and went off to do an informal survey of developers I know, only to discover that only about half of them knew what it was without searching for it.
    I think it's important that everyone in our industry know about this incident, and upon digging into the details I was stunned by how much of a WTF there was.
    Today's article is not fun, or funny. It describes incidents of death and maiming caused by faulty software engineering processes. If that's not what you want today, grab a random article from our archive, instead.

    When you're strapping a patient to an electron gun capable of delivering a 25MeV particle beam, following procedure is vitally important. The technician operating the Therac-25 radiotherapy machine at the East Texas Cancer Center (ETCC) had been running this machine, and those like it, long enough that she had the routine down.

    On March 21, 1986, the technician brought a patient into the treatment room. She checked their prescription, and positioned them onto the bed of the Therac-25. Above the patient was the end-point of the emitter, a turntable which allowed her to select what kind of beam the device would emit. First, she set the turntable to a simple optical laser mode, and used that to position the patient so that the beam struck a small section of his upper back, just to one side of his spine.

    Therac 25 54.gif
    By Ajzh2074 - Own work, CC BY-SA 4.0, Link

    With the patient in the correct position, she rotated the turntable again. There were two other positions. One would position an array of magnets between the beam and the patient; these would shape and aim the beam. The other placed a block of metal between the beam and the patient. When struck by a 25MeV beam of electrons, the metal would radiate X-rays.

    This patient's prescription was for an electron beam, so she positioned the turntable and left the room. In the room next door, shielded from the radiation, was the control terminal. The technician started keying in the prescription to begin the treatment.

    If things were exactly following the routine, she'd be able to communicate with the patient via an intercom, and monitor the patient via a video camera. Sadly, that system had broken down today. Still, this patient had already had a number of treatments, so they knew what to expect, so that communication was hardly necessary. In fact, the Therac-25 and all the supporting equipment were always finicky, so "something doesn't work" practically was part of the routine.

    The technician had run this process so many times she started keying in the prescription. She'd become an extremely fast typist, at least on this device, and perhaps too fast. In the field for beam type, she accidentally keyed in "X", for "x-ray". It was a natural mistake, as most patients got x-ray treatments, and it wasn't much of a problem: the computer would see that the turntable was in the wrong position and refuse to dose the patient. She quickly tapped the "UP" arrow on the keyboard to return to the field, corrected the value to "E", for electron, and confirmed the other parameters.

    Her finger hovered over the "B" key on the keyboard while she confirmed her data entry. Once she was sure everything was correct, she pressed "B" for "beam start". There was no noise, there never was, but after a moment, the terminal read: "Malfunction 54", and then "Treatment Pause".

    Error codes were no surprise. The technicians kept a chart next to the console, which documented all the error codes. In this case, "Malfunction 54" meant a "dose input 2" error.

    That may not have explained anything, but the technician was used to the error codes being cryptic. And this was a "treatment pause", which meant the next step was to resume treatment. According to the terminal, no radiation had been delivered yet, so she hit the "P" key to unpause the beam.

    That's when she heard the screaming.

    The patient had been through a number of these sessions already, and knew they shouldn't feel a thing. The first time the technician activated the beam, however, he felt a burning sensation, which he later described like "hot coffee" being poured on his back. Without any intercom to call for help, he started to get off the treatment table. He was still extricating himself, screaming for help, when the technician unpaused the beam, at which point he felt something like a massive electric shock.

    That, at first, was the diagnosis. A malfunction in the machine must have delivered an electric shock. The patient was sent home, and the hospital physicist examined the Therac-25, confirming everything was in working order and there were no signs of trouble. It didn't seem like it would happen again.

    The patient had been prescribed a dose of 180 rads as part of a six-week treatment program that would deliver 6,000 rads in total. According to the Therac-25, the patient had received an underdose, a fraction of that radiation. No one knew it yet, but the malfunction had actually delivered between 16,000 and 25,000 rads. The patient seemed fine, but in fact, they were already dead and no one knew it yet.


    The ETCC incident was not the first, and sadly was not the last malfunction of the Therac-25 system. Between June 1985 and July 1987, there were six accidents involving the Therac-25, manufactured by Atomic Energy Canada Limited (AECL). Each was a severe radiation overdose, which resulted in serious injuries, maimings, and deaths.

    As the first incidents started to appear, no one was entirely certain what was happening. Radiation poisoning is hard to diagnose, especially if you don't expect it. As with the ETCC incident, the machine reported an underdose despite overdosing the patient. Hospital physicists even contacted AECL when they suspected an overdose, only to be told such a thing was impossible.

    A few weeks later, there was a second overdose at ETCC, and it was around that time that the FDA and the press started to get involved. Early on, there was a great deal of speculation about the cause. Of interest is this comment from the RISKS mailing list from 1986.

    Here is my speculation of what happened: I suspect that the current in the electron beam is probably much greater in X-ray mode (because you want similar dose rates in both modes, and the production of X-rays is more indirect). So when you select X-rays, I'll bet the target drops into place and the beam current is boosted. I suspect in this case, the currentwas boosted before the target could move into position, and a very high current electron beam went into the patient.

    How could this be allowed to happen? My guess is that the software people would not have considered it necessary to guard against this failure mode. Machine designers have traditionally used electromechanical interlocks to ensure safety. Computer control of therapy machines is a fairly recent development and is layered on top of, rather than substituting for, the old electromechanical mechanisms.


    The Therac-25 was the first entirely software-controlled radiotherapy device. As that quote from Jacky above points out: most such systems use hardware interlocks to prevent the beam from firing when the targets are not properly configured. The Therac-25 did not.

    The software included a number of key modules that ran on a PDP-11. First, there were separate processes for handling each key function of the system: user input, beam alignment, dosage tracking, etc. Each of these processes was implemented in PDP-11 Assembly. Governing these processes was a real-time OS, also implemented in Assembly. All of this software, from the individual processes to the OS itself, were the work of a single software developer.

    AECL had every confidence in this software, though, because it wasn't new. The earliest versions of the software appeared on the Therac-6. Development started in 1972, and the software was adapted to the Therac-25 in 1976. The same core was also used on the Therac-20. Within AECL, the attitude was that the software must be safe because they'd been using it for so long.

    In fact, when AECL performed their own internal safety analysis of the Therac-25 in 1983, they did so with the following assumptions:

    1) Programming errors have been reduced by extensive testing on a hardware simulator, and under field conditions on teletherapy units. Any residual software errors are not included in the analysis. 2) Program software does not decay due to wear, fatigue, or reproduction errors. 3) Computer software errors are caused by faulty hardware components, and "soft" (random) errors induced by alpha particles or electromagnetic noise.

    In other words: we've used the software for a long time and software always copies and deploys perfectly. So, any bugs we see would have to be transient bugs caused by radiation or hardware errors.


    After the second incident at ETCC, the hospital physicist took the Therac-25 out of service and worked with the technician to replicate the steps that caused the overdose. It wasn't easy to trigger the "Malfunction 54" error message, especially when they were trying to methodically replicate the exact steps, because as it turned out, if you entered the data slowly, there were no problems.

    To trigger the overdose, you needed to type quickly, the kind of speed that an experienced operator might have. The physicist practiced until he could replicate the error, then informed AECL. While he was taking measurements to see how large the overdoses were, AECL called back. They couldn't replicate the issue. "It works on my machine," essentially.

    After being coached on the required speed, the AECL technicians went back to it, and confirmed that they could trigger an overdose. When the hospital physicist took measurements, they found roughly 4,000 rads in the overdose. AECL, doing similar tests, triggered overdoses of 25,000 rads. The reality is that, depending on the timing, the output was potentially random.

    With that information, the root cause was easier to understand: there was a race condition. Specifically, when the technician mistyped "X" for x-ray, the computer would calculate out the beam activation sequence to deliver a high-energy beam to create x-rays. When the technician hit the "UP" arrow to correct their mistake, it should've forced a recalculation of that activation sequence—but if the user typed too quickly, the UI would update and the recalculation would never happen.


    By the middle of 1986, the Food and Drug Administration (FDA) was involved, and demanded that AECL provide a Corrective Action Plan (CAP). What followed was a lengthy process of revisions as AECL would provide their CAP and the FDA would follow up with questions, resulting in new revisions to the CAP.

    For example, the FDA reviewed the first CAP revision and noted that it was incomplete. Specifically, it did not include a test plan. AECL responded:

    no single test plan and report exists for the software since both hardware and software were tested and exercised separately together for many years.

    The FDA was not pleased with that, and after more back and forth, replied:

    We also expressed our concern that you did not intend to perform the [test] protocol to future modifications to the software. We believe that rigorous testing must be performed each time a modification is made to ensure the modification does not adversely affect the safety of the system.

    While AECL struggled to include complex tasks like testing in their CAP, they had released instructions that allowed for a temporary fix to prevent future incidents. Unfortunately, in January, 1987, there was another incident, caused by a different software bug.

    In this bug, there was a variable shared by multiple processes, meant as a flag to decide whether or not the beam collimator in the turntable needs to be checked to ensure everything is in the correct position. If the value is non-zero, the check needs to be performed. If the value is zero, it does not. Unfortunately, the software would increment the field, and the field was only one byte wide. This meant every 256th increment, the variable would be zero when it should have been non-zero. If that incorrect zero lined up with an operator action, the beam would fire at full energy without the turntable in the right position.

    AECL had a fix for that (stop incrementing and just set the value), and amended their CAP to include that fix. The FDA recognized that was probably going to fix the problem, but still had concerns. In an internal memo:

    We are in the position of saying that the proposed CAP can reasonably be expected to correct the deficiencies for which they were developed (Tyler). We cannot say that we are [reasonably] confident about the safety of the entire system…

    This back-and-forth continued through a number of CAP revisions. At each step in the process, the FDA found issues with testing. AECL's test process up to this point was simply to run the machine and note if anything went wrong. Since the software had been in use, in some version, for over a decade, they did not see any reason to test the software, and thus had no capacity or plan for actually testing the software when the FDA required it.

    The FDA, reviewing some test results, noted:

    Amazingly, the test data presented to show that the software changes to handle the edit problems in the Therac-25 are appropriate prove the opposite result. … I can only assume the fix is not right, or the data were entered incorrectly.


    Eventually, the software was fixed. Legislative and regulatory changes were made to ensure incidents like this couldn't happen in the future, at least not the same way.

    It's worth noting that there was one developer who wrote all of this code. They left AECL in 1986, and thankfully for them, no one has ever revealed their identity. And while it may be tempting to lay the blame at their feet—they made every technical choice, they coded every bug—it would be wildly unfair to do that.

    With AECL's continued failure to explain how to test their device, it should be clear that the problem was a systemic one. It doesn't matter how good your software developer is; software quality doesn't appear because you have good developers. It's the end result of a process, and that process informs both your software development practices, but also your testing. Your management. Even your sales and servicing.

    While the incidents at the ETCC finally drove changes, they weren't the first incidents. Hospital physicists had already reported problems to AECL. At least one patient had already initiated a lawsuit. But that information didn't propagate through the organization; no one put those pieces together to recognize that the device was faulty.

    On this site, we joke a lot at the expense of the Paula Beans and Roys of this world. But no matter how incompetent, no matter how reckless, no matter how ignorant the antagonist of a TDWTF article may be, they're part of a system, and that system put them in that position.

    Failures in IT are rarely individual failures. They are process failures. They are systemic failures. They are organizational failures. The story of AECL and the Therac-25 illustrates how badly organizational failures can end up.

    AECL did not have a software process. They didn't view software as anything more than a component of a larger whole. In that kind of environment, working on safety critical systems, no developer could have been entirely successful. Given that this was a situation where lives were literally on the line, building a system that produced safe, quality software seems like it should have been a priority. It wasn't.

    While the Therac-25 incident is ancient history, software has become even more important. While we would hope safety-critical software has rigorous processes, we know that isn't always true. The 737MAX is an infamous, recent example. But with the importance of software in the modern world, even more trivial software problems can get multiplied at scale. Whether it's machine learning reinforcing racism, social networks turning into cesspools of disinformation or poorly secured IoT devices turning into botnets, our software exists and interacts with the world, and has real world consequences.

    If nothing else, I hope this article makes you think about the process you use to create software. Is the process built to produce quality? What obstacles to quality are there? Is quality a priority, and if not, why not? Does your process consider quality at scale? You may know your software's failure modes, but do you understand your organization's failure modes? Its blind spots? The assumptions it makes which may not be valid in all cases?


    Let's return for a moment to the race condition that caused the ETCC incidents. This was caused by users hitting the up arrow too quickly, preventing the system from properly registering their edits. While the FDA CAP process was grinding along, AECL wanted to ensure that people could still use the Therac-25 safely, and that meant publishing quick fixes that users could apply to their devices.

    This is the letter AECL sent out to address that bug:

    SUBJECT: CHANGE IN OPERATING PROCEDURES FOR THE THERAC-25 LINEAR ACCELERATOR
    Effective immediately, and until further notice, the key used for moving the cursor back through the prescription sequence (i.e., cursor "UP" inscribed with an upward pointing arrow) must not be used for editing or any other purpose.
    To avoid accidental use of this key, the key cap must be removed and the switch contacts fixed in the open position with electrical tape or other insulating material.
    For assistance with the latter you should contact your local AECL service representative.
    Disabling this key means that if any prescription data entered is incorrect, than "R" reset command must be used and the whole prescription reentered.
    For those users of the Multiport option, it also means that editing of dose rate, dose, and time will not be possible between ports.

    On one hand, this is a simple instruction that would effectively prevent the ETCC incidents from reoccurring. On the other, it's terrifying to imagine a patient's life hanging on a ripped up keycap and electrical tape.


    This article is intended as a brief summary of the incident. Most of the technical details in this article come from this detailed account of the Therac-25 incident. That is the definitive source on the subject, and I recommend reading the whole thing. It contains much more detail, including deeper dives into the software choices and organizational failures.

    [Advertisement] Utilize BuildMaster to release your software with confidence, at the pace your business demands. Download today!

    ,

    Worse Than FailureBest of…: Best Of 2021: Worlds Collide

    As we take inventory of the past year, let's look back on one way people track history. --Remy

    Cundoki

    George had gotten a new job as a contractor at a medium-sized book distributor. He arrived nice and early on Day 1, enthusiastic about a fresh start in a new industry.

    His "office" turned out to be a huge warehouse stacked high with books. Upon greeting him, his manager pointed him to a PC in the corner of the warehouse, sitting on a desk with no partitions around it. The manager leaned over the machine and made a few double-clicks with the mouse until he opened up the H: drive. "There you go," he muttered, then left.

    George stared after him, perplexed, wondering if the manager intended to bring over coffee or other coworkers to meet him. The way he was walking, though, seemed to convey that he had more important things to be doing than coddling greenhorns.

    "You must be George. Hi, I'm Wally." Another gentleman came over with his hand poised to shake. "I handle the software we use to track inventory. Let me show you the ropes."

    Wally used the nearby computer to demonstrate a handful of the 200-odd Delphi forms that constituted the inventory application. The source code was not in any kind of source control; it was all in a folder named Wally on the shared H: drive. They were using a version of Delphi from 1995 ... in 2010. Their database was some vague, off-brand SQL-esque construct that George later learned had been dropped from support as of 2003.

    None of this inspired George's confidence, but he had a job to learn. Stifling a sigh, he asked Wally, "Could I have a copy of your database creation script? Then I could start with a fresh and empty database to learn on."

    "No problem. Come with me."

    Wally led George to another part of the warehouse where a different computer was set up; presumably, this was Wally's desk. Wally sat down at the machine and began typing away while tapping his foot and whistling a little tune.

    This went on, and on ... and on. It certainly didn't seem like the quick typing one would do to create an email with an attachment. George shifted his weight uneasily from one foot to the other. As the rhythmic typing and whistling continued, it hit him: Wally was typing out the entire CREATE DATABASE code—from memory.

    It took Wally a good 25 minutes to bang out everything needed to define 60-odd database fields including Title, ISBN, ISBN-19, Author, Publisher, etc. Finally, the one-man concert ceased; Wally sent the email. With a perfectly normal look on his face, he faced George and said, "There it is!"

    In the moment, George was too flabbergasted to question what he'd witnessed. Later, he confirmed that Wally had never even thought to have a saved CREATE DATABASE SQL script on hand. Sadly, this was far from the last point of contention he experienced with his coworker. Wally could not comprehend why George might want some general utility functions, or a clean interface between modules, or anything more advanced than what one found in chintzy programming manuals. George's attempts at process improvement and sanity introduction got his building access card invalidated one morning about a month after starting. No one had expressed any sort of warning or reproach to him beforehand. George was simply out, and had to move on.

    Move on he did ... but every once in a while, George revisits their old website to see if they're still in business. At the moment, said website has an invalid certificate. For a company whose whole business came down to head-scratching practices heaped upon 15 year-old unsupported tools, it's not so surprising.

    [Advertisement] Utilize BuildMaster to release your software with confidence, at the pace your business demands. Download today!

    David BrinScience fiction visions, starting with flying cars, plus Sherlock and comedies and more.

    May this day be joyous for those who celebrate it as special... and for those who don't. And may the year ahead be our best-yet, though the worst of all that follow.

    And now, on to ruminations!

     It has been said that: "A top task of the SF author is not to predict the car, but the traffic jam."

     Let's update that. What are the consequences of flying cars? And I have long predicted that 2022 or 2023 would be the year they arrive, at least in part.

    As a sci fi writer, I peer ahead to note that these luxury flyers that will be largely used (at least at first) by the rich to avoid the frustrating congestion of our streets.

    So, will one outcome be better traffic down here, when the rich people leave the roads? Or will the flight of wealthy folks to the sky be just like when, after 9/11, the wealthy abandoned First Class on airline flights in favor of corporate/private jets and charters, resulting is a massive deterioration of life for the rest of us air travelers. Because till then, the rich and influential still had to use the same airports and planes, and their complaints were heeded. So what happens when they abandon our streets and highways, leaving us to fester while they demand more tax cuts?

    So, will we get angry, seeing these demigods zipping above us? Will this be another tech advance that swiftly percolates down to the rest of us, as I portray in my short story “Transition Generation”? Or might flying cars carrying sky lords be the final insult leading to revolution? 

    There, that's my cynical worst take. And it leads to a top demand when the revolution comes (that they seem determined to drive us to.) We will take torches to the charter areas of the airports and - at point of our pitchforks - scream at the brats "Get back into First Class, where you belong!"

    (Eat yer heart out, Robspierre & Lenin!)

    Another question. Might flying cars, be used for terrorism? 


    Sure, (1) they are tiny. (2) AI controlled. That’s problematic, and in Existence I posed swarm terror attacks using drones and flying cars. Still, rule-systems can be adjusted, and (3) there will be banned areas with plenty of laser defenses. But yes. Tradeoffs and dangers.


    One prototype under development: the flying AirCar, invented in Slovakia, which can transform into a sports car in minutes. This video presents other experimental flying cars including the Aero Mobil, the Klein Vision Air Car, the AirBus PopUp, the Terrafugia and the PAL-V. Some modern updates to those envisioned in Sci Fi movies such as The Fifth Element, Blade Runner, Total Recall, The Jetsons, Back to the Future... and so many others.


    By coincidence, I just read (and blurbed) the latest book by J Storrs Hall - Where Is My Flying Car?  The book ought to have gone into all that.


    Oh, want irony? For 50 years Los Angeles required all tall buildings to have flat roofs for heliports than then were seldom used. Now, after the law was rescinded, may come the golden era of rooftop taxi service. Again, for elites.


    Followup: Sorry, I thought it was obvious that (a) initial uses will be between licensed landing pads and (b) automatic control will be almost absolutely required. And yes, within those limits I reiterat: I expect it in the next two years.  At which point the whine will shift from "Where's the flying car?" to "Where's my flying car?"


    == Recommended... ==


    One of the greatest directors of all time, whose work I laud in VIVID TOMORROWS: Science Fiction and Hollywood, is Nicholas Meyer, who saved Star Trek, among many things. He also is a noted innovator in the wide and popular Sherlock Holmes canon, having initiated the latest era of fun creativity with The Seven Percent Solution. Now comes his latest The Return of the Pharaoh: From the Reminiscences of John H. Watson, M.D. Such brain food.


    On a lighter note... Marie Vibbert's lively and rollicking Galactic Hell Cats is way fun, as is the trailer


    Which reminds me of a micro-rant I have been meaning to issue: Mars Attacks is best watched with the music on... but with the insipid/unfunny dialogue turned off. Better, switch to a version that's dubbed in a language you don't know - no subtitles! All the unintentionally stupid things vanish and the intentionally stupid ones amplify! You'll imagine hilarious lines! Trust me on this. Try it.


     And for more sci fi hilarity, try my own comedy: The Ancient Ones.


    One of you reminded me that I have TWO works of comedic SF. Now, there are many styles and varieties of humor! In my recent novel The Ancient Ones, I tried for the level of pun-laced satire and irony-amid-plausibility Terry Pratchett achieved with such grace and that I could only aspire-to... with - sure - a few moments of pure lampoon... while mixing genres... Star Trek Pastiche with vampire-zombie-werewolves! You can sample the first 3 chapters free at my site and decide if Brin is merely crazy or Crazy!


    But there's another attempt at comedic SF that you can also try for free. Gorilla My Dreams - a broad, lampoony and immature take on my own Uplift Universe, plus several guest cosmoses. Something for the weekend. Don't drink beverages while reading too close to the screen... 


    Though indeed, many have enjoyed the lighter side of Kiln People and The Practice Effect.



    == And furthermore ==


    Tales from the Bridge: All Things Sci-Fi hosted A Conversation with David Brin.


    Beyond Dune and Foundation: a list of Golden Age SF classics that should be adapted to the screen, including Mockingbird, The Dispossessed, and The Demolished Man.


    While we started with flying cars, science fiction has also offered more dire visions of possible future: a list of 20 greatest apocalyptic novels includes classics such as Earth AbidesParable of the SowerOn the BeachA Canticle for LeibowitzAlas, Babylon, as well as The Postman



    ,

    Worse Than FailureBest of…: Best of 2021: It's a Gift

    Per tradition, we're taking the week before the new year as a chance to review some of our favorites from this year. We open with this one from way back in January. Consider it… a gift.

    Tyra was standing around the coffee maker with her co-workers when their phones all dinged with an email from management.

    Edgar is no longer employed at Initech. If you see him on the property, for any reason, please alert security.

    "Well, that's about time," Tyra said.

    They had all been expecting an email like that. Edgar had been having serious conflicts with management. The team had been expanding recently, and along with the expansion, new processes and new tooling were coming online. Edgar hated that. He hated having new co-workers who didn't know the codebase as intimately as he did. "My technical knowledge is a gift!" He hated that they were moving to a CI pipeline that had more signoffs and removed his control over development. "My ability to react quickly to needed changes is a gift!" He hated that management- and fellow developers- were requesting more code coverage in their tests. "I write good code the first time, because I've got a gift for programming!"

    These conflicts escalated, never quite to screaming, but voices were definitely raised. "You're all getting in the way," was a common refrain from Edgar, whether it was to his new peers or to management or to the janitor who was taking too long to clean the restroom. It seemed like everyone knew Edgar was going to get fired but Edgar.

    Six months later, the team was humming along nicely. Pretty much no one thought about Edgar, except maybe to regale newbies with a tale of the co-worker from hell. One day, Tyra finished a requirement, ensured all the tests were green in their CI server, and then submitted a pull request. One of her peers reviewed the request, merged it, and pushed it along to their CD pipeline.

    Fortunately for them, part of the CD step was to run the tests again; one of the tests failed. The failing test was not anything related to any of the changes in Tyra's PR. In fact, the previous commit passed the unit test fine, and the two versions were exactly the same in source control.

    Tyra and her peers dug in, trying to see what might have changed in the CD environment, or what was maybe wrong about the test. Before long, they were digging through the CD pipeline scripts themselves. They hadn't been modified in months, but was there maybe a bad assumption somewhere? Something time based?

    No. As it turned out, after many, many hours of debugging, there was an "extra" few lines in one of the shell scripts. It would randomly select one of the Python files in the commit, and a small percentage of the time, it would choose a random line in the file, and on that line replace the spaces with tabs. Since whitespace is syntactically significant in Python that created output which failed with an IndentationError.

    A quick blame confirmed that Edgar had left them that little gift. As for how it had gone unnoticed for so long? Well, for starters, he had left during that awkward transition period when they were migrating new tools. The standard code-review/peer-review processes weren't fully settled, so he was able to sneak in the commit. The probability that it would tamper with a file was very low, and it wouldn't repeat itself on the next build.

    It was hard to say how many times this had caused a problem. If a developer saw the unit test fail after accepting the PR, they may have just triggered a fresh build manually. But, more menacing, they didn't have 100% unit test coverage, and there were some older Python files (mostly written by Edgar) which had no unit tests at all. How many times might they have pushed broken files to production, only to have mysterious failures?

    In the end, Edgar's last "gift" to the team was the need to audit their entire CI/CD pipeline to see if he left any more little "surprises".

    [Advertisement] Otter - Provision your servers automatically without ever needing to log-in to a command prompt. Get started today!

    ,

    Worse Than FailureError'd: Some Like It Hotter

    Fast approaching the end of the Gregorian calendar, things start to happen all at once, just to get them over with. According to Daniel D. "It's November 21 and Facebook can't decide which tomorrow comes first."

    november

     

    Not only simultaneous, but topsy-turvy, as Florian pontificates "I have no idea how such a bug is possible. All I know is that our Christmas get-together is in a couple of hours and I'll need to drink quite a bit to catch up to whoever's in charge of this XCode screen!"

    xcode

    Gary A. got into some deep water. "I was on a cruise recently, and their app provided a rather odd phone number for medical emergencies. I hope I can remember it."

    911

    Before leaving on his own vacation, Reinier B. wants to turn things down a bit. This seems really very awfully vochtig to me. Reinier explains "My 'smart thermostat' really isn't."

    vochtig

    And again, with an unprecedented twofer, Reiner blasts "This is the same thermostat as before, reporting several orders of magnitude hotter than the hottest things in the universe." It's even hotter than Australia!

    hot

    [Advertisement] ProGet’s got you covered with security and access controls on your NuGet feeds. Learn more.

    David BrinSupply Side 'economics' without a single success -- except a rising oligarchy

    Philstockworld has republished my most devastating evisceration of the Thatcherite insanity called "Supply Side" (voodoo) economics, a cult incantation that has not one... even one... ever even one... successful prediction or outcome to its credit - an unrelenting record of devastating failures and trillion dollar ripoffs.  

    Alas, almost none of my eviscerations is used currently by those public figures who oppose the madness!

    Wretched-stupid evil on one side... vs. goodguys who are too dumb to offer effective persuasion on the other. I'd say we were doomed except... science will likely rescue us. And relentless/ingenious innovation. And goodwill. (And possibly machines of loving grace?)

    We'll get back to this topic. But first... in "Planetary Politics when the Nation-State Falters," in the next Noema Magazine, Nathan Gardels talks about power devolution from the "westphalian" stasis.  


    == Supply Side did supply… a rising oligarchy ==


    "Fifty years of tax cuts for the rich failed to trickle down even once:" David Hope of the London School of Economics examined 18 developed countries over a 50-year period from 1965 to 2015 -- countries that slashed taxes on the wealthy vs. those that didn’t. Per capita gross domestic product and unemployment rates were nearly identical after five years in countries that slashed taxes on the rich and in those that didn’t, the study found. The analysis discovered one major change: The incomes of the rich grew much faster in countries where tax rates were lowered without trickling down to the middle class… 


    ...exactly as I have told you repeatedly Adam Smith himself both observed and predicted. (In the historical extreme case, the 1780s, the rich in France refused to let themselves be taxed, not even in order to save the nation that protected them… so it stopped protecting them and they rode tumbrels.) 


     “In fact, if we look back into history, the period with the highest taxes on the rich — the postwar period — was also a period with high economic growth and low unemployment.” Also vast infrastructure development and the best era, ever, for business startups and entrepreneurship.


    The Capitalism vocabulary trap.


    One of the worst aspects of today's absurd polemical wars is vocabulary. By attacking all "capitalism" the left destroys their cred, since highly regulated market enterprise has harnessed human creative competition vastly better than all other allocation systems from kingships to socialist/communist systems. Marx de