Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:116773 Return-Path: Delivered-To: mailing list internals@lists.php.net Received: (qmail 92049 invoked from network); 3 Jan 2022 13:53:27 -0000 Received: from unknown (HELO php-smtp4.php.net) (45.112.84.5) by pb1.pair.com with SMTP; 3 Jan 2022 13:53:27 -0000 Received: from php-smtp4.php.net (localhost [127.0.0.1]) by php-smtp4.php.net (Postfix) with ESMTP id 4280E1804B1 for ; Mon, 3 Jan 2022 07:00:25 -0800 (PST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on php-smtp4.php.net X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,HTML_MESSAGE, RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_NONE,SPF_PASS autolearn=no autolearn_force=no version=3.4.2 X-Spam-ASN: AS15169 209.85.128.0/17 X-Spam-Virus: No X-Envelope-From: Received: from mail-oi1-f179.google.com (mail-oi1-f179.google.com [209.85.167.179]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (P-256) server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by php-smtp4.php.net (Postfix) with ESMTPS for ; Mon, 3 Jan 2022 07:00:24 -0800 (PST) Received: by mail-oi1-f179.google.com with SMTP id j124so55376264oih.12 for ; Mon, 03 Jan 2022 07:00:24 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=C1El8Hoqozs+yWlLfR53EDCmCk0ie8+2wm6CCUHRkvc=; b=JrGpYlbEFwPHxTEbUFYhXHYVPF68tCVOFwXtYOouexItQJGsUY/dUvv+W+yMc0tC0I KShSVZTU0LdTslnQxz3giam0ZhoupRaMjok4ptTf19DsSFjBvE4PmBr1KLC7x2/6kbvt xaz+08uUmpPDCopqiZKSBuTyD+mB+3LVVme9QnI8rByB+PjsTD0oVAtWMr/gBAmPTS9n JvwVnkiz1LUYx3FJ0seFAYl94woXZYpaMlS0OsiIhhY0Bf2sED/gQMfh0TP3b3r1CfOq x2TSjYdkoGWVFTaDU8CeVqjyTE8kEXcQ18gMbmwTWyj8OBdOLBdnYbkhaTtS2oyz4RpB ToJw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=C1El8Hoqozs+yWlLfR53EDCmCk0ie8+2wm6CCUHRkvc=; b=6JoEePTeQEETHfebZUQ0S5vVOwTmvOPeR7XY3H1SvQY04xwrFi4Kru6eIuh9/4zi60 7AoopS1tD/E5n7bIMlCyW1Oh+FAbnQx8YAzoPl/lbNlJOHt1a3xitadexWtFSqpFAdqw /GU4FEsFB1HjueXAHJktanMz5p4ir5XDwOd/oXEPEkTgAtO/FHvzu2HFUS8ESwpofW6o Fx99LchGSCpYU8RtofDx5d5Qbk5oylEBD7vK19WcRhw1fUYgagkqgduQghvg/jpkeKNJ GCPZSC22kef1TnRDbfhhTjszjAv2wAzKRpBG4oL1eGwYiIhI8iCrbp6oUooVVHXI10k7 a5XQ== X-Gm-Message-State: AOAM530ELe6B+nXyvO46XJeZCMTUGfXVTeW6xFz9aYGTJVLjpJ0Zd9TF ShfKZAKNKfiEHP2LvkW/CuHH/sRewhH75QLbver8sTfkYAhsRVzw X-Google-Smtp-Source: ABdhPJzGTN34t8L8BUP4SDbqLwaMY00Au9FcgUilbc9nmU80UntLK+ZXhn74Zug1sANR82I68Rca/BEcvOPH5XQGf7A= X-Received: by 2002:a05:6808:1919:: with SMTP id bf25mr36413176oib.33.1641222022937; Mon, 03 Jan 2022 07:00:22 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: Date: Mon, 3 Jan 2022 16:00:11 +0100 Message-ID: To: Andreas Hennings Cc: Jordan LeDoux , PHP internals Content-Type: multipart/mixed; boundary="000000000000ace47e05d4aec788" Subject: Re: [PHP-DEV] [VOTE] User Defined Operator Overloads From: ocramius@gmail.com (Marco Pivetta) --000000000000ace47e05d4aec788 Content-Type: multipart/alternative; boundary="000000000000ace47d05d4aec786" --000000000000ace47d05d4aec786 Content-Type: text/plain; charset="UTF-8" Hey Andreas, On Mon, Jan 3, 2022 at 3:40 PM Andreas Hennings wrote: > I imagine that operator overloads can improve DX for these use cases, > but at a cost for the overall language. > > How would you (Marco) see the future of arithmetic libraries for time, > money etc without overloaded operators? > How would these calculations look like e.g. with infix functions? > Do you think this can eliminate the desire for operator overloads? > > E.g. something like this? > > $ts0 = new Timestamp($seconds0); > $ts1 = new Timestamp($seconds1); > /** @var Duration $duration */ > $duration = $ts1 - $ts0; // Operator overload notation. > $duration = Duration::betweenTimestamps($ts0, $ts1); // Static method > notation. > $duration = $ts1->diff($ts0); // Object method notation. > $duration = $ts0 $ts1 // Infix notation > based on static method. > $duration = $ts1 $ts0 // Infix notation based on object method. > I'd probably use `$ts1->subtract($ts0)`, which doesn't seem to be that unreadable, and there is no need to abbreviate it to "diff" either. Whether it needs to be static methods or instance methods depends on the wished API design. What this RFC aims at is a mathematical language, inside another general purpose language: for complex expressions, I'd probably run it in a subsystem dedicated to this instead. See for example: * https://en.wikipedia.org/wiki/Expression_(mathematics) (I'm literally just picking a complex example - don't even know how to read that properly) * and its textual representation in https://en.wikipedia.org/w/index.php?title=Expression_(mathematics)&action=edit§ion=1 ```php $expression = <<<'MATH' f(a)+\sum_{k=1}^n\left.\frac{1}{k!}\frac{d^k}{dt^k}\right|_{t=0}f(u(t)) + \int_0^1 \frac{(1-t)^n }{n!} \frac{d^{n+1}}{dt^{n+1}} f(u(t))\, dt. MATH; $result = $userlandExpressionEngine->evaluate( $expression, [ // ... bind parameters here .... ] ); ``` Heck, I can probably ask the `$userlandExpressionEngine` to render that monstrosity for me (see attachment). Note that we do this stuff constantly for SQL, yet we haven't designed a system for embedding SQL into the language, and still, SQL is used many magnitudes more than all what was discussed in this RFC. Yes, strings are problematic to some degree, but it's still better than increasing language complexity for a very edge case. Alternatively, a better way to embed other languages can be used, which would be much more useful for things like Twig, Blade, PHPTal, SQL, etc: In haskell, this is done via Template Haskell, which many like, and many loathe, but is still useful for type-safe operations with a different language than the "main" one: https://wiki.haskell.org/A_practical_Template_Haskell_Tutorial#Shakespearean_Templates In addition to all the above, I just noticed that the entire reflection API in the RFC requires major BC breaks in the reflection API... sigh. Marco Pivetta http://twitter.com/Ocramius http://ocramius.github.com/ --000000000000ace47d05d4aec786 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hey Andreas,

On Mon, Jan 3, 2022 at 3:40 P= M Andreas Hennings <andreas@dqxte= ch.net> wrote:
I imagine that operator overloads can improve DX for these use cases,
but at a cost for the overall language.

How would you (Marco) see the future of arithmetic libraries for time,
money etc without overloaded operators?
How would these calculations look like e.g. with infix functions?
Do you think this can eliminate the desire for operator overloads?

E.g. something like this?

$ts0 =3D new Timestamp($seconds0);
$ts1 =3D new Timestamp($seconds1);
/** @var Duration $duration */
$duration =3D $ts1 - $ts0;=C2=A0 // Operator overload notation.
$duration =3D Duration::betweenTimestamps($ts0, $ts1);=C2=A0 // Static meth= od notation.
$duration =3D $ts1->diff($ts0);=C2=A0 // Object method notation.
$duration =3D $ts0 <Duration::betweenTimestamps> $ts1=C2=A0 // Infix = notation
based on static method.
$duration =3D $ts1 <diff> $ts0=C2=A0 // Infix notation based on objec= t method.

I'd probably use `$ts1-&g= t;subtract($ts0)`, which doesn't seem to be that unreadable, and there = is no need to abbreviate it to "diff" either.
Whether i= t needs to be static methods or instance methods depends on the wished API = design.

What this RFC aims at is a mathematica= l language, inside another general purpose language: for complex expression= s, I'd probably run it in a subsystem dedicated to this instead.
<= div>

See for example:

=C2=A0*= =20 https://= en.wikipedia.org/wiki/Expression_(mathematics) (I'm literally=20 just picking a complex example - don't even know how to read that=20 properly)

```php
$expression =3D <<<= 'MATH'
f(a)+\sum_{k=3D1}^n\left.\frac{1}{k!}\frac{d^k}{dt= ^k}\right|_{t=3D0}f(u(t)) + \int_0^1 \frac{(1-t)^n }{n!} \frac{d^{n+1}}{dt^= {n+1}} f(u(t))\, dt.
MATH;

$result =3D $= userlandExpressionEngine->evaluate(
=C2=A0=C2=A0=C2=A0 $expres= sion,
=C2=A0=C2=A0=C2=A0 [
=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0 // ... bind parameters here ....
=C2=A0=C2= =A0=C2=A0 ]
);
```

Heck, I= can probably ask the `$userlandExpressionEngine` to render that monstrosit= y for me (see attachment).

Note that we do thi= s stuff constantly for SQL, yet we haven't designed a system for embedd= ing SQL into the language, and still, SQL is used many magnitudes more than= all what was discussed in this RFC.
=
Yes, strings are problematic to some d= egree, but it's still better than increasing language complexity for a = very edge case.

Alternatively, a better way to embed other languages can be used,= which would be much more useful for things like Twig, Blade, PHPTal, SQL, = etc: In haskell, this is done via Template Haskell, which many like, and ma= ny loathe, but is still useful for type-safe operations with a different la= nguage than the "main" one: https://wiki.= haskell.org/A_practical_Template_Haskell_Tutorial#Shakespearean_Templates


--000000000000ace47d05d4aec786-- --000000000000ace47e05d4aec788 Content-Type: image/svg+xml; name="4dc1bf2a47b0fbdaabf9ef6cd22324ba116ed121.svg" Content-Disposition: attachment; filename="4dc1bf2a47b0fbdaabf9ef6cd22324ba116ed121.svg" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kxyss37c0 PHN2ZyB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgd2lkdGg9IjYw LjAzM2V4IiBoZWlnaHQ9IjYuODQzZXgiIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjogLTMuMDA1ZXg7 IiB2aWV3Qm94PSIwIC0xNjUyLjUgMjU4NDcuNiAyOTQ2LjEiIHJvbGU9ImltZyIgZm9jdXNhYmxl PSJmYWxzZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBhcmlhLWxhYmVsbGVk Ynk9Ik1hdGhKYXgtU1ZHLTEtVGl0bGUiPgo8dGl0bGUgaWQ9Ik1hdGhKYXgtU1ZHLTEtVGl0bGUi PntcZGlzcGxheXN0eWxlIGYoYSkrXHN1bSBfe2s9MX1ee259XGxlZnQue1xmcmFjIHsxfXtrIX19 e1xmcmFjIHtkXntrfX17ZHRee2t9fX1ccmlnaHR8X3t0PTB9Zih1KHQpKStcaW50IF97MH1eezF9 e1xmcmFjIHsoMS10KV57bn19e24hfX17XGZyYWMge2Ree24rMX19e2R0XntuKzF9fX1mKHUodCkp XCxkdC59PC90aXRsZT4KPGRlZnMgYXJpYS1oaWRkZW49InRydWUiPgo8cGF0aCBzdHJva2Utd2lk dGg9IjEiIGlkPSJFMS1NSk1BVEhJLTY2IiBkPSJNMTE4IC0xNjJRMTIwIC0xNjIgMTI0IC0xNjRU MTM1IC0xNjdUMTQ3IC0xNjhRMTYwIC0xNjggMTcxIC0xNTVUMTg3IC0xMjZRMTk3IC05OSAyMjEg MjdUMjY3IDI2N1QyODkgMzgyVjM4NUgyNDJRMTk1IDM4NSAxOTIgMzg3UTE4OCAzOTAgMTg4IDM5 N0wxOTUgNDI1UTE5NyA0MzAgMjAzIDQzMFQyNTAgNDMxUTI5OCA0MzEgMjk4IDQzMlEyOTggNDM0 IDMwNyA0ODJUMzE5IDU0MFEzNTYgNzA1IDQ2NSA3MDVRNTAyIDcwMyA1MjYgNjgzVDU1MCA2MzBR NTUwIDU5NCA1MjkgNTc4VDQ4NyA1NjFRNDQzIDU2MSA0NDMgNjAzUTQ0MyA2MjIgNDU0IDYzNlQ0 NzggNjU3TDQ4NyA2NjJRNDcxIDY2OCA0NTcgNjY4UTQ0NSA2NjggNDM0IDY1OFQ0MTkgNjMwUTQx MiA2MDEgNDAzIDU1MlQzODcgNDY5VDM4MCA0MzNRMzgwIDQzMSA0MzUgNDMxUTQ4MCA0MzEgNDg3 IDQzMFQ0OTggNDI0UTQ5OSA0MjAgNDk2IDQwN1Q0OTEgMzkxUTQ4OSAzODYgNDgyIDM4NlQ0Mjgg Mzg1SDM3MkwzNDkgMjYzUTMwMSAxNSAyODIgLTQ3UTI1NSAtMTMyIDIxMiAtMTczUTE3NSAtMjA1 IDEzOSAtMjA1UTEwNyAtMjA1IDgxIC0xODZUNTUgLTEzMlE1NSAtOTUgNzYgLTc4VDExOCAtNjFR MTYyIC02MSAxNjIgLTEwM1ExNjIgLTEyMiAxNTEgLTEzNlQxMjcgLTE1N0wxMTggLTE2MloiPjwv cGF0aD4KPHBhdGggc3Ryb2tlLXdpZHRoPSIxIiBpZD0iRTEtTUpNQUlOLTI4IiBkPSJNOTQgMjUw UTk0IDMxOSAxMDQgMzgxVDEyNyA0ODhUMTY0IDU3NlQyMDIgNjQzVDI0NCA2OTVUMjc3IDcyOVQz MDIgNzUwSDMxNUgzMTlRMzMzIDc1MCAzMzMgNzQxUTMzMyA3MzggMzE2IDcyMFQyNzUgNjY3VDIy NiA1ODFUMTg0IDQ0M1QxNjcgMjUwVDE4NCA1OFQyMjUgLTgxVDI3NCAtMTY3VDMxNiAtMjIwVDMz MyAtMjQxUTMzMyAtMjUwIDMxOCAtMjUwSDMxNUgzMDJMMjc0IC0yMjZRMTgwIC0xNDEgMTM3IC0x NFQ5NCAyNTBaIj48L3BhdGg+CjxwYXRoIHN0cm9rZS13aWR0aD0iMSIgaWQ9IkUxLU1KTUFUSEkt NjEiIGQ9Ik0zMyAxNTdRMzMgMjU4IDEwOSAzNDlUMjgwIDQ0MVEzMzEgNDQxIDM3MCAzOTJRMzg2 IDQyMiA0MTYgNDIyUTQyOSA0MjIgNDM5IDQxNFQ0NDkgMzk0UTQ0OSAzODEgNDEyIDIzNFQzNzQg NjhRMzc0IDQzIDM4MSAzNVQ0MDIgMjZRNDExIDI3IDQyMiAzNVE0NDMgNTUgNDYzIDEzMVE0Njkg MTUxIDQ3MyAxNTJRNDc1IDE1MyA0ODMgMTUzSDQ4N1E1MDYgMTUzIDUwNiAxNDRRNTA2IDEzOCA1 MDEgMTE3VDQ4MSA2M1Q0NDkgMTNRNDM2IDAgNDE3IC04UTQwOSAtMTAgMzkzIC0xMFEzNTkgLTEw IDMzNiA1VDMwNiAzNkwzMDAgNTFRMjk5IDUyIDI5NiA1MFEyOTQgNDggMjkyIDQ2UTIzMyAtMTAg MTcyIC0xMFExMTcgLTEwIDc1IDMwVDMzIDE1N1pNMzUxIDMyOFEzNTEgMzM0IDM0NiAzNTBUMzIz IDM4NVQyNzcgNDA1UTI0MiA0MDUgMjEwIDM3NFQxNjAgMjkzUTEzMSAyMTQgMTE5IDEyOVExMTkg MTI2IDExOSAxMThUMTE4IDEwNlExMTggNjEgMTM2IDQ0VDE3OSAyNlEyMTcgMjYgMjU0IDU5VDI5 OCAxMTBRMzAwIDExNCAzMjUgMjE3VDM1MSAzMjhaIj48L3BhdGg+CjxwYXRoIHN0cm9rZS13aWR0 aD0iMSIgaWQ9IkUxLU1KTUFJTi0yOSIgZD0iTTYwIDc0OUw2NCA3NTBRNjkgNzUwIDc0IDc1MEg4 NkwxMTQgNzI2UTIwOCA2NDEgMjUxIDUxNFQyOTQgMjUwUTI5NCAxODIgMjg0IDExOVQyNjEgMTJU MjI0IC03NlQxODYgLTE0M1QxNDUgLTE5NFQxMTMgLTIyN1Q5MCAtMjQ2UTg3IC0yNDkgODYgLTI1 MEg3NFE2NiAtMjUwIDYzIC0yNTBUNTggLTI0N1Q1NSAtMjM4UTU2IC0yMzcgNjYgLTIyNVEyMjEg LTY0IDIyMSAyNTBUNjYgNzI1UTU2IDczNyA1NSA3MzhRNTUgNzQ2IDYwIDc0OVoiPjwvcGF0aD4K PHBhdGggc3Ryb2tlLXdpZHRoPSIxIiBpZD0iRTEtTUpNQUlOLTJCIiBkPSJNNTYgMjM3VDU2IDI1 MFQ3MCAyNzBIMzY5VjQyMEwzNzAgNTcwUTM4MCA1ODMgMzg5IDU4M1E0MDIgNTgzIDQwOSA1NjhW MjcwSDcwN1E3MjIgMjYyIDcyMiAyNTBUNzA3IDIzMEg0MDlWLTY4UTQwMSAtODIgMzkxIC04Mkgz ODlIMzg3UTM3NSAtODIgMzY5IC02OFYyMzBINzBRNTYgMjM3IDU2IDI1MFoiPjwvcGF0aD4KPHBh dGggc3Ryb2tlLXdpZHRoPSIxIiBpZD0iRTEtTUpTWjItMjIxMSIgZD0iTTYwIDk0OFE2MyA5NTAg NjY1IDk1MEgxMjY3TDEzMjUgODE1UTEzODQgNjc3IDEzODggNjY5SDEzNDhMMTM0MSA2ODNRMTMy MCA3MjQgMTI4NSA3NjFRMTIzNSA4MDkgMTE3NCA4MzhUMTAzMyA4ODFUODgyIDg5OFQ2OTkgOTAy SDU3NEg1NDNIMjUxTDI1OSA4OTFRNzIyIDI1OCA3MjQgMjUyUTcyNSAyNTAgNzI0IDI0NlE3MjEg MjQzIDQ2MCAtNTZMMTk2IC0zNTZRMTk2IC0zNTcgNDA3IC0zNTdRNDU5IC0zNTcgNTQ4IC0zNTdU Njc2IC0zNThRODEyIC0zNTggODk2IC0zNTNUMTA2MyAtMzMyVDEyMDQgLTI4M1QxMzA3IC0xOTZR MTMyOCAtMTcwIDEzNDggLTEyNEgxMzg4UTEzODggLTEyNSAxMzgxIC0xNDVUMTM1NiAtMjEwVDEz MjUgLTI5NEwxMjY3IC00NDlMNjY2IC00NTBRNjQgLTQ1MCA2MSAtNDQ4UTU1IC00NDYgNTUgLTQz OVE1NSAtNDM3IDU3IC00MzNMNTkwIDE3N1E1OTAgMTc4IDU1NyAyMjJUNDUyIDM2NlQzMjIgNTQ0 TDU2IDkwOUw1NSA5MjRRNTUgOTQ1IDYwIDk0OFoiPjwvcGF0aD4KPHBhdGggc3Ryb2tlLXdpZHRo PSIxIiBpZD0iRTEtTUpNQVRISS02QiIgZD0iTTEyMSA2NDdRMTIxIDY1NyAxMjUgNjcwVDEzNyA2 ODNRMTM4IDY4MyAyMDkgNjg4VDI4MiA2OTRRMjk0IDY5NCAyOTQgNjg2UTI5NCA2NzkgMjQ0IDQ3 N1ExOTQgMjc5IDE5NCAyNzJRMjEzIDI4MiAyMjMgMjkxUTI0NyAzMDkgMjkyIDM1NFQzNjIgNDE1 UTQwMiA0NDIgNDM4IDQ0MlE0NjggNDQyIDQ4NSA0MjNUNTAzIDM2OVE1MDMgMzQ0IDQ5NiAzMjdU NDc3IDMwMlQ0NTYgMjkxVDQzOCAyODhRNDE4IDI4OCA0MDYgMjk5VDM5NCAzMjhRMzk0IDM1MyA0 MTAgMzY5VDQ0MiAzOTBMNDU4IDM5M1E0NDYgNDA1IDQzNCA0MDVINDMwUTM5OCA0MDIgMzY3IDM4 MFQyOTQgMzE2VDIyOCAyNTVRMjMwIDI1NCAyNDMgMjUyVDI2NyAyNDZUMjkzIDIzOFQzMjAgMjI0 VDM0MiAyMDZUMzU5IDE4MFQzNjUgMTQ3UTM2NSAxMzAgMzYwIDEwNlQzNTQgNjZRMzU0IDI2IDM4 MSAyNlE0MjkgMjYgNDU5IDE0NVE0NjEgMTUzIDQ3OSAxNTNINDgzUTQ5OSAxNTMgNDk5IDE0NFE0 OTkgMTM5IDQ5NiAxMzBRNDU1IC0xMSAzNzggLTExUTMzMyAtMTEgMzA1IDE1VDI3NyA5MFEyNzcg MTA4IDI4MCAxMjFUMjgzIDE0NVEyODMgMTY3IDI2OSAxODNUMjM0IDIwNlQyMDAgMjE3VDE4MiAy MjBIMTgwUTE2OCAxNzggMTU5IDEzOVQxNDUgODFUMTM2IDQ0VDEyOSAyMFQxMjIgN1QxMTEgLTJR OTggLTExIDgzIC0xMVE2NiAtMTEgNTcgLTFUNDggMTZRNDggMjYgODUgMTc2VDE1OCA0NzFMMTk1 IDYxNlExOTYgNjI5IDE4OCA2MzJUMTQ5IDYzN0gxNDRRMTM0IDYzNyAxMzEgNjM3VDEyNCA2NDBU MTIxIDY0N1oiPjwvcGF0aD4KPHBhdGggc3Ryb2tlLXdpZHRoPSIxIiBpZD0iRTEtTUpNQUlOLTNE IiBkPSJNNTYgMzQ3UTU2IDM2MCA3MCAzNjdINzA3UTcyMiAzNTkgNzIyIDM0N1E3MjIgMzM2IDcw OCAzMjhMMzkwIDMyN0g3MlE1NiAzMzIgNTYgMzQ3Wk01NiAxNTNRNTYgMTY4IDcyIDE3M0g3MDhR NzIyIDE2MyA3MjIgMTUzUTcyMiAxNDAgNzA3IDEzM0g3MFE1NiAxNDAgNTYgMTUzWiI+PC9wYXRo Pgo8cGF0aCBzdHJva2Utd2lkdGg9IjEiIGlkPSJFMS1NSk1BSU4tMzEiIGQ9Ik0yMTMgNTc4TDIw MCA1NzNRMTg2IDU2OCAxNjAgNTYzVDEwMiA1NTZIODNWNjAySDEwMlExNDkgNjA0IDE4OSA2MTdU MjQ1IDY0MVQyNzMgNjYzUTI3NSA2NjYgMjg1IDY2NlEyOTQgNjY2IDMwMiA2NjBWMzYxTDMwMyA2 MVEzMTAgNTQgMzE1IDUyVDMzOSA0OFQ0MDEgNDZINDI3VjBINDE2UTM5NSAzIDI1NyAzUTEyMSAz IDEwMCAwSDg4VjQ2SDExNFExMzYgNDYgMTUyIDQ2VDE3NyA0N1QxOTMgNTBUMjAxIDUyVDIwNyA1 N1QyMTMgNjFWNTc4WiI+PC9wYXRoPgo8cGF0aCBzdHJva2Utd2lkdGg9IjEiIGlkPSJFMS1NSk1B VEhJLTZFIiBkPSJNMjEgMjg3UTIyIDI5MyAyNCAzMDNUMzYgMzQxVDU2IDM4OFQ4OSA0MjVUMTM1 IDQ0MlExNzEgNDQyIDE5NSA0MjRUMjI1IDM5MFQyMzEgMzY5UTIzMSAzNjcgMjMyIDM2N0wyNDMg Mzc4UTMwNCA0NDIgMzgyIDQ0MlE0MzYgNDQyIDQ2OSA0MTVUNTAzIDMzNlQ0NjUgMTc5VDQyNyA1 MlE0MjcgMjYgNDQ0IDI2UTQ1MCAyNiA0NTMgMjdRNDgyIDMyIDUwNSA2NVQ1NDAgMTQ1UTU0MiAx NTMgNTYwIDE1M1E1ODAgMTUzIDU4MCAxNDVRNTgwIDE0NCA1NzYgMTMwUTU2OCAxMDEgNTU0IDcz VDUwOCAxN1Q0MzkgLTEwUTM5MiAtMTAgMzcxIDE3VDM1MCA3M1EzNTAgOTIgMzg2IDE5M1Q0MjMg MzQ1UTQyMyA0MDQgMzc5IDQwNEgzNzRRMjg4IDQwNCAyMjkgMzAzTDIyMiAyOTFMMTg5IDE1N1Ex NTYgMjYgMTUxIDE2UTEzOCAtMTEgMTA4IC0xMVE5NSAtMTEgODcgLTVUNzYgN1Q3NCAxN1E3NCAz MCAxMTIgMTgwVDE1MiAzNDNRMTUzIDM0OCAxNTMgMzY2UTE1MyA0MDUgMTI5IDQwNVE5MSA0MDUg NjYgMzA1UTYwIDI4NSA2MCAyODRRNTggMjc4IDQxIDI3OEgyN1EyMSAyODQgMjEgMjg3WiI+PC9w YXRoPgo8cGF0aCBzdHJva2Utd2lkdGg9IjEiIGlkPSJFMS1NSk1BSU4tMjEiIGQ9Ik03OCA2NjFR NzggNjgyIDk2IDY5OVQxMzggNzE2VDE4MCA3MDBUMTk5IDY2MVExOTkgNjU0IDE3OSA0MzJUMTU4 IDIwNlExNTYgMTk4IDEzOSAxOThRMTIxIDE5OCAxMTkgMjA2UTExOCAyMDkgOTggNDMxVDc4IDY2 MVpNNzkgNjFRNzkgODkgOTcgMTA1VDE0MSAxMjFRMTY0IDExOSAxODEgMTA0VDE5OCA2MVExOTgg MzEgMTgxIDE2VDEzOSAxUTExNCAxIDk3IDE2VDc5IDYxWiI+PC9wYXRoPgo8cGF0aCBzdHJva2Ut d2lkdGg9IjEiIGlkPSJFMS1NSk1BVEhJLTY0IiBkPSJNMzY2IDY4M1EzNjcgNjgzIDQzOCA2ODhU NTExIDY5NFE1MjMgNjk0IDUyMyA2ODZRNTIzIDY3OSA0NTAgMzg0VDM3NSA4M1QzNzQgNjhRMzc0 IDI2IDQwMiAyNlE0MTEgMjcgNDIyIDM1UTQ0MyA1NSA0NjMgMTMxUTQ2OSAxNTEgNDczIDE1MlE0 NzUgMTUzIDQ4MyAxNTNINDg3SDQ5MVE1MDYgMTUzIDUwNiAxNDVRNTA2IDE0MCA1MDMgMTI5UTQ5 MCA3OSA0NzMgNDhUNDQ1IDhUNDE3IC04UTQwOSAtMTAgMzkzIC0xMFEzNTkgLTEwIDMzNiA1VDMw NiAzNkwzMDAgNTFRMjk5IDUyIDI5NiA1MFEyOTQgNDggMjkyIDQ2UTIzMyAtMTAgMTcyIC0xMFEx MTcgLTEwIDc1IDMwVDMzIDE1N1EzMyAyMDUgNTMgMjU1VDEwMSAzNDFRMTQ4IDM5OCAxOTUgNDIw VDI4MCA0NDJRMzM2IDQ0MiAzNjQgNDAwUTM2OSAzOTQgMzY5IDM5NlEzNzAgNDAwIDM5NiA1MDVU NDI0IDYxNlE0MjQgNjI5IDQxNyA2MzJUMzc4IDYzN0gzNTdRMzUxIDY0MyAzNTEgNjQ1VDM1MyA2 NjRRMzU4IDY4MyAzNjYgNjgzWk0zNTIgMzI2UTMyOSA0MDUgMjc3IDQwNVEyNDIgNDA1IDIxMCAz NzRUMTYwIDI5M1ExMzEgMjE0IDExOSAxMjlRMTE5IDEyNiAxMTkgMTE4VDExOCAxMDZRMTE4IDYx IDEzNiA0NFQxNzkgMjZRMjMzIDI2IDI5MCA5OEwyOTggMTA5TDM1MiAzMjZaIj48L3BhdGg+Cjxw YXRoIHN0cm9rZS13aWR0aD0iMSIgaWQ9IkUxLU1KTUFUSEktNzQiIGQ9Ik0yNiAzODVRMTkgMzky IDE5IDM5NVExOSAzOTkgMjIgNDExVDI3IDQyNVEyOSA0MzAgMzYgNDMwVDg3IDQzMUgxNDBMMTU5 IDUxMVExNjIgNTIyIDE2NiA1NDBUMTczIDU2NlQxNzkgNTg2VDE4NyA2MDNUMTk3IDYxNVQyMTEg NjI0VDIyOSA2MjZRMjQ3IDYyNSAyNTQgNjE1VDI2MSA1OTZRMjYxIDU4OSAyNTIgNTQ5VDIzMiA0 NzBMMjIyIDQzM1EyMjIgNDMxIDI3MiA0MzFIMzIzUTMzMCA0MjQgMzMwIDQyMFEzMzAgMzk4IDMx NyAzODVIMjEwTDE3NCAyNDBRMTM1IDgwIDEzNSA2OFExMzUgMjYgMTYyIDI2UTE5NyAyNiAyMzAg NjBUMjgzIDE0NFEyODUgMTUwIDI4OCAxNTFUMzAzIDE1M0gzMDdRMzIyIDE1MyAzMjIgMTQ1UTMy MiAxNDIgMzE5IDEzM1EzMTQgMTE3IDMwMSA5NVQyNjcgNDhUMjE2IDZUMTU1IC0xMVExMjUgLTEx IDk4IDRUNTkgNTZRNTcgNjQgNTcgODNWMTAxTDkyIDI0MVExMjcgMzgyIDEyOCAzODNRMTI4IDM4 NSA3NyAzODVIMjZaIj48L3BhdGg+CjxwYXRoIHN0cm9rZS13aWR0aD0iMSIgaWQ9IkUxLU1KTUFJ Ti03QyIgZD0iTTEzOSAtMjQ5SDEzN1ExMjUgLTI0OSAxMTkgLTIzNVYyNTFMMTIwIDczN1ExMzAg NzUwIDEzOSA3NTBRMTUyIDc1MCAxNTkgNzM1Vi0yMzVRMTUxIC0yNDkgMTQxIC0yNDlIMTM5WiI+ PC9wYXRoPgo8cGF0aCBzdHJva2Utd2lkdGg9IjEiIGlkPSJFMS1NSk1BSU4tMjIyMyIgZD0iTTEz OSAtMjQ5SDEzN1ExMjUgLTI0OSAxMTkgLTIzNVYyNTFMMTIwIDczN1ExMzAgNzUwIDEzOSA3NTBR MTUyIDc1MCAxNTkgNzM1Vi0yMzVRMTUxIC0yNDkgMTQxIC0yNDlIMTM5WiI+PC9wYXRoPgo8cGF0 aCBzdHJva2Utd2lkdGg9IjEiIGlkPSJFMS1NSk1BSU4tMzAiIGQ9Ik05NiA1ODVRMTUyIDY2NiAy NDkgNjY2UTI5NyA2NjYgMzQ1IDY0MFQ0MjMgNTQ4UTQ2MCA0NjUgNDYwIDMyMFE0NjAgMTY1IDQx NyA4M1EzOTcgNDEgMzYyIDE2VDMwMSAtMTVUMjUwIC0yMlEyMjQgLTIyIDE5OCAtMTZUMTM3IDE2 VDgyIDgzUTM5IDE2NSAzOSAzMjBRMzkgNDk0IDk2IDU4NVpNMzIxIDU5N1EyOTEgNjI5IDI1MCA2 MjlRMjA4IDYyOSAxNzggNTk3UTE1MyA1NzEgMTQ1IDUyNVQxMzcgMzMzUTEzNyAxNzUgMTQ1IDEy NVQxODEgNDZRMjA5IDE2IDI1MCAxNlEyOTAgMTYgMzE4IDQ2UTM0NyA3NiAzNTQgMTMwVDM2MiAz MzNRMzYyIDQ3OCAzNTQgNTI0VDMyMSA1OTdaIj48L3BhdGg+CjxwYXRoIHN0cm9rZS13aWR0aD0i MSIgaWQ9IkUxLU1KTUFUSEktNzUiIGQ9Ik0yMSAyODdRMjEgMjk1IDMwIDMxOFQ1NSAzNzBUOTkg NDIwVDE1OCA0NDJRMjA0IDQ0MiAyMjcgNDE3VDI1MCAzNThRMjUwIDM0MCAyMTYgMjQ2VDE4MiAx MDVRMTgyIDYyIDE5NiA0NVQyMzggMjdUMjkxIDQ0VDMyOCA3OEwzMzkgOTVRMzQxIDk5IDM3NyAy NDdRNDA3IDM2NyA0MTMgMzg3VDQyNyA0MTZRNDQ0IDQzMSA0NjMgNDMxUTQ4MCA0MzEgNDg4IDQy MVQ0OTYgNDAyTDQyMCA4NFE0MTkgNzkgNDE5IDY4UTQxOSA0MyA0MjYgMzVUNDQ3IDI2UTQ2OSAy OSA0ODIgNTdUNTEyIDE0NVE1MTQgMTUzIDUzMiAxNTNRNTUxIDE1MyA1NTEgMTQ0UTU1MCAxMzkg NTQ5IDEzMFQ1NDAgOThUNTIzIDU1VDQ5OCAxN1Q0NjIgLThRNDU0IC0xMCA0MzggLTEwUTM3MiAt MTAgMzQ3IDQ2UTM0NSA0NSAzMzYgMzZUMzE4IDIxVDI5NiA2VDI2NyAtNlQyMzMgLTExUTE4OSAt MTEgMTU1IDdRMTAzIDM4IDEwMyAxMTNRMTAzIDE3MCAxMzggMjYyVDE3MyAzNzlRMTczIDM4MCAx NzMgMzgxUTE3MyAzOTAgMTczIDM5M1QxNjkgNDAwVDE1OCA0MDRIMTU0UTEzMSA0MDQgMTEyIDM4 NVQ4MiAzNDRUNjUgMzAyVDU3IDI4MFE1NSAyNzggNDEgMjc4SDI3UTIxIDI4NCAyMSAyODdaIj48 L3BhdGg+CjxwYXRoIHN0cm9rZS13aWR0aD0iMSIgaWQ9IkUxLU1KU1oyLTIyMkIiIGQ9Ik0xMTQg LTc5OFExMzIgLTgyNCAxNjUgLTgyNEgxNjdRMTk1IC04MjQgMjIzIC03NjRUMjc1IC02MDBUMzIw IC0zOTFUMzYyIC0xNjRRMzY1IC0xNDMgMzY3IC0xMzNRNDM5IDI5MiA1MjMgNjU1VDY0NSAxMTI3 UTY1MSAxMTQ1IDY1NSAxMTU3VDY3MiAxMjAxVDY5OSAxMjU3VDczMyAxMzA2VDc3NyAxMzQ2VDgy OCAxMzYwUTg4NCAxMzYwIDkxMiAxMzI1VDk0NCAxMjQ1UTk0NCAxMjIwIDkzMiAxMjA1VDkwOSAx MTg2VDg4NyAxMTgzUTg2NiAxMTgzIDg0OSAxMTk4VDgzMiAxMjM5UTgzMiAxMjg3IDg4NSAxMjk2 TDg4MiAxMzAwUTg3OSAxMzAzIDg3NCAxMzA3VDg2NiAxMzEzUTg1MSAxMzIzIDgzMyAxMzIzUTgx OSAxMzIzIDgwNyAxMzExVDc3NSAxMjU1VDczNiAxMTM5VDY4OSA5MzZUNjMzIDYyOFE1NzQgMjkz IDUxMCAtNVQ0MTAgLTQzN1QzNTUgLTYyOVEyNzggLTg2MiAxNjUgLTg2MlExMjUgLTg2MiA5MiAt ODMxVDU1IC03NDZRNTUgLTcxMSA3NCAtNjk4VDExMiAtNjg1UTEzMyAtNjg1IDE1MCAtNzAwVDE2 NyAtNzQxUTE2NyAtNzg5IDExNCAtNzk4WiI+PC9wYXRoPgo8cGF0aCBzdHJva2Utd2lkdGg9IjEi IGlkPSJFMS1NSk1BSU4tMjIxMiIgZD0iTTg0IDIzN1Q4NCAyNTBUOTggMjcwSDY3OVE2OTQgMjYy IDY5NCAyNTBUNjc5IDIzMEg5OFE4NCAyMzcgODQgMjUwWiI+PC9wYXRoPgo8cGF0aCBzdHJva2Ut d2lkdGg9IjEiIGlkPSJFMS1NSk1BSU4tMkUiIGQ9Ik03OCA2MFE3OCA4NCA5NSAxMDJUMTM4IDEy MFExNjIgMTIwIDE4MCAxMDRUMTk5IDYxUTE5OSAzNiAxODIgMThUMTM5IDBUOTYgMTdUNzggNjBa Ij48L3BhdGg+CjwvZGVmcz4KPGcgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIGZpbGw9ImN1cnJlbnRD b2xvciIgc3Ryb2tlLXdpZHRoPSIwIiB0cmFuc2Zvcm09Im1hdHJpeCgxIDAgMCAtMSAwIDApIiBh cmlhLWhpZGRlbj0idHJ1ZSI+CiA8dXNlIHhsaW5rOmhyZWY9IiNFMS1NSk1BVEhJLTY2IiB4PSIw IiB5PSIwIj48L3VzZT4KIDx1c2UgeGxpbms6aHJlZj0iI0UxLU1KTUFJTi0yOCIgeD0iNTUwIiB5 PSIwIj48L3VzZT4KIDx1c2UgeGxpbms6aHJlZj0iI0UxLU1KTUFUSEktNjEiIHg9Ijk0MCIgeT0i MCI+PC91c2U+CiA8dXNlIHhsaW5rOmhyZWY9IiNFMS1NSk1BSU4tMjkiIHg9IjE0NjkiIHk9IjAi PjwvdXNlPgogPHVzZSB4bGluazpocmVmPSIjRTEtTUpNQUlOLTJCIiB4PSIyMDgxIiB5PSIwIj48 L3VzZT4KPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMzA4MSwwKSI+CiA8dXNlIHhsaW5rOmhyZWY9 IiNFMS1NSlNaMi0yMjExIiB4PSIwIiB5PSIwIj48L3VzZT4KPGcgdHJhbnNmb3JtPSJ0cmFuc2xh dGUoODUsLTExMTApIj4KIDx1c2UgdHJhbnNmb3JtPSJzY2FsZSgwLjcwNykiIHhsaW5rOmhyZWY9 IiNFMS1NSk1BVEhJLTZCIiB4PSIwIiB5PSIwIj48L3VzZT4KIDx1c2UgdHJhbnNmb3JtPSJzY2Fs ZSgwLjcwNykiIHhsaW5rOmhyZWY9IiNFMS1NSk1BSU4tM0QiIHg9IjUyMSIgeT0iMCI+PC91c2U+ CiA8dXNlIHRyYW5zZm9ybT0ic2NhbGUoMC43MDcpIiB4bGluazpocmVmPSIjRTEtTUpNQUlOLTMx IiB4PSIxMzAwIiB5PSIwIj48L3VzZT4KPC9nPgogPHVzZSB0cmFuc2Zvcm09InNjYWxlKDAuNzA3 KSIgeGxpbms6aHJlZj0iI0UxLU1KTUFUSEktNkUiIHg9IjcyMSIgeT0iMTYyNyI+PC91c2U+Cjwv Zz4KPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNDY5MywwKSI+CjxnIHRyYW5zZm9ybT0idHJhbnNs YXRlKDEyMCwwKSI+CjxyZWN0IHN0cm9rZT0ibm9uZSIgd2lkdGg9IjkyMCIgaGVpZ2h0PSI2MCIg eD0iMCIgeT0iMjIwIj48L3JlY3Q+CiA8dXNlIHhsaW5rOmhyZWY9IiNFMS1NSk1BSU4tMzEiIHg9 IjIwOSIgeT0iNjc2Ij48L3VzZT4KPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNjAsLTczNykiPgog PHVzZSB4bGluazpocmVmPSIjRTEtTUpNQVRISS02QiIgeD0iMCIgeT0iMCI+PC91c2U+CiA8dXNl IHhsaW5rOmhyZWY9IiNFMS1NSk1BSU4tMjEiIHg9IjUyMSIgeT0iMCI+PC91c2U+CjwvZz4KPC9n Pgo8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMTYwLDApIj4KPGcgdHJhbnNmb3JtPSJ0cmFuc2xh dGUoMTIwLDApIj4KPHJlY3Qgc3Ryb2tlPSJub25lIiB3aWR0aD0iMTQ3MyIgaGVpZ2h0PSI2MCIg eD0iMCIgeT0iMjIwIj48L3JlY3Q+CjxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDI0MCw2NzYpIj4K IDx1c2UgeGxpbms6aHJlZj0iI0UxLU1KTUFUSEktNjQiIHg9IjAiIHk9IjAiPjwvdXNlPgogPHVz ZSB0cmFuc2Zvcm09InNjYWxlKDAuNzA3KSIgeGxpbms6aHJlZj0iI0UxLU1KTUFUSEktNkIiIHg9 Ijc0MSIgeT0iNTEzIj48L3VzZT4KPC9nPgo8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSg2MCwtODAw KSI+CiA8dXNlIHhsaW5rOmhyZWY9IiNFMS1NSk1BVEhJLTY0IiB4PSIwIiB5PSIwIj48L3VzZT4K PGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNTIzLDApIj4KIDx1c2UgeGxpbms6aHJlZj0iI0UxLU1K TUFUSEktNzQiIHg9IjAiIHk9IjAiPjwvdXNlPgogPHVzZSB0cmFuc2Zvcm09InNjYWxlKDAuNzA3 KSIgeGxpbms6aHJlZj0iI0UxLU1KTUFUSEktNkIiIHg9IjUxMSIgeT0iNDA4Ij48L3VzZT4KPC9n Pgo8L2c+CjwvZz4KPC9nPgo8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyODczLDE1MzApIj4KIDx1 c2UgeGxpbms6aHJlZj0iI0UxLU1KTUFJTi0yMjIzIiB4PSIwIiB5PSItNzUxIj48L3VzZT4KPGcg dHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCwtMTQ0NS45MjM1NzQyMzg1ODY4KSBzY2FsZSgxLDAuNjU5 MDE5NDA2NDQyODU4NCkiPgogPHVzZSB4bGluazpocmVmPSIjRTEtTUpNQUlOLTIyMjMiPjwvdXNl Pgo8L2c+CiA8dXNlIHhsaW5rOmhyZWY9IiNFMS1NSk1BSU4tMjIyMyIgeD0iMCIgeT0iLTIzMTIi PjwvdXNlPgo8L2c+CjxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMxNTIsLTEwNjcpIj4KIDx1c2Ug dHJhbnNmb3JtPSJzY2FsZSgwLjcwNykiIHhsaW5rOmhyZWY9IiNFMS1NSk1BVEhJLTc0IiB4PSIw IiB5PSIwIj48L3VzZT4KIDx1c2UgdHJhbnNmb3JtPSJzY2FsZSgwLjcwNykiIHhsaW5rOmhyZWY9 IiNFMS1NSk1BSU4tM0QiIHg9IjM2MSIgeT0iMCI+PC91c2U+CiA8dXNlIHRyYW5zZm9ybT0ic2Nh bGUoMC43MDcpIiB4bGluazpocmVmPSIjRTEtTUpNQUlOLTMwIiB4PSIxMTQwIiB5PSIwIj48L3Vz ZT4KPC9nPgo8L2c+CiA8dXNlIHhsaW5rOmhyZWY9IiNFMS1NSk1BVEhJLTY2IiB4PSI5MTA1IiB5 PSIwIj48L3VzZT4KIDx1c2UgeGxpbms6aHJlZj0iI0UxLU1KTUFJTi0yOCIgeD0iOTY1NSIgeT0i MCI+PC91c2U+CiA8dXNlIHhsaW5rOmhyZWY9IiNFMS1NSk1BVEhJLTc1IiB4PSIxMDA0NSIgeT0i MCI+PC91c2U+CiA8dXNlIHhsaW5rOmhyZWY9IiNFMS1NSk1BSU4tMjgiIHg9IjEwNjE3IiB5PSIw Ij48L3VzZT4KIDx1c2UgeGxpbms6aHJlZj0iI0UxLU1KTUFUSEktNzQiIHg9IjExMDA3IiB5PSIw Ij48L3VzZT4KIDx1c2UgeGxpbms6aHJlZj0iI0UxLU1KTUFJTi0yOSIgeD0iMTEzNjgiIHk9IjAi PjwvdXNlPgogPHVzZSB4bGluazpocmVmPSIjRTEtTUpNQUlOLTI5IiB4PSIxMTc1OCIgeT0iMCI+ PC91c2U+CiA8dXNlIHhsaW5rOmhyZWY9IiNFMS1NSk1BSU4tMkIiIHg9IjEyMzcwIiB5PSIwIj48 L3VzZT4KPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTMzNzAsMCkiPgogPHVzZSB4bGluazpocmVm PSIjRTEtTUpTWjItMjIyQiIgeD0iMCIgeT0iMCI+PC91c2U+CiA8dXNlIHRyYW5zZm9ybT0ic2Nh bGUoMC43MDcpIiB4bGluazpocmVmPSIjRTEtTUpNQUlOLTMxIiB4PSIxNTAwIiB5PSIxNTQwIj48 L3VzZT4KIDx1c2UgdHJhbnNmb3JtPSJzY2FsZSgwLjcwNykiIHhsaW5rOmhyZWY9IiNFMS1NSk1B SU4tMzAiIHg9Ijc4NyIgeT0iLTEyNzAiPjwvdXNlPgo8L2c+CjxnIHRyYW5zZm9ybT0idHJhbnNs YXRlKDE1MDUyLDApIj4KPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTIwLDApIj4KPHJlY3Qgc3Ry b2tlPSJub25lIiB3aWR0aD0iMzUwOCIgaGVpZ2h0PSI2MCIgeD0iMCIgeT0iMjIwIj48L3JlY3Q+ CjxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDYwLDc3MCkiPgogPHVzZSB4bGluazpocmVmPSIjRTEt TUpNQUlOLTI4IiB4PSIwIiB5PSIwIj48L3VzZT4KIDx1c2UgeGxpbms6aHJlZj0iI0UxLU1KTUFJ Ti0zMSIgeD0iMzg5IiB5PSIwIj48L3VzZT4KIDx1c2UgeGxpbms6aHJlZj0iI0UxLU1KTUFJTi0y MjEyIiB4PSIxMTEyIiB5PSIwIj48L3VzZT4KIDx1c2UgeGxpbms6aHJlZj0iI0UxLU1KTUFUSEkt NzQiIHg9IjIxMTIiIHk9IjAiPjwvdXNlPgo8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyNDc0LDAp Ij4KIDx1c2UgeGxpbms6aHJlZj0iI0UxLU1KTUFJTi0yOSIgeD0iMCIgeT0iMCI+PC91c2U+CiA8 dXNlIHRyYW5zZm9ybT0ic2NhbGUoMC43MDcpIiB4bGluazpocmVmPSIjRTEtTUpNQVRISS02RSIg eD0iNTUwIiB5PSI1MTMiPjwvdXNlPgo8L2c+CjwvZz4KPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUo MTMxNCwtNzM3KSI+CiA8dXNlIHhsaW5rOmhyZWY9IiNFMS1NSk1BVEhJLTZFIiB4PSIwIiB5PSIw Ij48L3VzZT4KIDx1c2UgeGxpbms6aHJlZj0iI0UxLU1KTUFJTi0yMSIgeD0iNjAwIiB5PSIwIj48 L3VzZT4KPC9nPgo8L2c+CjwvZz4KPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTg4MDAsMCkiPgo8 ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMjAsMCkiPgo8cmVjdCBzdHJva2U9Im5vbmUiIHdpZHRo PSIyNDM0IiBoZWlnaHQ9IjYwIiB4PSIwIiB5PSIyMjAiPjwvcmVjdD4KPGcgdHJhbnNmb3JtPSJ0 cmFuc2xhdGUoMjQwLDY3NikiPgogPHVzZSB4bGluazpocmVmPSIjRTEtTUpNQVRISS02NCIgeD0i MCIgeT0iMCI+PC91c2U+CjxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDUyNCwzNjIpIj4KIDx1c2Ug dHJhbnNmb3JtPSJzY2FsZSgwLjcwNykiIHhsaW5rOmhyZWY9IiNFMS1NSk1BVEhJLTZFIiB4PSIw IiB5PSIwIj48L3VzZT4KIDx1c2UgdHJhbnNmb3JtPSJzY2FsZSgwLjcwNykiIHhsaW5rOmhyZWY9 IiNFMS1NSk1BSU4tMkIiIHg9IjYwMCIgeT0iMCI+PC91c2U+CiA8dXNlIHRyYW5zZm9ybT0ic2Nh bGUoMC43MDcpIiB4bGluazpocmVmPSIjRTEtTUpNQUlOLTMxIiB4PSIxMzc5IiB5PSIwIj48L3Vz ZT4KPC9nPgo8L2c+CjxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDYwLC03ODApIj4KIDx1c2UgeGxp bms6aHJlZj0iI0UxLU1KTUFUSEktNjQiIHg9IjAiIHk9IjAiPjwvdXNlPgo8ZyB0cmFuc2Zvcm09 InRyYW5zbGF0ZSg1MjMsMCkiPgogPHVzZSB4bGluazpocmVmPSIjRTEtTUpNQVRISS03NCIgeD0i MCIgeT0iMCI+PC91c2U+CjxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDM2MSwyODgpIj4KIDx1c2Ug dHJhbnNmb3JtPSJzY2FsZSgwLjcwNykiIHhsaW5rOmhyZWY9IiNFMS1NSk1BVEhJLTZFIiB4PSIw IiB5PSIwIj48L3VzZT4KIDx1c2UgdHJhbnNmb3JtPSJzY2FsZSgwLjcwNykiIHhsaW5rOmhyZWY9 IiNFMS1NSk1BSU4tMkIiIHg9IjYwMCIgeT0iMCI+PC91c2U+CiA8dXNlIHRyYW5zZm9ybT0ic2Nh bGUoMC43MDcpIiB4bGluazpocmVmPSIjRTEtTUpNQUlOLTMxIiB4PSIxMzc5IiB5PSIwIj48L3Vz ZT4KPC9nPgo8L2c+CjwvZz4KPC9nPgo8L2c+CiA8dXNlIHhsaW5rOmhyZWY9IiNFMS1NSk1BVEhJ LTY2IiB4PSIyMTQ3NCIgeT0iMCI+PC91c2U+CiA8dXNlIHhsaW5rOmhyZWY9IiNFMS1NSk1BSU4t MjgiIHg9IjIyMDI1IiB5PSIwIj48L3VzZT4KIDx1c2UgeGxpbms6aHJlZj0iI0UxLU1KTUFUSEkt NzUiIHg9IjIyNDE0IiB5PSIwIj48L3VzZT4KIDx1c2UgeGxpbms6aHJlZj0iI0UxLU1KTUFJTi0y OCIgeD0iMjI5ODciIHk9IjAiPjwvdXNlPgogPHVzZSB4bGluazpocmVmPSIjRTEtTUpNQVRISS03 NCIgeD0iMjMzNzYiIHk9IjAiPjwvdXNlPgogPHVzZSB4bGluazpocmVmPSIjRTEtTUpNQUlOLTI5 IiB4PSIyMzczOCIgeT0iMCI+PC91c2U+CiA8dXNlIHhsaW5rOmhyZWY9IiNFMS1NSk1BSU4tMjki IHg9IjI0MTI3IiB5PSIwIj48L3VzZT4KIDx1c2UgeGxpbms6aHJlZj0iI0UxLU1KTUFUSEktNjQi IHg9IjI0Njg0IiB5PSIwIj48L3VzZT4KIDx1c2UgeGxpbms6aHJlZj0iI0UxLU1KTUFUSEktNzQi IHg9IjI1MjA3IiB5PSIwIj48L3VzZT4KIDx1c2UgeGxpbms6aHJlZj0iI0UxLU1KTUFJTi0yRSIg eD0iMjU1NjkiIHk9IjAiPjwvdXNlPgo8L2c+Cjwvc3ZnPg== --000000000000ace47e05d4aec788--