{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Stochaskell, version 0.1.0\n", "Copyright (C) 2015-2020 David A Roberts\n", "This program comes with ABSOLUTELY NO WARRANTY.\n", "This is free software, and you are welcome to redistribute it\n", "under certain conditions; see the LICENSE for details.\n", "\n", "Using installation directory at \n", " /home/jovyan/stochaskell" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "{-# LANGUAGE FlexibleContexts, MonadComprehensions, NoImplicitPrelude, RebindableSyntax, TypeFamilies #-}\n", "import Language.Stochaskell\n", "stochaskell" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ ":opt svg\n", "import Language.Stochaskell.Plot" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "image/svg+xml": [ "\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", "\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", "\n", " \n", " \n", "\n", "\n", "\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "let t = 10\n", "let xTest = [i/10 | i <- [1..100]] :: [Double]\n", "let xData = [1..10] :: [Double]\n", "yData <- map real <$> sequence [simulate (normal (sin (real x)) 0.1 :: P R) | x <- xData]\n", "toRenderable $ do\n", " plot $ line \"\" [xTest `zip` (sin <$> xTest)]\n", " plot $ points \"\" $ xData `zip` list yData" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "image/svg+xml": [ "\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", " \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" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "cov ils x y = exp (- ((x - y) * ils)^2 / 2)\n", "\n", "let covTest = linspace (-t,t) 200\n", "toRenderable . plot $ line \"\" [zip covTest $ cov 1 0 <$> covTest]" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "image/svg+xml": [ "\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", "\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", "\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" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "-- equivalent to `cov` fn for m -> infinity\n", "covApprox :: R -> Z -> P R -> R -> R -> R\n", "covApprox t m sd x y = amp 0 + 2 * sum' v where\n", " amp j = pdf sd (j / (2*t)) / (2*t)\n", " v = vector [ let w = 2*pi * (x - y) * cast j / (2*t)\n", " in amp (cast j) * cos w\n", " | j <- 1...m ]\n", "\n", "toRenderable $ do\n", " plot $ line \"exact\" [zip covTest $ cov 1 0 <$> covTest]\n", " let sd = normal 0 (1 / (2*pi))\n", " sequence [plot $ line (\"M=\"++ show m) [zip covTest $ real . covApprox t m sd 0 <$> covTest] | m <- [4,6,8]]" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "-- gp using covApprox can be written as a trig polynomial\n", "gpTrigPoly :: R -> Z -> P R -> R -> RVec -> RVec -> R -> R\n", "gpTrigPoly t m sd z a b x = z * amp 0 + sqrt 2 * sum' v where\n", " amp j = sqrt $ pdf sd (j / (2*t)) / (2*t)\n", " v = vector [ let w = 2*pi * x * cast j / (2*t)\n", " in amp (cast j) * ((a!j) * cos w + (b!j) * sin w)\n", " | j <- 1...m ]" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "model :: R -> Z -> Z -> P (R,RVec,RVec,R,R,RVec,RVec)\n", "model t m nData = do\n", " z <- normal 0 1 :: P R\n", " a <- normals (vector [ 0 | j <- 1...m ]) (vector [ 1 | j <- 1...m ]) :: P RVec\n", " b <- normals (vector [ 0 | j <- 1...m ]) (vector [ 1 | j <- 1...m ]) :: P RVec\n", " eta <- gamma 1 1\n", " ils <- gamma 1 1\n", " xData <- joint vector [ uniform 0 10 | i <- 1...nData ]\n", " let sd = normal 0 (ils / (2*pi))\n", " y i = eta * gpTrigPoly t m sd z a b (xData!i)\n", " yData <- joint vector [ normal (y i) 0.1 | i <- 1...nData ]\n", " return (z,a,b,eta,ils,xData,yData)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "--- Generating Stan code ---\n", "functions {\n", " // https://github.com/stan-dev/stan/issues/452\n", " real to_real(real x) { return x; }\n", "}\n", "data {\n", " \n", " \n", " \n", " \n", " \n", " vector[10] x_stan_0_5;\n", " vector[10] x_stan_0_6;\n", "}\n", "parameters {\n", " real x_stan_0_0;\n", " vector[20] x_stan_0_1;\n", " vector[20] x_stan_0_2;\n", " real x_stan_0_3;\n", " real x_stan_0_4;\n", " \n", " \n", "}\n", "model {\n", " \n", " \n", " \n", " real v_0_3;\n", " real v_0_4;\n", " real v_0_5;\n", " real v_0_6;\n", " real v_0_7;\n", " real v_0_8;\n", " \n", " \n", " \n", " vector[20] v_0_12;\n", " vector[20] v_0_13;\n", " \n", " \n", " \n", " v_0_3 = to_real(x_stan_0_4) ./ to_real(6.283185307179586);\n", " v_0_4 = normal_lpdf(0 | 0, v_0_3);\n", " v_0_5 = exp(v_0_4);\n", " v_0_6 = to_real(v_0_5) ./ to_real(20);\n", " v_0_7 = sqrt(v_0_6);\n", " v_0_8 = x_stan_0_0 .* v_0_7;\n", " \n", " \n", " \n", " for (i_1_1 in 1:20) {\n", " \n", " v_0_12[i_1_1] = 0;\n", " }\n", " for (i_1_1 in 1:20) {\n", " \n", " v_0_13[i_1_1] = 1;\n", " }\n", "\n", " x_stan_0_0 ~ normal(0, 1);\n", " x_stan_0_1 ~ normal(v_0_12, v_0_13);\n", " x_stan_0_2 ~ normal(v_0_12, v_0_13);\n", " x_stan_0_3 ~ gamma(1, 1);\n", " x_stan_0_4 ~ gamma(1, 1);\n", " \n", " for (i_1_1 in 1:10) {\n", " real v_1_0;\n", " vector[20] v_1_1;\n", " real v_1_2;\n", " real v_1_3;\n", " real v_1_4;\n", " real v_1_5;\n", " v_1_0 = 6.283185307179586 .* x_stan_0_5[i_1_1];\n", " for (i_2_1 in 1:20) {\n", " real v_2_0;\n", " real v_2_1;\n", " real v_2_2;\n", " real v_2_3;\n", " real v_2_4;\n", " real v_2_5;\n", " real v_2_6;\n", " real v_2_7;\n", " real v_2_8;\n", " real v_2_9;\n", " real v_2_10;\n", " real v_2_11;\n", " real v_2_12;\n", " v_2_0 = to_real(i_2_1) ./ to_real(20);\n", " v_2_1 = normal_lpdf(v_2_0 | 0, v_0_3);\n", " v_2_2 = exp(v_2_1);\n", " v_2_3 = to_real(v_2_2) ./ to_real(20);\n", " v_2_4 = sqrt(v_2_3);\n", " v_2_5 = v_1_0 .* i_2_1;\n", " v_2_6 = to_real(v_2_5) ./ to_real(20);\n", " v_2_7 = cos(v_2_6);\n", " v_2_8 = x_stan_0_1[i_2_1] .* v_2_7;\n", " v_2_9 = sin(v_2_6);\n", " v_2_10 = x_stan_0_2[i_2_1] .* v_2_9;\n", " v_2_11 = v_2_8 + v_2_10;\n", " v_2_12 = v_2_4 .* v_2_11;\n", " v_1_1[i_2_1] = v_2_12;\n", " }\n", " v_1_2 = 0;\n", " for (i_2_0 in 1:20) {\n", " real i_2_11;\n", " real i_2_12;\n", " i_2_11 = v_1_1[i_2_0];\n", " i_2_12 = v_1_2;\n", " {\n", " real v_2_0;\n", " v_2_0 = i_2_11 + i_2_12;\n", " v_1_2 = v_2_0;\n", " }\n", " }\n", " v_1_3 = 1.4142135623730951 .* v_1_2;\n", " v_1_4 = v_0_8 + v_1_3;\n", " v_1_5 = x_stan_0_3 .* v_1_4; x_stan_0_6[i_1_1] ~ normal(v_1_5, 0.1);\n", " }\n", "}\n", "\n", "make -C /home/jovyan/stochaskell/cmdstan /home/jovyan/stochaskell/cache/stan/model_e6bf13ca62b8b7b248101d3b53de582f6eebd761\n", "make[1]: Entering directory '/home/jovyan/stochaskell/cmdstan'\n", "\n", "--- Translating Stan model to C++ code ---\n", "bin/stanc --o=/home/jovyan/stochaskell/cache/stan/model_e6bf13ca62b8b7b248101d3b53de582f6eebd761.hpp /home/jovyan/stochaskell/cache/stan/model_e6bf13ca62b8b7b248101d3b53de582f6eebd761.stan\n", "Model name=model_e6bf13ca62b8b7b248101d3b53de582f6eebd761_model\n", "Input file=/home/jovyan/stochaskell/cache/stan/model_e6bf13ca62b8b7b248101d3b53de582f6eebd761.stan\n", "Output file=/home/jovyan/stochaskell/cache/stan/model_e6bf13ca62b8b7b248101d3b53de582f6eebd761.hpp\n", "\n", "--- Compiling, linking C++ code ---\n", "g++ -std=c++1y -pthread -Wno-sign-compare -O3 -I src -I stan/src -I stan/lib/stan_math/ -I stan/lib/stan_math/lib/eigen_3.3.3 -I stan/lib/stan_math/lib/boost_1.69.0 -I stan/lib/stan_math/lib/sundials_4.1.0/include -DBOOST_RESULT_OF_USE_TR1 -DBOOST_NO_DECLTYPE -DBOOST_DISABLE_ASSERTS -DBOOST_PHOENIX_NO_VARIADIC_EXPRESSION -c -x c++ -o /home/jovyan/stochaskell/cache/stan/model_e6bf13ca62b8b7b248101d3b53de582f6eebd761.o /home/jovyan/stochaskell/cache/stan/model_e6bf13ca62b8b7b248101d3b53de582f6eebd761.hpp\n", "g++ -std=c++1y -pthread -Wno-sign-compare -O3 -I src -I stan/src -I stan/lib/stan_math/ -I stan/lib/stan_math/lib/eigen_3.3.3 -I stan/lib/stan_math/lib/boost_1.69.0 -I stan/lib/stan_math/lib/sundials_4.1.0/include -DBOOST_RESULT_OF_USE_TR1 -DBOOST_NO_DECLTYPE -DBOOST_DISABLE_ASSERTS -DBOOST_PHOENIX_NO_VARIADIC_EXPRESSION src/cmdstan/main.o stan/lib/stan_math/lib/sundials_4.1.0/lib/libsundials_nvecserial.a stan/lib/stan_math/lib/sundials_4.1.0/lib/libsundials_cvodes.a stan/lib/stan_math/lib/sundials_4.1.0/lib/libsundials_idas.a /home/jovyan/stochaskell/cache/stan/model_e6bf13ca62b8b7b248101d3b53de582f6eebd761.o -o /home/jovyan/stochaskell/cache/stan/model_e6bf13ca62b8b7b248101d3b53de582f6eebd761\n", "make[1]: Leaving directory '/home/jovyan/stochaskell/cmdstan'\n", "--- Sampling Stan model ---\n", "/home/jovyan/stochaskell/cache/stan/model_e6bf13ca62b8b7b248101d3b53de582f6eebd761 method=sample num_samples=1000 num_warmup=1000 save_warmup=0 thin=1 adapt engaged=1 algorithm=hmc engine=nuts max_depth=10 metric=diag_e stepsize=1.0 stepsize_jitter=0.0 data file=/tmp/stan-59ed7c2ded52e227/stan.data init=/tmp/stan-59ed7c2ded52e227/stan.init output file=/tmp/stan-59ed7c2ded52e227/stan.csv\n", "method = sample (Default)\n", " sample\n", " num_samples = 1000 (Default)\n", " num_warmup = 1000 (Default)\n", " save_warmup = 0 (Default)\n", " thin = 1 (Default)\n", " adapt\n", " engaged = 1 (Default)\n", " gamma = 0.050000000000000003 (Default)\n", " delta = 0.80000000000000004 (Default)\n", " kappa = 0.75 (Default)\n", " t0 = 10 (Default)\n", " init_buffer = 75 (Default)\n", " term_buffer = 50 (Default)\n", " window = 25 (Default)\n", " algorithm = hmc (Default)\n", " hmc\n", " engine = nuts (Default)\n", " nuts\n", " max_depth = 10 (Default)\n", " metric = diag_e (Default)\n", " metric_file = (Default)\n", " stepsize = 1 (Default)\n", " stepsize_jitter = 0 (Default)\n", "id = 0 (Default)\n", "data\n", " file = /tmp/stan-59ed7c2ded52e227/stan.data\n", "init = /tmp/stan-59ed7c2ded52e227/stan.init\n", "random\n", " seed = -1 (Default)\n", "output\n", " file = /tmp/stan-59ed7c2ded52e227/stan.csv\n", " diagnostic_file = (Default)\n", " refresh = 100 (Default)\n", "\n", "\n", "Gradient evaluation took 0.00022 seconds\n", "1000 transitions using 10 leapfrog steps per transition would take 2.2 seconds.\n", "Adjust your expectations accordingly!\n", "\n", "\n", "Iteration: 1 / 2000 [ 0%] (Warmup)\n", "Informational Message: The current Metropolis proposal is about to be rejected because of the following issue:\n", "Exception: normal_lpdf: Scale parameter is -0.00763495, but must be > 0! (in '/home/jovyan/stochaskell/cache/stan/model_e6bf13ca62b8b7b248101d3b53de582f6eebd761.stan' at line 42)\n", "\n", "If this warning occurs sporadically, such as for highly constrained variable types like covariance matrices, then the sampler is fine,\n", "but if this warning occurs often then your model may be either severely ill-conditioned or misspecified.\n", "\n", "Informational Message: The current Metropolis proposal is about to be rejected because of the following issue:\n", "Exception: normal_lpdf: Scale parameter is -0.106511, but must be > 0! (in '/home/jovyan/stochaskell/cache/stan/model_e6bf13ca62b8b7b248101d3b53de582f6eebd761.stan' at line 42)\n", "\n", "If this warning occurs sporadically, such as for highly constrained variable types like covariance matrices, then the sampler is fine,\n", "but if this warning occurs often then your model may be either severely ill-conditioned or misspecified.\n", "\n", "Iteration: 100 / 2000 [ 5%] (Warmup)\n", "Informational Message: The current Metropolis proposal is about to be rejected because of the following issue:\n", "Exception: normal_lpdf: Scale parameter is -0.00585475, but must be > 0! (in '/home/jovyan/stochaskell/cache/stan/model_e6bf13ca62b8b7b248101d3b53de582f6eebd761.stan' at line 42)\n", "\n", "If this warning occurs sporadically, such as for highly constrained variable types like covariance matrices, then the sampler is fine,\n", "but if this warning occurs often then your model may be either severely ill-conditioned or misspecified.\n", "\n", "Iteration: 200 / 2000 [ 10%] (Warmup)\n", "Iteration: 300 / 2000 [ 15%] (Warmup)\n", "Iteration: 400 / 2000 [ 20%] (Warmup)\n", "Iteration: 500 / 2000 [ 25%] (Warmup)\n", "Informational Message: The current Metropolis proposal is about to be rejected because of the following issue:\n", "Exception: normal_lpdf: Scale parameter is -0.0366805, but must be > 0! (in '/home/jovyan/stochaskell/cache/stan/model_e6bf13ca62b8b7b248101d3b53de582f6eebd761.stan' at line 42)\n", "\n", "If this warning occurs sporadically, such as for highly constrained variable types like covariance matrices, then the sampler is fine,\n", "but if this warning occurs often then your model may be either severely ill-conditioned or misspecified.\n", "\n", "Iteration: 600 / 2000 [ 30%] (Warmup)\n", "Iteration: 700 / 2000 [ 35%] (Warmup)\n", "Iteration: 800 / 2000 [ 40%] (Warmup)\n", "Iteration: 900 / 2000 [ 45%] (Warmup)\n", "Iteration: 1000 / 2000 [ 50%] (Warmup)\n", "Iteration: 1001 / 2000 [ 50%] (Sampling)\n", "Iteration: 1100 / 2000 [ 55%] (Sampling)\n", "Iteration: 1200 / 2000 [ 60%] (Sampling)\n", "Iteration: 1300 / 2000 [ 65%] (Sampling)\n", "Iteration: 1400 / 2000 [ 70%] (Sampling)\n", "Iteration: 1500 / 2000 [ 75%] (Sampling)\n", "Iteration: 1600 / 2000 [ 80%] (Sampling)\n", "Iteration: 1700 / 2000 [ 85%] (Sampling)\n", "Iteration: 1800 / 2000 [ 90%] (Sampling)\n", "Iteration: 1900 / 2000 [ 95%] (Sampling)\n", "Iteration: 2000 / 2000 [100%] (Sampling)\n", "\n", " Elapsed Time: 15.7447 seconds (Warm-up)\n", " 8.34643 seconds (Sampling)\n", " 24.0911 seconds (Total)\n", "\n", "Stan took 24.656232831s\n", "# stan_version_major = 2\n", "# stan_version_minor = 20\n", "# stan_version_patch = 0\n", "# model = model_e6bf13ca62b8b7b248101d3b53de582f6eebd761_model\n", "# method = sample (Default)\n", "# sample\n", "# num_samples = 1000 (Default)\n", "# num_warmup = 1000 (Default)\n", "# save_warmup = 0 (Default)\n", "# thin = 1 (Default)\n", "# adapt\n", "# engaged = 1 (Default)\n", "# gamma = 0.050000000000000003 (Default)\n", "# delta = 0.80000000000000004 (Default)\n", "# kappa = 0.75 (Default)\n", "# t0 = 10 (Default)\n", "# init_buffer = 75 (Default)\n", "# term_buffer = 50 (Default)\n", "# window = 25 (Default)\n", "# algorithm = hmc (Default)\n", "# hmc\n", "# engine = nuts (Default)\n", "# nuts\n", "# max_depth = 10 (Default)\n", "# metric = diag_e (Default)\n", "# metric_file = (Default)\n", "# stepsize = 1 (Default)\n", "# stepsize_jitter = 0 (Default)\n", "# id = 0 (Default)\n", "# data\n", "# file = /tmp/stan-59ed7c2ded52e227/stan.data\n", "# init = /tmp/stan-59ed7c2ded52e227/stan.init\n", "# random\n", "# seed = -1 (Default)\n", "# output\n", "# file = /tmp/stan-59ed7c2ded52e227/stan.csv\n", "# diagnostic_file = (Default)\n", "# refresh = 100 (Default)\n", "# Adaptation terminated\n", "# Step size = 0.0606685\n", "# Diagonal elements of inverse mass matrix:\n", "# 0.373408, 0.311495, 0.412781, 0.480178, 0.492721, 0.492969, 0.624931, 0.759556, 0.98318, 0.944732, 0.813175, 1.0754, 0.992736, 1.10151, 0.863845, 1.1199, 1.03045, 0.898382, 0.990462, 0.931562, 1.08195, 0.456203, 0.514514, 0.756294, 0.462145, 0.426067, 0.485763, 0.628156, 0.799072, 0.765683, 1.06579, 1.00344, 0.9537, 0.985086, 0.920023, 0.834636, 1.04615, 0.96495, 0.836129, 0.908569, 0.912248, 0.0825406, 0.0403844\n", "# \n", "# Elapsed Time: 15.7447 seconds (Warm-up)\n", "# 8.34643 seconds (Sampling)\n", "# 24.0911 seconds (Total)\n", "# \n", "\n", "Extracting: x_stan_0_0, x_stan_0_1, x_stan_0_2, x_stan_0_3, x_stan_0_4\n", "--- Removing temporary files ---" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "let t = 10\n", " m = 20\n", " nData = 10\n", "z0 <- real <$> (normal 0 1 :: IO Double) :: IO R\n", "a0 <- fromList <$> sequence [ normal 0 1 | _ <- [1..integer m] ] :: IO RVec\n", "b0 <- fromList <$> sequence [ normal 0 1 | _ <- [1..integer m] ] :: IO RVec\n", "let eta0 = 1\n", " ils0 = 10 / t\n", "samples <- hmcStanInit 1000\n", " [ (z',a',b',eta',ils')\n", " | (z',a',b',eta',ils',xData',yData') <- model t m nData\n", " , xData' == list xData, yData' == list yData\n", " ] (z0,a0,b0,eta0,ils0)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAcIAAAEsCAIAAADfNCTgAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nOy9eXBj93Xn+7v7DlysJEGw2WR3qxe1JEuaju3EkmUnke2JnUw5KZdfpWJP4snLi2fiJI7iLM44iqem4pSylFPjGedlyu9N5k0qiuOXsmciJVGeIq+SEkmxNvfKZpMEQGIHLu7Fvbjr++OkryGQzSZIgFj4+/yhEgEQvL++Pxyc8zvnfA8RBAHCYDAYzH4hR30BGAwGM9lgM4rBYDAHAptRDAaDORDYjGIwGMyBwGYUg8FgDgQ2oxgMBnMgsBnFYDCYA4HNKAaDwRwIbEYxGAzmQGAzisFgMAcCm1EMBoM5EIMxo/7a//vxd911PDs/v/imH3vsW3Xcpo/BYI4MA/JGyZnvf/TJixv5tecejfzxz/zuS+5g3haDwWDGHnog70IufN8PLSCEEJp94IE7ql/b8gfythgMBjP+DPhs1Ln0f//J1Yf/1VuZwb4tBoPBjC2D8UaBoPb0r374/zn9+3/9w3Fi91cSxBte8Mgjjzz22GPhj6VSqVQqhT+m0+l0Oj25z8Lj43ZVQ3q2VCql0+lxu6ohPQuLHberGtKz4X/H6qqG9KwkSUtLS2jPEAOTbTZeeuxHPvzs//alP/vIHext/yoxuL879rz22mvnz58f9VUcEnix0wpe7C4MyBu1r37hQx9+8vv/r6/swYZiMBjMNDGYs1H767//G1+5/srn/tWZbDabPfGRv9QH8rYYDAYz/gzGG2W//78UnP8ykLfCYDCYyQJ3MQ2d7pPsqQcvdlrBi92F0aR6jlSKCYPBTDcj80YJgnj00UdH9dcxGAxmUAyybrQvsDeKwWCmA3w2isFgMAcCm9Gh090dMfXgxU4reLG7gM3o0MH7b1rBi51WsBnFYDCYQwVn6jEYDOZAjD5TXy6XY7EYTY/sSjAYDOYgjD6oF0Wx2WyO+iqGCG7/mFbwYqeViexiqlarPM9LknT4V4LBYDAHZPTeKEJIVVVd110XT3DCYDCTx1iYUYqiZFme7tAeg8FMK2NhRhFCENEbhjHqC8FgMJj+GKOCp2kN7XHd8rSCFzutTEz5fRAEPWZ0WkN7vP+mFbzYaWVizOiO4NAeg8FMHONlRtH0hvYYDGZaGTszOq2hPQaDmVbGzoyiqQvtcfvHtIIXO630u9gxytR3M02hPd5/0wpe7LQykc2gO2IYhmVZiUTicC4Jg8Fg9sc4BvXAlIX2GAxmWunTjHqXvvCvHzg7I3L3fvpV741P2U9/NKsks9lsNnvs7l/6e3sAFzdNoT0Gg5lW+jSjROLCR37/y3/5K/ftqA4q/sgfr+Ryudz6K7/3DnYAFzcdWXtctzyt4MVOK0MuvydTdz1w4UScI/r7tf0zBaE93n/TCl7stDLSLibzyY+dXzp+5m0f+uyz9cElrqLRqK7rjuMM7B0xGAxmcAxudAdz/ye/ce2zizFv7Ssff9+P/9q51z7/g+IuLyeI73q0jzzyyGOPPRb+WCqVur8N0ul0NBqt1+vJZJIkye3Pdlcn4Gfxs/jZYTyLuhifqxrSs/2yn4In79JnHvgJ+4+e+9Rd1I7Puy/8+n2/EPvSV3/51M7P763gqQdN01zXjcfjfV7s6HnttdfOnz8/6qs4JPBipxW82F04cFDvF1964msrJgrqq1dLNkLIK3/98b9pnDwzeysbuj8ikQhCSNO0gb7rYdDzTT7d4MVOK3ixu9CnV+jnv/CBBz71jVqlHqip+Pf91te/+BPf+T9OfObub/3dzzb/8/s/8Dv/2PQDKvE9P/W7n//Uw3O3NtH78EYRQr7vV6tVWZYFQej3dzEYDGZIjG8X0444jlOr1RKJxCEMZA6CwL6J4zgMw7A36T7YxWAwR5wJM6PosJpETdPUNI2mabCbDMM4jgMm1XXdSCSCPWIMBgOMqTTJLgy7kjQIAk3TdF1PJBKJREJRFI7jSJLkOE5RFHhQ1/VGozGSbyAMBjNuTJ43ihDyPK9SqQwjtHddt16vMwwTjUZ3idyDIGi1Wp1OJxaL3fYaSqXS0Tmex4udVvBid2F8pUl2YUhNoo7jQApLVdXdTz8JgohEIrIsV6vV2/YFHKQebeLAi51W8GJ3YSLNKBpCaO/7fr1e7+vQUxAE6AvwfX9Ql4HBYCaOSTWjaNBNoo1GQxCEfhNHPM/zPN9oNAZyDRgMZhKZYDNK0/SgnEGo6lcUZR+/O7l9ARgMZiBMsBlFA3IGLcuyLEtV1X2/g6qqnU7HNM0dnz06B/MIL3Z6wYvdhckreOrhgM6g67rNZjMWi5Hk/v8pSJJUVVXTNM/ztj+L99+0ghc7rQy5GXRAHLDgqYeDNIlWq1We5yFhdUBarZbneQfxajGYkdPTvLfj55QgCFEUZVk+iPMxTQy9pfIQAGewVqvRNM0wzN5/ERL9A7GhCCFZlsvlsm3bLDsI6X8M5nDxfV/XddM0oXlPluVb9T3DK8vlsiAI2Jii6fBGAcuyNE0DTdK9vH4YNfymaRqGkUwmB/WGGMwhEBrQvsxi+Fu4N3p6vkb6TTc1Gg1ZlgfbByUIAkEQPbkmXLc8rUzHYk3TLJfLCKFUKhWJRG5lQ7sXGwRBp9MxDMNxHMdxVlZWLl++XCgUtra2qtUqNPhNdKt0v3d2GoL6kEgkUqvVNE2DvNMuDDac77mGer3O83wYDeEuumll0hcb9jTvJSYrFovRaNS2bU3TarUaRVGh5tny8rLrup1OR1VV3/dt24aBvpPrpfZ7Z6fKjCKEVFWtVCoMw+xy/yAYGZJGFOwtXdf3V4WKwRwOoXxEMpm8rfCjaZq1Wq3Vatm2jRA6c+ZMmIQI30eSpFqtFovFYOfD451OZ3d5iulgZGaUIIjf/M3fHEjNUzckScZisd3TTZZlcRy3j3Ae7G+73Q4Dlh1TloqiVCoVURQparATADCYwWDb9vbW5x23N03Ttm0HQSDLchAEoij2mEWappPJZKvVMgxDUZR6vR6LxViWDR+vVCp7UfCZaEa2tuEdnYA+UzgCb/sL2u12v65i9xl8Op0O33bHlCVFUaIotlotXPyEGUPAhoKxg0dutb0dxymVSvBR3djYyGazkUhku2sJSj0g0ctxXPjm4ePVajUej/dVRTNZTE+mvodbjcBzXbdWq/V18GGaZrPZpCiKZVnXdbcX0/m+bxhGp9NJJpNQJsIwTKVSUVWVZdlJP0HrC7zYMWe7DQXztz1HD4/Lsux5XqfT6XQ6YBN3yeZDIB8Ege/78Xg8/BP9VtGMnH7v7NSaUYQQhPY96aZWq4X23D4fBEG9Xm80GhzH8Ty/+xCRTqdTKpVEUUQIua6LECIIYuI+ZpgppseGBkHQbDYdx+kJusPUk6IorVarW3439Fu7DXE38LvwKZuZmQnfdnIn++6FaTajvu9XKhVFUboPgEqlUjwe38tJjW3b+XzecZx0Oq0oyl4OOsNtStO0YRj5fD4WiyWTSXxIihk5PTb0Vgrl4eOiKN5KOnK7S9uDaZpbW1uiKM7MzIQP7ujWTAfTbEbRzRF44f3udDqtVmsv5fGapq2vr6dSqVQq1Vck0r3DOp1OLpeTJAl3zmFGS4/h2zHFhG5+XiKRCMdx3S7Ic8+hr30teOtb7Te96Z+bRG3bbjQacGy147RHwzAKhUImkwnLCqd4su/IzChCaBiZ+u10b6BGo8GyLMTdtwIinc3NzWw2u7+iJfiLUIvXaDQIgiBJst1u8zwvyzL2TDGHzI42dLsv2R29gecoy7Ku61//uvHDP6z7vkmS9OOPMxcusAzDEAThOA5YUkEQIG3gum73yWmpVDIMY2FhIQz+DnOy72EyhZn6HliWjcVi9Xo9Go3CMfkuL4aIRtf1TCbTbUP70muAfuRmswkT8S5dunT27FlJknRdr1Qqk1uTvBcmMeuybyZisXu0oeimcjnP85VKBfpT1tbWOI77h39QfD+NkOL75Noa+rEf++6vzM7OVqvVIAgsy+J5HnJQYeFKIpEwDKNarYahPcMw4UfjkNa/L456+f2OgCVdX19XVXV7ZA0m0rKszc3Nzc3NIAhomg4HPQVB0G63O50OtG0APYEMAOeh4R6yLMswDEmSWq2WruuRSCQSicB50xTXJE+EZRkU479Yx3H2aEM1TfN9PwiCtbW1arUaiURUVc1msxRFvfe96D/+R+R5iKLQgw++4bdYlk2lUvV6HbzLWq0mCEIikWi32+VyORKJpNPpQqEgy3IY2kuSFH40DuOfYF+Mzox6l77wkZ9+7MkXr2d+9YUXPnXXmEWuNE3zPA/uJMuy3d4lFHPAV/G9995r2zZUZkAZ0/ZgvMcz9X0f0pcQ0SQSCfhCBlvMcZwoiqZpSpJEURTUJDebzaNQk4wZLeF4MTCaPSa1G7B6oih2Oh1N044fPw4KvNA7f+aM/eST9l/+Zf69701ls2hzExEE0e1GwJa2bTsWi1mWVa1WBUGIxWLNZpNhGEVRSqVSd2gPrYb7a4EZTwa3DCJx4SO//+X//YkP//zA3nKAgD/I83y9XmdZ1rZtmqZpmoYaN9/3jx07Bj0YUJPRarXAgO6eZ/d9v9VqmabJcZwgCM1mE6IbURQty4LKjyAIBEEwDAPOEwiCUFUVapKnO8DHjJZGo8HzPGywHpMa4vt+s9nM5/MzMzMkSZZKpePHj3McZxgGeAlgLh98UJ6dJe66aw5+K/QkYBgalFTbtn358uVoNEpRVLFYhIkSYIs9z+su1g4n+455aL93BmdGydRdD6S8S/8fgeyBveeA8H3fNM1UKgVGs1gsZrNZiNZJkiRJMpPJQGpSlmXTNKHGuDtHD56pYRjQLQf7hmEYjuOgfMpxHNd1o9EoGFDDMDiOi0Qia2trly5disVijuPQNA0SUAghQRAYhpnuAB8zQmAeRJgJ2D6xMQy22u12JpPxPK/RaCiKYpqm4zjb9Ua7tyhBEBzHMQwD9tQwDNADWl5eBqFIkiRd1y2VSpubmzzPQ8pBkqTJCu33zpQ41bsQBEG1WvU8r16vg+oMz/M3btyIxWKxWAzqn1iWrdVqCCFd10MD6vu+pmlgOsPmjXQ63V26FH4tEwQBX/iQRILQ3jTNxcXFIAiCIHAcp1gsiqIYpjKnsul4zM8KB8vYLtY0TcuywsK+7RMbw84lURRBnKndbruuC214O4Zf3Yvtbh4FNxaMMjin1Wo1lUrRNJ3JZNLpdLFYLJVKpmmyLNsd2kejUZg9MYa1KyMeIuJd+swDP2H/0XO3ORvtcb4eeeSRxx57LPyxVCp16/2l0+nuVe39Wd/3oWaz2WzOzc3xPF+tVq9fv44QkiTJMAzf98+ePRuPx3Vdr9VqlmXZtk1RlOu61WqVYZi5uTk4HZdluVKp7P53i8Wi4zhQmspx3LFjx6LRqOd5rVarVquZplmv1+fn5x3HURRlYWEhNMfr6+urq6uRSASajve9XvwsfjadTsPujcfj9Xq9VCqBMKiqqrOzs+l0OuxQchynXC7n83mKonzfj0Qi586d830fClEqlUqlUgnfOZlMplIpCPA9z8vlcrqui6IIGzi8KjCvr732GgR/4bOyLL/22muapp07d46m6fCaDcOIx+OnTp0az39JtGdGZkaHWvDUnR3yfZ+iqEgkAmlKMIvw/9FoFMQXqtXq0tJSMpn0PK9UKtVqNVVVZ2Zm9i2mAIdBmqa98gr10kvM2bONN7+Zh0OipaUlyOl3J69u2xaCweyR7vFioUmFndzdueR53srKiud5FEVZljUzMyNJ0i69zpBuqtVquq5LkqQoyi6d9WtrazRNz83Nhfu50+m89NJLrVbr3nvvTaVS4XuWy2Wo4R/WP8ehMG1mtGccAkKoXC6nUinYQGCnYHwI/H+r1VpdXYWjbl3XO51OLBZLpVK2bXcrhu2FnvQlQRDPPuu/7W267xskif77fy+/5S0ypLDm5+dZlu2pBIBjB2xJMQfBMAzLssLUTbdJhUAespqmaW5sbICFJUkSoq7d37nbBAdBsGMRSwgcYSGE0ul0uJ8Nw3j55Zfb7fab3/zm8IRhOubuDM6c+fkvfOCBT32jVqkHair+fb/19S9+JHur5sdhmNEd65N0Xfc8TxCEer1+5UrsuefYBx5Ap0//s8pss9kslUqJRAKqNFiWlSTJ933XdRVFuVXr/a1K8YMgcF0XHnQch+f5//E/lE9/WkRIQKj57/995yd/0oHiKkEQFhcXOY5DbxxoQ1EUtqSYfdMzXiw0qWEgH4vFKIpqNpvr6+uVSuX06dMcx7EsqyjK7t0l0LCkKArP8+imxwBSpJ7nRaPRHfvuIUzutqSlUunKlSsIoe/93u8NPdlKpSJJ0kSXrExDT/0uBZ6lUglUaq5ejb397azvI5LsPPGE9s53qo1Go9PpwKG4JEmqqkIiaBdBvPDid2wi7rkkXde/+U3jfe/TPc+kKP7xx9HSkj4/Pw/i/I7jLC0thW2p4Ve9IAiNRmNyxRnHvyJ9gIzbYrt9z9CkIoRCL9JxnFwuB9nU5eVlsIMsy4bTQHfc0nDi5Lru/Pw8PNLtSZim2W63RVFMJpMcx3X/7nZL6nne5ubmxYsXM5nMnXfeCS+DgtZUKjU+9SqjK78fBd0h/HYNEdM04Xs4Fos9/zzr+wihwPe1l14S7767Ag0b8IuiKIaWcSD3kiTJSCTynvdEvvUt9MUvFv7lv5TPnDGKxfazzz67tLQEjueVK1dOnjwJwVRYlq9pmiRJu2hOjznjZlmGylgttme8GExsdBxH0zRFUSDRurq6yrLs7OwszH/c3NwURRE6kW612cJT+ytXroRmFAqeIJyCM9NKpbK+vt5zZsqybDqdhuwNWFKKohRFufPOO1988UVVVeENx3DuTr93dmQfVIIgDqJLAtVIu080bDQaoKXIsuyDDyKKQggZFEW96U1NXdevX78uSdLy8nImk4Hm957v0oHwPd+DPvzh2jveEZmbm3vTm9701re+tVarXbx4keM4WZYvX76s6zq8EsryZVk2DIMkyb2POMVgHMfRdT0ajcKPhmFAPhNmjgmCUKlUVldXVVU9duwYpOavX78OedRdpoHuJfNJEATP89lsdmFhgSRJaOGD1lJ005IihEqlEsxxgna+e+6559VXXw1brhVFabfb8CuTyORJk3SH8Lu0GLVarUajcfLkSdgBFy6gr33N+du/Nd78Zj+TKZfLRjKZvOOOOw7Z44OKk0KhsLKyks1mJUl65ZVX7rrrrvB7WBAEOCF1XXcvI04xmLBDCY5EoZA+LEz2PK9QKDQajUQikUqltra2giAgCGJxcXF376/f6pGwo4SiKEjBQ5qXZdlEIlGr1arVaiKRgL4VRVEymczLL7984cIF2PM8z7fb7dtmusaTyQgbIXBotVrVarVcLgdBkEqloO1sx9fbtl0oFCAhDo/4vn/yZP1nfxalUnnXdefm5k6ePHn4UTNBENFoNJvNzs7Owlexqqr/9E//1O17gpAKHEf0jLzHYLbT3fSJEKpWq9CIqaqq4zhbW1swfEwURVDegdhrsDYUAMNNkiT01xMEUS6Xm80mZLEIgqjX67ZtQ9U2ODHXrl0DJxQenNDp9uNuRiF4L5VKEPxCH9EuYQhCCOqKJUnqduUgwF9bW0MIzc3NHabiYc8hC3z3gnwOTdMEQQiC8MILL9Tr9fA18AUO/VeO4xzOdQ6E8TkrPATGYbE9TZ+gMZbNZgVBgAyPZVmu60LTM8/zc3NzpmmG4f+O7GhD97jY8GyqXq9zHAeJI0irwtlovV4nbnLy5Mlms1koFBBCMMp3TPyGfu/s+Gbqb5V/v+1vVSqVIAig9QgehMImuJd33HGHaZqjHewBDXMIoWg02mg0PM+7ceNGo9F48MEHu02/bdtbW1sURc3NzU1iugkzbHpGxdm2vbKykslkotEobJ56ve77/sLCAjQ18TwP0jm7dLIPqhOk+32gEAX6AzmOgwnnvu+rqnrx4kXLspaWluLxOOhLhcX5E8R4fTj7Dd63A+PnEEJhLRFkkwqFgiRJ58+fRzf9wSEtYS8wDAPtVY7jJBIJhmHuvvvuaDT61FNPgXMBQFLVNM3uNjUMBnBdt9lsgqIdQsi27c3NzWg0Go1GLcu6fv16sVhkGObMmTPJZLLbyzsEG4q65NJBTS2ZTNI07bquruugxgs5pUwmQ9P01tYWyKQRBNHpdA74pw+f0ZtRqEGDrvZisQgzBSVJum3wvh2wQRAmwy+2Wq3XX3+9VCplMpnz589Didw4HGPDUZFhGBRFxWIx0zQvXLiwsLDw5JNPdvcysyx77Ngx0Ccd4dVixpBmsynLMtQX27YNYz+SyaSmaRcvXux0OjMzMydPnhQEAVL2MBFkl3B+4B3J3ZYUZtbHYjHoT1VVNWzIjkQiQRBsbW25riuKIlRuTRajL3iqVCogyilJ0szMTDKZhGaJfmuPLMuyLAvGGMiyHASBpmmvvvpqpVK55557Tp06RZIkCDiNQ4BMURR0TBmGAbut2Wzefffdp0+ffvrpp7vdT5ZlFxcXi8ViWB2CwXRXiYI9glme7Xb7xo0bIB8+OzsLBhFqSMGS3iolMCRVh9CSwhG/IAjz8/Ou625ubs7NzRWLRdd1E4kEpOlBPB80Jwd4DYfA+J6N9gWMyorH4xC8iKJYrVavXbvWaDQeeOABOHCEvo5+J30enFuV8oLyKUIonU6H6iSyLF+7dm1lZeWd73ynqqrhiw3DWF1dPXHixJj3zI1VRfqwGdViu5s+wxmftVqNoigYBw/TO8AgQksonIreSiZ5Lzb0IIs1TRMUKeGjFwTBjRs3YFoPQRDz8/Obm5tQLj03NwcVr7snwYbNxJTfD5Cwbo6iKNM0SZLM5/PXr183DOPtb397mLRptVqhtNdhcquTTZIkQ4cU3fze1nX92LFj8/Pzzz33XFiZjxCSJGl2dnZ9fX3MS5SP1DHuqBYL3mVoQ0E2FzLyMLSxu/nytuH8Hv3QgywWJuWFVX1QtcowjG3bzWbTNE2ox4IPMsuylmWNdp/3u9hpMKNh3Vyr1XJdt1wul8tlgiAuXLgQHoNC/+84nIp2A21zhmF4noduWlLbto8dOxaLxZ5//vluSwo9y1AdgjmyhOF8OFvJtm2YH1epVKLRaLcUyG3D+UNTaARvJsygkiQJPamgVAnizZCDarVaEOMP9XoGy8Sb0bBuzrbtXC4HNRMcxy0uLsZise6XQVZndFe6Az0OKbppSX3fn5mZURTllVde6T5xX1hYMAwDpCUwRxAQkYhGo2EEhhDa2NhQVTWfz0ej0fA8FN00uMCO2flDVrlVVdWyrLBmgGGYdDotSVK1Wq1Wq5IkQY2NZVnoZj/rIVzVQJhsMwppJcj6Xb9+HeZnwbzs7uozuHPjeaoIDikI+sEjIBUBxV4kSV66dAk2FkKIoqhMJlOpVMakShlzyECOlKZpmK1EUdTm5ibDMOVyORqNdrftQWmRKIq3CucPXymcJMlYLKZpWthRAoUooIfvOA5JkuDomKZJEMQEbfLRZ+r3TVg357puPp8He4oQgl77MISBrsoRNqfvflYNDilCCCq9AJZl5+fnO51OJpMxTfPy5csg64AQUhQlEolsbW2NZ3fT0ckvoUNfLExmlCQJIjCO42q1mm3bmqbBjJBug9hsNkVRhJ2/PZyHkTZ92dCBLBb0+qApAB7heT6TybAsu7GxAToAvu8TBOF53ggrn6ani+m2gLoiTdMbGxswlbPdboMec3dGstVqeZ7XnfUeN3zfL5VK0Ozcva1N01xZWYlGo+vr6/F4/MSJE/Cs67qFQoFhGJgmNroLxxwqYD1ZlgXNmmaz2el0crncwsICVF+Gr4TsPAjj9vTOB0HQbDZB+WxUUxShnAAmmSOE4Gy31WrZtp1IJGDqDzSGzszMQKQ/5kzqhxC+qQiCWFlZkWUZBiMzDANfd+HLXNcFXYbRXentAYeUIIjuFiZ0s8jOMIxsNlur1dbW1sADpWkafHAspnd0AFeU5/lmswmDG1iWXV1dPXbsWI98BGTnITru2fmu60IfR3e4dvj0pJtA53dubs5xnGazCUdzoOY3KbXSE2lGYaNQFHX9+vX5+Xme5+FHlmV7Qhjo9BjDCa49wAmp4zg950GxWCwajbqum06nK5XK5uYmREOyLHMcBwHdiC4Zc6jAqahhGAzDwHHn9evXIZDvibQajQakvHseN00TMjmqqo4819qTbhJFMQiC5eVlUC4PgsCyrFgsVqvVJqIUfyLNaKPRIAgil8sdP35cURQ4VYEBxd0ZyR498HGGIAhwHKChq/upVCoFA3NEUdza2oI0PbyeJMnuvYiZVlzXhWCr0+mABh3kZBRFCXvqAcMwXNd1Xbf7cejoAwnnUGtitITpJrCSgiB0Oh3IkpXLZcuyQBRVFEWQZh9zJs+MGoZhGEapVDp+/Lgsy2tra7ZtLyws2LbdHc6DxzraXghgj6W8giDAuNDuWlF0M4QHR5skya2tLfBAoauV5/lwL44DuPx+GEAgH2pFGoZRKBRisVgymeye2QV7Hl4TPg6BvO/7BwzkB75YhmFkWYawnSRJjuNM08xms7FYrFAogJ5/KpWqVqthEcuhMeXl957nFYvFer0ONrTRaGxsbJw9e7bT6Yii2L1Lwk6PEV4tsPdbAhoN4FB0Pw4DxKHTw7IskMNBCIGWD5yUDf669wU2owMnTFjDTHmKotbX1wmCOHbsWE+eHaI0mqbDCAwCeVmWDx7ID2OxcJ2wQBAEIEny1KlTBEEUi0XP8xzHAenSgf/p3ZkYM7q/gqd8Pl8ul0+cOAHfyZcuXbrjjjugq6y7Q2mCwvluYDIoQRDbzWI0GvU8L51OkyTZ6XRKpZLruiCFC4cAk6iLg7kt4GBC+SdCSBTFjY0N0zS3qytAL1wQBBCBdQfy41kxDUSjUV3XXdeFrwTbtnmeP3PmTLPZrNfrhmEoinL4ZrRfRsImugEAACAASURBVGZGgyDoy4wGQbC5ubm+vn7+/HnQK1xZWUkkEul0utlsdncojU84vw/ghNR13R6zSNM0uNvpdNqyLF3XQfgZZoEpigJ7cTQXjRkajUYDyj8hg/rMM63Pfa65uTkbVgsBEAIHQQAR2KAC+UOApukwtAeHFCGUSqUymQwMICFJ0vO8sANlPJmMoB4qJcGGSpJk2zbMRs5kMiDy2v19CxIkY757bgVFUeBWbzeLsizbtp1MJmVZ7nQ68F1NURRsvnAvYqYG+Cp1HAeK0l98MfjhH2784R8qP/Zj8X/8x+9+cqExFHrSBUHQNG1QgfzhEIb2kGiCWpTTp08zDPPMM6Xf+Z365cvimDukfZnRoPL0o+++6/TZ03c9/MmnSt35ZPvpj2aVZDabzWaP3f1Lf28P8hJN09za2tJ1fWFhAfo+19fXGYaJx+Nhn8Z3L2T8JEj67YiQJAkExHrMImTndV1fWlqCYyMI7cG8Qkph5KE97mIaFGH5p+/7cIDzzW/avt9BSPJ9+Rvf+O4rocIJmilhZkQymRx4ID/Uxaqqquu67/uQaEIIMQyjaSf/7b91fud3Su9/P/vcc+Zhtu31u9h+zKj5zG999KkH//Tli6/+xXue/blPPfXGT6z4I3+8ksvlcuuv/N47BtSkGwRBo9GALyJZlpPJJExKYFlWEAQ4VYHa3fBXxlCCZB/7LxqNBkGwPbSHk9MgCBYXF2FQVbVaBfOqaRr8g4xWYQyb0UERln8ihCiKchzn/vttipIQUiiKfPDBf34Z1Gk0Gg3btkmSTCaTfQ3d2TtDXSwEYdDAGmo7Xbo06/tJhJq+X3vhBfIwNZ+GaEadl598Ov2jH7yTR+wdH/zA4tNPvDTUb4fwfAdOhcDzL5fLYZk9QqinQ2mcJUj6Ag6MEEK6rvd8CUcikVarlUqlYPQIhPawZMdxJk5hDLMjYfknGETP80RRXFpq/c//KX3mM8K3voUuXEAIoXa7XS6XoSsaWkLHv9PkVsAHHHY7KEi8/e0kRS0gxFNU8S1vQYZhjK3Ybh9m1N/MlWaysyRCiIjPz7Zy+TfE7uaTHzu/dPzM2z702WfrB27Tt20bzncQQhzHBUHAcVy9XidJkmVZKLPv6VAauQTJYIHQnqbpbh0HhBBk53VdP378eBAEYWgfjUZbrZYgCNiMTjogzoQQoigKSibhxFNRlPvvp37lV7jv+R7k+36tVgNVs2QymclkpkBdAUJ7lmVhD1+4gL7xDfWRRxK/+7vm8rIBQmijvsad6SsP091eEwQIfTdyZu7/5DeufXYx5q195ePv+/FfO/fa53/wNs0S3XH3I4888thjj4U/5vP5a9euRSKR1dVVqPKJx+OaprEsCzPoXde9fv16p9NRVTWdToMHDjeg0Wh013yFzwKlUmmCnlVVtVKpNBqNq1evhoUH6XQ6kUhUKhVRFBcXF1988UXbtjc2NuLxeKvVmpmZgWJSnufHcEX42b08S1EUHIl6nlev18HZ3NjYSKVSc3NzyWTSMAxd1w3DAF0eVVXDaTTjuaI9PgvTKy5fvhwEAXRhLS+nP/GJmVdeKZbL5WQyubGx4Xle+IVxaNd8W/pQWnKe+8SbPjH7lWc+foIMCp9/10MXf+P1zz7I9L7KfeHX7/uF2Je++sundokudlF4CmUQPc9rtVrRaLRSqVAUFY1GoXsH2smr1SrMooHfguk0o50+fytKBxhiE0r10DTd7WiHslWXL19utVqyLC8sLPA8X6lUFEUxTfNWU3eGzUEWO3EMY7HQpAcVoDDfLR6PQ20fZGAsyxIEAWZtgk5SdyPT8Di0O1utVqGhHvpWO53O66+/Xi6XM5nMwsICtH0P+xr6XWwfgQBzz7sfKn7p8dctZF/+sz9fe+g99zN+8aUnvrZioqC+erVkI4S88tcf/5vGyTOz+zNmoQ0FuaNYLFatVmGvtNvtsEMDwvnukiYochpDG4oO1v4BB0bQTN3dOw/Zedu2FxcXgyCAgnw4+kAIQR7/4Fe+Dw6y2Ilj4IuF7DzMdON5Htrnt7a2eJ4XRbHRaMAcTYRQ2Dh/ODYUHeKdhU6TMH7nOC4Wi4G4Kmg5H8IJab+L7ec8RXjHo5975zMfvPPUufc/8eY//PTDEnJf/vzPPPpkxffzf/XIQycy8/PZ+3/+yvv+62//0H6E6UIpWTgQjEQi7Xa72WyCgpbrutChsb1DaQyLnAYI6KjKsqxpWijeHGbneZ4/fvy4ZVmGYVSrVTgb7U53YiYIkO42TRMUj2CMUqvVUhQll8vFYrFEIgHTiiDsPTTh+sMERCQajUbYSg/1W7Ztb21tCYIwhiekfZ2NEqkf+A9/+/p/+O4D7MP/58bDCCG08O++/J1/t++LCKVkIU6HcdUkSeZyucXFRYqiwpongiCgv63718ewyGmAQNa+3W7DvO/wwwMW0zTNZDJZr9ehMkyWZd/3WZaF/x9P9xyzIyCT2Ol0IIkKX5mrq6vRaJQgCFmWwYaCYGiPwveUAVu32WxCs5YgCPAB39jYyGazuq5LkjRWe3v02b0eKdlwQEIul0ulUqA/Eobz2zuUpqbIaRfCWhCwpKFPCsVPCCE4GNV1vVQqcRwHQi3dU0kw40+z2bRtG9xMOML6zne+oyjK0tISlFUSBFGpVCDpOsU2FCFEEEQqlQol8miajsfjJEmCawW6q6O9wh5GL00CfhM0rpmmaVmWKIqVSoXjuEQi0S244DhOT/A+EUVOAzmYh9J6giC6LWlY/CQIwtzcHEmSlUoFnJrw8PTgf7ovjk5+CQ10saZptttt27bT6TTs+UKhEI/Hl5aW4FnwJwzDGJUNPeQ7G4lEuudBRCIRURRVVc3lcpDQH6p6Xr+LHaNZTI7j1Go1OA8iCEIQBLCnCCFZliVJqlQqkiT1tM+P+ZylAWJZlqZpyWTSdV04OxYEISxR8Dxva2trY2MjmUyqqqqqKsxtTiaTo75wzG0A2R3Q0+F5vlgsMgwDHlk4wI5hmHw+Dzd31Nd7SNTr9Vqttry8DOVf+Xy+Wq3W6/VsNptOpwmCGB//afRBPQDyChCZgr/ZE85vD949zxv/OUsDhOd5nucbjQbLsolEQtf1RqNBkiTE79DZFY/HIe4zTRM6R7E2/vgDRaBw2LexsQGiy4qiSJIEI5gYhimVSpIkTahu2f6IRCJhyh7qnDiOi0QixWIxCIJhO6R9MS5mtNFohANYTNME/bcwnN8xeB/nIqchEc4Co2k6mUxCFA+VMbZtw+zlIAjq9Xq73fZ9Hw5PRxJwYPaI67qlUglcTmigQAhBoTRCCIaMVatViqJSqdS05lF3hKIoVVXDLj5JkuDzDpN0WZYdnxPSsTCjzWaz1WqRJJlIJOAbBo78Qv3E7RIk289JjwiqqkINKQQ1sizXajVIzUEiIplMfvObjf/0n5yvfrUdHp6O+qoxt6RYLObz+Wg0Go1G4/G47/vgeYE4nqZpYCzS6fSEaj8eBFmWgyCA6j2aphVFAVmiZrMJ86nGxCEdvRnVdb1QKCiKAj1I4HVClhnC+R2D9x6p5nFmsHXLJEmqqqppGhTYC4IA3z2aprXbbUmSrl2L/OzPEr/9260f+IHmc88FoV8/wGvYBVx+3xf1en1tbW12dhYy0TDHLZzMWKvVQLB5HFLzI7mzPM9TFBV6naFDihCq1WrdTw2WYZbfD4dcLjc/Px+Px6EmlGVZgiAMwwjHIWwP3ieryGng+49hmEgkEgY7EODDdL8gCP7pnzjfTyPU8n3jmWdM0HU+tOInbEb3jmma165dU1U1FouBomj3FBBd13O5nCRJ42BD0YjuLEmSgiD4vg/q9xzHwVwyhBBI4g/JIZ0YMxoWPJ05cwaO/HzfB68TxEfi8ThN09s7lCaiyGnYCIIA6Sb4kSCIdDodi8XW19cfeIChKAUhkqLa586VUVfn6EgvGfMGbNteWVkRRVGWZc/zIGiAhCFFUTCrURRFmEQ/6osdJRzH9TikiqIEQQCFKGgMpMpRn11Mg2R73gPqH3VdbzabJ06cgN2zvUNp+znp0SQSidRqNU3Twm+UVCrluu7p08aXv+w//3z22LH1xUXCMJKw86BYarTXjAFs287n82A00c1+XxAwA30Zx3E8z1teXsb7HPTwQSYCZj6yLCuKommaUMADGZTR6gSOPqgHoLCDpulcLrewsAC7Z3vw7rrukSpy2h1VVSGugR8hxSQIwtmznZ/7OfYtb1Ha7fbm5ia6KZuPi5/GAdu2wVBKkgSdaXA44zhOEAS1Wo1l2WazubCwAEIzRxyGYUDaChJNoCYRiURc13UcB9Q2Rq4gMS5mFLLJm5ub0ACKbhG890g1TwTDa/8gSTIWi4XpJoSQIAiu62YymWKxOD8/73lerVaDmU6HU/yEu5h2BzTMCIIgSdKyLEVReJ4H0RnQFY1EIo1GAxL3w7jmfTPCOwtxvWVZ8H0D5x7wDwVyE5qmDXZj97vYsTCjnueVSiXXdXmeD2VHtgfvEzp9fqj7j2GYaDQapps4jvN9n6bpTCZTr9cTiUSz2SwWi57nHU7xEzajuwA2FMS6aJoG4frNzc1Op9Nut5eWlsAPhZzhkK5534zwzrIs67puqO1EkqSiKKIo+r5v2zZFUaDRM8C/OHlm1HXdtbU1juM4jlNVNRw+0xO8T/T0+aESdjfBj4IgmKapqqooirAbcrkcOKSQxxjbgTbTjeM4INBVrVahFDqbzebzec/zoGLUtm1d17uT0RgA1HZkWQ7z8lBOLstyuVyGSurRTmAefaYeOjRAmiT0NLcXOYEDfwQrkPdC2N2EbppRSF8wDHPfffcVCoUbN27A9/Z4yjVOPdDrHIlEOp2OYRigCbm5uen7/sLCQrvdhvnsMD8cH/33QFEUSZKe54XaTiRJRqPRMIOiKEqtVut0OqO6wpGZ0SAIwIwKggAKzaGnub3IaULD+cMk7G6CaDH89lZV9b777rt8+fL6+jrkNMen9+Po0Gg0IGgoFAogUGTbNk3Ti4uLtVrNsqxoNApdFRN39H847OiQsizLcVylUoE0XbVaHdXljT6o73Q6rut2e5o9RU6O40x0OH84dcthd5Pv+1AOAqXLhmGcOXMmFosVi8VcLuf7/lDlGnH5/XYgSohEIltbW4ZhbG5uptNphmHm5uZM0yyXy9lsNrwpY+srjPbOghkNtzS6mV9FCFEUpWlaKpXa2toa1OyciSm/DxFFkSTJcPf0FDmF0dDkhvOHtv+gqk7XdZ7nO52O53nw7Y0QOn/+fK1WcxwHhFyH55BiM9oDSOiqqtpoNK5cueK67pkzZ3ieB8Gd9fX1bDbLcdz4H/2P9s5Clsn3fdjScL6vKIogCCDdAmkVmJB6cCbPjHaH89uLnBqNhiAIk9L3OXJgkwVBAA2g8O0N2YxoNFoul2E2A8dx49D7MfU4jqNpGoxfv3btWiwWi8VicFrFMMzm5mZY2ISP/neHIAj4+g+3NEIISh1gnHi9Xs9kMvl83nXdw7+80ZvRVCoV7p6eIieIhvCJ+94Jo56wATQ8Tjp79ix0PTEMA+o4OGU/VCCQEkWx2WzW63VQYs5kMrDJQZcLCpvGPJwfE8JBjd0npCBCSpIkVJKxLDsoh7QvRm9GQ3o6lMJoaLRXNXGEDik0gIa6zslkMswOkyTpui5O2Q+VRqMBJY3gPQVBMDMzA7fGsqywsGnSj/4PDfCubNsOtzRCiCTJubm5SqUCyfqFhYWNjY3Dd0hHX/AU0t2hZNs2zKkfbavsQDjkuuUw6gkbQMEzdRzn5MmTlmVtbW3BWMB6vT7wE1Jcfg9AYxKMkm82m5ZlRSIRcEJ5no/FYlDYNEFH/+NwZ7sd0lBtR1VVmqZhfjAMDghn4e2bSZ3FZBiGZVnQwgTNHtM6hvsQ8H2/XC4nEglQwk+lUjDIPh6Pv/76641G48SJE6lUam1tDUafj/p6pw3LsqrVKsiQ27Z9+fJlQRBmZ2cLhcLi4qKiKOCoggNF0/QRlyvbO7CxU6kUSZKmaYajxjY3N/P5/NzcHEKIpum1tbX777//MOvGBuXrBZWnH333XafPnr7r4U8+VerTMkOACXENtqEHhyRJWZabzWb36FCCIDqdzsLCAk3ThULBdd25ubkB1ohgABgyGARBIpGgKGp9fR0awEul0vz8vKIo4eCGsBBq1Jc8MZAkCYkm9Ea1nZmZmU6nA4kmaOQ5uEPa34UN5m3MZ37ro089+KcvX3z1L97z7M996qn+ssAQzoO6KLahAwHyFYZhhA2gIE0iSdLMzAxUL8LE2kKhMOqLnSqq1Wqn0wGt5WKxqOt62F0CdY4wuKHT6eCj/30QxvUIIUVRQG0HTki3trZisVilUgm7bA/tqgZjRp2Xn3w6/aMfvJNH7B0f/MDi00+8tHcPB9KUgiBomoZt6ACB0fZBEMBRKXim8NFNpVKFQqHVas3NzVmWNdp+5GnCMAwop4eBa1tbW2AxRVFMpVLoZlk0lJ1Nx9H/IRMmmuD/Q7WdbDZbqVRCfSxQMDi0qxrMXfQ3c6WZ7CyJECLi87OtXH7vSuu6rpMkWS6XgyBIJpPTZ0NHVbcM2g3g6UN5E3imgiCoqsowDAwdmZmZqdfrgxLIOcrl97Zth+X0ruvm83mEkOu6kUgkFovRNA1l0RB7xmIxhmFGdOH7YXzubI9DCsEWy7KpVKpYLIL4C6Ts913S1+9iB5Uf7E4YBQFCtx011y1o/7GPfewP/uAPwm/mUqnUvYx0Ot2dOJu4Z+HxkVyVYRhXrlyBJpnV1dXl5WVBEBzHYVl2bm7uxRdfhK/ucrm8trZ2+vTpTCZzwL9bKpXS6fQY3oVhPAuLhWfz+Xy5XIZ5Sp1OBwSYBUGAmAA8I8MwOp1OIpE4depU6C6M1Yp2eTZc7MivCsobYrHY7OxsOp2GYAsKSJ999tk77rijVCqlUqlarba0tBQem/T1d1GfyfrBZOqd5z7xpk/MfuWZj58gg8Ln3/XQxd94/bMP7vJVuz1TP8W89tpr58+fH9Vfd123Wq3G4/FarQZxZblcFkXRsqxCoeA4zt13321ZVrvdZhjm4Fn70S72kAkX6zhOtVr1PC+VSkE4f/nyZd/3U6kUwzDpdBqmJRcKBWi8mcSQa6zubKPRCOenhul7hNArr7ySSCRomvY8z7btdrt955137mN+cL+LHUxQz9zz7oeKX3r8dQvZl//sz9cees/9kxSuTDU0TYuiaBgGfGmHoxZ935+fnzdNc3NzU5ZlgiDCGWGYvgDnCHQhWJb1PC+Xy+m6nslkYMwn2NDNzU3LsibUho4b3XF9WChNkuTCwgLkTh3HgfaTw9nSAzrhFt7x6Ofe+cwH7zx17v1PvPkPP/0wbmsbI6BWmWVZaKGTZRnakGEAeqFQgGIROK0fSUvyRNNoNFiWhbYxhFCxWCwUCidOnIDMkiAIrVarWCy22+1jx45hGzoQuhNNqKs9FERINU3jOM627Wg0CifUw2ZQiUIi9QP/4W9fX7l67Tt/99vvmsXpxy76OmQZBjAFDKpHDcOAb+8gCGzbnpmZoWkaZvlaliVJEujk75uRL/YwSafTUPuJbg4IMk3z6tWrs7OzQRDAgCDInQqCMDMzM9E2dNzu7HaH1DAMGJ9TLBZ5ng+CQFXV/ck597tYbPCGzjjsP5DIgs85OKSdTgda6FKpVKVSgbNRyPIdJA4ah8UeGhA2ep4H9aGbm5tf/epXHcehKCqXy6VSKVVV0+k0/Gt3y5BPIuN2ZwVBgJEB8GNYjgIOqWEYFEWBLtTW1la/b47NKGZnotEonJCGAnqgkRGPxxVFWVtb43neMAzILGN5/FsBXryu66VS6dq1axRFGYaRTqdnZ2cNw1BV9e6771YUZXZ2NpPJcBxHEATEAbhEdLB0dzShrhNSjuPS6XSlUoFzahAsH/ZR1RhJk2CGCpTfo64ZLZ7neZ7HsiwIYkIZs+d5oXwOpgfTNEulEnTOeJ4H9TSyLMdisUajsbW1NT8/z3FctVoNS8d83wd1mNFe+VTSHdejrhNSUIExTZNhGIqiDmG+yOhnMWEODUVRTNMURREE9CDSh0FAiUQil8sxDNOtVTrq6x0j4KxT1/VEIpFIJEiSZFlWkiRQGTdN88qVK/Pz84IgNBqNRCIRHoNiV3R49CSaQgE9aDCpVCqiKHqeF4/H8/n8UNV18d0dOj1lvSOEoihRFCHAARcpCIJ2uy2KYiQS8X2/0Wg4juN5Hpz67eNPjM9iB4jrupVKxff9ZDIJNYm6rl+6FP31Xy++8gpL0/Tq6qqiKDzP0zRtGMbMzAz8oud5U+OKjued3e6QgiZkNBrleT7U3rQsK5xAvhf6XSw2o0NnrPYf7DM4IYWJ1tB1I8tyMpkslUokScIRaiif0xdjtdiBAP0LsiyDdBBCqNFoXLwoP/gg8ZnPEO96l/JXf1WAMzhBEEql0uzsbOh7wpzw6XBFx/PO9iSaoChF0zTwDBqNBsdxCKFoNJrL5fZ+4o/NKGY3YJ+ZpglVolB432q1ZFkWRRHO9SDjCYpQR6fZ7FaARxNOA4MyhhdflHy/hZDo+9rXvtaIRqMEQYDkYDweh1eGgnijuvKjQPdoJiDUhJQkSZKkarUKEjC6rh+wmG+3yxjS+2LGFthnNE1DNAQybtD1AVLtIP8aapWO+npHSc+UpHB+51vfalOUjRBNUaW3vU2mKEqSpHK53C1KAIJ4++hExPRF96xQAAT0oPfBsiyKoliWFQRheOp52IweRcB08jzf7ZAKggChUKVSgZqnUD5n1Nc7GrYPPYYPJ03Td9yh/d3fCT/9069+6UvcvfeS8C8pSVLoe/bMCccMj+0OKQjowcArRVEqlUoikeA4TtO0/Z343/4ahvGme+HoFDyNW90y6ip+gk97LBar1+tQuqwoimVZMKGBoiie57uP8G/LGC523/QMPQ6DdPhHO3fO/OmfJu67j4KPcbVahSEWaKc54VPAON/Z7lmhQKgJCZpbvu9LkgRDrffiFvS72JEN0jo6h27juf/gW5rjOBAZK5VK8D+yLMfj8Xq9DqMr4XRJkqQ9Bqfjudh9sH3oMQTpCKFWq8UwTL1eP3bsGOTlS6VSt+ZIz5zw6WCc72zYDBp+dVEUBZqQFEVFo9FarZZIJAzDqNfrmqbddugA7mLC7AnYZwghGPkbj8crlQpCSFEUONFrNBrQpMwwzKBEnScF3/d7wvkwSAcloUajIUlSu92WZdn3fcuyQKgNIeR5XveccMzhsN0hhUc4joOuUNDPRghtbW0N/IQUm9GjC/R6QwNyPB6HWB6yJclkEsSGPc+TJOmoCehBzXwYzodBuu/7kI4LXxmNRovFYjqdDudQwvnpYY6lxKAuh7TnEd/3Pc9TVVXTNJ7n4/F4tVod+AkpNqNHF9hnUB/a7ZDKsszzvCzL1WoVmpShgmTU13tIQPtmdzgfBukw2wqySSAeqmkahI3wSlzkNEJ2dEhBE5IkSZqmoRwlCIKBO6TYjA6d8axbBrod0mQy2Ww2HccB85pIJDqdTqlUgi77PTqk47zYPQKuaOhOggeqKIrv+61WC2obbNvmeb5SqRiGAYOU4cVTXOQ0/nc2bAbtfiTUhIxEIp1OB0Y83NYhnZjy+6OTqR/n/dftkBIEEY1GQcRBlmUYd1Eul6EWynGcvcjkjPNi98KOrihYVV3X4dCDJEloT7hx40Y4ygJNe5HTRNzZ7XIQ4CiA/Cg08sL33Obm5i4O6cSYUSxNMibAPuM4rtVqwSAwz/PAvMZiMYIgCoUC1IschRPS7a4oWFVQCXJdV5Ik13VBmgAU7+HFU1nkNHGEzaDhI6EEj+u6PM97nkdRFEwPHeAJKQ7qjzqhQ2rbNkmSMP4XIQRKegsLC8ViEZqULcua7lL8XVzRZrMJuXvf9wmCgPYYmL8UvnL6ipwmke1yEHBCKoqi7/ugmwc9FANsasJmFPPdfaZpWo9DqiiKLMurq6swCWO6e0N3cUULhQLUcgdBIIoinIHAPCuEi5zGjB45CDgzdV2XugnDMIqiNBqNQTmk2IwOnXGuWwbCfUYQBEmS4Hyhm+b1xIkT5XK5Xq9vz4RuZ/wXeyu26yuHVrVUKtm2nUwmbdsGOQLwyhcXF+GVR6HIaYLu7HY5iDArCLaVpmkIHdbX13fcz7j8fuyYiP0X7jPDMGKxmKZpEOND+eT8/Pzly5fBId39hHQiFrsjIDIQitqFVtVxnI2NjZmZGTgMlWW53W7Dvwx0fx6RIqfJurPQDBpW+IbCZjzPEwQBxzIURbVarVqttv3XsRnF7IduAb0gCCiKgngHPNATJ060222YaH9bh3QSCYLAMIztp6IkSebzeZZl4WPZnfANXzzFRU6TCxTzglIEPBIKmyGEgiDgOI7jOFEUb9y4cfD9jAueMP9MuM9c12UYxnEc0zTB7XIcZ3l5+cqVK67r3tYhnURgbk/YthSeinY6nUKhcPz4cZgDCK5o6MugaS9ymmh4nud5vlv0HoTNQCACxi+7rut5XqFQOODfwgVPmO8C+wxa6CDkgTDWNM35+XmEUC6Xm0qHFD5d4Y/hqejKyko8HidJ0rKsWCwGUaFt2/BiXOQ05sCtCfNIcGYKwRZBEAzDCILA8/yNGzcO2KTXlxkNKk8/+u67Tp89fdfDn3yq1K3QZD/90aySzGaz2eyxu3/p7/EwtC4mom4ZCAX0SJK0bZumaVDiEATBtu1Tp05dv3690+ns4pBO0GJDOp0ORHnwY3gqqmlarVZbWFioVCqyLLMsC3XdoSu6urp6dIqcJvHOIoRUVQWxCPgRDmdgChlCaGZmxjAMlmVXV1fDX7Fte5jl9+Yzv/XRpx7805cvvvoX73n25z711Bs/SOKP/PFKLpfLrb/ye+84Evtqr0zW/oMTUkVROp0OKOT7vg8e6MzMDMuya2tr2/XGQyZr7nWxHwAAHr9JREFUscCOp6IEQVy9ehWk8BBC8Xi82WxC8SxkkzzP29jYODpFTpN4ZxFCJElCyhQsKUVRsiyHauVBEMzOznqeVyqVwGm1bbterw/RjDovP/l0+kc/eCeP2Ds++IHFp594ybn9L2EmDBDQgz76ZrMZSsNBwfkdd9yRy+Xa7TbHcdOhnue6ruM44eFmeCoK6hWqquq6nkwmIecL/UuQzW+1WmHdKGacgT56XdcbjUYQBOFXJoT2kUhEFEWE0OrqarvdrtfrsVis3z/Rhxn1N3OlmewsiRAi4vOzrVz+DbG7+eTHzi8dP/O2D3322fpRUWSeTsDZjMViMJEJTkLhwWQyKcvy9evXBUHoSxV/bAFXNMyzgyvqed7a2tri4iKoq8E8ejjZAFcUipzg44cZf2iaTiaTJElWKhXXdeHbUZKkIAg8z0un0zzPFwqFq1evxmKxfZzS9KV+3y1YHwQIfbfEg7n/k9+49tnFmLf2lY+/78d/7dxrn//B2+yw7gKRRx555LHHHgt/LJVK3U51Op3uLuPCzw77WfA98/n85uZmPp+HLqbl5WUwnSdOnHj55Zd5ni8Wi7lcjmGYcbjm/T2bTCZDxeVSqbS1tQXOSD6fF0WRIAjf90E1vdlsXr58WRRFeAeaphcXF8N3G58VDe9Z1MX4XNXeny2Xy6VSqdPpfOc734G2epiaUy6XO51Oq9W6dOlSqVSC8eOoT4hdh3l43/mD977/c1dd5t5f/evHP7z5q2/6xOxXnvn4CTIofP5dD138jdc/+yDT+yvuC79+3y/EvvTVXz61S7QDpxL9XuuEUiqVenbh+OP7frlcjkaj165dO3XqVKPRSCaTBEGUy+V4PP7tb3+bpunl5WWoGun+xclabLvd7nQ6YRAHp2O+76+srGQyGd/3OY6LxWKVSiUUGEUIwaCqZDI5WYs9IFOzWNDNs217a2sL9LpAHoGm6YsXL546dWp5eblWq/W12N2DeurcLz556dq1axe/+G8WSeaedz9U/NLjr1vIvvxnf7720HvuZ/ziS098bcVEQX31aslGCHnlrz/+N42TZ2bxiVHIJG6+MDsPRgRS8/CgaZrLy8vNZrPVanU6nZ5E02Qt1jTNnlNRjuPy+Tyoi8LBGYTz7XYbqme6i5wma7EHZGoWSxAETAxdWlqSJGlhYSGdTtM0TRBEJpNZX1+vVqv9LrafTL3wjkc/985nPnjnqXPvf+LNf/jphyXkvvz5n3n0yYrv5//qkYdOZObns/f//JX3/dff/qGjkr6cYuAwNJFINBqNnhPSSCSSSCSKxaLneZObaPI8z3XdsM4JTkUrlQpBECzL0jQNR59Q5BQWNmElp6kBbnGr1VJVFRwFKI5eW1vr961GE1wfqaB+coEgF2bWw5yMSCQSRr6XL1+ORCKqqoaDhScLXddBfRndPMSAPANFUYqigGp1vV4HnYFkMklRlOd5lUoF/n/Ul48ZAEEQlMtlVVUJgtjY2Gg0GqlU6uLFiw8//HBf74N76jG3BHzPaDQKqu/dDqkkSaqqdjqder3eLTY+QXRH9OBjVioVmqZJkoS+T1gXFDmB3TwKSk5HilDmmWGYY8eOIYQ0TdvaSvX7PtiMDp3u7OFkAdbEsixFUer1uiAI0FoOJ6QzMzMURdm2DYPwgElZLNSBQpkBnIpaloUQgpKmMNzbXuTUreQ0KYsdCNO62FDmmabpc+fOvfCC9ZM/OTlDRI6ONMlE7z+oVYapigghSHGGDim0JOfz+dAhnZTFgnQA/D/M+4TxqCCkFo1GwT+Fhi4oztuu5DQpix0IU7zYUOaZ5/kbNxZ8X5oYM4qlSSYFVVU9z6NpGrwzTdNA5hlODEEUKp/Pj/oy+8OyLDCjMO/Ttm04tRAEAdoE2+02CD7By7CS0xTTLfP8znfKFBXt9x1wUI+5DZByCYIA9EogAgplnimKUlW1XC5P0HwRy7JomoYjTl3XwdE2TVMURY7jwp6lHYucMFNJKPP8trcJ/+t/9f3r2Ixibg/E7zDSDgT0EEKKokC/OSRhNjc39zKBeRwIk0sw7xMGJkNnfTQahTNQhIucjhKhzHMQBG97m3T7X3gj2IwOnemoW47FYmAlO50OSZKhDBLDMDAgU9f1ZrM5/ov1fR/8aIRQs9mECVTtdptl2VgsRtM0KDnBqShCyHXdW42rG//FDpCpX2wo8yyK4jDL7zH7Yjr2H03Tc3NzpVIJRJ3b7bbneZFIBE5IXddlWVbTtG7FufHEsiyWZcEDLRaLIHFv2/bMzAxUIKA3Fjk1m01ZlncscpqOO7tHjsJi4dxG1/WJMaNHJ1M/NciyLMtyq9UKiyjhbB6662iaNk2z1WqFc8TGkzCiL5VKDMN0Oh2Y4qeqKpyBdhc5gdjo+H83YAYFyDz3+1t9KTwNEtzFNInMzs6ura0JghAEQbvdFkVRUZRKpZJIJHK5nOd5QRDU63UQJRv1xe5A2ADqOE6lUonH4zAYMpPJoJtnoGGRk+u6uq4nEolRXzXm8ACZ575/axiXgplWOI5TVRVqlYMg0DQtlHmORqMkSbZaLZqmu+eIjRXgihIEkc/no9ForVbzfT+bzTIM43leT5EThPPhnDvMEQGaMvoCm9GhM2V1y2BZPM+DQksofjJNU1VVmqY3Nzdh2l04R2ysADPaarUsy7Jt23GcaDQKWn89RU57Ceen7M7uDl7sLmAzOnSmbP+BpwbK4RDCw8Bh27aTySQUkMKZ47iJP4WHtsViEQSYE4lELBajKKqnyMnzPF3XQY1lF6bszu4OXuwuYDOK6Q+CICRJ8jxPkiSQvIUBYXCkyPM8qBrDZM2xSjfBCKlqtUrTdLFYTKVSUGyPEOopcmo0Gjicx+wdbEYxfRMOyBRFMQiCSqXi+z7U5ycSCRga2m63oZ55xwGiI8GyLNCZhoA9mUzCqOSeIiecncf0Cy54wvQNSZI8z7fbbVVVYbpGtVoFh1QQhEgkAikmz/OgnnnU14sQQjCsnCAIy7KKxeLp06c7nQ4cTXQXOe0xnMdgusEFT0NnKuuWJUmqVquSJIH7CWZUEARFUVKp1MrKCkIIqoU0TdM0beQN6Y1GgyAIkiRv3Lhx8uRJhBC4oq1Wq7vIqa9wfirv7K3Ai90FHNQPnancfzRNw2QRhmHm5+eDIMjn8y+/zP/Jn8gvv8zLslwqlSRJajaboO482nQTiKKm0+lLly6pqprNZkHor6fIqd9wfirv7K3Ai90FbEYx+0SSJLA7LMsuLy9/61vNhx4qffrT8kMPtdbX05ZlhcpJqqpqmjYqkXzf9zc3NxOJxNbWlmEY586dA0EAcEXDIicczmP2DTajmH3CcRxBEJ1OByEkCEIud9L3cwjZvo+ef54Eh1SWZV3XCYKIxWKjGjcCh7Mcx128ePHOO++EEF6SpJ4iJ5ydx+wbbEYx+wfEm+H/3/WuGEXNI3SNopj772/HYjHbtjVNk2W52WyCftLhW1JN06Ad4OrVq+l0OpPJhK5os9kELRJFUXB2HnMQsBkdOlNctywIguM4IKB34QL6+tfnPvYx9r/9t+v/4l/QQRCAVD680jCMw7ekkJ23bVvXdQjnYeySJElwVgvZ+SAI9hfOT/Gd3Q5e7C7ggqehM8X7D0rxQ4f0rW+lP/Qh9/77+VKp5LouBM7NZhPUSB3HCS3pIWScHMepVque52ma1mw2T506JYoiuKLQ+w86VZAH2184P8V3djt4sbuAC54wB0IUxXK5DIPdEUIcx2UymUKhANaTJEnXdQ3DgFL8ZDLJsmwikajX651OJxqNdk+IGyCQVgqCAEynoiiZTAZc0WQyqes6zDRNJBI4nMccnAF5o96lL/zrB87OiNy9n37VG8xbYiYCmLfcPYgpEonAqDtN02iaNgzD87zuUnyapkFJr1KpDGPuSBAEGxsbnuelUql6vU6S5Pz8PEVR4IqCxJ/nebIs+76Ps/OYgzMgM0okLnzk97/8l79yH85zHj2gfwkyOUA8HlcUheM4wzDa7TYId4qiiG4qPxEEEYlEZFmuVqvtdnuAF+O67urqqu/78/PzrVbLNM1oNBqNRsNT0WazSRAERVEMw9TrdRgcMsALwBxBBmRGydRdD1w4EeeGEqFNOFNftwwOKUTHsFiSJFOpFMuyPM+Lonj9+nWYcdRTii8IAoTVjUZjIIc8tm0XCgWaphcWFhqNhuu6vu+n0+nQFYVqVkh/gQ09yKC6qb+z3eDF7gLO1A+do7D/Qoc0XCzDMLOzs3D0GY1Gc7mcbdvbS/EHGODbtl0ul0mSnJub0zSNZdlWq6UoiiRJrutCv7+mab7v8zzfarUOaEPR0bizIXixuzCycKY7t/DII4889thj4Y+lUqk7U5ZOp7tXhZ8dz2fBIYXe+fBZx3HW1tYgxrcsy/O82dlZ13WfffbZSCQCMuPwztCYDz1FlUql36uybbtWq9VqNdu2YZwJTDS55557KIqClv/r16/ncjme513XjUQiBEGM578kfnbcnr0txH6DKe87f/De93/uqsvc+6t//fi/WSQRQt6lzzzwE/YfPfepu3aYovjGv0rs++9ixhTf98vlcjKZ7BmiaVnWt7/9bVD2ZBiG5/m5uTnbtrfH1JDwAbdRluXbTnMKgsC+CcxJ5jiO4zhN0wRBKJVKQRAsLy+bpmlZFs/z5XIZ0kqKooD4NAYzEPbtjVLnfvHJS784yEvBTDThCWmPmBPP8+fOnXvxxRctyzp16lSlUuF5PhaLQQFptyUlSRLyTrqul8tlmqbZm4SxS7fpdBwHRpOCwJ1hGFAMAEp9pmkeO3YMSutVVS0Wi/CHBEHANhQzWAbkFfr5L3zggU99o1apB2oq/n2/9fUvfiS7iy9xpLzRUqnUV4Awufi+f/HixTNnzmyf6l6r1Z5//vlYLHb27NmNjY3jx4/Lsgw+6Y6+Z4+5DHcLQRBgOrvNq2mamqYpigInnq1Wq9lskiR5/PjxarXK87ymaZZlQSAfj8cHtd6jc2cRXuyuDOhslJz/qb+4/lODea9p4+jsP5IkdV1vtVowJK6beDx+3333/cM//IMoiseOHbtx4wZY0lQqZRhGuVzmeV6W5dD+hhH67n8RRJc7nU5oQx3HcRyn3W6fOnUKigds2242m5lMxrKsZDI5wPUenTuL8GJ3BWfqMYNEFEVwIbc/NTMzc+bMma2trVKpNDMzc+PGDV3XSZIEpWdI1jebze76091xXRfml0iSBDYU7Liu68lkkqZpmDufz+dTqZRpmvCCgS4Xg0EIm1HMYCEIQlGUW01XXlpaSiQStVoNrN7q6iq0P4XGlCCISqUCZUk7vkMQBJ1Op9VqVatVkN8nSdIwjEQiwTAMSNy7rptKpRqNBsuyuVwO0krwgiGuHHOEwdIkmAEjCAJBEDuKj9A0ffz4cajfdF1XluWVlZVQ2QRSTKlUCiFULper1SoE7L7vh6azWCyC5ZVlOR6PG4bh+z74ntCepGlaOp2GMfSVSsXzPFVV4QWH+Y+AOVJgaZKhc3ROlNDNxSqK0mg0eJ7frjwSi8VM09R13bZtnuc5jnvttdfuuusuaBVFN42poihwOADSUGFGHtJKYWlUJBKBtLtpmo7jwLQlUIxut9vtdnt5eXl4Y6CO4J09IvS72NFkzI9Upv5o0mg0KIqCse89GIYBc+4kSQL55FqtdurUqXg8vj3F3wOMR263290pKcj4y7JcLpdVVTVNE0qpl5eXd7wADGawYDOKGQqe51UqlXg8vuOJZLVaRQgVi8WZmRnf96vVqmmaqVRKEITda0Vd1+0pkAIbCj2mnU6HoqjV1dVkMjkzM4OlmzCHAzajmGFhWZamadAy3/OU67pQ0bmxsZHNZn3fz+fzgiBEo1GWZV3XvW2tKBB2Q0H4X6vVyuXy4uJiJBL5/9u787AmzjwO4G9ODiHcgkY55BIphwceuCBKRat41KNqn6faql2q260tW7uuVFG39UJbLXV7eFUfW4+t3drWarXiWRBrVfCKWjUIWAGBAIKQZObdP2Y3jRDQdEgCw/fzF8+8YWbeZ+CbOd55f604PhSgZYhRsCDuUZLJRKutra2vr3dwcFCr1Z6ennZ2dgUFBXZ2dlKp1NnZ2d3d/bEPhQwZmptLDh4sCQi4Gx7O+vr6ymQyk9kNYCF4Um9xxlMeCF6jznKPd0yOf+ImnKeUBgYGajSaBw8eBAcHOzk5yWSy2tpalUpVXFzc3JxPLMtWV1dXVFQ4OjoeO1aVkJC/fPm9lBQ7jSZAIpFYbXxoRz6ywmZuZ20Wo5RSxKjwNO1sozlGjbm4uHDll/39/bnLfCcnJ+61+qCgILFYrFKpCgsLjQfzc7dc1Wp1ZWWlXq+/d+/e/v23WNaHkACWdc3NJVwQW7aT/9fBj6yAmdtZDKYDyxKLxa6urhUVFVKptFHASaVSwwQlXbp0KS8vr6+v55q4p0ZeXl4lJSUqlcowGl8kEjk4OBiqPIlEosmTozZsEDNMkUTiEBsrQVUlsD7EKFicTCYzlLRrdLltqBXq5ubGlU6SSCQSiaSmpubmzZsymYx7u6nRr0ilUq1WKxKJvL29fX3J11+X5ubKYmNFQ4YoLFQjD6AFiFGwBnt7e61Wq9Fomj5uMk5ST09P7s0lHx8frphSQ0ODcbmkRuNGGYYpLS2NjiaxsZ242Uys3jMAxKjl4fUPjkKhqKioqK6ubvpakSFJFQqFQqHgZsLn5huVyWSGuUf1ej03bpSbykSr1XL3sFxdXWtra1t39qYngSMrVHiLCdoubqS9k5OTyYmT9Xp9ZWUldweAEGIYct/Q0KDVahmGUSgUbm5uDMNwy7nHVlyG8i+sBPCH2SxGCSHp6ekd5GE9GOh0uoqKiuZSj1JaVVWl0+ma1j02vEcvlUq5e6NcrXlkKNgczkbB2kwWYjLGzWZvsoiIcb0muVxeVVWFDAWbQ4yCDTw2SVsoIuLo6Ojo6FhXV8fNxIwMBZtDjFocqi+Y9NgkNcnkDE+2giMrVCgi0ubg9Q+TDE/nW5jr3hj3AmhZWRml1MvLy8XFxbYZSnBkhQtvMUG7IZfLmytpZ8z4DNTT09Pm6QnQCKYmAVtqVIXJZOGQNnUGCtAUioiA7T1J4RBb7yNAs3Bv1OK2bdtm612wHj6d5d7mdHZ29vDw8PHx8fDwcHZ2trOza7MZiiMrVOZ21pwn5oxqy6yXMw78cqvrgrNnF0cYX11ps+b2GLeHuNgTInafsu3s2qEtPn3tUE/q0VmhQmeFytzOmnNRL/KImfXevj9/P2OeqVbHcRsv7ngWU0MAQAdjzkW92CsiLibQ3c5yl1jNPXSy6HJLb7Q57bpTbaqzzS0XZGdxZK2wUXOZfaLOqFbGvaD95HSTi/rAyd/aKyQSZfycjPWvDXJrMWubO2e2yfI2tTOttbxN7YytlrepnWmt5W1qZ2y13FY70yxqJv3VFYP6Lc3XP7qU1RSpK7SUPlTvmxMRkHKotuWVmLF/AABWZ1YqtnxvlLnyfvKEDTf0st4LDu6e7df8HQCRi9KPEEJkfqNmJr/9+oViZnhwCwP8kKQAIBgtx6ik1xsHVG80386WnDt4zWVofI/627/qlMGd5UzZyd0/aIKW+GCQNAB0EOY8YmKLt0zq4Zew8lz+2uF+ARM3F7H6vI9Tlhy4z7LF+99MCOyqVHbrO+/6mE0rRjtbbIcBANqWDjQWDADAEvAWEwAAL4hRAABeEKMAALwgRgEAeEGMAgDwghgFAOAFMQoAwIuVY5Tez1oyMiI0LDQiKe1wqaBHrLIFX6WOiPDvplT6RU/KyK4UdGf/R3cl409O9kM+uPP4CnXtG1t69J1nowJ8fbsHDVt1Tm/r3bEkWvPz+in9QoJ7BgdFjX3neLlA/44Z1ZYX48K8He16L7vIcIvMCCvrxujDY0vnHo7/Iu/qxS+fyfnr4sO1Vt26lYm9E5ccuFpYXHB6iWJjyhph/7MRQghza/Oio92G+gr+RWC28LPZL5+M236x4E7B+W3PBwi5w+zdz9PWyRdmX1NdP/Ou59a0rTeF+RXJTab8n7/3Mbweb05YWTVGdXkHsjpPnBpuT+QhU5/zy/r+nM6am7cucffBowd1cxARqU9cXEj53XvC/PMzYO/ufPvrqPSUECGHCiGEELZg77YrIxf8JcpJRMTO3bu3PClkOycSicXsw9p6hjANtQ0OXboqhNnbJpMpmxVWVo1R9reiUu9uPmJCiMhd6VNTVKy15uZtRKf6bPuNpPGDZLbeEUui979dtMXnH6m9O0D5A/2vV297PNg/PS4yNGzw9MwzVQK9ziWEECLq+sLaNJIeruzWNfSt+vkrp3QWZow2YVZYWfveKH30Z8EfElqRtWDGjtD3Vo11F3Jfq7OWvU/mpcU7CbmTBizbkJ8vfnXfhctHF9p/9NKKnwV8UUUrT27c02lZXlFR8eXVjhlzPr4l8Kuq35kRVlaNUXGX7t4lRb+xhBBaXnxPoewq6DM0QmrPrXlu3u2U3R+M9hZ0vujVp89ePzivb4B/8MRNN3OWDpnwyW3h/rdJlL7d/RMnDHQXS32Gjx+ouXSlRrjno9pTn+9yThrnLyey7mPH9jr/U56AvzOMmRVWVo1RWdTIhJK9uy/XE+21XXsKEp7pK+QY1d7YMn3GgcSt22eFtFgmVQCkkWnZd4vVarX6xt7ZgYPSj3+VEiDcoXSS0JFJDqePXKkjtCr3yC/OoSHOwv2SlHRReub/eKSEIWxp1qE8ZZCgH6gZMS+szJornze29PDbw3v1CAoMS1xw8DfGuhu3roYfX+kidfRQcnrM/KrG1ntkDdqfUnsOXV8g6CNLKavJzhgfFRjg7//UmHeO32dtvT+WxJYeWZoc7uvr7+sXMW75iXKBdpYp2jwxQOntYidXeCv9J2wqZMwJK8w3CgDAi3AvvQAArAIxCgDAC2IUAIAXxCgAAC+IUQAAXhCjAAC8IEYBAHhBjAIA8IIYBQDgBTEKAMALYhQAgBfEKAAALzaMUfbm2oTE9WoT81LWnN2x8bhgC949ce9o6abR/RZfEHwNJ4B2ri2ejdKaszs2HS8R6Ly/T9o7yrCuYzI2zw6WPuZjjFC/bwDaCavHKK3KXpUcHhTeN35a5vk6QgjR5a5OHhzTJyqsZ8y0j/LqaOV3KzN/Vm2dmZiQtOjIw0at1t7dx2ALP3z6qTGzpk+aNHZI7Nh3T1VSQmvOZk6LCQ3tGRIxMu3gPZbQssNpwyPDo/v2ier/yt4b3xr3jtRf+3zOsOiIiKfCBz6/4fwDwhZ++HTkhLkvTRg76tWdl/bNn7Xphp40Xafxx3YVC/QLB6C9aGEu0pwcuno1zclpzVbduUXR0aknNCxbnbMgqlPcutsMW11eoaWU0gdnFsaO3XyPZYs/GtF/ab6eUkppk9aWZk+1OuZOZoIidvXVBkq119YO7bvw7MPzi3tHvnaknKV1F1cnBL34jaZsc3LkWzkNlFL2YU2Nzrh3+iurho1YfamWUlqXtyxuyJrr2juZCS5xa69pKaVsycZRfRed11Fd43VWMUYfAwDbavaKMTeXDB5MWJaIxSQ7mwwY0CqttPR0LjPin4NcRCLSb+q4nrmEEKYyZ938NYeLGLmk/FZZspoh3Y3W1bTVu+WrXGuTBCUOD5ITQgKThkpTc/K7ntYmLY1zFxHSa9ok/2dOqTpNGdhpZepsyZTRo8Yl/8mfVBt+lZadOHJBVTF31H4RIeShpjbhLkuIJGhYYg/jggW0NKfROq/qo5t+DABso9lIOnWKsCwhhLAsOXWqcVDyaZXKuI2KpHIpIaTuQHpq/ohDx2b6yTXbxw/Oe/RWX8ut5iotLWUY5o/9rkQi6dy5s4kGvY4r8kX1Oh0lhNBHSwiKZH3Sjp0ac+yHQ9+lJ70/dM/Jmb+3sZS6jck4nJlgKNbEFl4UyeXyxrV9Gq+TEGLqYwBgA83GaHw8kUgIwxCJhMTHt1arqPPAgZI3sm7q+oSK1Ed+vMaMJ7rqarHS31tO2Lv7v8nV+hFCHBzsHlTXsIRITLXyYDoH+WFufrf79IJ+g0Vndu5nBnwaObhM/ukXJxcMGOZw+Ysv1TF/C9MW36ryiEx6ITLW/Ur0tmsPf++dyDs+0Wv1hl2psdMD5Ezl1UuV/hEmzi9FnQcNkn/8yDql5EyrdwQA/phmYzQmhmRnk5MnSVwciYlptVZpdOr6kTNmPn2iq5eLm4uvhBBF8uvTdrw5cpyvRydf52ApIUTkMnRq//UvRUe7jliRld64ta2RhkToNozuPbu43n/Wxp197F1DPp01O6V/kIa1C5yauW2UU803aZMXZ1URwtiFvfqvUQqXSkPvjr73+vbl81OSw5dTKZH7Tlv374hAU5uIevPRdTqTYqv3EwCagZJ2vLCFH46YUv3ByYVhHaTsLAA00RbHjQIAtCM4GwUA4AVnowAAvCBGAQB4QYwCAPCCGAUA4AUxCgDAC2IUAIAXxCgAAC+IUQAAXhCjAAC8IEYBAHj5L8RRrrJ5MUVmAAAAAElFTkSuQmCC", "image/svg+xml": [ "\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", "\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", "\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" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "toRenderable $ do\n", " plot $ points \"data\" $ sort $ list xData `zip` list (real <$> yData)\n", " setColors [black `withOpacity` 0.1]\n", " plot $ line \"posterior\" [xTest `zip` fTest | (i,(z,a,b,eta,ils)) <- [0..] `zip` samples\n", " , i `mod` 100 == 0\n", " , let sd = normal 0 (ils / (2*pi))\n", " f = real . (eta *) . gpTrigPoly t m sd z a b . real\n", " fTest = f <$> xTest :: [Double]\n", " ]" ] } ], "metadata": { "kernelspec": { "display_name": "Haskell", "language": "haskell", "name": "haskell" }, "language_info": { "codemirror_mode": "ihaskell", "file_extension": ".hs", "name": "haskell", "pygments_lexer": "Haskell", "version": "8.6.5" } }, "nbformat": 4, "nbformat_minor": 2 }