From 7936b04683123120174082df96ed37e97e055042 Mon Sep 17 00:00:00 2001 From: Sam Shaner Date: Tue, 6 Sep 2016 08:45:39 -0400 Subject: [PATCH 01/13] implemented decay rate tally --- docs/source/io_formats/nuclear_data.rst | 2 +- .../pythonapi/examples/mdgxs-part-i.ipynb | 552 ++++++++++++------ docs/source/usersguide/input.rst | 5 + openmc/mgxs/mdgxs.py | 159 ++++- src/constants.F90 | 5 +- src/endf.F90 | 2 + src/input_xml.F90 | 38 +- src/output.F90 | 1 + src/tally.F90 | 139 +++++ .../inputs_true.dat | 2 +- .../results_true.dat | 21 + .../inputs_true.dat | 2 +- .../results_true.dat | 7 + tests/test_mgxs_library_hdf5/inputs_true.dat | 2 +- tests/test_mgxs_library_hdf5/results_true.dat | 39 ++ tests/test_mgxs_library_mesh/inputs_true.dat | 2 +- tests/test_mgxs_library_mesh/results_true.dat | 26 + .../inputs_true.dat | 2 +- .../results_true.dat | 39 ++ 19 files changed, 817 insertions(+), 228 deletions(-) diff --git a/docs/source/io_formats/nuclear_data.rst b/docs/source/io_formats/nuclear_data.rst index 7ad80b2fc..fefdf696d 100644 --- a/docs/source/io_formats/nuclear_data.rst +++ b/docs/source/io_formats/nuclear_data.rst @@ -133,7 +133,7 @@ Reaction Products :Attributes: - **particle** (*char[]*) -- Type of particle - **emission_mode** (*char[]*) -- Emission mode (prompt, delayed, total) - - **decay_rate** (*double*) -- Rate of decay in inverse seconds + - **decay_rate** (*double*) -- Rate of decay in inverse shakes - **n_distribution** (*int*) -- Number of angle/energy distributions :Datasets: diff --git a/docs/source/pythonapi/examples/mdgxs-part-i.ipynb b/docs/source/pythonapi/examples/mdgxs-part-i.ipynb index 5d65a0a20..f2d81b10a 100644 --- a/docs/source/pythonapi/examples/mdgxs-part-i.ipynb +++ b/docs/source/pythonapi/examples/mdgxs-part-i.ipynb @@ -387,6 +387,7 @@ "* `DelayedNuFissionXS`\n", "* `ChiDelayed`\n", "* `Beta`\n", + "* `DecayRate`\n", "\n", "These classes provide us with an interface to generate the tally inputs as well as perform post-processing of OpenMC's tally data to compute the respective multi-group cross sections. In this case, let's create the multi-group chi-prompt, chi-delayed, and prompt-nu-fission cross sections with our 100-energy-group structure and multi-group delayed-nu-fission and beta cross sections with our 100-energy-group and 6-delayed-group structures. " ] @@ -405,19 +406,21 @@ "chi_delayed = mgxs.ChiDelayed(domain=cell, energy_groups=energy_groups, by_nuclide=True)\n", "delayed_nu_fission = mgxs.DelayedNuFissionXS(domain=cell, energy_groups=energy_groups, delayed_groups=delayed_groups, by_nuclide=True)\n", "beta = mgxs.Beta(domain=cell, energy_groups=energy_groups, delayed_groups=delayed_groups, by_nuclide=True)\n", + "decay_rate = mgxs.DecayRate(domain=cell, energy_groups=one_group, delayed_groups=delayed_groups, by_nuclide=True)\n", "\n", "chi_prompt.nuclides = ['U235', 'Pu239']\n", "prompt_nu_fission.nuclides = ['U235', 'Pu239']\n", "chi_delayed.nuclides = ['U235', 'Pu239']\n", "delayed_nu_fission.nuclides = ['U235', 'Pu239']\n", - "beta.nuclides = ['U235', 'Pu239']" + "beta.nuclides = ['U235', 'Pu239']\n", + "decay_rate.nuclides = ['U235', 'Pu239']" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Each multi-group cross section object stores its tallies in a Python dictionary called `tallies`. We can inspect the tallies in the dictionary for our `Beta` object as follows. " + "Each multi-group cross section object stores its tallies in a Python dictionary called `tallies`. We can inspect the tallies in the dictionary for our `Decay Rate` object as follows. " ] }, { @@ -430,74 +433,25 @@ { "data": { "text/plain": [ - "OrderedDict([('nu-fission', Tally\n", + "OrderedDict([('delayed-nu-fission', Tally\n", " \tID =\t10000\n", " \tName =\t\n", " \tFilters =\t\n", " \t\tcell\t[1]\n", - " \t\tenergy\t[ 1.00000000e-09 1.26765187e-09 1.60694125e-09 2.03704208e-09\n", - " 2.58226019e-09 3.27340695e-09 4.14954043e-09 5.26017266e-09\n", - " 6.66806769e-09 8.45278845e-09 1.07151931e-08 1.35831345e-08\n", - " 1.72186857e-08 2.18272991e-08 2.76694165e-08 3.50751874e-08\n", - " 4.44631267e-08 5.63637656e-08 7.14496326e-08 9.05732601e-08\n", - " 1.14815362e-07 1.45545908e-07 1.84501542e-07 2.33883724e-07\n", - " 2.96483139e-07 3.75837404e-07 4.76430987e-07 6.03948629e-07\n", - " 7.65596607e-07 9.70509967e-07 1.23026877e-06 1.55955250e-06\n", - " 1.97696964e-06 2.50610925e-06 3.17687407e-06 4.02717034e-06\n", - " 5.10505000e-06 6.47142616e-06 8.20351544e-06 1.03992017e-05\n", - " 1.31825674e-05 1.67109061e-05 2.11836114e-05 2.68534445e-05\n", - " 3.40408190e-05 4.31519077e-05 5.47015963e-05 6.93425806e-05\n", - " 8.79022517e-05 1.11429453e-04 1.41253754e-04 1.79060585e-04\n", - " 2.26986485e-04 2.87739841e-04 3.64753947e-04 4.62381021e-04\n", - " 5.86138165e-04 7.43019138e-04 9.41889597e-04 1.19398810e-03\n", - " 1.51356125e-03 1.91866874e-03 2.43220401e-03 3.08318795e-03\n", - " 3.90840896e-03 4.95450191e-03 6.28058359e-03 7.96159350e-03\n", - " 1.00925289e-02 1.27938130e-02 1.62181010e-02 2.05589060e-02\n", - " 2.60615355e-02 3.30369541e-02 4.18793565e-02 5.30884444e-02\n", - " 6.72976656e-02 8.53100114e-02 1.08143395e-01 1.37088177e-01\n", - " 1.73780083e-01 2.20292646e-01 2.79254384e-01 3.53997341e-01\n", - " 4.48745390e-01 5.68852931e-01 7.21107479e-01 9.14113241e-01\n", - " 1.15877736e+00 1.46892628e+00 1.86208714e+00 2.36047823e+00\n", - " 2.99226464e+00 3.79314985e+00 4.80839348e+00 6.09536897e+00\n", - " 7.72680585e+00 9.79489985e+00 1.24165231e+01 1.57398286e+01\n", - " 1.99526231e+01]\n", + " \t\tdelayedgroup\t[1 2 3 4 5 6]\n", + " \t\tenergy\t[ 1.00000000e-09 1.99526231e+01]\n", " \tNuclides =\tU235 Pu239 \n", - " \tScores =\t['nu-fission']\n", - " \tEstimator =\ttracklength), ('delayed-nu-fission', Tally\n", + " \tScores =\t['delayed-nu-fission']\n", + " \tEstimator =\tanalog), ('decay-rate', Tally\n", " \tID =\t10001\n", " \tName =\t\n", " \tFilters =\t\n", " \t\tcell\t[1]\n", " \t\tdelayedgroup\t[1 2 3 4 5 6]\n", - " \t\tenergy\t[ 1.00000000e-09 1.26765187e-09 1.60694125e-09 2.03704208e-09\n", - " 2.58226019e-09 3.27340695e-09 4.14954043e-09 5.26017266e-09\n", - " 6.66806769e-09 8.45278845e-09 1.07151931e-08 1.35831345e-08\n", - " 1.72186857e-08 2.18272991e-08 2.76694165e-08 3.50751874e-08\n", - " 4.44631267e-08 5.63637656e-08 7.14496326e-08 9.05732601e-08\n", - " 1.14815362e-07 1.45545908e-07 1.84501542e-07 2.33883724e-07\n", - " 2.96483139e-07 3.75837404e-07 4.76430987e-07 6.03948629e-07\n", - " 7.65596607e-07 9.70509967e-07 1.23026877e-06 1.55955250e-06\n", - " 1.97696964e-06 2.50610925e-06 3.17687407e-06 4.02717034e-06\n", - " 5.10505000e-06 6.47142616e-06 8.20351544e-06 1.03992017e-05\n", - " 1.31825674e-05 1.67109061e-05 2.11836114e-05 2.68534445e-05\n", - " 3.40408190e-05 4.31519077e-05 5.47015963e-05 6.93425806e-05\n", - " 8.79022517e-05 1.11429453e-04 1.41253754e-04 1.79060585e-04\n", - " 2.26986485e-04 2.87739841e-04 3.64753947e-04 4.62381021e-04\n", - " 5.86138165e-04 7.43019138e-04 9.41889597e-04 1.19398810e-03\n", - " 1.51356125e-03 1.91866874e-03 2.43220401e-03 3.08318795e-03\n", - " 3.90840896e-03 4.95450191e-03 6.28058359e-03 7.96159350e-03\n", - " 1.00925289e-02 1.27938130e-02 1.62181010e-02 2.05589060e-02\n", - " 2.60615355e-02 3.30369541e-02 4.18793565e-02 5.30884444e-02\n", - " 6.72976656e-02 8.53100114e-02 1.08143395e-01 1.37088177e-01\n", - " 1.73780083e-01 2.20292646e-01 2.79254384e-01 3.53997341e-01\n", - " 4.48745390e-01 5.68852931e-01 7.21107479e-01 9.14113241e-01\n", - " 1.15877736e+00 1.46892628e+00 1.86208714e+00 2.36047823e+00\n", - " 2.99226464e+00 3.79314985e+00 4.80839348e+00 6.09536897e+00\n", - " 7.72680585e+00 9.79489985e+00 1.24165231e+01 1.57398286e+01\n", - " 1.99526231e+01]\n", + " \t\tenergy\t[ 1.00000000e-09 1.99526231e+01]\n", " \tNuclides =\tU235 Pu239 \n", - " \tScores =\t['delayed-nu-fission']\n", - " \tEstimator =\ttracklength)])" + " \tScores =\t['decay-rate']\n", + " \tEstimator =\tanalog)])" ] }, "execution_count": 13, @@ -506,7 +460,7 @@ } ], "source": [ - "beta.tallies" + "decay_rate.tallies" ] }, { @@ -542,6 +496,9 @@ "# Add beta tallies to the tallies file\n", "tallies_file += beta.tallies.values()\n", "\n", + "# Add decay rate tallies to the tallies file\n", + "tallies_file += decay_rate.tallies.values()\n", + "\n", "# Export to \"tallies.xml\"\n", "tallies_file.export_to_xml()" ] @@ -565,24 +522,37 @@ "output_type": "stream", "text": [ "\n", - " .d88888b. 888b d888 .d8888b.\n", - " d88P\" \"Y88b 8888b d8888 d88P Y88b\n", - " 888 888 88888b.d88888 888 888\n", - " 888 888 88888b. .d88b. 88888b. 888Y88888P888 888 \n", - " 888 888 888 \"88b d8P Y8b 888 \"88b 888 Y888P 888 888 \n", - " 888 888 888 888 88888888 888 888 888 Y8P 888 888 888\n", - " Y88b. .d88P 888 d88P Y8b. 888 888 888 \" 888 Y88b d88P\n", - " \"Y88888P\" 88888P\" \"Y8888 888 888 888 888 \"Y8888P\"\n", - "__________________888______________________________________________________\n", - " 888\n", - " 888\n", + " %%%%%%%%%%%%%%%\n", + " %%%%%%%%%%%%%%%%%%%%%%%%\n", + " %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n", + " %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n", + " %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n", + " %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n", + " %%%%%%%%%%%%%%%%%%%%%%%%\n", + " %%%%%%%%%%%%%%%%%%%%%%%%\n", + " ############### %%%%%%%%%%%%%%%%%%%%%%%%\n", + " ################## %%%%%%%%%%%%%%%%%%%%%%%\n", + " ################### %%%%%%%%%%%%%%%%%%%%%%%\n", + " #################### %%%%%%%%%%%%%%%%%%%%%%\n", + " ##################### %%%%%%%%%%%%%%%%%%%%%\n", + " ###################### %%%%%%%%%%%%%%%%%%%%\n", + " ####################### %%%%%%%%%%%%%%%%%%\n", + " ####################### %%%%%%%%%%%%%%%%%\n", + " ###################### %%%%%%%%%%%%%%%%%\n", + " #################### %%%%%%%%%%%%%%%%%\n", + " ################# %%%%%%%%%%%%%%%%%\n", + " ############### %%%%%%%%%%%%%%%%\n", + " ############ %%%%%%%%%%%%%%%\n", + " ######## %%%%%%%%%%%%%%\n", + " %%%%%%%%%%%\n", "\n", - " Copyright: 2011-2016 Massachusetts Institute of Technology\n", - " License: http://openmc.readthedocs.io/en/latest/license.html\n", - " Version: 0.8.0\n", - " Git SHA1: c21ceb0aea4abc243b84106576c4f9010f608d0b\n", - " Date/Time: 2016-08-11 08:23:44\n", - " MPI Processes: 1\n", + " | The OpenMC Monte Carlo Code\n", + " Copyright | 2011-2016 Massachusetts Institute of Technology\n", + " License | http://openmc.readthedocs.io/en/latest/license.html\n", + " Version | 0.8.0\n", + " Git SHA1 | ce7cb67937f2ab26df3d995bdd30e99dbfadda7a\n", + " Date/Time | 2016-08-29 14:29:38\n", + " MPI Processes | 1\n", "\n", " ===========================================================================\n", " ========================> INITIALIZATION <=========================\n", @@ -668,20 +638,20 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 6.1600E-01 seconds\n", - " Reading cross sections = 3.6500E-01 seconds\n", - " Total time in simulation = 8.3297E+01 seconds\n", - " Time in transport only = 8.3256E+01 seconds\n", - " Time in inactive batches = 4.4890E+00 seconds\n", - " Time in active batches = 7.8808E+01 seconds\n", - " Time synchronizing fission bank = 1.6000E-02 seconds\n", - " Sampling source sites = 1.1000E-02 seconds\n", - " SEND/RECV source sites = 3.0000E-03 seconds\n", - " Time accumulating tallies = 5.0000E-03 seconds\n", - " Total time for finalization = 8.0000E-02 seconds\n", - " Total time elapsed = 8.4019E+01 seconds\n", - " Calculation Rate (inactive) = 11138.3 neutrons/second\n", - " Calculation Rate (active) = 2537.81 neutrons/second\n", + " Total time for initialization = 5.7300E-01 seconds\n", + " Reading cross sections = 3.3600E-01 seconds\n", + " Total time in simulation = 9.3557E+01 seconds\n", + " Time in transport only = 9.3520E+01 seconds\n", + " Time in inactive batches = 4.6600E+00 seconds\n", + " Time in active batches = 8.8897E+01 seconds\n", + " Time synchronizing fission bank = 1.2000E-02 seconds\n", + " Sampling source sites = 6.0000E-03 seconds\n", + " SEND/RECV source sites = 4.0000E-03 seconds\n", + " Time accumulating tallies = 4.0000E-03 seconds\n", + " Total time for finalization = 7.3000E-02 seconds\n", + " Total time elapsed = 9.4232E+01 seconds\n", + " Calculation Rate (inactive) = 10729.6 neutrons/second\n", + " Calculation Rate (active) = 2249.79 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", @@ -762,7 +732,8 @@ "prompt_nu_fission.load_from_statepoint(sp)\n", "chi_delayed.load_from_statepoint(sp)\n", "delayed_nu_fission.load_from_statepoint(sp)\n", - "beta.load_from_statepoint(sp)" + "beta.load_from_statepoint(sp)\n", + "decay_rate.load_from_statepoint(sp)" ] }, { @@ -962,6 +933,168 @@ "df.head(10)" ] }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
celldelayedgroupgroup innuclidemeanstd. dev.
0111U2350.0133360.003509
1111Pu2390.0132710.007154
2121U2350.0327390.003864
3121Pu2390.0308810.008109
4131U2350.1207800.017277
5131Pu2390.1133700.031354
6141U2350.3027800.027190
7141Pu2390.2925000.057372
8151U2350.8494900.120338
9151Pu2390.8574900.231893
10161U2352.8530000.659168
11161Pu2392.7297001.342167
\n", + "
" + ], + "text/plain": [ + " cell delayedgroup group in nuclide mean std. dev.\n", + "0 1 1 1 U235 0.013336 0.003509\n", + "1 1 1 1 Pu239 0.013271 0.007154\n", + "2 1 2 1 U235 0.032739 0.003864\n", + "3 1 2 1 Pu239 0.030881 0.008109\n", + "4 1 3 1 U235 0.120780 0.017277\n", + "5 1 3 1 Pu239 0.113370 0.031354\n", + "6 1 4 1 U235 0.302780 0.027190\n", + "7 1 4 1 Pu239 0.292500 0.057372\n", + "8 1 5 1 U235 0.849490 0.120338\n", + "9 1 5 1 Pu239 0.857490 0.231893\n", + "10 1 6 1 U235 2.853000 0.659168\n", + "11 1 6 1 Pu239 2.729700 1.342167" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df = decay_rate.get_pandas_dataframe()\n", + "df.head(12)" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -971,7 +1104,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 21, "metadata": { "collapsed": false }, @@ -989,7 +1122,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 22, "metadata": { "collapsed": false }, @@ -1010,16 +1143,80 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Finally, we illustrate how one can leverage OpenMC's [tally arithmetic](https://mit-crpg.github.io/openmc/pythonapi/examples/tally-arithmetic.html) data processing feature with `MGXS` objects. The `openmc.mgxs` module uses tally arithmetic to compute multi-group cross sections with automated uncertainty propagation. Each `MGXS` object includes an `xs_tally` attribute which is a \"derived\" `Tally` based on the tallies needed to compute the cross section type of interest. These derived tallies can be used in subsequent tally arithmetic operations. For example, we can use tally artithmetic to compute the delayed neutron precursor concentrations using the `Beta` and `DelayedNuFissionXS` objects. The delayed neutron precursor concentrations are modeled using the following equations:\n", + "Finally, we illustrate how one can leverage OpenMC's [tally arithmetic](https://mit-crpg.github.io/openmc/pythonapi/examples/tally-arithmetic.html) data processing feature with `MGXS` objects. The `openmc.mgxs` module uses tally arithmetic to compute multi-group cross sections with automated uncertainty propagation. Each `MGXS` object includes an `xs_tally` attribute which is a \"derived\" `Tally` based on the tallies needed to compute the cross section type of interest. These derived tallies can be used in subsequent tally arithmetic operations. For example, we can use tally artithmetic to compute the delayed neutron precursor concentrations using the `Beta`, `DelayedNuFissionXS`, and `DecayRate` objects. The delayed neutron precursor concentrations are modeled using the following equations:\n", "\n", "$$\\frac{\\partial}{\\partial t} C_{k,d} (t) = \\int_{0}^{\\infty}\\mathrm{d}E'\\int_{\\mathbf{r} \\in V_{k}}\\mathrm{d}\\mathbf{r} \\beta_{k,d} (t) \\nu_d \\sigma_{f,x}(\\mathbf{r},E',t)\\Phi(\\mathbf{r},E',t) - \\lambda_{d} C_{k,d} (t) $$\n", "\n", - "$$C_{k,d} (t=0) = \\frac{1}{\\lambda_{d}} \\int_{0}^{\\infty}\\mathrm{d}E'\\int_{\\mathbf{r} \\in V_{k}}\\mathrm{d}\\mathbf{r} \\beta_{k,d} (t=0) \\nu_d \\sigma_{f,x}(\\mathbf{r},E',t=0)\\Phi(\\mathbf{r},E',t=0) $$" + "$$C_{k,d} (t=0) = \\frac{1}{\\lambda_{d}} \\int_{0}^{\\infty}\\mathrm{d}E'\\int_{\\mathbf{r} \\in V_{k}}\\mathrm{d}\\mathbf{r} \\beta_{k,d} (t=0) \\nu_d \\sigma_{f,x}(\\mathbf{r},E',t=0)\\Phi(\\mathbf{r},E',t=0) $$\n", + "\n", + "First, let's investigate the decay rates for U235 and Pu235. The fraction of the delayed neutron precursors remaining as a function of time after fission for each delayed group and fissioning isotope have been plotted below." ] }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 23, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n5WQcPnyYqKgohBAsX7680msoKCjA2dmZ559/no4dOxIfH09ERMQl269atco2qSj7KTvJKOJyupvN\nZvLz8zGbzZhMJlu7S3HgwAEKCgrIzc3lnXfe4fz584wcOZK6devSqFEjPvroI8xmM+np6cyfP5+b\nb765wn6OHz/Ohg0bKCwsxNnZGTc3NxwdHenYsSNeXl689dZbNr0OHTrEn9ZXih07diQoKIiXX36Z\n3NxcCgoK2Lp1K7feeiseHh689dZbmEwmNm7cyMqVKxk+fHil9wCgU6dOODo68v7772M2m/n+++/Z\nsWNHpbpWNnG7Ji4Vj1LbPuiY7xuavLw82bNnT4nKsicXL14spZTl4rxqgjOvn5Eb2GD7HHrgUPXE\nX5fAYrHINjt2SDZskGzYIDvt2iXzTCaZWyJG0S7MmiXlihVSWixS3neflP37S5mba1+Z14DZYpa3\nfX6bZCqSqciBCwfKjPwM+cmfn9jtXn36qZQGg5QPPyxlQYEqqyXLFjQ3CNSimO+aJi8vT06YMEGG\nh4dLHx8f2b59e7ly5cpLto+NjZVCCOnm5ibr1Kkj69SpIz09PeWCBQtkcnKy7N69u/T19ZXe3t6y\ndevWcu7cubZzk5OTZYcOHaSXl5f09fWVnTp1kuvWratQTmJiohw1apRcuHChTElJsZWfOXPGFn8s\npZTp6enyl19+KXXuzJkzZU5OzrUOSYVcTvepU6dKIYQ0GAy2T0k9+/XrJ9944w3b8fjx46Wvr6/0\n9PSUd911V6m4+3379sno6Gjp6+sr/f395ZAhQ2RycnKFeu3fv1927NhRenl5ybp168q7775bJiYm\nSinVGA4fPlzWr19f+vn5ldP57Nmz8t5775V169aV/v7+8tlnn5VSSnn48GHZvXt36e3tLVu0aCF/\n/PFH2zkRERHlrrvk+oBdu3bJtm3bSi8vLzls2DA5bNgwW8x3ZbpeDZX9/Qppbw9aFSGEkNeLrpqr\np7CwkL59+9rS+Tg7O/PII4/g4uLCnDlzalQ3KSWHhx0m+X/JAASODKT53OYIh4rzy9qLny5eZOCB\nAxS9fGvq5kYnLy++rK7NH379Fbp1UztkggpHqeLV/X+Fr/Z9xchlI23HgR6B3N30bj4e8DEOhir2\nWljZvRvatlWv1P/v/yAtDT7+2C6iNH9DrOEC1fI/Gv0bW7XExsby5ZdfMmXKFAB++OEHBgwYYEtv\n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\n1EUn3yotWgQJbgVFU7NU1CwkMgmSJnIyyHDOWb8/TnIyDzTnnGB9nmc/Z6+911rvu1dyzn732u96\n30NcuHCB9PR0HnnkEVOrA0CTAU3wetdLX457Jw51lml+gJcmJXH5zh1SCwv54dYtwwt0dISFC3Uh\nPs6dg59/hq5d4Y8/DC/7LtEKLR8d/IirGVf56fxPHLh2wKDyGjXSuZuYmUHjxhASIo1vyf1BaKhu\nq6/yXyEpKYldu3bRrVu3v9zXzZs3iY2NpWPH0mzFr732GnZ2dvj6+tKiRQsCAwOBqg1XIYT+IaAi\nJXkpLOo5xmhwcDDOzs64uLhU+hw0aFCNbd99911cXV15+umnOVjNyu+qxqQm7mYMK3L58mVWrFhB\ndHQ0KpWK3bt34+3tjRCC4OBgunbtSmpqKvv27WPZsmXs2bMHAK1WS1BQED4+PiQmJpKSkkJISAhq\ntZpBgwbRv39/0tLS+PzzzxkzZgyxsbHl5G7atInIyEji4+M5ffo0a9asoaioiCFDhjBhwgQyMjIY\nMWIEW7ZsqVXXe0Ea35L7msLCQhYuXEhWVhYqlYr58+ejVqsbxAx4qzdbYdlc9/SvzlQT/6FpUs+7\nWZUuAJ137RoXcnO5ZegU8JMn6wxwBwdITtbF/P7nPw0r8x4wU8w4l3YOjdBZwFPCp7Du9DrGbR1n\nsPTz/frp3OHj43VDotXC7dsGESWRPFAMHjwYFxcXnnnmGfr06cO77777l/pTq9WMHTuWiRMn0q5d\nO/3xFStWkJOTw2+//cbQoUNp1KgRAB06dMDV1ZXFixejVquJjIzk4MGDVfqe7927l1mzZtG8eXO+\n//77WnUpa+TVRkREBJmZmWRkZFT6DA8Pr7bdokWLiIuLIyUlhalTpxIcHEx8fPn7UnVjUh13O4YV\nMTc3p7CwkLNnz6JWq/H09MTHx4cTJ06Qnp7O+++/j7m5Od7e3kyZMoWNxavWjx07RmpqKosWLcLa\n2horKyv8/f05evQoubm5vPPOO1hYWNCnTx+CgoLYsGFDObkzZ87Ezc2Nxo0bExwcTExMDEePHkWt\nVjNjxgzMzc0ZNmwYPXr0qFXXe0Ea35L7GisrK5YuXaovr1y5El9fX8LCwkyolQ5zW3Psu+hSrVs/\nYo1LfxeT6PHPVq3oXpzyvUAIukdHszktzTjCra1h1Soo+wNlaMP/LlkRuAKnRk4AxN2O4609bzGx\ny0QUxXBBJvr31z2XfPcdtG8P69cbTJRE8sCwfft2MjIyiI+PZ/ny5dUadCWsX78eBwcHHB0dGThw\nYLlzQgjGjh1Lo0aNKrkzgC5Shb+/P0lJSaxatQrQzWBv27aNHTt24O7uzmeffcaLL75Iy5YtK7Xv\n168f5ubmzJo1i7FjxwKQlZVFWFgYCxcuLFdXpVJhb2/PlStX2Lp1Kx9//DG///77XY1NXejRowd2\ndnZYWloyfvx4evfuza5du/TnaxuTitzLGFakTZs2LF26lNDQUFxdXRk9ejSpqakkJCSQkpKCi4uL\nfmZ/4cKF3Cp+e5ucnIyXl1elRHvXr1/Xu8OU4OXlpX8LUYKbm5t+39bWlpycHK5fv46Hh0eltlXp\n6ubmptf1XpDGt+S+JygoiN69ewOg0Who2bIlI0eONLFWOh7732P4fu+L3zk/mgQ2MYkOFmZmLG7T\nRl/O12oJMFYElLKkpcHUqTpfiwaEu4M7S/62RF9Oz0vHx/neZjPuhkOH4OuvYcMGePVVg4uTSP4S\nDcHtpLq3Uba2tuVmn2/cuAHA6NGjyc7ORqVSsXPnznJtXnrpJdLT0wkLC8Pc3LxamWq1upy/cqdO\nnThw4ABpaWn873//4+rVq/j5+VXZNiYmppxrTElkkIpvZn/55Rf69OlDREQEHh4evP766yxevLha\nnQIDA/UPFRW3ig8ZNVEcCk9fruuY3G39imNYkZCQEKKiokhMTARg9uzZtGrVitatW5ORkaGf2c/K\nytL7b7dq1YrExES0Wm25vlq0aEFSUlK5Y4mJiZWM6qpwd3cnOTm5UtuqdE1ISNDrei8Y3PhWFKW/\noigXFUW5rCjKO1Wcb6Uoyi+KovyuKEqMoigDDK2T5MFCURQ+/fRTffngwYOV/LtMhaIouI1xw8zK\njKxDWZwJPoM6x/i+3wHOzjzv7AxAYwsLYu/cMa4CeXk6v28h4P/+z7iy68DkrpN52vNpACzNLTme\ncpwiTRHn084bTOYzz0BUFPj7G0yERPJQ0LVrV9avX49Wq+Xnn3+u1pe5hGnTpnHx4kXCw8OxKuOW\nl5aWxo8//khubi5arZbdu3ezceNG+vbtq69z5swZCgoKyMvLY/Hixdy4cYOJEydWknH+/Hl8fX1R\nFKVGVxCAgoICrKyseOONN/Dz8yM5OblGd4Zdu3bpHyoqbhUfMkrIysoiMjKSgoICNBoNP/zwA1FR\nUfTv37/GMamOvzKGZbl8+TL79++nsLAQKysrbGxssLCwwM/PD0dHRxYtWkR+fj4ajYZz585x8uRJ\nAPz8/HB3d2f27Nnk5eVRUFDA4cOH6dmzJ3Z2dixatAi1Ws2BAwfYsWMHIXWY9OnVqxeWlpYsX74c\njUZDWFgYx48fr1HXujykVEl1YVDqY0Nn3F8BvABLIAboUKHOl8Dfi/d9gfhq+rqnUC+Sh4fg4GDR\npUsX8b///U8UFRWJb775RsTFxZlaLSGEEJdnXBaHWx4WqetShVZjmrCD0SqVeO/qVZFZWChy1Grx\nUXy8iPzzT+MI371biA4dhPD1FaKoyDgy75KohCjxyo5XRNLtJPHT2Z/EI58/IsZvHW8U2bm5Qowe\nLcT27UYRJ7lPQIYa1OPj4yP27dtX5bmTJ0+Kjh07CkdHRzF+/HgxevToasPDJSQkCEVRhI2NjbC3\ntxf29vbCwcFBrF+/XqSlpYlnn31WODs7CycnJ/HYY4+J1atXl2v/1ltvCWdnZ+Hg4CACAwPF1atX\nq5STmpoqJk2aJDZs2CDS09P1x69duybmzZunL9++fVtERkaWa7tgwQKRW88hWtPS0kSPHj2Eo6Oj\ncHZ2Fr169dKPZ01jUsKAAQPEwoULa61flzEsyx9//CH8/PyEo6OjaNKkiQgODhapqalCCN0Yjho1\nSjRv3ly4uLiU01kIIZKSksTgwYNFkyZNRLNmzcTMmTOFELpQh88++6xwcnISHTt2FNsr/LBW/F8K\nDQ0V48aNE0Lo/pe6du0qHB0dRUhIiAgJCdH/L9Wka1XU9P01aIZLRVGeBOYKIQYUl2cXK/NpmTqr\ngDghxL8VRekF/FsI8VQVfQlD6iq5/8nMzMTJyYljx47x8ssv4+LiwpdffkmHDh1MrRrZMdnYtrXF\n3O4en5Lrkajbt3nx/HmebdyYBT4++NjYGFZgZiZ4euoyXYLOB/zZZ+HIEd3CzAZGXlEeIzaN4I0n\n36Bf634Gl7dyJbz+ui704PDhsGmTwUVK7hNkhssHj4SEBNasWcPcuXMB2Lp1K0FBQfrQfBEREQQE\nBHDjxg3alsQlldyXmDLDpQdQ1vkmufhYWeYB4xRFSQJ2AP8wsE6SBxRnZ2fMzMywtLRk/vz5HDhw\noEEY3gAOjzvoDe+i7CIuvnzRZKEH29naEt6pExsefdTwhjeAszO8915pedYsePppMLbrSx2xtbRl\n5+idRjG8QRdysMQFNCwMzhvO00UikZiQnJwcNm/eTHR0NOfO6bLp5ufn6w3vksWWw4YN46effjKl\nqhIDY+iZ7+HA34QQLxeXxwI9hBAzy9R5A0AI8VnxTPlqIUSl4JLyqVxyr9y5cwdra2uDRq+oK4mL\nE4l/Px5RKPCY6UHbpaaf2UgrLMTe3Bybe/Vdqwt37kCHDlCyeGX6dKjDanpTU6QpYvWp1aTnpfPB\nMx8YTE7//rB7t24/MBC2b4d6Dg0suQ+RM98PNpmZmURHR9Ovn3Ee9CXGxZQz38mAZ5lyS+B6hTov\nAT8BCCGOAtaKojStqrPQ0FD9duDAAQOoK3mQ0Gq1fPfdd7Rv355jx46ZWh0AMvdkIgp1N7jrK6+T\nd6VyfFhjkafR8Mm1a7Q/fpxDWVmGFWZjo4v7XcJXX5Ua4g0gJntV3Mi5QadVnfjx3I8MeMSw68D/\n9a/S/V274IsvDCpO0kA5cOBAufuc5MHm0KFDBAQEmFoNiQkw9My3OXAJ6AukAseBUUKIC2Xq7AR+\nEkJ8pyiKL7BHCFEpaKZ8KpfcLfPmzePrr79m8uTJfPTRR6ZWB9AtcD7V+xSqIyoAmg5uSqetnUyi\nxxtXrvDdzZs0NjcntmdPLMwM/Cyu1UKvXnD9us4Q79IFFi2CGzegOGtZQ+Jo0lGm/286jo0c+WXC\nLwaX1707lIT2HTcO1q41uEhJA0fOfEsk9y81fX8NanwXC+8PLEM3y75aCPEvRVHmASeEEDuKDe6v\nAXtAC7wlhNhXRT/yh0FSZ44dO8aAAQPIzMzEw8OD2NhYbIzh31wHVCdU/O5XmkCh8/8606S/cWOA\nZ6nVeB4+jKo4RurX7doxpUULwwu+dg1cXUGthscf18X9fvVVcHIyvOy7IDU7Fc+lnqi1Or/8feP3\n0dOjJ5n5mbR0rJxQoz64ehWeew7efx8mTJBuJxJpfEsk9zMmNb7rC/nDILkbcnNzadOmDTdv3gRg\n/vz52NraMmnSJBqbIsFMBY62Pkp+fD4AzSc1p8P/GX9h6IKEBN4vTi3c3NKSEa6uzGrZEm9jPaRo\nNGBIP/O/yJTwKaw+tRqA1o1bk6/JZ4bfDN55qlK6gnqjZEiysuA//4EZM6CJaXIzSRoA0viWSO5f\nTOnzLZGYBDs7O+bMmaMvf/jhh+zbt69cFjRT0n51e5wHONNlXxfar25vEh1mtmyJW/Eq+xtFRURn\nZ2NnTGO4rKzz5+HCherrmoA5z87BylyXPCLudhxv+b9lUMMbdEOyfj20awcJCboXBBKJRCJ5sJDG\nt+SBZerUqbQpTqsuhKBTp060MIZrRR1w7uNMl11dcP5/uqyTBdcLjK6Dnbk5H3p768sX8/KwMrTf\nd0UuX4YhQ6BPHygOvdVQ8HTy5OVuL+vLa0+vRSu0NbSoH7y8YO9eWLMG3NwMLk4ikUgkRkYa35IH\nFktLSz755BN9OSkpqWw2N5OjVWu5ueEm0d2iuTTlkkl0mOrujo+1NR5WVnzaujV2ZmbcKDDig0Bh\nIdjZwY8/6jLMNDDee/o9bCxsaGzdmBGPjiC7IJsFUQvYcn6LwWT27g2dO5eWb982mCiJRCKRmABp\nfEseaEaMGMG0adM4fPgwX3zxBcuWLePxxx8npyTbogkRhYJbP97CZ74PnXd0rr2BAbAyM2NH587E\n9uzJ0GbNmB0XR5tjx7hkDPec3bvhb3+DH37QRT1pgLg7uLP1xa3Ez4ynX+t+PLryUWJuxPCY22MG\nl52eDgMG6Hy+Y2IMLk4ikUgkRkIuuJQ8NDzzzDM0b96cN998k549e5panQbHu3FxFGm1/KNlS7ys\nrQ0vMDYW2reHku/1hg3w00/w6afQANMqZ+VncenPS/h5+BlFnqcnJBXnBw4NheJs1JKHCLngUiK5\nf5HRTiQSoKCggEaNGplajSrJT8nnyowrWDhb0OEb40c+MRlDh8LWrbp9OztYsACmTAFbW9PqVQeK\nNEVYmlsarP8ffoCxY3X7bm66BZgN9N9XYiCk8S2R3L/IaCcSCZQzvO/cucOVK1dMqE0pN9be4Gir\no6SHpXPzh5sUZZg+4+PNwkJ+/vNPwwv65z9L9wsKdH7fDdzwTs9LZ/6v8/Fa6sW5W4ZbJDpyJJSs\nD755Ez7+2GCiJBKJRGJEpPEteai4ffs2oaGheHt78+WXX5paHQCcnnXC2lvn5iHyBddXXTeZLtlq\nNRMuXKDN0aPszsw0vEB/f13WS9DF1Vu3Trd/3XRjUBuhB0I5cO0AO0fvpKNrR4PJsbTUvQQo4auv\nSj10JBKJRFJ/TJo0qVx4YkMjjW/JQ8XFixfZsmULTk5OLFy40NTqAGDjZYP3PG99OWlZEpo7GpPo\n8tOtW4T/+Se5Wi0djTUD/dZb8PTTsG0b9OihW4TZt68u40wDY1/cPg4lHmJf/D4u/Wn4CDWvvlqa\n6bJZM90iTInkYcTMzIy4uLhyx+bNm8e4ceOqrF9YWMiUKVPw9vbGycmJ7t278/PPP+vPjxs3jhYt\nWuDk5ESHDh1YvXp1ufYBAQHY2Njg6OiIg4MDvr6+9X9RBqC2616xYgU9evTA2tqayZMn19pfTfUd\nHBxwdHTUj5GFhQUzZ86s92t6EJHGt+ShoaioiEGDBnH27FliY2MJDw83tUp6XENcsWqpS+iiTlOT\nvCzZJHpkaTTcLs7s8nlKinHCMg4eDL/+CoMGwcqVEBICp083yOyXh5IOEXNTF3rkv8f/i6pAxW+J\nvxlMnpsbLFsGkZFw9qzOAJdIHkYUpWrX9+qOq9VqPD09iYqKIisri48++oiRI0eSmJgIwHvvvUdC\nQgJZWVmEh4fzwQcfcOrUqXL9rly5EpVKRXZ2NhcaWBKw6qjtuj08PPjwww956aWX6tRfTfWzs7NR\nqVSoVCpu3ryJra0tI0eOrNfreVCRxrfkocHS0pKXXy5NmrJ48WI+/fRTLl++bEKtdJhZmmHZpHTx\nXn5ivkn0mNy8OXbFiXbO5OYy9OxZwg093Vpy81QU2LwZJk8GKyvDyrxHXu7+MpZmur/ToaRDeH7m\nyfd/fG9Qma++Cs89Bykp8O67cOCAQcVJJA2Su50IsLW1Zc6cObRq1QqAgQMH4uPjQ3R0NAC+vr5Y\nFmf4FUKgKApXr169Z5l9+/ZF3QBS0tZ23YMHD2bQoEG4uLjUqb+61t+0aROurq707t272jqffvop\nLVu2xNHREV9fX/bv3w9Aamoqw4cPx9XVlTZt2rB8+fJy7ZKTkxk2bBiurq40a9aMGTNmAHDhwgX6\n9OmDs7MznTt3JiIiQt/Gx8eHJUuW0KVLF5ydnRk1ahSFhYX686dOnaJ79+44OTkREhJCfn75e251\nutYX0viWPFS8+uqrWBS/xz9y5Ai//vqrvmxquuzpgvtUd5744wnarzRNyvnGlpZMaN5cXz6fl8cT\nDg7GV0QIOHgQthgumc290Ny+OcMfLU0G1P+R/nwR9IXB5X73HTz2GOTlgY+PwcVJJJUIPRCKMk+p\ntIUeCK1z/erqGoObN28SGxtLx46l6zRee+017Ozs8PX1pUWLFgQGBpZr8+677+Lq6srTTz/NwYMH\nq+07JSUFoN7vJcHBwTg7O+Pi4lLpc9CgQXXqo6rrNgRr165l/Pjx1Z6/fPkyK1asIDo6GpVKxe7d\nu/H29kYIQXBwMF27diU1NZV9+/axbNky9uzZA4BWqyUoKAgfHx8SExNJSUkhJCQEtVrNoEGD6N+/\nP2lpaXz++eeMGTOG2NhYvcxNmzYRGRlJfHw8p0+fZs2aNYDuLfiQIUOYMGECGRkZjBgxgi1l7jXV\n6VqfSONb8lDRokULRowYoS83a9aM1q1bm1CjUqyaWdH+q/bYd7ZHW6Ql91yuSfSY7uGh379y5w4F\nWsOnVC9HYiI89RRMndog/b6n+03X72+/tJ0/8wwfFWbgQIiP17mgeHkZXJxE8kChVqsZO3YsEydO\npF27dvrjK1asICcnh99++42hQ4eWi4i1aNEi4uLiSElJYerUqQQHBxMfH1+p77179zJr1iyaN2/O\n99/X/hZsy11MKERERJCZmUlGRkalz7q4TVZ33fVNYmIiv/76KxMmTKi2jrm5OYWFhZw9e1bvGuPj\n48OJEydIT0/n/fffx9zcHG9vb6ZMmcLGjRsBOHbsGKmpqSxatAhra2usrKzw9/fn6NGj5Obm8s47\n72BhYUGfPn0ICgpiw4YNepkzZ87Ezc2Nxo0bExwcTExxtrIjR46gVquZMWMG5ubmDBs2jB49etSq\na30ijW/JQ0fJghAzMzPUajVCCLTGNjCrQZOvIemzJI61Oca1j6+ZRAdfOzv+5uzMk46OfO/ri0ej\nRmQZ83Vqo0a66d1vvtHF22tg9GrZi67Nu9LWpS3/6vsvsgqymLt/Lnvj9hpMZtOm4ORUWs43jVeS\nRGIyzM3NKSoqH4a1qKgIS0tL1q9fr1/8N3DgwHJ1hBCMHTuWRo0aVXJnAJ1vt7+/P0lJSaxatUp/\nvEePHtjZ2WFpacn48ePp3bs3u3btqtS+X79+mJubM2vWLMYWB+bPysoiLCys0qJ+lUqFvb09V65c\nYevWrXz88cf8/vvv9zwmNVHbddcna9eu5amnnsKrhpmBNm3asHTpUkJDQ3F1dWX06NGkpqaSkJBA\nSkoKLi4u+pn9hQsXcuvWLUDncuLl5YWZWXlz9fr163rXmhK8vLz0byEA3Nzc9Pu2trb6zNapqal4\nlJlkKmlbla5ubm56XesTaXxLHjp69uzJ0qVLiYuLY9GiRbz33nt07ty5QfjrKWYKeRfz6LilIx03\nGvY1YU1s6diRI9260c7WlskXL9L22DGyjTE+mzbBI4+UTzkvRIOKsacoCjtH7+Ti9Is0t29O96+6\ncyv3Ft6NvQ0u+9df4YkndIZ4rmlejEgeUkIDQhFzRaUtNCC0zvWrq1sXPD09uXbtWrlj8fHxeHl5\nMXr0aP3iv507d5ar89JLL5Genk5YWBjmNSziVqvVlXy+y1KcMKXKczExMXTr1k1fLokyUvFh4Zdf\nfqFPnz5ERETg4eHB66+/zuLFi6uVGRgYWC6iSNmt4kNGRep63fXBunXrmDhxYq31QkJCiIqK0i/+\nnD17Nq1ataJ169ZkZGToZ/azsrL0/tutWrUiMTGx0gRZixYtSCpJAVxMYmJiJaO6Ktzd3csZ6SVt\nq9I1ISFBr2t9Io1vyUPJzJkz8fT0JDAwkNzcXMLDwxuE77eZlRntv2yPYw9H/TFTZJ2zLx6LZcnJ\nPG5vz2U/PxyMMT6PPVZqVe7cCatW6VxQ1q83vOy7wN3BHTPFjL6t+3LlH1dYFbSKR1weMajMoiLd\nwsvoaCgshH37DCpOImlQvPjii8yfP5+U4ihMe/fuZceOHQwfPrzaNtOmTePixYuEh4djVWYRd1pa\nGj/++CO5ublotVp2797Nxo0b6du3L6CbuY6MjKSgoACNRsMPP/xAVFQUzz//fCUZ58+fx9fXF0VR\nanUFKSgowMrKijfeeAM/Pz+Sk5NrdGfYtWtXuYgiZbeKDxl1uW4AjUZDfn4+Go0GtVqtv8bqqK3+\n4cOHuX79eo1/B9D5Ue/fv5/CwkKsrKywsbHBwsICPz8/HB0dWbRokV7OuXPnOHnyJAB+fn64u7sz\ne/Zs8vLyKCgo4PDhw/Ts2RM7OzsWLVqEWq3mwIED7Nixg1GjRtWoB0CvXr2wsLBg+fLlaDQawsLC\nOH78eI261vsDjBDivth0qkok9YtarTa1CtWS9XuWONnrpDg94LSpVTEuL7xQMtcthJubEGvXCpGb\na2qt6kR+Ub5B+3/77dKh6dPHoKIkDYDi+568xwoh7ty5I95++23h7e0tGjduLLp37y527NhRbf2E\nhAShKIqwsbER9vb2wt7eXjg4OIj169eLtLQ08eyzzwpnZ2fh5OQkHnvsMbF69Wp927S0NNGjRw/h\n6OgonJ2dRa9evcS+ffuqlJOamiomTZokNmzYINLT0/XHr127JubNm6cv3759W0RGRpZru2DBApFb\nz79tNV23EEKEhoYKRVGEmZmZfiur54ABA8TChQv15drq//3vfxcTJkyoVa8//vhD+Pn5CUdHR9Gk\nSRMRHBwsUlNThRC6MRw1apRo3ry5cHFxqTTeSUlJYvDgwaJJkyaiWbNmYubMmUIIIc6fPy+exj1y\nJgAAIABJREFUffZZ4eTkJDp27Ci2b9+ub+Pj41Ouj9DQUDFu3Dh9OTo6WnTt2lU4OjqKkJAQERIS\nIj788MNadb0bavr+KqIBvc6tCUVRxP2iq+T+JD09nYyMDIMuTKkrqWtSuTSpOImLOTwZ9yTWntYm\n1elibi43CgsJcHY2rKBDh3Sz3aALOXjtGri7G1bmXyT2z1g+P/Y5Wy5s4fI/LmNvZW8QOUlJOnf4\nkomnDRt0YdElDybFrg5VB7Kuf1nyHluPJCQksGbNGubOnQvA1q1bCQoK0oc3jIiIICAggBs3btC2\nbVtTqioxEDV9f6XbieShJyUlhVdeeYW2bdtWuaDGFDQJbIJDj+IQfxpI/sw0SXcAEvPzef70aXqd\nOsXFvDzDC/T3hyef1O0XFuoyXwLU84KX+uSN3W+Qr87n5MsnDWZ4A7RqBf37l5Y//9xgoiQSyT2S\nk5PD5s2biY6O5ty5cwDk5+frDe+SxZbDhg3jp59+MqWqEhMhZ74lDzVCCLZs2cKcOXNo3749W7du\nNbVKev7835+cCTwDgLmjOf6p/pjbGjfroxCCmbGxfJOayh0huOznR1tjpJ3fulXn5z1jBpw5o4t8\noihw8mRpUp4GQIG6gCVHlrDq5CpUBSqS30jGoZFh46Lv2qULPQgwYADs2AFmchrlgUTOfD8YZGZm\nEh0dTb9+/UytisSIyJlviaQarly5wogRI7hw4QLh4eH6lc0NAZf+Llj76FxNNCoNN769YXQdFEUh\nLj+fO8U35RUVVogbjCFDdJFPevfW5VX/9FM4caJBGd4AluaWfHf6O5JVyagKVHz/x/ekqFI4ef2k\nwWQGBsK8eRATozPEpeEtkTRsDh06REBAgKnVkDQg5M+25KGmbdu2+hXuWq2WBQsW8Oabb1YKQ2QK\nFEXBzKb4K2oGBTcKTKLHjJYt9ftfp6Yy5OxZYrKzjSPczAxWrtSF+WiAVqaZYsb0HqVJd2bvm03n\nVZ35NeFXg8qdMwe6dIHTp2HyZGhAz4wSiaQCQUFBDSKalqTh0PDuZhKJkXn99df1+19//TUqlapB\nxPwG6BLZhdaftqZXci9af2yaTJzPOTvjW+xqkqfVYga0sbExviJqtS78YIV4rKZmwuMT9H7eqgIV\n3w3+jlm9Zhlc7ttv62bBH3mkfAIeiUQikTRspPEteegJDAzkkUd0MZqFEHTr1q3GTF3GpJFHIzzf\n9qSReyO0BVoK0wuNroOiKPyjTOKCM7m52Bk4aUMl1q8Hb2/4+GO4edO4smvBsZEj4x8bry+vOb3G\nKHJnztSlnH/vPWjc2CgiJRKJRFIPSONb8tBjZmbGjBkzALCzs0OlUplYo/LkXcnj8vTLHPY4zM3v\nTGN4jnNzw8XCgkFNmvBFu3YoQGGFjGMGxdkZhg2DgwehRw/jya0jr/m9BoB/K39e7PgiF9IuMG3H\nNOIy4wwm08NDF4mxBGP+OSQSiURy70jjWyIBJk6cyJIlS0hKSuLZZ5/llVde4c033zS1WgCoM9RY\nNbOi+4nutHqzlUl0sLewIP7JJ/mpY0fSiooYeOYMfWJijCN80iSdf8Xnn0NxyuGGxqPNHuXS9Esc\nmnyIc7fO8dy653Bs5Egj80YGlVtYCEuXQrt2uhcDEolEImn4yFCDEkkZTp48yejRo5kwYQLjxo3D\n09PT1Co1KHLUakZduECIqyuDmzY1jvvJ3Lnw0Ue6/eefhxEj4MoVWLjQ8LLvgbTcNFxsXDA3M/zY\nlM1HZG0Nt26Bg2EjHUqMiAw1KJHcv9T0/ZXGt0RShpL/MaWBhbQDEFpB2tY0Upal0Cm8E5aNLU2t\nknGIi4M2bUrLzz+vc3geMMB0OjUQhIDOnaE4jwdr1sCECSZVSVKPSONbIrl/kXG+JZI6oihKOcM7\nKyvLhNqUIjSCIy2PcH74ebKisri5vmEsOjydk0ORoZ2NW7eGZ58tLffr1+ANb41Ww56rexi3dRz/\njPynweQoCowbV1r+8kvp+y2RSCQNHWl8SyRVsG3bNgYNGkTr1q0bhAGumCs0GdREXzbVwssS/i81\nlU7HjzPwjz+Iz883vMCJE0v3v/1WN+Wr1eo+GyBHko8we99sOjXrxNu93zaorDFjysg9otskEolE\n0nCRxrdEUoH8/Hy+/fZbkpKS+O2333BqIEGUW3/SGsVKNyuffTyb3HO5JtHjVHY2X12/zqW8PAa4\nuNDOGOnmhw/XuZ68+SYsWwaffKIrN0BL83zaeX744wcSbieQlpeGq52rQeW1bAm+vqVlmXBHIpFI\nGjbS+JZIKvDiiy8SHh5OTEwM4eHhplZHj2UTS5oObqovX/vkmkn0uKPVciw7GzWwKS2NfI3G8ELt\n7SE2FhYvhl9+gZQU2LwZevUyvOy7JOF2Al9Ef8Gfd/5kw9kNaLQaMu5kGFTmokW69aeJiTB6tEFF\nSSQSyUPDpEmTmDNnTr33K41viaQCQ4cO1e+vW7eOM2fOEBdnuHjNd4O5XWkEDVWUClMskOrl6IiP\ntTUAWRoNHycksC8z0/CCS3zxFyyAVauge/fSYw2Ifq370dRW95B0Pfs6Pb7uQceVHSlQFxhMZlAQ\nzJ6ti/198CAcP24wURKJSfD29sbW1hZHR0fc3d2ZPHkyeXl5d91PYWEhU6ZMwdvbGycnJ7p3787P\nP/+sPz9u3DhatGiBk5MTHTp0YPXq1eXaX7x4kb59+9K4cWPatWvHtm3b/vK1GYOarru2MamJ2NhY\nbGxsGD++NNFYQEAANjY2ODo64uDggG/ZV3MSQBrfEkklhg4dik1x+vRz587Rr18/zpw5Y2KtdLT5\ndxtcgl1o91U7epztYZKoLIqiMNbNTV9edf06OcaY/a6KvDy4dMk0sqvB0tySkY+O1Jeb2DQhfmY8\njSwMG/N7/37d2tTp0yE52aCiJBKjoygKO3fuRKVS8fvvv3PixAnmz59/1/2o1Wo8PT2JiooiKyuL\njz76iJEjR5KYmAjAe++9R0JCAllZWYSHh/PBBx9w6tQpADQaDS+88AKDBg0iMzOTL7/8krFjx3Ll\nypV6vVZDUNN11zYmNTF9+nT8/PzKHVMUhZUrV6JSqcjOzubChQuGuqz7Fml8SyQVcHBwYMiQIfry\nmDFjeOGFF0yoUSmWTSx5LPwxWkxtgYWThUlmvgHGlDG+czUanja2X/zNm/Daa9CqFaxYYVzZdWB0\n51Lfj5OpJ1Ew/EOSry9s2wZ//AFlXt5IJA8MJb937u7uDBgwgLNnzwK6LMVl307W5Cpga2vLnDlz\naNVKl7Bs4MCB+Pj4EB0dDYCvry+WlpZ6eYqicPXqVUA3652amsrMmTNRFIU+ffrQu3dv1q1bV63O\nffv2Ra1W/8Ur/+vUdN21jUl1bNy4EWdnZ/r27Vvp3N3cmz799FNatmyJo6Mjvr6+7N+/H4DU1FSG\nDx+Oq6srbdq0Yfny5eXaJScnM2zYMFxdXWnWrJk+U/WFCxfo06cPzs7OdO7cmYgKydl8fHxYsmQJ\nXbp0wdnZmVGjRlFYWAjAqVOn6N69O05OToSEhJBfIaBAdbreLdL4lkiqYOzYsfr9n3/+2WRGblUI\nrSDzl0wujLvAmSDTzMi3t7XlCQcH7M3NGe3mRq6xZ76L30ywb58u82UDw7+VP96NvTFXzOnp0ZNb\nubc4lnyMZJXhpqSbN4fHH2+QnjiSB4DQA6GEHgitt/JfISkpiV27dtGtW7e/3NfNmzeJjY2lY8eO\n+mOvvfYadnZ2+Pr60qJFCwIDA4GqDUohhP4hoCIpKSkAWFhY/GU9yxIcHIyzszMuLi6VPgcNGlSn\nPqq67rqcK0GlUjF37lyWLFlS5bi8++67uLq68vTTT3Pw4MFq+7l8+TIrVqwgOjoalUrF7t278fb2\nRghBcHAwXbt2JTU1lX379rFs2TL27NkDgFarJSgoCB8fHxITE0lJSSEkJAS1Ws2gQYPo378/aWlp\nfP7554wZM4bY2Nhycjdt2kRkZCTx8fGcPn2aNWvWUFRUxJAhQ5gwYQIZGRmMGDGCLVu21KrrvSCN\nb4mkCp577jnGjh3Lpk2bOHHiBHv27GHx4sWmVguAovQirr59FYcnHOjwXQeT6bHe15eb/v581qYN\nP2dkEHLunHEeUrZvh//3/2DlSij+IW5oKIrC+qHrSZmVwpRuU+i3rh/jto7jSobhX0/n5MCHH+qG\nSCJ5kBg8eDAuLi4888wz9OnTh3ffffcv9adWqxk7diwTJ06kXbt2+uMrVqwgJyeH3377jaFDh9Ko\nkc5lrEOHDri6urJ48WLUajWRkZEcPHiwSt/zvXv3MmvWLJo3b873339fqy5ljbzaiIiIIDMzk4yM\njEqfdQkSUN1113auLHPmzGHq1Kl4eHhUOrdo0SLi4uJISUlh6tSpBAcHEx8fX2U/5ubmFBYWcvbs\nWb37i4+PDydOnCA9PZ33338fc3NzvL29mTJlChs3bgTg2LFjpKamsmjRIqytrbGyssLf35+jR4+S\nm5vLO++8g4WFBX369CEoKIgNGzaUkztz5kzc3Nxo3LgxwcHBxMTEcPToUdRqNTNmzMDc3Jxhw4bR\no0ePWnW9F6TxLZFUgYWFBevWreP555+nQ4cOvPfee9jZ2ZlaLQCsXK144uQTtJzZEqumVibTo62t\nLY3MzHj85EkiMzMZ4+aGUd4P3L4NJa9Dv/0WbtzQRUHJyTGG9DrTq1Uv3OzdaO3cmrWD13Jp+iUC\nvAMMKjMlBRo3hvnz4bffQKUyqDiJxKhs376djIwM4uPjWb58ud4oro7169fj4OCAo6MjAwcOLHdO\nCMHYsWNp1KhRJXcG0D1A+/v7k5SUxKpVqwDdfWHbtm3s2LEDd3d3PvvsM1588UVatmxZqX2/fv0w\nNzdn1qxZ+jepWVlZhIWFsXDhwnJ1VSoV9vb2XLlyha1bt/Lxxx/z+++/39XY1JWarru2MSkhJiaG\nvXv38vrrr1d5vkePHtjZ2WFpacn48ePp3bs3u3btqrJumzZtWLp0KaGhobi6ujJ69GhSU1NJSEgg\nJSUFFxcX/cz+woULuXXrFqBzOfHy8sLMrLwZe/36db37TAleXl76txAluJVxnbS1tSUnJ4fr169X\nepjw8vKqUlc3Nze9rveEEOK+2HSqSiTG5+rVq6ZWoVo0+RqRtDJJZJ/ONpkO+RqNcQVmZwthZyeE\nLsWOEA4OQkyeLERqqnH1aIBotUJ06FA6NGvWmFojyV+h+L4n77FCCG9vb7Fv374qz9nZ2YkzZ87o\ny/379xcffvhhjf1NmjRJ9O3bVxQUFNRYb8qUKeL111+v9ry/v7/46quvqjzn6+srtFptuWPXrl0T\n8+bNK3ds69atoqCgQPznP/8Rx44dEyqVSowaNapamQMGDBD29vbCwcGh0hYYGFjj9dR03XUdk6VL\nlwp7e3vh7u4umjdvLuzt7YWNjY3o3r17tfouX768xj6FECI7O1uMGjVKjB8/Xhw5ckS0a9eu2rpH\njhwRbm5uQlPh/hMVFSXc3d3LHRs9enS5Ma/4vxQaGirGjRsnDh48KFq0aFGube/evav8Xyqra3XU\n9P2VM98SSS20bt3a1CpUyZU3rxBlH8WVV6+Q8InpMqs0KjPzIIRAY2jXE3t7GDGitDxyJKxerXN6\nbsAUqAsIuxDGqhOrDCZDUWDSpNLy2rUNNgmoRFJvdO3alfXr16PVavn5559r9DEGmDZtGhcvXiQ8\nPBwrq9K3h2lpafz444/k5uai1WrZvXs3GzduLLeg8MyZMxQUFJCXl8fixYu5ceMGE8tm4C3m/Pnz\n+Pr6oihKra4gBQUFWFlZ8cYbb+Dn50dycnKN7gy7du0iOzsblUpVadu5c+ddX3dt5yry97//natX\nrxITE8Pp06eZNm0aQUFBREZGkpWVRWRkJAUFBWg0Gn744QeioqJ4/vnnq+zr8uXL7N+/n8LCQqys\nrLCxscHCwgI/Pz8cHR1ZtGgR+fn5aDQazp07x8mTJwHw8/PD3d2d2bNnk5eXR0FBAYcPH6Znz57Y\n2dmxaNEi1Go1Bw4cYMeOHYSEhNR4TQC9evXC0tKS5cuXo9FoCAsL43iZuK1V6Wpubl5Dj9UjjW+J\npA5kZ2fz7bffEhAQoA87ZWrMrMwQap1llfFzBpo8E4X7A+Lu3CE0Pp5Hjh3j5wzDJpQByqeb37IF\njJHi/i9w7fY1WvynBcuPL8fZxtmgssom2fnlF10uIonkfqemsKpLly4lPDwcZ2dnNmzYUC5aVUUS\nExP56quviImJwc3NTe+WsmHDBhRFYdWqVbRq1QoXFxfefvttli1bRlBQkL79unXrcHd3p3nz5uzf\nv589e/boo6OUxcXFBScnJzZu3Ejv3r2r1ScrKwsXF5dyx7Zt28b7779f03DcNTVdd03nSggMDORf\n//oXANbW1ri6uuo3e3t7rK2tcXFxoaioiA8++EAfgWTFihVs376dtm3bVqlXQUEBs2fPplmzZrRo\n0YK0tDQ++eQTzMzMiIiIICYmBh8fH1xdXZk6dSqqYl+6kvOxsbF4enrSqlUrfvrpJywtLQkPD2fX\nrl00bdqU6dOns27dunL+69X9L1laWrJlyxa+/fZbXFxc2LRpE8OGDatR1wULFtzT30MR98m0iKIo\n4n7RVfLgMXHiRE6fPs306dP1PnGmRgjB8Q7HuXP5DgAd1nWg+Vjjz/7mqNVMu3yZqKwsAho3Zk2H\nDoaPP67VwiOPgJkZTJgAffrArl3QuTOMGmVY2XeJWqtm79W9fH3qawa2HcjkrpMNLtPHB65d0+0v\nXKhLwCO5/1AUBSGEUeLXyHuscUhISGDNmjXMnTsXgK1btxIUFKQ34CMiIggICODGjRvVGqyS+4Oa\nvr9y5lsiqYUFCxawceNGYmJiUKlUDcLwBt0Xu/mkUmM7aUmSSfQ4rFLxw61bJBYUEJmZidYYQs3M\n4NdfdSnnPT11BrhWC126GEP6XfHtqW8ZsH4AYRfC+Ob3b4wic9486NkT/vtfmDLFKCIlEkkt5OTk\nsHnzZqKjozl37hwA+fn5esO7ZLHlsGHD+Omnn0ypqsTAyJlviaQWVq9ezZRiC6Zr1676GJ9Oxk4s\nUwUZkRn88fwf+nKv671o5G7chwO1VkvLI0e4WVQEQESnTrS3taWtra2RFFCDuXmDDXCdnpeO+xJ3\n1Fpdoo0Pn/mQPXF72B6yHVc7V4PIFKJ0OIqKID0d3N0NIkpiQOTM94NNZmYm0dHR9OvXz9SqSAyA\nnPmWSP4Cw4cP1892nzp1Ch8fn3r3x7tXHHo44PCkAy5BLnT4rgPmDve2+OOvYGFmxqgyYZuGnTvH\nfyuEdTKsAhYN1vAGaGrblOfblC42Cr8UzryAeTSxaWIwmYqiSzE/cya0bKmLxCiRSBoWhw4dIiAg\nwNRqSEyANL4lklpwcnIqlzXsmWeeqTEGqjGxdLak2+FuPBbxGM3HN8fCvn4zqdWVsWWMb3NggbEj\nxBQU6JLvjB0LgwcbV3YdGNN5jH6/UFPIc62fw9zMsA9KWi04O8OhQ7BkiUFFSSSSeyAoKKjes19K\n7g+k8S2R1IFx48bp9/fv39+g0s0rioLmjoa0bWnEh1adRczQdLO3p0Oxm4mtuTkXcnONq0BmJixd\nqnN0XmW4UH73yqD2g7C11I3P1cyrJGYlotFqyC003Dh5ekJoqG5dqkQikUgaDtL4lkjqQP/+/fHy\n8mLMmDF8/fXXFBUVceLECVOrBYDmjoYjrY6Q8nkKVm5WJnkwUBSFhT4+RHTqRKq/Px6NGvHf5GTD\nx/wG3aLLVat0js35+Q3SudnOyo45z8xh9aDVHJtyjJUnVuK11MtoCzBv3YLiKGESiUQiMTFywaVE\nUkc0Gg2KojBp0iQiIiJ49NFHOXDgQIN4bajOVmPhYHo9AMZfuEDEn38yuGlTPmvThsZVxMCtV9as\nKc0s8+STcOQIZGRAhdi5DYV9cfvYE7eHcY+No6NrR4PKys+Hrl3h0iVdgJiUFCjjISRp4MgFlxLJ\n/UtN399ajW9FUWZVcTgLiBZCxNSDfnVC/jBIGgqbNm3C398fDw8PU6tSJZp83UOCWSPTvNiKzs7G\n19YW23vM/HXX/PmnzqLUFCcZ6tkTrl7VBbq2szOODg0UIaB169KY32vW6KIySu4PpPEtkdy//NVo\nJ08A0wCP4u1lIAD4WlGUt+tLSYnkfmHEiBEN0vC+ufEmJ7udJMo+iuvfXDeZHt0dHIxneAM0aQJl\nIwY8/rgu1Md9YHjfKbrD2VtnDda/osArr5SWN240mCiJRCKR1JG6GN9NgG5CiDeFEG+iM8abAc8A\nEw2om0TSoLl16xbffPMN2dnZplYFgISPEsg5lQMayNydaVJdhBCcVKn4IC6OGGOMT5kUwMTGQgNJ\nhFQdN3NuMuynYTRf0pxPD31qUFkjR5bu79kDv/9uUHESiUQiqYW6GN+eQGGZchHgJYS4AxQYRCuJ\npIEzdepU2rVrx+7du7l9+7ap1QGg07ZO+v3MPZmoc9Qm0+WVy5cJOnOGs7m5OBrDJ37w4NJY32lp\nUFgIJ0/qoqA0QOws7fBw8GDziM2sG7LOoLK8vaFpU92+RgO//WZQcRKJRCKphboY3+uBo4qizFUU\nZS5wCNigKIodcN6g2kkkDZDNmzdz+fJl8vLymDRpEq1atTK1SgDYtrPFrpPO1UKbr+XPnX+aRI/d\nGRl8mZrKzaIiUgoLaW1jY3ih7u6wejWcPw+vvgrt28Po0Trf7wZG2IUwWn7WkuXHl7P61GqjyJwy\nRbfgMiAA2rUzikiJRCKRVEOtxrcQ4mN0ft630S20nCaE+EgIkSuEGFNza4nkweP48eP8+uuvFBUV\nsW3bNlOrUw7H3o76/ZTPjZhlsgw9HRywKJ6FPpmdTXJ+vnEET5oEvr7w2GO6hDuXLsETTxhH9l3Q\nrkk7sgqyAF22y/O3zrP29FqDynzzTV24wf37oX9/g4qSSCSSBsekSZOYM2eOqdXQU9dwCKeATUAY\ncEtRFE/DqSSRNGxeeOEF/f6WLVv44IMP+K2BvMtv5KHzdVasFKx9rE2iQ2NLSwIaN9aXh547x/Lk\nZOMp4O+vM8AbaMr5Tq6d6OzaGYA76jv0XN2TX+J/oVBTWEvLe6dpU3BwgN27dQsw1xrW1pdI6h0z\nMzPi4uLKHZs3b165BGhlKSwsZMqUKXh7e+Pk5ET37t35+eef9efHjRtHixYtcHJyokOHDqxeXf4t\nVEBAADY2Njg6OuLg4ICvr2/9X5SBuBvdHRwccHR01Ne1sLBg5syZlerFxsZiY2PD+PHjDan6Q0Ot\nxreiKP8AbgJ7gB3AzuJPieSh5Mknn8TV1RWAjIwMrl27pi+bGq8PvOi0vRO9/+zNo98/ajI9XmjS\nRL+fo9EwrFkz4yuRlwdhYbrp3gbGyI6lqyAD2wayZvAarMytDCrzu+9g3jxd6MFnnjGoKImk3lGq\neZiu7rharcbT05OoqCiysrL46KOPGDlyJImJiQC89957JCQkkJWVRXh4OB988AGnTp0q1+/KlStR\nqVRkZ2dz4cKF+r8oA3E3umdnZ6NSqVCpVNy8eRNbW1tGll2lXcz06dPx8/MzpNoPFXWZ+Z4JtBdC\ndBRCPCaE6CyEeMzQikkkDRVzc3OCg4P1ZQ8PD9o1EEdaRVFoOqgpFvYWaPI0FKSaZk30oJIVfsCV\nO3ewM2boQYCICJ0f+KpVukwzDYxB7Qfp93df2W3QWe8SpkyBw4fhrbd0izAlkvuJu41Bbmtry5w5\nc/RrcgYOHIiPjw/R0dEA+Pr6YlmcAEwIgaIoXK2wRuRuZPbt2xe12nSL3CtyLzHbN23ahKurK717\n9y53fOPGjTg7O9O3b98a23/66ae0bNkSR0dHfH192V888ZGamsrw4cNxdXWlTZs2LF++vFy75ORk\nhg0bhqurK82aNWPGjBkAXLhwgT59+uDs7Eznzp2JiIgo187Hx4clS5bQpUsXnJ2dGTVqFIWFut/S\nU6dO0b17d5ycnAgJCSG/wn2gOl2NRV2M7yR0vt73hKIo/RVFuagoymVFUd6pps5IRVHOKYpyRlGU\n7+9VlkRiLAYPHgyAk5MTZmamSWZTHTl/5HBuxDkOtzjMjf+7YRIdPK2tCWrShGktWrC9UydszcxQ\na7XGES4ENG4Mf/87hIfDgAHGkXsXdHbtTMdmHRnSYQj/ef4/RCVG8c/If3Ir95bBZFacIJT5VCQP\nEzdv3iQ2NpaOHUuzyr722mvY2dnh6+tLixYtCAwMLNfm3XffxdXVlaeffpqDBw9W23dKim59TX1n\nOw4ODsbZ2RkXF5dKn4MGDaqxbV11L8vatWsruZWoVCrmzp3LkiVLajToL1++zIoVK4iOjkalUrF7\n9268vb0RQhAcHEzXrl1JTU1l3759LFu2jD179gCg1WoJCgrCx8eHxMREUlJSCAkJQa1WM2jQIPr3\n709aWhqff/45Y8aMITY2tpzcTZs2ERkZSXx8PKdPn2bNmjUUFRUxZMgQJkyYQEZGBiNGjGDLli21\n6mpUhBA1bsBq4DfgXWBWyVZbu+K2ZsAVwAuwBGKADhXqPAJEA47F5abV9CUkkoZCXl6e2Lt3r7h9\n+7YICwsT48aNE6GhoaZWSwghRO7lXHF99XVRkFZgalXEn4WFYklionjq999F8B9/GEfo3/4mhM62\nFCI83Dgy7wGNViOEEGLQhkGiy6ouYu7+ueJWzi2DykxNFeIf/xCiVSshunY1qChJPVB836v1Xlsf\nW6332LlzS79XZbe5c+tev7q6dUBRFHH16tVyx0JDQ8W4ceNqbVtUVCT69esnXnnllUrntFqtOHTo\nkPjkk0+EWq3WHz9+/LjIyckRhYWF4rvvvhMODg4iLi6uUvs9e/aIkSNHitGjR4t169bVqsvmzZtr\nrfNXqavuZUlISBAWFhbi2rVr5Y7PnDlT/Pvf/xZC1DzeV65cEW5ubmLv3r2iqKhIf/yxyGFeAAAg\nAElEQVTYsWPCy8urXN2FCxeKyZMnCyGEOHz4sHB1dRUajaZcnaioKOHu7l7u2KhRo8S8efP0ZW9v\nb7F+/Xp9+e233xavvPKK+PXXX4WHh0e5tv7+/uLDDz+sUdf6pqbvb12m7BLR+XtbAQ5ltrrgB8QK\nIRKEEEXARuCFCnWmAiuEEKrib396HfuWSEyGjY0Nffv25cSJE/z3v/+lZ8+eTJkyxdRqAWDb1hb3\nye5YNTWsD3FduKPVciEvj3c9PfnpUSP5oHftWrq/bh189hm83fCS8Zopup/fDcM2EDMthtCAUJrZ\nGdY3PiwMli+HpCSdS7xEcr9gbm5OUVFRuWNFRUVYWlqyfv16/cLBgQMHlqsjhGDs2LE0atSokrsD\n6Fz1/P39SUpKYtWqVfrjPXr0wM7ODktLS8aPH0/v3r3ZtWtXpfb9+vXD3NycWbNmMXbsWACysrII\nCwtj4cKF5eqqVCrs7e25cuUKW7du5eOPP+Z3A2S9qqvuZVm7di1PPfUUXl5e+mMxMTHs3buX119/\nvVaZbdq0YenSpYSGhuLq6sro0aNJTU0lISGBlJQUXFxc9DP3Cxcu5NYt3Vu+5ORkvLy8Kr1Bvn79\neqUwvl5eXvq3DCW4ubnp921tbcnJyeH69euVslCXva6yurq5uel1NSZ1CTU4r6qtjv17oHNbKSG5\n+FhZ2gHtFUX5TVGUw4qiPF/HviUSk9OvXz/27dvHa6+91uBSzqtz1KSsTOF0/9MIjWl8DDwaNeLr\n9u0JbNIEa2P5fQ8dWrq/eTP88Qf062cc2feAraWt0WRNnAglYdcvXYLLl40mWiL5S3h6enLt2rVy\nx+Lj4/Hy8mL06NH6hYM7d+4sV+ell14iPT2dsLAwzGv4DVKr1ZV8vsuiKEq1bhcxMTF069ZNXy6J\nrlLxYeGXX36hT58+RERE4OHhweuvv87ixYurlRkYGFguGknZreJDRk3UpHsJ69atY+LEieWOHTx4\nkISEBDw9PXF3d2fx4sVs3ryZJ6oJ4RoSEkJUVJR+Uevs2bNp1aoVrVu3JiMjg4yMDDIzM8nKytL7\nb7dq1YrExES0FdwSW7RoQVJSUrljiYmJdbrPuru7k1whwlaJThV1TUhI0OtqTKo1vhVFWVr8GaEo\nSnjFrY79V7UMueJ/gAU615NngNHAN4qiOFZqJZHcB5Qs9jA1BTcKONT0ELGvxZK5O5PbUabPwimE\nIP7OHcMLeuIJaNmyRCiMHQt/+5vh5f4FMu9k8sMfPzBi0wh2XDZcMClb2/JDsX69wURJHjRCQ6ty\nOtEdr2v96urWgRdffJH58+eTkpKCEIK9e/eyY8cOhg8fXm2badOmcfHiRcLDw7GyKn0TmJaWxo8/\n/khubi5arZbdu3ezceNG/YLCrKwsIiMjKSgoQKPR8MMPPxAVFcXzz1eeGzx//jy+vr4oikJ4eM2m\nUUFBAVZWVrzxxhv4+fmRnJyMj49PtfV37dpVLhpJ2a3iQ0YJd6N7CYcPH+b69euVxvLvf/87V69e\nJSYmhtOnTzNt2jSCgoKIjIys1Mfly5fZv38/hYWFWFlZYWNjg4WFBX5+fjg6OrJo0SLy8/PRaDSc\nO3eOkydPAuDn54e7uzuzZ88mLy+PgoICDh8+TM+ePbGzs2PRokWo1WoOHDjAjh07CAkJqXGMAXr1\n6oWlpSXLly9Ho9EQFhbG8ePHa9S1pgczQ1DT6oCSnMfVP5bVTjK69PQltASuV1HniBBCC1xTFOUS\n0BadH3g5Qst8cQMCAggICPgLqkkk9UN2djarV69m69atFBUVcfjwYVOrhJWrFS7Pu/BnuC7LZfqW\ndJwDnE2iS6FWy1tXrxKWnk4TCwt+f+IJzAwZg9vMDIYM0flXgM7Xom9f3c2/gcb+/uLkFxxOOsxQ\n36H0atnLoLIGDNDlIAL4979h7twGOywPHQcOHODAgQOmVqNBMmfOHObOnctTTz3F7du3adOmDevX\nr+fRatzZEhMT+eqrr7C2tta7JiiKwpdffslzzz3HqlWreOWVV9BqtXh5ebFs2TKCgoIAnTvLBx98\nwKVLlzA3N6dDhw5s376dtm3bVpLj4uKCk5MTGzdu5LnnnqtW/6ysLFxcXMod27ZtG++///69DkmV\n1KZ7YGAgzzzzTLmZ3rVr1zJs2DDs7OzK9WVtbY21dWm+CHt7e6ytrStdB+geLGbPns3FixextLTE\n39+fr776CjMzMyIiIpg1axY+Pj4UFhbSvn175s+fD6A//49//ANPT0/MzMwYPXo0/v7+hIeH88or\nr7BgwQJatmzJunXrykUWqy7MpKWlJVu2bGHq1Kl88MEHBAYGMmzYsFp1NSZKba8i/lLnimIOXAL6\nAqnAcWCUEOLC/2fvzOOqqNc//h5WQdajgIAISC5kuaF4XSoJKlPQvHhzSUtLf7eupWVdr7apWbmk\nN82s225ZLqmoqOS+b6m45C4qssgiCIKALIfz/f0xcABlUznnoH7fr9e8mOU783xmOGfOM995vs9T\nrs0zJeuGK4rSGNXpbi+EyLzpWMKQWiWSOyU2NpYXX3yRZs2a8cMPP1S4WZmSzC2ZHAs5BoCVpxVd\n47uimBnfy/o+KYkZ8fFczM/nQMeOBDgY4cXWjh1qWce//x18feHAATX94OHDYAz7t8HvJ38n4nQE\nGy5s4PTo0zSxa2JQe1euQJMm6rOIuTmkpYGzaZ7LJDVQEi5glC+t/I2tW+Li4liwYAGTJk0CYOXK\nlYSGhurTG65Zs4aePXuSkpJSqVMvufep7vtbmyI73RVF2VSSKvCioiixiqJcrGk/ACFEMfA6sBE4\nCSwRQpxWFGWKoiihJW02AFcVRTkJbAHeudnxlkjqKykpKTz00EPs3r2b5cuX3xLjZ0ocn3DEXKO+\nSiu8XEjW/jvOGHpX7MjK4nx+Pjog8upV4xh94gk4dAjefVd1up2c1LSD9czxBrXXe+nJpVzLv6YP\nOSnWFRvMnqsrTJwIP/4IycnS8ZZI6pqcnByWL19OdHQ0J0+eBCA/P1/veJcOtgwPD+f33383pVSJ\niaix51tRlDPAW6g90vpfBCGEkX5F9TrkU7mkXtKhQweOHj0KwNKlS2nXrh2tWrUysSo1xnpPoz1o\nM9XCD55vetLic+P3sCy/coV/nDoFwKO2tkxt3pw+Gg0W9Sw/uqmYs38Ob214C4DWjVpjZ23H480e\nZ/Yzsw1uu7AQ9uyBnj1l6El9RPZ83x9kZmYSHR1NSD0e+C2pe+6q5xvIEkL8IYS4IoS4WjrVsUaJ\n5J6lX7+y7Jkvv/wyoaGh5NWDPG6KotDq+1a4DnLl4WUP0/zj5ibR8YxGg1WJZ3c8L4/P4uNJM9Ub\ngsJCqEdvJwDCWpZVS43JiGFKzylMD5lucLv/+pcafjJxImTKd40SicHYs2ePHKMmqUBtnO9tiqJ8\npihKV0VROpZOBlcmkdwjlFa7BNXhPXnyJLa2xksfVx0uf3fh4cUP4zrAFfOGRi7xXoK9hQXB5WIb\nnnd1xd3a2rgiVq5UB2G6uMD+/ca1XQN+Gj/auKhV94pFMVqdFktzS4Pb7d8fTpxQL0cl46ckEkkd\nERoaWufVLyX3NrVxvrsAnYBPgdkl091kQJFI7ivatWunT+Cfk5PDzp07TayoItosLamLUjkRfoLr\nR6+bREO/xo0BcLW0pNgUr7bz8uCpp+D8eXjsMePbr4G+rdRS0dbm1sRmxqITOhKzE2vY6+546inw\n8DCoCYlEIpFUgkGzndQlMh5NUp/55JNPSEpKol+/fgQGBrJ9+3aeeOIJnOvBaLaz/3eWgqQCXMJd\ncPm7CxaOxu+BuVpUxLm8PLo4OBCfn8/K9HSe1WhofVNqqzonPR1mzFDTDdrawvHjhrV3h5y7eo5T\naado69aW6bunE3k2ku7NurPi+RUGt52QAP/9L4wZoyaGkdQfZMy3RHLvUt33t0rnW1GUoUKIXxVF\nGVfZdiHEf+tQY43IG4PkXuC9997jyy+/JCAggK+++orWrVubWhJCiCrzoRqbiRcv8kNyMmGNGvGO\nlxf+hna+c3LUUJP8fHX57FmwswNra2jUyLC274Dcwlz+d+h/9Gvdj4c0DxncXufOalIYULOfjBhh\ncJOS20A63xLJvcudOt//FEJ8oyjKpMq230aJ+TpB3hgk9wInTpzA3d2dRvXQsQMovlFMUVoRDZqZ\nJhd5RlERjhYWmBvzYeC558qqyri7q474zz9DWFj1+z0AvPKK6nQDjB4NX35pWj2SikjnWyK5d7kj\n57u+IW8MEsmdk742nQvjLnDj/A1sWtnQ5XQXU0syHr/8Ai+9pM4//DAcOwb3wOCnrPws9iXuo9dD\nvQxmY/t2CApS5z091RCUevKSRIJ0viWSe5m7LbLTQFGU0YqifKUoyo+lU93LlEjuH+Lj45k7d269\nGXxZkFDAjZgbIODGhRsU5xquiEtNFAvBjmvXeOv8eRYkJxveYGioWsoR4PTpep9Xr1hXTJ9FffD6\n3IuvDn6FVqc1mK0ePcqK7Fy+DHPmGMyURCKRSEqoTbaThUAT4BlgB9AUME3KBInkHuDLL7+kQ4cO\nHDhwgIaGjmmuJZ6veWLbpiT9YRFkbjOdAzo3MZGhp09zNi+Pro6Ohjeo0cDf/qbOt20L8fGwd6+a\nZ68ekluUSyf3Tix4bgGRgyOxMDNcL72FBZSvbH3mjMFMSSQSiaSE2jjfDwkhPgByhRA/A32ARw0r\nSyK5N4mMjGTJkiVkZmbSqVMnAgICTC1JT6Nny+LQ0yPTTaLhUHY2b1+4QGJBAUdycmhhY2Mcw/Pn\nq127770HzzwDr76qDr6sZ0TFRNF4ZmM+2vkR8w7MM4rN8ePBykp9QfDss0YxKZFIJA80tXG+S8vB\nXVMU5RHAEfAxmCKJ5B7mypUr7NmzByEEq1atMrWcCti0LHN0035PwxTxnR3s7WlsqRaQSSks5OB1\nI71Ea9dOTWrdowccOQJ//QXh4caxfRt0dO9IkU695e6K28X+xP1M3z2d6wWGu05hYXD1KqxZo45N\nlUgkEolhqY3z/a2iKM7AB0AkcAqYaVBVEsk9SlhYmD6t365duxgzZgw//lg/hkjYtbNDsVIwa2iG\nc4izSeK+zRWF0HKZYIafPs3Lxox1cHcHLy/j2btNmtg1oYunOhi2WBTT+7feJGYnkleUZzCbVlZg\nZqamQn/xRRhXaXJZiUQiuf8YMWIEH374odHt1uh8CyG+F0JkCiF2CCGaCyFchRD/M4Y4ieRew83N\nja5duwJqfu24uDg6depkYlUqDoEOdDrciR6ZPXhk+SNY2Jkm40e/cs53dnExH5uisktGBixaBPXs\n7QSUVbsECGkewpe9v8TNzs2gNk+dUlMOBgaqKQclkvqGj48Ptra2ODg44O7uzssvv0xe3u0/lBYW\nFjJy5Eh8fHxwdHQkICCA9evX67cPGzYMDw8PHB0dad26NT/88EOF/c+cOUNwcDBOTk60bNmy3r3h\nrIklS5bw8MMPY2dnR4sWLdizZ0+l7ebPn0/nzp1p0KABL7/88m1vl1RPbbKdOCmKMkZRlP8qivJF\n6WQMcRLJvchz5d7dm5ub07ZtWxOqqUjDNg0xszRDm6PlRuwNk2h4SqOhgZl660kqLCSv2Mg98Bs3\ngo8PLFlSL/PqlXe+159fT2FxocFtduoEa9fC66+Dn5/BzUkkt42iKKxbt47s7GwOHz7MwYMH+fjj\nj2/7OFqtlmbNmrFr1y6ysrL46KOPeP7554mPjwfg3XffJS4ujqysLCIjI3n//fc5cuQIAMXFxfTr\n14++ffuSmZnJN998w9ChQzl//nydnquh2LRpExMnTuTnn38mJyeHnTt30rx580rbenp68sEHH/DK\nK6/c0XZJ9dQm7CQKNcb7OBBdbpJIJJUQGhoKqL3gnp6eJlZTkZy/cjgacpR97vtI/s4Iaf4qoaG5\nOSPd3Xm7aVN2tm+Pr40NhTqdcYxrtWqKj3/9C376Cfr1M47d26CNSxsC3AMY2nYoX/X+ivXn1zP2\nj7GcSTdeeI6x/h0Sye1QOk7F3d2dZ599lhMlGYvMzMy4ePGivl11oQS2trZ8+OGHeJWEn/Xp0wdf\nX1+io1W3xt/fH8uScSml1YEvXLgAqL3eycnJjB07FkVRCAoKonv37ixcuLBKzcHBwWi1hksXejtM\nnjyZDz/8kM6dOwPqdXR3d6+07XPPPUffvn3RaDR3tL08M2bMoGnTpjg4OODv78+2bdv025KTkxkw\nYACurq74+fkxb17ZQPPExETCw8NxdXXFxcWFMWPG6LedOXOGoKAgnJ2defTRR1mzZo1+m6+vL7Nn\nz6Zdu3Y4OzszePBgCgvVTowjR44QEBCAo6MjgwYNIr+0+nEttNYltXG+GwghxgkhfhJC/Fw6GUSN\nRHIf0Lp1a44dO8aJEyfo2LEjAwcO5O233za1LAAsXS1pOqYpXZO70vzTyns8jMG8Fi2Y6O3NxsxM\n/nb4ME8dO2Ycw717Q3AwzJgBmzYZx+ZtoigKB0cdZGH/hWyK3cSsvbNws3PDwdrBoHYvXoQhQ9Sw\n+PLpByWS+kZCQgJRUVF07Njxro+VmppKTEwMbdq00a8bPXo0DRs2xN/fHw8PD3r37g1Q6SB1IYT+\nIeBmLl++DIBFHRf1CgsLw9nZGY1Gc8vfvn37VrqPTqfj0KFDXLlyhRYtWtCsWTPeeOMNCgoK6lTb\nzZw7d4758+cTHR1NdnY2GzZswMfHB1CvXVhYGB06dCA5OZktW7Ywd+5cNm3ahE6nIzQ0FF9fX+Lj\n47l8+TKDBg0C1LcXYWFh9OrVi7S0NL744gteeOEFYmJi9HaXLVvGxo0biY2N5dixYyxYsICioiL6\n9+/PSy+9REZGBv/4xz9YsWJFrbTWNbXK860oyihFUdwVRdGUTgZRI5HcByiKQtu2bYmNjWX9+vX0\n6tWr3jjf1k2sady3scnivctjqShohWCWnx+b2rUzjtEePcrmf/sNpk2DqVONY/s2KB20u6DfAnaO\n2Mm7j72Lh72HQW0eOwaLF0NKChQWgix2KKnA5MnqVFfLd8Bzzz2HRqPh8ccfJygoiIkTJ97V8bRa\nLUOHDmX48OG0bNlSv37+/Pnk5OSwe/du/v73v2NtbQ2oHSuurq7MmjULrVbLxo0b2bFjR6Wx55s3\nb2bcuHE0adKEX3/9tUYt5Z3AmlizZg2ZmZlkZGTc8jcyMrLSfVJTUykqKmLFihXs2bOHo0ePcuTI\nkTsK3bkdzM3NKSws5MSJE/qQH9+ScT4HDx4kPT2d9957D3Nzc3x8fBg5ciRLlizhwIEDJCcnM3Pm\nTBo0aICVlRXdunUDYP/+/eTm5vKf//wHCwsLgoKCCA0NZfHixXq7Y8eOxc3NDScnJ8LCwjh69Cj7\n9+9Hq9UyZswYzM3NCQ8P178FqElrXVMb57sQ+AzYR1nIySGDqJFI7iM6d+7M0qVLGTFiBB4ehnWc\nbpf8pHzipsVxvN9xk6QcBHCwsGBa8+Y84eSElVltbkV1QK9ypdqjoiApqaJDXs9QjBiTHhoK9vbq\nfGJivUyDLnnAWb16NRkZGcTGxjJv3jy9U1wVixYtwt7eHgcHB/r06VNhmxCCoUOHYm1tXSHUoRRF\nUejWrRsJCQl8/fXXgNqDvWrVKtauXYu7uzuff/45AwcOpGnTprfsHxISgrm5OePGjWPo0KEAZGVl\nERERwbRp0yq0zc7Oxs7OjvPnz7Ny5UqmTp3K4cOHb+va1IRNSU2FMWPG4OrqikajYdy4cURFRdWp\nnZvx8/Njzpw5TJ48GTc3N4YMGUJySWXjuLg4Ll++jEaj0ffeT5s2jdTUVBISEvD29saskt+GpKQk\nfdhQKd7e3vo3DaCGfZZia2tLTk4OSUlJt4SCent710prXVObX7xxqIV2fIQQviWT6d5XSyT3KPUl\n7i/nVA77m+4n9t1YrkZeJe+s4dLY1RadEFy6YYQBoJ06QePGJUZ1MHw4BAUZ3u5dEHctjq8Pfk2/\nJf3YeGGjwexYWqoROaXcRkecRGIUquoosLW1rdD7nJKSAsCQIUO4fv062dnZrFu3rsI+r7zyCunp\n6URERGBubl6lTa1Wq4/5BnjkkUfYvn07aWlp/PHHH1y4cIHAwMBK9z169GiF0JjS7CpFRUUV2m3d\nupWgoCDWrFmDp6cnb775JrNmzapSU+/evfUPFTdPNz9klOLk5FTpQ4IxGDRoELt27SIuLg6ACRMm\nAODl5UXz5s3JyMjQ995nZWWxdu1avLy8iI+PR1fJABQPDw8SEhIqrIuPj69xjJW7uzuJiYm37Fcb\nrXVNbZzvk4Dpf50lknuQ1NRUJk2aRGBgYIUsKKbE1s8WpyAn/XJGVIbJtGRptQw9dQq3vXsZZox8\n32ZmaoXLUv74w/A275IlJ5awL3EfA9sMpJOHYdNWPvZY2fzs2QY1JbnXqAdhJ1XRoUMHFi1ahE6n\nY/369ezYsaPa9q+++ipnzpwhMjISKysr/fq0tDSWLl1Kbm4uOp2ODRs2sGTJEoLLPZUeP36cgoIC\n8vLymDVrFikpKQwfPvwWG6dOncLf3x9FUaoMBSmloKAAKysr3nrrLQIDA0lMTKw23CEqKkr/UHHz\ndPNDRnlGjBjBvHnzSEtLIzMzkzlz5hAWFlZp2+LiYvLz8ykuLkar1VJQUEBxucxUNW0v5dy5c2zb\nto3CwkKsrKywsbHRP+wEBgbi4ODAzJkz9cc6efIkhw4dIjAwEHd3dyZMmEBeXh4FBQXs3bsXgC5d\nutCwYUNmzpyJVqtl+/btrF27lsGDB1d7nbt27YqlpSXz5s2juLiYiIgIDhw4UCutdU1tnO9i4Kii\nKN/IVIMSSe0RQnD+/Hn27NlD586diYiIMLUkAMyszXAd7KpfzvjDdM733IQEdmdlkV5UxK/+/sYx\n2q8fPP00fPYZuLjAP/8JVfQWmRIhBF8e+JLdCbtZe24tYS3D0NgYdrhNSaIeQI37LjR8lkOJpFZU\nF4I1Z84cIiMjcXZ2ZvHixfTv37/KtvHx8Xz77bccPXoUNzc3fQ/y4sWLURSFr7/+Gi8vLzQaDePH\nj2fu3Ln6DFYACxcuxN3dnSZNmrBt2zY2bdqkz45SHo1Gg6OjI0uWLKF79+5V6snKyrolY8iqVat4\n7733qrscd8QHH3xAp06daNmyJW3atCEgIIB3330XUHvTp0+frm/78ccfY2try4wZM/jtt9+wtbXl\nk08+qfX2UgoKCpgwYQIuLi54eHiQlpbGp59+CqhZatasWcPRo0fx9fXF1dWVUaNGkZ2drd8WExND\ns2bN8PLy4vfffwfA0tKSyMhIoqKiaNy4Ma+//joLFy6kRclI8ao+K5aWlqxYsYKffvoJjUbDsmXL\nCC9X6bg6rXWNUlO8p6IoL1W23tgZTxRFEaaKTZVI7oQjR47oXzm6ubmRlJRUafyaKchPzGe/1351\nwRx6XOthkkGYvY4dY0NmJgDftGzJ/xkzNv76dRgwQO0J790bWrc2nu1a0v5/7TmWqmaCiRwUSVir\nMH36M0Px7rsQEKCGoDg51dxeYjgURUEIYZTAf/kbaxzi4uJYsGABkyZNAmDlypWEhobqHfg1a9bQ\ns2dPUlJS9M6k5N6kuu9vbSpc/gz8DuyXqQYlktrTtm1bGpVUc0xNTeXo0aMVBoSYErMGZmXf/mK4\ntu2aSXQ8U67HZ016OltKHHGjYG8PGzao9dTroeMN8IxfWYjMpO2TaPt1W76J/sagNj/9FMLDwdoa\nomVFB4mkzsjJyWH58uVER0dz8uRJAPLz8/WOd+lgy/DwcH0vr+T+pDY932HALMBKCOGrKEp74CMh\nROXJJA2EfCqX3IsMHjyYJUuWAGBnZ0fXrl3ZuNFwg+Zuh0ufXKIwqRDNsxqcg5wxb2iY2LbqOJWb\nS5uDB/XLfTQaIh99FDNTVJ4sKlJHHdYjtlzcQsjCEAA0DTSsHbKWzp6dsTAz3FuKvDzV+d69G7p1\ng/Xr62Uh0AcC2fN9f5OZmUl0dDQhISGmliIxAHfV8w1MBgKBawBCiKOAYRIfSiT3Gc+UG9zXpk2b\neuN4A/i850PL+S1pHNrYJI43gL+tLU3LpQub6O1tXMe7uBjmzlVjwL291QqY9YgezXpgY6GmCMvI\nz6CJXRODOt4AtrbwxhuQkKC+GJCOt0RiGPbs2UPPnj1NLUNiAmrjfGuFEFk3rZOPxxJJLSjvfB8+\nfJicnBwTqrmV/IR8kr5N4uyrpknqrCgKzzg7A9DM2pr0m1JwGRwzMzWp9SuvwJkzaun5eoS1hTU9\nfXoC0NCyIafTT1OsK+Z6wXWD2u3dW8Z7SySGJjQ0tM6rX0ruDWrjfJ9QFGUIYK4oSgtFUeYBew2s\nSyK5L3B3d2fQoEH85z//YePGjRQUFLBr1y5TywJAV6jj6ONHubbjGo49HBE60zxTj2/WjNOdOxPb\npQt+DRrwZWKicQr//PknjBqllnWMjQUHw5Zvv1Pee+w9tr20jagXovj52M+4znI1eNx3KadPq0VA\nJRKJRFJ31Cbm2xZ4D3i6ZNVGYKoQIt/A2m7WIePRJPcseXl59OrViyNHjhASEkJERIRRqxdWhaEz\nZ9yOjkcPHiRXp+NZjYZZfn7YGii/qp5ffoGXSpI5Pf447NgBly6Bj49h7d4hh5IOceLKCZ72e9rg\npeYzMtQonJwcNQw+KwtKCuRJjIiM+ZZI7l2q+/7W6HxXcUBvIUTcXSu7PZvyxiC5p9m+fTuBgYHY\n2tqaWkqlaLO0mDUww8zaNOkQUwoKcLOyMt7DQGoqNGmizisK+Pmp3uaJE1CSpeZBRQhwd1cvEcCe\nPergS4lxkc63RHLvcscDLhVF6aooygBFUVxLltsqirII2G0AnRLJfU3Pnj3rneMthODiuxfZ12wf\nu512k7463WRamlhbG7cX3s0NSks/C6EW27l8+Z5wvNPz0onNjDXY8RWlYsGd9bMbqvUAACAASURB\nVOsNZkoikUgeOKp0vhVF+Qz4EQgH1imKMgnYBPwJyMzvEskdIITg1KlTfPfdd6aWAqhP5mkRaRQk\nFACQsdl01S4BcrRa1qSn80ZMDLmVlCquc559tmz+7Fl1AGY9Znf8bgK/C8TvCz9WnF5hUFu9epXN\n//BDvUsEI5FIJPcs1f3S9AE6CCEGo8Z7TwB6CCHmGjveWyK5H9DpdDz88MP06tWL6OhoCutJ7e5W\n37bSz2euzzTOYMdKEELQ/cgRxp0/j42ZGVpj6Ch1vhVFDXQuLFRjv2/cMLztO8DOyo6nmj9FzBsx\nvNPtHYPaCg4um09KUpPCSCQSieTuqc75vlHqZAshMoGzQogY48iSSO4vCgsLef/997GwsCAzM5Mv\nvvgCKysrU8sCwKGrA+aO6uDGgoQC8k7lmUTH/507x1+5uZzPz8fNygpHY6Tg6tIFliyBtDQ1yLlx\nY3jnHdXbrGcMXzWcDt904NPdn7IzbqfB7Tk7q5fH0REGDACdzuAmJRKJ5IGgOufbT1GUyNIJ8Llp\nWSKR1BJLS0uWLFnCiRMnyMnJYe/e+pOt08zSDNvWZbHoKYtSTKKji729fn5DhpHCXywsYOBANc57\n1Cg128nBg+rgy3qGl4OXfn59zHoOJx9md7xhh99EREB6OixbBs2bG9SURCKRPDBU53z3A2aXm25e\nlkgktURRlAoFd7766ivefPNNCgoKTKiqDOumapVJC40Flo6mKbH+jEajn9+Wmcmzf/3FRWOGf7Rr\nB+U01Deeeajs8/PTsZ8YsmIIh5MPG9SmhwdcuQI//QSDBqmOuEQikUjujirf6wohdhhTiERyv9Or\nVy/+97//ARAVFcUHH3xAYWEh1uXKq5uKVt+2otmEZth3tEcxM03eb68GDfC3teV0Xh5aoKOdHa6W\nJngQuHwZNm2CsLB6lfmki2cX7K3suV54HZ3QsXrQalo1blXzjnfJqFHQsCE88wzUg4+qRCKR3DYj\nRozAy8uLjz76yNRSgNpVuJRIJHVAUFCQvpRwbm4uw4cPx75cqIUpsdRY4tDJAcVMoehqEbpC0wT4\nlu/9ztPpsDN26eUXX4S2bSEqCq5dM67tGrA0tyS4edkoyA0XNhjF7rp18Pvv8MorUE8+rpIHEDMz\nMy5evFhh3ZQpUxg2bFil7QsLCxk5ciQ+Pj44OjoSEBDA+nI5M4cNG4aHhweOjo60bt2aH374ocL+\nPXv2xMbGBgcHB+zt7fH396/7kzIANZ337bY9c+YMwcHBODk50bJlS1atWmWM07jvkc63RGIkHBwc\n6FZSqcTHx4dLly6ZVtBNJH2bxOGuh9nnvY+cv3JMoqG3RkMXe3smeXvzopubcY3n50OfPvDVV6q3\nWQ/jvp9u/jQ+Tj78M+CftGrUiojTEfx89GdTy5JIDE5VNQCqWq/VamnWrBm7du0iKyuLjz76iOef\nf574+HgA3n33XeLi4sjKyiIyMpL333+fI0eOVDjuV199RXZ2NtevX+f06dN1f1IGoKbzvp22xcXF\n9OvXj759+5KZmck333zD0KFDOX/+vLFP675DOt8SiRGZPXs2Z8+eZdOmTRw6dIiwsDASEhJMLQsA\nKw8rfD/xpXt6dxw6OZhEw1MaDfsDAnhKo+HX1FTaHDjA9sxMwxsurWo5aBCMH68W3amH/F/A/3Fx\nzEVGdx7NgGUD+O7wdwgMrzUqCvr2VZPB7NtncHMSyS3cbgpUW1tbPvzwQ7y81IHKffr0wdfXl+jo\naAD8/f2xLAlrE0KgKAoXLly4Y5vBwcFo60Ey/JrO+3banjlzhuTkZMaOHYuiKAQFBdG9e3cWLlxY\nqe0ZM2bQtGlTHBwc8Pf3Z9u2bQAkJyczYMAAXF1d8fPzY968eRX2S0xMJDw8HFdXV1xcXBgzZgwA\np0+fJigoCGdnZx599FHWrFlTYT9fX19mz55Nu3btcHZ2ZvDgwfoUvkeOHCEgIABHR0cGDRpEfn7F\nDNlVaTUWNTrfiqK0VBTlO0VRNiqKsrV0MoY4ieR+o1OnTrRs2ZLJkydz8OBBXnjhBZydnU0tC4DG\noY1xftIZ8wbmppbCgexsnCwsWNC6NY85ORneYKtWYF5y3vHxsHQpTJ4MsYarInknmJuZoygKD7s8\nzJV3rvDHC38wvP1wg9sdPhzWrIGrVyHFNMlwJJK7IjU1lZiYGNq0aaNfN3r0aBo2bIi/vz8eHh70\n7t27wj4TJ07E1dWVxx57jB07qh4Gd/nyZQB9WGFdERYWhrOzMxqN5pa/ffv2rdUxKjvv6tqeO3dO\n37ayhw8hBCdOnLhl/blz55g/fz7R0dFkZ2ezYcMGfHx8EEIQFhZGhw4dSE5OZsuWLcydO5dNmzYB\nav2L0NBQfH19iY+P5/LlywwaNAitVkvfvn3p1asXaWlpfPHFF7zwwgvExFTMeL1s2TI2btxIbGws\nx44dY8GCBRQVFdG/f39eeuklMjIy+Mc//sGKFStq1GpUhBDVTsAx4DUgEAgonWrar64nVapEIjEk\nOp1O5MbkigvvXxBpa9NMLce4hIUJofZ5C9G0qRD//rcQly6ZWlW9YPz4skszerSp1Tw4lPzu1Yvf\n2EkXLwq2bbtlmnTxYq3bV9W2NiiKIi5cuFBh3eTJk8WwYcNq3LeoqEiEhISI11577ZZtOp1O7Nmz\nR3zyySdCq9Xq1x84cEDk5OSIwsJC8fPPPwt7e3txsRL9mzZtEs8//7wYMmSIWLhwYY1ali9fXmOb\nuqK6865N26KiIuHn5yc+++wzUVRUJDZs2CCsrKxEr169btn//Pnzws3NTWzevFkUFRXp1//555/C\n29u7Qttp06aJl19+WQghxN69e4Wrq6soLi6u0GbXrl3C3d29wrrBgweLKVOm6Jd9fHzEokWL9Mvj\nx48Xr732mti5c6fw9PSssG+3bt3EBx98UK3Wuqa6729twk60QoivhRAHhBDRpZMhHgQkEolpOR52\nnAMtDhD/cTxJX9WPQjNFOh0FxqjwEhJSNh8YCDNngre34e3eIUIITl45yey9s5mweYJBbZXLkskf\nf0BxsUHNSSS3YG5uTlFRUYV1RUVFWFpasmjRIuzt7XFwcKBPnz4V2gghGDp0KNbW1reEO4Aa292t\nWzcSEhL4+uuv9es7d+5Mw4YNsbS05MUXX6R79+5ERUXdsn9ISAjm5uaMGzeOoUOHApCVlUVERATT\npk2r0DY7Oxs7OzvOnz/PypUrmTp1KocPGyZdaE3nXZu2FhYWrFq1irVr1+Lu7s7nn3/OwIEDadq0\n6S3H8PPzY86cOUyePBlXV1eGDBlCcnIycXFxXL58GY1Go++5nzZtGleuXAHUkBNvb2/MzCq6o0lJ\nSfpwmFK8vb31bxlKcSs3NsjW1pacnBySkpLw9PS8Zd/KtLq5uem1GpPaON9rFEX5l6Io7oqiaEon\ngyuTSO5zduzYwTvvvEP79u05ePCgqeUA4DrQVT+fcyTHZKXmAaKuXiX8xAlc9+4l6upVwxss73xv\n3VrvPcyk60n0WdSHmIwYejTrYVBb3buXpRm8eBF++cWg5iSSW2jWrNktg9RjY2Px9vZmyJAhXL9+\nnezsbNatW1ehzSuvvEJ6ejoRERGYm1cdUqfVam+J+S6PoihV3g+PHj1Kx44d9culmUNufljYunUr\nQUFBrFmzBk9PT958801mzZpVpc3evXvrHypunm5+yLiZ2p53TW0feeQRtm/fTlpaGn/88QcXLlwg\nMDCw0uMMGjSIXbt26QdsTpgwAS8vL5o3b05GRgYZGRlkZmaSlZWlj9/28vIiPj4e3U0dLB4eHreM\nh4qPj7/Fqa4Md3d3EhMTb9m3Mq1xcXF6rcakNs73S8C/gb1AdMl0yJCiJJL7HSEEERER/PXXX3z2\n2We0b9/e1JIAcBvihoWzGrdYmFxoslLzx3Ny+C4pif3Z2bzcpAn9XVwMb9TfHx5+GPr3h//8R/Uw\nX3oJKhmoZGrOXT3HouOL8HP240nfJwltGWpQe9bW6uUpJTfXoOYk9ZDJvr6Inj1vmSb7+ta6fVVt\na8PAgQP5+OOPuXz5MkIINm/ezNq1axkwYECV+7z66qucOXOGyMhIrKys9OvT0tJYunQpubm56HQ6\nNmzYwJIlSwgOVlN5ZmVlsXHjRgoKCiguLua3335j165dFQqllXLq1Cn8/f1RFIXIyOqLfxcUFGBl\nZcVbb71FYGAgiYmJ+FZzTaKiovQPFTdPNz9k1Oa876Tt8ePHKSgoIC8vj1mzZpGSksLw4cNvaXfu\n3Dm2bdtGYWEhVlZW2NjYYGFhQWBgIA4ODsycOZP8/HyKi4s5efIkhw6pbmRgYCDu7u5MmDCBvLw8\nCgoK2Lt3L126dKFhw4bMnDkTrVbL9u3bWbt2LYMGDar2fAC6du2KpaUl8+bNo7i4mIiICA4cOFCt\n1poeUOqcquJR6tuEjPmW3Ec888wzAhCAWLlypanlVOB4+HGxjW1iG9tE7EexJtGwNDVVHyfa5dAh\n4xnW6dS/b74pRP/+QsyfL0RKivHs15KpO6YKJiOYjBgWUXPMa12weLEQb7whxLp1QuTkGMXkAw/1\nKObb1Ny4cUOMHz9e+Pj4CCcnJxEQECDWrl1bZfu4uDihKIqwsbERdnZ2ws7OTtjb24tFixaJtLQ0\n8cQTTwhnZ2fh6Ogo2rZtK3744Qf9vmlpaaJz587CwcFBODs7i65du4otW7ZUaic5OVmMGDFCLF68\nWKSnp+vXX7p0qUJ88rVr18TGjRsr7Pvpp5+K3NzcO70kt33eQgjx7LPPimnTptWqrRBC/Pvf/xbO\nzs7C3t5e9O7d+5a4+1L++usvERgYKBwcHESjRo1EWFiYSE5OFkKo12jw4MGiSZMmQqPR3HI9ExIS\nxHPPPScaNWokXFxcxNixY4UQQpw6dUo88cQTwtHRUbRp00asXr26gk1fX98Kxyk/BuDQoUOiQ4cO\nwsHBQQwaNEgMGjRIH/Ndnda6pLrvryJqeK2sKIol6oDLx0tWbQe+EUIUVbmTAVAURdSkVSK5V3j3\n3Xf18YD//Oc/mT9/PoDxn74r4djTx8jcpKb3c3zMkQ47OxhdQ0ZRES579qBDfT13JjCQRpaWaExR\n8bIecvDyQQK/V1/9Olo7MqzdMOKz4lk9aLVR7OfkgKKolS8lhqMk1MEoJWflb2zdEhcXx4IFC5g0\naRIAK1euJDQ0VJ/ecM2aNfTs2ZOUlBRatGhhSqkSA1Hd97c2YSdfo2Y4+apkCihZJ5FI7pDyry9/\n/fVXXF1d2bt3rwkVldHsg2Y0bNcQr3974TPFxyQaNJaWdC4pp6gD2h06xI56VnHSlHR074jGRh16\nk1WQhblizgePf2Bwu4sXw+OPQ5Mmali8RCK5lZycHJYvX050dDQnT54EID8/X+94lw62DA8P5/ff\nfzelVImJqE3P9zEhRLua1hka+VQuuZ8oLCzE2dmZvDw1pnrfvn387W9/M7Gq+sWk2Fg+KhkMM9zN\njZ+MXd75r79g9WrYvBkmToRevYxrvwYGLR/E0pNLAZgZMpN/d/+3wW3u2KEWAu3RQ/Z6GwPZ831/\nkJmZSXR0NCHlB3VL7nvutue7WFEUfZ1lRVGaA/U7DYBEUs+xsrLi8ccf1y9XVrTAlAghyD2dS+K8\nRPLOmWbQ5dOasqRKcQUFxhewbRtkZsKECfDYY8a3XwNP+z2tn9+dsBu4/SqAt8sTT6hpB6XjLZHU\nnj179tCzZ09Ty5DUI2rT8x0M/ARcBBTAGxghhDBqLU75VC653/jiiy9YtmwZwcHBPP/887i5uWFj\nY4Otra2ppXFu9Dmurr2K81POeI3zouHDxve2inQ6fklNJdjJCa8GDTiak0NjS0u8GzQwrOGcHFi2\nTO3xzshQE1vXQ5KuJ/H94e95wvsJDicfZuulrcRmxnL8teMoimE7S4WAI0fA1RUqSfkrqSNkz7dE\ncu9S3fe3Rue75ADWQCtU5/uMEMLo3VDyxiC5X/nf//7Hd999R0xMDOvWreOxetDLWpxXjJmNmcGd\nuNrwTVIS7168iJuVFZ/5+dGnUSPDGszKgkaNyvJ8p6WpyzpdWQn6eoRWp2XsH2N53PtxnvR9EpeG\nhk3LOHQoLF8OBQUwZQp8+KFBzT3QSOdbIrl3uSPnW1GUJ4UQWxVF+Xtl24UQEXWosUbkjUFyv7J1\n61asrKwIDAysMSerqRBCmMwRv3TjBpZmZniWVnkxBt26wb596vyTT8L58zB9OgwebDwN9ZSXXior\nsvPWW/Df/5pWz/2MdL4lknuX6r6/FtXs9wSwFQirZJsAjOp8SyT3K08++aSpJVTK9aPXiZ8ez7Ud\n13Dq6USbxW1MosPHxsb4RkNCypzv/HxYvx5atza+jjsguyAbB2sHgx1/4MAy53vLFoOZkUgkkvuW\n2sR8+wohYmtaZ2jkU7nkfken03Hs2DGaNWtGI0OHVtSCEwNOkL4iHYAGDzXgbzGmzcaSUVTEtmvX\neMjGhnZ2doY1tmuXmlMPoHlzqKbsdH0gX5vPxM0T2Ry7mZzCHC6OuWiwNxU5OeDsDFqturx/P3Tp\nYhBTDzyy51siuXe522wnKypZt/zuJEkkkvJMnz4dNzc3Bg8ezNmzZ00tBwD/X/xRrNT7Rv75fAqS\nTJBxpITZCQk027eP2QkJZBQZob5Xly5lKT3i4iApCW7cgOvXDW/7DrA2t8be2p6pPacS80aMQUOE\n7OwqDrKspsq1RCKRSCqhSudbUZTWiqKEA46Kovy93DQcMHC6AYnkwWH79u2cPHkSjUbDd999R7du\n3UwtCQBzW3McuzvqlzO3ZJpEx5bMTKZeukSuToe9uTlBzs6GN2plBbNmQWQkLFwIL76opvZYu9bw\ntm+TqJgo/Of7M3XnVNbFrMPCrLpowrohPFz96+Iis51IJBLJ7VLdXboVEAo4UTHu+zowypCiJJIH\niUWLFvHrr78CsHnz5nqR7aQUuwA7rm1TK0umLEihybAmRtfQwsaGrJLMI7uysijQ6bA2q81Lu7vk\n1VfVv3v2wNixapJrB8PFUt8pjtaOnL2qvi3ZHLsZrU5LzNUY/F0MV5Ro7Fj1eeSRR8AY/wqJRCK5\nn6jS+RZCrAZWK4rSVQixz4iaJJIHiuDgYL777jsA1q9fT/v27enYsSPe3t4mVgZoy2aLrhoh3KMS\nmjVowEM2Npy/cYMbOh1vxsTwvKurcXrAAbp3N46dOyTQMxA7KztyCnO4dO0SjWY2olWjVuwfuR8z\nxTCesZeX2uN94YKaDr1TJ3WSSCQSSc3U5s78qqIoTqULiqI4K4ryY20NKIrSS1GUM4qinFMU5T/V\ntBugKIpOUZSOtT22RHI/UD7byYEDB/jqq69IS0szoaIy/Gb50eLLFnQ+1ZlOR0znXYWUc7QPXr+O\nvanybV+8CJcvm8Z2FViaW/K4d1m11A8e/4ADow4YzPEuZepU9WXA3r1qCnSJRCKR1I7a3J3bCiGu\nlS4IITKBDrU5uKIoZsCXwDNAG2Cwoii35OtSFMUOeAPYX5vjSiT3Ey4uLrRv316/PHbsWDrVk25E\nxVzBc7QnDf0blo7cNomO8s63pZkZnYwd/rFoEfj5qb3ge/ca13YtCPEN0c8fuHzAKDb//W9ITFTT\nDgYGGsWkRCKR1CkjRozgQxNUCquN822mKIr+l09RFA3Vx4qXJxCIEULECSGKgCVAv0raTQVmAKZL\npyCRmJDg4GD9/OHDh02o5FauR1/nwvgLHOp4iJSfUkyiIcjJCRszM4KcnHiucWPjC2jdWu3qTUqC\nf/zD+PZrILi5+vnxb+xP68atSctNY/359Qa1aWMD9aAAquQBwcfHB1tbWxwcHHB3d+fll18mLy/v\nto9TWFjIyJEj8fHxwdHRkYCAANavL/uuDBs2DA8PDxwdHWndujU//PBDhf3PnDlDcHAwTk5OtGzZ\nklWrVt31uRmDms77Zmq6Dvb29jg4OODg4IC9vT0WFhaMHTvW0Kdx/yCEqHYCXgROozrIU4EzwLCa\n9ivZNxz4ttzyUOCLm9q0B5aVzG8DOlZxLCGR3K8cOXJE/PjjjyI2NlYcO3ZMzJ49Wxw7dszUsoQQ\nQqQuTRWxk2PFtd3XRHFhscl05BcXi8zCQhFx5YoYffasWJqaanijublC9OghhIWFEDY2Qty4YXib\nd0CxrlgkZiWKouIi0fGbjsJxmqN4bslzQlusNajd3FwhfvpJiKefFuLHHw1q6oGk5Hevxt/aupjq\n+2+sj4+P2Lp1qxBCiKSkJPHII4+IiRMn3vZxcnNzxZQpU0R8fLwQQoi1a9cKe3t7ERcXJ4QQ4tSp\nU6KwsFAIIcTZs2dFkyZNxOHDh4UQQmi1WtGyZUsxZ84codPpxNatW0XDhg1FTExMXZyiQanpvG+m\nuutQ2bHt7e3F7t27DSPegAwfPlx88MEHBjl2dd/fGnu+hRC/AAOAVOAK8HchxMJa+vaV9Yvo31sr\najLaz4G3a9hHIrmvad++PSNGjGDu3LmEh4cTExODWT1JI+H6vCs+k3xw7O6ImaXpNFmbmbEsLY1v\nkpLwadCAjoYutANgawupqWpFmRs3YMcO2LoVTpwwvO3bwEwxw9PBEwszC37q9xPp49NZOXAl5maG\njY0PDoYRI2DjRjh1yqCmJBJ92Ju7uzvPPvssJ0q+h2ZmZly8eFHfrrpQAltbWz788EO8vLwA6NOn\nD76+vkRHRwPg7++PpaWl3p6iKFwoKbJ15swZkpOTGTt2LIqiEBQURPfu3Vm4sGqXKDg4GK1WW+V2\nY1HTed9MddfhZpYtW4arqyvdqxicPmPGDJo2bYqDgwP+/v5s27ZNvy05OZkBAwbg6uqKn58f8+bN\n029LTEwkPDwcV1dXXFxcGDNmjH7bmTNnCAoKwtnZmUcffZQ1a9bot/n6+jJ79mzatWuHs7MzgwcP\nprCwEIAjR44QEBCAo6MjgwYNIj8/v9Za65JahY8IIU4qipJGSX5vRVGaCSHia7FrItCs3HJTIKnc\nsj1qLPj2Eke8CWqGlb5CiFvevU+ePFk/37NnT3r27Fkb+RLJPcOMGTP4/PPPTS2jUoQQ5J7IRZuh\nxekJp5p3MACjPDwY5eFhXKMhIRATo8737QsdO8J776l59uohbd3aGs3WqFFqhUuA48eNZva+Zfv2\n7Wzfvt3UMuo9CQkJREVFMWDAgLs+VmpqKjExMbRp00a/bvTo0SxYsIAbN27QsWNHevfuDZQ5/+UR\nQugfAm7mcsngbAuLus29HxYWxu7du/XjcMr/7dGjB5GRkTUeo7LzvpmqrsPN/PLLL7z44ouVbjt3\n7hzz588nOjoaNzc34uPjKS5JHSuEICwsjP79+7N06VISEhIICQmhdevWBAcHExoaSkhICL/99htm\nZmYcOnQIAK1WS1hYGCNHjmTTpk3s2rWLfv36ER0dTYsWLQD1gWDjxo1YW1vTrVs3FixYwIgRI+jf\nvz/jxo1j9OjRrFq1isGDBzNhwoQatdY5VXWJi7JXUX2BGCAXiAV0wMma9ivZ1xw4D3gDVsBRwL+a\n9tuADlVsq/NXAhKJpHYkzEsQ2xtsF9vYJvY/tN/UcozLihVCgDp17GhqNbVCW6wVBy8fFF/++aVB\n7cTFlV0aGxsh8vMNau6Bg3oUdjLp4kUx6eLFOlu+XXx8fIS9vb1wdnYWPj4+4vXXXxf5JR84RVHE\nhQsX9G1rG0pQVFQkQkJCxGuvvXbLNp1OJ/bs2SM++eQTodVq9e39/PzEZ599JoqKisSGDRuElZWV\n6NWr1y37b9q0STz//PNiyJAhYuHChTVqWb58eY1t6orqzvtmKrsO5YmLixMWFhbi0qVLle5//vx5\n4ebmJjZv3iyKiooqbPvzzz+Ft7d3hXXTpk0TL7/8sti3b59wdXUVxcW3hjru2rVLuLu7V1g3ePBg\nMWXKFCGE+llZtGiRftv48ePFa6+9Jnbu3Ck8PT0r7NetWzf9Z6U6rXdCdd/f2rxDngr8DTgnhPAF\ngoE9tXTsi4HXgY3ASWCJEOK0oihTFEUJrWwXZNiJ5AEnKyuL1atX88YbbxjsldftYt3UGpGv9vrk\nX8pHe910r1Ev3bjB5wkJ9PnrL+YmJhreYFBQ2cjCo0ch0zSVPmuLTujwmevD8FXDOXf1HEXFhsvP\n3qwZ+Pio8zduwEcfGcyURMLq1avJyMggNjaWefPmYW1tXW37RYsW6QcG9unTp8I2IQRDhw7F2tq6\nQqhDKYqi0K1bNxISEvj6668BtQd71apVrF27Fnd3dz7//HMGDhxI00rKvIaEhGBubs64ceMYOnQo\noN7bIyIimDZtWoW22dnZ2NnZcf78eVauXMnUqVMNNvC+pvO+mcquQ3l++eUXevToUWVdCj8/P+bM\nmcPkyZNxc3NjyJAhJCcnAxAXF8fly5fRaDRoNBqcnZ2ZNm0aqampJCQk4O3tXWn4ZVJSkj58phRv\nb2/9mwYANzc3/bytrS05OTkkJSXh6el5y3610VrX1Mb5LhJCXEXNemImhNiGOkiyVggh1gshWgkh\nWgghppesmySEuKVOsxDiSVFJuIlE8iAxa9YsPv30U5ycnPAp9WxMjMtzLjRs1xAAoRVk7cwyiY7r\nWi3fJCXxfXIyNmZmDC13gzUYzs5qBRkXF3j+eTW4+ccfoR6GB2h1Wv5M/JNhjw7jnW7vMPfZuVia\nWxrUZvmPaG6uQU1JHnBEJWEfoDpX5TOfpKSoWZmGDBnC9evXyc7OZt26dRX2eeWVV0hPTyciIgLz\nauoGaLXaCrHOjzzyCNu3byctLY0//viDCxcuEFhFrs2jR4/SsWNZ6ZLSLCNFRRUfiLdu3UpQUBBr\n1qzB09OTN998k1mzZlWpqXfv3hWyjZSfbn7IuJnanvfN3HwdSlm4cCHDhw+vdt9Bgwaxa9cu4uLi\nAPRhHl5eXjRv3pyMjAwyMjLIzMwkKyuLtWvX4uXlRXx8PLpKigh4eHiQAtP0LAAAIABJREFUkJBQ\nYV18fPwtjvXNuLu7k3hTh018fMUI6qq01jW1cb6vleTh3gn8pijKXCrUvZNIJHXFtGnT+PLLLzlw\n4ACenp74+vqaWpIe55CyXNtpq01TBOhkbi7TExI4lZfHn9evo6njWMoqWbsWUlLUqjL9+8OmTWq0\nRT0j4nQE3X7sxrQ90/ju8HdGsTlmjBoGP348DB5sFJMSEzDZ15fJ5e5Hd7tcl3To0IFFixah0+lY\nv349O3bsqLb9q6++ypkzZ4iMjMTKykq/Pi0tjaVLl5Kbm4tOp2PDhg0sWbKkQirY48ePU1BQQF5e\nHrNmzSIlJaVS5/PUqVP4+/ujKEqNMdgFBQVYWVnx1ltvERgYSGJiYrX3/qioKP1Dxc3TzQ8ZtTnv\nm6nNdQDYu3cvSUlJ1cbenzt3jm3btlFYWIiVlRU2NjZ6pz8wMBAHBwdmzpxJfn4+xcXFnDx5kkOH\nDhEYGIi7uzsTJkwgLy+PgoIC9pbUWOjSpQsNGzZk5syZaLVatm/fztq1axlcww2oa9euWFpaMm/e\nPIqLi4mIiODAgbK6CNVprWtq43z3A/KAt4D1wAUgzCBqJJIHHFtbW65dU2tabd682cRqKmJuV3YT\nyliXYRINneztcSi5GSYWFHDuxg2KjeEEu7qCmZma2iMlBRYvVsNR6hlBPmWa9ifs5+djPzNuw7gq\newzrgv79IToaZsyALl0MZkbygKNUk1R+zpw5REZG4uzszOLFi+nfv3+VbePj4/n22285evQobm5u\n+h7kxYsXoygKX3/9NV5eXmg0GsaPH8/cuXMJDS2Lkl24cCHu7u40adKEbdu2sWnTJn1WkPJoNBoc\nHR1ZsmRJlVlAQA1F0Wg0FdatWrWK9957r7rLcdtUd96g9qZPnz4doFbXAdSQk/DwcBo2bFil3YKC\nAiZMmICLiwseHh6kpaXx6aefAmqWmjVr1nD06FF8fX1xdXVl1KhRZGdn67fFxMTQrFkzvLy8+P33\n3wGwtLQkMjKSqKgoGjduzOuvv87ChQv1gy2r+qxYWlqyYsUKfvrpJzQaDcuWLSM8PLxWWusapbqb\nsqIo5sAGIURIlY2MhKIowpA/IBJJfeDEiRM8+uijANjY2PDkk0/y0ksv8Y96UNgl+2A2R3ocwa69\nHZqnNfhM8UExM/4QjX7HjxN59SoATaysGOXuzkf16A2BqenwTQeOphwFoJNHJ1549AVe6/Qa1hbV\nx8feDSdOqM8jW7aoNYjefrvmfSQ1U5LFwihfMvkbaxzi4uJYsGABkyZNAmDlypWEhobqHfg1a9bQ\ns2dPUlJS9M6k5N6kuu9vtT3fJQMm8xRFcTSIMolEUoE2bdroB4rcuHGDHj163PKqz1Q4dHagR2YP\nAv4MwHeqr0kcb6hYar61rS2TjB0XX1Cg5vv+8ENYtsy4tmtBsG/Z56WHVw/e/NubBnW8AeLj1TGp\n06fD668b1JREcs+Sk5PD8uXLiY6O5uTJkwDk5+frHe/SwZbh4eH6Xl7J/UltAibzgeOKomxCTTcI\ngBBiTNW7SCSSO0FRFH1e09Llm19JmhJzW3OETpB7PBczGzNsW9oaXUNwOef7WE6O8dMj/forfPON\nmv/7oYeMbb1Ggn2Dmb1vNgBbYrcYxWbv3uokkUiqxs7Ojrfffpu3S14NZWZm4uLiot/ev3//akNm\nJPcPtXG+15VMEonECAQHB7N8+XJ69Oihz3YiSgoomJrUJamcH3MeC2cLfKb4mMT59re15XVPT7rY\n2/OkszM6IcjWanGqJO6yThECzp+HoiJ4+GH45JOyFIT1iMe8H+PZh56lp3dPmjo25bM9n7Erfhcr\nnl9h8MwnoF6m/HywsTG4KYnknmbPnj306tXL1DIkJqDKmO/bqGJpFGQ8muRBIS8vD0VROHHiBIsW\nLWLz5s289tpr/Otf/zK1NAqSChBaQYNmDUwthX1ZWUyLj2fntWu87eXFB4YOP9Hp1IGXJfHmHDsG\nbY1XTfJ2EULwzK/P0LJRS0Kah9C7RW+szKvOcHC3LFgAn30G585BeDgsWWIwUw8MMuZbIrl3qe77\nW13P9yqgY8kBVgghwqtpK5FI6ghbW7U3OTk5GVdXV3788ccKuWJNibWHYWOHbwdHCwtecHPjh1at\ncKkmbVadYWYGTz5ZFuc9fTqYm0Pnzmq+vXqGoihsHLbRaPb+/FNNgQ5QQ+0TiUQieaCpruf7iBCi\nw83zpkI+lUsk9YPiG8VcXXeV1IWpmDU0o82iNqaWZDy+/Rb++U913t0dJk+GXr3UUo8POH/+CX/7\nmzrv6QkJCfUyKueeQvZ8SyT3Lnea7URUMS+RSIyMVqslJyfH1DIASJybyKl/nOJq5FWurr6KTntr\nBTJjk1pYyMUbNwxvKKRc1tXsbBg+vN473itPr+Rf6/5Fm6/akFNouM9QQAA4luTFunwZdu82mCmJ\nRCK5p6nO+W6nKEq2oijXgbYl89mKolxXFCXbWAIlkgeZLVu28Nxzz9G4cWN++eUXU8sBwONfHlh5\nqmEeujwdOdGmeyjYmpnJowcP0vLPP1mdnm54g82bQ2lO8dxctbsX6mW1y1I2XdxEM8dmLPr7Imwt\nDTdA1sJCHYdayhdfGMyURCKR3NNU6XwLIcyFEA5CCHshhEXJfOmygzFFSiQPIhkZGRw4cICcnBy+\n//77ejHgEsDSwRLNU2XpDzM3Z5pEx8UbN/g0Lo4LN27QysaGt7y8jGN41Ci1lvpPP8H69dCjB0yc\naBzbt8HZ9LOMihzF+vPrOZx8mHZN2mGm1Kao8Z1T/sWAnZ1BTUkkEsk9S21SDUokEhMwc+ZMZsyY\nAYC/vz8DBgwwsaIynIKdSFmQAsCVJVfwfs/b6BqcLSzYdu0aOiA6J4drRUWGTzcIZY723r1w+jRM\nmgTVlI82FYXFhXx/5HsAsguy0Qkdxbpig6YbfPllcHNTnfCWLQ1mRiKRSO5pDNsNIpFI7piQct2I\nmzdvJjU1laSkJBMqKqMorUg/n3sml+K8YqNrcLa0JMDeHgAd8G1SEvuzsownoFs3mDEDnnoKbI2f\n77wmHnF9BNeGrgBcvXGVx356jMafNeZq3lWD2fTxgdGjVcf71CkoKeInkUgkknJI51siqad0794d\n65KcbWfOnKFly5ZERUWZWJVK07FNafpWU1p+05IuZ7tgbmtuEh3lq13OTEjgRG5uNa0NiBCQl2ca\n21WgKEqFUvN+zn5cGnuJRraNDGp33Tpo2hRCQ2HfPoOakkgkknsS6XxLJPUUGxsbHnvsMf3y7Nmz\nGTlypAkVlaGYKTz034fw+D8PbJqbrpRhSDnnu5GlJSM9PIwr4K+/1IwnXl7w/vvGtV0LyjvfV3Kv\n4GzjXE3ruqFTJ9i5Ey5ehHrycZVIJJJ6hXS+JZJ6TPnQk61bt5pQya1or2tJX5NOzNgYLn992SQa\nujs40MDMDFszM/xsbLhRbOTwFwsLaNcOtm2D2bONa7sWhDQv+/xcL7yOEILL2ZcxZD5nNzfw85M5\nviUSSf1hxIgRfPjhh6aWoUc63xJJPaZ379689NJL/Prrr8yaNYuDBw9y4sQJU8sCIHNLJolzE7Fy\nt8LpCSeTaGhgbs7+jh3J6NGDn1u3ZnV6OivT0oxj/KOP1F7vd95RY77robfp7eTNqoGrSH0nlSd9\nnuThrx6m3f/akZyTbHDb2dkwfz789pvBTUkeAMzMzLh48WKFdVOmTGHYsGGVti8sLGTkyJH4+Pjg\n6OhIQEAA69ev128fNmwYHh4eODo60rp1a3744YcK+/fs2ROb/2fvzOOirPbH/x6GQXZklEFQECQX\nNC8uiSlqkpqmQClqLmSaeq9pqdm3pPSSlWVy9aZ5yZZbeX+aUioa4IaaGmqmopAbikrsKgiyyjIw\nvz8GBpDNlFnQ83695jXP88w5z+czB2bmc875LGZmWFtbY2Vlhbu7e/O/KS2Rk5PD2LFjsbS0xNXV\nlS1btjTYNikpiTFjxiCXy3F0dOSNN96gokJdu6GpMRQ8OML4FggMmJ49e7JhwwZatWpFz549mTFj\nBn/88Ye+1QLA7kU7eh3oRcfAjlh0t9CbHh6Wlvx65w5P/P47m2/dolxXObePHIFTp6CiAg4eVOf9\nTk3Vjey/wAvdXkBhoaC3Q29+GPcDt96+haOVdt1z/u//oHVreP112LxZq6IEjwmSBia3DV1XKpU4\nOzsTHR1Nbm4uH374IRMnTiQ5ORmA9957j6SkJHJzcwkPD2fp0qWcPXu21n2/+OIL8vLyyM/P59Kl\nS83/prTE3LlzMTU1JTMzk02bNvHaa681qP/cuXOxt7fn5s2bxMbGcuTIEb744gug6TEUPDjC+BYI\nWgBDhgzh/PnznD9/nilTpuhbnTqoKlQUpxbrTf4zrVuT5eVFeM+ejFcodCO0ZlLrt99W+1t8841u\nZD8A49zH0cehj9ZzfQMMHlxddygpSeviBI8Bf9VVytzcnKCgIJwq8/+PGTMGV1dXYmJiAHX6Vlll\nalKVSoVEIuHatWsPLHPYsGEolcq/pKM2KCoqIiwsjOXLl2NmZoaXlxd+fn5s3Lix3vaJiYlMnDgR\nmUyGQqFg1KhRXKhMU9TUGN7LypUr6dChA9bW1ri7u3Po0CEAMjIyGD9+PAqFAjc3N9atW1erX2pq\nKv7+/igUCuzs7Jg/fz4Aly5dwtvbG1tbW3r27ElEREStfq6urqxevRoPDw9sbW2ZPHkypaWlAJw9\ne5a+fftiY2PDpEmTKC6u/fvUkK66QhjfAkELQKFQ4ODgoG816lDwRwGn+5zmV9NfOfXkKb3pYWJk\nhMxIx19nI0ZUH5eVwY0b8MEHutXhASgrL+No8lHKysuabvyAjBgBJuoiqFy4AAaSIVPwECQuS+Sw\n5HCdR+KyxPtu31BbXXDz5k0SEhLo0aOH5tq8efOwsLDA3d0dR0dHRo8eXavPu+++i0KhYPDgwRw5\ncqTBe6elqWNejI2bt3SKr68vtra2yOXyOs9+fn719rly5QrGxsa4ublprnl4eGgM6ntZuHAhW7Zs\n4e7du6SlpbFnzx6ef/75etvWN4Y15YaEhBATE0NeXh779u3DxcUFlUqFr68vvXv3JiMjg4MHD7J2\n7Vr2798PQEVFBT4+Pri6upKcnExaWhqTJk1CqVTi5+fHqFGjyMzM5PPPP2fq1KkkJCTUkrt161ai\noqJITEwkLi6ODRs2UFZWxtixY3nllVfIzs5mwoQJbN++vUlddYkwvgWCFkRWVhY//fSTwQRflt0u\no+BcAaoyFeW55dy9fldvupSrVJzOy+PTpCQ+14X7R+/eUJVtJScHWsBW7JzIObT9V1sW7F1Aer72\nLGJzc3Ua9CpawJxE8AijVCoJCAhg+vTpdKlR/SkkJISCggKOHj3KuHHjNKldQV3k7Pr166SlpTF7\n9mx8fX1JTKw7eThw4ACLFi2iXbt2bNq0qUldahqBTREREUFOTg7Z2dl1nsPDw+vtU1BQgI2NTa1r\nNjY25Ofn19t+yJAhXLhwAWtra5ydnenXr1+9hn1DY1iFVCqltLSU8+fPa9xVXF1dOXXqFFlZWSxZ\nsgSpVIqLiwuzZs0iNDQUgN9//52MjAyCg4MxNTXFxMSEgQMHcuLECQoLC1m8eDHGxsZ4e3vj4+NT\nx399wYIF2Nvb07p1a3x9fYmNjeXEiRMolUrmz5+PVCrF39+ffv36NamrLhHGt0DQQggNDaVTp058\n9913FOorn/U92HrbIn9O/6XmASKzsnjx/Hkib9/mbxY68EGXSuHZZ9XH7dtDSgokJEBsrPZlPwAl\nyhJ62fdi3fPriPl7DB1ba7cqqbNz9fHVq1oVJXgMkEqllJXV3q0pKytDJpOxefNmrKyssLa2ZsyY\nMbXaqFQqAgICaNWqVR13B1D7dg8cOJCUlBTWr1+vud6vXz8sLCyQyWRMmzYNLy+veussDB8+HKlU\nyqJFiwgICAAgNzeXsLAwVqxYUattXl4elpaWXL16lR07dvDRRx9x5syZBx6T+rC0tCQvL6+OXKvK\ngmQ1UalUjBw5kvHjx1NUVERWVhbZ2dksXry4TrvGxhDAzc2NNWvWsGzZMhQKBVOmTCEjI4OkpCTS\n0tKQy+WalfsVK1Zw69YtQO1y0rFjR4zu2blMT0/XuLtU0bFjR80uQxX29vaaY3NzcwoKCkhPT6d9\n+/Z1+tanq729vUZXXSKMb4GgBXDo0CH+97//UV5eTq9evfD19dW3Shpsh1fnjs6OytaLDrdKSxl7\n4QJppaWczs/H09paN4KXLVOXmN+8GWbPBm9vdfClgXHu5jnkwXJe2/0aHxzRzTL03LlgZKReATeg\nf1fBA+K6zJWhqqF1Hq7L6l8xrK99Q23vB2dnZ/78889a1xITE+nYsSNTpkwhPz+fvLw8du3aVavN\nzJkzycrKIiwsDKm04WJgSqWyjs93TSQSSYM+4LGxsfTp00dzXpUZ5N7Jwi+//IK3tzcRERG0b9+e\nhQsXsmrVqgZljh49WjOpuPdx7ySjii5dutR5L3FxcfW6imRnZ5Oamsq8efOQyWTY2toyY8YM9uzZ\nU6vd/Y7hpEmTiI6O1gRkBgYG4uTkRKdOncjOztas3Ofm5mr8t52cnEhOTtZkWKnC0dGRlJSUWteS\nk5PrGNX14eDgQOo9u5/3BolW6ZpUGZQSGBjY5H2bE2F8CwQtgNzcXPbu3UtRUZHGV85QMOtcXWTn\nduRtVBU6yjZSA4WJCe6VJd5LVCqidVVm/sknoVs36NkT9u9Xr36/9ZZuZP8FurbtigR1VojrOdf5\nLeU3NsZtJLdYe+P01FOQnQ3HjsHChVoTI3hMeOmll1i+fDlpaeo89QcOHCAyMpLx48c32GfOnDnE\nx8cTHh6OSVUQApCZmcmPP/5IYWEhFRUV7Nu3j9DQUIYNUxelys3NJSoqipKSEsrLy/nhhx+Ijo5m\n5MiRdWRcvHgRd3d3JBJJg64gVZSUlGBiYsKbb76Jp6cnqampjbo77N69WzOpuPdx7ySjCnNzc8aN\nG0dQUBBFRUUcO3aM8PDwelMytmnTBldXV9avX095eTl37tzhf//7Hx4eHk2O4b1cuXKFQ4cOUVpa\niomJCWZmZhgbG+Pp6Ym1tTXBwcEUFxdTXl7OhQsXOH36NACenp44ODgQGBhIUVERJSUlHD9+nP79\n+2NhYUFwcDBKpZLDhw8TGRnJpEmTGh1jgAEDBiCTyVi3bh3l5eWEhYVx8uTJRnVtbFKhDYTxLRC0\nALy9vTVfDmfOnOH9999ns4HkcDN1NcXIwgikYNXfirLb2gvka4wRNapdvnPtGm/q0tfB1ha6djXI\nXN8AJlITvF29NefDNw5n5+Wd5BRrz01IKlUHXe7bp049+MknWhMleAwICgpi4MCBDBo0CLlcTmBg\nIJs3b6Z79+71tk9OTubrr78mNjYWe3t7zQryli1bkEgkrF+/HicnJ+RyOe+88w5r167Fx8cHULuz\nLF26VJN9IyQkhJ9//pnOnTvXkSOXy7GxsSE0NBQvL68G9c/NzUUul9e6tnPnTpYsWfIQo1I/ISEh\nFBUVoVAomDp1Kl9++aUmT/no0aP59NNPNW3DwsLYs2cPdnZ2dOnSBZlMxmeffQY0Pob3UlJSQmBg\nIHZ2djg6OpKZmcnHH3+MkZERERERxMbG4urqikKhYPbs2RrXmKrXExIScHZ2xsnJiZ9++gmZTEZ4\neDi7d++mbdu2vP7662zcuLGWv3lDaSZlMhnbt2/n+++/Ry6Xs3XrVvz9/RvV9RMdf0FJtFnprDmR\nSCSqlqKrQKANvLy8OH78OAAjR45k6dKlDBo0SM9aqSmIK8DsCTOkFrpdPajJrtu38Tl3DgAHExMO\nenjgrgvf75oUFcHRo+o8e/WskumTdb+vY/5edQqvF7q+wM5JO7Uu89gxePdddfaTMWOgxs684D6o\ndHXQyYxO/MY2L0lJSWzYsIH3338fgB07duDj46NJbxgREcHQoUO5ceNGvUa9oOXT2OdXrHwLBC2E\nETVS2zk5ORmM4Q1g6WGJ1EKKqlxFaWapXnR4xsYGWeVKSEZpKbbNnParSQ4fVuf6/ugjg8ytN8Kt\n+v/n0J+HUFZoPyexlxf8+iv885/C8BY8PhQUFLBt2zZiYmI0Kf6Ki4s1hndVsKW/vz8//fSTPlUV\n6Amx8i0QtBCOHTvGoEGDsLCwYMqUKXz99df6VklDwfkC/gz6kzuH7mAfYE/ndfpZyQm4eBFzqZTn\nbG0Z3aYNZkZGDW5NNisqFZw9C1FRMG8e1JNZQN+oVCqeXP8kbrZuPOvyLL3a9SI6OZpXe79Ke+um\ng5gEukesfD8a5OTkEBMTw/CahbkEjzyNfX6F8S0QtBDKysr47bffcHd3Jzo6mgMHDuDi4sI777yj\nb9UoTi0m99dcWj/bmlbtWjXdQYtklZby/Y0bHMjJwdTIiJ979tS+0OeeUwdcAkRGqn0sDJCqSn5j\nfxzL9ZzrjOg0ggX9F+Bk49R05wckORmCg9W+3wqF2hVFcH8I4/vRIDIyklGjRjV7ER6BYdPY51f8\nJwgELQSZTMaQIUM4ePAg33zzDSNGjKhTkU1fmHYwxXSKqb7VANTZTv4sLuY1R0e8awRhahUPj2rj\ne+tWSEtTRxtOn64b+fdJ1S7Aj+N/xETacOaC5mTnTggJUR9bWupEpEBgUFQFcgoEVYiVb4FA0Gwo\nc5VkhWdREFvAE6uf0Lc6umPfPhg1Sn1sbAyTJ8OECSLBNerin23bQkWFOu93VlZ1YVBB44iVb4Gg\n5SLcTgQCgda5c/wOsYNiofJj6pXthcxWpl+lgAKlEkttb/cWFoJcDqWVwabp6eDgoF2ZD8mtwlsc\nvH6Q/df389aAt+ihqFuEo7no3x+q0uyGhsJLL2lN1COFML4FgpaLyHYiEDxipKens3r1ap5//nnm\nzp2rb3UAsHC3wLyrueb8zuE7etPlRkkJ865cocvvv/PC+fPaF2hhoS7lWIUBVrm8l6BDQYReCKWP\nQx/sLOy0Kuvpp6uP335bq6IEAoHA4BHGt0DQArl8+TJ79uzBw8OD5cuX61sdAGS2MtqObas5zzmg\nvQIujVGuUvFNRgb7c3LILCtjly4CLkHtdjJgALz3HiiVsHgx6Lhk8f1QrCxm0x+buKu8S/bdbF73\nfB2FhUKrMp95pvpYpv/NEIFAINArwu1EIGhh7Nq1SxPAM2jQIKKjo/WsUTU5v+QQNywOAJMOJgxM\nGdhED+3gduIE14uLATjcqxfPtG6tO+EXLsCMGWpj3NcX+vXTnez7oERZgjxYTlFZEQBX37iKm9xN\nuzJL4NVXwdsbhg8HFxetintkEG4nAkHLRfh8CwSPELdu3cLe3h4AY2NjsrOzMTExoVUr/ab4A8j9\nLZezA89qzp9OfhpTJ91nQZlz+TJfZWQAEOjkxAwHB7qYmzfR6/FhzOYx7E7YDairXeaV5BH0TBBD\nXYZqXXZFBdy8afAu8QaBML4FgpaL8PkWCB4hFAoFHh4eACiVSrp3786MGTP0rJUay96WtB3XFvsA\ne7pt6IaxjX6ymY6QyzXHwSkpLL5+XS96GCrPdXpOc3z+1nneGvAW/Ry1u0KfmqoOtFQowEDCFAQC\ngUAviDzfAkELZMSIEcTFqd07vLy82LRpk541UiM1lfLk9if1rQbPtm6NBHXiFRXwXdeuulWgsFCd\n73vPHnWuvago3cpvgpql5rOKshj5xEiMjbT7c2Brq/bEWbUKnLRX00cgEAgMHrHyLRC0QEaMqDae\n4uLiMDIyrI9yWU4Zt366RfrX6XqRbyuT0a+yxLu1VEp8UZFuFVAq1Yb3qFGwYYNuZd8H7m3daW+l\nLilfUFrAxcyLqFQqKlQVWpNpYaF2hReGt0AgeNwRK98CQQtk8ODBdO/encGDBzNixAhKS0u5desW\nHTp00LdqFMYXcsbzDDZDbFBM1G4WjcZY2akTpkZGPGVlxY3SUn7JyeFZXVR3+fVX+PlniI+H+fPB\n0VH7Mv8iEomET4Z9gpWJFcZGxvzn5H/Yf30/q0aswr+7v9blZ2XBmTPw3HNNtxUIBAJtMWPGDJyc\nnPjwww91KtewlssEAsF9YWZmxoULF1i0aBHff/89dnZ2LFu2TN9qAWDexZyBNwfyt8i/0W5aO73p\nMdTWlifMzOh5+jQep0+z5dYt3QjeuBH+/W/44w/YtUt9Tdcr7/fBNI9pjHUfS35pPt3tuhM5OZJx\n7uO0KvPoUXUtIjs7eOUVrYoSPGK4uLhgbm6OtbU1Dg4OvPrqqxQ9wOeqtLSUWbNm4eLigo2NDX37\n9mXv3r2a119++WUcHR2xsbGhW7dufPvtt7X6x8fHM2zYMFq3bk2XLl3YuXPnQ783XZGTk8PYsWOx\ntLTE1dWVLVu2NNg2KSmJMWPGIJfLcXR05I033qCionpnLCQkhH79+mFqasqrr76qC/UfKYTxLRC0\nYNq2bcsrr7zCtWvX+O9//6tvdQCQGEmQmkk15xVl2nNlaIo2Mhmb3d3J9PLiG135fY8ZU3387bfq\n8o5/+xsYaCaJKT2nsPDphfRQ9EAi0W5iDWdntQs8QHa2Qc5JBAaKRCJh165d5OXlcebMGU6dOvVA\nNQ6USiXOzs5ER0eTm5vLhx9+yMSJE0lOTgbgvffeIykpidzcXMLDw1m6dClnz6ozOJWXl/PCCy/g\n5+dHTk4OX331FQEBAVy9erVZ36u2mDt3LqampmRmZrJp0yZee+01Ll261GBbe3t7bt68SWxsLEeO\nHOGLL77QvN6+fXv++c9/MnPmTF2p/0ghjG+BoAUjl8uZMGECbdu2bbqxDlGpVPy5/E9O9jhJtHk0\nxSnFetFDIpHQ28oKIy0blbUYNqy6ksytW/DWW3DxIuhShwekWFlMYWmh1u7v7Azdu6uPS0vBgFLU\nC1oAVakQHRwceP755zlfWb3WyMiI6zUyGs2YMYOgoKB672Fubk7WLYCgAAAgAElEQVRQUBBOlcEH\nY8aMwdXVlZiYGADc3d2RVX5+VSoVEomEa9euAepV74yMDBYsWIBEIsHb2xsvLy82btzYoM7Dhg1D\nqVQ+5Dt/eIqKiggLC2P58uWYmZnh5eWFn59fg7onJiYyceJEZDIZCoWCUaNGceHCBc3rL774In5+\nfshrZJZqiJUrV9KhQwesra1xd3fn0KFDmtcyMjIYP348CoUCNzc31q1bp3ktNTUVf39/FAoFdnZ2\nzJ8/X/NafHw83t7e2Nra0rNnTyIiIjSvubq6snr1ajw8PLC1tWXy5MmUlpYCcPbsWfr27YuNjQ2T\nJk2iuLj2b1NjujYnwvgWCB4RUlNTtfZF8Vcpzysn+ZNkii4WoVKqyN6TrVd9yioqOJaby7eVub+1\nipVV7ZKOd+6AiYn25T4EOy7t4LmNz2H3Lzv2XN2jVVk1YoWpsZAmMHASlyWSuCyx2c4fhpSUFHbv\n3k2fPn0e+l43b94kISGBHj16aK7NmzcPCwsL3N3dcXR0ZPTo0UC18V8TlUqlmQTcS1paGqCux9Cc\n+Pr6Ymtri1wur/Ps5+dXb58rV65gbGyMm1t1QS0PD49aBnVNFi5cyJYtW7h79y5paWns2bOH559/\n/i/reuXKFUJCQoiJiSEvL499+/bhUlllS6VS4evrS+/evcnIyODgwYOsXbuW/fv3U1FRgY+PD66u\nriQnJ5OWlsakSZMA9e6Fr68vo0aNIjMzk88//5ypU6eSkJCgkbt161aioqJITEwkLi6ODRs2UFZW\nxtixY3nllVfIzs5mwoQJbN++/b50bW6E8S0QtHAyMjLo3bs3Hh4eBuN/aGxjjOsnrprz27tv602X\nfKWStseOMeXiRVKKi+v9AW12arqexMWpK8vEx2tf7gNiamzKYOfBpL6Zyvju47Uqy9Oz+vi337Qq\nSvCI8eKLLyKXyxkyZAje3t68++67D3U/pVJJQEAA06dPp0uXLprrISEhFBQUcPToUcaNG6cpYNat\nWzcUCgWrVq1CqVQSFRXFkSNH6vU9P3DgAIsWLaJdu3b3lQq2phHYFBEREeTk5JCdnV3nOTw8vN4+\nBQUF2NjY1LpmY2NDfn5+ve2HDBnChQsXsLa2xtnZmX79+jVo2DeGVCqltLSU8+fPa1x+XF3Vvw2n\nTp0iKyuLJUuWIJVKcXFxYdasWYSGhnLy5EkyMjIIDg7G1NQUExMTBg5UV0w+ceIEhYWFLF68GGNj\nY7y9vfHx8anlw75gwQLs7e1p3bo1vr6+xMbGcuLECZRKJfPnz0cqleLv70+/GhWIG9O1uRHGt0DQ\ngsnMzGTDhg1IpVIGDhzI2rVr9a2Shjaj22iOcw7kUFGiH9/vsefPk1deTnJJCaPkcq37NauFjoWQ\nELh+He7eVWc8GTtWXWfdgFCpVPht8ePFH18k6HAQ2Xe1v0Ph6wvGxurNgKeegrIyrYsUPCL8/PPP\nZGdnk5iYyLp165qs6rt582asrKywtrZmTM0JMer//YCAAFq1alXL1aEKiUTCwIEDSUlJYf369YB6\nBXvnzp1ERkbi4ODAZ599xksvvVRvlqnhw4cjlUpZtGgRAQEBAOTm5hIWFsaKFStqtc3Ly8PS0pKr\nV6+yY8cOPvroI86cOfOXxqYpLC0tycvLqyPXqjIla01UKhUjR45k/PjxFBUVkZWVRXZ2NosXL/7L\nct3c3FizZg3Lli3D3t6eKVOmkFG5A5mUlERaWhpyuVyzer9ixQpu3rxJSkoKHTt2rDeNbnp6usZt\nqIqOHTtqdhoATRVoULsaFRQUkJ6eTvv27ev0ux9dmxthfAsELZi7d+/y3nvvERMTw4EDBx4o+l9b\nmLqZImun9p2sKKwg51COXvToUOMHen+OjnTo2FFdxtHVFUaPhuPH4dIlaMJY0DUSiQRlhZLScrU/\n5P7r+0m4nUBiTvO4B9SHlRUcPAi3b8Pu3dXu8QLDxnWZK67LXJvt/EFoaNfK3Ny81nffjRs3AJgy\nZQr5+fnk5eWxqyrzUCUzZ84kKyuLsLAwpFIpDaFUKjU+3wBPPvkkhw8fJjMzkz179nDt2jU8a27n\n1CA2NraWa0xVdpWye2acv/zyC97e3kRERNC+fXsWLlzIqlWrGtRp9OjRmknFvY97JxlVdOnSpc57\niYuLq+VuU0V2djapqanMmzcPmUyGra0tM2bMYM+eB3NJmzRpEtHR0SQlJQEQGBgIgJOTE506dSI7\nO1uzep+bm0tkZCROTk4kJyfXyrBShaOjIykpKbWuJScn1zGs78XBwYHU1NQ6/e5H1+ZGGN8CQQvG\n2dkZd3d3AIqLi1m3bp3BrH5LjCQYW6l9HSWmEkpS9bPqW7PU/KabN5l+6RLKer7Qtcb48dCpk+7k\n/UVGdKp2wn4r6i2e2fAMJ1JPaFXmkCHq5x074O23DTYRjKCF0Lt3bzZv3kxFRQV79+7lyJEjjbaf\nM2cO8fHxhIeHY1IjHiMzM5Mff/yRwsJCKioq2LdvH6GhoQwbNkzT5ty5c5SUlFBUVMSqVau4ceMG\n06dPryPj4sWLuLu7I5FIGnQFqaKkpAQTExPefPNNPD09SU1NbdTdYffu3ZpJxb2PeycZVZibmzNu\n3DiCgoIoKiri2LFjhIeH8/LLL9dp26ZNG1xdXVm/fj3l5eXcuXOH//3vf/Tq1UvTpry8nOLiYsrL\ny1EqlZSUlFBeXl7nXleuXOHQoUOUlpZiYmKCmZmZZrLj6emJtbU1wcHBmntduHCB06dP4+npiYOD\nA4GBgRQVFVFSUsLx48cB6N+/PxYWFgQHB6NUKjl8+DCRkZFMnjy50XEeMGAAMpmMdevWUV5eTlhY\nGCdPnrwvXZsbYXwLBC2cmn54wcHBZGZm1rtaoGskEglP7nySv0X9jcF3BuM4Sz/FZobXKKxz5e5d\n+lpZUfcnQgfk5sLOnWr/bwPiObfalW6SFiYxuWfjP2IPS3k5dO2qDrh0clKfCwSN0Zi72Jo1awgP\nD8fW1pYtW7YwduzYBtsmJyfz9ddfExsbi729vWYFecuWLUgkEtavX4+TkxNyuZx33nmHtWvX4uPj\no+m/ceNGHBwcaNeuHYcOHWL//v2a7Cg1kcvl2NjYEBoaipeXV4P65Obm1skYsnPnTpYsWdLYcDwQ\nISEhFBUVoVAomDp1Kl9++aVm8Wb06NF8+umnmrZhYWHs2bMHOzs7unTpgkwm49///rfm9eXLl2Nu\nbs7KlSv54YcfMDc35+OPP64js6SkhMDAQOzs7HB0dCQzM5NPPvkEUGepiYiIIDY2FldXVxQKBbNn\nzyYvL0/zWkJCAs7Ozjg5OfHTTz8BIJPJCA8PZ/fu3bRt25bXX3+djRs30rlzZ6Dh/xWZTMb27dv5\n/vvvkcvlbN26FX//6qJijena3Eh0EnzUDEgkElVL0VUg0CXHjh1j0KBBALRr1460tDSDKzcPUF5c\njtRUO6sITfF0TAy/VwYWbezWjYB2Oi7+M2EC7N0LXl6waRMYUGpIlUpFh886kJ6fDsCJmSfo36G/\n1uWWlBicF47BIZFIUKlUOslRKX5jdUNSUhIbNmzg/fffB2DHjh34+PhoDPiIiAiGDh3KjRs3NMak\noGXS2OfX8H6hBQLBX+Lpp5/W5PkuLy+v4wunb9K/SeeP0X9wXHGc0luletHBr21bOpma8maHDnhY\nWupWeEUFvPCCuuT83r0GZXiD+gdiRKcRyM3kTOg+AYD91/az/9p+rcoVhrfgcaOgoIBt27YRExOj\nSfFXXFysMbyrgi39/f01q7yCRxOx8i0QPAJs3bqVDh064Obmxv79+9m3bx9ff/01pqam+laNlH+n\n0Mq5FfIRcoxtmjff7f1SVlGBsUTCucJCwrOyiLh9mx/c3XnC3Fy7go8cUa96Z2bCs8+qIw0NkDvF\nd7AyseJYyjH8tvjhbufO3Kfm8rJHXX/Q5iQuDtasgQMH4OxZg5uX6B2x8v1ok5OTQ0xMDMOHD9e3\nKgIt0NjnVxjfAsEjhKenJ46OjowZM4apU6dirm3jsoUx78oVTIyM8G3ThsE2Nsi07Z6Tng5VEfhS\nqTrrSXQ0vPoq1PBFNxQKSwspLCtEYaHQuiyVCszMqrMvHjsGlWl8BZUI4/vRJjIyklGjRjV7ER6B\nYSCMb4HgMaGqHLIhUppVys2NN7EeYI3N0zZNd3hU6NNHvawL6qVdf3/45z+rjfLHmJdfVrvAA7z/\nPixbpld1DA5hfAsELRfh8y0QPCYYquF97sVzHLc7zrVF10hdm9p0Bx1QoVLpJuVgZWlqQF1h5ssv\nDd7wzsjP4JuYb1h5dKVW5fj6Vh+Hh4uUgwKB4PFAGN8CwSPGuXPn+Pjjjxk4cCAXL17UtzoAWA+w\n1hznn8jXTYn3Bjhy5w6z4uNp/9tv7M3WfkXHWqXm9+wxuFSD93I95zo9vujBL3/+whPyJ7Qqa+RI\ntTcOqDcHtm3TqjiBQCAwCITxLRA8YqxZs4b9+/fzzjvv4Obmpm91AHB60wmppdrKKv6zmKLL+qnE\nmXj3LutSU9mfk8NLdnb46CLCz9MTHBxg6FB44w2IiFA/G8jEqCaZhZkcSjzEQKeBTH5yMv7d/Zvu\n9BDY2NSuP3T7tlbFCQQCgUGgdeNbIpGMkkgk8RKJ5IpEIllcz+tvSiSSCxKJJFYikeyXSCRO2tZJ\nIHhUmTJlCt999x1HjhxBqVTSykDyuRmZGGE7ojrA8NaWW3rR42R+PtuzskguKeFobq5uhEqlkJgI\nhw5BQgJ89pna7aR1a93I/wv85+R/mBUxi10Ju9h6catOZC5eDFOmwObNMGmSTkQKBAKBXtGq8S2R\nSIyA/wAjgR7AZIlE0u2eZmeAviqVqhewHfiXNnUSCB5lnnii2k0gIiIClUqFUqnUo0Y1qPFtk71b\nB+4e9TBKLse40i8+pqCAiwUFZJXqIPd41STou+/g8GEIDARH/VT8bIwXur2gOd4Zv5N3D7zLmM1j\ntOomNHMm/PADTJ4MpqZQWQtJIBAIHlm0vfLtCSSoVKoklUpVBoQCL9RsoFKpjqhUquLK0xOAYUci\nCQQGTM1S8z/++CMdOnQgIiJCjxpV02FBB0wcTHCY7UDHoI560cHG2JihNVac+8TEEK5LXwcDDYit\none73jhZqzcfC0oLSLyTyHuD3tO63IMH4cUXwd4edu7UujiBQCDQK9o2vtsDNcvtpdK4cT0T2KNV\njQSCR5g+ffrg4OAAQElJCf/6178YO3asnrVS03pwawakDaDr111p66u/aip+bdpojge3bs2rleOl\nM5KS4Isv1Kk+IiN1K7sJJBIJL3StXh+xM7fDy9lL61l0pFJ1Bsbr19XpBwUCgeBRRtvGd33f2PXu\nX0okkgCgL8LtRCB4YIyMjPCtkb8tNjZWj9rURSKRUHKjhIzvM8g7macXHXxrGN9JxcW6STdYk23b\n4ORJmDoVvLx0K/s+eLHbi5rjQ38eAqBCpd0xGjpUbXTX+NMIBALBI4u2yyqlAs41zjsA6fc2kkgk\nw4F3gSGV7in1sqxGBYahQ4cydOjQ5tJTIHhk8PX15dChQ/j5+TFhwgTy8/MpLS2ljQFYNqmfp/Ln\n+39iO8IW8676qb7pYmbGfzp3xsvamr9ZWHDl7l3uVlTQ28pKu4IrKmD3brh6VZ1X75tvQCbTrswH\nYEjHIbzh+QZjOo8h+242AWEBRF2LIv71eORmcq3LT0iAO3egXz+tizI4Dh8+zOHDh/WthkAg0DJa\nrXApkUikwGVgGJABnAQmq1SqSzXa9Aa2AiNVKtW1Ru4lqm8JBPdBVZXLgwcP8umnn3LixAk+++wz\nZs2apW/VUOYpMTIzwkim/yynR+/cYXp8PCUqFYHOzszTduEblQo6doSUSk+8w4dhyBAoLa0OyDQw\nFu9fjKutKz5dfOhg3UGrsj7/XF34My8PRo1Sp0R/3BEVLgWC5mHGjBk4OTnx4Ycf6kym3ipcqlSq\ncuB1IAq4AISqVKpLEonkA4lE4lPZLBiwALZKJJKzEolEhNsIBA9BlX+ura0tc+fOJT093SAMbwBj\na+Nahrc+f+y7mZuzrUcPkp9+WvuGN6iDLWsW3AkMhM6d1f7fBsrKESuZ89QcrRveoM50klfpiXTj\nhtbFCVoYRkZGXL9+vda1Dz74gJcbCBIoLS1l1qxZuLi4YGNjQ9++fdm7d6/m9ZdffhlHR0dsbGzo\n1q0b3377ba3+Q4cOxczMDGtra6ysrHB3d2/+N6UlcnJyGDt2LJaWlri6urJly5Z62zU1RjVJSEjA\nzMyMadOmaVP1xwZtu52gUqn2Al3vufZ+jeMR2tZBIHgc6dOnD3369NG3GnUozSolaXkSt8NvY2Ru\nhOd5T73o0dbEhLYmJroVOmaMurw8qP0roqKgd2/d6vCA3C66jXUra2RS7bjKTJ6srj1UWgqxseoN\nAidR9UFQSUNBvw1dVyqVODs7Ex0djZOTE7t27WLixImcP38eZ2dn3nvvPb777jtkMhlXrlzhmWee\noU+fPvSu/DxKJBK++OILZsyYobX3pC3mzp2LqakpmZmZnDlzhjFjxtCrV686E4imxqgmr7/+Op6e\n+vmufhTR/96vQCDQOleuXCEuLk7fagCQuTWTtLVpFCcWU3SpiLI7DYZ56ITi8nL23r7NDzdval/Y\ns89Wu5jcvg1yucGnH/zu7HcM+m4QnT7vxIXMC1qTY2WlDrys4pNPtCZK0AL5q7tk5ubmBAUF4VQ5\ngxszZgyurq7ExMQA4O7ujqwy5qLKVe/atdqer39F5rBhwwyipkJRURFhYWEsX74cMzMzvLy88PPz\nY+PGjXXaNjVGVYSGhmJra8uwYcMalb1y5Uo6dOiAtbU17u7uHDqkDtjOyMhg/PjxKBQK3NzcWLdu\nXa1+qamp+Pv7o1AosLOzY/78+QBcunQJb29vbG1t6dmzZ520ua6urqxevRoPDw9sbW2ZPHkypZV1\nG86ePUvfvn2xsbFh0qRJFBcX1+rbkK66QhjfAsEjTHR0NF26dMHb25ujR4/qWx0AHOc4YvVUZXBj\nBeTsz9GbLleKirA7fpzXExLI18UPp7k5eHtXn//+O9y9C5cuNdzHAHjO7Tlu/t9NerXrpVU5fftW\nHx85olVRgr/IsmXLkEgkdR41EyE01b6htrrg5s2bJCQk0KNHD821efPmYWFhgbu7O46OjowePbpW\nn3fffReFQsHgwYM50sg/ZFpaGgDGxs3rTODr64utrS1yubzOc82aDjW5cuUKxsbGuLm5aa55eHhw\n4ULTE+f6xigvL4/333+f1atXNzoZuXLlCiEhIcTExJCXl8e+fftwcXFBpVLh6+tL7969ycjI4ODB\ng6xdu5b9+/cDUFFRgY+PD66uriQnJ5OWlsakSZNQKpX4+fkxatQoMjMz+fzzz5k6dSoJCQm15G7d\nupWoqCgSExOJi4tjw4YNlJWVMXbsWF555RWys7OZMGEC27dvb1JXXSKMb4HgESU9PZ1du3Yhk8kY\nMmQI8+bN07dKgHo7Vz66OmvGrW36KTWvUql46cIFCsrLuVZcjLetrW4EL1gA338P586p83w7OMC/\nDC/Dall5Gc/+71lmR8zmgyMfUFBaoHWZVTv8lpbQp486RlUgeFiUSiUBAQFMnz6dLl26aK6HhIRQ\nUFDA0aNHGTduHK1qBD4HBwdz/fp10tLSmD17Nr6+viQmJta594EDB1i0aBHt2rVj06ZNTepS0whs\nioiICHJycsjOzq7zHB4eXm+fgoICbGxsal2zsbEhv4nSsQ2NUVBQELNnz6Z9E3ExUqmU0tJSzp8/\nr3FncXV15dSpU2RlZbFkyRKkUikuLi7MmjWL0NBQAH7//XcyMjIIDg7G1NQUExMTBg4cyIkTJygs\nLGTx4sUYGxvj7e2Nj49PHf/1BQsWYG9vT+vWrfH19SU2NpYTJ06gVCqZP38+UqkUf39/+tVIn9SQ\nrrpEGN8CwSPK7du3WblyJRcvXmTPnj2a7ThDoM0L1WkPs7ZnoczX/XatRCLB1cxMcx6elaUbwaNG\nwfTp8MQT8PTTEB+vLjtvYMikMkrKS6hQVVChqiDyciSxN2LJyM/QmszOndUr3llZsGmTwXvkCHSI\nVCqlrKy2i1pZWRkymYzNmzdjZWWFtbU1Y2oGNaOeZAcEBNCqVas67g6g/h4YOHAgKSkprF+/XnO9\nX79+WFhYIJPJmDZtGl5eXuzevbtO/+HDhyOVSlm0aBEBAQEA5ObmEhYWxooVK2q1zcvLw9LSkqtX\nr7Jjxw4++ugjzpw588BjUh+Wlpbk5dWuoZCXl4dVI6lUGxqj2NhYDhw4wMKFC5uU6+bmxpo1a1i2\nbBkKhYIpU6aQkZFBUlISaWlpyOVyzcr9ihUruHVLveiSmppKx44dMTKqbY6mp6dr3GGq6Nixo2aX\noQp7e3vNsbm5OQUFBaSnp9eZLHTsWF1Vuaau9vb2Gl11iTC+BYJHlCeffFLzhZObm8tnn33GTz/9\npGet1EjNpBiZq79+ZHYy7ibc1YseNatdfpWezhv3bGlqFVNTmDcP2rXTncy/yItdqwvuzN09l/E/\njdeq3zeosy8WFKiN76AgrYoS/AWWLVuGSqWq82jM7eR+294Pzs7O/Pnnn7WuJSYm0rFjR6ZMmUJ+\nfj55eXns2rWrVpuZM2eSlZVFWFgYUqm0wfsrlco6Pt81qUwbV+9rsbGxtYLbqzKH3DtZ+OWXX/D2\n9iYiIoL27duzcOFCVq1a1aDM0aNHayYV9z7unWRU0aVLlzrvJS4urpYryb00NEZHjhwhKSkJZ2dn\nHBwcWLVqFdu2beOpp56q9z6TJk0iOjqa5ORkAAIDA3FycqJTp05kZ2drVu5zc3M1/ttOTk4kJydT\ncU+xM0dHR1JSUmpdS05ObnIFHsDBwYHU1NQ6fevTNSkpSaOrLhHGt0DwiCKRSGr5Ba5du5acHP35\nV9fEwt2CHtt64PGLBwNTB2LVR8sFbhpgTA3j+1pxMX+zsNBP+sP0dPjqK4Pzs6hZ7bJCVUHcnDiG\ndxquVZm5uepNgW3bQMc7wQID5qWXXmL58uWkpaWhUqk4cOAAkZGRjB8/vsE+c+bMIT4+nvDwcExq\nZDbKzMzkxx9/pLCwkIqKCvbt20doaKgmoDA3N5eoqChKSkooLy/nhx9+IDo6mpEjR9aRcfHiRdzd\n3ZFIJA26glRRUlKCiYkJb775Jp6enqSmpjbq7rB7927NpOLex72TjCrMzc0ZN24cQUFBFBUVcezY\nMcLDwxtMydjQGAH84x//4Nq1a8TGxhIXF8ecOXPw8fEhKiqqzn2uXLnCoUOHKC0txcTEBDMzM4yN\njfH09MTa2prg4GCKi4spLy/nwoULnD59GgBPT08cHBwIDAykqKiIkpISjh8/Tv/+/bGwsCA4OBil\nUsnhw4eJjIxk0qRJjY4xwIABA5DJZKxbt47y8nLCwsI4efJko7o2NjHTBsL4FggeYWqWmjc1NeXv\nf/+7HrWpTZvn22DrbYtEqi45rw/sTEzwsrbWnJsYGTWYukxrjBsHPXrA8ePQhF+mruncpjPubdXp\nyUrKSzhw/YDWZdrYwM2bsHNntQ+4QBAUFMTAgQMZNGgQcrmcwMBANm/eTPfu3ettn5yczNdff01s\nbCz29vaaFeQtW7YgkUhYv349Tk5OyOVy3nnnHdauXYuPj7r8SFlZGUuXLtVk3wgJCeHnn3+mc+fO\ndeTI5XJsbGwIDQ3Fy8urQf1zc3ORy2tXiN25cydLlix5iFGpn5CQEIqKilAoFEydOpUvv/xSk2Zw\n9OjRfPrpp0DjYwTq3wyFQqF5WFpaYmpqWud9gHpiERgYiJ2dHY6OjmRmZvLxxx9jZGREREQEsbGx\nuLq6olAomD17tsY1pur1hIQEnJ2dcXJy4qeffkImkxEeHs7u3btp27Ytr7/+Ohs3bqzlj97Qd7VM\nJmP79u18//33yOVytm7dir+/f6O6fqLj9EparXDZnIjqWwLBX6e0tJS2bduSn59Px44dOXnyJAqF\nQt9qaUj/Op0b/7vB3Wt36X+1P8aWWi89UId/JSez6eZN/Nq2ZapCQTcLC90JLytTF9np2lXtC26A\nvHfwPb47+x1+Xf2Y0WsGNwtvYmduh5dzw4aGoHkQFS5bLklJSWzYsIH331eXNdmxYwc+Pj6a9IYR\nEREMHTqUGzdu1GvUC1o+eqtwKRAI9IuJiQnff/89f/zxBzExMWzfvp2RI0dSUqKfleZ7Kcssw/ld\nZwakDNCL4Q3wlpMTcf36MUouZ8ONG/Q9fVo3aQcPHVJnOlm4ECpXogyRJYOXkP5WOsM7DWfkppH8\n5+R/yC3J1apMlQoOH4bx48HZWV14RyBoKRQUFLBt2zZiYmI0Kf6Ki4s1hndVsKW/v7/BxOEIdItY\n+RYIHgNUKhW9e/emW7duTJs2jZEjR+rcx83Q8fnjD3pYWDC9XTvcdbH6feMGtG8PVYFGP/8Mv/4K\nEyZA//7al/8XuVN8BwkSbExtmm78kNy9q043WDU08fHqzYHHDbHy/WiQk5NDTEwMw4drN15CYFg0\n9vkVxrdA8JhQXl5usAZ3cWoxyZ8mY+piivP/OTfd4VFh1CjYt0993KYNvPYazJoFNdJiPa74+EBV\nTFlQEHzwgX710QfC+H40iIyMZNSoUc1ehEdg2AjjWyAQ1KKiogKlUlknul0fXF96neSP1WmgWjm1\n4umkp3Uf9HgPeUolpRUVtNX2+PzwA1TmBqZrV3WlSwNPbp2Rn8H/i/t/nLt1jk3jmi4q8qBs26be\nBAD1BsHFi1AjNvaxQBjfAkHLRfh8CwQCAK5fv87SpUtxdXXVVBjTN2392iIxVX8/laSUUHBW+5UU\nGyKuoICAixdx+u03dmVna1/giy9ClYvL5cvQzAU3mpuC0gJ6f9WbhOwEXnvqNa3K8vVVZz4BSEsz\nyCKgAoFA8EAI41sgeIwICwtj3759fPjhh0ybNk3f6gBg7Z15yp8AACAASURBVGmNYnx1Bpabm2/q\nRY/M0lL+k5bGnuxsBtnY8Iouit9YWKiXd597Dr79Vm2Av/SSugS9gZGRn8H3Z7/H3c4dN1s3rWc7\nadUKBg2qPtdVAVKBQCDQNsL4FggeE1atWsXbb7/N6dOn2b9/v77VqYViarXxnfHfDFTlut/+vl1W\nxn8zMshWKonKyeGGrjLCfPut2u+7Rw/18fDhBlna8UjSEebvnc/hPw8TeiEUlUpFaXkpygrtZYb5\n5BOYOBH27oX//EdrYgQCgUCnCJ9vgeAx4cyZM/Tt2xdQF0+4evUqmZmZ9OrVS8+aQWF8Iae6n4LK\nj3ivI71oPaS1zvUYcvYs0bnqNHrvODnR18qKiQaUF12f5JXkYb/KnmJlMQATe0zkl8Rf2PHSDgY5\nD2qi98Nz4wacOwcjRmhdlMEgfL4FgpaL8PkWCAT06dNHY2gXFxfTuXNn1q1bp2et1Jh3NafDog60\nf6M9fU70wWaw9tPZ1ccsBwfN8aqUFE7k5emn3DxATo5+5DaAdStrJj1ZXdr5ctZlfp/1u9YN75wc\neOEFcHeH3bu1KkogEAh0gjC+BYLHiJkzZ2qOn3jiCb799ls9alONRCLhiVVP0Pnzzlj3t9ZbtpPx\ndnbYVKZjrAD82rTRrS5lZbBmDQwYAE89VZ3o2kCoGWR5+fZlbE1ttS6zdWu1G3xKCnz2mdbFCQQC\ngdYRxrdA8BgxdepUWrVqBcC5c+e4evWqnjWqTUlaCcmrkonpH0PZnTKdyzeXSplqbw+Ap5UVOjd9\njY0hMRH+8Q91ZRkjw/qK7ufYj97tegPQ3qo913Ouc7voNrE3YrUmUyKBKVPURXcEAoHgUcCwvtkF\nAoFWsbW1Zd68eSxdupRr165hZmZGcHAw+fn5+lYNgEuvXKIovohOKzthbK2fghT/5+RE3FNPcaJP\nH8yNjJhz+TLnCnSQ/jAxEWbMgO++g40bobIUtSEhkUhYOXwlUQFRHJx2kJXHVuL2uRvbL27XifzD\nh2HoUHVSGIFAIGipiIBLgeAxZd68eWzZsgV/f38++ugj2ukitV4TqFQqvRfYqWLR1atE3r7NjHbt\nmOnggELbBXdSU8HZGVQq9XLvn39CcjL07l2dC9yAyCvJY/O5zUx6chKtTbUfHOvhAX/8oT7+6iv4\n+9+1LlLviIBLgaDlIipcCgSCOly+fBlnZ2fMzMz0rUq9FF0uoiy7DJsB+gm+zFMqsZJKdTsZGD4c\nDh5UH9vYQIcOsHWrOtrwMeftt2HVKvXxyJHq9IOPOsL4Fgi0y4wZM3BycuLDDz9s9nuLbCcCgaAO\nXbt2NUjD+9b2Wxx3OM7JbieJnxmvNz2sjY1rGd4VujBMXn65+tjOTp1brwUY3lduX+Gfv/xTk4ZQ\nG7z+unpDACAqSr0pIHh8cHFxwdzcHGtraxwcHHj11VcpKir6y/cpLS1l1qxZuLi4YGNjQ9++fdlb\nYyb38ssv4+joiI2NDd26dasTlB4fH8+wYcNo3bo1Xbp0YefOnQ/93nRFTk4OY8eOxdLSEldXV7Zs\n2VJvu6bGCGDo0KGYmZlhbW2NlZUV7i3ge8qQEMa3QPAYo1KpiImJYcGCBYSEhOhbHQDKc8spvVEK\nwN34u5Sk66jYTT2UVlQQlpmJzx9/EHDpkvYFjhsHVROiq1chLk77Mh+SgLAAhnw/hGJlMXfL7mpN\nTseO8Oyz6mOVCvz9tSZKYIBIJBJ27dpFXl4eZ86c4dSpUyxfvvwv30epVOLs7Ex0dDS5ubl8+OGH\nTJw4keTK2dx7771HUlISubm5hIeHs3TpUs6ePQtAeXk5L7zwAn5+fuTk5PDVV18REBBgcIHrDTF3\n7lxMTU3JzMxk06ZNvPbaa1yq53utqTEC9d/jiy++IC8vj/z8/HrvI2gYYXwLBI8xO3fuxM/Pj1u3\nbjF69Gh9qwOAw6sOtPau9CFWwa3QW3rT5WBODgsSEvg9P5/Vbm7aF2hlBS++CCYmauuyuBg2b1Yv\n9RogNwtuYm9hT9e2Xfl0+KfYmmk39eCwYdXHmZkGl4lRoGWq3GIcHBx4/vnnOX/+PABGRkZcv35d\n027GjBkENVAl1tzcnKCgIJycnAAYM2YMrq6uxMTEAODu7o6sMti5Kgbl2rVrgHrVOyMjgwULFiCR\nSPD29sbLy4uNGzc2qPOwYcNQKrVXBfZ+KSoqIiwsjOXLl2NmZoaXlxd+fn716t7UGFVxv25KK1eu\npEOHDlhbW+Pu7s6hQ4c0r2VkZDB+/HgUCgVubm61ak+kpqbi7++PQqHAzs6O+fPna16Lj4/H29sb\nW1tbevbsSUREhOY1V1dXVq9ejYeHB7a2tkyePJnSUvWCztmzZ+nbty82NjZMmjSJ4uLau3WN6dqc\nCONbIHhMuXbtGkuWLCE9PZ2jR4/i7Oysb5U02E+11xynf5OuFx1UKhX/d+0aqaWlZJWVsev2bd0I\n/vRTdTnHadPU1ua2bWCAVTbLK8rp9VUv/n3i3/ya9CtR17Q/QVi4UL0C/o9/wE8/VbuhCLTPsmXL\nWLZsWbOdPwwpKSns3r2bPn36PPS9bt68SUJCAj169NBcmzdvHhYWFri7u+Po6KhZmKjP2FSpVJpJ\nwL2kpaUBYGzcvJmbfH19sbW1RS6X13n28/Ort8+VK1cwNjbGrcYigoeHBxcuXGhSXn1jBPDuu++i\nUCgYPHgwR44caVBuSEgIMTEx5OXlsW/fPlxcXAD12Pn6+tK7d28yMjI4ePAga9euZf/+/VRUVODj\n44OrqyvJycmkpaUxaZK6yJdSqcTX15dRo0aRmZnJ559/ztSpU0lISNDI3bp1K1FRUSQmJhIXF8eG\nDRsoKytj7NixvPLKK2RnZzNhwgS2b99+X7o2N8L4FggeU5ycnMjKygLUKwz79+/XrA7oG+vB1lBp\nWN2Nv0vR5b/u2/mwSCSSWhUv/5uRQXxhofYrXjo7g60tPPMMnDoFYWFQWZnUkJAaSZnac6rm/KNf\nP+KVna+w+vhqrck0M4Pr1+HLL8HTU50gRvD48OKLLyKXyxkyZAje3t68++67D3U/pVJJQEAA06dP\np0uXLprrISEhFBQUcPToUcaNG6epjdCtWzcUCgWrVq1CqVQSFRXFkSNH6vU9P3DgAIsWLaJdu3Zs\n2rSpSV1qGoFNERERQU5ODtnZ2XWew8PD6+1TUFCAjU3t4HUbG5sm08w2NEbBwcFcv36dtLQ0Zs+e\nja+vL4mJiXX6S6VSSktLOX/+vMadxdXVFYBTp06RlZXFkiVLkEqluLi4MGvWLEJDQzl58iQZGRkE\nBwdjamqKiYkJAwcOBODEiRMUFhayePFijI2N8fb2xsfHp5YP+4IFC7C3t6d169b4+voSGxvLiRMn\nUCqVzJ8/H6lUir+/P/369bsvXZsbYXwLBI8pJiYmvFwjwG/WrFl069aNCgPYyzdzMcOylyUmHUxw\nDnRGainVix4v29sjq1xe/T0/n6Gxsdwq01HxHxsb6N69+vzuXbWzswHxj77/0Bz/lvobzjbOvOzx\nciM9Hh4jI/jhBxgyRF0EVFcbEgL98/PPP5OdnU1iYiLr1q3TGMUNsXnzZqysrLC2tmbMmDG1XlOp\nVAQEBNCqVatarg5VSCQSBg4cSEpKCuvXrwfUK9g7d+4kMjISBwcHPvvsM1566SU6dOhQp//w4cOR\nSqUsWrSIgIAAAHJzcwkLC2PFihW12ubl5WFpacnVq1fZsWMHH330EWfOnPlLY9MUlpaW5OXl1ZFr\nZWXVYJ/Gxqhfv35YWFggk8mYNm0aXl5e7N69u8493NzcWLNmDcuWLcPe3p4pU6aQkZEBQFJSEmlp\nacjlcs3q/YoVK7h58yYpKSl07NgRo3oKjaWnp2tcYqro2LGjZqcBwN6+evfU3NycgoIC0tPTad++\nfZ1+96NrcyOMb4HgMaZmufkbN24QFRVV75edrjEyMcLjoAcDkgbQaUUnWrVv/EdWW7Q1MWFs27aa\n8wl2dthrO9/3vdy5A598Ai4uUBn4ZSh0btOZ4Z2Ga84lSFBYaN9FJjUV3nxTXXK+TRutixNgGG4n\nDe06mZub11p9vnHjBgBTpkwhPz+fvLw8du3aVavPzJkzycrKIiwsDKm04cm9UqnU+HwDPPnkkxw+\nfJjMzEz27NnDtWvX8PT0rLdvbGxsLdeYqswhZfdM4H/55Re8vb2JiIigffv2LFy4kFVVeTXrYfTo\n0ZpJxb2PeycZVXTp0qXOe4mLi6vjSlKT+x0j0KTVq/e1SZMmER0dTVJSEgCBgYGAeve1U6dOZGdn\na1bvc3NziYyMxMnJieTk5HoXgxwdHUlJSal1LTk5uY5hfS8ODg6k3rNdlnxP2qSGdG1u9P8rKxAI\n9Eb37t15+umnAXUkf82gFX0js5UhMZJQlFDExYCLFF4q1IsesytdTyTAbX0ETn36KcTGwi+/QDP4\nuDY3c/rO0Ryfu3UOgDvFd7Qqc/FiGDtWHZcqEPTu3ZvNmzdTUVHB3r17G/Q/rmLOnDnEx8cTHh6O\nSY1/oszMTH788UcKCwupqKhg3759hIaGMqxGpO+5c+coKSmhqKiIVatWcePGDaZPn15HxsWLF3F3\nd0cikTToClJFSUkJJiYmvPnmm3h6epKamtqou8Pu3bs1k4p7H/dOMqowNzdn3LhxBAUFUVRUxLFj\nxwgPD6+1+3k/YwTqFfyoqChKSkooLy/nhx9+IDo6mpEjR9a5z5UrVzh06BClpaWYmJhgZmamMeQ9\nPT2xtrYmODiY4uJiysvLuXDhAqdPn8bT0xMHBwcCAwMpKiqipKSE48ePA9C/f38sLCwIDg5GqVRy\n+PBhIiMjmTx5cqPjPGDAAGQyGevWraO8vJywsDBOnjx5X7o2N8L4Fggec2bOnEn37t1ZvXo1U6dO\n5fLlyxpfcH2T+nkqZweexcLdglYd9LP6/aytLcGdOpH49NNsdHdn7+3b/JabqxvhJ0/C6dNw4gTo\nItvKA+DX1Y83n36T07NPM7H7REZsHMHf1v8NZYX2JyoqFYSGPh4Fdx53Git2tWbNmv/f3r3HRVmn\njR//XAiCSoI8hueUEnUtdUvXbDd/6bPt2uO6L9u0fpVZbWZPW1Z22OygoU9tbQfP+Xgot8xcz5ln\n00yttDwgnk0USEUUUBBEGRhmvs8f9zCiASJyz4xwvV8vXs59z3fme3k5zlzc8z2wZMkSGjRowOzZ\ns/nLX/5SZtsjR44wbdo0duzYQaNGjbxXkGfPno2IMHnyZFq0aEFUVBQvv/wy48ePp0+fPt7Hz5w5\nkyZNmtC4cWPWrVvHmjVrvKujlBQVFUVERARz5szhd7/7XZnx5OTkEBUVdcG5L7/8ktdff728dFTK\npEmTOHfuHNHR0QwYMIApU6Z41+fu3bs3//znP4HycwTgdDoZPny4dxWSSZMmsXjxYmJjY3/RZ0FB\nAa+88grXXnstTZs2JTMzk7fffhuwVqlZunQpO3bsICYmhujoaAYPHkxubq73voMHD3LdddfRokUL\n5s2bB0BISAhLlixhxYoVNGzYkCFDhjBz5kxv/2W9VkJCQli4cCGffPIJUVFRzJ8/n34l1iwtL9aq\npjtcKlXDuVwu7xvd22+/TW5uLrNmzeLmm2/2d2jk/5xPcGQwIZG//HDztbXZ2Tyyfz9NQkMZ1aoV\nve0e71BQYC3tkZ5uHY8dC48+CitXwiWu8PiDMYYnlz1Jz5ie3N3ubsKCw2ztb9w4eO01ayh8375w\nFe11UmG6w2X1c/jwYT799FPi4uIAWLRoEX369PEW8EuXLqVHjx6cOHGi1GJWXT10h0ulVJlqebZQ\nDw8PZ9CgQezatSsgCm+wJl4WF97GZTg67iiFmf5ZkeXGunVZ1bEjWzt3tr/wBggNtarLYq+/bl39\nXrkSAmDd4IuJCFP/PJX7b7rf9sIbICrKKrwBNm0CX82DVaqy8vLyWLBgAfHx8d4l/hwOh7fwLp5s\n2a9fP+9VXlU96ZVvpVSpijeYCARpH6eR9EISrjMumj7TlDYT2lz6QTbLd7moY9N4QK+CAmjT5vxe\n6s8/D2PG2NtnFTDGMH/ffKLqRF0wIbMquVzWFwPFCxxMmWKt/12d6JXv6i07O5v4+HjuvNOe/yPK\nv/TKt1KqwowxrFq1iptvvpmdAbK9eeaCTFxnXACcmH6Cwgz/rUfuMoZpaWncsHkze/Ly7O0sNBRK\nrhAxfXrAr613KOsQ3T/pzjvfv0O9kHq29VOrFvztb+ePn3oK9u2zrTulqtzGjRvp0aOHv8NQfqDF\nt1LqAiNHjmTgwIEMHjyYjh07+jscADqu6Ei9TlYh5z7n5sh7Ry7xCPs8lZjI35OS6B0VxU3h4fZ3\nOHAgtGtnrfs9bBjk5lpDUF54wf6+K+Hk2ZPUC6nHq7e/ym0tbrO1r+efh+J/Arfb2o9IqatFnz59\nqnz3S3V10OJbKeX17bff8tlnn3Hy5ElWrVoVMMNOJEiIGXV+6a3Ucak40hw+j2NTTg4fHT9OrsvF\n5+npHCplZ7sqFxwMc+daWzs++CB07gxZWTBkiP19X6bPd33Obf+6jdXJqxn9w2iMMRS6CjlTUP4u\nepVVt641CqdePXjnHXjpJVu6UUqpKqVjvpVSXsXrqxb/X1u6dCmFhYX07dvXtvVOK8rtdrOp4SaK\nsq3Jhi3jWhIz0p6tf8uMwRi6bd/OVs+WzL0aNKBHZCRPN2vGNb66gpWZCdde65u+LlN6XjotxrbA\n6bZmPz7b9VlWHFrB0FuH8nTXp23p0xgrJdHR1hD56dPh8cerxxrgOuZbqauXjvlWSlVIly5dLtj1\nsn///rz77rtkZGT4MSpLUFAQzYY2IzQmlHaftaPViFa+j0GESbGxFL+bfpWdzbJTpzhXyi5stilZ\neGdkQHa27/q+hEbhjXju1ue8xx9u/ZA3e75pW+ENIGIV3suWQfv28NVX1sgcpZQKVFp8K6Uu8I9/\n/IOIiAjA2nSgX79+NPHs8uhvrUa04tbEW2k8sDFSSyjK9f2Se7+pX9+76yXAscJC6vv6W4HUVHju\nOWss+Lff+rbvSxjZYyStIlsB4DZulhwof3e/qpKTA1OnwuLF0LChT7pUSqlK0eJbKXWB6OhoRo0a\n5T3esmULxhgC4StpESEoOIjcLbns7LWT/Q/v90scb19/PVHBwdSvVYvnmzcnRIQ8X669HR8PKSmw\ncKG1w0wAqVe7HlP7TAUgLDiMTo064XQ5mbx1MquTVtvW74ABUHLFtuI1wJVSKtDomG+l1C84nU7u\n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\nAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Get the decay rate data\n", + "dr_tally = decay_rate.xs_tally\n", + "dr_u235 = dr_tally.get_values(nuclides=['U235']).flatten()\n", + "dr_pu239 = dr_tally.get_values(nuclides=['Pu239']).flatten()\n", + "\n", + "# Compute the exponential decay of the precursors\n", + "time = np.logspace(-3,3)\n", + "dr_u235_points = np.exp(-np.outer(dr_u235, time))\n", + "dr_pu239_points = np.exp(-np.outer(dr_pu239, time))\n", + "\n", + "# Create a plot of the fraction of the precursors remaining as a f(time)\n", + "colors = ['b', 'g', 'r', 'c', 'm', 'k']\n", + "legend = []\n", + "fig = plt.figure(figsize=(8,6))\n", + "for g,c in enumerate(colors):\n", + " plt.semilogx(time, dr_u235_points [g,:], color=c, linestyle='--', linewidth=3)\n", + " plt.semilogx(time, dr_pu239_points[g,:], color=c, linestyle=':' , linewidth=3)\n", + " legend.append('U-235 $t_{1/2}$ = ' + '{0:1.2f} seconds'.format(np.log(2) / dr_u235[g]))\n", + " legend.append('Pu-239 $t_{1/2}$ = ' + '{0:1.2f} seconds'.format(np.log(2) / dr_pu239[g]))\n", + "\n", + "plt.title('Delayed Neutron Precursor Decay Rates')\n", + "plt.xlabel('Time (s)')\n", + "plt.ylabel('Fraction Remaining')\n", + "plt.legend(legend, loc=1, bbox_to_anchor=(1.55, 0.95))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now let's compute the initial concentration of the delayed neutron precursors:" + ] + }, + { + "cell_type": "code", + "execution_count": 24, "metadata": { "collapsed": false }, @@ -1045,173 +1242,156 @@ " 0\n", " 1\n", " 1\n", - " (U235 / total)\n", + " U235\n", " (((delayed-nu-fission / nu-fission) * (delayed...\n", - " 9.391610e-08\n", - " 2.566220e-10\n", + " 8.779406e-08\n", + " 2.310240e-08\n", " \n", " \n", " 1\n", " 1\n", " 1\n", - " (Pu239 / total)\n", + " Pu239\n", " (((delayed-nu-fission / nu-fission) * (delayed...\n", - " 7.611347e-09\n", - " 2.278727e-11\n", + " 7.150041e-09\n", + " 3.854534e-09\n", " \n", " \n", " 2\n", " 1\n", " 2\n", - " (U235 / total)\n", + " U235\n", " (((delayed-nu-fission / nu-fission) * (delayed...\n", - " 1.102594e-06\n", - " 3.012794e-09\n", + " 9.528171e-07\n", + " 1.124883e-07\n", " \n", " \n", " 3\n", " 1\n", " 2\n", - " (Pu239 / total)\n", + " Pu239\n", " (((delayed-nu-fission / nu-fission) * (delayed...\n", - " 1.422470e-07\n", - " 4.258670e-10\n", + " 1.303200e-07\n", + " 3.422243e-08\n", " \n", " \n", " 4\n", " 1\n", " 3\n", - " (U235 / total)\n", + " U235\n", " (((delayed-nu-fission / nu-fission) * (delayed...\n", - " 6.685886e-07\n", - " 1.826892e-09\n", + " 2.353975e-07\n", + " 3.367779e-08\n", " \n", " \n", " 5\n", " 1\n", " 3\n", - " (Pu239 / total)\n", + " Pu239\n", " (((delayed-nu-fission / nu-fission) * (delayed...\n", - " 5.419872e-08\n", - " 1.622631e-10\n", + " 2.032960e-08\n", + " 5.622830e-09\n", " \n", " \n", " 6\n", " 1\n", " 4\n", - " (U235 / total)\n", + " U235\n", " (((delayed-nu-fission / nu-fission) * (delayed...\n", - " 4.886781e-07\n", - " 1.335293e-09\n", + " 4.720335e-07\n", + " 4.240950e-08\n", " \n", " \n", " 7\n", " 1\n", " 4\n", - " (Pu239 / total)\n", + " Pu239\n", " (((delayed-nu-fission / nu-fission) * (delayed...\n", - " 2.626687e-08\n", - " 7.863920e-11\n", + " 2.626392e-08\n", + " 5.152078e-09\n", " \n", " \n", " 8\n", " 1\n", " 5\n", - " (U235 / total)\n", + " U235\n", " (((delayed-nu-fission / nu-fission) * (delayed...\n", - " 1.469529e-08\n", - " 4.015430e-11\n", + " 2.828001e-08\n", + " 4.006859e-09\n", " \n", " \n", " 9\n", " 1\n", " 5\n", - " (Pu239 / total)\n", + " Pu239\n", " (((delayed-nu-fission / nu-fission) * (delayed...\n", - " 1.274953e-09\n", - " 3.817026e-12\n", + " 2.430664e-09\n", + " 6.573695e-10\n", " \n", " \n", " 10\n", " 1\n", " 6\n", - " (U235 / total)\n", + " U235\n", " (((delayed-nu-fission / nu-fission) * (delayed...\n", - " 1.185934e-09\n", - " 3.240517e-12\n", + " 1.477575e-09\n", + " 3.414084e-10\n", " \n", " \n", " 11\n", " 1\n", " 6\n", - " (Pu239 / total)\n", + " Pu239\n", " (((delayed-nu-fission / nu-fission) * (delayed...\n", - " 5.371343e-11\n", - " 1.608102e-13\n", + " 6.994534e-11\n", + " 3.439208e-11\n", " \n", " \n", "\n", "" ], "text/plain": [ - " cell delayedgroup nuclide \\\n", - "0 1 1 (U235 / total) \n", - "1 1 1 (Pu239 / total) \n", - "2 1 2 (U235 / total) \n", - "3 1 2 (Pu239 / total) \n", - "4 1 3 (U235 / total) \n", - "5 1 3 (Pu239 / total) \n", - "6 1 4 (U235 / total) \n", - "7 1 4 (Pu239 / total) \n", - "8 1 5 (U235 / total) \n", - "9 1 5 (Pu239 / total) \n", - "10 1 6 (U235 / total) \n", - "11 1 6 (Pu239 / total) \n", + " cell delayedgroup nuclide \\\n", + "0 1 1 U235 \n", + "1 1 1 Pu239 \n", + "2 1 2 U235 \n", + "3 1 2 Pu239 \n", + "4 1 3 U235 \n", + "5 1 3 Pu239 \n", + "6 1 4 U235 \n", + "7 1 4 Pu239 \n", + "8 1 5 U235 \n", + "9 1 5 Pu239 \n", + "10 1 6 U235 \n", + "11 1 6 Pu239 \n", "\n", " score mean std. dev. \n", - "0 (((delayed-nu-fission / nu-fission) * (delayed... 9.39e-08 2.57e-10 \n", - "1 (((delayed-nu-fission / nu-fission) * (delayed... 7.61e-09 2.28e-11 \n", - "2 (((delayed-nu-fission / nu-fission) * (delayed... 1.10e-06 3.01e-09 \n", - "3 (((delayed-nu-fission / nu-fission) * (delayed... 1.42e-07 4.26e-10 \n", - "4 (((delayed-nu-fission / nu-fission) * (delayed... 6.69e-07 1.83e-09 \n", - "5 (((delayed-nu-fission / nu-fission) * (delayed... 5.42e-08 1.62e-10 \n", - "6 (((delayed-nu-fission / nu-fission) * (delayed... 4.89e-07 1.34e-09 \n", - "7 (((delayed-nu-fission / nu-fission) * (delayed... 2.63e-08 7.86e-11 \n", - "8 (((delayed-nu-fission / nu-fission) * (delayed... 1.47e-08 4.02e-11 \n", - "9 (((delayed-nu-fission / nu-fission) * (delayed... 1.27e-09 3.82e-12 \n", - "10 (((delayed-nu-fission / nu-fission) * (delayed... 1.19e-09 3.24e-12 \n", - "11 (((delayed-nu-fission / nu-fission) * (delayed... 5.37e-11 1.61e-13 " + "0 (((delayed-nu-fission / nu-fission) * (delayed... 8.78e-08 2.31e-08 \n", + "1 (((delayed-nu-fission / nu-fission) * (delayed... 7.15e-09 3.85e-09 \n", + "2 (((delayed-nu-fission / nu-fission) * (delayed... 9.53e-07 1.12e-07 \n", + "3 (((delayed-nu-fission / nu-fission) * (delayed... 1.30e-07 3.42e-08 \n", + "4 (((delayed-nu-fission / nu-fission) * (delayed... 2.35e-07 3.37e-08 \n", + "5 (((delayed-nu-fission / nu-fission) * (delayed... 2.03e-08 5.62e-09 \n", + "6 (((delayed-nu-fission / nu-fission) * (delayed... 4.72e-07 4.24e-08 \n", + "7 (((delayed-nu-fission / nu-fission) * (delayed... 2.63e-08 5.15e-09 \n", + "8 (((delayed-nu-fission / nu-fission) * (delayed... 2.83e-08 4.01e-09 \n", + "9 (((delayed-nu-fission / nu-fission) * (delayed... 2.43e-09 6.57e-10 \n", + "10 (((delayed-nu-fission / nu-fission) * (delayed... 1.48e-09 3.41e-10 \n", + "11 (((delayed-nu-fission / nu-fission) * (delayed... 6.99e-11 3.44e-11 " ] }, - "execution_count": 22, + "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "# Set the time constants for the delayed precursors (in seconds^-1) using some ficticious time constant data.\n", - "precursor_halflife = np.array([55.6, 24.5, 16.3, 2.37, 0.424, 0.195])\n", - "precursor_lambda = -np.log(0.5) / precursor_halflife\n", - "\n", - "# Create a tally object with only the delayed group filter for the time constants\n", - "beta_filters = [f for f in beta.xs_tally.filters if f.type != 'delayedgroup']\n", - "lambda_tally = beta.get_condensed_xs(one_group).xs_tally.summation(nuclides=beta.xs_tally.nuclides)\n", - "for f in beta_filters:\n", - " lambda_tally = lambda_tally.summation(filter_type=f.type, remove_filter=True) * 0. + 1.\n", - "\n", - "# Set the mean of the lambda tally and reshape to account for nuclides and scores\n", - "lambda_tally._mean = precursor_lambda\n", - "lambda_tally._mean.shape = lambda_tally.std_dev.shape\n", - "\n", - "# Set a total nuclide and lambda score\n", - "lambda_tally.nuclides = [openmc.Nuclide(name='total')]\n", - "lambda_tally.scores = ['lambda']\n", - "\n", "# Use tally arithmetic to compute the precursor concentrations\n", "precursor_conc = beta.get_condensed_xs(one_group).xs_tally.summation(filter_type='energy', remove_filter=True) * \\\n", - " delayed_nu_fission.get_condensed_xs(one_group).xs_tally.summation(filter_type='energy', remove_filter=True) / lambda_tally\n", - " \n", - "# The difference is a derived tally which can generate Pandas DataFrames for inspection\n", + " delayed_nu_fission.get_condensed_xs(one_group).xs_tally.summation(filter_type='energy', remove_filter=True) / \\\n", + " decay_rate.xs_tally.summation(filter_type='energy', remove_filter=True)\n", + "\n", + "# Get the Pandas DataFrames for inspection\n", "precursor_conc.get_pandas_dataframe()" ] }, @@ -1224,7 +1404,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 25, "metadata": { "collapsed": false }, @@ -1243,7 +1423,7 @@ "(0, 7)" ] }, - "execution_count": 23, + "execution_count": 25, "metadata": {}, "output_type": "execute_result" }, @@ -1251,7 +1431,7 @@ "data": { "image/png": "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\nA9YuP+yww7jqqqtYtGgRCxYsWHtHyra09eRV78RSKQWXv6PNbdPivpL6kJVwzo+I5WnxdcCHI2JP\nslLND1sdsVkHGTMGli+vulmntnx5dh22zr333svixYt59dVXueaaa+jVq1eL25911llrb1d8+eWX\nr7fum9/8JtOmTePXv/51xX179uzJyJEjueyyy3j55ZcB+K//+i/22msv9txzTw488ECOOeYYNtts\nM7bZZpvaXGAF9a4KmwsMLnm9AzC/bJs5wI7AfEmbAP0i4i1Jc9PyDfaVtClZUrk5Iu5t2iAi/lmy\n/S+Aic0FNqbk09/Y2EhjY2PuizKrh6InlSad6TraU3VVsxgqlE569+69XolhwYIFa59ff/31XH/9\n9RvsM3r0aB588EGeeOIJ+vTp0+I5V65cySuvvMLuu+9Or169uPrqq7n66qsB+PnPf87ee++dq+pt\n8uTJTJ48uep2G8hzN7C2PoBNgP8GhgA9gReAXcu2ORu4Lj0fRdauArAb8Hzab1g6TtONyW4ia6Qv\nP992Jc8vAG5rJq7qt1Az28iyO7RnjyLqqPg789/z0KFD45FHHtlg+YknnhgnnnhirFy5MqZMmRID\nBw6Mk08+udnjfO9734vhw4fHggULNlj39NNPx5NPPhnvv/9+rFixIi6//PLo27dvvPHGGxERMW/e\nvJg/f35ERDz11FOx4447xsMPP9xi3M29p+S8g+TGuA3wocDfgFnARWnZWOBz6fnmwB1p/dPA0JJ9\nL04JZTowIi07AFidktTzwFTg0FiXcF5K6/4fsG0zMbX4ppp1BCeWtp63875hw4YNq5hYXnnlldhv\nv/2ioaEhPve5z8X555/fYmKRFL169YqGhoa1tyu+7LLLIiLi8ccfjz322CP69u0bAwYMiMbGxnjy\nySfX7vvEE0/E0KFDo3fv3rHLLrvE7bffXjXu9iYW35rYrJMorZko4sezo+L3rYlrz7cmNjOzTqVq\n472k/YGTgE8C2wMrgL8AvwVuiYgldY3QzMwKpcWqMEm/I+uJdS/wZ+AfQC9gZ+Ag4AiyRvT76h9q\n7bgqzDojV4W19byuCqu19laFVUssAyNiUZUAqm7T2TixWGfkxNLW8zqx1Fpd21iaEoak3mneLyTt\nLOlISZuVbmNmZgb5G++fAHpJGgQ8AnwR+FW9gjIzs+LKO/JeEfGupNOAayLiCknP1zMwM7M8hgwZ\n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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1295,7 +1475,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 26, "metadata": { "collapsed": false }, @@ -1306,7 +1486,7 @@ "(0.001, 20)" ] }, - "execution_count": 24, + "execution_count": 26, "metadata": {}, "output_type": "execute_result" }, @@ -1314,7 +1494,7 @@ "data": { "image/png": "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\nvPBCdR+hwWCIQFYrhnSlsrKS4cOHM2rUKI4++uigtO+//54dO3bw8MMP06VLl8DxIUOGsHz5cjZv\n3szjjz/OHXfcwT//+c+w5T/33HOMHj2a4447jkMPPRTLsoJ6OH//+9+5//77KSgooHHjxtx6663M\nnDkzbFkXX3wxRxxxBACXXnopnTt35sMPPwTg8ssv55lnDob6nj59OpdffnngGtdeey2nnXYaIsKI\nESNo0KAB77//Pu+//z6VlZWMGTOGevXqcfHFF3P66afX4EmmLyW9SwJbTbB8VmAzGEIx5qpJol69\nelRUVAQdq6iooH79+gCcf/75vPPOO4gIjz32GMOG2WEsVJXhw4fToEEDHnroobBlH3rooVxzzTUc\ndthhrFixgpYtW3LssccG0s8880zGjh3L888/z5AhQ6qcv2HDBk477WCI7cLCwsD3zZs3s2fPHrp1\n6xY4duDAgYhDY0899RT3339/YKL7hx9+YMuWLQB0796dvLw8Fi5cSKtWrfj6668ZOHAgYLs0eeqp\npwL3qKpUVFSwYYMd56lt27ZB13HLmA3UxETVTenC0lory5B5ZLVisKzqDQVVN380OnToQFlZGccc\nc9Aj+TfffBPYnzdvXtjzrrzySrZs2cK8efOoV69exPL379/Pnj17WL9+PS1btqySHs1Ms3Xr1kHm\npuXl5YE5hpYtW9KoUSO+/PJLWrduHfUe16xZw9VXX82CBQs488wzATjllFOCrjty5EimT59Oq1at\nuOSSS8jNzQWgffv2jB8/nttuu61KuYsWLWL9+vVVrtWpU6eo8hgMBm+YoaQkMWTIECZOnMj69etR\nVd58803mzJnDJZdcEvGca6+9lhUrVvDKK68EKlA/b775Jp999hkHDhxg586d3HzzzTRv3pzjjjsO\ngFdeeYXt27cD8OGHHzJlyhQuvPDCsNcZPHgwTz75JMuXL2fPnj1B8wciwlVXXcVNN93E5s2bAVi/\nfj2vv/56lXJ++OEHcnJyaNmyJQcOHOCJJ57giy++CMozfPhwXnrpJZ555pnAMBLAVVddxaOPPhoY\ndvrhhx+YN28eP/zwA2eeeSaHHHIIDz30EPv37+fFF18M5DMYDPFjFEOSmDBhAmeddRY9e/akefPm\n3HrrrcyYMYPjjz8+bP41a9bw+OOP89lnn3HEEUcE1iL4x/a3b9/OsGHDaNq0KZ07d2b16tXMnz8/\n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\nalQgII2f77//nh9//DHQGvczZMgQrrnmGo444gjef/99Lr74Ypo1a8aQIUPCXkNEuPPOO6lfvz5n\nn302/fviYcdKAAAgAElEQVT359lnn2X8+PEADBo0iB49egBQv359nn32WZYuXUqjRo0oLCxk3Lhx\nTJ8+PaAY3OE4hwwZwt13301JSQn169fn5z//Obm5uaxatYqTT7Y9rfTv35+f/exnANx1110UFBSw\nfv162rZtC1S/x5XOhBvWSfc4C4nGDFXFh9cIbk2Bbc73ggTJklXUq1ePioqKoGMVFRXUr18fgPPP\nP5933nkHEeGxxx4LOJNTVYYPH06DBg0C8ZlDOfTQQ7nmmms47LDDWLFiBS1btuTYY48NpJ955pmM\nHTuW559/PqJiaNasGQ0bNgzsFxYWsmHDhsC+O6Tnli1bqKioCFJEhYWFQSE9jzjiiCD5AFq2bBl0\nbPfug61kd/mNGzemefPmbNiwIaAYsp10r/dMxZ3aeFEMk4BPRWQBIMDZQPxR61OASN3Qmu5Xhw4d\nOlBWVsYxxxwTOPbNN98E9ufNC28dfOWVV7JlyxbmzZtHvXr1Ipa/f/9+9uzZw/r164MqYD+xXEH4\nex7+SnzNmjWcdNJJQef7admyJfXr16e8vDyggMrLy+OqxN0hQ3fv3s22bduySinEaw2U6b6SYmFc\nZsRHVMUg9r//30AP7HkGAX6vqt9GO88QmyFDhjBx4kROPPFE2rRpw1tvvcWcOXMCQzXhuPbaa1mx\nYgVvvvkmubm5QWlvvvkmLVu25OSTT2b37t3cfvvtNG/enOOOOw6AV155hbPPPpumTZvy4YcfMmXK\nFO65556I11JVSkpKuOuuu3j//feZO3dulTkLPzk5OQwePJjx48czbdo0tm7dyv3338/vfve7qOVH\nY968ebz33nucdtpp/PGPf6RHjx60adMGgFatWrF69WqOPPLIqGWkM/FWxqWu+Ds1qRcTvbLaVNyp\nTVTFoKoqIi+rajfglTqSKSuYMGECJSUl9OzZk+3bt3PUUUcxY8YMjj/++LD516xZw+OPP07Dhg0D\nwzLuYabt27dz4403sn79eg499FBOP/105s+fH1Ags2bN4oorrmDfvn20a9eO2267jeHDh0eUr3Xr\n1jRr1ow2bdrQuHFjHnvsscDEczhz0SlTpnDjjTdy5JFHcuihh3L11VcH5hfCEVpG6P5ll12GZVks\nXryYbt268cwzzwTSLMvi8ssv56effuLxxx/nkksuiXgdQ3ZilE18eInH8BfgSVVdUqMLiJwHPIBt\nGjtVVe8NSe/lpJ8MDFHVF11pI4HxgAJ3qWoVI3zjXbX2WbhwISNGjGDNmjVJuf7o0aNp3749d9xx\nR8KvlanvSTp4VzUkl3jjMfQBrhGRcuAH7OEk9RKoR0RygIeBc4ENwBIRma2qK1zZyoGRwG9Dzm0G\nTABOda75sXPuDg8yGwwZTbxzCJmOGaqKDy+KoV8c5XcHVqpqOYCIzAIGAQHFoKprnLTQZsn/Aq/7\nFYGIvA6cB/wzDnkMaUA2rGyOl3jnEJKNqbhTGy+KYaKqBjnwEZHpQHinPsG0Bda69tdhKwsvhJ67\n3jlmSDC9e/dO2jASwD/+8Y+kXTtViNcqKN51DqnqI8krRtnEhxfFELS0VkTqAd08lh+u6ed1wNLz\nuZbrJSguLqa4uNjjJQyG1CReqyDjK8kQis/nw+fzecobUTGIyG3AH4BDHW+q/op6H/C4R1nWAR1c\n++2w5xq8nlsccu6CcBkt85IZDAYXZqiqKqGN5lL3eGQIERWDqk4CJonIJFWt6YK2JUAnESkENgJD\ngWFR8rt7Ca8Bd4lIAbZF088xbjgMhrQhnpjOhuTiZSjpXyJyduhBVV0U60RV3S8iNwCvc9BcdbmI\nlAJLVHWOiJwGvITtdmOAiFiqepKqfi8idwIfYQ8hlarq9mrcm8GQsRhfSdExyiY+vKxjeNW12xB7\n8vhjVT0nkYJ5xaxjMMRDqr4ntbGOwLKCrZf8lJRUbw6ipuUE0vzzFf4JdX+M5jR0tZFJxLWOQVUH\nhhTWHvhTLclmMBjCkGyrILdVFFgRcsUow/KXFX4/kZihqvioSditdcCJtS1ItlFUVESjRo3Iz8+n\ndevWXHHFFezZs6dGZd1yyy0cffTRFBQUcPzxxzN9+vRA2tatW+nZsyctW7akefPm/OxnP+O9994L\npO/bt4/f/OY3tG3blhYtWnDDDTewf//+uO8vGfTp0ydjTF39YSpL+1iIELTVRT1XurA0sNUEEygn\nvfESqOchDpqJ5gBdgaWRzzB4QUSYO3cuffr0YePGjfTt25eJEydy9913V7usvLw85s6dS+fOnfnw\nww8577zz6Ny5Mz169CAvL48nnngi4Odo9uzZDBw4kM2bN5OTk8OkSZP45JNPWLZsGZWVlQwYMICJ\nEydSUguD2Pv374/qAdaQWCyrdpRIvOWEDhnVxRCS6SXEh5cew0fAx862GNu7amTvawbP+Me2W7du\nTb9+/fjiiy8AO6jN22+/HchXWlrKiBGR1xOWlJQEKv7u3bvTq1cvFi9eDECDBg0CaapKTk4O27dv\nZ9s2O7zGnDlzGDNmDAUFBbRo0YIxY8ZEbXXn5OTw0EMPcdRRR3H44YcHeVB1h/Bs0aIFpaWlqCoT\nJ06kqKiIVq1aMWrUKHbu3AnYrrlzcnJ48skn6dChAy1atOCxxx7jo48+okuXLjRv3pwbb7yxSvlj\nxoyhadOmHH/88YHndPvtt/POO+9www03kJ+fz5gxYzz+CoZE4LOswGZIP7zMMUwTkUOBDqr63zqQ\nqc7wj6P6WzDx7teUtWvXMm/evKheQr26ifjxxx9ZsmQJv/71r4OOd+nShRUrVlBZWclVV10ViNGg\nqkGTrwcOHGDdunXs2rWLJk2ahL3Gyy+/zCeffMKuXbs499xzOfbYY7niiisA+OCDD7jsssvYvHkz\nFRUVPPHEEzz11FMsXLiQww47jBEjRnDDDTcExXj+8MMPWbVqFYsWLWLgwIH069ePt99+m71793LK\nKacwePBgevXqFSh/8ODBbN26lRdeeIGLLrqIsrIyJk6cyLvvvsuIESMCsqQ7tdXij1R2uO+Zgplj\niI+YPQYRGQh8Bsx39ruKiHHBXQtceOGFNG/enLPPPps+ffpw223xxz+69tprOeWUU+jbt2/Q8aVL\nl7Jr1y5mzJgRCJkJ0K9fPx588EG2bNnCt99+G4gKF22+49Zbb6WgoIB27dpx0003MXPmzEBa27Zt\nuf7668nJyaFBgwbMmDGDm2++mcLCQho1asSkSZOYNWsWBw4cAGyFN2HCBHJzc/mf//kfGjduzLBh\nw2jRogVt2rShV69efPrpp4HyjzjiCMaMGUO9evUYPHgwxxxzDHPnzo37uWUbpaUHt0SQSnMMls8K\ndjESsm+oipd1DBa2iaoPQFU/E5GihEmURcyePZs+ffpU65zrrruOp59+GhHhD3/4A7feenDN3y23\n3MKyZctYsCDsAnFyc3MZMmQIxx9/PF27duWkk05i/Pjx7Nixg65du9KwYUOuuuoqPvvsMw4//PCI\nMrRr1y7wPVrIT4ANGzZQWFgYlL+yspJNmzYFjrmvdeihh1YJA+oO+RkaxS30+plC0iOo+VxzTGGm\nm1K9x+HuJRglUH28KIZKVd2RiR4vY02KVXe/ukSyn2/cuHFQi/3bbw8GzHvkkUd45JFHqpxTUlLC\na6+9xqJFi8jLy4t63YqKClavXs1JJ51Ew4YNmTJlClOmTAHg8ccfp1u3blGHrtauXRuIDLdmzZpA\nZDWoOuTVpk0bysvLA/vl5eXUr1+fI444Iih8p1fccaT91x80aFDYa6cziY6gFpMYlWks765m+Ca9\n8TL5/IWIXAbUE5HOjpXSe7FOMtScrl27MmvWLCorK/noo494/vnno+afNGkSM2fO5I033qBp06ZB\naR988AHvvvsuFRUV/PTTT9x777189913nHHGGYDdot+4cSMA77//PhMnTowZIOe+++5j+/btrF27\nlgcffJChQ4dGzDts2DDuv/9+ysrK2L17N+PHj2fo0KHk5NivXnUXl3333Xc89NBDVFZW8txzz7Fi\nxQrOP/98wB5mWr16dbXKM2Qm/vkZy7IVq1u5uucITW8iPF4Uw43YHlb3AjOBncBNiRQqG4jWur3z\nzjtZtWoVzZs3p7S0lF/+8pdRyxo/fjxr166lc+fONGnShPz8/EA857179/LrX/+ali1b0q5dO+bP\nn8+8efNo1aoVAF9//TVnnXUWeXl5jB49mj/96U+ce+65Ua83aNAgunXrxqmnnsrAgQOjTvZeccUV\njBgxgrPPPpujjjqKRo0aBXon4Z5DrP0zzjiDlStX0rJlS/74xz/ywgsv0KxZMwDGjh3Lc889R4sW\nLbjpJvOKRsPfqRw5Mny6/3iMzmdEUmqOwao69OXRyWjWEtMlRqpjXGLULTk5OaxatYojjzyyzq89\nbdo0pk6dyqJFMd10eSZV35NEh9acPNmuIMeNCz8UZFnBearIFyN0aCpZBUVz5pfNxOUSQ0SOxg67\nWeTOnyq+kgwGQ/UZNy58he8nXlPZZCsDQ3x4mXx+DngU+DuQnr4SDLVGJk3wpjQxrIISTSyrqHTy\n7hqqo/xuvw/69gvJYPDkXfVjVfUasa3OMUNJhnhI1fck1lBNwq8f51BWKg0lhSPV5asL4hpKAl4V\nkeuxYybs9R9U1W21JJ/BYAghnVrk6Ui2KgOveOkxfBPmsKpq3c8+hsH0GAzxYN6T8CR68tuQfOKN\nx9Cx9kUyGAyG5GGGkqLjZSgpLSksLDQTpYaYuN11JAvLZ4WNe1DSuyRto5yZije9yVjFUFZWlmwR\nDIa0JVYEuVT3lRQLo6yik7GKwWAw1JxYPRXjKymziTj5LCKnRjtRVT9JiETVJNLks8GQzqR6izzU\nnDbdVheboa6aTz5Pdj4bAqdhh/MU4GTgA6BnbQppMGQ7lhU+PkI61ls+LAAsX5K8wxriIqJiUNU+\nACIyC7haVT939k/EdpFhMBhqiNd4CzV1YmeITrb2ErziZR3DZ6raNdaxKOefBzyA7cl1qqreG5Ke\nCzwFdAO2AENUdY2IHILthuNUoB4wXVXvCVO+GUoypB3h1gmE9hjy8iI7sUs2yV6ZbYifeFc+LxeR\nvwNPAwoMB5Z7vHAO8DBwLrABWCIis1V1hSvblcA2Ve0sIkOAPwFDgUuBXFU92Yk5vUxEZqjqGi/X\nNhjSjUTGeK4umeQrKRxmjiE6XhTDaOA6YKyzvwioGkIsPN2BlapaDoFhqUGAWzEM4qCbsOeBh5zv\nCjQWkXpAI2x3HDs9XtdgMMRBvBHkkh6a1BAXXlY+/yQijwLzVPW/1Sy/LeCO37gOW1mEzaOq+0Vk\nh4g0x1YSg4CNwKHAb1R1ezWvbzAYDFUwvYToeInHcAFwH5ALdBSRrsAdqnqBh/LDjV+FjkiG5hEn\nT3egEmgFtADeEZE3VbUstEDL9SMXFxdTXFzsQTSDwVBTgsxpnd6BO2Sme9+QGvh8PnweQ9d5GUoq\nwa6kfQCq+pmIFHmUZR3QwbXfDnuuwc1aoD2wwRk2ylfV75040/NV9QCwWUTexTabLQu9iGW0vyHd\nSHK8hWwnG+cYQhvNpeFsox28KIZKVd1RQ79DS4BOIlKIPSQ0FBgWkudVYCT22ohLgbed42uAc4Bn\nRKQx0AO4vyZCGAwpR5oHoS8O6qUnTQxDgvCiGL5wWu/1RKQzMAZ4z0vhzpzBDcDrHDRXXS4ipcAS\nVZ0DTAWmi8hKYCu28gD4C/CEiHzh7E9V1S8wGDKAVLfqieUrye2KLHTIKB2GkLKll1BTvKxjaASM\nB/o6h14D7lTVvZHPqjvMOgaDoe4x6xjSn2jrGLwohktV9blYx5KFUQwGQ92T7oohG+cYQol3gdtt\nQKgSCHfMYDBkC0HDRVaETIZ0JaJiEJF+wPlAWxGZ4krKxzYjNRgMNcQsAEsu2dpL8Eo0t9tdgK7A\nHcAEV9IuYIGqfp948WJjhpIM6Ui6x1RO96EkQw2HklR1KbBURI5Q1WkhBY4FHqxdMQ0GQ6pgfCVl\nN17mGIZiO7ZzMwqjGAyGjCWWryRf0LxC1XRDehNtjmEYcBm2G4xXXElNsNcbGAwGQ1piegnRidZj\neA97tXJLDkZzA3uO4T+JFMpgMKQ2pmLNbKLNMZQD5cCZdSeOwZAlpLmvJMtnMXnxZKzeFuPOSsFI\nQjEwcwzRiTaU9G9V7Skiuwj2iCqAqmp+wqUzGDKVFPeVlJebx+59uxnZZWTY9EefX8Hu3d343cp5\naakYDNGJ1mPo6Xw2qTtxDIbsINWteqzeFtZCi6KmRWHTN+3+FoADB/bXoVS1h+klRCemSwwAEWmG\n7Ro7oEhU9ZMEyuUZs47BYKh70n0dBpg4EnG5xBCRO7HNU1cDB5zDiu0S22AwGNIOy3ICzAAUh0nP\n8pXpXtYxDAaOUtV9iRbGYDCkCd/0TrYEhgTixbvqC8B1qvpd3YhUPcxQkiEdSZcWqX8oPvSz9LNR\ngTz68pN1J5Ch1ojXu+ok4FMnYE4gBoPHmM8GgyEMsVYWpzyzn0y2BIYE4kUxTAPuBT7n4ByDwWDI\nYlLdqioWbqOkcAZK6dKjSxReFMMWVZ0SO5vBYMgUIlWcgSGloHUY7u+GTMCLYvhYRCYBrxA8lJQS\n5qoGg8FQXWItY8jGXoIbL5PPC8IcVlVNCXNVM/lsSDaWBaWlVY+XlEQYprCgVNJ/HYAhvYlr8llV\n+9S+SAZDluP4Sqqfm2Q5PBK6+Kv4yWL7s6g4LVvXocNjoVZXfl9KxcXZ2XvwssDtCOBuoI2q9hOR\n44EzVXVqwqUzGDIVn0VeXuwhjWQRy8ncwvKFgc9srDgzHS9zDE8CTwDjnf2vgH8CRjEYDAS3OBOR\nP9Vxh/mMNHyWasSSsdiZULeKEy1JauJljmGJqp4uIp+q6inOsc9UtaunC4icBzwA5ABTVfXekPRc\n4CmgG7AFGKKqa5y0k4FHgXxgP3B66ApsM8dgMNQ9bl9JWAf/f+miGAzxL3D7QURa4LjeFpEewA6P\nF84BHgbOBTYAS0RktqqucGW7Etimqp1FZAh2GNGhIlIPmA78UlW/cBz5VXi5rsGQaGLZwRvSm2yP\n1+BFMdyMbap6lIi8CxwGXOKx/O7ASifoDyIyCxgEuBXDIA6GKnkeeMj53hdYqqpfAKjq9x6vaTAk\nHLcVUibWG9WpGE2HPfPwYpX0iYj0Bo7BDtLzX1X12nJvC6x17a/DVhZh86jqfhHZISLNgaMBRGQ+\ndnjRf6rqfR6vazCkNOm+srakd/Slz+neo8rGXoIbT/EYaly4yCVAX1W92tkfjj1PMNaV5wsnzwZn\nfxVwOnAFcD1wGvAT8BYwXlUXhFxDS1zr84uLiykuLk7YPRkMEDzhWpO/UCbEM4hGvM/HUPv4fD58\nPl9gv7S0NOIcQ6IVQw/AUtXznP1bsRfH3evK8y8nzwfOvMJGVT3cmW/4X1W9wsl3O/Cjqk4OuYaZ\nfDbUOUYxRCfdFUM2zDHEO/kcD0uATiJSCGwEhgLDQvK8CowEPgAuBd52jr8G3CIiDYFKoDfw5wTL\nazAYyI6K0RAZT4pBRNoChQSH9lwU6zxnzuAG4HUOmqsuF5FSYImqzsFeDzFdRFYCW7GVB6q6XUT+\nDHyE7dV1rqr+q1p3ZzAkiFjeRSe/NxlrocW4M8el5RxCtpPtytDLOoZ7gSHAMuy1BGAPB6VEPAYz\nlGRIRZpMasLufbsZ2WUkT174ZJX0US+PYtrSaeTl5rHrtl11L2CCSfehpGwg3qGkC4FjVHVvzJwG\ngwGA3ft2AzBt6bSwiqGoaRF5uXlYva26FayWiGVVle7xGrJ9KM1Lj+FfwKWqurtuRKoepsdgSEXS\nfXI5VsWY7vcXi2xQDPH2GPYAn4nIWwTHYxhTS/IZDAZDSpGpysArXhTDK85mMBiyhGyvGLMdLyuf\npzmO7o52DlVn5bPBkJHEWtkba2VwqhEajyD0M9vIhqGkaHiJx1AMTAPKsF1itBeRkV7MVQ2GTCWW\nr6RUN1GNpdh8frfTvtS/F0Pt42UoaTK2y4r/AojI0cBMbDfZBoMhCzG+kjIbL1ZJ/1HVk2MdSxbG\nKsmQDIydfnTM80l94rVK+khEpmLHRgD4JfBxbQlnMBiST2hM59D9bCPb5xhyPOS5DvgSGAOMxV4B\nfW0ihTIYks3kydCkid3yzcR6odiyApvBEIoXq6S92M7rjAM7Q8Zi+SxKF5YGH/wt4CsBZyLWTe8S\ni8VMpjcWMC5seYHvWdrqTmeysZfgJtHeVQ2GjKSoaxkLl+5mca5FOMXgVjKpqBhCK75QGVNRZkPd\nYRSDwRCDcI3HaUunAQd9ImUbxldSZpPQQD11gbFKMiSCWFY1sXwFpbovoXgrvlS/v3jJBsUQl1WS\ns27hFqrGYzin1iQ0GOqYTG/xGuIjU5WBV7ysY1gKPIptouqPx4CqpoTJqukxGGpCvC3edO8xxEum\n3182EO86hkpVfaSWZTIY0ppYK3/TzVeSIZhsGEqKhhfF8KqIXA+8RLDb7W0Jk8pgSHFiWe2kulVP\ntld8huh4UQwjnc9bXMcUOLL2xTEYDOmA8ZWU2RirJENWYsbIE4vxlZT6xGuVVB/bLcbZziEf8JiJ\nyWBIZzK9xWuIj2wfavNilfR3oD52TAaAEcB+Vf1VgmXzhOkxGBJBprd4E13xpfvzywbFEK9V0umq\n2sW1/7ZjwmowZC2x1kEYX0npTaYqA6946TF8Alyqql87+0cCz6vqqZ4uIHIe8AC2J9epqnpvSHou\n8BR24J8twBBVXeNK74Dt3bVEVas48jM9BkMiyPSVz4km3XsMkPmuyOPtMdwCLBCR1dihPQuB0R4v\nnAM8DJwLbACWiMhsVV3hynYlsE1VO4vIEOBPwFBX+p+BeV6uZzAY6oZMXzluWfZkKgDFYdIzvEfo\nxe32WyLSGTgGWzGscFxxe6E7sFJVywFEZBYwCHArhkGA/zV6HluR4OQfBHwN/ODxegaDwQPxjqHH\n8h6b5SMxaU9ExSAi56jq2yJyUUjSUU4X5EUP5bcF1rr212Eri7B5VHW/iGwXkebAT8DvgJ8TvIbC\nYIibvndb+BZCxT7AZ1FSElyZpXuL14//nkI/DdGxn5MVfMylADOxl+AmWo+hN/A2MDBMmgJeFEO4\n8avQEcfQPOLkKQXuV9U9Yg9Yhh0LA7Bcb3txcTHFxcUeRDNkM29UlMJZzo5rWMBPpleg2T65mo34\nfD58Pp+nvBEVg6r620x3qOo37jQR6ehRlnVAB9d+O+y5BjdrgfbABhGpB+Sr6vcicgZwsYj8CWgG\n7BeRH1X1r6EXscxLbqhjjK+kzCbWOpZ0nGMIbTSXlpZGzOtl8vkFINQC6XlsK6JYLAE6iUghsBF7\nUnlYSJ5Xsd1ufABcit1LQVX9C+oQkRJgVzilYDDES02sZlLdV1Kkii0wpJSGFZuh7og2x3AscAJQ\nEDLPkA809FK4M2dwA/A6B81Vl4tIKbBEVecAU4HpIrIS2EqwRZLBYIgDHxaWr6rJZbxk+spx95yM\nfws+btW1SHVKtB7DMcAAoCnB8wy7gKu8XkBV5ztluY+VuL7vBQbHKCNyn8dgMFThYM8gQnqcvYRY\n57tHKTK8Ds1Ios0xzAZmi8iZqrq4DmUyGBKOmQOoXSyfFWTCigXszXMm9sclR6gEkukuM7ysfJ4G\njFXV7c5+M2Cyql5RB/LFxKx8NhiqUtcVVxXF4GdvHnr3roRfv67JBMUQ78rnk/1KAcCxGDql1qQz\nGNIQ4yvJA5+NhO1FyZYiIaSrMvCK15jPxar6vbPfHFioqifVgXwxMT0GQzIwvpKikwm+kjKdeHsM\nk4H3ROR5Z/9S4K7aEs5gSAbpbjWT6mTKyvFIZMJQUjS8+Ep6SkQ+Bvpgrz6+SFWXJVwygyGBZLrV\nTLIrrkx8ptmElx4DqvqliGzGWb8gIh3crrENhrQjaNzfipDJYAhPJvYS3HgJ7XkB9nBSG+A7bLfb\ny7EXvxkM6Umx24LGSpYUCSPTKy5DYvHSY7gT6AG8qaqniEgfqrq1MBiyCuMrKTqZbpWV7KG6ROPF\nKukjVT3NsU46RVUPiMiHqhrqPjspGKskQ03IBKuhSC61LSv5FVcmPN9oJPv51gbxWiVtF5E8YBHw\njIh8B1TWpoAGg8GQTqSrMvCKF8UwCPgR+A3wS6AAuCORQhkMhvjI9IrLkFiiKgYnPsJsVf0f4AAw\nrU6kMhgSTG3NAURyBVHSuyThY+tBazF8FhSnT+B6y2cxefFkrN4W485KP19KmTCUFI2oisFxm71H\nRApUdUddCWUwJJpUrTC9kvIV0948aLDbdosRhrLtZezetxtrYXoqhkzHy1DST8DnIvIG8IP/oKqO\nSZhUBoMhvfFZ9lqRCL6Spi21Bx9279tdZyLVJimpjGsRL1ZJYVW+qqbEsJKxSjIYUo8mTWD3bhg5\nEp58smp6plstpQM1skryr25OFQVgMNQmxldSYvFHPSsqSrIgCSLlh/LiJGKPQUQ+UdVTne8vqOrF\ndSqZR0yPwVAT0t37Z7pXTOneY0j35w81X8fgPuHI2hXJYEgyxldScvG5rMLScJF4uioDr3jtMQS+\npxqmx2CoCeneYk130r3HlgnUtMfQRUR2YvccDnW+4+yrqubXspwGgyFLSPd4DZkwlBSNiIpBVevV\npSAGg8E76V4xpaHIWYWneAwGg8FgOEg6KuPqkHDFICLnAQ8AOcBUVb03JD0XeAroBmwBhqjqGhH5\nH+AeoD6wD/idqi5ItLwGQ6oR1nsqVtq3upPpTsQQnYQqBhHJAR4GzgU2AEtEZLaqrnBluxLYpqqd\nRWQI8CdgKLAZGKCq34rICcBrQLtEymvIHtItXoIPC8t30JVH6L6hbkn3obxYJLrH0B1YqarlACIy\nC9tbq1sxDOKgwdrz2IoEVV3qz+CEFm0gIvVVtSLBMhuygFSvUN0VT7Exp01pQh0WproDQy8kWjG0\nBfbjPkwAAA5RSURBVNa69tdhK4uweRynfdtFpLmqbvNnEJFLgE+NUjBkI5YFli/yfjpi6z2LkjQd\nEnP3EtzR6jKFRCuGcDayoVbLoXnEnccZRpoE/DzSRSx366q4mOLi4mqKaTCkFqHDE6Gtz3RujQKU\nuqYW0lExpCM+nw+fz+cpb0wnevEgIj0AS1XPc/ZvxV4Dca8rz7+cPB848R82qurhTlo74C1gpKq+\nH+EaZoGbodoYX0nJJdYCt1SPGR3r/Ul1+SH+0J7xsAToJCKFwEbsSeVhIXleBUYCHwCXAm8DiEhT\nYA5waySlYDBUB8sKbqm6j6camT656cbvcM+N21opVSvWTCahisGZM7gBeJ2D5qrLRaQUWKKqc4Cp\nwHQRWQlsxVYeAL8GjgL+KCITsIeX+qrqlkTKbMgSnMqmfi4YX0l1T16e7ZY7XXGbDrsV28FPq65F\nqlUSvo5BVecDx4QcK3F93wsMDnPeXcBdiZbPkKUU2y1S25rBSqIg4cmWXkI6K4dMxqx8NmQk4caA\n3S07CTOkZKg7xo2zt0wl3YcCEzr5XBeYyWdDOGJNbqaCd1V/5eGvONz76V6xxEsq/D7xkA6/XzIn\nnw0Gg6H6mHgNScUohixl8nuTsRZa7N63O2V804T6zsnLzcPqbTHurBqMOZw52Z5gbrAby5ca91cd\n0r1iiZswi8Zq9f0wRMUohizFrxQipqeAHfbufbuxFob/40+ebM8XjBsXwdzUUQqRSAVfSaGVf9Yr\nAxde4jVEez+STToMJUXDKIYsJZpSgNSxI48kp9+ipawswolRlAIk3zY+3SuOROP1kcR6jw01w0w+\nZymxJvcSPfkXq0cSKT3cIrVUnVyOhlEM8ZEKPdp0x0w+G1KOWD0Sr3/2vLxaEiiBZGo8hWRilEFi\nMYohS0mFMfZoePFllJcXOS3V78+Q2aR7j9AMJRnCkuihmJhDWTHWIaQ6lmUH0wFXPAV/K9dn4cPC\n7wTYtH4zj3RQDGYoyVBtTIu79ggMIfkO7qd7PIVEk+7eb1NVGXjF9BgMSSHTewyQmZG96opM+P1T\nnWg9BqMYDEkhllWJ9Dl4TBdUTTdkNhJSXZWUhPQiUtwqKd2HkoxiMKQkqW5uCsbXUSJp0iTY82qo\nYkj19yMoZnex/ZlqPUczx5BBuN0CxOMSwGuLK9QNgZ9IbjRqS754SfUWpSE66e6WO91jQhvFkMbE\n4xKgLlY2++Xb9fq4sJHTQluBtUmyV26bXkJ8ZLpb7lTHKIYUxWuLN9VdAqS6fF7xskjNKAODn2Cr\nKitgiWZZ9v+52LIo9tkmy6nYo81JtgCG8JQuLA1sbqxiy/OYqmXZk3ihW6T6KzR/kybQ5GP7eqGb\nVWyFLb+0j0VJBsz5WJY9Thw0V4AVUNg+rKB9gyGTMD2GNKUu1hns3n3Qg2l1cctnFVdVRoEJOF/4\nFpNZR2GISorHa4jVefQverSKEy1JzTCKIU2pq+5nTSf/YskX1BPyWWHmIKyEzkG4iWRd5LcmgaqL\n0sywUZJJs55alYaRFS5X6mAUQwbjt+wIi69qM8ud38uLG7X8JFMbPY5Q5ZaKY8HZipd4DalMqpsz\nG8WQRCyrqgtpcF76sNbFtXjtGJVcCr6r1cI/wQdAsfMRYZ2BIf0I9/OF/p/8ThaNdVP1Sfjks4ic\nJyIrROQrEfl9mPRcEZklIitFZLGIdHCl3eYcXy4ifRMtaypR0rsksCUCn8+XkHJrgmXZbg9Ct5r0\nWmrSi/FZVlCrLXQ/KG8KPbd0IhnPzT9Hlor437Hi4hALRF+wQUOy3reEKgYRyQEeBv4XOAEYJiLH\nhmS7Etimqp2BB4A/OeceDwwGjgP6AX8VCV0on7lYxVZgSwTVeeGqa91U24RaB0WzFgq3Hw7/H7O6\n3XijGGpGsp5bKi+QsyxwP5bQfchQxQB0B1aqarmqVgCzgEEheQYB05zvzwPnON8vAGapaqWqlgEr\nnfLqlJr+MF7OKy72RW0pRyrD5/MFWhYB88mQvJYFo0b5gu3s6/AlG/XAqCD5Qivzwu9HUvj9yECP\nqNiy6DpqVCC96KZRFN00KmwFvz1iPM/g9NCK3yourhpnOcwzCT1Wl8+tJtfyek6sfNHet1jH6vqZ\nud9//7XcPc+SkoNbJGrjuVU3LfRY6Lvs3/f/X55MkmJI9BxDW2Cta38dVSv3QB5V3S8iO0SkuXN8\nsSvfeudYFQJ+U77pbX+WF9tWC05ru6S3bXNfdNMoyreXQceF3vP7fPCL8uqXvwAoip7/wltvYsex\nTavIUzKqGKvY4sKbLHY0Kz5ogeGc31thYZ/SQP7ShQILoKBoJDvKiw7mL7SgYzH4HCuglwqha5F9\nPR88eVMZRU2Lwvr6ce/7Tevc8QQAniyz8FnhfQVNe9JnX8svX1lvCpva+wBFznd3j8j9JynfXuac\nOw3K7Pu0fHYPantZGU2LnPMtKH7SR+nChfY9ClAGS51H6i7f5/NR7DY18ngsXJ5EUZNreT0nVr5I\n6TV5Rol+Zm6rttIFpdAn2E1L0PCiL7xbF57oDeW+sA76gvIvAPpgG2z4gq3lfD4fPnyeyw/K7yuB\nsjKWdpxm7z+5AMqLuLDIAv9/jtj1VuFIi6Kig/9Dr/mjkVAneiJyCdBXVa929ocDp6vqWFeeL5w8\nG5x9f8/gTuA9VZ3hHP87MFdVXwq5RvqvpjIYDIYkkCwneuuADq79dsCGkDxrgfbABhGpBxSo6vci\nss45Hu3ciDdmMBgMhpqR6DmGJUAnESkUkVxgKPBKSJ5XgZHO90uBt53vrwBDHauljkAn4MMEy2sw\nGAxZT0J7DM6cwQ3A69hKaKqqLheRUmCJqs4BpgLTnSGkrdjKA1VdJiLPAsuACuB6E3jBYDAYEk/a\nB+oxGAwGQ+1ivKsaDAaDIQijGAwGg8EQRMYqBhE5VkQeEZFnReTaZMvz/+3df6hkZR3H8ffHNFbF\nEP0jXJdMcLcIF6QgFbdIc/1viVyrrbSwH0KC/hHqPyZIQmhGEsvqKpYLS67sZkvZCiKaayIJ7ra6\n5QqCP8oIV3MV3JWlbp/+OM/snTPN3Gbm7p05M/fz+mfuPOc5537vl3Pne89z7nmeSSHpC5LukbRd\n0upxxzMJJJ0p6d5yTyz6IOkESZsk3S3pa+OOZ1KM6lyb+nsMZRqNe2x/d9yxTBJJJwO3J2/9k7TV\n9pfHHcckKM80HbC9Q9IDtteNO6ZJstDnWuOvGCT9XNIbkp7vaJ9zcr7SZw3wB+CxUcTaJPPJW/ED\nYMPCRtksRyFni9YQuVvG7KwIMyMLtGGaes41vjAA91FNwnfEXJPzSbpC0k8lnWb7IdurgMtHHXQD\nDJu3pZJuBR62vWfUQY/Z0Odaq/sog22YgXJHVRSWtbqOKsgGGjRvR7otZFCNLwy2nwIOdDT3nJzP\n9mbb3wdWSPqZpI3AjpEG3QDzyNta4PPAZZKuGmXM4zaPnB2WdBdwzmK9ohg0d8B2qnNsA9VDrovS\noHmTdMoozrVJXajn/07OZ3snsHOUQU2AfvK2Hlg/yqAarp+cvQ18b5RBTYieubN9CPjWOIKaAHPl\nbSTnWuOvGHrodhk13XfRj47kbXDJ2fCSu+GMPW+TWhj6mZwv/lfyNrjkbHjJ3XDGnrdJKQyiXkX7\nmZwvkrdhJGfDS+6G07i8Nb4wSLofeJrqZvJfJV1pewa4hmpyvr9QrfS2b5xxNk3yNrjkbHjJ3XCa\nmrepf8AtIiIG0/grhoiIGK0UhoiIqElhiIiImhSGiIioSWGIiIiaFIaIiKhJYYiIiJoUhphakmYk\n7Zb0p/J6w7hjapG0TdJHy9evStrZsX1P5xz9XY7xsqTlHW13SLpO0tmS7jvaccfiMKmzq0b046Dt\nTx7NA0r6QHkydT7H+ARwjO1XS5OBkySdbvvvZe79fp483UI1XcIt5bgCLgPOt/26pNMlLbP9+nzi\njcUnVwwxzbouZiLpFUk3S9ol6TlJK0r7CWVFrWfKtjWl/Zuq1g7/LfCIKndK2ivpIUk7JF0q6SJJ\nv277PhdLerBLCF8HftPRtpXqQx7gq8D9bcc5RtKPS1x7JLWWW32g9G35LPBKWyH4XdsxI/qWwhDT\n7PiOoaQvtW3bb/tTwEbgutJ2I/CY7XOBi4CfSDq+bDsPuML2xcClwEdsrwS+A5wPYPtx4OOSTi37\nXAn8oktcFwC72t4b+BXwxfJ+DfXFa74NvFPi+jRwlaQzbO8FZiStLP3WUV1FtDwLfGauBEV0k6Gk\nmGaH5hhK2l5edzH7gXwJsEbS9eX9B5md/vhR2++Wr1cB2wBsvyHp923H3QxcLmkTpZh0+d6nAW92\ntL0NHJD0FeAF4P22bZcAK9sK24eA5cBrVFcN6yS9QLXK101t++0Hlnb96SPmkMIQi9Xh8jrD7O+B\ngLW2X2rvKOk84GB70xzH3UT11/5hYJvt/3TpcwhY0qV9K7AB+EZHu4BrbD/aZZ8tVLNwPgk8Z/ut\ntm1LqBeYiL5kKCmm2aALpj8CXHtkZ+mcHv2eAtaWew0fBj7X2mD7H1SLqtxIVSS62Qec1SXO7cBt\nVB/0nXFdLenYEtfy1hCX7ZeBfwK3Uh9GAlgB/LlHDBE9pTDENFvScY/hR6W913/83AIcJ+l5SXuB\nH/bo9yDVKlt7gbuAPwLvtm3/JfA32y/22P9h4MK29waw/Z7t223/u6P/vVTDS7tLXBupX+1vAT7G\n7PBYy4XAjh4xRPSU9RgihiDpRNsHJZ0CPANcYHt/2bYe2G2763MEkpYAj5d9FuQXsKz89QSwqsdw\nVkRPKQwRQyg3nE8GjgNus725tD8LvAestv2vOfZfDexbqGcMJJ0FLLX95EIcP6ZbCkNERNTkHkNE\nRNSkMERERE0KQ0RE1KQwRERETQpDRETU/Bdrd9VfMlA5MwAAAABJRU5ErkJggg==\n", "text/plain": [ - "" + "" ] }, "metadata": {}, diff --git a/docs/source/usersguide/input.rst b/docs/source/usersguide/input.rst index 2ab823e6e..425724bb6 100644 --- a/docs/source/usersguide/input.rst +++ b/docs/source/usersguide/input.rst @@ -1859,6 +1859,11 @@ The ```` element accepts the following sub-elements: | |deposited locally. Units are MeV per source | | |paticle. | +----------------------+---------------------------------------------------+ + |decay-rate |The delayed-nu-fission-weighted decay rate where | + | |the decay rate is in units of inverse seconds. | + | |This score type is not used in the | + | |multi-group :ref:`energy_mode`. | + +----------------------+---------------------------------------------------+ .. note:: The ``analog`` estimator is actually identical to the ``collision`` diff --git a/openmc/mgxs/mdgxs.py b/openmc/mgxs/mdgxs.py index 8941d4c6f..9fa286ff3 100644 --- a/openmc/mgxs/mdgxs.py +++ b/openmc/mgxs/mdgxs.py @@ -20,7 +20,8 @@ if sys.version_info[0] >= 3: # Supported cross section types MDGXS_TYPES = ['delayed-nu-fission', 'chi-delayed', - 'beta'] + 'beta', + 'decay-rate'] # Maximum number of delayed groups, from src/constants.F90 MAX_DELAYED_GROUPS = 8 @@ -213,7 +214,7 @@ class MDGXS(MGXS): Parameters ---------- - mdgxs_type : {'delayed-nu-fission', 'chi-delayed', 'beta'} + mdgxs_type : {'delayed-nu-fission', 'chi-delayed', 'beta', 'decay-rate'} The type of multi-delayed-group cross section object to return domain : openmc.Material or openmc.Cell or openmc.Universe or openmc.Mesh @@ -249,6 +250,8 @@ class MDGXS(MGXS): delayed_groups) elif mdgxs_type == 'beta': mdgxs = Beta(domain, domain_type, energy_groups, delayed_groups) + elif mdgxs_type == 'decay-rate': + mdgxs = DecayRate(domain, domain_type, energy_groups, delayed_groups) mdgxs.by_nuclide = by_nuclide mdgxs.name = name @@ -1574,3 +1577,155 @@ class Beta(MDGXS): super(Beta, self)._compute_xs() return self._xs_tally + + +class DecayRate(MDGXS): + r"""The decay rate for delayed neutron precursors. + + This class can be used for both OpenMC input generation and tally data + post-processing to compute spatially-homogenized and energy-integrated + multi-group and multi-delayed group cross sections for multi-group + neutronics calculations. At a minimum, one needs to set the + :attr:`DecayRate.energy_groups` and :attr:`DecayRate.domain` properties. + Tallies for the flux and appropriate reaction rates over the specified + domain are generated automatically via the :attr:`DecayRate.tallies` + property, which can then be appended to a :class:`openmc.Tallies` instance. + + For post-processing, the :meth:`MGXS.load_from_statepoint` will pull in the + necessary data to compute multi-group cross sections from a + :class:`openmc.StatePoint` instance. The derived multi-group cross section + can then be obtained from the :attr:`DecayRate.xs_tally` property. + + For a spatial domain :math:`V`, energy group :math:`[E_g,E_{g-1}]`, and + delayed group :math:`d`, the decay rate is calculated as: + + .. math:: + + \langle \lambda_d \nu^d \sigma_f \phi \rangle &= \int_{r \in V} dr + \int_{4\pi} d\Omega' \int_0^\infty dE' \int_0^\infty dE \; \chi(E) \nu^d + \sigma_f (r, E') \psi(r, E', \Omega') \\ + \langle \nu \sigma_f \phi \rangle &= \int_{r \in V} dr \int_{4\pi} + d\Omega' \int_0^\infty dE' \int_0^\infty dE \; \chi(E) \nu^d + \sigma_f (r, E') \psi(r, E', \Omega') \\ + \lambda_d &= \frac{\langle \lambda_d \nu^d \sigma_f \phi \rangle} + {\langle \nu^d \sigma_f \phi \rangle} + + Parameters + ---------- + domain : openmc.Material or openmc.Cell or openmc.Universe or openmc.Mesh + The domain for spatial homogenization + domain_type : {'material', 'cell', 'distribcell', 'universe', 'mesh'} + The domain type for spatial homogenization + groups : openmc.mgxs.EnergyGroups + The energy group structure for energy condensation + by_nuclide : bool + If true, computes cross sections for each nuclide in domain + name : str, optional + Name of the multi-group cross section. Used as a label to identify + tallies in OpenMC 'tallies.xml' file. + delayed_groups : list of int + Delayed groups to filter out the xs + + Attributes + ---------- + name : str, optional + Name of the multi-group cross section + rxn_type : str + Reaction type (e.g., 'total', 'nu-fission', etc.) + by_nuclide : bool + If true, computes cross sections for each nuclide in domain + domain : Material or Cell or Universe or Mesh + Domain for spatial homogenization + domain_type : {'material', 'cell', 'distribcell', 'universe', 'mesh'} + Domain type for spatial homogenization + energy_groups : openmc.mgxs.EnergyGroups + Energy group structure for energy condensation + delayed_groups : list of int + Delayed groups to filter out the xs + tally_trigger : openmc.Trigger + An (optional) tally precision trigger given to each tally used to + compute the cross section + scores : list of str + The scores in each tally used to compute the multi-group cross section + filters : list of openmc.Filter + The filters in each tally used to compute the multi-group cross section + tally_keys : list of str + The keys into the tallies dictionary for each tally used to compute + the multi-group cross section + estimator : {'tracklength', 'analog'} + The tally estimator used to compute the multi-group cross section + tallies : collections.OrderedDict + OpenMC tallies needed to compute the multi-group cross section. The keys + are strings listed in the :attr:`DecayRate.tally_keys` property and + values are instances of :class:`openmc.Tally`. + rxn_rate_tally : openmc.Tally + Derived tally for the reaction rate tally used in the numerator to + compute the multi-group cross section. This attribute is None + unless the multi-group cross section has been computed. + xs_tally : openmc.Tally + Derived tally for the multi-group cross section. This attribute + is None unless the multi-group cross section has been computed. + num_subdomains : int + The number of subdomains is unity for 'material', 'cell' and 'universe' + domain types. When the This is equal to the number of cell instances + for 'distribcell' domain types (it is equal to unity prior to loading + tally data from a statepoint file). + num_nuclides : int + The number of nuclides for which the multi-group cross section is + being tracked. This is unity if the by_nuclide attribute is False. + nuclides : Iterable of str or 'sum' + The optional user-specified nuclides for which to compute cross + sections (e.g., 'U-238', 'O-16'). If by_nuclide is True but nuclides + are not specified by the user, all nuclides in the spatial domain + are included. This attribute is 'sum' if by_nuclide is false. + sparse : bool + Whether or not the MGXS' tallies use SciPy's LIL sparse matrix format + for compressed data storage + loaded_sp : bool + Whether or not a statepoint file has been loaded with tally data + derived : bool + Whether or not the MGXS is merged from one or more other MGXS + hdf5_key : str + The key used to index multi-group cross sections in an HDF5 data store + + """ + + def __init__(self, domain=None, domain_type=None, energy_groups=None, + delayed_groups=None, by_nuclide=False, name=''): + super(DecayRate, self).__init__(domain, domain_type, energy_groups, + delayed_groups, by_nuclide, name) + self._rxn_type = 'decay-rate' + self._estimator = 'analog' + + @property + def scores(self): + return ['delayed-nu-fission', 'decay-rate'] + + @property + def tally_keys(self): + return ['delayed-nu-fission', 'decay-rate'] + + @property + def filters(self): + + # Create the non-domain specific Filters for the Tallies + group_edges = self.energy_groups.group_edges + energy_filter = openmc.Filter('energy', group_edges) + + if self.delayed_groups != None: + delayed_filter = openmc.Filter('delayedgroup', self.delayed_groups) + return [[delayed_filter, energy_filter], [delayed_filter, energy_filter]] + else: + return [[energy_filter], [energy_filter]] + + @property + def xs_tally(self): + + if self._xs_tally is None: + delayed_nu_fission = self.tallies['delayed-nu-fission'] + + # Compute the decay rate + self._xs_tally = self.rxn_rate_tally / delayed_nu_fission + super(DecayRate, self)._compute_xs() + + return self._xs_tally diff --git a/src/constants.F90 b/src/constants.F90 index 481ca8e03..6cbe4edb8 100644 --- a/src/constants.F90 +++ b/src/constants.F90 @@ -290,7 +290,7 @@ module constants EVENT_ABSORB = 2 ! Tally score type - integer, parameter :: N_SCORE_TYPES = 23 + integer, parameter :: N_SCORE_TYPES = 24 integer, parameter :: & SCORE_FLUX = -1, & ! flux SCORE_TOTAL = -2, & ! total reaction rate @@ -314,7 +314,8 @@ module constants SCORE_PROMPT_NU_FISSION = -20, & ! prompt neutron production rate SCORE_INVERSE_VELOCITY = -21, & ! flux-weighted inverse velocity SCORE_FISS_Q_PROMPT = -22, & ! prompt fission Q-value - SCORE_FISS_Q_RECOV = -23 ! recoverable fission Q-value + SCORE_FISS_Q_RECOV = -23, & ! recoverable fission Q-value + SCORE_DECAY_RATE = -24 ! delayed neutron precursor decay rate ! Maximum scattering order supported integer, parameter :: MAX_ANG_ORDER = 10 diff --git a/src/endf.F90 b/src/endf.F90 index 07094d5d9..0ba2db388 100644 --- a/src/endf.F90 +++ b/src/endf.F90 @@ -40,6 +40,8 @@ contains string = "fission" case (SCORE_NU_FISSION) string = "nu-fission" + case (SCORE_DECAY_RATE) + string = "decay-rate" case (SCORE_DELAYED_NU_FISSION) string = "delayed-nu-fission" case (SCORE_PROMPT_NU_FISSION) diff --git a/src/input_xml.F90 b/src/input_xml.F90 index bcdf310e8..64fd30ea6 100644 --- a/src/input_xml.F90 +++ b/src/input_xml.F90 @@ -3297,22 +3297,6 @@ contains ! Check if total material was specified if (trim(sarray(j)) == 'total') then - - ! Check if a delayedgroup filter is present for this tally - do l = 1, size(t % filters) - select type(filt => t % filters(l) % obj) - type is (DelayedGroupFilter) - call warning("A delayedgroup filter was used on a total & - &nuclide tally. Cross section libraries are not & - &guaranteed to have the same delayed group structure & - &across all isotopes. In particular, ENDF/B-VII.1 does & - ¬ have a consistent delayed group structure across & - &all isotopes while the JEFF 3.1.1 library has the same & - &delayed group structure across all isotopes. Use with & - &caution!") - end select - end do - t % nuclide_bins(j) = -1 cycle end if @@ -3357,20 +3341,6 @@ contains allocate(t % nuclide_bins(1)) t % nuclide_bins(1) = -1 t % n_nuclide_bins = 1 - - ! Check if a delayedgroup filter is present for this tally - do l = 1, size(t % filters) - select type(filt => t % filters(l) % obj) - type is (DelayedGroupFilter) - call warning("A delayedgroup filter was used on a total nuclide & - &tally. Cross section libraries are not guaranteed to have the& - & same delayed group structure across all isotopes. In & - &particular, ENDF/B-VII.1 does not have a consistent delayed & - &group structure across all isotopes while the JEFF 3.1.1 & - &library has the same delayed group structure across all & - &isotopes. Use with caution!") - end select - end do end if ! ======================================================================= @@ -3484,8 +3454,9 @@ contains end if ! Check if delayed group filter is used with any score besides - ! delayed-nu-fission - if (score_name /= 'delayed-nu-fission' .and. & + ! delayed-nu-fission or decay-rate + if ((score_name /= 'delayed-nu-fission' .and. & + score_name /= 'decay-rate') .and. & t % find_filter(FILTER_DELAYEDGROUP) > 0) then call fatal_error("Cannot tally " // trim(score_name) // " with a & &delayedgroup filter.") @@ -3639,6 +3610,9 @@ contains ! Set tally estimator to analog t % estimator = ESTIMATOR_ANALOG end if + case ('decay-rate') + t % score_bins(j) = SCORE_DECAY_RATE + t % estimator = ESTIMATOR_ANALOG case ('delayed-nu-fission') t % score_bins(j) = SCORE_DELAYED_NU_FISSION if (t % find_filter(FILTER_ENERGYOUT) > 0) then diff --git a/src/output.F90 b/src/output.F90 index 9244e2d95..a43735da2 100644 --- a/src/output.F90 +++ b/src/output.F90 @@ -786,6 +786,7 @@ contains score_names(abs(SCORE_NU_SCATTER_N)) = "Scattering Prod. Rate Moment" score_names(abs(SCORE_NU_SCATTER_PN)) = "Scattering Prod. Rate Moment" score_names(abs(SCORE_NU_SCATTER_YN)) = "Scattering Prod. Rate Moment" + score_names(abs(SCORE_DECAY_RATE)) = "Decay Rate" score_names(abs(SCORE_DELAYED_NU_FISSION)) = "Delayed-Nu-Fission Rate" score_names(abs(SCORE_PROMPT_NU_FISSION)) = "Prompt-Nu-Fission Rate" score_names(abs(SCORE_INVERSE_VELOCITY)) = "Flux-Weighted Inverse Velocity" diff --git a/src/tally.F90 b/src/tally.F90 index d5af4ddc1..f9e233d73 100644 --- a/src/tally.F90 +++ b/src/tally.F90 @@ -93,6 +93,8 @@ contains integer :: score_bin ! scoring bin, e.g. SCORE_FLUX integer :: score_index ! scoring bin index integer :: d ! delayed neutron index + integer :: g ! delayed neutron index + integer :: k ! loop index for bank sites integer :: d_bin ! delayed group bin index integer :: dg_filter ! index of delayed group filter real(8) :: yield ! delayed neutron yield @@ -670,6 +672,143 @@ contains end if + case (SCORE_DECAY_RATE) + + ! Set the delayedgroup filter index + dg_filter = t % find_filter(FILTER_DELAYEDGROUP) + + if (survival_biasing) then + ! No fission events occur if survival biasing is on -- need to + ! calculate fraction of absorptions that would have resulted in + ! delayed-nu-fission + if (micro_xs(p % event_nuclide) % absorption > ZERO .and. & + nuclides(p % event_nuclide) % fissionable) then + + ! Check if the delayed group filter is present + if (dg_filter > 0) then + select type(filt => t % filters(dg_filter) % obj) + type is (DelayedGroupFilter) + + ! Loop over all delayed group bins and tally to them + ! individually + do d_bin = 1, filt % n_bins + + ! Get the delayed group for this bin + d = filt % groups(d_bin) + + ! Compute the yield for this delayed group + yield = nuclides(p % event_nuclide) & + % nu(E, EMISSION_DELAYED, d) + + associate (rxn => nuclides(p % event_nuclide) % & + reactions(nuclides(p % event_nuclide) % index_fission(1))) + + ! Compute the score + score = p % absorb_wgt * yield * & + micro_xs(p % event_nuclide) % fission & + / micro_xs(p % event_nuclide) % absorption & + * rxn % products(1 + d) % decay_rate * 1.e8 + end associate + + ! Tally to bin + call score_fission_delayed_dg(t, d_bin, score, score_index) + end do + cycle SCORE_LOOP + end select + else + + ! If the delayed group filter is not present, compute the score + ! by accumulating the absorbed weight times the decay rate times + ! the fraction of the delayed-nu-fission xs to the absorption xs + ! for all delayed groups. + score = ZERO + + associate (rxn => nuclides(p % event_nuclide) % & + reactions(nuclides(p % event_nuclide) % index_fission(1))) + + ! We need to be careful not to overshoot the number of delayed + ! groups since this could cause the range of the rxn % products + ! array to be exceeded. Hence, we use the size of this array + ! and not the MAX_DELAYED_GROUPS constant for this loop. + do d = 1, size(rxn % products) - 2 + + score = score + rxn % products(1 + d) % decay_rate * 1.e8 * & + p % absorb_wgt * micro_xs(p % event_nuclide) % fission *& + nuclides(p % event_nuclide) % nu(E, EMISSION_DELAYED, d)& + / micro_xs(p % event_nuclide) % absorption + end do + end associate + end if + end if + else + + ! Skip any non-fission events + if (.not. p % fission) cycle SCORE_LOOP + ! If there is no outgoing energy filter, than we only need to + ! score to one bin. For the score to be 'analog', we need to + ! score the number of particles that were banked in the fission + ! bank. Since this was weighted by 1/keff, we multiply by keff + ! to get the proper score. Loop over the neutrons produced from + ! fission and check which ones are delayed. If a delayed neutron is + ! encountered, add its contribution to the fission bank to the + ! score. + + score = ZERO + + ! loop over number of particles banked + do k = 1, p % n_bank + + ! get the delayed group + g = fission_bank(n_bank - p % n_bank + k) % delayed_group + + ! Case for tallying delayed emissions + if (g /= 0) then + + ! Accumulate the decay rate times delayed nu fission score + associate (rxn => nuclides(p % event_nuclide) % & + reactions(nuclides(p % event_nuclide) % index_fission(1))) + + ! determine score based on bank site weight and keff. Note that + ! the units of the decay rate have been converted from inverse + ! shakes to inverse seconds (1 shake = 1.e-8 seconds) + score = score + keff * fission_bank(n_bank - p % n_bank + k) & + % wgt * rxn % products(1 + g) % decay_rate * 1.e8 + end associate + + ! if the delayed group filter is present, tally to corresponding + ! delayed group bin if it exists + if (dg_filter > 0) then + + ! declare the delayed group filter type + select type(filt => t % filters(dg_filter) % obj) + type is (DelayedGroupFilter) + + ! loop over delayed group bins until the corresponding bin is + ! found + do d_bin = 1, filt % n_bins + d = filt % groups(d_bin) + + ! check whether the delayed group of the particle is equal to + ! the delayed group of this bin + if (d == g) then + call score_fission_delayed_dg(t, d_bin, score, score_index) + end if + end do + end select + + ! Reset the score to zero + score = ZERO + end if + end if + end do + + ! If the delayed group filter is present, cycle because the + ! score_fission_delayed_dg(...) has already tallied the score + if (dg_filter > 0) then + cycle SCORE_LOOP + end if + end if + case (SCORE_KAPPA_FISSION) ! Determine kappa-fission cross section on the fly. The ENDF standard ! (ENDF-102) states that MT 18 stores the fission energy as the Q_value diff --git a/tests/test_mgxs_library_condense/inputs_true.dat b/tests/test_mgxs_library_condense/inputs_true.dat index e58015868..b0165324b 100644 --- a/tests/test_mgxs_library_condense/inputs_true.dat +++ b/tests/test_mgxs_library_condense/inputs_true.dat @@ -1 +1 @@ -08c5f1c783dd88c5fed51c054718ca09fc4e99aa4560a6f928b3902991948f3a878d055ac46c07548904285c2c5f22dc2a3d8c1bb82b8e73d76dd790820117df \ No newline at end of file +f541a29b2b9c4d8d82f2cfc2ea96b9ee6c9b8e96936fe8a8df3984f6c839583b2b04e79e1535e2f4cc54b9d59c36a9b2a4dd604f2c86ed8bb8f2f929ec625259 \ No newline at end of file diff --git a/tests/test_mgxs_library_condense/results_true.dat b/tests/test_mgxs_library_condense/results_true.dat index d1a964a86..cd84d0a3a 100644 --- a/tests/test_mgxs_library_condense/results_true.dat +++ b/tests/test_mgxs_library_condense/results_true.dat @@ -61,6 +61,13 @@ 3 10000 4 1 total 0.002752 0.000240 4 10000 5 1 total 0.001231 0.000105 5 10000 6 1 total 0.000512 0.000044 + material delayedgroup group in nuclide mean std. dev. +0 10000 1 1 total 0.000000 0.000000 +1 10000 2 1 total 0.032739 0.028454 +2 10000 3 1 total 0.120780 0.170809 +3 10000 4 1 total 0.302780 0.109110 +4 10000 5 1 total 0.000000 0.000000 +5 10000 6 1 total 0.000000 0.000000 material group in nuclide mean std. dev. 0 10001 1 total 0.311594 0.013793 material group in nuclide mean std. dev. @@ -123,6 +130,13 @@ 2 10001 3 1 total 0.0 0.0 3 10001 4 1 total 0.0 0.0 4 10001 5 1 total 0.0 0.0 +5 10001 6 1 total 0.0 0.0 + material delayedgroup group in nuclide mean std. dev. +0 10001 1 1 total 0.0 0.0 +1 10001 2 1 total 0.0 0.0 +2 10001 3 1 total 0.0 0.0 +3 10001 4 1 total 0.0 0.0 +4 10001 5 1 total 0.0 0.0 5 10001 6 1 total 0.0 0.0 material group in nuclide mean std. dev. 0 10002 1 total 0.904999 0.043964 @@ -186,4 +200,11 @@ 2 10002 3 1 total 0.0 0.0 3 10002 4 1 total 0.0 0.0 4 10002 5 1 total 0.0 0.0 +5 10002 6 1 total 0.0 0.0 + material delayedgroup group in nuclide mean std. dev. +0 10002 1 1 total 0.0 0.0 +1 10002 2 1 total 0.0 0.0 +2 10002 3 1 total 0.0 0.0 +3 10002 4 1 total 0.0 0.0 +4 10002 5 1 total 0.0 0.0 5 10002 6 1 total 0.0 0.0 diff --git a/tests/test_mgxs_library_distribcell/inputs_true.dat b/tests/test_mgxs_library_distribcell/inputs_true.dat index 924c53838..90cfedb91 100644 --- a/tests/test_mgxs_library_distribcell/inputs_true.dat +++ b/tests/test_mgxs_library_distribcell/inputs_true.dat @@ -1 +1 @@ -9ce3d6987d67e92b0924916bb54288429d2bd6dfd12a69f86c5dbefb407f7eb72adb0e44d558c09e9a39610ffeb651aee4aedc629cf3a28a181d62ca4cfbcd5a \ No newline at end of file +6dc13fba93a14c554db49aebe02fc3c6eb3243b84db930657d3e6e9a26bba563b919f9f65dc066dc87773e581951881f632b799859b723f942497c7938358ec1 \ No newline at end of file diff --git a/tests/test_mgxs_library_distribcell/results_true.dat b/tests/test_mgxs_library_distribcell/results_true.dat index 5a996c8fa..87f18db1c 100644 --- a/tests/test_mgxs_library_distribcell/results_true.dat +++ b/tests/test_mgxs_library_distribcell/results_true.dat @@ -61,3 +61,10 @@ 3 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 4 1 total 0.002727 0.000135 4 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 5 1 total 0.001210 0.000058 5 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 6 1 total 0.000504 0.000024 + avg(distribcell) delayedgroup group in nuclide mean std. dev. +0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 1 total 0.000000 0.000000 +1 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 2 1 total 0.032739 0.046300 +2 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 3 1 total 0.120780 0.170809 +3 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 4 1 total 0.000000 0.000000 +4 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 5 1 total 0.000000 0.000000 +5 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 6 1 total 2.853000 4.034751 diff --git a/tests/test_mgxs_library_hdf5/inputs_true.dat b/tests/test_mgxs_library_hdf5/inputs_true.dat index e58015868..b0165324b 100644 --- a/tests/test_mgxs_library_hdf5/inputs_true.dat +++ b/tests/test_mgxs_library_hdf5/inputs_true.dat @@ -1 +1 @@ -08c5f1c783dd88c5fed51c054718ca09fc4e99aa4560a6f928b3902991948f3a878d055ac46c07548904285c2c5f22dc2a3d8c1bb82b8e73d76dd790820117df \ No newline at end of file +f541a29b2b9c4d8d82f2cfc2ea96b9ee6c9b8e96936fe8a8df3984f6c839583b2b04e79e1535e2f4cc54b9d59c36a9b2a4dd604f2c86ed8bb8f2f929ec625259 \ No newline at end of file diff --git a/tests/test_mgxs_library_hdf5/results_true.dat b/tests/test_mgxs_library_hdf5/results_true.dat index 3108573b3..8cec5c629 100644 --- a/tests/test_mgxs_library_hdf5/results_true.dat +++ b/tests/test_mgxs_library_hdf5/results_true.dat @@ -111,6 +111,19 @@ domain=10000 type=beta [ 3.21434855e-04 1.09939816e-03] [ 1.82980497e-04 4.50738567e-04] [ 7.48899920e-05 1.88812772e-04]] +domain=10000 type=decay-rate +[[ 0. 0. ] + [ 0. 0.032739] + [ 0. 0.12078 ] + [ 0. 0.30278 ] + [ 0. 0. ] + [ 0. 0. ]] +[[ 0. 0. ] + [ 0. 0.02845437] + [ 0. 0.17080871] + [ 0. 0.10910951] + [ 0. 0. ] + [ 0. 0. ]] domain=10001 type=total [ 0.31373767 0.3008214 ] [ 0.0155819 0.02805245] @@ -212,6 +225,19 @@ domain=10001 type=chi-delayed [ 0. 0.] [ 0. 0.]] domain=10001 type=beta +[[ 0. 0.] + [ 0. 0.] + [ 0. 0.] + [ 0. 0.] + [ 0. 0.] + [ 0. 0.]] +[[ 0. 0.] + [ 0. 0.] + [ 0. 0.] + [ 0. 0.] + [ 0. 0.] + [ 0. 0.]] +domain=10001 type=decay-rate [[ 0. 0.] [ 0. 0.] [ 0. 0.] @@ -337,3 +363,16 @@ domain=10002 type=beta [ 0. 0.] [ 0. 0.] [ 0. 0.]] +domain=10002 type=decay-rate +[[ 0. 0.] + [ 0. 0.] + [ 0. 0.] + [ 0. 0.] + [ 0. 0.] + [ 0. 0.]] +[[ 0. 0.] + [ 0. 0.] + [ 0. 0.] + [ 0. 0.] + [ 0. 0.] + [ 0. 0.]] diff --git a/tests/test_mgxs_library_mesh/inputs_true.dat b/tests/test_mgxs_library_mesh/inputs_true.dat index f62e0aa05..435b5cc1d 100644 --- a/tests/test_mgxs_library_mesh/inputs_true.dat +++ b/tests/test_mgxs_library_mesh/inputs_true.dat @@ -1 +1 @@ -5f167bdd4d6ae5873d48483e85aceaec8a934239ed5a50ef6f6500ce204f5851ae330621a5007f3b3d6bdab49f2cd627d011c1f6e6983fec958a6984eb9cb7ca \ No newline at end of file +9b394184e2329d0a0f56c1534ee8723bdbe6b5188959c7f2fb4900c1a184b10a211bbe0827b2a220b6a4eaa84865cc9a4368a787269f3d8ee3e61f6fe5798fff \ No newline at end of file diff --git a/tests/test_mgxs_library_mesh/results_true.dat b/tests/test_mgxs_library_mesh/results_true.dat index b6656d67b..8ad0f2eee 100644 --- a/tests/test_mgxs_library_mesh/results_true.dat +++ b/tests/test_mgxs_library_mesh/results_true.dat @@ -208,3 +208,29 @@ 21 2 2 1 4 1 total 0.002143 0.001028 22 2 2 1 5 1 total 0.001026 0.000492 23 2 2 1 6 1 total 0.000408 0.000196 + mesh 1 delayedgroup group in nuclide mean std. dev. + x y z +0 1 1 1 1 1 total 0.00000 0.000000 +1 1 1 1 2 1 total 0.00000 0.000000 +2 1 1 1 3 1 total 0.00000 0.000000 +3 1 1 1 4 1 total 0.30278 0.428196 +4 1 1 1 5 1 total 0.00000 0.000000 +5 1 1 1 6 1 total 0.00000 0.000000 +6 1 2 1 1 1 total 0.00000 0.000000 +7 1 2 1 2 1 total 0.00000 0.000000 +8 1 2 1 3 1 total 0.00000 0.000000 +9 1 2 1 4 1 total 0.00000 0.000000 +10 1 2 1 5 1 total 0.00000 0.000000 +11 1 2 1 6 1 total 0.00000 0.000000 +12 2 1 1 1 1 total 0.00000 0.000000 +13 2 1 1 2 1 total 0.00000 0.000000 +14 2 1 1 3 1 total 0.00000 0.000000 +15 2 1 1 4 1 total 0.00000 0.000000 +16 2 1 1 5 1 total 0.00000 0.000000 +17 2 1 1 6 1 total 0.00000 0.000000 +18 2 2 1 1 1 total 0.00000 0.000000 +19 2 2 1 2 1 total 0.00000 0.000000 +20 2 2 1 3 1 total 0.00000 0.000000 +21 2 2 1 4 1 total 0.00000 0.000000 +22 2 2 1 5 1 total 0.00000 0.000000 +23 2 2 1 6 1 total 0.00000 0.000000 diff --git a/tests/test_mgxs_library_no_nuclides/inputs_true.dat b/tests/test_mgxs_library_no_nuclides/inputs_true.dat index e58015868..b0165324b 100644 --- a/tests/test_mgxs_library_no_nuclides/inputs_true.dat +++ b/tests/test_mgxs_library_no_nuclides/inputs_true.dat @@ -1 +1 @@ -08c5f1c783dd88c5fed51c054718ca09fc4e99aa4560a6f928b3902991948f3a878d055ac46c07548904285c2c5f22dc2a3d8c1bb82b8e73d76dd790820117df \ No newline at end of file +f541a29b2b9c4d8d82f2cfc2ea96b9ee6c9b8e96936fe8a8df3984f6c839583b2b04e79e1535e2f4cc54b9d59c36a9b2a4dd604f2c86ed8bb8f2f929ec625259 \ No newline at end of file diff --git a/tests/test_mgxs_library_no_nuclides/results_true.dat b/tests/test_mgxs_library_no_nuclides/results_true.dat index edd99b44c..961ae9ba9 100644 --- a/tests/test_mgxs_library_no_nuclides/results_true.dat +++ b/tests/test_mgxs_library_no_nuclides/results_true.dat @@ -123,6 +123,19 @@ 6 10000 4 2 total 0.011426 0.001099 8 10000 5 2 total 0.004684 0.000451 10 10000 6 2 total 0.001962 0.000189 + material delayedgroup group in nuclide mean std. dev. +1 10000 1 1 total 0.000000 0.000000 +3 10000 2 1 total 0.000000 0.000000 +5 10000 3 1 total 0.000000 0.000000 +7 10000 4 1 total 0.000000 0.000000 +9 10000 5 1 total 0.000000 0.000000 +11 10000 6 1 total 0.000000 0.000000 +0 10000 1 2 total 0.000000 0.000000 +2 10000 2 2 total 0.032739 0.028454 +4 10000 3 2 total 0.120780 0.170809 +6 10000 4 2 total 0.302780 0.109110 +8 10000 5 2 total 0.000000 0.000000 +10 10000 6 2 total 0.000000 0.000000 material group in nuclide mean std. dev. 1 10001 1 total 0.313738 0.015582 0 10001 2 total 0.300821 0.028052 @@ -247,6 +260,19 @@ 4 10001 3 2 total 0.0 0.0 6 10001 4 2 total 0.0 0.0 8 10001 5 2 total 0.0 0.0 +10 10001 6 2 total 0.0 0.0 + material delayedgroup group in nuclide mean std. dev. +1 10001 1 1 total 0.0 0.0 +3 10001 2 1 total 0.0 0.0 +5 10001 3 1 total 0.0 0.0 +7 10001 4 1 total 0.0 0.0 +9 10001 5 1 total 0.0 0.0 +11 10001 6 1 total 0.0 0.0 +0 10001 1 2 total 0.0 0.0 +2 10001 2 2 total 0.0 0.0 +4 10001 3 2 total 0.0 0.0 +6 10001 4 2 total 0.0 0.0 +8 10001 5 2 total 0.0 0.0 10 10001 6 2 total 0.0 0.0 material group in nuclide mean std. dev. 1 10002 1 total 0.664572 0.031215 @@ -372,4 +398,17 @@ 4 10002 3 2 total 0.0 0.0 6 10002 4 2 total 0.0 0.0 8 10002 5 2 total 0.0 0.0 +10 10002 6 2 total 0.0 0.0 + material delayedgroup group in nuclide mean std. dev. +1 10002 1 1 total 0.0 0.0 +3 10002 2 1 total 0.0 0.0 +5 10002 3 1 total 0.0 0.0 +7 10002 4 1 total 0.0 0.0 +9 10002 5 1 total 0.0 0.0 +11 10002 6 1 total 0.0 0.0 +0 10002 1 2 total 0.0 0.0 +2 10002 2 2 total 0.0 0.0 +4 10002 3 2 total 0.0 0.0 +6 10002 4 2 total 0.0 0.0 +8 10002 5 2 total 0.0 0.0 10 10002 6 2 total 0.0 0.0 From fab4a4c386b1a7e833c76ff20d10dd9e610791fd Mon Sep 17 00:00:00 2001 From: Sam Shaner Date: Sun, 11 Sep 2016 15:33:27 -0400 Subject: [PATCH 02/13] fixed issue with decay rate equation --- docs/source/pythonapi/index.rst | 1 + openmc/mgxs/mdgxs.py | 4 ++-- src/tally.F90 | 6 +++--- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/docs/source/pythonapi/index.rst b/docs/source/pythonapi/index.rst index 14f4a2128..d8eb5200a 100644 --- a/docs/source/pythonapi/index.rst +++ b/docs/source/pythonapi/index.rst @@ -298,6 +298,7 @@ Multi-delayed-group Cross Sections openmc.mgxs.ChiDelayed openmc.mgxs.DelayedNuFissionXS openmc.mgxs.Beta + openmc.mgxs.DecayRate Multi-group Cross Section Libraries ----------------------------------- diff --git a/openmc/mgxs/mdgxs.py b/openmc/mgxs/mdgxs.py index 9fa286ff3..69b20d3f4 100644 --- a/openmc/mgxs/mdgxs.py +++ b/openmc/mgxs/mdgxs.py @@ -1602,9 +1602,9 @@ class DecayRate(MDGXS): .. math:: \langle \lambda_d \nu^d \sigma_f \phi \rangle &= \int_{r \in V} dr - \int_{4\pi} d\Omega' \int_0^\infty dE' \int_0^\infty dE \; \chi(E) \nu^d + \int_{4\pi} d\Omega' \int_0^\infty dE' \int_0^\infty dE \; \lambda_d \nu^d \sigma_f (r, E') \psi(r, E', \Omega') \\ - \langle \nu \sigma_f \phi \rangle &= \int_{r \in V} dr \int_{4\pi} + \langle \nu^d \sigma_f \phi \rangle &= \int_{r \in V} dr \int_{4\pi} d\Omega' \int_0^\infty dE' \int_0^\infty dE \; \chi(E) \nu^d \sigma_f (r, E') \psi(r, E', \Omega') \\ \lambda_d &= \frac{\langle \lambda_d \nu^d \sigma_f \phi \rangle} diff --git a/src/tally.F90 b/src/tally.F90 index 542e1ff5c..c0e8013a3 100644 --- a/src/tally.F90 +++ b/src/tally.F90 @@ -708,7 +708,7 @@ contains score = p % absorb_wgt * yield * & micro_xs(p % event_nuclide) % fission & / micro_xs(p % event_nuclide) % absorption & - * rxn % products(1 + d) % decay_rate * 1.e8 + * rxn % products(1 + d) % decay_rate * 1.e8_8 end associate ! Tally to bin @@ -733,7 +733,7 @@ contains ! and not the MAX_DELAYED_GROUPS constant for this loop. do d = 1, size(rxn % products) - 2 - score = score + rxn % products(1 + d) % decay_rate * 1.e8 * & + score = score + rxn % products(1 + d) % decay_rate * 1.e8_8 * & p % absorb_wgt * micro_xs(p % event_nuclide) % fission *& nuclides(p % event_nuclide) % nu(E, EMISSION_DELAYED, d)& / micro_xs(p % event_nuclide) % absorption @@ -773,7 +773,7 @@ contains ! the units of the decay rate have been converted from inverse ! shakes to inverse seconds (1 shake = 1.e-8 seconds) score = score + keff * fission_bank(n_bank - p % n_bank + k) & - % wgt * rxn % products(1 + g) % decay_rate * 1.e8 + % wgt * rxn % products(1 + g) % decay_rate * 1.e8_8 end associate ! if the delayed group filter is present, tally to corresponding From 9de22b96b3b267f3d5114560b2acaa64848b06a2 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Tue, 13 Sep 2016 11:34:14 +0200 Subject: [PATCH 03/13] Implement temperature interpolation --- docs/source/usersguide/input.rst | 10 +++-- src/cross_section.F90 | 51 +++++++++++++++++++---- src/input_xml.F90 | 4 +- src/nuclide_header.F90 | 32 +++++++++++--- src/sab_header.F90 | 71 ++++++++++++++++++++++++-------- 5 files changed, 131 insertions(+), 37 deletions(-) diff --git a/docs/source/usersguide/input.rst b/docs/source/usersguide/input.rst index dae3e74b2..b724d7f10 100644 --- a/docs/source/usersguide/input.rst +++ b/docs/source/usersguide/input.rst @@ -725,10 +725,12 @@ a material default temperature. ```` Element -------------------------------- -The ```` element has an accepted value of "nearest" or -"interpolation". A value of "nearest" indicates that for each cell, the nearest -temperature at which cross sections are given is to be applied, within a given -tolerance (see :ref:`temperature_tolerance`). A value of "multipole" indicates +The ```` element has an accepted value of "nearest", +"interpolation", or "multipole". A value of "nearest" indicates that for each +cell, the nearest temperature at which cross sections are given is to be +applied, within a given tolerance (see :ref:`temperature_tolerance`). A value of +"interpolation" indicates that cross sections are to be interpolated between +temperatures at which nuclear data are present. A value of "multipole" indicates that the windowed multipole method should be used to evaluate temperature-dependent cross sections in the resolved resonance range (a :ref:`windowed multipole library ` must also be available). diff --git a/src/cross_section.F90 b/src/cross_section.F90 index e2cc31d5e..4bb323c51 100644 --- a/src/cross_section.F90 +++ b/src/cross_section.F90 @@ -162,15 +162,33 @@ contains ! temperature. Note that there is no tolerance here, so this ! temperature could be very far off! kT = sqrtkT**2 + i_temp = minloc(abs(nuclides(i_nuclide) % kTs - kT), dim=1) end if else - ! If not using multipole data, do a linear search on temperature kT = sqrtkT**2 - do i_temp = 1, size(nuclides(i_nuclide) % kTs) - if (abs(nuclides(i_nuclide) % kTs(i_temp) - kT) < & - K_BOLTZMANN*temperature_tolerance) exit - end do + + select case (temperature_method) + case (TEMPERATURE_NEAREST) + ! If using nearest temperature, do linear search on temperature + do i_temp = 1, size(nuc % kTs) + if (abs(nuc % kTs(i_temp) - kT) < K_BOLTZMANN * & + temperature_tolerance) exit + end do + case (TEMPERATURE_INTERPOLATION) + ! Find temperatures that bound the actual temperature + do i_temp = 1, size(nuc % kTs) - 1 + if (nuc % kTs(i_temp) <= kT .and. kT < nuc % kTs(i_temp + 1)) exit + end do + + ! Randomly sample between temperature i and i+1 + f = (kT - nuc % kTs(i_temp)) / & + (nuc % kTs(i_temp + 1) - nuc % kTs(i_temp)) + if (f > prn()) i_temp = i_temp + 1 + case (TEMPERATURE_MULTIPOLE) + i_temp = minloc(abs(nuclides(i_nuclide) % kTs - kT), dim=1) + end select + end if ! Evaluate multipole or interpolate @@ -317,10 +335,25 @@ contains ! Determine temperature for S(a,b) table kT = sqrtkT**2 - do i_temp = 1, size(sab_tables(i_sab) % kTs) - if (abs(sab_tables(i_sab) % kTs(i_temp) - kT) < & - K_BOLTZMANN*temperature_tolerance) exit - end do + if (temperature_method == TEMPERATURE_NEAREST) then + ! If using nearest temperature, do linear search on temperature + do i_temp = 1, size(sab_tables(i_sab) % kTs) + if (abs(sab_tables(i_sab) % kTs(i_temp) - kT) < & + K_BOLTZMANN*temperature_tolerance) exit + end do + else + ! Find temperatures that bound the actual temperature + do i_temp = 1, size(sab_tables(i_sab) % kTs) - 1 + if (sab_tables(i_sab) % kTs(i_temp) <= kT .and. & + kT < sab_tables(i_sab) % kTs(i_temp + 1)) exit + end do + + ! Randomly sample between temperature i and i+1 + f = (kT - sab_tables(i_sab) % kTs(i_temp)) / & + (sab_tables(i_sab) % kTs(i_temp + 1) - sab_tables(i_sab) % kTs(i_temp)) + if (f > prn()) i_temp = i_temp + 1 + end if + ! Get pointer to S(a,b) table associate (sab => sab_tables(i_sab) % data(i_temp)) diff --git a/src/input_xml.F90 b/src/input_xml.F90 index eeeae865b..88eb0e39c 100644 --- a/src/input_xml.F90 +++ b/src/input_xml.F90 @@ -4948,7 +4948,7 @@ contains call names % push_back('Ga0') call densities % push_back(density) else - call names % push_back('Ha69') + call names % push_back('Ga69') call densities % push_back(density * 0.60108_8) call names % push_back('Ga71') call densities % push_back(density * 0.39892_8) @@ -5840,7 +5840,7 @@ contains file_id = file_open(libraries(i_library) % path, 'r') group_id = open_group(file_id, name) call sab_tables(i_sab) % from_hdf5(group_id, sab_temps(i_sab), & - temperature_tolerance) + temperature_method, temperature_tolerance) call close_group(group_id) call file_close(file_id) diff --git a/src/nuclide_header.F90 b/src/nuclide_header.F90 index 1fbd691ee..6b3965917 100644 --- a/src/nuclide_header.F90 +++ b/src/nuclide_header.F90 @@ -241,11 +241,13 @@ module nuclide_header call read_dataset(temps_available(i), kT_group, trim(dset_names(i))) temps_available(i) = temps_available(i) / K_BOLTZMANN end do + call sort(temps_available) + ! Determine actual temperatures to read select case (method) case (TEMPERATURE_NEAREST) - ! Determine actual temperatures to read - TEMP_LOOP: do i = 1, temperature % size() + ! Find nearest temperatures + do i = 1, temperature % size() temp_desired = temperature % data(i) i_closest = minloc(abs(temps_available - temp_desired), dim=1) temp_actual = temps_available(i_closest) @@ -265,11 +267,31 @@ module nuclide_header &for " // trim(this % name) // " at or near " // & trim(to_str(nint(temp_desired))) // " K.") end if - end do TEMP_LOOP + end do case (TEMPERATURE_INTERPOLATION) - ! TODO: Get bounding temperatures - call fatal_error("Temperature interpolation not yet implemented") + ! If temperature interpolation or multipole is selected, get a list of + ! bounding temperatures for each actual temperature present in the model + TEMP_LOOP: do i = 1, temperature % size() + temp_desired = temperature % data(i) + + do j = 1, size(temps_available) - 1 + if (temps_available(j) <= temp_desired .and. & + temp_desired < temps_available(j + 1)) then + if (find(temps_to_read, nint(temps_available(j))) == -1) then + call temps_to_read % push_back(nint(temps_available(j))) + end if + if (find(temps_to_read, nint(temps_available(j + 1))) == -1) then + call temps_to_read % push_back(nint(temps_available(j + 1))) + end if + cycle TEMP_LOOP + end if + end do + + call fatal_error("Nuclear data library does not contain cross sections & + &for " // trim(this % name) // " at temperatures that bound " // & + trim(to_str(nint(temp_desired))) // " K.") + end do TEMP_LOOP case (TEMPERATURE_MULTIPOLE) ! Add first available temperature diff --git a/src/sab_header.F90 b/src/sab_header.F90 index 147643065..21a2ab032 100644 --- a/src/sab_header.F90 +++ b/src/sab_header.F90 @@ -80,10 +80,11 @@ module sab_header contains - subroutine salphabeta_from_hdf5(this, group_id, temperature, tolerance) + subroutine salphabeta_from_hdf5(this, group_id, temperature, method, tolerance) class(SAlphaBeta), intent(inout) :: this integer(HID_T), intent(in) :: group_id type(VectorReal), intent(in) :: temperature ! list of temperatures + integer, intent(in) :: method real(8), intent(in) :: tolerance integer :: i, j @@ -142,25 +143,55 @@ contains call read_dataset(temps_available(i), kT_group, trim(dset_names(i))) temps_available(i) = temps_available(i) / K_BOLTZMANN end do + call sort(temps_available) - ! Determine actual temperatures to read - TEMP_LOOP: do i = 1, temperature % size() - temp_desired = temperature % data(i) - i_closest = minloc(abs(temps_available - temp_desired), dim=1) - temp_actual = temps_available(i_closest) - if (abs(temp_actual - temp_desired) < tolerance) then - if (find(temps_to_read, nint(temp_actual)) == -1) then - call temps_to_read % push_back(nint(temp_actual)) + select case (method) + case (TEMPERATURE_NEAREST) + ! Determine actual temperatures to read + do i = 1, temperature % size() + temp_desired = temperature % data(i) + i_closest = minloc(abs(temps_available - temp_desired), dim=1) + temp_actual = temps_available(i_closest) + if (abs(temp_actual - temp_desired) < tolerance) then + if (find(temps_to_read, nint(temp_actual)) == -1) then + call temps_to_read % push_back(nint(temp_actual)) + end if + else + call fatal_error("Nuclear data library does not contain cross sections & + &for " // trim(this % name) // " at or near " // & + trim(to_str(nint(temp_desired))) // " K.") end if - else - call fatal_error("Nuclear data library does not contain cross sections & - &for " // trim(this % name) // " at or near " // & - trim(to_str(nint(temp_desired))) // " K.") - end if - end do TEMP_LOOP + end do - ! TODO: If using interpolation, add a block to add bounding temperatures for - ! each + case (TEMPERATURE_INTERPOLATION) + ! If temperature interpolation or multipole is selected, get a list of + ! bounding temperatures for each actual temperature present in the model + TEMP_LOOP: do i = 1, temperature % size() + temp_desired = temperature % data(i) + + do j = 1, size(temps_available) - 1 + if (temps_available(j) <= temp_desired .and. & + temp_desired < temps_available(j + 1)) then + if (find(temps_to_read, nint(temps_available(j))) == -1) then + call temps_to_read % push_back(nint(temps_available(j))) + end if + if (find(temps_to_read, nint(temps_available(j + 1))) == -1) then + call temps_to_read % push_back(nint(temps_available(j + 1))) + end if + cycle TEMP_LOOP + end if + end do + + call fatal_error("Nuclear data library does not contain cross sections & + &for " // trim(this % name) // " at temperatures that bound " // & + trim(to_str(nint(temp_desired))) // " K.") + end do TEMP_LOOP + + case (TEMPERATURE_MULTIPOLE) + ! Add first available temperature + call temps_to_read % push_back(nint(temps_available(1))) + + end select ! Sort temperatures to read call sort(temps_to_read) @@ -301,6 +332,12 @@ contains end do end associate end do + + ! Clear data on correlated angle-energy object + deallocate(correlated_dist % breakpoints) + deallocate(correlated_dist % interpolation) + deallocate(correlated_dist % energy) + deallocate(correlated_dist % distribution) end if call close_group(inelastic_group) From 0fcc44bedb7975beda0444153964457e87f45079 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Tue, 13 Sep 2016 23:16:10 +0200 Subject: [PATCH 04/13] Fix specification of material temperature. Allow XML files to be exported to non-default paths. --- openmc/geometry.py | 5 ++--- openmc/material.py | 31 ++++++++++++------------------- openmc/plots.py | 5 ++--- openmc/settings.py | 5 ++--- tests/test_source/test_source.py | 2 +- 5 files changed, 19 insertions(+), 29 deletions(-) diff --git a/openmc/geometry.py b/openmc/geometry.py index b2a9b5e4a..6d9330dc6 100644 --- a/openmc/geometry.py +++ b/openmc/geometry.py @@ -64,7 +64,7 @@ class Geometry(object): if cell.id in volume_calc.results: cell.add_volume_information(volume_calc) - def export_to_xml(self): + def export_to_xml(self, path='geometry.xml'): """Create a geometry.xml file that can be used for a simulation. """ @@ -82,8 +82,7 @@ class Geometry(object): # Write the XML Tree to the geometry.xml file tree = ET.ElementTree(geometry_file) - tree.write("geometry.xml", xml_declaration=True, encoding='utf-8', - method="xml") + tree.write(path, xml_declaration=True, encoding='utf-8', method="xml") def find(self, point): """Find cells/universes/lattices which contain a given point diff --git a/openmc/material.py b/openmc/material.py index f56af485a..2861d5be6 100644 --- a/openmc/material.py +++ b/openmc/material.py @@ -41,19 +41,16 @@ class Material(object): name : str, optional Name of the material. If not specified, the name will be the empty string. - temperature : str, optional - The temperature identifier applied to this material. The units are - in Kelvin and the temperature rounded to the nearest integer. - For example, a tempreature of 293.6K would be provided as '294K' + temperature : float, optional + Temperature of the material in Kelvin. If not specified, the material + inherits the default temperature applied to the model. Attributes ---------- id : int Unique identifier for the material - temperature : str - The temperature identifier applied to this material. The units are - in Kelvin and the temperature rounded to the nearest integer. - For example, a tempreature of 293.6K would be provided as '294K' + temperature : float + Temperature of the material in Kelvin. density : float Density of the material (units defined separately) density_units : str @@ -217,12 +214,9 @@ class Material(object): @temperature.setter def temperature(self, temperature): - if temperature is not None: - cv.check_type('Temperature for Material ID="{0}"'.format(self._id), - temperature, basestring) - self._temperature = temperature - else: - self._temperature = '' + cv.check_type('Temperature for Material ID="{0}"'.format(self._id), + temperature, (Real, type(None))) + self._temperature = temperature def set_density(self, units, density=None): """Set the density of the material @@ -631,9 +625,9 @@ class Material(object): element.set("name", str(self._name)) # Create temperature XML subelement - if len(self.temperature) > 0: + if self.temperature is not None: subelement = ET.SubElement(element, "temperature") - subelement.text = self.temperature + subelement.text = str(self.temperature) # Create density XML subelement subelement = ET.SubElement(element, "density") @@ -817,7 +811,7 @@ class Materials(cv.CheckedList): xml_element = material.get_material_xml() self._materials_file.append(xml_element) - def export_to_xml(self): + def export_to_xml(self, path='materials.xml'): """Create a materials.xml file that can be used for a simulation. """ @@ -833,5 +827,4 @@ class Materials(cv.CheckedList): # Write the XML Tree to the materials.xml file tree = ET.ElementTree(self._materials_file) - tree.write("materials.xml", xml_declaration=True, - encoding='utf-8', method="xml") + tree.write(path, xml_declaration=True, encoding='utf-8', method="xml") diff --git a/openmc/plots.py b/openmc/plots.py index cc5c0d44b..f5c1f2b2a 100644 --- a/openmc/plots.py +++ b/openmc/plots.py @@ -616,7 +616,7 @@ class Plots(cv.CheckedList): self._plots_file.append(xml_element) - def export_to_xml(self): + def export_to_xml(self, path='plots.xml'): """Create a plots.xml file that can be used by OpenMC. """ @@ -631,5 +631,4 @@ class Plots(cv.CheckedList): # Write the XML Tree to the plots.xml file tree = ET.ElementTree(self._plots_file) - tree.write("plots.xml", xml_declaration=True, - encoding='utf-8', method="xml") + tree.write(path, xml_declaration=True, encoding='utf-8', method="xml") diff --git a/openmc/settings.py b/openmc/settings.py index c7d6debb9..15898a2b8 100644 --- a/openmc/settings.py +++ b/openmc/settings.py @@ -1118,7 +1118,7 @@ class Settings(object): for r in self.resonance_scattering: elem.append(r.to_xml_element()) - def export_to_xml(self): + def export_to_xml(self, path='settings.xml'): """Create a settings.xml file that can be used for a simulation. """ @@ -1162,8 +1162,7 @@ class Settings(object): # Write the XML Tree to the settings.xml file tree = ET.ElementTree(self._settings_file) - tree.write("settings.xml", xml_declaration=True, - encoding='utf-8', method="xml") + tree.write(path, xml_declaration=True, encoding='utf-8', method="xml") class ResonanceScattering(object): diff --git a/tests/test_source/test_source.py b/tests/test_source/test_source.py index ce9012bc2..26844ea4e 100644 --- a/tests/test_source/test_source.py +++ b/tests/test_source/test_source.py @@ -13,7 +13,7 @@ import openmc class SourceTestHarness(PyAPITestHarness): def _build_inputs(self): - mat1 = openmc.Material(material_id=1, temperature='294') + mat1 = openmc.Material(material_id=1, temperature=294) mat1.set_density('g/cm3', 4.5) mat1.add_nuclide(openmc.Nuclide('U235'), 1.0) materials = openmc.Materials([mat1]) From 309291d115d290af02d9fdc460f107154814dd2b Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Mon, 12 Sep 2016 08:41:17 +0200 Subject: [PATCH 05/13] Add derivations in geometry section. Update publications. --- docs/source/methods/geometry.rst | 83 +++++++++++++++++++++++++++++++- docs/source/publications.rst | 81 ++++++++++++++++++++++++------- 2 files changed, 145 insertions(+), 19 deletions(-) diff --git a/docs/source/methods/geometry.rst b/docs/source/methods/geometry.rst index c689883d0..c2e7270b6 100644 --- a/docs/source/methods/geometry.rst +++ b/docs/source/methods/geometry.rst @@ -265,6 +265,8 @@ Again, we need to check whether the denominator is zero. If so, this means that the particle's direction of flight is parallel to the plane and it will therefore never hit the plane. +.. _cylinder_distance: + Cylinder Parallel to an Axis ---------------------------- @@ -366,7 +368,74 @@ will then be either both positive or both negative. If they are both positive, the smaller (closer) one will be the solution with a negative sign on the square root of the discriminant. -.. TODO: Need to add derivation for x-cone, y-cone, and z-cone. +Cone Parallel to an Axis +------------------------ + +The equation for a cone parallel to, for example, the x-axis is :math:`(y - +y_0)^2 + (z - z_0)^2 = R^2(x - x_0)^2`. Thus, we need to solve :math:`(y + dv - +y_0)^2 + (z + dw - z_0)^2 = R^2(x + du - x_0)^2`. Let us define :math:`\bar{x} = +x - x_0`, :math:`\bar{y} = y - y_0`, and :math:`\bar{z} = z - z_0`. We then have + +.. math:: + :label: dist-xcone-1 + + (\bar{y} + dv)^2 + (\bar{z} + dw)^2 = R^2(\bar{x} + du)^2 + +Expanding equation :eq:`dist-xcone-1` and rearranging terms, we obtain + +.. math:: + :label: dist-xcylinder-2 + + (v^2 + w^2 - R^2u^2) d^2 + 2 (\bar{y}v + \bar{z}w - R^2\bar{x}u) d + + (\bar{y}^2 + \bar{z}^2 - R^2\bar{x}^2) = 0 + +Defining the terms + +.. math:: + :label: dist-quadric-terms + + a = v^2 + w^2 - R^2u^2 + + k = \bar{y}v + \bar{z}w - R^2\bar{x}u + + c = \bar{y}^2 + \bar{z}^2 - R^2\bar{x}^2 + +we then have the simple quadratic equation :math:`ad^2 + 2kd + c = 0` which can +be solved as described in :ref:`cylinder_distance`. + +General Quadric +--------------- + +The equation for a general quadric surface is :math:`Ax^2 + By^2 + Cz^2 + Dxy + +Eyz + Fxz + Gx + Hy + Jz + K = 0`. Thus, we need to solve the equation + +.. math:: + :label: dist-quadric-1 + + A(x+du)^2 + B(y+dv)^2 + C(z+dw)^2 + D(x+du)(y+dv) + E(y+dv)(z+dw) + \\ + F(x+du)(z+dw) + G(x+du) + H(y+dv) + J(z+dw) + K = 0 + +Expanding equation :eq:`dist-quadric-1` and rearranging terms, we obtain + +.. math:: + :label: dist-quadric-2 + + d^2(uv + vw + uw) + 2d(Aux + Bvy + Cwx + (D(uv + vx) + E(vz + wy) + \\ + F(wx + uz))/2) + (x(Ax + Dy) + y(By + Ez) + z(Cz + Fx)) = 0 + +Defining the terms + +.. math:: + :label: dist-quadric-terms + + a = uv + vw + uw + + k = Aux + Bvy + Cwx + (D(uv + vx) + E(vz + wy) + F(wx + uz))/2 + + c = x(Ax + Dy) + y(By + Ez) + z(Cz + Fx) + +we then have the simple quadratic equation :math:`ad^2 + 2kd + c = 0` which can +be solved as described in :ref:`cylinder_distance`. .. _find-cell: @@ -810,6 +879,18 @@ form of the solution: w' = w + \frac{2 (\bar{x}u + \bar{y}v - R^2\bar{z}w)}{R^2 (1 + R^2) \bar{z}} +General Quadric +--------------- + +A general quadric surface has the form :math:`f(x,y,z) = Ax^2 + By^2 + Cz^2 + +Dxy + Eyz + Fxz + Gx + Hy + Jz + K = 0`. Thus, the gradient to the surface is + +.. math:: + :label: reflection-quadric-grad + + \nabla f = \left ( \begin{array}{c} 2Ax + Dy + Fz + G \\ 2By + Dx + Ez + H + \\ 2Cz + Ey + Fx + J \end{array} \right ). + .. _constructive solid geometry: http://en.wikipedia.org/wiki/Constructive_solid_geometry .. _surfaces: http://en.wikipedia.org/wiki/Surface diff --git a/docs/source/publications.rst b/docs/source/publications.rst index 66300dc52..c5b29b194 100644 --- a/docs/source/publications.rst +++ b/docs/source/publications.rst @@ -53,6 +53,16 @@ Benchmarking Coupling and Multi-physics -------------------------- +- Matthew Ellis, Benoit Forget, Kord Smith, and Derek Gaston, "Continuous + Temperature Representation in Coupled OpenMC/MOOSE Simulations," *Proc. PHYSOR + 2016*, Sun Valley, Idaho, May 1-5, 2016. + +- Antonios G. Mylonakis, Melpomeni Varvayanni, and Nicolas Catsaros, + "Investigating a Matrix-free, Newton-based, Neutron-Monte + Carlo/Thermal-Hydraulic Coupling Scheme", *Proc. Int. Conf. Nuclear Energy for + New Europe*, Portoroz, Slovenia, Sep .14-17 + (2015). ``_ + - Matt Ellis, Benoit Forget, Kord Smith, and Derek Gaston, "Preliminary coupling of the Monte Carlo code OpenMC and the Multiphysics Object-Oriented Simulation Environment (MOOSE) for analyzing Doppler feedback in Monte Carlo @@ -80,8 +90,17 @@ Geometry Miscellaneous ------------- +- Yunzhao Li, Qingming He, Liangzhi Cao, Hongchun Wu, and Tiejun Zu, "Resonance + Elastic Scattering and Interference Effects Treatments in Subgroup Method," + *Nucl. Eng. Tech.*, **48**, 339-350 + (2016). ``_ + - William Boyd, Sterling Harper, and Paul K. Romano, "Equipping OpenMC for the - big data era," Accepted, *PHYSOR 2016*, Sun Valley, Idaho, May 1-5, 2016. + big data era," *Proc. PHYSOR*, Sun Valley, Idaho, May 1-5, 2016. + +- Michal Kostal, Vojtech Rypar, Jan Milcak, Vlastimil Juricek, Evzen Losa, + Benoit Forget, and Sterling Harper, *Ann. Nucl. Energy*, **87**, 601-611 + (2016). ``_ - Qicang Shen, William Boyd, Benoit Forget, and Kord Smith, "Tally precision triggers for the OpenMC Monte Carlo code," *Trans. Am. Nucl. Soc.*, **112**, @@ -95,6 +114,11 @@ Miscellaneous Multi-group Cross Section Generation ------------------------------------ +- Zhaoyuan Liu, Kord Smith, and Benoit Forget, "A Cumulative Migration Method + for Computing Rigorous Transport Cross Sections and Diffusion Coefficients for + LWR Lattices with Monte Carlo," *Proc. PHYSOR*, Sun Valley, Idaho, May + 1-5, 2016. + - Adam G. Nelson and William R. Martin, "Improved Monte Carlo tallying of multi-group scattering moments using the NDPP code," *Trans. Am. Nucl. Soc.*, **113**, 645-648 (2015) @@ -108,18 +132,43 @@ Multi-group Cross Section Generation Computational Methods Applied to Nuclear Science and Engineering*, Sun Valley, Idaho, May 5--9 (2013). ------------- -Nuclear Data ------------- + +------------------ +Doppler Broadening +------------------ - Colin Josey, Pablo Ducru, Benoit Forget, and Kord Smith, "Windowed multipole - for cross section Doppler broadening," *J. Comput. Phys.*, In Press + for cross section Doppler broadening," *J. Comput. Phys.*, **307**, 715-727 (2016). ``_ +- Jonathan A. Walsh, Benoit Forget, Kord S. Smith, and Forrest B. Brown, + "On-the-fly Doppler Broadening of Unresolved Resonance Region Cross Sections + via Probability Band Interpolation," *Proc. PHYSOR*, Sun Valley, Idaho, May + 1-5, 2016. + - Colin Josey, Benoit Forget, and Kord Smith, "Windowed multipole sensitivity to target accuracy of the optimization procedure," *J. Nucl. Sci. Technol.*, **52**, 987-992 (2015). ``_ +- Paul K. Romano and Timothy H. Trumbull, "Comparison of algorithms for Doppler + broadening pointwise tabulated cross sections," *Ann. Nucl. Energy*, **75**, + 358--364 (2015). ``_ + +- Tuomas Viitanen, Jaakko Leppanen, and Benoit Forget, "Target motion sampling + temperature treatment technique with track-length esimators in OpenMC -- + Preliminary results," *Proc. PHYSOR*, Kyoto, Japan, Sep. 28--Oct. 3 (2014). + +- Benoit Forget, Sheng Xu, and Kord Smith, "Direct Doppler broadening in Monte + Carlo simulations using the multipole representation," *Ann. Nucl. Energy*, + **64**, 78--85 (2014). ``_ + +------------ +Nuclear Data +------------ + +- Paul K. Romano and Sterling M. Harper, "Nuclear data processing capabilities + in OpenMC", *Proc. Nuclear Data*, Sep. 11-16, 2016. + - Jonathan A. Walsh, Paul K. Romano, Benoit Forget, and Kord S. Smith, "Optimizations of the energy grid search algorithm in continuous-energy Monte Carlo particle transport codes", *Comput. Phys. Commun.*, **196**, 134-142 @@ -139,29 +188,17 @@ Nuclear Data performance analysis for varying cross section parameter regimes," *Proc. Joint Int. Conf. M&C+SNA+MC*, Nashville, Tennessee, Apr. 19--23 (2015). -- Paul K. Romano and Timothy H. Trumbull, "Comparison of algorithms for Doppler - broadening pointwise tabulated cross sections," *Ann. Nucl. Energy*, **75**, - 358--364 (2015). ``_ - -- Tuomas Viitanen, Jaakko Leppanen, and Benoit Forget, "Target motion sampling - temperature treatment technique with track-length esimators in OpenMC -- - Preliminary results," *Proc. PHYSOR*, Kyoto, Japan, Sep. 28--Oct. 3 (2014). - - Jonathan A. Walsh, Benoit Forget, and Kord S. Smith, "Accelerated sampling of the free gas resonance elastic scattering kernel," *Ann. Nucl. Energy*, **69**, 116--124 (2014). ``_ -- Benoit Forget, Sheng Xu, and Kord Smith, "Direct Doppler broadening in Monte - Carlo simulations using the multipole representation," *Ann. Nucl. Energy*, - **64**, 78--85 (2014). ``_ - ----------- Parallelism ----------- - Paul K. Romano, John R. Tramm, and Andrew R. Siegel, "Efficacy of hardware threading for Monte Carlo particle transport calculations on multi- and - many-core systems," Accepted, *PHYSOR 2016*, Sun Valley, Idaho, May 1-5, 2016. + many-core systems," *PHYSOR 2016*, Sun Valley, Idaho, May 1-5, 2016. - David Ozog, Allen D. Malony, and Andrew R. Siegel, "A performance analysis of SIMD algorithms for Monte Carlo simulations of nuclear reactor cores," @@ -228,3 +265,11 @@ Parallelism - Paul K. Romano and Benoit Forget, "Parallel Fission Bank Algorithms in Monte Carlo Criticality Calculations," *Nucl. Sci. Eng.*, **170**, 125--135 (2012). ``_ + +--------- +Depletion +--------- + +- Kai Huang, Hongchun Wu, Yunzhao Li, and Liangzhi Cao, "Generalized depletion + chain simplification based of significance analysis," *Proc. PHYSOR*, Sun + Valley, Idaho, May 1-5, 2016. From 6b4db5c2b07dfa1fcc3677ca789783c9cf844b9c Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Thu, 15 Sep 2016 09:20:58 +0200 Subject: [PATCH 06/13] Update documentation to better describe temperature treatments --- docs/source/methods/cross_sections.rst | 36 ++++++++++++++++++++++++++ docs/source/usersguide/input.rst | 11 ++++---- 2 files changed, 42 insertions(+), 5 deletions(-) diff --git a/docs/source/methods/cross_sections.rst b/docs/source/methods/cross_sections.rst index a4d0f7d24..b9043a944 100644 --- a/docs/source/methods/cross_sections.rst +++ b/docs/source/methods/cross_sections.rst @@ -66,6 +66,8 @@ Other Methods A good survey of other energy grid techniques, including unionized energy grids, can be found in a paper by Leppanen_. +.. _windowed_multipole: + Windowed Multipole Representation --------------------------------- @@ -141,6 +143,40 @@ but not always the case. Future library versions may eliminate this issue. The data format used by OpenMC to represent windowed multipole data is specified in :ref:`io_data_wmp`. +.. _temperature_treatment: + +Temperature Treatment +--------------------- + +At the beginning of a simulation, OpenMC collects a list of all temperatures +that are present in a model. It then uses this list to determine what cross +sections to load. The data that is loaded depends on what temperature method has +been selected. There are three methods available: + +:Nearest: Cross sections are loaded only if they are within a specified + tolerance of the actual temperatures in the model. + +:Interpolation: Cross sections are loaded at temperatures that bound the actual + temperatures in the model. During transport, cross sections for + each material are calculated using statistical linear-linear + interpolation between bounding temperature. Suppose cross + sections are available at temperatures :math:`T_1, T_2, ..., + T_n` and a material is assigned a temperature :math:`T` where + :math:`T_i < T < T_{i+1}`. Statistical interpolation is applied + as follows: a uniformly-distributed random number of the unit + interval, :math:`\xi`, is sampled. If :math:`\xi < (T - + T_i)/(T_{i+1} - T_i)`, then cross sections at temperature + :math:`T_{i+1}` are used. Otherwise, cross sections at + :math:`T_i` are used. This procedure is applied for pointwise + cross sections in the resolved resonance range, unresolved + resonance probability tables, and :math:`S(\alpha,\beta)` + thermal scattering tables. + +:Multipole: Resolved resonance cross sections are calculated on-the-fly using + techniques/data described in :ref:`windowed_multipole`. Cross + section data is loaded for a single temperature and is used in the + unresolved resonance and fast energy ranges. + ---------------- Multi-Group Data ---------------- diff --git a/docs/source/usersguide/input.rst b/docs/source/usersguide/input.rst index b724d7f10..38e997e9c 100644 --- a/docs/source/usersguide/input.rst +++ b/docs/source/usersguide/input.rst @@ -729,11 +729,12 @@ The ```` element has an accepted value of "nearest", "interpolation", or "multipole". A value of "nearest" indicates that for each cell, the nearest temperature at which cross sections are given is to be applied, within a given tolerance (see :ref:`temperature_tolerance`). A value of -"interpolation" indicates that cross sections are to be interpolated between -temperatures at which nuclear data are present. A value of "multipole" indicates -that the windowed multipole method should be used to evaluate -temperature-dependent cross sections in the resolved resonance range (a -:ref:`windowed multipole library ` must also be available). +"interpolation" indicates that cross sections are to be linear-linear +interpolated between temperatures at which nuclear data are present (see +:ref:`temperature_treatment`). A value of "multipole" indicates that the +windowed multipole method should be used to evaluate temperature-dependent cross +sections in the resolved resonance range (a :ref:`windowed multipole library +` must also be available). *Default*: "nearest" From 5535385f897e2d90c6c4e0172650d6d45525bfdd Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Thu, 15 Sep 2016 15:04:53 +0200 Subject: [PATCH 07/13] If only one temp available and interpolation is chosen, revert to nearest. --- src/input_xml.F90 | 4 +++- src/nuclide_header.F90 | 11 ++++++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/input_xml.F90 b/src/input_xml.F90 index 88eb0e39c..a76232fa4 100644 --- a/src/input_xml.F90 +++ b/src/input_xml.F90 @@ -5993,6 +5993,7 @@ contains integer :: i, j integer :: i_library + integer :: method integer(HID_T) :: file_id integer(HID_T) :: group_id real(8) :: xs_cdf_sum @@ -6020,8 +6021,9 @@ contains ! Read nuclide data from HDF5 file_id = file_open(libraries(i_library) % path, 'r') group_id = open_group(file_id, name) + method = TEMPERATURE_NEAREST call resonant_nuc % from_hdf5(group_id, temperature, & - TEMPERATURE_NEAREST, 1000.0_8) + method, 1000.0_8) call close_group(group_id) call file_close(file_id) diff --git a/src/nuclide_header.F90 b/src/nuclide_header.F90 index 6b3965917..4235f4234 100644 --- a/src/nuclide_header.F90 +++ b/src/nuclide_header.F90 @@ -190,7 +190,7 @@ module nuclide_header class(Nuclide), intent(inout) :: this integer(HID_T), intent(in) :: group_id type(VectorReal), intent(in) :: temperature ! list of desired temperatures - integer, intent(in) :: method + integer, intent(inout) :: method real(8), intent(in) :: tolerance integer :: i @@ -243,6 +243,15 @@ module nuclide_header end do call sort(temps_available) + ! If only one temperature is available, revert to nearest temperature + if (size(temps_available) == 1 .and. & + method == TEMPERATURE_INTERPOLATION) then + call warning("Cross sections for " // trim(this % name) // " are only & + &available at one temperature. Reverting to nearest temperature & + &method.") + method = TEMPERATURE_NEAREST + end if + ! Determine actual temperatures to read select case (method) case (TEMPERATURE_NEAREST) From 3020800ba43c82d97825f026df72b42798996d46 Mon Sep 17 00:00:00 2001 From: Sam Shaner Date: Thu, 15 Sep 2016 10:43:45 -0400 Subject: [PATCH 08/13] moved conversion of decay_rate units from tally.F90 to openmc/data/product.py --- openmc/data/product.py | 4 +++- src/tally.F90 | 10 ++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/openmc/data/product.py b/openmc/data/product.py index 753888f6d..d8dc76e0f 100644 --- a/openmc/data/product.py +++ b/openmc/data/product.py @@ -98,7 +98,9 @@ class Product(EqualityMixin): def decay_rate(self, decay_rate): cv.check_type('product decay rate', decay_rate, Real) cv.check_greater_than('product decay rate', decay_rate, 0.0, True) - self._decay_rate = decay_rate + + # Convert the decay rate from units of inverse shakes to inverse seconds + self._decay_rate = decay_rate * 1.e-8 @distribution.setter def distribution(self, distribution): diff --git a/src/tally.F90 b/src/tally.F90 index c0e8013a3..765e8c88a 100644 --- a/src/tally.F90 +++ b/src/tally.F90 @@ -708,7 +708,7 @@ contains score = p % absorb_wgt * yield * & micro_xs(p % event_nuclide) % fission & / micro_xs(p % event_nuclide) % absorption & - * rxn % products(1 + d) % decay_rate * 1.e8_8 + * rxn % products(1 + d) % decay_rate end associate ! Tally to bin @@ -733,7 +733,7 @@ contains ! and not the MAX_DELAYED_GROUPS constant for this loop. do d = 1, size(rxn % products) - 2 - score = score + rxn % products(1 + d) % decay_rate * 1.e8_8 * & + score = score + rxn % products(1 + d) % decay_rate * & p % absorb_wgt * micro_xs(p % event_nuclide) % fission *& nuclides(p % event_nuclide) % nu(E, EMISSION_DELAYED, d)& / micro_xs(p % event_nuclide) % absorption @@ -769,11 +769,9 @@ contains associate (rxn => nuclides(p % event_nuclide) % & reactions(nuclides(p % event_nuclide) % index_fission(1))) - ! determine score based on bank site weight and keff. Note that - ! the units of the decay rate have been converted from inverse - ! shakes to inverse seconds (1 shake = 1.e-8 seconds) + ! determine score based on bank site weight and keff. score = score + keff * fission_bank(n_bank - p % n_bank + k) & - % wgt * rxn % products(1 + g) % decay_rate * 1.e8_8 + % wgt * rxn % products(1 + g) % decay_rate end associate ! if the delayed group filter is present, tally to corresponding From d0bbc0f6a013ff302fec85af5492259bf10df620 Mon Sep 17 00:00:00 2001 From: Sam Shaner Date: Thu, 15 Sep 2016 11:20:26 -0400 Subject: [PATCH 09/13] changed decay_rate units in documentation back to seconds --- docs/source/io_formats/nuclear_data.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/io_formats/nuclear_data.rst b/docs/source/io_formats/nuclear_data.rst index 3f03c91be..060e96c0c 100644 --- a/docs/source/io_formats/nuclear_data.rst +++ b/docs/source/io_formats/nuclear_data.rst @@ -173,7 +173,7 @@ Reaction Products :Attributes: - **particle** (*char[]*) -- Type of particle - **emission_mode** (*char[]*) -- Emission mode (prompt, delayed, total) - - **decay_rate** (*double*) -- Rate of decay in inverse shakes + - **decay_rate** (*double*) -- Rate of decay in inverse seconds - **n_distribution** (*int*) -- Number of angle/energy distributions :Datasets: From 157f1fd484dabcf074681aaa36995c1888a8ecd1 Mon Sep 17 00:00:00 2001 From: Sam Shaner Date: Thu, 15 Sep 2016 12:33:20 -0400 Subject: [PATCH 10/13] added fix to IncidentNeutron.from_hdf5() for Python 2 --- openmc/data/neutron.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openmc/data/neutron.py b/openmc/data/neutron.py index 456ccee7b..2431ba74a 100644 --- a/openmc/data/neutron.py +++ b/openmc/data/neutron.py @@ -478,7 +478,7 @@ class IncidentNeutron(EqualityMixin): if len(rxs) > 0: data.summed_reactions[mt_sum] = rx = Reaction(mt_sum) for T in data.temperatures: - rx.xs[T] = Sum([rx.xs[T] for rx in rxs]) + rx.xs[T] = Sum([rx_i.xs[T] for rx_i in rxs]) # Read unresolved resonance probability tables if 'urr' in group: From 59a8e6e13b2e42f24113d9db99972acec8a3edf6 Mon Sep 17 00:00:00 2001 From: Sam Shaner Date: Thu, 15 Sep 2016 14:05:24 -0400 Subject: [PATCH 11/13] fixed unit conversion error in product.py --- openmc/data/product.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openmc/data/product.py b/openmc/data/product.py index d8dc76e0f..50f148221 100644 --- a/openmc/data/product.py +++ b/openmc/data/product.py @@ -100,7 +100,7 @@ class Product(EqualityMixin): cv.check_greater_than('product decay rate', decay_rate, 0.0, True) # Convert the decay rate from units of inverse shakes to inverse seconds - self._decay_rate = decay_rate * 1.e-8 + self._decay_rate = decay_rate * 1.e8 @distribution.setter def distribution(self, distribution): From b894ad6ff35f26b739666285c413bec82aef3846 Mon Sep 17 00:00:00 2001 From: Sam Shaner Date: Thu, 15 Sep 2016 16:15:34 -0400 Subject: [PATCH 12/13] moved decay rate units conversion to reaction.py --- openmc/data/product.py | 4 +--- openmc/data/reaction.py | 4 +++- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/openmc/data/product.py b/openmc/data/product.py index 50f148221..753888f6d 100644 --- a/openmc/data/product.py +++ b/openmc/data/product.py @@ -98,9 +98,7 @@ class Product(EqualityMixin): def decay_rate(self, decay_rate): cv.check_type('product decay rate', decay_rate, Real) cv.check_greater_than('product decay rate', decay_rate, 0.0, True) - - # Convert the decay rate from units of inverse shakes to inverse seconds - self._decay_rate = decay_rate * 1.e8 + self._decay_rate = decay_rate @distribution.setter def distribution(self, distribution): diff --git a/openmc/data/reaction.py b/openmc/data/reaction.py index 45d668b92..eb33e1395 100644 --- a/openmc/data/reaction.py +++ b/openmc/data/reaction.py @@ -107,7 +107,9 @@ def _get_fission_products(ace): for group in range(n_group): delayed_neutron = Product('neutron') delayed_neutron.emission_mode = 'delayed' - delayed_neutron.decay_rate = ace.xss[idx] + + # Convert units of inverse shakes to inverse seconds + delayed_neutron.decay_rate = ace.xss[idx] * 1.e8 group_probability = Tabulated1D.from_ace(ace, idx + 1) if np.all(group_probability.y == group_probability.y[0]): From 074ab0f764caef6af5d8fb86483b98df8015f4e8 Mon Sep 17 00:00:00 2001 From: Sam Shaner Date: Thu, 15 Sep 2016 16:45:07 -0400 Subject: [PATCH 13/13] updated location of nndc cross sections for travis --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 845c10390..46bb847e6 100644 --- a/.travis.yml +++ b/.travis.yml @@ -42,7 +42,7 @@ install: true before_script: - if [[ ! -e $HOME/nndc_hdf5/cross_sections.xml ]]; then - wget https://anl.box.com/shared/static/68b2yhu8e6mx1f6hnbzz9mxsgg42d9ls.xz -O - | tar -C $HOME -xvJ; + wget https://anl.box.com/shared/static/fouwc8lh9he2wc97kzq65u4rp8zt9sgq.xz -O - | tar -C $HOME -xvJ; fi - export OPENMC_CROSS_SECTIONS=$HOME/nndc_hdf5/cross_sections.xml