483782016-11-30 05:32:58 +0000For builds on Mac, XamlC or Cecil incorrectly updates .mdb files for iOS apps, maybe only when the Xamarin.Build.Download package is also used2017-02-02 10:22:04 +0000111XamarinFormsForms2.3.3PCMac OSRESOLVEDFIXEDhttps://bugzilla.xamarin.com/show_bug.cgi?id=48285---major---1brendan.zagaeskibugzillaadamldavidjasstephane.delcroixAC XamlCYes2.3.1.114oldest_to_newest231534018714brendan.zagaeski2016-11-30 05:32:58 +0000Created attachment 18714
Test case
For builds on Mac, XamlC or Cecil incorrectly updates .mdb files for iOS apps, maybe only when the Xamarin.Build.Download package is also used
(One common use of the Xamarin.Build.Download NuGet package is to support the Xamarin.Google.iOS.Analytics NuGet package.)
Note that this bug is different from non-public Bug 48285 because in this bug the XamlCTask _is_ updating the .mdb file (that is, in this case the `DebugSymbols` parameter is `true`). The problem in this case is instead that the XamlC task seems to be corrupting the .mdb file.
While researching this bug I came across Bug 45021, and that bug does share at least a few similarities with the bad results for this bug. So updating the Cecil version from 0.9.6.0 to 0.10 or higher in both the Xamarin.Forms NuGet package and the Xamarin.Build.Download might help with this bug too [1]. On the other hand, in my testing I was not able to replicate the problem on Windows. But maybe the `pdb2mdb` conversion on Windows hides the bug in Cecil?
[1] I made sure to double-check the results below on Mono and Xamarin.iOS versions that included the Cecil update discussed in Bug 45021. The same problems were still present, but the Xamarin.Forms and Xamarin.Build.Download packages also include their own internal copies of Cecil that I did _not_ attempt to update.
## Regression status: maybe a regression between 2.3.1.114 and 2.3.2.127
For this particular test case:
BAD: 2.3.3.168
BAD: 2.3.2.127
GOOD: 2.3.1.114
GOOD: 2.3.0.49
I am somewhat uncertain about this assessment of regression status due to the subtlety of this particular bug. For example, maybe I would still be able to hit the problem on older versions of Xamarin.Forms if I used a different or more complicated test case.
## Steps to replicate
1. Unzip the attached test case into /Users/Shared/Projects/ so that the full path to the solution file is /Users/Shared/Projects/XamlCMdbFileMixup/FormsShared1.sln. (.mdb files contain absolute paths, so this is step is necessary to ensure that you'll see the exact BAD results as reported below.)
2. Open the solution in Xamarin Studio to restore the NuGet packages.
3. Run a command line build for the "Debug|iPhoneSimulator" configuration with xbuild:
> $ xbuild /v:quiet /t:Build /p:Configuration="Debug" /p:Platform="iPhoneSimulator" FormsShared1.sln
4. Dump the mdb file using the included mdbdump.exe binary (or compile mdbdump from [1]).
> $ mono mdbdump.exe iOS/bin/iPhoneSimulator/Debug/FormsShared1.iOS.exe
[1] https://github.com/mono/mono/blob/master/mcs/tools/mdbdump/mdbdump.cs
## "More obvious" BAD results
(a) The "most obvious" bad behavior in the attached test case is that breakpoints do not work in the IDE. For example, you can try adding a breakpoint in `Bar()` at FormsShared1Page.cs, line 19. The debugger should break on that breakpoint once the app launches, but it doesn't.
(b) The output from `mdbdump` helps reveal what's happening. The methods are matched up with the wrong sets of sequencepoints. One clear example is that the `file_ref` for `FormsShared1.FormsShared1Page::Bar()` is wrong.
The .mdb file thinks the method is in `file_ref` 7:
> <method token="0x600000d" signature="System.Void FormsShared1.FormsShared1Page::Bar()">
> <sequencepoints>
> <entry il="0x0" row="20" col="44" file_ref="7" />
But `file_ref` 7 is the `.xaml.g.cs` file:
> <file id="7" name="FormsShared1.iOS..Users.Shared.Projects.XamlCMdbFileMixup.FormsShared1.FormsShared1Page.xaml.g.cs" checksum="e258a7f0299dd776486327ec29cc2354" />
In contrast, the sibling method `Foo()` has `file_ref` 4:
> <method token="0x600000c" signature="System.Void FormsShared1.FormsShared1Page::Foo()">
> <sequencepoints>
> <entry il="0x0" row="18" col="9" file_ref="4" />
And `file_ref` 4 is the correct `.xaml.cs` file:
> <file id="4" name="FormsShared1Page.xaml.cs" checksum="9922f60246ebf809eb63749d7ad5e6db" />
_But_ if you look carefully at the sequence points, you'll see that the `row` attributes are still _incorrect_: `Foo()` has been matched up with the sequence points for `Bar()` rather than its own sequence points.
## "Less obvious" BAD results (after removing the Xamarin.Build.Download.targets `<Import>` element)
The Xamarin.Build.Download.targets `<Import>` element in the attached test case somehow helps expose the "more obvious" bad behavior. In further testing, I found that running the XamarinBuildiOSResourceRestore task by itself seemed to be sufficient to get that "more obvious" behavior (as long as XamlC was still enabled). I would guess that the XamarinBuildiOSResourceRestore task also makes use of Mono.Cecil and that the two overlapping uses of Mono.Cecil lead to a special failure case.
Removing the Xamarin.Build.Download.targets `<Import>` reveals the "normal" (though maybe still unintended) effects of the XamlC task:
### Steps
1. Remove or comment out the following line from FormsShared1.iOS:
<Import Project="..\packages\Xamarin.Build.Download.0.2.2\build\Xamarin.Build.Download.targets" Condition="Exists('..\packages\Xamarin.Build.Download.0.2.2\build\Xamarin.Build.Download.targets')" />
2. Rebuild the project:
> $ xbuild /v:quiet /t:Rebuild /p:Configuration="Debug" /p:Platform="iPhoneSimulator" FormsShared1.sln
(Caution: Using a command line build is recommended for this step. If you use the IDE to build, you will need to _quit_ and reopen the IDE before rebuilding in order for the changes to take effect.)
### Results
(a) `Bar()` is matched up with the correct set of sequence points, _but_ now the `col` attributes are all set to "-1":
> <method token="0x600000d" signature="System.Void FormsShared1.FormsShared1Page::Bar()">
> <sequencepoints>
> <entry il="0x0" row="18" col="-1" file_ref="5" />
Note that the `col` attribute is apparently not required for the IDE to break successfully on breakpoints: _breakpoints work OK in this case_.
(b) Another (possibly intentional?) change is that the unused `AssemblyAttribute.cs` `file_ref` has been removed from the `mdbdump` output, and some empty elements have also been removed.
Perhaps these "less obvious" bad results are just a known side-effect of Cecil? On the other hand, on Windows neither (a) nor (b) happens when XamlC is enabled, so these behaviors _might_ also be something slightly different and more problematic?
## GOOD Results: Disable XamlC
### Steps
1. Remove or comment out the following line from App.xaml.cs:
[assembly: Xamarin.Forms.Xaml.XamlCompilation(Xamarin.Forms.Xaml.XamlCompilationOptions.Compile)]
2. Rebuild the project:
> $ xbuild /v:quiet /t:Rebuild /p:Configuration="Debug" /p:Platform="iPhoneSimulator" FormsShared1.sln
### Results
`Bar()` is matched up with the correct set of sequence points, and the `col` attributes are all set to their correct values:
> <method token="0x600000c" signature="System.Void FormsShared1.FormsShared1Page::Bar()">
> <sequencepoints>
> <entry il="0x0" row="18" col="9" file_ref="4" />
## Testing environment info (brief)
Xamarin.Forms 2.3.3.168
Mono 4.8.0 (mono-4.8.0-branch/902b4a9)
Xamarin.iOS 10.4.0.25 (master: 0160ba1)
Mac OS 10.11.62425611stephane.delcroix2017-01-18 13:14:10 +0000Here's some info:
- For whatever reason, cecil 0.9.6 always generate -1 as `col`.
- even with Xamarin.Build.Download target turned off, some debug information are still off
- the messed up debug information comes from the duplicated `InitializeComponent` we added for the previewer to work even with XamlC on
- removing the duplication code produce correct debug symbols, even with Xamarin.Build.Download turned on
- cecil 0.10.0-beta2 generates the right `col` value.
Here's the mob info related to FormsShared1Page:
<method token="0x600000a" signature="System.Void FormsShared1.FormsShared1Page::.ctor()">
<sequencepoints>
<entry il="0x0" row="7" col="16" file_ref="4" />
<entry il="0x6" row="8" col="9" file_ref="4" />
<entry il="0x7" row="9" col="13" file_ref="4" />
<entry il="0x8" row="9" col="13" file_ref="4" />
<entry il="0xd" row="10" col="13" file_ref="4" />
<entry il="0xe" row="10" col="13" file_ref="4" />
<entry il="0x13" row="11" col="9" file_ref="4" />
</sequencepoints>
<locals />
<scopes />
</method>
<method token="0x600000b" signature="System.Void FormsShared1.FormsShared1Page::Foo()">
<sequencepoints>
<entry il="0x0" row="14" col="9" file_ref="4" />
<entry il="0x1" row="15" col="9" file_ref="4" />
</sequencepoints>
<locals />
<scopes />
</method>
<method token="0x600000c" signature="System.Void FormsShared1.FormsShared1Page::Bar()">
<sequencepoints>
<entry il="0x0" row="18" col="9" file_ref="4" />
<entry il="0x1" row="19" col="13" file_ref="4" />
<entry il="0x4" row="20" col="9" file_ref="4" />
</sequencepoints>
<locals>
<entry name="x" il_index="0" scope_ref="0" />
</locals>
<scopes />
</method>
<method token="0x600000d" signature="System.Void FormsShared1.FormsShared1Page::InitializeComponent()">
<sequencepoints>
<entry il="0x0" row="18" col="44" file_ref="7" />
<entry il="0x1" row="19" col="13" file_ref="7" />
<entry il="0xc" row="19" col="51" file_ref="7" />
<entry il="0x12" row="20" col="9" file_ref="7" />
</sequencepoints>
<locals />
<scopes />
</method>
With the files being:
<files>
<file id="1" name="Main.cs" checksum="aaa610a969fcf6a2ac800d47359586ae" />
<file id="2" name="AppDelegate.cs" checksum="bb3f39dfb16fa81977b07b66cd83cc41" />
<file id="3" name="App.xaml.cs" checksum="3c4fde433fffe35ae97783944d348207" />
<file id="4" name="FormsShared1Page.xaml.cs" checksum="9922f60246ebf809eb63749d7ad5e6db" />
<file id="5" name="Xamarin.iOS,Version=v1.0.AssemblyAttribute.cs" checksum="edee6220f0276d160b1300e9f4861679" />
<file id="6" name="FormsShared1.iOS..Users.Shared.Projects.XamlCMdbFileMixup.FormsShared1.App.xaml.g.cs" checksum="33c537f4a9da4d69ca1f9523fb641b3f" />
<file id="7" name="FormsShared1.iOS..Users.Shared.Projects.XamlCMdbFileMixup.FormsShared1.FormsShared1Page.xaml.g.cs" checksum="ba301b2b68200dafc6b82c4956e313ad" />
</files>
As you can see, everything is correct (except that `InitializeComponent()` shouldn't have any sequence points defined, as the IL for that method has been completely replaced)2426832brendan.zagaeski2017-01-19 03:00:50 +0000That sounds sensible and looks pretty good to me. I wouldn't be too surprised to hear that simply updating the Cecil versions included in the Xamarin.Forms and Xamarin.Build.Download packages does indeed resolve this issue.
Comment 1 sounds like it might also already have been using a nice narrow test for determining the involvement of Cecil: start with the commit for the known "bad" version of Xamarin.Forms 2.3.3.168, update the Cecil reference to a "good" version (0.10.0-beta2), rebuild the Xamarin.Forms NuGet package, and then check the test case with the new package. Is that indeed how the test in Comment 1 was done? If so, then I think I'd be fine with having this bug marked "resolved fixed" as soon as the master branch of Xamarin.Forms has been updated to reference one of those new "good" versions of Cecil (which might have already happened).
If there is a Xamarin.Forms package easily available that already includes the newer Cecil version, we might as well do one additional quick check just to be extra thorough: diff the `mdbdump` output to compare between when XamlC is enabled vs. disabled to make sure my "by eye" assessment of the results in Comment 1 is accurate. I'll tentatively plan to take a quick try at that when I get a chance.2426983stephane.delcroix2017-01-19 07:55:29 +0000you're misreading me... the bug is not fixed, the pasted mdb is the one with the duplication code removed. But I can't remove that as it's required by the previewer.2428414stephane.delcroix2017-01-20 08:39:48 +0000Here I am, 3 days later. And I figured it out...
> For builds on Mac, XamlC or Cecil incorrectly updates .mdb files for iOS apps
is the source of the confusion.
As it turns out, the .mdb file ISN'T modified at all. Modifying the Xamarin.Forms.targets in this way proves it:
<Target Name="XamlC">
<Exec Command="mdbdump.sh $(IntermediateOutputPath)$(TargetFileName);md5 $(IntermediateOutputPath)$(TargetFileName).mdb; sleep 10" />
<XamlCTask
Assembly = "$(IntermediateOutputPath)$(TargetFileName)"
ReferencePath = "@(ReferencePath)"
Verbosity = "2"
OptimizeIL = "true"
DebugSymbols = "$(DebugSymbols)" />
<Exec Command="mdbdump.sh $(IntermediateOutputPath)$(TargetFileName);md5 $(IntermediateOutputPath)$(TargetFileName).mdb; sleep 10" />
</Target>
The mdbdump *looks* different, but as the md5hash shows, it wasn't modified, and the matching between the sequence points and the IL is wrong, then producing a bad mdbdump, and not allowing you to set breakpoints.
Forcing the load of the MdbReader and MdbWriter fixes it.
see https://github.com/xamarin/Xamarin.Forms/pull/6992431105brendan.zagaeski2017-01-23 19:01:15 +0000Ohhh very interesting and nice catch! Sounds good on the fix too. Thanks much!2449586stephane.delcroix2017-02-02 10:22:04 +0000this will be fixed in 2.3.5-pre1187142016-11-30 05:32:58 +00002016-11-30 05:32:58 +0000Test caseXamlCMdbFileMixup.zipapplication/zip13333brendan.zagaeskiUEsDBAoAAAAAAAaZfUkAAAAAAAAAAAAAAAASABwAWGFtbENNZGJGaWxlTWl4dXAvVVQJAANrGD5Y
cxg+WHV4CwABBPUBAAAEAAAAAFBLAwQKAAAAAAAGmX1JAAAAAAAAAAAAAAAAHwAcAFhhbWxDTWRi
RmlsZU1peHVwL0Zvcm1zU2hhcmVkMS9VVAkAA2sYPlhzGD5YdXgLAAEE9QEAAAQAAAAAUEsDBBQA
AAAIAAaZfUm/u6DowAAAACkBAAAnABwAWGFtbENNZGJGaWxlTWl4dXAvRm9ybXNTaGFyZWQxL0Fw
cC54YW1sVVQJAANrGD5Yaxg+WHV4CwABBPUBAAAEAAAAAHWOSw6CMBRF56yidt4WjAMlfGJMXICu
oClFmtCW9BXFtTlwSW7BgsTgwOm75553X49nVg66RVfpQFmT44TGGEkjbKXMJce9r8kWl0WU7buu
VYL7QKHQMJDjxvsuZWzgmjtlqLCagWik5sDWcbJhtXUa8IdOhy8/M1Qr4SzY2k/NmzL1EHrxbhS2
oZYeWg7hzXHUnBvuZJXQMAMXEULLPfQkwfZOSBiTkK0IQcu9bs5RpcR44O6OCJk07I/nJyiiN1BL
AwQUAAAACAAGmX1J+sb+Wf8AAACJAgAAKgAcAFhhbWxDTWRiRmlsZU1peHVwL0Zvcm1zU2hhcmVk
MS9BcHAueGFtbC5jc1VUCQADaxg+WGsYPlh1eAsAAQT1AQAABAAAAACVT7FqwzAQ3fUVN9qLQ9eE
DqVQ2iGkNEugdLjYR3IgnYQkJ6QlX9ahn9RfqGTTxhlMsYYHunvv3nvfn19tYNnBBg16lurBehMW
Sr1iCGS2+jS/XlXppzu4t8axxshWiv8pK5cxVP2IyjclaCg4rAk61XqPnpob9aEgPdduNdfg0EdG
DbVOceDOOZhnTKvuaEftBQNRIhTl3/Cyzu9JOB/kd8pBrJDEokx1h5wlsjzjjuAWhI5X6fI483+p
54vSeRupjtSAPZD33BAcLDewknVMLUYTzWbwiNJoguOeBE629YCpaMiqMNFJE413H3XKqolOLxRa
Q5OtfCcbevV4Vj9QSwMEFAAAAAgABpl9SUuHu2aMAQAA3gMAADUAHABYYW1sQ01kYkZpbGVNaXh1
cC9Gb3Jtc1NoYXJlZDEvRm9ybXNTaGFyZWQxLnByb2ppdGVtc1VUCQADaxg+WGsYPlh1eAsAAQT1
AQAABAAAAAClUltP2zAYfUfaf4gsHuhD4rQNooUkKG0oVGITgvE8ufbXJpNvsh0EQvx33C6dyNpN
A16Pz3ducnr+KHjwAMbWSmaoH8UoAEkVq+UqQ41bhiN0nn85SG+M+gnUBZ4ubYYq5/QpxpZWIIiN
RE2NsmrpIqoEZvAAXGkwWNhFU3OGB3E8RF4mCNZC/sU9XRrV6A3kwa93kzWv4Lz1sfnh0S7YO/uN
fq9qO6s5zBr/TFzVS/EekVb+iti7ihhgcwfC5s40kOI/wJb6C7q8n5f588V4NuqXJ6MwSU6SMCmS
OJwMJuPweFhMR+V4OCji4iXFb042DfFuxW7r4JosgGdoquSyXjWGOD8+2iaYC62M+3GrlPtGBFhN
KOQzZUQbt5/ivZS/eq/7dda+EAtgDNgtWNUYCsFcUt4wyNDOvGVt/JDKPPUKraNHIjgK8Kd03ja5
ISvoiPpqnbC72adKaK/3rsgRtdt1vUIJGiQD6e61kvmWk+Iu3trh1u8j9nub/ivL3oP/CdadbfMJ
1v8/fwVQSwMEFAAAAAgABpl9SSUVxFpdAQAAsQMAADIAHABYYW1sQ01kYkZpbGVNaXh1cC9Gb3Jt
c1NoYXJlZDEvRm9ybXNTaGFyZWQxLnNocHJvalVUCQADaxg+WGsYPlh1eAsAAQT1AQAABAAAAADN
kl1rwjAUhu8H+w8hCOpFP2w71NEqtX4wmCA4vOpNbaKNND0lScUx9t/X+lE6BoPBLrxLznnznPdN
4o5PPEVHKiSDzMM93cSIZjEQlu09XKidNsDj0eODuxJwoLFCbwCp3Nz0TqUvCZn0cKJU/mwYMk4o
j6TOWSxAwk7pMXCD0CNNIafC4HJbsJQYlmnauCQjVLHLjnpfCCjyc+lSrAYuCkZGH7PhfNCb9gea
4/QdzfEdU5tYk6H2ZPvBYDq0Ld/0P12jeeZMNn6i3Reeg1DoqvVwq7NcTypLs5OiWZVLriKVdMO6
0czcDZd1sAA4h0zPyxkSowAywtT5WmYnJpXstP8H3e5iZPzJu201WOGGySJK16ogDMJjq9Pc16MD
IHSdRKJ892826urN0pTuoiJVt9T3Y+x3Q3MQXFYnKOlV0gNTlJfy12hLUw9fOvcRp1rkuorEnqpr
oPprj74AUEsDBBQAAAAIAAaZfUm1JaxS7QAAAF4BAAA0ABwAWGFtbENNZGJGaWxlTWl4dXAvRm9y
bXNTaGFyZWQxL0Zvcm1zU2hhcmVkMVBhZ2UueGFtbFVUCQADaxg+WGsYPlh1eAsAAQT1AQAABAAA
AABtkE1OxDAMhfc9hfF+mhaxgKrpLCohFkgggYBtyLjTSPmpkgAVV2PBkbgC7gygLljaft+z/b4+
Ptvt7Cy8UkwmeIl1WSGQ12Fn/F7iSx4257jtirYPPpPPt2pPwIRPEsecp0aIWTkVjS91cCLpkZxK
4rSqz8QQokt4VDfzn/5HUzqjY0hhyAfyzfhhZq66WAztL2aDVlaitnHjlaM0KU3N5WJ8N6pIu5qF
TW9V4nvW7XJdLEdjVwC01+qZLNzTnCU+kuXFBDnA0/EFOEAnCA8Us+HFN1PmVNi659cpIlyFaN45
iX9GgkMSq5S64htQSwMEFAAAAAgABpl9Sf3p4SipAAAAYgEAADcAHABYYW1sQ01kYkZpbGVNaXh1
cC9Gb3Jtc1NoYXJlZDEvRm9ybXNTaGFyZWQxUGFnZS54YW1sLmNzVVQJAANrGD5Yaxg+WHV4CwAB
BPUBAAAEAAAAAHWOPQrCQBBG+znFlEkjpjXYGBDsBBvbMVniQPaH3U0QZU9m4ZG8gkmEmIQ41e7w
vu/N+/mqHasSzyTJslrttZUuBVAkhTOUC+w3pytZUSTwAGzH1JeKczRkPVOFeUXOTbgjlQI3mGnl
hfLdr89906OGeSaKB+LHdnNQ3Kn4LjItjVZtaxSnE2RHdrwKw2subTQXrVkvygIs4n35n9sasnjD
LSbruT1AgA9QSwMEFAAAAAgABpl9SV5unh2wAQAAvQUAACIAHABYYW1sQ01kYkZpbGVNaXh1cC9G
b3Jtc1NoYXJlZDEuc2xuVVQJAANrGD5Yaxg+WHV4CwABBPUBAAAEAAAAAK1TPW/bMBCdI0D/QVCX
BAiFo0TL4tBB/OpU1KiATlkUm7ZZKGagjy5p/nsp1EksWTaCOJPIu8d7796dfO+7Wda2ses2+GWa
rqyCou1WxgaFrbrW2F2gTKVvA2Xrh9JhdN30QRxHAL73ZfQoBhz73qK2v/WyvQ6fBJ2RmGKJ4hwY
IikIRBMikeApg3k2E4xkz+FN8DUIe4Km2Ja1XuHwdni/O7xEzfbREfSYJ0lVhsU8Q4TMCSI5AcRi
RtEsyXkmaOJo8+fQ9+RutRd1qE7lEojkgBLACmEsEsQUYQiAA1FzKhXjE+oi86Po2d3nbhyPls2r
uFQwxlMJSOUkRUTQHGUywYilHGgaz7gCORb3rbL3ZeV7V/8PhQs6u69fhsHtbm02XV32l0VVtuue
v1f4WOsXkHt9JfR9t/lrFlu704V56BzU1g42Ge8f/NSVLhu9TznkMHAMOax6IjMWMuJ3adf6oNGj
xvfGnOnbNu1h4+9zPZr0Icod6R/N15tzTl3EwDpTrSL4hPpDzwfSj0f3sZpvYj+p4rTTZ7bnQpZT
DVw6z5OL8tF602sx+YO8RnzvH1BLAwQKAAAAAAAGmX1JAAAAAAAAAAAAAAAAFgAcAFhhbWxDTWRi
RmlsZU1peHVwL2lPUy9VVAkAA2sYPlhzGD5YdXgLAAEE9QEAAAQAAAAAUEsDBBQAAAAIAAaZfUlO
4zOgGwEAABICAAAkABwAWGFtbENNZGJGaWxlTWl4dXAvaU9TL0FwcERlbGVnYXRlLmNzVVQJAANr
GD5Yaxg+WHV4CwABBPUBAAAEAAAAAG1QzUrEMBC+9ymGPbUgBa/tSVxWFouKZUEQD9N2bAfSJCap
ssg+mQcfyVcwTe1aVnMYkpnvL/P18TlYli2Ue+uoz6PlK71UQlDtWEmbXpEkw/UJomD5kkc/vY0a
ZIMjfEbtttfs/FxiT1ZjTR5jelt2aKg5T/m2jN4j8Ofxnlr2iiZeXWi9JkEtOlolT2Gqh0pwDRqN
YxRQC7QWFjjIoBWqQpFlD9ijYZkGn/ROoHv2t9FpanmWlwohZ3awmGIszNQrGcMNQaWUgA1Lth01
BQ6y7vzX4t12IQWo9RnclGsO20KzB6XD3pKj7q/DeP7PO9WtZBcnfm1LQqGwWTjGkt7GFcTJKdCQ
G4yECi2lf2OHoHO2/Eg8RFM9RN9QSwMECgAAAAAABpl9SQAAAAAAAAAAAAAAACYAHABYYW1sQ01k
YkZpbGVNaXh1cC9pT1MvQXNzZXRzLnhjYXNzZXRzL1VUCQADaxg+WHMYPlh1eAsAAQT1AQAABAAA
AABQSwMECgAAAAAABpl9SQAAAAAAAAAAAAAAADkAHABYYW1sQ01kYkZpbGVNaXh1cC9pT1MvQXNz
ZXRzLnhjYXNzZXRzL0FwcEljb24uYXBwaWNvbnNldC9VVAkAA2sYPlhzGD5YdXgLAAEE9QEAAAQA
AAAAUEsDBBQAAAAIAAaZfUnH2L/MXgEAAFEKAABGABwAWGFtbENNZGJGaWxlTWl4dXAvaU9TL0Fz
c2V0cy54Y2Fzc2V0cy9BcHBJY29uLmFwcGljb25zZXQvQ29udGVudHMuanNvblVUCQADaxg+WGsY
Plh1eAsAAQT1AQAABAAAAAC9lD1vwyAQhvf8Cos5qhyKv7p2zdax6kAJsVFicG3cXhv5vxfHiutK
QUkx6YLkF997D3cHh0UQIFHSnDfoIXg2X0FwOK69vhGqNDISVaEkR8vTRiO+eK/jDHA2kRndH/UV
oKPWLT0ZYt+G966GJAQS+iS0GToTRglEic+m2AydjxyHEHutoc3wihrSjdex/ovdFcc9Z2cbGEe6
GQN9zi4KIfJIZ7NzpEswJNgfnc3OlS6GJPZIZ7Gz0Y3zSgCTn7gxywfVrDjvN4q1GjSptNgKRrVQ
8pFLzetJYPuqP6vhgqZleQEmuYugX/4HiOCLQL9vsw3mlJepsqLSJH3iWguZNy4N8Z/S9jJaXgWn
ktOqWtNWssK5+YQAmTuJeyXztVI7x3anMaTxTIS3VrCdleFyGbIUsvSmDJM6mPWl/wUJuVVmb6BB
77xuzEgZYTUYINrqQtV9NDC14X14t+i+AVBLAwQUAAAACAAGmX1JTw2fUzYAAABBAAAAMwAcAFhh
bWxDTWRiRmlsZU1peHVwL2lPUy9Bc3NldHMueGNhc3NldHMvQ29udGVudHMuanNvblVUCQADaxg+
WGsYPlh1eAsAAQT1AQAABAAAAAB7v3t/NZeCglJmXlq+koKVAogD5JalFhVn5ueBRAx1IEKJpSUZ
+UUgEaWK5PyUVCWgcC1XLQBQSwMEFAAAAAgABpl9Sc8FHnagAAAAwAAAACgAHABYYW1sQ01kYkZp
bGVNaXh1cC9pT1MvRW50aXRsZW1lbnRzLnBsaXN0VVQJAANrGD5Yaxg+WHV4CwABBPUBAAAEAAAA
AHu/e7+NfUVujkJZalFxZn6erZKhnoGSQmpecn5KZl66rVJoiJuuhZKCvR2XjaKLv3NIZICrQkFO
ZnGJQkCok4+ns4KSrr6+Y0FBTqq+vkuIi0KAj2dwiALQEH19Vz8lBaWMkpICK3398vJyvUSQKr3k
/FyQwmL9gKL8gtSikkofoGG6QA16KSUpSkBrIKajuAcompKZXAKk9GE0WJUdFwBQSwMEFAAAAAgA
Bpl9SUx+eHmiBQAAdxsAAC0AHABYYW1sQ01kYkZpbGVNaXh1cC9pT1MvRm9ybXNTaGFyZWQxLmlP
Uy5jc3Byb2pVVAkAA2sYPlhrGD5YdXgLAAEE9QEAAAQAAAAA7Vltb9pIEP5+0v0HC1VKq5xfeAkh
V3AFxk7RJU0U0rt+QKoWe4Ft1rvW7jqFa/vfb2xssIFw9C5R76WKFNiZZ5+Z3Z2ZfaH9ah5S7R4L
STjrVKqGVdEw83lA2LRTidVEb1Ve2T/+0L4W/AP2ldbHExRTdYvEFCvZqfRiQoOKdss5lb/mNI2E
BogZAGZKRT+bpvRnOETSCIkvuOQTZfg8NAN8jymPsDBDOU6YzJpl1StgUNPagzDiQmmZ5U7FMEYR
8u/QFMvROxQiQZiRmjf6/COjHAWGZdSM2ihleggSCR7JiuZwFhCVeuvOiVTy+dEj8h+9qGjmchTg
PoxPLc4Fj6NUBEKwPiHTWKDEg6Iv2tGz5yXliyOt09GOjrSK3cfjeNo2S+qc8JoiNeEi3OTK5QUa
cj3jDA9JGIOOi7aZY1Zcywk/j0lgf2r2ez2n6Vq612009Ub/rKu33HpV7zUd66xZO3E8y/0CHIU+
ZZrbRYQTsbQ/eW7X8Xr9ml5vWCd64+TE0c+azRP9tOW5jVrTabYatS8vP3ld12q4jqXXraqnV6v9
ut7zGj3dshyr4Z2euV7PWZtc82d2r2IVxanYdue4bRbaGeKGc/UGhVjCcmPbg6HL4QwJHFQNcjVs
m2V91qkrJQ7HdJEodvQpqbMug3Smb7DksfDxtcATMrfzpmybO/Vp0JjbUVMOpP0x83lr4dPY+byx
9Ek0ZK6m+uEiHEMa20rEMG8lURGWTuUkpjTDFKf2KlIkJL+DHlGZTH7eLi3ONVIze0zYaMOhURbi
BdTK8IQwDKOUCjEl7b7be3v+0n3T7V2472/d4e175+Lqbf9l4lIZmRG4QnBxg5OKYkOKhpFqm0VZ
BvsNCQal7yKpS3ajbZbaq+QNsCRT9gteZMkEVTGrY0l6rrVZh0vFY3+Wji2b26KkBPKQVEBWguWy
EvCtxMNzzErAXLYJvMETh8dMwUA28UVVHrVXw9SxKRbXyczUzqpNC4J1Q1wyckHYnf0GZiKnTgUl
SFf4M3vear5vNnJQKiqBXsNm4VCCmXqNWECxsLckeedtaInplkpImHsSgCLbs/KeRdVG+Vxua4mb
67KYyZ4mL28wxUjiLDM3EzLNrCgYc0YX+5JtuagH5doos7gryb59jjxdVGepBFu0qtfK6ZXJNjx3
obuiOMRJESk2jIjCeWE9iBJwOyuGwd1Vunx7E6N7c3l/+pMGH9/T48H0eHDjeoI8We9J/+uE+V7Y
H+HA9U85Z/1Hj1egJT4eRtgnE+Kn17HV1G5r/pVnsu+71zeqAQOFw9LNHRYHC8x8rA2YT+MAdyrD
hQRUfuHfhzHehfQgnMMF3g/MXx/g8nkYML2yLokzNOBfE7asA7vePpY9akYd/qrN1oiS8ahgtmqN
trmNIClXK9rMLXPl18GO5gv0VM7m/I/ucLoiT+00KB/NcWjRp3I44f4bjp5zPqXY6DJEF4r48lA3
s37JLK36Jh6fGtYOlzetHOQwXIhLpWG7UgxC8Cl5FlLrAaVNacx9lH4ZdaNo4HNmoCgi8AmyEWyt
Ki3UHyRnhdQ+hG5n3z/31OMUyuWadvVENTqcYwCWxQT5OD0gpAelNeEFipk/G/oCY2ZIOFQvxhyJ
4HD25AS6phuwCV/uY4X5KUO2t7wHoXn0GH56pDvcKQeOOYQWmC4RxBRE6drSFgQWvA/3iSlSuIDc
trX99F18ciw1khfnDwT6A90FGmMKu0iqeeiR+wCmwvv1pivPnl8O05OUO4dYS977ZZImL/KkGkFS
FRPMcBL2yFDLXwwe5D2k3Cwf3pN+aEyx/pGwY4ZV4+T4Y9SyjqHZqsJXBP8vOeNdFghOgqp1XMr3
4/myFSK/tlmvVk4e+PPAt3Jwz/o8zq8YXzsRf9nCV45kX2Uvm9uJ/NphPY65fIyr3yzsPwBQSwME
FAAAAAgABpl9Sb/Kdw7kAQAAwwUAACAAHABYYW1sQ01kYkZpbGVNaXh1cC9pT1MvSW5mby5wbGlz
dFVUCQADaxg+WGsYPlh1eAsAAQT1AQAABAAAAADNlE1u2zAQhfc+haq9xaabBoWiILFiQIAaC6FV
NEtGHFuDSiRLUv7Z9GJd9Ei5QilLieNaaYoUKLrSYPjex5mhMPfff4Tnm7ryVqANSnHmnwRvfQ9E
ITmK5Zmfz6fjU/88GoVv4tlkfptdeapCY70sv0yTieePCblQqgJC4nnsZWlC555jEHJ17Xt+aa36
QMh6vQ5YqwoKWbdCQzItFWi7TR1s7AwBt9x313T0g3JclmNho5HnhV9gG02ml43gFcRoVMW216yG
kLQHrcBY7QqPplLXhpZMAz8JSZ/8FfB6Z8JBWFwg6CO/6zCADavbbhcty7zAoqXU9lPXMN1Jjphu
Cs/ae+cfeVJ6A18b1GCSrJQCZnRvs7oB8qj8iALrpp7R5/CnA/g8iWGFBUxZjdV2b2Fas13kYhQW
lqAjN4+H8PDg3cFBSB7N/RUpa0RRUiv19k4yzQcfsRcVGkAMlNlPgXflTphid1ihRTDDRfcApuvV
+wPcUXW0Uco9J/DE9aAXrICZRvevMOuG+Ht6ngx5MkfTDO3Ta1/ypExwUzAFKSxeZ7zBZWn/ptNv
qBj/R+0+eHJlkEMs1+I/G9Zn6lZkUkhxYQxYc/S3dulgU7BdQHp1uzLRfV1uTw9JtwtDstuU0egn
UEsDBBQAAAAIAAaZfUnlAQUKwAIAAOEFAAAtABwAWGFtbENNZGJGaWxlTWl4dXAvaU9TL0xhdW5j
aFNjcmVlbi5zdG9yeWJvYXJkVVQJAANrGD5Yaxg+WHV4CwABBPUBAAAEAAAAAI1UyXLbMAy95ytU
3uklHneZsZOJHadVa0/a2E2a3igKthlThEpSSZxf66Gf1F8otMSWlclML1qAxwfgAeDf338Gp4+J
Du7BOoVmyLqtDgvASIyVWQ3Z98UFf88C54WJhUYDQ2aQnZ4cDWKUWQLGB36bklVi0hJpqqEVGg92
KSSMMqVjsL3WGCWKBWZy3Zp7tNsIhY1bP8IR28ft5XE9onbXz6YP/d4xhd46D8nO2O2fH3cJKewK
/FVmvEoourqc16KwILWYgvXbMynBuTEab1HnqRtgQebgLPOoxRYzP2S3kzkLtMiMXM+lBTCViWAL
K5Qfo9YgPUV3lUcZ5ZXQ1woeKmoNdsg63c9cpxyvZ+zkKAgGMaRgYtJSgcsNpUnjtpBNkcerpcpP
UvosaFeYVGer0Bz4Xxe3FY72dX+lk8rURCUFOxXxoN1MZ+AkmF1mbzjP6wn2BXFeuQpcUDzD8yGb
fFry8IafHU9YCSAIRnckkXv+J8v9gThUzYE+JdsMkghsznmIZnseYir79DEjQVzd8SLIdA+shtJj
yorQU51wPeWhjHY6/zdJhN5jUvI8Rj0uLvk33DR4Bu3X0iz4gw1syypZICkWtXaGMZE7KTQs8EJp
XUb4CX3+NuLHvscaeVpSuORZWpHQHD+SpPnWbKv3g4r9esjeduh7DWq19tVPs2JB02/BqSda8Zlw
m5K1aa0I5+pJRBqq0S95D21NeokabckZCblZWcxMPM6NRLlWns7RBgudrkXxVeDnKQ01TXrmCrHL
97juEVpFVniIb3KOF/rn4tbmr33Y1pon1cS3xnx7gtp3WNu3cHShrPNX4FKklbFla9TtHf/yi09E
t7gcaFQioEulgAY1bGO2lw2qXd6DdmNtBikqU/VYCnMv3BSlyG+eotn9XtHr3rv+/rJoF8HKBX/e
Z1r16m4+OfoHUEsDBBQAAAAIAAaZfUl9P69NDwEAAOYBAAAdABwAWGFtbENNZGJGaWxlTWl4dXAv
aU9TL01haW4uY3NVVAkAA2sYPlhrGD5YdXgLAAEE9QEAAAQAAAAAXY/BTsMwDIbveQprJyZNnTj3
hECgaSAOZSfEIaRuaylNSpyCKrQn48Aj8Qq4Xdd1s6JI/vP5/52/n9+WyZWQdRyxTtW8S269tWgi
ecfJAzoMZC6IR3IfqRq1e9+6XPf4kdptthTl3ekaudEGhQk1Z5UOmF8n9JypbwVSTftuyYCxmhlu
mkaawWh4PCB9rdfwUhGDnFgh1JocoIuhg8aTi+CLQdcng2Sa5SiCgU9POTzJ4BXHIDu+voEOJS8n
7pQ2JlIBnW/hS0tA9NCyBEBORYFBsufbwh1aLHXE8SNF8DUsBDjqi0vv3thoB9ygoaIDilCJbXLG
7TazjGTYvV95Ba61dnUesEyn0b063Hv1D1BLAwQUAAAACAAGmX1J7fzIvK4AAABNAQAAJQAcAFhh
bWxDTWRiRmlsZU1peHVwL2lPUy9wYWNrYWdlcy5jb25maWdVVAkAA2sYPlhrGD5YdXgLAAEE9QEA
AAQAAAAApdCxDoIwFAXQna9oulsEE2WgEI3B0cHFtaG1aWj7TFsEv83BT/IXxBiVxTiYN93hnZvc
2+Wal73R6CScV2ApTsgUI2Fr4MpKittwmGS4LKL8yOqGSeGLCKFXQIpTvGeGOWXJqlWakzV0VgPj
+ENOSUpSjAJzUoTKMSM6cA3F/fNRgU+GzvgrXIEzfuSlZDZcMs/+MDcAUguitjuytEyfg6rHFQO/
eAzx28/j9zB3UEsDBBQAAAAIABuNfUlfeWD9rQoAAAAYAAAdABwAWGFtbENNZGJGaWxlTWl4dXAv
bWRiZHVtcC5leGVVVAkAA/UDPligID5YdXgLAAEE9QEAAAQAAAAA7VhrbBzVFT4za8++vGvPLFnb
QMhuEsAJZOPgADahJH4lLLXjEDtOQKnM7O7Ynnp3ZjMzm9gxotAXiVq1RKpA5EdbpNKWqlWh9EGp
kKhoq1YqVfnVqpQqUlsJtT/aSvxCKul37sw+/EDwu+Ku9tx7Hvec755775nZnXzwCQoRURu+V68S
vUR+O0Qf3B7FN7nt5ST9MPp69iVp4vXszKLpZqqOveDolUxRtyzbyxSMjFOzMqaVGZuazlTskpFL
JGI7Ax/HxokmpNAav1dIluJShKgLjOLL/rIXJFMHdsgfyz5uomYvQMn+MESHPiecsJ9G3+hEewJ+
Px64vCJvssiHiDo+RC42NOCLtLAR8Pe28DnPWPbQ/63TtxWg1sWH+KGc4zpFCrABo1iottYO4kM5
xyjbxQDrQ4Gv9Aa7kfUwX93r9/eKKe3UdiPRZ2NEku9C+TBLbW03yH05otjuVH+Ixkj4UeUvmd13
q2D6wMUckKoN37Hu3XL6ch/2PhbDwLkd8j4sL9bXDhJXwn1KwChp+GujaR8T++t50A3zvHR8cB+k
inMQk+XwpWuLfch6zI6C3NSQbuucaxGHu0/Fw/Bx8FdXr15V7BjDdRwdpp3kLDCIOMftYMJwdl+H
2D8K8Xkitc1NcFyl206iV+xOps4SL6lLDFfrw5CNJcc60onBKhBGopfjivN40+4ShuFV7GQs1aa1
vZcGNElgsVNC/xTr7WsYxJa6NGyn2b5dbR/SxKqfgZHazilU/Gl2N2i0+1QiGsECHxcL7Bb+Xmzi
6mEn4XQqMvgipzOsRi6nFMV5rQnuDfarrPYGKQicO29xOu1rMQ6U9nVMGqhVxb6efUcV5z91Z2rU
3sqyeDrVMfg2UKtxteNyCt46pUa86zBUY6s3rIuX9cXbeH5CS2xM0i5h8DAuSmy9EvOy6LYcSnDM
2Op2Zg7cJdK2z5+W3WSa4gz7yu2bKu/3Ee1gREktucFAJFvt6D6V6lA71Dj2INGyB8X6ipGoneyi
K51SB1cZYJeqfhn7LJ1hkupckx0+Clrn6o1NGGckIbmJfWiathHnZ3yDm9kgpaXeB6cKnCpaF3Ce
b8H5VAvOPnaxJZ1KD5qMc4uavpy6Zg28Zzkn1zy8a9OEvSCUq7vX7ewrvviWtWIfVRqo0mpa3QJU
X2yi8pURKCNqRA1DOfLftUrFvhX0Ld5wZYgrl2LvgeDPCE7D1/slEVWDvo778i18E0HNGpm+b0QS
Fc+vn2f35/pzA/0D+4ZY0k5l0H9j8o5HiE5j3iAQ75j2HNNacNniK3D6a0zfcWKaTkf9Ur7jyIk8
178y+B7WjZTtQhAPrrqObJEpysy70gDXaY7eE5TtdvIL716/fornM/f+M253m49UoW7aBtpPByhG
U1SgJJ2ni5B8V8j/RG+DxiUeZ6U9kkInxfgToBpdkJ6UNHpe0J+BJukfEs/NyQfg57R8ET4vygXQ
b8rs+RVIkngKMe0LMT0RYvunQ+zzryFJgPORSeLThblEW8X4WIbln+95h/LgTgnuSfpe6BK4bwvu
Ev0g9FWsPpz1uddC38G6dwbcb0PfF6uXxKNPojcERdUArUictbMS5+kxKUo3QabSOFD1UoXitIte
BJ+ll5GvKP0G2n30DnDtondpO8Zt0s00RJq0h4ZpRNoHhJp0Bz0Am4+BPiONkkm/lPKgf0QOs9iw
STpDijwNSYc8i3FW3kMrNCCfxvigrEM+IedhuSjP02PkwbKXzstl7M1l+Qwkr8vn6GmcqIcJ9Ts0
DRoWNC6oJmivoDtAH6MDoU/TczQeugDKcZ+j+4S8FPoCvSAkL5ATYvpIiFFdCOXpp/Qs6BBxxn8u
aI5Wpb/TU/QN6NoeXf/cfjPU8g7FZ03KBmxUnEduCck/wa12CZya9bI2nKcGc/ekXaqVjXtoslQY
q1WqpDu4NaO25dplg6ZXXM+o0ILhzY07ju3QDF6LTjqmZziBLpefIiGYMC2Dhl3XqBTKK2PGvGmZ
nmlbNGlbdm7UKJplOm7opbqFkE+vVAp2+bCJSL6ZXamCcaYN56xZNNycb1APKK40YyvqnnDWMp8h
TtU8Ki4axSW3VgmsR2pmudQEy/ApV/SwEp4wuqg7Lg1Xq4ZVoqnCJ42iRzN2EOesXq4ZNForezXH
yFvzdt3JEZQKvWye18X62E/eOqs7pm55gTXlLW/gNsoftp2K7h1z7LMmg9Dra3ebuO2aVwXsU5Xy
xtRCSC7c+248BtUyhDYwF920pzvemF2sVQzLaxGNlw0hmbZrTtHgmOOW56wI3L7MBdySsezPGfaw
+kKNJ4sssBlPOqpXDDqme4t0xPAaAj+JQcbF/HGrVI84aXiLdqkZzeddZHjJ8PM2qZuWf/7I71rO
zYRtL9Wqvm0eU/WS7umCbeSTj9zRWqVgODN6AT6AbL2oyTdxNGUuTc3PI8N03D6Hc1WuVSzCAphD
FwjENk3YRb08y5tcqCeQo7HUJZEKPECKS34iR/EjSrANw4bEJbEpQVgECUb13DU2MD9mulXbFYvw
h8gR0kX1dDfOKc7ajH0vwvL1bbkRlVKhxBf6eM3yzIrBdwsntmCWTW+lscv1oxYYbbiBVHGLtlM2
C3V3OWPZ4LoxcIJc0mmBDLoLv4QqVMITrkQ1jKrg74bOxQcwIC+j/t6DUpUL7Cjbj8p+Gw3Qfrqd
7qA7aRC1UIemCL1B83jI9tMyqi++nS5msxcbfvBAj8+jhpZhhXG0PqZ2EzMpasFLhXm1SIvoi7QE
O0ZFnSz3ILVhibmJVp7iHvolSCyilAuvC8S+PMx12N9WXssZcGxRBK3C3sTYE5gMMXKAlJHgjSTs
QH8OfVHgpk62KNEcBfIGH+jV+krmRDxkIFGGpggMYtUqa+dERM7QskDJc6tr5jRljKrFOu4Cnw47
/KoN+7G5/fj3Mz0D29XJZyaemDp28s3d/KDQom0ZSUq2k6QlQOVkUozVJIsjIKFIe0bSekOhDCXZ
PqtkYKTtglTSokzVfdBJ7Rnaqg3JCsxlKQlTJpC1C8Uwhto4e8pHeDgppPczVU/ISlKwDyByZGtS
CctaQlPBJDEbTG+EvUWiFJJYoUVvCXdre7QhxItEtrZrw/Af0Sa1++ExEomoJ+ATvfYAXEZu4Hee
GTl90tGrR21rfLloVLnmzCw69jlXivzk/OnZ3v1XLkbCg//8Wir3h9nms/Olvc3x7+r/eWzSXm3Y
zY3azviyIe6uuEyGkSuVy0J39UbKHNrcwaZNEu+uPf6/KGvk/EDv30TOjf87OIUwF1r+v7gg7wed
xW/2OdBxOo5RHm+pR8HnQQ9jzO2Vtn+9V/fT2g4GPb9XrP9bxv9fYVactsPBqc7jxM3jZHLbKWbN
QKtD6kLP98yE1hL6T9HzbW+Ld8dpcaf4FC9s4ukXwqYfnzsh6UctKXAO6HogkmgUNhVRC4I7KrZq
Z4uuKuKvYLVBzQhsbhU29Xhj4i4VBY7qGpwZkfNIi+0svg65LTb9eK9rfuv2eYGJbS1xv5sI1tZR
oj6BZQK6BWE5Km73ikCzgNrlrcHctPOzWxL1l/dhSWSg/hddB2ynAh9mgKG+But9sOREHTEaOTwm
Khlri0CxPod9m9isz05mw6n6qG1oGf8375WDH2T4Uft/bP8DUEsBAh4DCgAAAAAABpl9SQAAAAAA
AAAAAAAAABIAGAAAAAAAAAAQAO1BAAAAAFhhbWxDTWRiRmlsZU1peHVwL1VUBQADaxg+WHV4CwAB
BPUBAAAEAAAAAFBLAQIeAwoAAAAAAAaZfUkAAAAAAAAAAAAAAAAfABgAAAAAAAAAEADtQUwAAABY
YW1sQ01kYkZpbGVNaXh1cC9Gb3Jtc1NoYXJlZDEvVVQFAANrGD5YdXgLAAEE9QEAAAQAAAAAUEsB
Ah4DFAAAAAgABpl9Sb+7oOjAAAAAKQEAACcAGAAAAAAAAQAAAKSBpQAAAFhhbWxDTWRiRmlsZU1p
eHVwL0Zvcm1zU2hhcmVkMS9BcHAueGFtbFVUBQADaxg+WHV4CwABBPUBAAAEAAAAAFBLAQIeAxQA
AAAIAAaZfUn6xv5Z/wAAAIkCAAAqABgAAAAAAAEAAACkgcYBAABYYW1sQ01kYkZpbGVNaXh1cC9G
b3Jtc1NoYXJlZDEvQXBwLnhhbWwuY3NVVAUAA2sYPlh1eAsAAQT1AQAABAAAAABQSwECHgMUAAAA
CAAGmX1JS4e7ZowBAADeAwAANQAYAAAAAAABAAAApIEpAwAAWGFtbENNZGJGaWxlTWl4dXAvRm9y
bXNTaGFyZWQxL0Zvcm1zU2hhcmVkMS5wcm9qaXRlbXNVVAUAA2sYPlh1eAsAAQT1AQAABAAAAABQ
SwECHgMUAAAACAAGmX1JJRXEWl0BAACxAwAAMgAYAAAAAAABAAAApIEkBQAAWGFtbENNZGJGaWxl
TWl4dXAvRm9ybXNTaGFyZWQxL0Zvcm1zU2hhcmVkMS5zaHByb2pVVAUAA2sYPlh1eAsAAQT1AQAA
BAAAAABQSwECHgMUAAAACAAGmX1JtSWsUu0AAABeAQAANAAYAAAAAAABAAAApIHtBgAAWGFtbENN
ZGJGaWxlTWl4dXAvRm9ybXNTaGFyZWQxL0Zvcm1zU2hhcmVkMVBhZ2UueGFtbFVUBQADaxg+WHV4
CwABBPUBAAAEAAAAAFBLAQIeAxQAAAAIAAaZfUn96eEoqQAAAGIBAAA3ABgAAAAAAAEAAACkgUgI
AABYYW1sQ01kYkZpbGVNaXh1cC9Gb3Jtc1NoYXJlZDEvRm9ybXNTaGFyZWQxUGFnZS54YW1sLmNz
VVQFAANrGD5YdXgLAAEE9QEAAAQAAAAAUEsBAh4DFAAAAAgABpl9SV5unh2wAQAAvQUAACIAGAAA
AAAAAQAAAKSBYgkAAFhhbWxDTWRiRmlsZU1peHVwL0Zvcm1zU2hhcmVkMS5zbG5VVAUAA2sYPlh1
eAsAAQT1AQAABAAAAABQSwECHgMKAAAAAAAGmX1JAAAAAAAAAAAAAAAAFgAYAAAAAAAAABAA7UFu
CwAAWGFtbENNZGJGaWxlTWl4dXAvaU9TL1VUBQADaxg+WHV4CwABBPUBAAAEAAAAAFBLAQIeAxQA
AAAIAAaZfUlO4zOgGwEAABICAAAkABgAAAAAAAEAAACkgb4LAABYYW1sQ01kYkZpbGVNaXh1cC9p
T1MvQXBwRGVsZWdhdGUuY3NVVAUAA2sYPlh1eAsAAQT1AQAABAAAAABQSwECHgMKAAAAAAAGmX1J
AAAAAAAAAAAAAAAAJgAYAAAAAAAAABAA7UE3DQAAWGFtbENNZGJGaWxlTWl4dXAvaU9TL0Fzc2V0
cy54Y2Fzc2V0cy9VVAUAA2sYPlh1eAsAAQT1AQAABAAAAABQSwECHgMKAAAAAAAGmX1JAAAAAAAA
AAAAAAAAOQAYAAAAAAAAABAA7UGXDQAAWGFtbENNZGJGaWxlTWl4dXAvaU9TL0Fzc2V0cy54Y2Fz
c2V0cy9BcHBJY29uLmFwcGljb25zZXQvVVQFAANrGD5YdXgLAAEE9QEAAAQAAAAAUEsBAh4DFAAA
AAgABpl9ScfYv8xeAQAAUQoAAEYAGAAAAAAAAQAAAKSBCg4AAFhhbWxDTWRiRmlsZU1peHVwL2lP
Uy9Bc3NldHMueGNhc3NldHMvQXBwSWNvbi5hcHBpY29uc2V0L0NvbnRlbnRzLmpzb25VVAUAA2sY
Plh1eAsAAQT1AQAABAAAAABQSwECHgMUAAAACAAGmX1JTw2fUzYAAABBAAAAMwAYAAAAAAABAAAA
pIHoDwAAWGFtbENNZGJGaWxlTWl4dXAvaU9TL0Fzc2V0cy54Y2Fzc2V0cy9Db250ZW50cy5qc29u
VVQFAANrGD5YdXgLAAEE9QEAAAQAAAAAUEsBAh4DFAAAAAgABpl9Sc8FHnagAAAAwAAAACgAGAAA
AAAAAQAAAKSBixAAAFhhbWxDTWRiRmlsZU1peHVwL2lPUy9FbnRpdGxlbWVudHMucGxpc3RVVAUA
A2sYPlh1eAsAAQT1AQAABAAAAABQSwECHgMUAAAACAAGmX1JTH54eaIFAAB3GwAALQAYAAAAAAAB
AAAApIGNEQAAWGFtbENNZGJGaWxlTWl4dXAvaU9TL0Zvcm1zU2hhcmVkMS5pT1MuY3Nwcm9qVVQF
AANrGD5YdXgLAAEE9QEAAAQAAAAAUEsBAh4DFAAAAAgABpl9Sb/Kdw7kAQAAwwUAACAAGAAAAAAA
AQAAAKSBlhcAAFhhbWxDTWRiRmlsZU1peHVwL2lPUy9JbmZvLnBsaXN0VVQFAANrGD5YdXgLAAEE
9QEAAAQAAAAAUEsBAh4DFAAAAAgABpl9SeUBBQrAAgAA4QUAAC0AGAAAAAAAAQAAAKSB1BkAAFhh
bWxDTWRiRmlsZU1peHVwL2lPUy9MYXVuY2hTY3JlZW4uc3Rvcnlib2FyZFVUBQADaxg+WHV4CwAB
BPUBAAAEAAAAAFBLAQIeAxQAAAAIAAaZfUl9P69NDwEAAOYBAAAdABgAAAAAAAEAAACkgfscAABY
YW1sQ01kYkZpbGVNaXh1cC9pT1MvTWFpbi5jc1VUBQADaxg+WHV4CwABBPUBAAAEAAAAAFBLAQIe
AxQAAAAIAAaZfUnt/Mi8rgAAAE0BAAAlABgAAAAAAAEAAACkgWEeAABYYW1sQ01kYkZpbGVNaXh1
cC9pT1MvcGFja2FnZXMuY29uZmlnVVQFAANrGD5YdXgLAAEE9QEAAAQAAAAAUEsBAh4DFAAAAAgA
G419SV95YP2tCgAAABgAAB0AGAAAAAAAAAAAAO2Bbh8AAFhhbWxDTWRiRmlsZU1peHVwL21kYmR1
bXAuZXhlVVQFAAP1Az5YdXgLAAEE9QEAAAQAAAAAUEsFBgAAAAAWABYAjQkAAHIqAAAAAA==