From 5f24f6625dcef965080a08363b6de65e481655a0 Mon Sep 17 00:00:00 2001 From: "Documenter.jl" Date: Wed, 4 Dec 2024 03:42:10 +0000 Subject: [PATCH] build based on 8eec5c9 --- dev/.documenter-siteinfo.json | 2 +- dev/api/index.html | 4 +- dev/ascii/index.html | 2 +- dev/assets/documenter.js | 302 ++++++++++++----------- dev/bc/bc_debug/index.html | 4 +- dev/bsh/budyko_sellers_halfar.jld2 | Bin 1426755 -> 1426723 bytes dev/bsh/budyko_sellers_halfar/index.html | 58 ++--- dev/canon/index.html | 64 ++--- dev/ch/cahn-hilliard/index.html | 2 +- dev/cism/cism/index.html | 38 +-- dev/cism/ice_dynamics2D.jld2 | Bin 30117307 -> 30117283 bytes dev/equations/equations/index.html | 4 +- dev/grigoriev/grigoriev.jld2 | Bin 9535059 -> 9535035 bytes dev/grigoriev/grigoriev/index.html | 16 +- dev/halmo/halmo/index.html | 6 +- dev/harmonics/harmonics/index.html | 2 +- dev/ice_dynamics/ice_dynamics/index.html | 44 ++-- dev/ice_dynamics/ice_dynamics1D.jld2 | Bin 258083 -> 258075 bytes dev/ice_dynamics/ice_dynamics2D.jld2 | Bin 767939 -> 767923 bytes dev/index.html | 2 +- dev/klausmeier/klausmeier/index.html | 6 +- dev/navier_stokes/ns/index.html | 2 +- dev/nhs/nhs_lite/index.html | 2 +- dev/overview/overview/index.html | 4 +- dev/poiseuille/poiseuille/index.html | 2 +- dev/search_index.js | 2 +- 26 files changed, 293 insertions(+), 275 deletions(-) diff --git a/dev/.documenter-siteinfo.json b/dev/.documenter-siteinfo.json index 89dc861d..108cf410 100644 --- a/dev/.documenter-siteinfo.json +++ b/dev/.documenter-siteinfo.json @@ -1 +1 @@ -{"documenter":{"julia_version":"1.11.1","generation_timestamp":"2024-10-21T19:29:55","documenter_version":"1.7.0"}} \ No newline at end of file +{"documenter":{"julia_version":"1.11.2","generation_timestamp":"2024-12-04T03:41:11","documenter_version":"1.8.0"}} \ No newline at end of file diff --git a/dev/api/index.html b/dev/api/index.html index 87f78779..21744ea1 100644 --- a/dev/api/index.html +++ b/dev/api/index.html @@ -1,3 +1,3 @@ -Library Reference · Decapodes.jl

Library Reference

Decapodes

Decapodes.compileMethod
compile(d::SummationDecapode, inputs::Vector{Symbol}, alloc_vectors::Vector{AllocVecCall}, optimizable_dec_operators::Set{Symbol}, dimension::Int, stateeltype::DataType, code_target::AbstractGenerationTarget, preallocate::Bool)

Function that compiles the computation body. d is the input Decapode, inputs is a vector of state variables and literals, alloc_vec should be empty when passed in, optimizable_dec_operators is a collection of all DEC operator symbols that can use special in-place methods, dimension is the dimension of the problem (usually 1 or 2), stateeltype is the type of the state elements (usually Float32 or Float64), code_target determines what architecture the code is compiled for (either CPU or CUDA), and preallocate which is set to true by default and determines if intermediate results can be preallocated..

source
Decapodes.compile_envMethod
compile_env(d::SummationDecapode, dec_matrices::Vector{Symbol}, con_dec_operators::Set{Symbol}, code_target::AbstractGenerationTarget)

This creates the symbol to function linking for the simulation output. Those run through the default_dec backend expect both an in-place and an out-of-place variant in that order. User defined operations only support out-of-place.

source
Decapodes.gensimMethod
gensim(user_d::SummationDecapode, input_vars::Vector{Symbol}; dimension::Int=2, stateeltype::DataType = Float64, code_target::AbstractGenerationTarget = CPUTarget(), preallocate::Bool = true)

Generates the entire code body for the simulation function. The returned simulation function can then be combined with a mesh, provided by CombinatorialSpaces, and a function describing symbol to operator mappings to return a simulator that can be used to solve the represented equations given initial conditions.

Arguments:

user_d: The user passed Decapode for which simulation code will be generated. (This is not modified)

input_vars is the collection of variables whose values are known at the beginning of the simulation. (Defaults to all state variables and literals in the Decapode)

Keyword arguments:

dimension: The dimension of the problem. (Defaults to 2)(Must be 1 or 2)

stateeltype: The element type of the state forms. (Defaults to Float64)(Must be Float32 or Float64)

code_target: The intended architecture target for the generated code. (Defaults to CPUTarget())(Use CUDATarget() for NVIDIA CUDA GPUs)

preallocate: Enables(true)/disables(false) pre-allocated caches for intermediate computations. Some functions, such as those that determine Jacobian sparsity patterns, or perform auto-differentiation, may require this to be disabled. (Defaults to true)

source
[ Info: Page built in 3 seconds.
-[ Info: This page was last built at 2024-10-21T19:18:35.054.
+Library Reference · Decapodes.jl

Library Reference

Decapodes

Decapodes.compileMethod
compile(d::SummationDecapode, inputs::Vector{Symbol}, alloc_vectors::Vector{AllocVecCall}, optimizable_dec_operators::Set{Symbol}, dimension::Int, stateeltype::DataType, code_target::AbstractGenerationTarget, preallocate::Bool)

Function that compiles the computation body. d is the input Decapode, inputs is a vector of state variables and literals, alloc_vec should be empty when passed in, optimizable_dec_operators is a collection of all DEC operator symbols that can use special in-place methods, dimension is the dimension of the problem (usually 1 or 2), stateeltype is the type of the state elements (usually Float32 or Float64), code_target determines what architecture the code is compiled for (either CPU or CUDA), and preallocate which is set to true by default and determines if intermediate results can be preallocated..

source
Decapodes.compile_envMethod
compile_env(d::SummationDecapode, dec_matrices::Vector{Symbol}, con_dec_operators::Set{Symbol}, code_target::AbstractGenerationTarget)

This creates the symbol to function linking for the simulation output. Those run through the default_dec backend expect both an in-place and an out-of-place variant in that order. User defined operations only support out-of-place.

source
Decapodes.gensimMethod
gensim(user_d::SummationDecapode, input_vars::Vector{Symbol}; dimension::Int=2, stateeltype::DataType = Float64, code_target::AbstractGenerationTarget = CPUTarget(), preallocate::Bool = true)

Generates the entire code body for the simulation function. The returned simulation function can then be combined with a mesh, provided by CombinatorialSpaces, and a function describing symbol to operator mappings to return a simulator that can be used to solve the represented equations given initial conditions.

Arguments:

user_d: The user passed Decapode for which simulation code will be generated. (This is not modified)

input_vars is the collection of variables whose values are known at the beginning of the simulation. (Defaults to all state variables and literals in the Decapode)

Keyword arguments:

dimension: The dimension of the problem. (Defaults to 2)(Must be 1 or 2)

stateeltype: The element type of the state forms. (Defaults to Float64)(Must be Float32 or Float64)

code_target: The intended architecture target for the generated code. (Defaults to CPUTarget())(Use CUDATarget() for NVIDIA CUDA GPUs)

preallocate: Enables(true)/disables(false) pre-allocated caches for intermediate computations. Some functions, such as those that determine Jacobian sparsity patterns, or perform auto-differentiation, may require this to be disabled. (Defaults to true)

multigrid: Enables multigrid methods during code generation. If true, then the function produced by gensim will expect a PrimalGeometricMapSeries. (Defaults to false)

source
[ Info: Page built in 4 seconds.
+[ Info: This page was last built at 2024-12-04T03:29:56.071.
diff --git a/dev/ascii/index.html b/dev/ascii/index.html index 3fdf3cb3..0e78cb71 100644 --- a/dev/ascii/index.html +++ b/dev/ascii/index.html @@ -1,3 +1,3 @@ ASCII Operators · Decapodes.jl

ASCII and Vector Calculus Operators

Some users may have trouble entering unicode characters like ⋆ or ∂ in their development environment. So, we offer the following ASCII equivalents. Further, some users may like to use vector calculus symbols instead of exterior calculus symbols where possible. We offer support for such symbols as well.

ASCII Equivalents

UnicodeASCIIMeaning
∂ₜdtderivative w.r.t. time
starHodge star, generalizing transpose
Δlapllaplacian
wedgewedge product, generalizing the cross product
⋆⁻¹star_invHodge star, generalizing transpose
∘(⋆,d,⋆)divdivergence, a.k.a. ∇⋅
avg₀₁avg_01average values stored on endpoints of edges

Vector Calculus Equivalents

VecDECHow to enter
graddgrad
div∘(⋆,d,⋆)div
curl∘(d,⋆)curl
d\nabla
∇ᵈ∘(⋆,d,⋆)\nabla \<tab\> \^d \<tab\>
∇x∘(d,⋆)\nabla \<tab\> x
adv(X,Y)∘(⋆,d,⋆)(X∧Y)adv
[ Info: Page built in 0 seconds.
-[ Info: This page was last built at 2024-10-21T19:18:35.249.
+[ Info: This page was last built at 2024-12-04T03:29:56.280. diff --git a/dev/assets/documenter.js b/dev/assets/documenter.js index 82252a11..7d68cd80 100644 --- a/dev/assets/documenter.js +++ b/dev/assets/documenter.js @@ -612,176 +612,194 @@ function worker_function(documenterSearchIndex, documenterBaseURL, filters) { }; } -// `worker = Threads.@spawn worker_function(documenterSearchIndex)`, but in JavaScript! -const filters = [ - ...new Set(documenterSearchIndex["docs"].map((x) => x.category)), -]; -const worker_str = - "(" + - worker_function.toString() + - ")(" + - JSON.stringify(documenterSearchIndex["docs"]) + - "," + - JSON.stringify(documenterBaseURL) + - "," + - JSON.stringify(filters) + - ")"; -const worker_blob = new Blob([worker_str], { type: "text/javascript" }); -const worker = new Worker(URL.createObjectURL(worker_blob)); - /////// SEARCH MAIN /////// -// Whether the worker is currently handling a search. This is a boolean -// as the worker only ever handles 1 or 0 searches at a time. -var worker_is_running = false; - -// The last search text that was sent to the worker. This is used to determine -// if the worker should be launched again when it reports back results. -var last_search_text = ""; - -// The results of the last search. This, in combination with the state of the filters -// in the DOM, is used compute the results to display on calls to update_search. -var unfiltered_results = []; - -// Which filter is currently selected -var selected_filter = ""; - -$(document).on("input", ".documenter-search-input", function (event) { - if (!worker_is_running) { - launch_search(); - } -}); - -function launch_search() { - worker_is_running = true; - last_search_text = $(".documenter-search-input").val(); - worker.postMessage(last_search_text); -} - -worker.onmessage = function (e) { - if (last_search_text !== $(".documenter-search-input").val()) { - launch_search(); - } else { - worker_is_running = false; - } - - unfiltered_results = e.data; - update_search(); -}; +function runSearchMainCode() { + // `worker = Threads.@spawn worker_function(documenterSearchIndex)`, but in JavaScript! + const filters = [ + ...new Set(documenterSearchIndex["docs"].map((x) => x.category)), + ]; + const worker_str = + "(" + + worker_function.toString() + + ")(" + + JSON.stringify(documenterSearchIndex["docs"]) + + "," + + JSON.stringify(documenterBaseURL) + + "," + + JSON.stringify(filters) + + ")"; + const worker_blob = new Blob([worker_str], { type: "text/javascript" }); + const worker = new Worker(URL.createObjectURL(worker_blob)); + + // Whether the worker is currently handling a search. This is a boolean + // as the worker only ever handles 1 or 0 searches at a time. + var worker_is_running = false; + + // The last search text that was sent to the worker. This is used to determine + // if the worker should be launched again when it reports back results. + var last_search_text = ""; + + // The results of the last search. This, in combination with the state of the filters + // in the DOM, is used compute the results to display on calls to update_search. + var unfiltered_results = []; + + // Which filter is currently selected + var selected_filter = ""; + + $(document).on("input", ".documenter-search-input", function (event) { + if (!worker_is_running) { + launch_search(); + } + }); -$(document).on("click", ".search-filter", function () { - if ($(this).hasClass("search-filter-selected")) { - selected_filter = ""; - } else { - selected_filter = $(this).text().toLowerCase(); + function launch_search() { + worker_is_running = true; + last_search_text = $(".documenter-search-input").val(); + worker.postMessage(last_search_text); } - // This updates search results and toggles classes for UI: - update_search(); -}); + worker.onmessage = function (e) { + if (last_search_text !== $(".documenter-search-input").val()) { + launch_search(); + } else { + worker_is_running = false; + } -/** - * Make/Update the search component - */ -function update_search() { - let querystring = $(".documenter-search-input").val(); + unfiltered_results = e.data; + update_search(); + }; - if (querystring.trim()) { - if (selected_filter == "") { - results = unfiltered_results; + $(document).on("click", ".search-filter", function () { + if ($(this).hasClass("search-filter-selected")) { + selected_filter = ""; } else { - results = unfiltered_results.filter((result) => { - return selected_filter == result.category.toLowerCase(); - }); + selected_filter = $(this).text().toLowerCase(); } - let search_result_container = ``; - let modal_filters = make_modal_body_filters(); - let search_divider = `
`; + // This updates search results and toggles classes for UI: + update_search(); + }); - if (results.length) { - let links = []; - let count = 0; - let search_results = ""; - - for (var i = 0, n = results.length; i < n && count < 200; ++i) { - let result = results[i]; - if (result.location && !links.includes(result.location)) { - search_results += result.div; - count++; - links.push(result.location); - } - } + /** + * Make/Update the search component + */ + function update_search() { + let querystring = $(".documenter-search-input").val(); - if (count == 1) { - count_str = "1 result"; - } else if (count == 200) { - count_str = "200+ results"; + if (querystring.trim()) { + if (selected_filter == "") { + results = unfiltered_results; } else { - count_str = count + " results"; + results = unfiltered_results.filter((result) => { + return selected_filter == result.category.toLowerCase(); + }); } - let result_count = `
${count_str}
`; - search_result_container = ` + let search_result_container = ``; + let modal_filters = make_modal_body_filters(); + let search_divider = `
`; + + if (results.length) { + let links = []; + let count = 0; + let search_results = ""; + + for (var i = 0, n = results.length; i < n && count < 200; ++i) { + let result = results[i]; + if (result.location && !links.includes(result.location)) { + search_results += result.div; + count++; + links.push(result.location); + } + } + + if (count == 1) { + count_str = "1 result"; + } else if (count == 200) { + count_str = "200+ results"; + } else { + count_str = count + " results"; + } + let result_count = `
${count_str}
`; + + search_result_container = ` +
+ ${modal_filters} + ${search_divider} + ${result_count} +
+ ${search_results} +
+
+ `; + } else { + search_result_container = `
${modal_filters} ${search_divider} - ${result_count} -
- ${search_results} -
-
+
0 result(s)
+ +
No result found!
`; - } else { - search_result_container = ` -
- ${modal_filters} - ${search_divider} -
0 result(s)
-
-
No result found!
- `; - } + } - if ($(".search-modal-card-body").hasClass("is-justify-content-center")) { - $(".search-modal-card-body").removeClass("is-justify-content-center"); - } + if ($(".search-modal-card-body").hasClass("is-justify-content-center")) { + $(".search-modal-card-body").removeClass("is-justify-content-center"); + } - $(".search-modal-card-body").html(search_result_container); - } else { - if (!$(".search-modal-card-body").hasClass("is-justify-content-center")) { - $(".search-modal-card-body").addClass("is-justify-content-center"); + $(".search-modal-card-body").html(search_result_container); + } else { + if (!$(".search-modal-card-body").hasClass("is-justify-content-center")) { + $(".search-modal-card-body").addClass("is-justify-content-center"); + } + + $(".search-modal-card-body").html(` +
Type something to get started!
+ `); } + } - $(".search-modal-card-body").html(` -
Type something to get started!
- `); + /** + * Make the modal filter html + * + * @returns string + */ + function make_modal_body_filters() { + let str = filters + .map((val) => { + if (selected_filter == val.toLowerCase()) { + return `${val}`; + } else { + return `${val}`; + } + }) + .join(""); + + return ` +
+ Filters: + ${str} +
`; } } -/** - * Make the modal filter html - * - * @returns string - */ -function make_modal_body_filters() { - let str = filters - .map((val) => { - if (selected_filter == val.toLowerCase()) { - return `${val}`; - } else { - return `${val}`; - } - }) - .join(""); - - return ` -
- Filters: - ${str} -
`; +function waitUntilSearchIndexAvailable() { + // It is possible that the documenter.js script runs before the page + // has finished loading and documenterSearchIndex gets defined. + // So we need to wait until the search index actually loads before setting + // up all the search-related stuff. + if (typeof documenterSearchIndex !== "undefined") { + runSearchMainCode(); + } else { + console.warn("Search Index not available, waiting"); + setTimeout(waitUntilSearchIndexAvailable, 1000); + } } +// The actual entry point to the search code +waitUntilSearchIndexAvailable(); + }) //////////////////////////////////////////////////////////////////////////////// require(['jquery'], function($) { diff --git a/dev/bc/bc_debug/index.html b/dev/bc/bc_debug/index.html index 1ccfb329..4b2542ce 100644 --- a/dev/bc/bc_debug/index.html +++ b/dev/bc/bc_debug/index.html @@ -340,5 +340,5 @@ # Animation record(fig, "diff_adv_right.gif", range(0.0, 100.0; length=150); framerate = 30) do t pmsh.color = sol(t).C -end
"diff_adv_right.gif"

Diffusion-Advection result and your first BC Decapode!

[ Info: Page built in 120 seconds.
-[ Info: This page was last built at 2024-10-21T19:20:35.450.
+end
"diff_adv_right.gif"

Diffusion-Advection result and your first BC Decapode!

[ Info: Page built in 116 seconds.
+[ Info: This page was last built at 2024-12-04T03:31:52.704.
diff --git a/dev/bsh/budyko_sellers_halfar.jld2 b/dev/bsh/budyko_sellers_halfar.jld2 index cb8a2eb93e7c0498075b14005d5354342e901a26..af7804adec0a32073493cb3855f903a8152d9936 100644 GIT binary patch delta 155242 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 delta 153573 zcmc${2Urx>+xNc>SY$yEkfH*DWo;Bu!G<7~wIPUQ?bz1_C>qxWC>At|l2I2MqFC0b zh@u{hiiN0Hf(4Bmqo^S!t5MWo42co{XXZXLTYl$x^FGh@yw`uPOTT;Hb3UitXU?1{ z?BuTUBkxXmIFGr?w; zeP$D|iWz&`zV`RXwlHR-?FjLG=9sOAco=idcC~#cUr5)F8EH2{Jcc=D=MnOkANX2{ z#M~ERiukl!3G)llEzDnbeeJ`2fI83glaH`3g-VL34kg=31B;$GipBQ#f?#79^TH`<b(dM_oa8d8BUt;1+B1JS_ifd&19*pb0-a^m#5tt)E12mn8(cPoL8{-0&S9F` z`4%Y~d@m87XFj{#bghrK7v@2ta4d=rV&+&(yEMMX*ipl8?~K3KGqbzk@3v-kSNz>P zeK#w+JGSl3(nsL$GBdje{w@VO4U0$=iT{}w5QS|U{Ex3tPyF4yLeW;+ds%Jojcq&p zkLUYXrSFSvIk#Pb|HmH{{-@A06PoyootZoj4`#eavh2^DXEjXImSN0;RAo^Y&+AgR zVh=90h}WN5qDw`djZ?(z4&f||UU$ilIo7lt^PO*3v4)ZRM9Y%0Uc4$A?9*NRA8hYf zx64A}9n8jnXqoHK4^>R8-|vd=$*#9ZXU98 z%IrAibNgOQT^G4n&)9YCY}S|twMEL zV`1w~qP<8>*qxRA;JEhQWj}o!Skswny>(6dCV=%d(HJY{=b~kOg2eXBL`WuLPWMeS zv!YZU_E#psw$981Z26ItlbB_y2SUmpnF;+o>}{q%N)5BD9}>1*W1{+}_2WypHVx8D zx9Y|X8t_Y|gU+zpKAdoE8T$br#QLuW2FbFzyIjPRL_Bk*LmwA@jI%Q%H|Ckg1N%z! zote+YofLc6NgaPi9Lns#O)FlpEtoTdTCv;xW(CTE0^b~G26bBG#pl9K(Cj44+YU_B zjvhi8?7YZ!x}NzM(?g-@kH6y2>a3R7ODsm+UbcI_F%=g)0>-8F1Bv9kxR#w{-^^k z{d|?@R;KmPJwoa1`pdix>;dWPy_E4i|ejL^}kuQW@R+$&dF1pNZ zKP$VbmF;h32Uyw7u&qd7k5>{qkuIc{tH*z}5VLbg?tQx)W_CS0v!~q~f?@oT&ts3u z$rkl$j{WBKY=Lcdxbf|3X=N+1?O?XO75>gn!F+ml8D`Go%m%ppRy9r+}rX6)ieuOFGp z6p!jFBx2WS=KaR*jGhy2#F4TGj}DTpv|+wuO<`cN`I*JUC=icn2< zfyH$zQ!u8laB%Fw+(JPLC7EnrUc9Da^A|RE=X>hRu6s9`9b(eVDk+Ah(_57~(w&Z^oZ@$DX#e=)x%Mgf0vk?<;$v{NB-`7Cre|1oaB>V&bN* z5o*y_00$=o%I<#i>tGhdkvf(TB>Q@<P>_ zt0!d(y*&iCQ|dT6n@OM6s9n+ooCJU5cnr!!!6J6?&o?3-e>V^NaK3|%2ZT>$4ow~; zWH~fD&Q*3Hx33NJY&y)6-AA~#lU;r@{JKSp*yAy@=*$#fSybB&f3cNl{(q_jJ7xg! znHnV9chi2VMQFwdn}3@cDEo1NcNpoTLDPa{j@!q${%Zm35gH1(FfB-$EDd4e#(DHpjJQDBHt$h|{zu=Dp{&#Ur<~3@2*f#J9*?od-PbA|zE2!Sq$Z_m6jz7$WuAWTttTOv4 zi@|Z6iJBcGtXg83g|m;ESs{rYt+Y!ZGz#Bzf4Q zrH}?6VUws!U z$L4z2zgiACjc4v)t7sWmYnXR)O`Mpylj33DW(91^V&0`71z*EAt8mB7lDB1^&WjbQ z%{tjnh*h;tt_Hs{6STe6_9cWH!YrJh_TM=nGhJA*W7J;++l#!RfTKm(Uu+PMT*1yk z`14=sO|nAfHG&<)_`~b^RIn$n1QqO}h1xK&{XbdYPAEFP&`#p=?KUu5ZU>Dmy0h3> z+<+f`?9k(e-wY-l^|WCRRFO=VrD2Np%^>|>pN}2Iqn$f1X8bz1Ng`)3;(>uO=Nm4E zxS5R4iCqD}K%SlID?5BG_4|Jv`|KhWklU$2vb!N~uW>UOpCh}Dh0QzD0%b1E=db2w zvPkB0T9E9W+kAJnfELzMrTNa~#OE-B8FVI4*0^BbD{i*pOK{=0Gv3SkdhuQ_-b?mn zZ*I04O!l5|vZw5Atla#sEo{JN#e7;8B&(Ktb+G6&H(_(~a$i}$pBt}abNr7(ka?5b zd4yE1Av-O-&2*FI{nbvGmH3u4vPv9)ZM}1|fz*2AUoCBIT5V_twCkIZ1sUhrm;nz_m5=YIQ>Mf}+j2-&)< z3Y7KR*fotU)t+x$bACdWdQ8$#`^~(-7JO!;-|%G#Sc?V>w6kFwC*<1_Z_(ikG;Y#G z-?&)}m)3k9%)8ZnUHE#i*8`!N{W8Pcx{^uja0Yhc&%Nh4_5QVT>_Umlf>cgeD2IM) zf5oD5ZTV`SjvczdA_(lN8>;d38ef^NS?#fZjWT;u1c>9>AlWhRS%dKi8dCJt+G?rL zI(`Wq$z*5sP2<}<43q4+0dKPlO?Cp{ZFX5>ZnJ9^N3-oC@ptwR$){%*sO({ix7jI@ z-FJAKUDV+6+6xYLg=lM*fSohznc3s`}wJsSAMGHRhVL}r(9x3 zzkg59%~f#ZuLY`sf0hM$ZoopI6qzaMi8rxraZI;>kF69(M`T)q_li)1?QFilTWu!lX+;vINLm|Fw3lK3;9 zEP56<|8Xm~fR1DoJA-6xo9wGmsq} z_;aBU^!JmXe7aU#!XoxG)ZG;_zXCBDagv9P6hEYs8}OgxTp=@BL#ubb0M z5tf!<)pmSej4OHq@jvCP|D1dHsezvgc-vb4W&8jA+{0(gXK1bboWd(V2mR;?4WiFM z_`nO3kVrIRl@#VNU6*!JtR-ia zbNcx#X6hAhZ@{N!kNRBdJf?DBPaAgCQOML4hbj0ve&L@qkGo&M6KwJ9DB*3k>fdzr zn9CiV3K{Qjf@FQx-#gE)dGU?QrP%EF>vvx;h2ISH;}Iu}K%w{x{;*@J?YX7CB#VJ( zf@Jk>Ze}lmwy|YTjc_9p;sRx|f7-COFN3`JeApWvGHyHm4}ZM4t43GO+&am`riDAQ zXN`PPH+-Fs33d&Ty~y%^#ob;Jw_~234Ujdy^yW5KkPVlbxiutEw*K_ujjV5ryTa73 z?EJyCoB8^juWaqI&+cp?HXO#(D~XV`uk3z+%UN>r4D;-)zpVGZdiiWNHjUY=ne!z< zvgkKu(^*$TFSEL_o7t%0W)^t)$eIp`9>S(!($CA-_$93fl-+Y$AYzaAtgXQI7c-Xr z!KV=-?}zh%0FJ)kD=Xa+o6FUZJv}RA&RmF)4SJ{l%(@t7S1#wYrruniG~Dqdsc6Z? zRI!j1JL$1QqmXeZ?VHATVoU6SZo*&iM~VNL4~14%c55rUjg{Tj%4QED=J~NlRBR^+ zQDjeqxN7C$FZdIT|3S}jCU*_kd_c6vZg#No4PZ|J9nEa^#M3;#j@VY@vA2BE>f^8M zho2h%U+GkGJmK{@*ft{fAF}Y>0T>3tqOBQ!S{c80KoWPt$u~_n%kIBz(M6WCh2hV{ zjt-P9_V_7_seh$S`$^<*qH53fGyZf0UE3CBpgzsrIXAm^a-RdttSi2$~nXUB1SpFZ{40E>$C=d0X(>YQ492DL=kec6S-dAJ9188EI*cQF(Emk3kT zAe@X$QDXvqWX6~SQH)D~X%>hPw&O4OGnmWfS=STMxXO*pp6Jj;c9ys^8?UtyFVOAI zmv~FAigdXhBu&#QGQ8hlF!LJ6i?p{vH4i}5m7uEUpy97Tl{KKAe}l@!&~3GLphhQ9 zgF9$hW6UJ%mbj>0#MCKQ1w|*RVirrbx`FUP)`G>{0V67b5P?eP(ux9 z+25eWVi(mflX zaR2IN3u*Xuk*-AR-c+`!|M1R5F*nEB{s&fio5Lz6?p-cm$~y!z3=gp@im0GqMGrVk z93ZVHV4eno*`!a{TNL<^g5_6o*rU7K=L?wp3Bh!Z?n8@wo>4I7Ifu=!?(~O%)jlWK z{TrXg6ge3wSjH<3i|+J$rGOb<5$s)H%*vv=Y6_N8!(lBttG^O3Lk+?5-TcoNRsTW3 zCjHG}^}oM7K)}lWCfLt;HnWN<{~2rRY8|(Du~-+iOyVs)zjcSe6=NqCxc5^7PM~tB zm;y%2#Y|IAFWHbhX;T5z%L%9)KAJ%#^=M#deGZhK>AzU_bbz8EJ5qA$6V7lkc^WEk zp>Y8Xp}Zr4Fl%fR@$M!el#$D5P&6j4xJW2c?JH7UROB>*24;+g5`Xyf+1CPS98JJmaq1zcZY&Kx(L9(!ls+vF_L|S8u7aqP+kXV<*?f z25((Eq4K#jFnR%$D3Nd9EP(n21e`Ht;&@cDkOqdP0_gSlWR?Ktq!KV-vg8&jNT-1T zE5*9qUNUcK+?`_rn2DWSRfB(9n1gax(?HjCP~wh+F%Jb$yN-ZgPB^$6Wo6MoDFfiE zQKg3jP{R;#!-GK$Q0itHShE$t<$IGO1yH?>fcl%a3sK?@8d#MFU`T1*6aiH2CSXKw zKNmDEp9WSO0C4>1{f7lGTu;DNKA#4mn6GJIX#s%k@Amsb0F_4xxbOD{zoLj^G_dF- zfM=?gO9asK6ak;_Q52%UVj7r#7Ql@k-<}ab`8fjK^F3CMe9qHArWC;b4Qqo0u(p(d zn&fq7k<%3#m~kDztnuGn6hPy30)Cb?C_;5NX<*7703DWZa}z+r9RjW@aHvGp6*O>? zflM8zgVqRO8Fq4Gb@kibKcmWrG%)@Nl&Fn)HA?`CpAhiaU&H64@@F(K`WLZoLKl2o z{XS!k0P3-mE3s+)g(p#okp_moh7w%B6}+K=0q+5Py(RRC0A{`? zV2i+vaFqLj2D*L(aKG%z1_9K5B;e57!>*#NPc%>}k#I|Zy7MZv0BR%>Xk%C3(RnCU zCZVhyYUBW3*|9H20M+&cTrA+{A_^gN73e|^z175ytha&uFU{Nywf5^PsQ>dzE za{_*J4|{?FThhS%HUPfrGtq2+Y)ioYFHTNDK7o>@w&FtFjt-IlS;m7#@u;+e-Z06ll(`phi#j$^ouGf6&aupoYVs%1TgeefFA+NK_UH z>NyuwlMh;a&yFi!B)5f&zUnYgy#};)E2!!QXwE;N#&+zbI9!48pqU#%4HrR`HK5vN z?5#XpfnlJYt3frzpv5ohwcrxS8{tch_@f>Os$U9PTL7xkb?z+bi%*`Hb(VNZ3&SM3 zs4=ch8*~ae#9l|ipJEa_?kw#;R{PR$7+Y0q)qe_uQWH+bR^LG>Gf-+5$#Pp#fH+v! zC`uC0^Wf2=?EOys(e!}OtNV~4F$gq#D5!EYsOLmb`E*cvb&7gGb#9GO^bo4!8A+-W z96IO-3hYVUNBRI59200-Ldg3Pu<%Ub5#-a41~P*H+9lG!7-8ZD;=wR5zRkri=!#*^VO(1kf;=fV&ot-+`*f(!fa*IZ)bLyiGVy zDw{~SHapf%MwOFkT>Nw>(7U{i*%{q*0{-0Z={ZzB(-dP#da|x@l*GTMr+v+32y$^U z1WmsHG$$1_b0w&D9jJx@Rc`~O2U$8tqKo?;FKO$B>4Xl@U?+DZv~7DX8KtJs8d9@B zqMI{F>Mea$Y+4JewFEr)Ra_KGTtow_QlSUFAG`ahP@*c0fO#=Rc-6Ly23D*Duzca9 zj{+FJihw9rm4IS0X<+F(0G0a7rjudidICCzPwt2!HqgK#2Ef5pO4EwQa}xo(M&FJ{ zfm>)`{x$$V&N^)xkMivVytZ{{f8?{%EXuccLzHtS4*eOTEZ+lBtJQ-VkAfObftH;E zE&di%e*=^r<@h~NpFfA6G_912_mKMJC9ar-%J@A%!w50%MVkZagf4=Mv z$~{d3T}vdo36tgC(%proYb;vqYZ(8!p?~(ebN}R?cpYLf6VIBe)cXx@Y>uMhoaMrmPEpmEH12dih zc%t&RV4(+$&j^^+t?6u3S49I;jQH625>Gq7-7>9e4cH0O4l*=C)h}t_q&HBa^MQXx z2ql)`Wg`b>OtjBMmG5X^{09J&*9`I$z~T=CT=C|0V^m&C1EW6yc)%_9cLCIYB4DRp z@tLUPvnk5bWSLagU0u&Vs$J-JurKRnu)@l50L^SbR$gA98b45VOHfrHC_TzGGAXyN z-zuFg6Y8V3kwOp5|3TdZCE7_T>-s7O0F9S^o+N-O1p)t<<{gE`Inlt11^^CPu*ozD zgu4=O>$&LJD8`)zmU;nrV36Gbp+u!O0Y7JKpMoM9)4(D>QsSA*y9Lm*DFMG4`TMUZ zFn|W;w*>IVse7*opj=77U*BdAMn0`+AQQ-f-cm_YsKC_*60YuA#!BQAA{CZi(hD7> zx+YPQrac#riuH#m*OGO%u^U9s5Di+^AGA0QRIdij84pU2a&#wXNL`4x>5{#^6RA*J zQP=vYB%Ice(Cz@1zMA$zXh}|Y0+#rSd!m9KG%%nSfY-dj7Ykr!F9Oc%)$%6F?Lz}y z2LO0WIsd2tY6lST=!f4gp{zkPP&x#_i8)5o*_&nv0VORac0s8_X<&^Sz}NG{ON0{D zBMJEP?7}%HaWoCA8ZXsF9m2wgD<&%)*?IL&Ds9fa^2}b50I~Epr#Bc0Z`*2&no5sOk)8 z_$5$!n5%N2LfIeMnOzy#N-DH3XNne$+fHjq#V!DC#^;(Y8-?c)u;f-&8H(9M155V< zc*E;Vy3py$0|Xqt@f%wdagYWU9RX0OJNaAyJqrl9P4j9U3M{07`6mF>?pgnv0Lo7i z@brs)Es+nRfy@~I9hzP??Uc1=2xtgdpN5=DXkf-A0JGEDE)z;LULxRmn;5+M_|`1U zh1W=!T{lhegfJV)MG(Vn2w&L)(Beu^{d3TqSD=|Sp!6_@UWW>;jGb!`DwK0wsw>EI z_m^fg*oz8o(i#$Q2e?gHA*R!X%sWzD-4V>qeRB%sR?s+C18}aTc`ibES_A2TrMuR( zLs<`Lp!A7U=Q0G}S6VPFK>#(_$;}?6{>$xA>N6Tx^BhV{m@(^!0IGi>;H#6~3sItx z23EZS@P5gYVgXdWCSZ%`i^I^kH#D%K2EeXvuS_Qr;qM9fPM+{1iuqs`WYI?whrf(1+>r?}e5aaj9J2?Kt_vAyoH? z){+#7j9a+%Pjb!>K!ZdE;J&QvF{oN5qb%Ge*#r2`))%`3u*{x-o8$%KP^AM6jCTgG z==4!jrx!aDFyZ|3ZK%8f4UG1{2bGn!-qKuVqEMn9JGnN#8ECITC0;Zz)CWpDcxGI! z0Ot4*aFugnA}a8sfdS0{{8FI}7r@Ns1Pp54vK`88DKjm=V%y4K0oFC7>`w@DW?KlG zHWXCT1ymgcs#1Z54+d2Z2c?I(qAgTtzz*-7LWRQHkqYfv8a@NX1kqYj8VX?hKkA(l zKxGF4?&z?f8;a;e1B<%I;EKu?nXdqPb|ql%hLdVhV0Rjr9|a}OI(Xbh0OdVpx^WDi zKHmH}4Egk;af}K$?|FS41g=&^3VdLA+#fj&pn(~KWx6|A_(H$DSBwA}v6CAf_g=(| zKy`66Fl9KD7(6P&T>uTk2{^OWm6xbmZ5HLcu_VfaUIea(C>zM->9WZXz2cdm`njMv z3qdo}LA9$v=}`_CC)2si#VzUObU~<4CU$aNS3EKvAJHFE)6pWDM4xoO!{Jj8%FC*Z|ISmG*m<$?Nx*EVT(S6e?h%%Fa zA6tGIh$7aSMfq(OiL!oQ;c!t zv6I_FZbePmipqD)bAVGO8_&E6YzRMaRACaK?7Y+%XGV2;U_+h;ys@~1<_(BSJmJF zl?Ie`#w^T{7f6_Eo3|{7Fl#SB*fdu`)#ae7`=H^EK$TUXo-aY^VJ^J@Ejid-)>){K z@*=5_ujhm=D58|slA@~szV;bxS`K-Z5%8Jz+jA)JIt|P(2k>&_VACaO`7HttEAKiJ z`P`v_%zXd{t@v0ZRJHa#0ev>bdmtwR4a|51;Nc-Zn6AYb9})0Ht5cPzu960(RN*sn*a1vENr-74RLWwoQ*FF`%vX=xL7yPpXRlYI{^Tu~1%puCG zdl2R_a_6wP7Q(0h44PvLcM3BdLA7q6nns}XFuVQ^6^aWlS}9aW`#Y)7&gV&mDC<3~ zCDOkDyx6V8UjQ|K5pZBk;(3(%kp|X$mcdBhl#wKWYLN}}-8b%k<4bN58_LS9$`=1c zE`AKpM&Ej@0IKW=`0hB<6OFT{ffbGbKI`4z^ngOR69J|B>^h?uXBt@Q2H?UKP5TQa zD%}a_(mJLgitwO;MU4QI{4vEeM|w6U;Ju3;r6|zH#Td%Ju$!yf!z0lm&j1LU zyftWTFsLyM)DQt$)*G~VASgY|lLDYZ$v^&ST7#AakP7|tQuPc~Hm9{DzBPc4v?P#PE-ZUeU-0*2NIU=DV2`_{mA z?VF>5E;KNp2V0`Ibi{4bqc)j62-kbWp94{D6peH312tXQ>V0FOKy4oap7^qFf0U)7 zfzm+$PU-gK2LaR!B4D4#o}nmpuvwIYhmt7otUf{h4p1``qNW}Vs+tHIJ{?q<4C=W6 zRGtb-k8%+%;8)ANR&!$^fbs~$W@fg@-w$sY|ZxmeochR_oE7y^F%MUgM^ z8Ak(|i2y2ox@MXMY9|tKf8*Uxkkb?zm@yr|V-IeP6iPHsCt$*{3F)YACJjtU2GG0F z64OO#LoxxMRS%kms^`+cNeck%(ywfhP-58v0faHoD#W@pFuW6U^?httVhfgZ@q^aRUvkVxYvPEqqL;VX938 ztowNO5E{3I23BkXu=2@8(+nEEoq#=mdVLDDHJ0_S;{$=;SI2S$QL8-%YWx<|a09gLE@<%&p!%nv^eD$8s8Gz78FfO1iV>+$LF=(;sQfgo zCDA1SKI&bbD1iDB0^a_5@Jv*4fd+s_lX@ly#p5N*_X12fL2B zB$TLmNWfG5YwS?!BN|xq6jzmfSg}Qr>FA<315K@d3c^&z~7BfW{95%=js}7}eF%z?4q_ZnrD@SpW^6 z2spGR{To#MnFdah*>VfF?88B(xxP$h3sK&&amj>SF_K|8GuUMY)$L0WG`D-f4RJA)da$<_kytH z_Mjn)XWL8H_Ygp35CLcG zuY8LlLTF%7M<_99o3m*-$&6h~o~AU$LGTP}(6aHM#Zy7` zvq5v_fzpEeScW=&poM&NRW5bl1EaTzKY zO5*}XLV^8PH#V*JGDi|{%+{#~Q0{0N=$ZiF*NVH1gc7w01ib3^4So)KA`O&I1JEct zaZ&&^(+D^ry3a|JI-LgA%m(nojy9&%xjK=6iu?=dC^4A^R?P!2HlVi&RLv*gie=kx zpm7UKF_tMD%XN~W`oLeKx=bBjr&09QD&Avg`V_s4iLJa z7MIG+E!!kJRLCif){=}20JlB9_C^4W83g?Dyu+WUZY2#&S!)Z|vOC}SRsapy$(5Kq z+x-_*y^aP>%7zlFTr#c+U|BW+cWAPsQ6)nI<8$yFFcUvFcGx9W0E@AcEAf$P${(nF z8x4%!1toqSreg$9zl(r>ENQa{mF%X0q5A>sns#xu0Osr`;O@h_@FQ+|voI$dAz}VT zJ(c_tN6rxlTjmK+?HN$bB~bM>P}ObF@CTsuFjpOc3SC?H;5(s0ssd7>3VAy(G_H`= zl8O@m9+|e!v{QzkB;b-?N<&c$qJgDn0My)wGTpUNo+aRrdY;=*LIWKF^EZH>`u^lBfa;F~EV#7n9!mT~1FP_Fzq8jS0qN0-6!QC9mNIdV#>?n)2 z3OS2;$);()oGX+UZf^%;p$-UggD$8LZs%t=NNQwtEWI)J4(|X3> zLBO6G-(i#2=A7c@1Pu7)ufwRk zB@K*j3n2cR4z1AV`nCk@_F-#xR1!!7Lqh?ay*A72lrNNkKYf}JhYC8fxZOv7q6TL6tK>>0z$G z1#nCLdK*lWV0cebA$!BF8Whuu){;^c2HC&0P4boqeW&b4z~aLWU!jNrG_Yte9$4vk zp&Z%#3jy?uCE%$y2w&tKLId-ML*MnV`R9WG%101TGvD_k@)=13nX&jOv(5On!<~7i z2S#eKlN-t>ijy}Yrvw_9F&Rp1fAXPRDA72XfY*C%K7#6|(!i9N94MVQ(L?yl48u&q zwT=?~imGRuMLBOSiSqNYs=2T;8^|9Zl`Vwm6{myhSA*tcfo5(7)$RbLM>!w`8lqVu z$`KlpnL;X5-1&AT%AHSZi0dK%?|*T^bX#A$h=86*`76p=LIb7C07S|~rt3nQWdxk) zCTfmSGiYGVY5;S*_q-OWs?H=}eYcPRl(?1#R%PJ<$^K=0!ICussM=tsb6SO;KnPnD zfW~FhxQfkC;Kk(ardv7TTS$R18Ar=eOb!h!-C+mUMC3uHgP?LJ0Ud@p8BxS8vnapK zx6>U7lln(J4Y>+IR_=wMc^(3l9|x^11~r}sHCzEL`wo;IrLND0CmHPa`=|X`y*vak5T~35~p@K^^FyJZ_xbWT4 zn*x}5m4J0;@9aXk*Jz+?Ie_(jg3We-assZ@ju)e>+h#$Iyiayz|0(D_L|J3P9&RvrTvP#HKP!P`+@QpB2kp%6a<~(4bDsAsl;}YNs~XAS`K5ga?+GQU8WV8qbI-PDoDU7G z@P`tw&imuI0EPz;@Xz1hiBL>)8d%y2m&iUkTBWEGKxJzJzTZA_35sY-1B-&8#F4(I zO=tF=Aq2ej&E)$iFw`u}Ps2!<$Nl282g2+b4q=n`0Ilr}Y8(h^hzBhj1zJ1-lpf|u z;ZUJbkLyffE(<3W>ix0RGE~`x){^)h0QQ;`@JZ-`;vNKix46+vR31eGqx%4eRv)Sr zKz$zqGP=%#P>G5Lh7JPoukSaTjuJV82zYHtmshA@FbxbC3g8fz%3p*MGlvpTcJxLb z${kJvT}K0$H0}H50;nBLK+Us|MJQ`54U|p9ntv3_u#$i&XJ>zbs#nv%N$UU{rn*!lfMx3l z_;*=T232O!z<35gKV!}c0W4++_?z3V|v zG6CmqOb-$P%c~E~K;IJ9PCZWVyvoQO8 zB4G||*eV{vto{UHQ_0{rHNqXpZ)`LG_4ERj`+?TB0HudH{}WV5D@rn50F&2|3VqYM z-shRXeEV023W$Gg;+o&eRiB%uFo_n%NnD|^#AJ2}uE*4e>z zFSbCG^??wzoQ|NG-9WX`pql=m>Nrr98k8R8nn0*f&|m+kgf37AkqYfwKDiM}45788 zs-rzz#_Du@h5)KM5pZ&R!xS_woCa2O!_m5gFRbcZOvlOa?gU(xxmAT?deFeqXdEr} zXEL&H3>HdM_99?Z;yD)-(T4^W^@lb-EFX*n&~pF*%Ni_cj{*nL!2CD>_ce(!J)j~V zLcr_MTfRj;LunwR#+~yL&vdJ6Ouy(+i=EuSIyuxaZ>G;W<)l%2ClloR{hS_M&7Wkb}$b3m25Kt1<^ z%8!877J(YS0i{Qo$%Y=d>bekL@g=`8TZ>EOx^D2-%`YLRO|+I|NrXRqfY?X|HrZSg{taL5b$=x&uvl3DH<4h#vbl!-ydwc zFO!3vT(9m8JTM;>oHGk^!X*-B=jgT@Aj~0z$A z1TDEX=8367s!~#+=_5CFL*p*fT2gThz{)0prfX;6*9n-|da*l-xk&>{Zvz<8|JGxn z@054!;o9=+3 zEK5KIA80KJ_z2)o&6!>TnE8=_$-O_eMY*47psS=F7p=g@uBJ!)w32!-(7%Z9dQR<_Qu}&vWZu-jL?}^%o!lO>daYy_N_C)tHT9vy<6gR00aQB^@TN=VN0iur239o$ z@b2~>whN%jgMgW;@h8zZFB(|U1iYba32ER>bW8h#rV}TEx<(0>%ju7+m$v` zU}p|*4q;Qa1@#OCm3INHjRZCJ1vSKg(!-q594a*PS&Jt^g^ajVuJ0O6Nx?sx){@qe zl(qn_S*kT%9Wt~fU{?KWeNlBF4V)ATV4sP@whASdg%WV#+NK{+Wk(tq-vvP9oF;Dt zu(%5Wzy5fm29f_ULUXW0q@DZdwl0VWnqL`7ihLn!QJ;yGVAM7$+ z#!`+WU~>nT_9!BO1{O`O2dk*n?G6YfdQKr=_LwghqQGf1Fn=ag^>Uwnrc1=~Sp*zV zv@i+zB+@`;Zav+y3jAYqqO#pWiM80t1-ahr34bD|`7|(NA(Z&nocEIj(72F*w(VCR zM|F#7U`jfG_dB04oxT~;30T>?buFr1ZWiUd)%A3bH_H5@uFhs(35Y)i@+*^NSrEPA z&7k@npgH-VnO}oykAc#o9FR$RpsUpMY;`7fay@W7b#WNVT}x|->jr4Zh9$F2)1Y<( z0aLc6j6+%3G*G$)z__n(P7u0IvxR_z8;ZN4)EpXEvjae{`i>I?P`#6Ys~s<9qQqS^ zuqvMerJI`nY`WmKmvHeH8oWp2_S3kEuc5#hJKmdaFoho?;K#c*QWSH929_QJaKmnI zjZjnNaRM%A5zC;66J|kvTTCYG*=xQHfha3aL)1JkfXc6e)_wXQ1jcw3bY|0N_w{hH0FaT_E6hUmY2ODlgH%_^SYp_Y<2A z=*3qFIKTMTb5wqf21b_yIBG3pTGQyu3D|ej6*(%oO#?&k*W=EJo*PXUv2yMcu3M4< zpY%PTaRHB@!1He}UloFt`G|lM9X_o@xs^1~wFdk_>bwHn?*VD zC5dvQN#D+fC~IFr)HLrv)wQ6i&!FM9@B^_*M^H~UP4F?nm<`y;O?02PED@vX`ZREo8200*782fjv8>S(&6q`^+E1D2{+-9@R*X<$t&=zz)D&ZaI`wqH&=#up$h=qpePw{(dn$oPbX22hKz>U1(rw1b~NurBI?4JGm0CAI_VN zvgXo2=>jNmUi0kz0;pL)z+ht${%!k(W?>FaC1Jj59FhQG)}%t%)GI+%>p;U9P~|pI z&)uMMJt#fQMYsU&S8Lt-ng*e?O?kvZ@ldEkxOlXOG6#>`o z{HqrEWYR!p9dyC$XFs18z}j^LoDl!?ALO)w24*k-Ub(fnl>izU0=^nu8G-6H)4-H% z4)7}otJj_uKm&Gi(Q?`M?lh|2K?5i4h7x_2&oLd+%XSm+m(WXdQDr_2jMoF0wPe1l zP-3y3fc3Ao!hcWtwON?ckCHH7UfX&(gt_=AgiU`6H0K;>=C`2Q8=#uIpz0q$>0y=@ zLWPE2QJIaqLQ+)LRL^dK z->Fbe1B>qB8H@ds+J)861<a~X<+^jP}LPP6>9`g{*bR~#OQ;_=aE^M zZ$Bkr4(+WT4`G%+gRs^93TmtdHT(fu_77;W6kg+}uLnvGbNn+0xHs4G=oO(t#n{P> zbeo8aOHp|httHV$2RIMicf!;KdhF!D3xyNPQOQdh82Sdf;JXit%Y_ni-Vm^6p4}-_ z@Qwxsd;rjxC0Q(hnI8z)=0sX7%B`h=uAlIX#lBif>AFP#wb;p3RsYGa7s~of1En$r zw{m-4y4iFmT_aNf_~W*#5|nDIpe*@n>H*mEQ0E0giE0M|F7>W%h!PzYskXw4GKS*V zvOg44mu$R%TF5H$W2$H`D79n%m>H+lbsyo{PWCQUGMIfMBm0U{A;;l3g#=P@ zS&rady)kU=0mFa3mlVGS)RucMX&&P{6#udBlXA9zOcJ#5;<83w-`=&qMcEsP=KLX-y_MMz;8s27Kwy99F@7*MSyNhk| z;olj@zj>N}<8+P-RAmx*5AmYzn~v%5n}O#Gy}@3HXo&yug-E#G@P4(v51Vd|Bl{bf zeBX~DFR7Hic;UyysoOU3H`_QCe}}HZU+`xFm(k&MKaJBZ3ssn2L^%#`V_VH>bNsdmY+6T%Ldhked(=6H?XlHNLDa8;(;!$v7(>w z;_+J^&~kV3)?h7B{>9_F$?K8-m$kh}Mxy_Jow06u6Gf8!&uyT-cyZlC;o-%<82ZQ7 z#7#CY)4BL4{_{=aEl6wmxX&WCmf$VX8Xv_2vG^a|1V4pG8vhDrYvo_XZ0+amf7{Nd z`xhN0yr-Ve&|3NTD)Y*}1A1!+bO-$%(D)V5y11r_@xmZj9}LMWh;|}4KM2ORhwcB% z+Fo?&znd|N^H&@Yr?I;{`BK)yTFndBWxJ7{^9eF;BPuGAHm@K3W;$ATx%)MgVD}+$+l#fXCHWa$A zJ@+>9P%dc)cpG^~tEByVL()#f|CChZzZxn0fcPJ7|9}5B@?U#FgXkj>PxbuU$isAV zS}20V;kw-|6fMP_b=O#{i|#Mh>Z)tn5?kGLaV@dcUAJ4Q@RLWy4`DkeLbto6!b99c zH%F;xCk+)v>Rzcj*$;zv3HBq;bz|xe^vh1L z!EbnPXGgaw%kkS8>DD2>(uAK6ZXyJcHEKCTfyA% z^<;uvn>jq{du%sXzWB24#~{U2U%pN3JYjzH_r|tjo|rin(=N@8)Wdv$ZeeD_F3dE#-`eBVPt?tE zP1)h<&h{2xFuNPU5F8hZcK{pDS@GNg%Y{$CR)>qN?joDuyXBwozKmCDQk;OfJ*1ti z{(PGsxtEmlgeSj${F<}-ve^>sVFz4^nVVO6>Kr>N8hM;;2VEz}3tE}TUUUTJe%Z?q37V4#sxAe+Ni_B<*v^e%mA!(f+z;%sd7$0qW5wl*E@;7#{vGIh zqS`xPhqqt{zeseLsIoQKwTnP!Ee18Ff)?KbZF?J3UjeFZ21}<&Ty7%KWUOrYqE}?Y zqZW`Lwlyf5fc@}*F&O-Y_9R`W{~}#C@M|JLYx{tH8U(6}0cB!bx$;Go#L;RnY?w#% zJkffw;IE4ZT}2jw;XA>uC7Qe&?BG41PhWuMy(Ip3prYSFjXlUJrZ5r?zL9-FomHTj z45(@oXqk@qb3jEqK+_9AOO6w}2z198(6{G6-O50}ybiiJ?GAj2ybD_Y7tp6fr@jZ9 z4*?&N@IS!c_D|5fzyD|H8VMPSVXfF!3Yur@u8Z=)Pl(Ta&E1pgDo)Tf8K?-bz2ze> z5Q*5UaQ;%AX0Rf_rDF#eCUQK?Wa6iT;9^~xNIv;IY!LqU8w!&I?=V`~g~KejYlmCf zks~Z^x!TgcZDw;LD`%u-f`n0)wsN$k{npAZ9%H#ZeXOOe8fR%cj~8qh*#?t?Yjj?M zkbtu_6D;lEiI#S)m3?87<@U_UmUiqE-iGo;o>O@Tbox^(TR+Wmd$PvT4xesmi)L8b zWmfjanPfXDU!7FgQOTFw^A7a7384|-AFLQ6oi$kGm8Y-!h8*%y{rZqHn5X~(9r zwyAuPCt2w6HF#=e>(ebWNM2@XhcCCZMH!ZMnU%e91>SB}zDT{&67XAPX&bHV!qt}B zwV9T7-ckq&lhxpy zp5Sd{owpNkjw4BqS#EiJLaAt!LKo+COWQMsFSrXN#u6OYv`%~J$ON6kAW zq$?b!(B&@0=_CVMvrgxEPTj=gp^$-!gAMqElE?&b?r+fChjr$Chclc2zM;*R>4k*1 ziSw5W9>22A;Eg!PiIA|XXlAOAFkuonbEbY>%Q`Q-z&TC^pXTYaAB2Q&iF3@w7EY`) z_At(I3YSn4m9C4LQ-6;neX6c|32s~cNjumiPu+2nX^>aTPP_XFc{yvq`N>9`DL4(p zxn$=hQ>l5=A!YO$hYvXAmi9Qu8Q?m1E}@G62hRlO^GiN$Sm#D14l?nLn%&fePbj@G z3kS3k$Ejt@3fAd&%CVbxHo&{{yx;Q)C9#R%{O8k&FxJTqL`f2fQ)4?*4?azTgu|O{ zT1n_`;$-kmv%hjv$T4{iIDgweN@2?-+?g7ZT8$#ble8;Og+cm2uScS6G3#F^N&EP-`$BXKb# z>?>;$AtX##0?xk^J4UijZX_-R-*36AqWOfNaKbq2n;2D6>?!b&`CjKK3t&ktKzCp#P^s}#EG zKiOHMJ2wS#ImWJr9Ah6Y|AtM-&5N1f^RIJx!{;b@N}NkvPh2L>ZsIkNFzJU*{9M^p zlDrn2UB$i9*@WD@_$Bz(UYb9E&rvE`N2cjly||f(8;*R)G7WhKm_28xr7>*mjc}#zv+u_*ZDA|BZ$;ErZi#yMR91Ax>!g1FYaDB#3jFN0J zP22T5DI|>i3KG5>vHu|JyzNDlicJAN~FVfo#nUcT#&4+bz!*LTNyq6PkiBBj= z*bGi)M;6yT>~NH9A(7eGaDtHV?G{Mbzy1Cdtdkv%5*;~ggsz?`BuvkNgsB~pxSfz2 zj$6T}F=nOl38l{46gsD%`u@^qE!zrC19sMZjYrD&{)c&|ByT(5?Qbo2!%l8E?f}=P zv%hik7L3Q8;Iwc5i5tt@cqG2){5{9{45b%x6*`}MJodIOv}2vz^tcP)Q62XRqemK> zr_hZXgTu97%*{vKc-##M122}=@i|JKf>XNqSPxxDQ2nXw-5c&#oA~Ql@%)wMn~#p4 z+A`cRQXHv^8txb*OFx*x{VaG_NqWA{XQ0Br-W26uPhk~?HaaU>NOf6yMH8!YR?z`+ z&iZn%co)B9BN};WNE8TSlZ4f zEp3C9op;J|y9Qa>!Nr0NYvx*$gX@C}r-cNZo%xNW9ec*o_B?B8Kee*;=Pb7;m+&@O zvxlGO9V7-9EbTHYd*emR?dnUGwqL2GZM3orza`sA`6BIQOCa)!r7gc|Y2UW8bIL5Y zCtS0%mDerpx5Vbl7Zu;IOpt!l(pG(EX*-u&+6F5-@0R6u&239N_zq_a<%?>;LHZwG zqr7VgWL8+(vG*)(&-<44Q!88lz2)}g2dr%>UleYzOd$Hf(k`>IH$Jr7uKv-|_IqS$ z8?EfZ$9TJ0`66wlB@p?<(w0B9v~OG4InOM&C;Vh-E2}K+x7ao>UsU|FWrFnQmbU5_ zOWXNZOWR;&=NT=xYhGB|!7r`OS!-WfCb;mMrJec8(vE#?X?s>%+E1-){Ts{e$#2sv z9seI+=N;d~@wD-?xgWe6*r4LmMEuG9vKZC z9jGn(8js2_-^}7M970NkY|M-u9fZ+yOg7%Bm}wJ-kWw9&S?a`xqSn=#PvFs>d<`;S zs5nou$XF6tSTiPmQPkla3#=_6GBo~^a;06p{7jrEHsq8%=I11-x0u}ay9{?9=?h~* z&6$cd$JUa;vOzj68@-ugExb1*`N)3Oe-O31)^Ubqh?!a9m%g|)H$qIFl{>FIRRZ>f z9FON@xN-IbUMfL6YR<88w>(Q?qYHl(+vq+o8&eX#hx8kg{0nTB!EBZyQz83?5lt6m zW64*$s`K7F9yMM}SoLR@i4nbC**LyxB5WfB>y?(5q*Kx~c1d|QUkX4cQjJ423tM`o$huWVBW)cWsa zbzWG;Hao}QU^w0dqo%@K{otrbs-#}BE?Dahu-<=NtC&$M!JCte{Ul@%S zVTCK9@F5`>pUB33$yTV8;qzFZ%5Z4+@^G?-V05y_*Q1) zAIwM*M)NxvPMLZbPT&xX?`76>drEs@^dmgj$lEkpR-o|Z@D~uYhA6X zHck18wdwPp_R9|_h@@Of|3-e8LLr`SsZPv9wV6M1mEoU0Gu3{TPW~>~4!Nl#g;SlX(vAq)Zi%GYprbl1sO8+)9YqZZ*{C*Ur#dVL)n1iO%1PU;-%}l(OVOB{ z2LzD!V~Soe$l9Kp>bN{q>+(|VQ)yQ|+8&=DwNe`x3s6J4N_z^@_Cy2K=0a5K3sdb^ z>Et4EyE4CID@r@W6r)=Df$CJ1b`+=WmT0OCC8$o5wU}RWm!yV-QdFBtQyo@@YOhKs zm8I?0AE}Nuavhvs3ILFgH~()+IoiQqp6a*?RO>2I?Ne!2CE6ZenduDkOU9q5Azh_C zF|<9g3f1PSRO_oz?N{mK*l;qxWUEd)#MGc#s!4UKN;^!n-BOEcLv5>Db)J?e*YVDcBiDXEJ*WxTL+R+ zp5bVH3Y~Lg4kUpG?t?ON@c5%vcUX32%@^VFDh1HN7X&`a?kDS6Hivq8{IU{ZeXx(|j>#)aH7YnPsFw!k$=RV^UqO}OZ zCvDbu6johPq%ZzjP)$&uLYLL*3l*#!t;Nv0(0Pg?0CzL->rB!qeti-;8FF)`cUA}u}s)WWzUq`j#6oR!f!sR`}f~PC5LJwRX z0AU5e`V(3QgpV+ZQLQmZOI*JM-(d*WDhLm~s!>;11B^ngw6oo04k1>nqI0nEdhqz$ zt0CR;$3ru>LafFjywaysu-4X9N1C+nK?O0D52>~z`(wPdj*1&aT2~FUXFd3DEoO&s zt;yI&b`V}pz9~j9n!=s)#<2%MJ2ipR9Rw?55JKyx<*O;2o?1xr*WFi}QwY}D2xtEI zSe)=R<~q(YaqO@ZxaQ?Xh}F7iJTzj|G%==Mp{WCE&O;ijsmCq?e95!!y#(R3)yMwJ z=FZH^Da2|6gtH&i%Ok8(oJ_SlZ>~`8o+8~+hg#(zm&XkugOO10ifwNIs! zy3uw^cdGS0f*O)gUk1Q8B&lc6z_q0p)%xC4`&2rq4{f)^Q?2hSw44O{f`HE_CG`^q z(3bvG>jzNnQ|Y9EwB0g@YW-kEV-oHY0OpgDY>GkFmLXK@hf?iR>7-$_-7=hN{Rq@b z5#UpRJfD;_l6J6+qFSFowNIs!M$>l77^?MSWv$FF`4HgzQqnlu!7`p|{RFCgDxIV% zFD!QI*G~d1=9hdjQ0AACCesdGM#Gu46cLovsY76LsBBumYG!R zXHo4_>7?1T-7<%2{amIq%rE&k$nY;|9@UolRO=m7`&2q<0d2P|q*}j7RRsGO$oMa5 zG1ZnORO^>g?Ne#?s87b>Buf(2`emvj*td)tl9p3#SwXdaCDlHaPWqX)TUJr6U#*H# z-)d?|a#3wrL$!V_)jpL@T1VS0>#5c^*g%0#rIR+&cFQKJ^~ti9i{9$TBYx0GU7h25 zvS&LBM-9MBXv3xP;nlRBuIwuQnLXLN(#$G>&cN(e#=j!ok(sHd%s&3If0M$bUNS3wc5DHK zd63;bdn8?9>`7YwNkZ>lz1c!xram$&TX+h~K0YAHXi+z1ZH1PWq(yOatY< z=N7+hqA+QY%=$HX7_Bf5up-)aD;J3228TQE3}V9_+QYID+&cJtETzMbJ49wh zUoT^YI&L1ah7FRIit&cBoGE|y!XX~#j^D$(@&m3h4U_wRd3I`-;**9mUykhTk?%1Y zG2U?5clBCLF|U1u%rXxh!%7a^zLCJRyV|jJ;w~_SG)lI8=&xmYC2k(Fb`MstdP8RR z1lgDG1Yg(3;YQ2so%w|DNn>QTt#`*{#pgjb()LyCdHYz|clda*L5j~bPG*|#&FvH> zjhER0Z`q;9w4U+oNT#!0-}K0B#b=)&`&xa|^@PGq6J=I&+Nb>rlk74ZyYKE0g?SX# z;X_M>*(b@qG5u#XR+wqB%#OC)rW_89G(~2&Ufupy@p+JS{{wX$9C>0x=rC(W0ATXMfaY7PMHm~_Y}vQ{c&YD z^Q|3OdaB~{AS-a{Y&K+C`!e<+QnM8fS?Vn3iojFBa=GvQuXP_QeWevLyEUU*HHCRr zIIFK=AEIW78Va(nlx=lxS5l_Xn0}U7ncRKZYAznzRWh5lW7|T7d5~=$@!~u(t$j5M z=eBTqUiW+IXZ0*}F>1U<82idF!Jw!;_H^@F?-y-7UnKsI7TJfz9l)lm?XZ2BR zZ;kJKMnRrU&d>1-oy!qWkUd%MdAHl;{EYq2YO-30+iBavuDrjWo>*wFb4&PtR#T1J z*lo*%oP{R3B4@oP*_I^PcF|-ZW;fN+9;#DS+VLB0x9p|bkP_68$fjigd|TZ6f(EV= z_ET*-Ky}zbs=X?mbcnWF4+||P($Pl*;PXiVl}_={cKcDPNAS(vFL?-QuO% za7ot6{8AbM`SY_FxJ)}F{6V$p3e{m(srIUL(ly#{y$)K;FGc&PA)wMJH)y;4Ce?9& zQmwm1wNIs8w|RSTekuMA?O?o1b-GG>{IossFRIOdQ?0*8wV&$@^GnJ1sloPu>X?UA zOOL2dRcS{WZMQt8+VDhGNTxB6@t^xC)d|n2Ha(|0>;=_cl}>s|+pPgrAsPLO8UiYv z@(*pdzot6w4b{50RQpug^==|H#J{K7m`-)NN_#%g_QZdwHh-jA|A}gURTW77Obxa# zRL6W3deNjjIYUyNE%t=h*7|ngea;ha7qV;-7ZF^$ktP@H*qu?hf4&FVg-z4n38(Ql zq|0KnKI0Vbpd-}mzv7$}nQg7svlm@0y0)LsU2yX}1>xsEr+pR!n)e}Hap*Nmh4A+I zeuUxLODu`Nt@JBYf8dM_X{_b|T1#dbu*vUVk{-$|>AD_aI!c$evkP4M&kK>fD3X&$!y7z)tU4u=Ef= zmiri5_dj#Meu3NP#}T%DGv=$Xnoc0C5*5FhQ@C}05@E#Y{6~bcQs=o%85OwEdr)I|#=cIR0YqdTE+V-A9@N+78smpbqE#B;BD>`>Q zx7dIXq!)0K15Mh6h^dViS=rE?t!GqfaGXPkQN~~`p?I!hvxU>+McT2!Yj(Q<1N9QC z9EPxY^6xDxoaW2uoPVfkD5tQ@^9RDSzvnqCtbT<)NVkqc8mqa2);0})>nNH}tQFMt5WSs`ePZRN9I%g&wb@pNRopnLF%9Xm-xHue zM63ceIqyCfR?lO!o(wA($0?jzpCAlfQmc-znxC>b=09^BJPx7&BK8?Nr|6vGu~V&| zQTQ?Ln&Wk`d#vU;I=?P0>lb6%UN9&BWk~sJJ`N#ZU!pU1{N@qDDFu*@Jy`_4a1gEv z%(X1$fUr7Vp>^iFi|~zu^Xfkc!x!Io2&>^WQtz~JGdYELRp8pEe=Sk08uuILp;xRd z%X%C(3eKu;vG>`mrGn>b(>tW++Kp+%yF;+P4|iVZ%f4)Fb~jaq)Os0&@4%%@Ibf9$ zPO9k$Pt>hbTv)9i*mD67*p4!GVkIgD>c8mRQFRfk9`WD@6#8BHMteDhbLvO57Ff7$ zps?CMAzk>*%8#5vpngU;VBaI748r!iuT9Gkr(clggfasJgQqHt(8kLU5;=AjY)DQwfeiI5B1 zes!wGXG|v9|3_!VSEnHlsB}s=ZMR2I9T!QpPDiybgNDS~6-5p4*{C*Vr#fAwJvnH5 zVos{f-&3v6CA6H_`-1>JbFy9-K-+Rt9g~M@DKFKjD(%Qe+b#JOjfI7wfCA)wo~F|7 zg0wxsK((n5)nSFH_NsJJ5o}iq8*5S8A-WjV0hLbqfwtR=QymvgwXOu!KGe$mlB*;& z#FwJlSeoi|mG+dO?TKZnHvdSq-UwREFZpGFF)vBU7;L?N#ZdSk|6le#u&$c8IP)bwH(4YSMPQiR!po zRO@O}?PEIQ{F184gIG-!<5U z)g2k(Y?hCu?zc)NatQf_4!hqSxD@I$xayjskm~O2T+OYJUt~l0^STRWWl)Vbo3rWg zh$7lk_aSSB^ddVNE5}@d5=DOADF@QsF56Jv9TMT32$%L~5G-&5jKb4hUuzuYPDn4l zM`!!9v!a#Rwf0;{eVYbC$_D9$9%0y;K~PP>{JPvo8-6vj6*^31d%^C z`sBjvm>2SkyvT-)yH;NGH|C3QUf9I;>BH1(96}n*800LOcdub{0g@RAXLjDEPJ^GWU{cW z0fn9$@sd3yfU)``T9bcqUl1E$HzMtGDuk^IVJcjX#m{;6Y=q`0926K-S3bfyA&S9f z2b5}@J*3YdL{)`4tz*QXt_nzxKbgV<2qLv2vZPm`w}sPK3F)DsQ`>S1p{l^^iRnKH ztEV#Cs9G$j7Z-(_J`kxtVfTN>zj-d4<`|?6`^8P-6hgHMLf!A>;2r^dC_kh8DSz$t zYWJ{ztfneDd*0u;NepVMrVKj#OeanuQe#<6R%g}8oaqIGQ>u>6rLCG|?as|JA1{2b330K0o6(UuJY(3D_L`?6lrS$(C0TcqY zHp0a_n>-R$QyrwuKFu|83V~XeLH^WrZ0$qB>E)3BL}cP*S4~dglv)qr+}4G13ahm~ z(t#gd<>wUQv;l+cr3Kn7dxGD-0Eg^decE|lN^m2bQRA?88^_IH?AaS4O|3r?A_C5+ zjSwz=W&cM^uWO7{AAbkFd~lq73Y{17Yw%{2s|k7=jN8HY3dCtsWLdP8#)wgk%_8Kd zvnSVwD*}WmW3W#??@qfZoSx=LKWrV6g;R)AGeYC!_Ymf=QRWs%CqFCz#U;dPON5gK zr3AOsuh5$nnkhRlR?`Zt@1Jh{Q*3~(H4EvYY*&wM-<(5;(>CaAsK3pgD8TcS)D~&W z{wv|2LZB*e==;lqh1Jmxt;K)a0XqO9)q*h{hzZ^WFtkVKvBp_oPzY28;l@b)`TQdP zzw6x)gVWzBqDW}i{Qt3>OqSb~`6bH~+QBfD>NJ&hPowP#)2TMipgJs(YOk!t{8G|P zYOv0tI(jzM0hLafL)-0hsg9dRwQfGw!TBX00Qq?H|GFHsL;M1&jSHzxS82~8+Mc+W zYV#7NGt4jPmr{dYrIVes-Ihdk%rdH__O4NtyGd)Q!Mcv>==D?wR61n?ZMScvI&Kryx@6VY$d^nFuFX`(|3bBK3)Sf= z?b%A(6Sq-qHvdY2emm8El}>ikcH0iBW1L5ON7UBF^}?&y*OL{hi>sfmH`4b59tDeB zA5v|P16#=3m9(xt5%LOKoyINMAUv%IiFbak%PP`ORf3t4u`dq0%9$VPB*-chn7ifB zY+?&M{n!PRuUWm&-sKRIivHOBb4b3f!f76WbV7q~VJb)}2C_VrFU2*O8xT%EgOI=6 zxYa=Utg)Iw2nCY;g`q<4PWAH^x;6bekPus)ck zJBFgwlVug;#E?@AL+IapIanqehRambdz*8|)yTElGz6g=_dg8gUhWZiFQJ2FH=i3a z-;p@roCb~hi_J8RLYimmA5e`#=9_>p?&Xq&!s=D%2TO1EWFMx!qj87cIQFw}TE}4j zT&Xo7A>x^D$XMs0b`eE1^AP>Ium`V=a4OBpYy%Z`PM)@or865mPKy;{@AU^QW! zjPz*lIk2h%F{;2j3#8V{m>T}@Z9x{|MGnI;h7g^Kz4bc|7F3K{^E9L#vi{hCQwY)N z2-mmCGfY_hNHs_DJCE+=Z`6UeoyBTqpnK@|<%1DzOGLW4=GBpW42aX22uEElB1&Y9 zG)uliw6y}%6A-1d&^Wn6R{ph>50zs!Qp46h2RMZ&or7iL=C)Ub(=bh|kp|kw=uc2&$ zL0!ujG622> z_TxbV*QOIxODC!JsI>hQZ8!Z+wUjEfoa%dmfX^q{PYVNR(;2Fzvs8Oj+J26jq#aDRsFrS1?NMp_9olZXOSR+&E#{XzGEnB1?0?Y? zroX9{?osVgY5RTJZhAnq^pNY|{E`QNm|wC#q8&_WR7;Pk_NcV|32iq$rCNH%bcXpQ z4+k0k*`HHwdO@}Hl4_4i+XJ-S^onZfA62RAVIbo_`)jIAZ>W~uQteS``#aihdQY{K zt}1ms>C|BVK(*;#s-=%qdsN!~iME?QQ!RZ_mAalU)L{QgwMkOFtuKUXk4oD$wB4ko zT51qVfk&n7-_Ul`w^U2`2NHw7ebuHNV)b0l@Is-T-v4$8e{7>oK8$e3AII{@FjjK} zS&{2Ce^iXo9)trcFF(kj(>{XzAqoZVHT8IA?tm<6)RKV7f{;h z;|R-+UQkF3slXnk#w}Bv$tNP@-0aWTt52?Vo z6{GNjR?{ZmKWJb@{+s2Kt=JL2^o&&n@&?{hwxy@U?$+Rl_c8QScK;y;yBG=vrH zE|!YRoA{V*^%1t!SH?Y2e9=$P7x{I5FeVjPyNqv?;!J*u&dX&AmQzN2hRk;)TpYgW z=Lp}wo%NU*<=x02|2e3}@hL-;zd&cJ8{65f2YDl3B6IG%*i)H1I)Jcg?1zeCNCx@a z1vK7!QVEtLV^qVGeldVeXt=y&YMI+(9Uda@XhF+QMn>p#CK-%tLVb#3x{93i%=Q=^QU zj!eJ2?qMK8x zS&Ee5)=fjZDInJUK=wsB`wNDD zHEr}a=*wGsB##XFV=J)V#?ry-_qXWOMP(nOjF<`8s`s_o-QfS{7qptBFlSVc$iktm z>fYP2cj9-E|9R3_pEXi`(%3Wn`(hb$K=%KZY&7REWT!e!rQJDbdqPgCP2W=;mMf?s zANFPdd|Q(AK?B#;+*C*Bp*o<_DS2tTJs;I^`GuDAaa{oc_3 zRoYXSwkH-*G}Z&=q6&cdC4Dif{VJXO18uhzr#dE@YN-U(sfxz=B}YkWu#}?OP@3vA zm3Eh*?FnV6HvLF-m{Hcs{E`=e{P|f7l%pN2<*AOYKy^T+Q!3JSdnKylDuWjDOS+$^ z!Kc!$7}_3Rg=%9}s?$~4Q;oJK#&R8;Uouyx27L{x{VJVYleXJTRL9h!TB=QTD%Tn2 zmmGDd!BUrMLp`d~RN7siwkI^8+7w51Si?v%zvN{gZLfJ&z{rS0}+ zRL3=s%=q~wNoS@8pGv!0(DwM2R2y4SovzZJ*0epb%|r^!ZK>9`quQ_1$rjpfYfp7d z2dbrxRHwF60Y@iluym%{(1q$Wm3DWP+vWOn;6Ln1<7|=gD@se0`JUf=1Ir_Dqh5h$${yLL45@YGiG;sVqPe+7 z{AmcdSDzP$XmkJL4&gTBL;6bBpfaa$r=CIh6APzatrAXmesn&1x&oF0;YNJ{gmbbz z*etB3f=D~nTmma}aHrl7DL>fu+0If9Tz2v@2!FQa=v`Ly|MQ6mCV9vEsWGO z>pm>k!hQN82p1+4Eg`G{g$An5yUQuur!R`ubEWFn6;^vOq{mF%;RwKe`X3_YpUi!` zl9eU6rMlwiTz9f^O+kGM?YVwrkh-GLdtrZ5Rv^f$NhOdq_&r}8(cf4SslNH|uvcI? zNrB^EU5yh~PbroZvA@ZwdEQYRR|wbAk@6c-Z~PNnp*5FL#$9m&LIa|;tPC~n+d8|& zXZV9oeryQ+dTqy_IAN^jM;yW(`ZBn~Y(^Y|mE+1Eg@Wa!a>zgDcXqp}TdS4IWB0O0 zW*+5ZLc}UCdYiCI|nTw1D#@a(QqtQ+Hg>Y5i!_BXP zTk5XNf|$P}wdU-+yg#gb{^Sh*k$v4(pI{|64rz*ErvUz7?&+K99P(HVsp4#!kNIvs z4Q{2kN~HW7%hv;vtgY-fB+Pyf1P-PIlzayI{fy3TwSC=_wL=+C`?d;Z` zJwlOKPwuH1wZhr0e}=d-*T*5lhn{CQVQ_iA0m5osQmcyD{R-`HCa*G6tR@bv+uP<3 ze*0_-CQ0~Tjy16<;CxCPBqJ1 zv#*|WM<(`FGPS^|iblL{TTswD%Q#b<(eLCYhtdPR#v@KdY8=AKjR(m_7L#)d$atc9eL0I)h z@r}Z&Ymanx>P}W{W-b<+VD1_zFWc+) zW#JG`r&e_4I$VoiCjXyjjm=J7kH{jSwK83Nz4xac|1EgEJ+a^|@^Z*88Iw%*|GNG( zsqv|_YXEJJA4s)v5Y_1_?HL?whlDfH76g1-%tNTw52f0#(#gYUyKOktF(as!MhYz_ zys1F|`@%6w7(iPRs5XqII!&eBV`zKASgK9q6paaY*mwoNe3DnClP1u1t13~Bw$t{2 zN~cVs?e@v2m4rWT3N`4aQteY|*EHH5Kb>mh464&r+LI`^EAvZUbR2vpjou<<6MYKI(G1aCeTnFcu!j@8l zSEZAjwB4FSb@Vc-11g=eoVMFnFr8t3DQ+b-=zgZ!r_!!fv^{<`)kYW9=_>76qbhh4 z*U}E=byVxuQ|(vjkg`;cTyct>6Bfx-EQ7ZLEIjyb-z*VQ)$;;+8*zGH6XIKHlaUD zQ}_?+j&2V=$YvUV^;q!_?0zjK6$9~-R{hInwsM0PWiO-f3Xuw@Af1HFcMv)k_RPlC zu+V88jC9nX&P6zdtipx`N}UjPCm)>w2H|0_Ia!yiNAu`mCvrJI_G6FAuHTI!! z0oNWI)Qo!}s~Cm@bXpO!K@6)Kj`YHixxw1er_g>0ZCVJgYXo@Ny5wD+>_A#E5^IJz z&EPT*wYPB;j(MYWpJ?725?=+rZ+q*c7}Aq~)^|5ke4Ii?F&g2Tq*}pI&0~;gBzVa({tD`DpRcy0jHRI6QH{{RXh1E8m9n{M#`*~TR4~LNYPC#eJ zUWIQ6r!*01_7TUva0;of0vk@V3=md_9aE~1Z&`;9Y=6NS?-8R?J_`1r+Qo`C zSJ_}pc^QP5YWw5*m)r?~I)ml8>~EK9?r&B8wlN%4Ya+|&>ax^5D@375p-1nex+Gk_`9`mmb&d{bUt=Y&GhRVVKh3B)}M1~H>VJ$2(_gq zy`s7A0<1{xCN1Y?2-Jl*LgO7HdWmt(i`YS#%l=-D`CCYmAx;;g^GYu%L^%Blo%8YW zcBHYIC1~xjb@VsFYFmo*z_QZsIE6rUB0PF76bcPEP*M`oRo!wQ<5mb%1x`46`GOeL zu?(#_|E(~ZQ>f9FBh0sYcCb(~tiY;2do~Ca2vo)(ekQi-x>^kCUWs)3xIR#*z>S2T zo#!{PisDOvRv)HSXkOdb1t$Oq*46m^`DH7FI(#fIgD}~mF8nRS7_2TVr?bgF5|<-& z4LWl_aChKN2-UR+JAD~nNNj6Bp$&R0gi;SebsbvE{?dD@u-exnHGDqOk5h=%4Ol5k zWA+NCZX-HN^|$a_1oG4BK81GhjDq`du&u65>{7vhJ>ogR2Y_fz#_o-;mfIt`8#g2M zG@AvbCPb?OcNT21OISU>p!H!rIjkU7w;;5&um^9anYSV>@Z;0!d;kd6ZFo*Ry)#A( z>Sqvk|B&!iKOl|O{EG0q(3v-d)wZ4WU&X!vod^BQA%v#|WpiL#A5Wt-8ve zJA!CM9@>9twcxqhu@lFzbj;n9j{(uT3*n>I@2ZJ`4ZGQK;qRszJSv_;h*rkn6O_wQ z%p#obJxF&uk4AC|=hfd3eyH-Hn6R4mA~k1Sa)(oh)f9w_d;NG$SiK6p->UZ_M*nxI zs|njLFYXRIKYIDzmk0h^>n0w;TGw2B{$C=$m;WdAIL%)iC#bfZq}p(b>NJ&h|4!Qz zQiB?DZPV!>;F}P3hH9@$C!MA3)^k)xpQk#Y(kT~2yPWIWFA4y=AkIs*?h@5Lm3CdG z?eTw5ZM;Hty3kl_c&<`I;x($x*QwU~sP?OL@(tQ<1E7GhuS|CgG%R+jviU938#=`DDcCg3blpRaUQK* zQ$6E2g(Tww!oFj2wH8*xMaBAM7f{GD6nG{n3{nsHRBkU?J7)=h!UupX;}Ssj{A3w} z7}RtbGna*jZ*vGa#vj)BF0I?{Vc9q`9adK$M(?9@V811=#Prewq_NL)EZ`JkRDof! z$(@AN@i0<;3Dh@v;r0%M=p*bt#1Z>dI1OoVC#s015v+DXfHDM!cuDb^kj26$az94e z$iDVh-W>w;i3~O0&33L?#9mu%dWx=*QI%r33!?KG!VBf*l~rcec%R8D!ab`%VF|JM z9E~;S{XRo6YOODjZuo8x6ebXyFJ-9RQ*|LZlLW9KbkFuoFa`u@0EgK6HLAZD*!~J> z|GD*{;DP}C2VuU(BVvSA_nNJujc4DQeitta=wlFe)c#qY9|-DtgS5j>GiEUgQTi5H zwd9mC!fAXbQ_b*e&O!rp1D&hdWv!%5M;f~Fafv*_>v@kOG~O`t8K)4Y=?JrKONtg& z^9Q7pkMyu|3Ss&$!eQr5L72;7s?hqOjef)dVl^Mpx{{)TkA;;XV2ceQ zazkkG&G}YvH$SdI_?pr&k0$c$hZofrmo_EFX3#T=cPJWX_WN)a)A#B5Br?%x!Rmj`I1K1GS zIlRg+J_HZjkj&1`4qXv#_AQUZsP^yV5j5i?o!w0AS%A1KIQh+UQ)>vDE-O;K;{u$k zVDI@9>ds{h9xqoodXx9|AHqg}h>c($GlpGd8|@6<^)*K7u7b2Z-axgnP*6j{nVtdgZSfQi8n{j@ zLbbUl)%s#o`&Bym2ik5cF0`ER#zYIi=aZxoRHv%6qaDn(8!_c9&7wG2u=q zs{na^(~ne#8L9TFbW%CmZY@uBbOovdidGW-l#0|~uS9iRWvX>QQSDP{R}5{BuR^u4 zs;rgyrE~=H=Vvicjdn7+)q-P)My=q6MLxXv)Yl+u(M?9Hf-YfiP! zOtnv?T`g#Pd`qg0t#o95DV>3g|2(a!PHaQ9xh>WDc2xUSI@v$(BQ|(phq#m^0+LP+&UQ`FnDv;8f8ti?j zj*F*S*OzLavs(dOZEadU<=VL+H(ZP51UNs^TxR*{O-LsS$WZ%YP)q*a7;u^jqO<8qAo3PuWRL;>fUrdFb%TXfR~%_d z&+M55^(i#p$SWHJbw#6hY->BO@*trof$Ur%YjAnRSQ0lid#`=GJ7g4$K}Iop=37Xd zV5fRYAZ%8F)nFlP-TJj=U7~Pd+qxS3T>2jbz zr2eFn|4L5Wkzk2#ior2Ijq2B%4*-!`1>x6x5B?CNdKrbkvh(Vv_Z&i?Rz+vo3JY%t zr?nc=BbUE{vIycd7NNiUp4$emE0F$Q1g z9$WYC5`(&%>*SZm=UTLbLkLncIy2X^^b}503#3cd$j^X4l(s~eXK3DS!s=D%zq3oh zsT0Dq66~soVG>lf$?P*2&=sv z(lOm5rg93AYC$;r;)Gx|rE9N~ACo__6=E8WpN~Pr!H?zYfOLB~t&NQeq1us^ zm*d#N@UWvb#q`EbXlx{XhM0m#Rp9=lTfzI7p3ZFg^6W@`%#)Azhd}Lu-P7NkgwHwRe@=<#q@p-`HQZ4Tg#3?8msB1lOO56w8bQxw(jU$@y&kt zoLX|TZ`XnUEp^ieVX0dq$LL!b(@XaMF(YXDB8{Xv zRiz!HXuBnWYQt!%(=upCwcTT=Az>`lrg2nae9$dsRBgN!zVS zR7WoZE#{X3GLZK_`)|r}+QGhp>bR9u>wc!%r_!!fv^{<`*TMNEql+5SRob(LwkNKo z+Pscx{d%hXDxJK6wP%=LvTdXtVm47NB~zWM(vHov-SP|7hAmX5F`aRK$-R{t61Guo z`jzUi?NobJI>}AjtvjfW-l-~e13Rf9Wf#@<-Biczp<4GF)jpMW?WOJUDXKG*aUV6L ztF&i7ZBINvwfP{``a@LvRXVxdVQR1)p*qGxwRDu~RF!rdliTIB-KMeO#Wf@FsulXj zZJwk+jxiG11LOHm;!c!!yu%yW4~e*>ED#?K8$~=#smNHs6-7AsS zZQKG9b_md)5ysYg72K_+RY(`Lde?^!00FuhVU1$L8i`T8jPe)TYWoa?TU8LCE>@VZ zKZ2r}S~|lwyPDRzhJCg96Y4W7{lo`=2wjV#_Lh?0iBSWL!cCP&+wOA+5xNeY{gZkI zOB?%oq?P+!f-?h@Ya6iIzMNx^7*n?qoxhg<_KKiBg$`KWeY&8oP0Y&!Fv)tBL5S33 zHYR&GUNgG_d1&6a8HYX7WeSuw5UdIu^>OlDF{+muw8p7xWVdI=m6dF`8ZW<$gj?Um)W^YS3X$(*tTQ$>D%kWy&5Rk z+z9)X^(moVO)KqSyPy9Fv+B(*@*yEo8H1qev`V`f=c%T3>_mDjlflg?MCvYtxsJE1 zB&>$rNOh)qQJg}kD)4&2PGQ38-hAP~m!@&@$ zDG0Chc$DE>s?fqEN?zr2L9FgWYnw=I@Kj~pkM!RrOX1=Ip?Uye(bke!DAfj#YFFHx zuRP!k;d&6=uO3|;AU>J>5YnfkhSuX0!u2r1Gy0~%OPTJ7&Uq(qRN;_V_5!+a_6Nn8 zh66CHetEcRz~^^)koM~pT8s?{p?VZq%CU}}#MH)Pc(>x<%DfyxoH7PuN`*H$8T@|= zUE>M4(7khI%9_2oPW`vgb^nfqZllp#a){(!{-3~kn#`nJpxSNqdex=U31RN8ep z*ba$q{2xKUH^F#?>U5R%T&3-a*QhpMr&{l$+8@+%qMdw$8f-VIj`@>n=@!+gD($#U z+bwsfHr!P-Ci-at$cMn~R}8XF_={@O-&BX)quQ&|N%v{H^#N+7(1?CW4FQ!-c|_ao zX;jBOrds!eYM)BGp33dY{8Icg+QImo>U5R%yrAugFR3;MsMf!t+AnJ{zm)tBHP~KL z9rK22=`Gc%D(!ej+b!>@Hl%YMoL@=m)DO&_Ta`$V-@rIS9>cIy|W zGt4hVf2D?iN~cIs!L4KeXAhw|PD8a$OSMm>U7=BAekuMN+QIlO)#)nj$wb=|!>BfA zrdt0U)&B3IGJbyc_m8tsgDor7G2v885mcwDv?G$XTXa+#q9#(17Dcr?8`TNfsW#=H zIxHvEUX@Pzp0-=fxhRO%Qyoz0l-#u4o`>o<=cS8mP1kY(FID+o-+)XPE`NrLNd57> zf(4oa`^Bvfrs{4lv+|s-(Ml*PAg8#5-8Wn^y%$$X(`BTy$9~7tKRNyV1L4SG%Y*5+ zmr?ic(#UH zA)UC6)_wJkE#VNXb|2Dc^LEG_Af32@uyCi$YlT&J6KVOonP3B80G~pS_LfsUpsqjB z+xUKDJ~jd*6}OPpf3|v>7}a3!3_I8Gs}P~co`2}p8aP|qFNs*Q{JBCl#f`g<1# z$UpZtamPVp_RFiHy?Vk_kp2FJ1?syc!NmeUgOI=E>%MaqZWMb=7vZF;{I#>Vt8DkM z_*k=TD2I^!-bd%MO!2`Dl^!5nm2VuowSnoc0!w{A^OYFX@er*~yLErUDWt!T5YAi+ zPdUqn%8-V1%)A!7`i1m2Bu#!ku>FEzVodjAH0qk{oXjZ%>Jx;u%H??=tfr?(tL1yw zkyA*1pWy0Tq1UXL6pHp-{a zLxvl{;?MO4>%94k`L`Fs^euLOv3tmM(cSnCpX7Y8*}x%0DPw$>XmjsgOP=KPyvHF{ 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
[ Info: Solving
 soln.retcode = SciMLBase.ReturnCode.Success
-[ Info: Done

We can save the solution file to examine later.

@save "budyko_sellers_halfar.jld2" soln
┌ Warning: Attempting to store SciMLBase.ODEFunction{true, SciMLBase.AutoSpecialize, Main.var"#f#44"{PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 11}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 11}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 11}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 11}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 11}}}, SparseArrays.SparseMatrixCSC{Float64, Int32}, SparseArrays.SparseMatrixCSC{Float64, Int32}, SparseArrays.SparseMatrixCSC{Float64, Int64}, Main.var"#26#35"{Main.var"#25#34"}, Main.var"#26#35"{Main.var"#18#27"{CombinatorialSpaces.DiscreteExteriorCalculus.EmbeddedDeltaDualComplex1D{Bool, Float64, GeometryBasics.Point{2, Float64}}}}, Decapodes.var"#37#38"{SparseArrays.SparseMatrixCSC{Float64, Int32}}, SparseArrays.SparseMatrixCSC{Float64, Int32}, SparseArrays.SparseMatrixCSC{Int8, Int32}}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing, Nothing, Nothing, Nothing, Nothing}.
+[ Info: Done

We can save the solution file to examine later.

@save "budyko_sellers_halfar.jld2" soln
┌ Warning: Attempting to store SciMLBase.ODEFunction{true, SciMLBase.AutoSpecialize, Main.var"#f#44"{PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 11}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 11}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 11}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 11}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 11}}}, SparseArrays.SparseMatrixCSC{Float64, Int32}, SparseArrays.SparseMatrixCSC{Float64, Int32}, SparseArrays.SparseMatrixCSC{Float64, Int64}, Main.var"#26#35"{Main.var"#25#34"}, Main.var"#26#35"{Main.var"#18#27"{CombinatorialSpaces.DiscreteExteriorCalculus.EmbeddedDeltaDualComplex1D{Bool, Float64, GeometryBasics.Point{2, Float64}}}}, Decapodes.var"#37#38"{SparseArrays.SparseMatrixCSC{Float64, Int32}}, SparseArrays.SparseMatrixCSC{Float64, Int32}, SparseArrays.SparseMatrixCSC{Int8, Int32}}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing, Nothing, Nothing}.
 │ JLD2 only stores functions by name.
 │  This may not be useful for anonymous functions.
-└ @ JLD2 ~/.julia/packages/JLD2/IyyZz/src/data/writing_datatypes.jl:447
+└ @ JLD2 ~/.julia/packages/JLD2/NKGUi/src/data/writing_datatypes.jl:447
 ┌ Warning: Attempting to store Main.var"#f#44"{PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 11}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 11}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 11}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 11}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 11}}}, SparseArrays.SparseMatrixCSC{Float64, Int32}, SparseArrays.SparseMatrixCSC{Float64, Int32}, SparseArrays.SparseMatrixCSC{Float64, Int64}, Main.var"#26#35"{Main.var"#25#34"}, Main.var"#26#35"{Main.var"#18#27"{CombinatorialSpaces.DiscreteExteriorCalculus.EmbeddedDeltaDualComplex1D{Bool, Float64, GeometryBasics.Point{2, Float64}}}}, Decapodes.var"#37#38"{SparseArrays.SparseMatrixCSC{Float64, Int32}}, SparseArrays.SparseMatrixCSC{Float64, Int32}, SparseArrays.SparseMatrixCSC{Int8, Int32}}.
 │ JLD2 only stores functions by name.
 │  This may not be useful for anonymous functions.
-└ @ JLD2 ~/.julia/packages/JLD2/IyyZz/src/data/writing_datatypes.jl:447
+└ @ JLD2 ~/.julia/packages/JLD2/NKGUi/src/data/writing_datatypes.jl:447
 ┌ Warning: Attempting to store Main.var"#26#35"{Main.var"#25#34"}.
 │ JLD2 only stores functions by name.
 │  This may not be useful for anonymous functions.
-└ @ JLD2 ~/.julia/packages/JLD2/IyyZz/src/data/writing_datatypes.jl:447
+└ @ JLD2 ~/.julia/packages/JLD2/NKGUi/src/data/writing_datatypes.jl:447
 ┌ Warning: Attempting to store Main.var"#25#34".
 │ JLD2 only stores functions by name.
 │  This may not be useful for anonymous functions.
-└ @ JLD2 ~/.julia/packages/JLD2/IyyZz/src/data/writing_datatypes.jl:447
+└ @ JLD2 ~/.julia/packages/JLD2/NKGUi/src/data/writing_datatypes.jl:447
 ┌ Warning: Attempting to store Main.var"#18#27"{CombinatorialSpaces.DiscreteExteriorCalculus.EmbeddedDeltaDualComplex1D{Bool, Float64, GeometryBasics.Point{2, Float64}}}.
 │ JLD2 only stores functions by name.
 │  This may not be useful for anonymous functions.
-└ @ JLD2 ~/.julia/packages/JLD2/IyyZz/src/data/writing_datatypes.jl:447
+└ @ JLD2 ~/.julia/packages/JLD2/NKGUi/src/data/writing_datatypes.jl:447
 ┌ Warning: Attempting to store Main.var"#26#35"{Main.var"#18#27"{CombinatorialSpaces.DiscreteExteriorCalculus.EmbeddedDeltaDualComplex1D{Bool, Float64, GeometryBasics.Point{2, Float64}}}}.
 │ JLD2 only stores functions by name.
 │  This may not be useful for anonymous functions.
-└ @ JLD2 ~/.julia/packages/JLD2/IyyZz/src/data/writing_datatypes.jl:447
+└ @ JLD2 ~/.julia/packages/JLD2/NKGUi/src/data/writing_datatypes.jl:447
 ┌ Warning: Attempting to store Decapodes.var"#37#38"{SparseArrays.SparseMatrixCSC{Float64, Int32}}.
 │ JLD2 only stores functions by name.
 │  This may not be useful for anonymous functions.
-└ @ JLD2 ~/.julia/packages/JLD2/IyyZz/src/data/writing_datatypes.jl:447
-┌ Warning: Attempting to store SciMLBase.ODEFunction{true, SciMLBase.AutoSpecialize, Main.var"#f#44"{PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 11}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 11}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 11}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 11}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 11}}}, SparseArrays.SparseMatrixCSC{Float64, Int32}, SparseArrays.SparseMatrixCSC{Float64, Int32}, SparseArrays.SparseMatrixCSC{Float64, Int64}, Main.var"#26#35"{Main.var"#25#34"}, Main.var"#26#35"{Main.var"#18#27"{CombinatorialSpaces.DiscreteExteriorCalculus.EmbeddedDeltaDualComplex1D{Bool, Float64, GeometryBasics.Point{2, Float64}}}}, Decapodes.var"#37#38"{SparseArrays.SparseMatrixCSC{Float64, Int32}}, SparseArrays.SparseMatrixCSC{Float64, Int32}, SparseArrays.SparseMatrixCSC{Int8, Int32}}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing, Nothing, Nothing, Nothing, Nothing}.
+└ @ JLD2 ~/.julia/packages/JLD2/NKGUi/src/data/writing_datatypes.jl:447
+┌ Warning: Attempting to store SciMLBase.ODEFunction{true, SciMLBase.AutoSpecialize, Main.var"#f#44"{PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 11}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 11}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 11}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 11}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 11}}}, SparseArrays.SparseMatrixCSC{Float64, Int32}, SparseArrays.SparseMatrixCSC{Float64, Int32}, SparseArrays.SparseMatrixCSC{Float64, Int64}, Main.var"#26#35"{Main.var"#25#34"}, Main.var"#26#35"{Main.var"#18#27"{CombinatorialSpaces.DiscreteExteriorCalculus.EmbeddedDeltaDualComplex1D{Bool, Float64, GeometryBasics.Point{2, Float64}}}}, Decapodes.var"#37#38"{SparseArrays.SparseMatrixCSC{Float64, Int32}}, SparseArrays.SparseMatrixCSC{Float64, Int32}, SparseArrays.SparseMatrixCSC{Int8, Int32}}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing, Nothing, Nothing}.
 │ JLD2 only stores functions by name.
 │  This may not be useful for anonymous functions.
-└ @ JLD2 ~/.julia/packages/JLD2/IyyZz/src/data/writing_datatypes.jl:447
+└ @ JLD2 ~/.julia/packages/JLD2/NKGUi/src/data/writing_datatypes.jl:447
 ┌ Warning: Attempting to store Main.var"#f#44"{PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 11}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 11}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 11}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 11}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 11}}}, SparseArrays.SparseMatrixCSC{Float64, Int32}, SparseArrays.SparseMatrixCSC{Float64, Int32}, SparseArrays.SparseMatrixCSC{Float64, Int64}, Main.var"#26#35"{Main.var"#25#34"}, Main.var"#26#35"{Main.var"#18#27"{CombinatorialSpaces.DiscreteExteriorCalculus.EmbeddedDeltaDualComplex1D{Bool, Float64, GeometryBasics.Point{2, Float64}}}}, Decapodes.var"#37#38"{SparseArrays.SparseMatrixCSC{Float64, Int32}}, SparseArrays.SparseMatrixCSC{Float64, Int32}, SparseArrays.SparseMatrixCSC{Int8, Int32}}.
 │ JLD2 only stores functions by name.
 │  This may not be useful for anonymous functions.
-└ @ JLD2 ~/.julia/packages/JLD2/IyyZz/src/data/writing_datatypes.jl:447
+└ @ JLD2 ~/.julia/packages/JLD2/NKGUi/src/data/writing_datatypes.jl:447
 ┌ Warning: Attempting to store Main.var"#26#35"{Main.var"#25#34"}.
 │ JLD2 only stores functions by name.
 │  This may not be useful for anonymous functions.
-└ @ JLD2 ~/.julia/packages/JLD2/IyyZz/src/data/writing_datatypes.jl:447
+└ @ JLD2 ~/.julia/packages/JLD2/NKGUi/src/data/writing_datatypes.jl:447
 ┌ Warning: Attempting to store Main.var"#25#34".
 │ JLD2 only stores functions by name.
 │  This may not be useful for anonymous functions.
-└ @ JLD2 ~/.julia/packages/JLD2/IyyZz/src/data/writing_datatypes.jl:447
-┌ Warning: Attempting to store SciMLBase.ODEFunction{true, SciMLBase.AutoSpecialize, Main.var"#f#44"{PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 11}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 11}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 11}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 11}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 11}}}, SparseArrays.SparseMatrixCSC{Float64, Int32}, SparseArrays.SparseMatrixCSC{Float64, Int32}, SparseArrays.SparseMatrixCSC{Float64, Int64}, Main.var"#26#35"{Main.var"#25#34"}, Main.var"#26#35"{Main.var"#18#27"{CombinatorialSpaces.DiscreteExteriorCalculus.EmbeddedDeltaDualComplex1D{Bool, Float64, GeometryBasics.Point{2, Float64}}}}, Decapodes.var"#37#38"{SparseArrays.SparseMatrixCSC{Float64, Int32}}, SparseArrays.SparseMatrixCSC{Float64, Int32}, SparseArrays.SparseMatrixCSC{Int8, Int32}}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing, Nothing, Nothing, Nothing, Nothing}.
+└ @ JLD2 ~/.julia/packages/JLD2/NKGUi/src/data/writing_datatypes.jl:447
+┌ Warning: Attempting to store SciMLBase.ODEFunction{true, SciMLBase.AutoSpecialize, Main.var"#f#44"{PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 11}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 11}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 11}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 11}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 11}}}, SparseArrays.SparseMatrixCSC{Float64, Int32}, SparseArrays.SparseMatrixCSC{Float64, Int32}, SparseArrays.SparseMatrixCSC{Float64, Int64}, Main.var"#26#35"{Main.var"#25#34"}, Main.var"#26#35"{Main.var"#18#27"{CombinatorialSpaces.DiscreteExteriorCalculus.EmbeddedDeltaDualComplex1D{Bool, Float64, GeometryBasics.Point{2, Float64}}}}, Decapodes.var"#37#38"{SparseArrays.SparseMatrixCSC{Float64, Int32}}, SparseArrays.SparseMatrixCSC{Float64, Int32}, SparseArrays.SparseMatrixCSC{Int8, Int32}}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing, Nothing, Nothing}.
 │ JLD2 only stores functions by name.
 │  This may not be useful for anonymous functions.
-└ @ JLD2 ~/.julia/packages/JLD2/IyyZz/src/data/writing_datatypes.jl:447
+└ @ JLD2 ~/.julia/packages/JLD2/NKGUi/src/data/writing_datatypes.jl:447
 ┌ Warning: Attempting to store Main.var"#f#44"{PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 11}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 11}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 11}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 11}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 11}}}, SparseArrays.SparseMatrixCSC{Float64, Int32}, SparseArrays.SparseMatrixCSC{Float64, Int32}, SparseArrays.SparseMatrixCSC{Float64, Int64}, Main.var"#26#35"{Main.var"#25#34"}, Main.var"#26#35"{Main.var"#18#27"{CombinatorialSpaces.DiscreteExteriorCalculus.EmbeddedDeltaDualComplex1D{Bool, Float64, GeometryBasics.Point{2, Float64}}}}, Decapodes.var"#37#38"{SparseArrays.SparseMatrixCSC{Float64, Int32}}, SparseArrays.SparseMatrixCSC{Float64, Int32}, SparseArrays.SparseMatrixCSC{Int8, Int32}}.
 │ JLD2 only stores functions by name.
 │  This may not be useful for anonymous functions.
-└ @ JLD2 ~/.julia/packages/JLD2/IyyZz/src/data/writing_datatypes.jl:447
+└ @ JLD2 ~/.julia/packages/JLD2/NKGUi/src/data/writing_datatypes.jl:447
 ┌ Warning: Attempting to store Main.var"#26#35"{Main.var"#25#34"}.
 │ JLD2 only stores functions by name.
 │  This may not be useful for anonymous functions.
-└ @ JLD2 ~/.julia/packages/JLD2/IyyZz/src/data/writing_datatypes.jl:447
+└ @ JLD2 ~/.julia/packages/JLD2/NKGUi/src/data/writing_datatypes.jl:447
 ┌ Warning: Attempting to store Main.var"#25#34".
 │ JLD2 only stores functions by name.
 │  This may not be useful for anonymous functions.
-└ @ JLD2 ~/.julia/packages/JLD2/IyyZz/src/data/writing_datatypes.jl:447
+└ @ JLD2 ~/.julia/packages/JLD2/NKGUi/src/data/writing_datatypes.jl:447
 ┌ Warning: Attempting to store Main.var"#26#35"{Main.var"#25#34"}.
 │ JLD2 only stores functions by name.
 │  This may not be useful for anonymous functions.
-└ @ JLD2 ~/.julia/packages/JLD2/IyyZz/src/data/writing_datatypes.jl:447
+└ @ JLD2 ~/.julia/packages/JLD2/NKGUi/src/data/writing_datatypes.jl:447
 ┌ Warning: Attempting to store Main.var"#25#34".
 │ JLD2 only stores functions by name.
 │  This may not be useful for anonymous functions.
-└ @ JLD2 ~/.julia/packages/JLD2/IyyZz/src/data/writing_datatypes.jl:447
+└ @ JLD2 ~/.julia/packages/JLD2/NKGUi/src/data/writing_datatypes.jl:447
 ┌ Warning: Attempting to store Main.var"#f#44"{PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 11}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 11}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 11}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 11}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 11}}}, SparseArrays.SparseMatrixCSC{Float64, Int32}, SparseArrays.SparseMatrixCSC{Float64, Int32}, SparseArrays.SparseMatrixCSC{Float64, Int64}, Main.var"#26#35"{Main.var"#25#34"}, Main.var"#26#35"{Main.var"#18#27"{CombinatorialSpaces.DiscreteExteriorCalculus.EmbeddedDeltaDualComplex1D{Bool, Float64, GeometryBasics.Point{2, Float64}}}}, Decapodes.var"#37#38"{SparseArrays.SparseMatrixCSC{Float64, Int32}}, SparseArrays.SparseMatrixCSC{Float64, Int32}, SparseArrays.SparseMatrixCSC{Int8, Int32}}.
 │ JLD2 only stores functions by name.
 │  This may not be useful for anonymous functions.
-└ @ JLD2 ~/.julia/packages/JLD2/IyyZz/src/data/writing_datatypes.jl:447
+└ @ JLD2 ~/.julia/packages/JLD2/NKGUi/src/data/writing_datatypes.jl:447
 ┌ Warning: Attempting to store Main.var"#26#35"{Main.var"#25#34"}.
 │ JLD2 only stores functions by name.
 │  This may not be useful for anonymous functions.
-└ @ JLD2 ~/.julia/packages/JLD2/IyyZz/src/data/writing_datatypes.jl:447
+└ @ JLD2 ~/.julia/packages/JLD2/NKGUi/src/data/writing_datatypes.jl:447
 ┌ Warning: Attempting to store Main.var"#25#34".
 │ JLD2 only stores functions by name.
 │  This may not be useful for anonymous functions.
-└ @ JLD2 ~/.julia/packages/JLD2/IyyZz/src/data/writing_datatypes.jl:447
-┌ Warning: Attempting to store SciMLBase.ODEFunction{true, SciMLBase.AutoSpecialize, Main.var"#f#44"{PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 11}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 11}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 11}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 11}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 11}}}, SparseArrays.SparseMatrixCSC{Float64, Int32}, SparseArrays.SparseMatrixCSC{Float64, Int32}, SparseArrays.SparseMatrixCSC{Float64, Int64}, Main.var"#26#35"{Main.var"#25#34"}, Main.var"#26#35"{Main.var"#18#27"{CombinatorialSpaces.DiscreteExteriorCalculus.EmbeddedDeltaDualComplex1D{Bool, Float64, GeometryBasics.Point{2, Float64}}}}, Decapodes.var"#37#38"{SparseArrays.SparseMatrixCSC{Float64, Int32}}, SparseArrays.SparseMatrixCSC{Float64, Int32}, SparseArrays.SparseMatrixCSC{Int8, Int32}}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing, Nothing, Nothing, Nothing, Nothing}.
+└ @ JLD2 ~/.julia/packages/JLD2/NKGUi/src/data/writing_datatypes.jl:447
+┌ Warning: Attempting to store SciMLBase.ODEFunction{true, SciMLBase.AutoSpecialize, Main.var"#f#44"{PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 11}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 11}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 11}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 11}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 11}}}, SparseArrays.SparseMatrixCSC{Float64, Int32}, SparseArrays.SparseMatrixCSC{Float64, Int32}, SparseArrays.SparseMatrixCSC{Float64, Int64}, Main.var"#26#35"{Main.var"#25#34"}, Main.var"#26#35"{Main.var"#18#27"{CombinatorialSpaces.DiscreteExteriorCalculus.EmbeddedDeltaDualComplex1D{Bool, Float64, GeometryBasics.Point{2, Float64}}}}, Decapodes.var"#37#38"{SparseArrays.SparseMatrixCSC{Float64, Int32}}, SparseArrays.SparseMatrixCSC{Float64, Int32}, SparseArrays.SparseMatrixCSC{Int8, Int32}}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing, Nothing, Nothing}.
 │ JLD2 only stores functions by name.
 │  This may not be useful for anonymous functions.
-└ @ JLD2 ~/.julia/packages/JLD2/IyyZz/src/data/writing_datatypes.jl:447
+└ @ JLD2 ~/.julia/packages/JLD2/NKGUi/src/data/writing_datatypes.jl:447
 ┌ Warning: Attempting to store Main.var"#f#44"{PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 11}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 11}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 11}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 11}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 11}}}, SparseArrays.SparseMatrixCSC{Float64, Int32}, SparseArrays.SparseMatrixCSC{Float64, Int32}, SparseArrays.SparseMatrixCSC{Float64, Int64}, Main.var"#26#35"{Main.var"#25#34"}, Main.var"#26#35"{Main.var"#18#27"{CombinatorialSpaces.DiscreteExteriorCalculus.EmbeddedDeltaDualComplex1D{Bool, Float64, GeometryBasics.Point{2, Float64}}}}, Decapodes.var"#37#38"{SparseArrays.SparseMatrixCSC{Float64, Int32}}, SparseArrays.SparseMatrixCSC{Float64, Int32}, SparseArrays.SparseMatrixCSC{Int8, Int32}}.
 │ JLD2 only stores functions by name.
 │  This may not be useful for anonymous functions.
-└ @ JLD2 ~/.julia/packages/JLD2/IyyZz/src/data/writing_datatypes.jl:447
+└ @ JLD2 ~/.julia/packages/JLD2/NKGUi/src/data/writing_datatypes.jl:447
 ┌ Warning: Attempting to store Main.var"#26#35"{Main.var"#25#34"}.
 │ JLD2 only stores functions by name.
 │  This may not be useful for anonymous functions.
-└ @ JLD2 ~/.julia/packages/JLD2/IyyZz/src/data/writing_datatypes.jl:447
+└ @ JLD2 ~/.julia/packages/JLD2/NKGUi/src/data/writing_datatypes.jl:447
 ┌ Warning: Attempting to store Main.var"#25#34".
 │ JLD2 only stores functions by name.
 │  This may not be useful for anonymous functions.
-└ @ JLD2 ~/.julia/packages/JLD2/IyyZz/src/data/writing_datatypes.jl:447

Visualize

Quickly examine the final conditions for temperature:

lines(map(x -> x[1], point(s)), soln(tₑ).Tₛ)
Example block output

Quickly examine the final conditions for ice height:

lines(map(x -> x[1], point(s)), soln(tₑ).halfar_dynamics_h)
Example block output

BSH_Temperature

BSH_IceHeight

[ Info: Page built in 61 seconds.
-[ Info: This page was last built at 2024-10-21T19:21:36.857.
+└ @ JLD2 ~/.julia/packages/JLD2/NKGUi/src/data/writing_datatypes.jl:447

Visualize

Quickly examine the final conditions for temperature:

lines(map(x -> x[1], point(s)), soln(tₑ).Tₛ)
Example block output

Quickly examine the final conditions for ice height:

lines(map(x -> x[1], point(s)), soln(tₑ).halfar_dynamics_h)
Example block output

BSH_Temperature

BSH_IceHeight

[ Info: Page built in 58 seconds.
+[ Info: This page was last built at 2024-12-04T03:32:50.643.
diff --git a/dev/canon/index.html b/dev/canon/index.html index 6cc66a41..6494692e 100644 --- a/dev/canon/index.html +++ b/dev/canon/index.html @@ -3,37 +3,37 @@ (D, cosϕᵖ, cosϕᵈ)::Constant -HT == (D ./ cosϕᵖ) .* (⋆)(d(cosϕᵈ .* (⋆)(d(Tₛ))))source
Decapodes.Canon.Physics.jko_schemeConstant

Jordan-Kinderlehrer-Otto

Source

Jordan, R., Kinderlehrer, D., & Otto, F. (1998). The Variational Formulation of the Fokker–Planck Equation. In SIAM Journal on Mathematical Analysis (Vol. 29, Issue 1, pp. 1–17). Society for Industrial & Applied Mathematics (SIAM). https://doi.org/10.1137/s0036141096303359

Model

(ρ, Ψ)::Form0
+w == (1 - σ(h)) ∧ᵖᵈ₀₁ 𝐮
source
Decapodes.Canon.Physics.jko_schemeConstant

Jordan-Kinderlehrer-Otto

Source

Jordan, R., Kinderlehrer, D., & Otto, F. (1998). The Variational Formulation of the Fokker–Planck Equation. In SIAM Journal on Mathematical Analysis (Vol. 29, Issue 1, pp. 1–17). Society for Industrial & Applied Mathematics (SIAM). https://doi.org/10.1137/s0036141096303359

Model

(ρ, Ψ)::Form0
               
 β⁻¹::Constant
               
-∂ₜ(ρ) == (∘(⋆, d, ⋆))(d(Ψ) ∧ ρ) + β⁻¹ * Δ(ρ)
source
Decapodes.Canon.Physics.mohamed_flowConstant

Mohamed Eq. 10, N2

Source

Model

(𝐮, w)::DualForm1
               
 (P, 𝑝ᵈ)::DualForm0
               
@@ -41,7 +41,7 @@
               
 𝑝ᵈ == P + 0.5 * ι₁₁(w, w)
               
-∂ₜ(𝐮) == μ * (∘(d, ⋆, d, ⋆))(w) + -1 * (⋆₁⁻¹)(w ∧ᵈᵖ₁₀ (⋆)(d(w))) + d(𝑝ᵈ)
source
Decapodes.Canon.Physics.momentumConstant

Momentum

Source

Model

(f, b)::Form0
               
 (v, V, g, Fᵥ, uˢ, v_up)::Form1
               
@@ -53,7 +53,7 @@
               
 v_up == (((((((-1 * L(v, v) - L(V, v)) - L(v, V)) - f ∧ v) - (∘(⋆, d, ⋆))(uˢ) ∧ v) - d(p)) + b ∧ g) - (∘(⋆, d, ⋆))(τ)) + uˢ̇ + Fᵥ
               
-uˢ̇ == force(U)
source
Decapodes.Canon.Physics.navier_stokesConstant

Navier-Stokes

Source

Partial differential equations which describe the motion of viscous fluid surfaces.

Model

(V, V̇, G)::Form1{X}
               
 (ρ, ṗ, p)::Form0{X}
               
@@ -63,7 +63,7 @@
               
 ṗ == neg₀((⋆₀⁻¹)(L₀(V, (⋆₀)(p))))
               
-∂ₜ(p) == ṗ
source
Decapodes.Canon.Physics.oscillatorConstant

Oscillator

Source

Equation governing the motion of an object whose acceleration is negatively-proportional to its position.

Model

X::Form0
               
 V::Form0
               
@@ -71,7 +71,7 @@
               
 ∂ₜ(X) == V
               
-∂ₜ(V) == -k * X
source
Decapodes.Canon.Physics.poiseuilleConstant

Poiseuille

Source

A relation between the pressure drop in an incompressible and Newtownian fluid in laminar flow flowing through a long cylindrical pipe.

Model

P::Form0
+∂ₜ(V) == -k * X
source
Decapodes.Canon.Physics.poiseuilleConstant

Poiseuille

Source

A relation between the pressure drop in an incompressible and Newtownian fluid in laminar flow flowing through a long cylindrical pipe.

Model

P::Form0
               
 q::Form1
               
@@ -83,7 +83,7 @@
               
 ∂ₜ(q) == q̇
               
-q̇ == μ̃ * ∂q(Δq) + ∇P + R * q
source

Chemistry

Chemistry

Biology

Biology

Decapodes.Canon.Biology.klausmeier_2aConstant

Klausmeier (Eq. 2a)

Source

Klausmeier, CA. “Regular and irregular patterns in semiarid vegetation.” Science (New York, N.Y.) vol. 284,5421 (1999): 1826-8. doi:10.1126/science.284.5421.1826

Model

(n, w)::DualForm0
+∂ₜ(w) == ((a - w) - w * n ^ 2) + ν * Δ(w)
source
Decapodes.Canon.Biology.klausmeier_2aConstant

Klausmeier (Eq. 2a)

Source

Klausmeier, CA. “Regular and irregular patterns in semiarid vegetation.” Science (New York, N.Y.) vol. 284,5421 (1999): 1826-8. doi:10.1126/science.284.5421.1826

Model

(n, w)::DualForm0
               
 dX::Form1
               
 (a, ν)::Constant
               
-∂ₜ(w) == ((a - w) - w * n ^ 2) + ν * ℒ(dX, w)
source
Decapodes.Canon.Biology.lejeuneConstant

Lejeune

Source

Lejeune, O., & Tlidi, M. (1999). A Model for the Explanation of Vegetation Stripes (Tiger Bush). Journal of Vegetation Science, 10(2), 201–208. https://doi.org/10.2307/3237141

Model

ρ::Form0
+∂ₜ(n) == (w * n ^ 2 - m * n) + Δ(n)
source
Decapodes.Canon.Biology.lejeuneConstant

Lejeune

Source

Lejeune, O., & Tlidi, M. (1999). A Model for the Explanation of Vegetation Stripes (Tiger Bush). Journal of Vegetation Science, 10(2), 201–208. https://doi.org/10.2307/3237141

Model

ρ::Form0
               
 (μ, Λ, L)::Constant
               
-∂ₜ(ρ) == (ρ * (((1 - μ) + (Λ - 1) * ρ) - ρ * ρ) + 0.5 * (L * L - ρ) * Δ(ρ)) - 0.125 * ρ * Δ(ρ) * Δ(ρ)
source

Environment

Environment

Decapodes.Canon.Environment.glenConstant

Glens Law

Source

Nye, J. F. (1957). The Distribution of Stress and Velocity in Glaciers and Ice-Sheets. Proceedings of the Royal Society of London. Series A, Mathematical and Physical Sciences, 239(1216), 113–133. http://www.jstor.org/stable/100184

Model

Γ::Form1
+b == g * (α * T - β * S)
source
Decapodes.Canon.Environment.glenConstant

Glens Law

Source

Nye, J. F. (1957). The Distribution of Stress and Velocity in Glaciers and Ice-Sheets. Proceedings of the Royal Society of London. Series A, Mathematical and Physical Sciences, 239(1216), 113–133. http://www.jstor.org/stable/100184

Model

Γ::Form1
               
 (A, ρ, g, n)::Constant
               
-Γ == (2 / (n + 2)) * A * (ρ * g) ^ n
source
Decapodes.Canon.Environment.halfar_eq2Constant

Halfar (Eq. 2)

Source

Halfar, P. (1981), On the dynamics of the ice sheets, J. Geophys. Res., 86(C11), 11065–11072, doi:10.1029/JC086iC11p11065

Model

h::Form0
+Γ == (2 / (n + 2)) * A * (ρ * g) ^ n
source
Decapodes.Canon.Environment.halfar_eq2Constant

Halfar (Eq. 2)

Source

Halfar, P. (1981), On the dynamics of the ice sheets, J. Geophys. Res., 86(C11), 11065–11072, doi:10.1029/JC086iC11p11065

Model

h::Form0
               
 Γ::Form1
               
 n::Constant
               
-∂ₜ(h) == (∘(⋆, d, ⋆))(((Γ * d(h)) ∧ mag(♯(d(h))) ^ (n - 1)) ∧ h ^ (n + 2))
source
[ Info: Page built in 0 seconds.
-[ Info: This page was last built at 2024-10-21T19:21:36.922.
+A == avg₀₁(5.8282 * 10 ^ (-0.236Tₛ) * 1.65e7)source
[ Info: Page built in 0 seconds.
+[ Info: This page was last built at 2024-12-04T03:32:50.696.
diff --git a/dev/ch/cahn-hilliard/index.html b/dev/ch/cahn-hilliard/index.html index c2c925a8..8cdc91a6 100644 --- a/dev/ch/cahn-hilliard/index.html +++ b/dev/ch/cahn-hilliard/index.html @@ -32,4 +32,4 @@ prob = ODEProblem(fₘ, u₀, (0, tₑ), constants) soln = solve(prob, Tsit5(), saveat=0.1); soln.retcode
ReturnCode.Success = 1

And we can see the result as a gif.

"CahnHilliardRes"

[ Info: Page built in 200 seconds.
-[ Info: This page was last built at 2024-10-21T19:24:56.810.
+[ Info: This page was last built at 2024-12-04T03:36:10.907. diff --git a/dev/cism/cism/index.html b/dev/cism/cism/index.html index 978354f5..244fa2d1 100644 --- a/dev/cism/cism/index.html +++ b/dev/cism/cism/index.html @@ -204,51 +204,51 @@ [ Info: Done

We can benchmark the compiled simulation with @benchmarkable. This macro runs many samples of the simulation function so we get an accurate estimate of the simulation time. The simulation time is quite fast compared to the CISM benchmarks. These results are run automatically via GitHub Actions as part of our docs build, which is not optimized for numerical simulations.

# Time the simulation
 
 b = @benchmarkable solve(prob, Tsit5(), saveat=0.1)
-c = run(b)
BenchmarkTools.Trial: 165 samples with 1 evaluation.
- Range (minmax):  26.135 ms51.823 ms   GC (min … max): 0.00% … 0.00%
- Time  (median):     29.210 ms               GC (median):    9.77%
- Time  (mean ± σ):   29.901 ms ±  4.047 ms   GC (mean ± σ):  9.14% ± 4.98%
+c = run(b)
BenchmarkTools.Trial: 158 samples with 1 evaluation.
+ Range (minmax):  26.674 ms54.598 ms   GC (min … max):  0.00% … 0.00%
+ Time  (median):     30.643 ms               GC (median):    11.66%
+ Time  (mean ± σ):   31.306 ms ±  4.727 ms   GC (mean ± σ):  10.27% ± 5.38%
 
-  ▃▂     ▆▂                                                 
-  ██▆▄▄▁▁██▇▄▁▁▁▁▁▁▄▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▄▁▁▁▄▁▁▁▁▁▁▁▄▁▁▄▁▄▁▁▁▄▄ ▄
-  26.1 ms      Histogram: log(frequency) by time      47.8 ms <
+  ▃▂     ▂▇                                                  
+  ██▁▄▁▁███▁▄▁▁▁▁▁▁▁▁▁▄▁▁▁▁▁▁▁▁▁▁▄▁▁▁▁▁▁▄▁▁▁▄▁▁▄▁▄▁▁▁▁▁▁▄▄ ▄
+  26.7 ms      Histogram: log(frequency) by time      52.7 ms <
 
  Memory estimate: 71.29 MiB, allocs estimate: 11057.

Here we save the solution information to a file.

@save "ice_dynamics2D.jld2" soln
┌ Warning: Attempting to store Main.var"#10#13"{Main.var"#8#11"}.
 │ JLD2 only stores functions by name.
 │  This may not be useful for anonymous functions.
-└ @ JLD2 ~/.julia/packages/JLD2/IyyZz/src/data/writing_datatypes.jl:447
+└ @ JLD2 ~/.julia/packages/JLD2/NKGUi/src/data/writing_datatypes.jl:447
 ┌ Warning: Attempting to store Main.var"#8#11".
 │ JLD2 only stores functions by name.
 │  This may not be useful for anonymous functions.
-└ @ JLD2 ~/.julia/packages/JLD2/IyyZz/src/data/writing_datatypes.jl:447
+└ @ JLD2 ~/.julia/packages/JLD2/NKGUi/src/data/writing_datatypes.jl:447
 ┌ Warning: Attempting to store Main.var"#9#12"{SparseArrays.SparseMatrixCSC{GeometryBasics.Point{3, Float64}, Int64}}.
 │ JLD2 only stores functions by name.
 │  This may not be useful for anonymous functions.
-└ @ JLD2 ~/.julia/packages/JLD2/IyyZz/src/data/writing_datatypes.jl:447
+└ @ JLD2 ~/.julia/packages/JLD2/NKGUi/src/data/writing_datatypes.jl:447
 ┌ Warning: Attempting to store Main.var"#10#13"{Main.var"#9#12"{SparseArrays.SparseMatrixCSC{GeometryBasics.Point{3, Float64}, Int64}}}.
 │ JLD2 only stores functions by name.
 │  This may not be useful for anonymous functions.
-└ @ JLD2 ~/.julia/packages/JLD2/IyyZz/src/data/writing_datatypes.jl:447
+└ @ JLD2 ~/.julia/packages/JLD2/NKGUi/src/data/writing_datatypes.jl:447
 ┌ Warning: Attempting to store Decapodes.var"#37#38"{SparseArrays.SparseMatrixCSC{Float64, Int32}}.
 │ JLD2 only stores functions by name.
 │  This may not be useful for anonymous functions.
-└ @ JLD2 ~/.julia/packages/JLD2/IyyZz/src/data/writing_datatypes.jl:447
+└ @ JLD2 ~/.julia/packages/JLD2/NKGUi/src/data/writing_datatypes.jl:447
 ┌ Warning: Attempting to store Main.var"#f#18"{PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, SparseArrays.SparseMatrixCSC{Float64, Int32}, Main.var"#10#13"{Main.var"#8#11"}, Main.var"#10#13"{Main.var"#9#12"{SparseArrays.SparseMatrixCSC{GeometryBasics.Point{3, Float64}, Int64}}}, Decapodes.var"#37#38"{SparseArrays.SparseMatrixCSC{Float64, Int32}}, SparseArrays.SparseMatrixCSC{Int8, Int32}}.
 │ JLD2 only stores functions by name.
 │  This may not be useful for anonymous functions.
-└ @ JLD2 ~/.julia/packages/JLD2/IyyZz/src/data/writing_datatypes.jl:447
+└ @ JLD2 ~/.julia/packages/JLD2/NKGUi/src/data/writing_datatypes.jl:447
 ┌ Warning: Attempting to store Main.var"#10#13"{Main.var"#8#11"}.
 │ JLD2 only stores functions by name.
 │  This may not be useful for anonymous functions.
-└ @ JLD2 ~/.julia/packages/JLD2/IyyZz/src/data/writing_datatypes.jl:447
+└ @ JLD2 ~/.julia/packages/JLD2/NKGUi/src/data/writing_datatypes.jl:447
 ┌ Warning: Attempting to store Main.var"#8#11".
 │ JLD2 only stores functions by name.
 │  This may not be useful for anonymous functions.
-└ @ JLD2 ~/.julia/packages/JLD2/IyyZz/src/data/writing_datatypes.jl:447
-┌ Warning: Attempting to store SciMLBase.ODEFunction{true, SciMLBase.AutoSpecialize, Main.var"#f#18"{PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, SparseArrays.SparseMatrixCSC{Float64, Int32}, Main.var"#10#13"{Main.var"#8#11"}, Main.var"#10#13"{Main.var"#9#12"{SparseArrays.SparseMatrixCSC{GeometryBasics.Point{3, Float64}, Int64}}}, Decapodes.var"#37#38"{SparseArrays.SparseMatrixCSC{Float64, Int32}}, SparseArrays.SparseMatrixCSC{Int8, Int32}}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing, Nothing, Nothing, Nothing, Nothing}.
+└ @ JLD2 ~/.julia/packages/JLD2/NKGUi/src/data/writing_datatypes.jl:447
+┌ Warning: Attempting to store SciMLBase.ODEFunction{true, SciMLBase.AutoSpecialize, Main.var"#f#18"{PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, SparseArrays.SparseMatrixCSC{Float64, Int32}, Main.var"#10#13"{Main.var"#8#11"}, Main.var"#10#13"{Main.var"#9#12"{SparseArrays.SparseMatrixCSC{GeometryBasics.Point{3, Float64}, Int64}}}, Decapodes.var"#37#38"{SparseArrays.SparseMatrixCSC{Float64, Int32}}, SparseArrays.SparseMatrixCSC{Int8, Int32}}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing, Nothing, Nothing}.
 │ JLD2 only stores functions by name.
 │  This may not be useful for anonymous functions.
-└ @ JLD2 ~/.julia/packages/JLD2/IyyZz/src/data/writing_datatypes.jl:447

We recall that these dynamics are of the "shallow slope" and "shallow ice" approximations. So, at the edge of our parabolic dome of ice, we expect increased error as the slope increases. On the interior of the dome, we expect the dynamics to match more closely that given by the analytic model. We will see that the CISM results likewise accumulate error in the same neighborhood.

"Halfar Small Ice Approximation Quote"

# Plot the final conditions
+└ @ JLD2 ~/.julia/packages/JLD2/NKGUi/src/data/writing_datatypes.jl:447

We recall that these dynamics are of the "shallow slope" and "shallow ice" approximations. So, at the edge of our parabolic dome of ice, we expect increased error as the slope increases. On the interior of the dome, we expect the dynamics to match more closely that given by the analytic model. We will see that the CISM results likewise accumulate error in the same neighborhood.

"Halfar Small Ice Approximation Quote"

# Plot the final conditions
 function plot_final_conditions()
   fig = Figure()
   ax = CairoMakie.Axis(fig[1,1],
@@ -305,5 +305,5 @@
   record(fig, "ice_dynamics_cism.gif", range(0.0, tₑ; length=frames); framerate = 30) do t
     msh.color = soln(t).dynamics_h
   end
-end
"ice_dynamics_cism.gif"

"Ice Dynamics

For comparison's sake, we paste the results produced by CISM below. We observe that the error likewise accumulates around the edge of the dome, with more accurate predictions on the interior. We note that our simulation produces slight over-estimates on the interior, but there are further strategies that one can employ to increase accuracy, such as tweaking the error tolerance of the solver, and so on.

Not that since the DEC is based on triangulated meshes, the "resolution" of the CISM benchmark and the Decapodes implementation cannot be directly compared. An advantage of the DEC is that we do not need to operate on uniform grids. For example, you could construct a mesh that is finer along the dome edge, where you need more resolution, and coarser as you are farther away from the reach of the ice.

CISM Results

We saw in this document how to create performant and accurate simulations in the Decapodes framework, and compared against the CISM library . Although we do not expect to be both more performant and accurate compared to every hand-crafted simulation, Decapodes makes up for this difference in terms of development time, flexibility, and composition. For example, the original implementation of the Decapodes shallow ice model took place over a couple of afternoons.

Since Decapodes targets high-level representations of physics, it is uniquely suited to incorporating knowledge from subject matter experts to increase simulation accuracy. This process does not require an ice dynamics expert to edit physics equations that have already been weaved into solver code.

Further improvements to the Decapodes library are made continuously. We are creating implementations of DEC operators that are constructed and execute faster. And we are in the beginning stages of 3D simulations using the DEC.

[ Info: Page built in 33 seconds.
-[ Info: This page was last built at 2024-10-21T19:25:29.874.
+end
"ice_dynamics_cism.gif"

"Ice Dynamics

For comparison's sake, we paste the results produced by CISM below. We observe that the error likewise accumulates around the edge of the dome, with more accurate predictions on the interior. We note that our simulation produces slight over-estimates on the interior, but there are further strategies that one can employ to increase accuracy, such as tweaking the error tolerance of the solver, and so on.

Not that since the DEC is based on triangulated meshes, the "resolution" of the CISM benchmark and the Decapodes implementation cannot be directly compared. An advantage of the DEC is that we do not need to operate on uniform grids. For example, you could construct a mesh that is finer along the dome edge, where you need more resolution, and coarser as you are farther away from the reach of the ice.

CISM Results

We saw in this document how to create performant and accurate simulations in the Decapodes framework, and compared against the CISM library . Although we do not expect to be both more performant and accurate compared to every hand-crafted simulation, Decapodes makes up for this difference in terms of development time, flexibility, and composition. For example, the original implementation of the Decapodes shallow ice model took place over a couple of afternoons.

Since Decapodes targets high-level representations of physics, it is uniquely suited to incorporating knowledge from subject matter experts to increase simulation accuracy. This process does not require an ice dynamics expert to edit physics equations that have already been weaved into solver code.

Further improvements to the Decapodes library are made continuously. We are creating implementations of DEC operators that are constructed and execute faster. And we are in the beginning stages of 3D simulations using the DEC.

[ Info: Page built in 34 seconds.
+[ Info: This page was last built at 2024-12-04T03:36:44.793.
diff --git a/dev/cism/ice_dynamics2D.jld2 b/dev/cism/ice_dynamics2D.jld2 index 3eae431ce02b842f61f0a9eeee1a1cf12b110742..036f02bb7c0ca9e3650df0ce29e1545846371351 100644 GIT binary patch delta 765867 zcmcG%d3+Pq_s5;3Kxhl36lmH4P0P|iSpsDVlqF>idjN&7rz{fou!ltwHVKOm2$-;$ zuxS*LAWMRv1Q7_LQWhl$NZ2IGV%ao^%5&#_CY{K4ey``B=gI4Z@5z}npE>v3J2PkQ zOzM%%pH|#K{@Gdyo9=6UOIT&cyJv+0@~OBIJUXz)>itTQCfV#}%;fWR6ELwU=&u7l zuMbXQ?f)M$M^OC#CcM91r4NOLsR%KcjWcxzmIfZ%}U-PWWYEET571P+YQg)9cTVmlLOV%uK zoWC(yv93qi{XbWpkXd$S8L>>P-YA_5Zbl18VW1# zzuu&rFo#K5Z1qU8%%mpveH7#Fw_mHBBdl!imhVVtS@~RF*Z6Z*;ne+OnspGSj3y3D zMguDHAMz2~v-;FccxU`u|Jb*s<=HE=NKP3;%<(QF`@$+|2|b_LbM2j5jFY{^u8!@} zK)%n7RvTk)lG9Q+c5UA(_PsSy6DIzCb)vmq%LOUp$Z8S!7jvIxUsJoFLL#xmLJ+P~ zHBOG@viG2>`St>p*7cQRg|JFOA6eEB`wrERlnG=5Ca9RqM0=%HU4@gFO=BJQasI0+ z>w07gr`tbmmC1Bml{E3y(AV}mt!Ac7d2Mqe-F#~No~xhkyV3rzb*9}~S=L0vcBX`E z$9#%4p!hZWXZf%v*tZol7M8JRCu9lB+Jy;O+2vTz*l@`14$o#iKnWeV<(Yw7l=zxz z*Pif6dd+@^-8PxE%i$)7X)j^-ah~Nu*1v-Nu_P_MBD+-ryH$~C%yee4l3m!grBG^L zD9#e5*ax+3ysoXjm6CO;)eQ@;Q^X8R@`-T_`@O0?yIop(HFj5J;3Sx7oHk|_Sx&R} zC2M8uT4q=DiWbpv~L#Vlb%`+0R*li0c& ztj`lxVms^W?1gP&-y7MRR7w*zwl^uv5-RO|3)9k@utAijnD(?l(A2(=_~hHS5uawP zPpp$h6^$}5$9{AB`NCXb3;PS=+0vfgAy=rf7n1+BqNBStO-R9Ojf^Fv5p#YapEk5L zZ5dy?r-L*llQ}VwPa(4d@@Y?1)UT}xxw2|F@-&+hcv7I|Z# zXJXlzp5D7K$5xZBtgjp{g4lWD|DuLDji+~Gx58zIWQ^UqyM1A&w3HsNt!-v6>Xc>= zbdm^r+0S&!685$WJ698p?L&|z)RIP4u{Z3TB<#yvlZ5?f0{b&fH^1>(LoP5UIP!5$ z1mAou_$loA7-Rm;S^ojA>1oG9=OW92?D|BQ?NdxCLY=){mt5f>dLkN36E}oe?mP4~ ztv<}zlY9~)~t$MKaEsc~d-MVF!mMyW98B-Q9Zj^1tgt^ksf5yHryP@4Ot550vn1nJX)tGxZS{!xy zIsaYOwMPvmpRv_U{SaSEB~f=vy`F8Ea;qv+>BU^j$6W1&y|NMxRjZyriWxQu2}}~~ z`YEd9+HqSr9=DlX#jZ@Pl^`kHtz=f)rKt&`fXcovJKf$mwRXbCUCXc8AMCS0SQ>u{ z*`8@bY_C=9Bl@;C$G%l1YvRMNM!v_lHtn_V%n=vAKK-@t8LxfMeC>O6d^eYdQ-c`d z!>dWYi^;!OfLUZYzH{Z|d&Ri**<_jN@R)xNS&rAMMZPDynV^#e67uh@abqTq9%0|o zFT)%=AN~KuO+CrJ$tT8i_98yzx^)K`-}aqpivRYmu*DV(#NQT za@GE5|D-ad9n1`na^znu0}buf2XP(Th^%2Q0kO4>$#Q%LDqs8F8E zJ5#GMLoBA>oGg>GL#0v!Q?4Z&nHv;)(qNUy*~@-@bhU)*vogLX_YaLrTTzF&#m7~b z9yi7tTkgb;$duSFa$~M`*Wj##aM{JlOs>kuRx4t6B-^!}zK?BOx}W;7joGVG9^KEy zUvm1#4rhCye}b5Zxu%eN?F@QixEOr*eS7m^ZOXCxa7phR5mrrlqw=Kt^h726biZ?$ zqfAyT1V)=V;l;j>AId}q!k zvHdZnL;OL*Tu|AA%1jo?HG}+%-vM*oj_+0G$`&6Gxsd#4{nXdiPb1&s#~^c(kJn>P z_RN_vpkht{)r7;pwnIZOlqpR7C z`I3a3-KL!Xba$&*cTYFi-==+N9M{9Ht(s8U<*kW!{Lm_(UH)OsC@FsE$-W2E<)!1N zO-wNRQKJdW7_A%&vTdo5-PoXJ!f!?2{qNr;9$bFJ;MQHV3eU%MWzpc4T- z?d`{}DwXQ|n$!UD{pVF@``GV~-&mTmF2oo=fV$eZPH5jQ7LA6ijURs9Ui;qtweQSL zX|jf%0@_TJA)bv5mOz%xBi}#RdJ`B zez7$h#&3P~pVL}@A{5_oZ_xc;`~Gw?I~=$|W8iBs45O}dXRVq>F7$0mqtLDGn@UT7 z{vC!Na9Pe+g_%N)t8uYaSSz9TxW~8b`+9L94~hlWZPo4eB;-81*T@|h%*|zda6{=H zA3XSc5!s{4ZkdoE4A{3$X_p|G_*G@>N>n`Ar6l{xNvO8>ZW5!I#2nG=$Z(}B`9N5W zo-!+_>K8GqYcLf;Y~bk0a{R@86y4#T-IYFJT+7sETz3LT?dWZeq-^vVIfoC1~F_|S} zzUQ6?qoU>X`~Fs|VQ&q3&w$2TTdDmHOT)DH>37A-J(OF(WPv>MQ)&q3f8m;X!78kp z@}jc*;sCW5k2p?gT=13aINic_vb!-2ppG~oTe$}A!n*TXO z=8!Gp2kcxre##^at5|w+jlb&5Bkr_CbeGK3Co`{k_`%W_Omy@-jA-B%?}{nVOQP*h z?T=b#*exmYqSt2#rR=DBeTHx|b8RD^1ngTNr{4sE*qu)Sb1@_zD@zsYUxwZ3!x$}RFETOrOUxvAdFB?rZ)`3xwuRv|Jhz_$V{?jfsz+vzTVP=XyFTVu zhTSfixp@~>pffQQ>E0^Qy-DfbQeKNMfjx%WeUH6Wey!E9y}kSn>tlY~SpQTyRZxZ9 ziY>}YTOFG!=*MpT`c#3FwRdHssLITXl}<)7LxuUwRDx;teRH|VNZQ?Gg%K+S>Gqp* z(@4ShVs2J?CL0fP>0mw`r%W5usBrR}>SRKpu~6yQ=HJxEr!VRkN!+FvzINB<3alqb zynVGbPdL-Hc7s)zo)95J#Wmtht59yPdTPTkB4|8Gbp_TxL3cfb;~xSRzY9i=v0**| zWwp^Lp98?jeUkYtTIr^uG@l7lRQI z+X>A<*;r7y5!9Ro_5XmT#!NjR5ZH=9j~xu0WJt>2(4R1r)MF}KayAHYNR&BUVsw1e84lm04A(pQbOUUksWKg0_30hny0aPoRex3!%5clD(kh7AUX6 zOn3+csxF|`1R6dDE!RM2MP?#IAn>Ze;50D26O8@{O3O3lk3gU(0M+J6SkSpZ<9X03 zW@b(V0(W!JKNc+B2u99=f`37ol9^c%2$Um1&3aIO3N%GQTYcPcd4_`Kz-lan0$|A# zP*R7Pi4h3o13}etPS*l(x=o<}W3c!d7^#>opr1leHXT&%0yURGefb>fW-0(}lR%G)p_vSV^DuZdU1 z>eQu<#(|)9Ip{tD`X7SDS-I3N(iapg0cD3kWdzh@D5#&lCumv#+Pt9WmIB9rph`XJ z80rF+m_W&HP<|a$RjN<@w1uEyI%wGiIxmCX@_E!RSOA76fl(JIy#Oi_8ZhlA8EDaf zQfB~-n?UQgp!;9YuWU&DibsNx^`PK1D0=}a^BPe<%`i~E1~eT9ZBIc@9dl#q7#IkK zmV+fnK*=LeE>}`NRX1T-81EfLU}(S-VWdxF6QVAu;rZ-LUPO{t&4+!YJzIiPMg zXuJ+uE9Fy1cOmGX4i@hMBbPxzVl(O|YXd4LgBmxezW|yNno~bp3()K_U?H#x41Eih z{0mB&w4fWvM}evhp!PIqcmZ1ST2epfFwnaO3?2u=Pr+y%74?(qD9r-J3K-N!LER(J zC~rj_t^Gjv63~ALERKMYjMmgo&ECD4xQ2r~Z%Irw}w7o!s8MN#Jowq@6)lSqe*cA-V0i(M?>Cc_a)IlNbOsVbw z>Sln(4?t@ObSHM9e*QLK@nkUK1_c*ES(&cXPuUXGj05$XLDP4j?Ufk|o+cW)L0}XZ z+5ncE1|@%i@&?_gpK3U$wSk7OK+7}GS+_g&^XkCh3NU;Wj6MRT=IkESQPCe%F9mfz z(D*B8&Fo42+`T}*87$rhMs95l(YrqQ$W==P4)ksYgWrMSS75YBU&h}okdCGc0>yivntgn# z`wQQV4f;`G>u}I*1N~ot#m~S<-Tu^1FbI^b1eITan%_Zv_8ZjC)Sn?4f3~GCczj^s zS1^?MCUq?71xhTS{4-E>2h>&@K>Z9F&@vZvegb-b27}Up)GyotjLslr#=rDK7!+4P zb&`%c>e_1%s)drYWc&4VvB?jN{)Hgu(L{ z7-%qrZV(y{me@ea2~hqVROJq(e%e8xVI^q!0(AZkdb5X7zhHkbycCT3hT-^^{sx1h z`f%!~?hWcJpz$-%dIxk@8$td28nAdS82JPg+yG@Mdg`a_2x?}6`VT?V6*CrWNkszY z<7o>9rhuVsV97;LQg$TuldC}0cu>0qG<*+Q1f!^*vnl8u4F=x>!$B}={tFAzhNI~Q ziV>iCEvP#I8lQvK+%eS8JqYx#1dG1_Bfo=!oVTc->Fmwkjsb-*ll5U`U9;n&_YHxrB`o5n)VCguH`a5TW-Vedx6)>DMo>^}eMBCB@ zfz${pwu9dZ(y*xk@|&u6Pn3l z)B=NaKd871s?(-YM_o72I1jY$0o^x1f66rKSKJYd%mf7namq1V18PqYL0z>1$k}aU*94Hsgq<*S=P&)=RI6%u8(D@SdHk?KMgCoH3+F4Bd zNd`{9ApHYWC}vZ;dN8P41scButtFs4$3*@7Z-B+`fDu0^xDU!|%%OhDKA>hHsNZkK zg6S@3OPfm_J>9^-JTSBeEV%(nD$k>S@=l;?7O3@rhMz!7@_g#&YzKOcU~oGaHebR* zwCvl|QQ8VrOaRqeLESmfC|p4OtofjO4Cr@&#b?0COHj}V8J6imGj_d!FAMbyvI2Xrn3z5Bu7T}rbcoVJ)c zM!SL1`Jm!cP#p$!m6uRIV<*r$3v_!x|4(3X@>1#-X$K0Xg0dZ;@&`~;?j7Ps8n17~ zEC>Xq37~B&=s5=lgv;pqP(D~P29!8K`8S~IZ&2IFO8pIb(6SD6ehqs60E3F2cJy^UBjC>6W{sd+9)=@v@5K!~3 z84LPjpy@Gat7WH-o;Sh3GB9))EV&O#YObe#axJJ@1Zod}hF?I7YyHG;4~n zpcieVj;3ay?Jdyb1OwlIp})bBMw_U=qzIJTLDfl6`zL6qx0(7`hJem@LGLk2vmp2w zhH$Md)G_)dD7Au$&q4JAP*-y+^)qTg>mty70QCO?7R%nJev$5=;B8R07gXM4NXDNg z)kPikok7!V(Do7Nxe5jw&VB@ zHX{q<6MhSfIzj1KQ1K6_ZoGr~>54$39kiYV-G74qdON9K@enZbE+`0qvL~Rj_AVU% zngP4$26`)K`W&=906jH7pz8x#Fti9PIRHxTf%5bZsh_F`sC^qW>;)}1L1(Im`guEh z%yc0*8;0;lVDu^|t@sgLuTX>PX`pT=X#5ehN7K7@8pza=MO!rbhYY))Q$KAN&|m^BAA`cNT>$DPfkqc-JrBCYUr;}PbFg?U7}*F4z6E9feu3j( zsr-^|pcx73*Mp{0pe+h|>K~(ifuUe%HCPe=B~L+lodESy4Ft8zLBkQy@(^@p9XAV@ zkGJn}%HU!!d=QM@1Em>X(e;X+pn3tQ^Mb}(ptZ^g>gVnP`b}W*$6(|dD5&%`^^+Bv zv7np|YIcG8%b=M(YQuqjVUkSOcn$gSw}nvCbLlXB`N-mxKNzVDUpRlJyPs6Z8YkvL#qh z9s)HHP@i#@I+}WdwgsTa3kGh1p(@`}zmhJXWDY3b4XUn#+DhM1KSLpCnNDdIICsI| zy$lA+e@`951z>a%D0PF13!pmT9QD(+0F4IFx(RfD3;O>Biu$X4+BkWK-+Q9^Arr!xj_9w1HqEzpyVhhe*~)J7pb4NA81$tS`HC1fNB}0%%JJQ9n-$Fkk>fo4}H9LCGsn-sB4PSB(O-8$iQp(DLF6j(=y~ zPt?&n3=FOT!^gqsQ&3v>D)m$7K=lexcN8=}074*yj1G~Y{b+Dw;4eBT90Lo{8st-VI2s9*ysh`E%1`E!~ zpw|rsFM#2Mn*!z&Z2?Nhfr`zb`a4kf3N$vkMg6U#K=%gFe;O=)0Y>s}Q$Mp{I2L3! zQ27<8c?Rn1-l2{r9cWttdX9pDM_@>Pm-?0T10_pAxerwR3TiWdp?-#5lxBg&41;qY z=)DaFtKOrI;jUnG4k-NuRQwF8r4j0<>i`;OfYuK{cL?++{!0Cd+klbD49(=NKHiNeBK+h{M(BwY#4~+s#Hh_{KDE|voHF!Y%w8KGzjgZ;Db8htx5s1H&u8=uuGmJE+KhME%tLLETc&=mV|4g6_=Ush__WSZoF(`+mpqFSrAP ztXc_mRBAxYTu}cBX!;qnNgq=`PX{nC0}OotmV`h_(i7?@ZwsoXfZA=K;o=jf{Uifr zo>Dqng5Ggpa5EVG4vfA6rA?nvf5m7}{T`?bg2ullDzv4fJ0Gi_82?{mhY;SP+Z{ zWm`by_n=1b4|UWx1x=$t+k2oV2nPNFLk<3={w2df$y!i;0#rQ*wYjetKeNCvh%N{$ zD?#TMp!at$n2mQY!~MbNQc&s#6~BS%>Ovu-sOt?HEui%?(0vE=R})dcVhuwxd7W-9 z41ztN>;|Yz5mQG^M^HZ#G<^u#u7IAT1nL)P3x=kECEGyBB~V_r4E0l~K<#)!vVVbL z3k;U;L8qWBb@Vm`gQLOldtfvON?(GChUKWgdIYFj3mQ*=*5{x*S3>>#gTUgI5+SpH zLF5Y<1SOy>r#y93z5#090rh^+^c!fao=E*Xy}^J541ETc+yNzNNz_l?4OGnowR@7x zbcNvt43?B+`rX+P^v(o>AA;d4U^J-$^^>*(6-H3K9n@U{jb$rRKdTCKj|cr*z~b-C zScnKJQAa^OC>sMR9iZk6sDBBX8cM0ZZ3O693kFVrq32*pZVL623i$`4|MMV{Wm~!aY|L{ z80iQKW`QyfsQd}kBv+$;`gWkn2->!To=ae$Y#Q|oslbx)pkym3KL@IWGRDs=(B{(x zfnf}2ae&SA5`ZZK$E1zNuZ-6fzuCzJS*@n8G~ zvp|l5cR;~mP<9_w)~HU`Yx;otg`jCaXuAt~(rQq@KsPWn4=mXOO2VMLa!u-|>O{yK zf7)3v7(AfmC(xOkMIF8Ez@QNfZwI57KxsKS^;5J0)e}J7R?v73vL-5_R4uD* zrUva{7!3D8ON~0z?(7447lOh4VE8T=O{+`&q}@Tqd{F%e0{tE{ z7K(oYBgqQtC}{HpymfqU#=eYGqnP36F|>aFmMhG3F}k8l6+9|7ASXuD)Tp3 z(Ebe?8s*UqEPBwn4)lHv2LAxViU!m#IvA9`3o4F*>c^mt{M8_4a2wwQt;<07VbJWq zkA>nIji_U!4=7j!$_{|aUqFqlG4<1T2Tk)q+ozx>3p;OtQ1&ONtk<0SX@-FMcR|xJ(DoSg)M`Qf0&jw$Wnjr+Q1Sqj*KCR7 zU!^4r%z0oDXgB~`egT~_6lugO-V)^L@};3cF^oT zi3R_kU~#>!)G;yy6s!hi0Z{n_)YR5cKm7pEWCd-XgPsRqpk_Df7t(?yi$KXiO0z(I z4+d3wcj~C^0UF*0Eqg)dP0*X#gZc$KgW=g=^dnGu4OCR@N&VDnP&W-U?gXtrG9<^p zThfa<`dfp=6T!&)px`_x6ZfWm%I2VEEU4cIn$Ci@e?U*;KGZ)@1cvNj$w^QWC1kGu z^7>lps2U1tSA&KCXn6uUYxkvo-T`3H3Wh%iqYpr7RzK>e=nJYBgSvyD@g8VR?~mi( z-J?Ida2Fsg=3rzjDA)wbz6F*4f*NHJ_1BLCP3uA1DbN!I1NBEzztB*yWHqH(AUO_$ z{3)oaGm1KD2ZDy>pydeYd{g1QBu(aVq=f7V+t zxU0NH9sOOvViOqo7!+IwWtGNKKV>1PnGWiAfu_r#t-OKyc?!V5BrxOxOU@HA$G;?D z9Cehp096K1y9qRW3tIjKoyzgl-#Zcvt_Q=Xz-Sbd=1rh}ieaF74X8T~8lO(U@o%j& zkvh5ug8t=T@ewfc5ERHKQ9oHfP`L!u90K(b(3CNm`q_Gdo&{jQ3x;liB~_-FsiUOp z6iWFVP_-M>UIz`8jC8%F5Ohuly}Q8RWiVWRD)oyNfYQmJ!VRh~fVzZf)X&($j0LL! zbZ-Lv--5;ef)V9(x`AL6DBA!kPlK8lpgwN~^)n3vZEHZ!aWL={4Aq%Q{YuOOu^?Fi z%8!DoN1#?di#i(mftDqp^APBbfWeH})GyoRK4DBXlj{lPDFi50} zsH40CsG0$4KL8CO(2}^A`Z?Qx-pOFl4Tdj((S#+`Pudbxj04r1LEU#taQquz!C-B& zly2Z21^PFD#izl@3sBJD9qK0=4k~S+<||PD3^dhUM*VC$(6a&z90fyx#1#2bjeKF*wuWwPm zKNFcB-ai%ZmtWqT^FIO?|D*y>O-p7$VBKGJ#j2>lF?IOP9Py54O(C&QFBbYVWrZv2 zq`n@){dz*?uc;+$v+XPslgJg-7ur*T*}}&zw{?}!fS>-a)$j4?ReT!ap+Z-a;~ByX zvFYlwm`Gi*VJKBeIQI2h^Wx$#jpx(IT#Yz(teG^Gk zw5rKGHVWIi+qoiQW?GVTGq@p6qhvInhTRH{$NF}gxnx9%m62G`{;%P25)ucW#O}{U zj-nr5W{97)$!Eg|G(4XxIs%Pb)hb+w(~zIx(>U=!p$gOB-VpyjAhWIxDn=ap5T)xxQ8(MzP+%34MW?(ohu?{(z&9O6J1_~gFARX z@p+%~$@EW8aHOmrnj!w~el0E%e|iE<>*?fMg>j7u<|go@bwZB>hww_-4Dq+UzhNV> zTz@xLM9f8L^>V}&FAR#)2oK`ZSo}88s9qsMZ1Y69Fd}c$FvQCxn;dJ6#>TOO|Bf%Z zl22vx-UK>GE`I(?EGJ&myj+nNt*J2h*~Pd>q+jxB?7s<(D}C}VagoSwL88{6dK2O# z6eWBTXH(12Fb159)L|16P92vks#3-=b-5`=)U=yxq14Tdv`>8MoH9I#z1_Ktqp)80 z4Dnk7)^nj~x|E@PGicZEm*PUvy}>8(ayCL~RN>}WHWcaJ0l6Ym8OP(5fgI85ujt=U zi#x3v-{I3q{TMnoOgmO_p_qu38En_eyNYUm!8K@)&+6w>$-4%Xc^&euu+gaB?Vc+l zX6A%6=fi8iphau-FMZD6%Gm$+g4MBNS(@8k#d+*SlR2|`h?OXapB0{n`)f68^+$c) z>ScLUhNz)(YRaT+HV~sil`A4#_6zm)D)X=x2OFJAS0i z5g%{R%auh6iE2zvB$v^cnjhZxa*;^y@(CP~l%rYQ_j2p_|7iAa+6Ee8a1&V*;cWagh)R)3Dy))5sS~Xg<@_H9B)qIEj@}7&?6^d(mXt;ZBk8q_RhID9Do+uyqWI zkmeGcRHYjaaY6Vy@=1&u3kmJHXag>YAhD7lM55cSloOu#J}sWfr!sFNREGcc_s39i z&^m;eiHx{@lGAZ>Z{@7msri8~@*$s${VZg@*9~pL1rsG!CYYu}U46-41S>ra?K<=m zpUCciB#yOzKF<*UkntWH3oSC-={KD(~xHuHb z@{Xbjp≈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

hXN)(|1D`-|_~i4(;C`qAFCzqk3yW@S>y9ow z45M5KP4vc;f9mp1k`LvHfL|FTeqvMo=@f;Je(VjODLFs$Ew;~-ffB&`+5Rcc;~Tu8 z@TrYwDhq6zvz3|nG^u&RCNsH$E$5er743GdXA%nL+RucAok?}}Ve`C!3nLLb3;%YWXJ~%7_AFSQ_ic99Mp_C6b2WP_dVckoy3vjpM?yc~Tv;WgS#)l4W8DW ziazi}fSDOyR?tSZIapdU&JUto@Y@R6fqao@z%nP*9q3*ol_KJv?- zAJ7G!3^22Rx3O3(E-rn4LgC};`EVH$_&jQhPFhx>03*7je`|*h6hP4mp(Eik<@nj6dpa35t5EZ)s zzGDBDULxFF7URS70{Ozf@YYQA#KRO?e!~ZkaBlsevFz@B16se*!$&Mc`9GlW##*zv zhNshXwV`!P3Yc98!o!9a#mex8hO-Ixt*n5+y>bCo1%+W4#jHXQez%;YJa@}iJT?_? zH=Brp=19-Qax4THqS2L>szr1Xgc;ut5 z&KyF)gwAt#2y*Ir76BZJ1zqNFe8b+Ihu{EeX+z<&Cj&k!%J7}kyoCpc%U?IP`el-8 zJ!cLPg5u42-xCeli{GVU6nLqCnFai=7v1(DK5+(xcUeCd?uGvSu9ejL^z{HQxq12>!Y}Ti z;67*OLe*;II`K`!lY%pVe?PCkm{>l{rSPGZ;C_=0Ragxb9>a2GW!}qQxHi)~C{g`= zE-?n8P3Lg|cXsP9CWkyPFq_9Y0*@W2{Zce53hQ^BM{uN$29C9}6E&uXhOV4KJKOt- zIjYcZ$~+>5xoZG^sZ52_JE#$?od;)5-1>+r+HR%rrRnp;n=N)@ZX?LxaFVw#8|tY# zSFyKtg5h?F>O#${d2ovI%fK2O2)s~G0euLuog~&;=2TNY7_{`|GUmMwE0hL8Kuceq zA1JQ zNE9)v&<*{GA(}3ff1q3l|6@K^vghmn#FrA!513haBvo4<^+y-Jx1CQ&88>u3RNgW> ztd}C87zXgJic?hxZ#tHOX9Pm?Er*W5-*q_0xNJVZrdC$4RYVM`bB$8}H!Y# zV6_McZtZu~*dH6UXaRhN;p0T{t-L>!f;+|oyo1>fEJMS}0yFbIctmI(gUdQW^}*{t zaCm6#TPuplvIAxndSL&kp}2YC_6y2|z~B71ic{YD;yM*n447HKzp-C83#0I+xgViG zWM4mi@=CtFb8o5n>b?M9r`Np@;dO^o@C09I{-)FB8vuvwU_Qso8f&WxGLO{0(oB~7 z5mC(E>!+Mwzps&8yPk*Sf<+v-U?tz2gD&()rd%k#1ul%UzvPTA@Z{h&;7?>(ilcbM zQwm>IZy{GOdE}$3QuA*07sA$s^+Uwwr~ST=5KyldzOXS{;<#MupqT!+Zca)pC@026I~gg|vxT2wP$&tUZY>^PC_C@cvH^j6vZN z4^w!T8{qlpzgKCDymV$29B;HjEmm7DKA_+}TK-(OD!<+sHdr}eW`>uKN`0q!?yaPu zKN0#+D}VUXkL|&klJ@0RoI?98jTsEVU#~?T#79eYo_h?Q}Em?08jG09fSekwSudlfPeMIUk@+dr6ee= z0g@YIW^|GyaQFsYh~IW>JOB131)eZ{RFTcoPROt1uA0-uPSmEnPi_a=~)TA}E^djT+B-^pnBl`AN0V_uQCZE!P5a|7P@ez zphq^kkSAYEsOV?0n5(F>WP!%-KoPSFL)pG_FX<9}HqkEcv6xUXd^~Ur*!`se`oQx6 zW)?`aXWo=9uuSu&7~<9ggSu>7gftWs8#sY%a+PYuSZQyx;ZBMo;|x&fjt`fi6TD<_ z7MytB=d-GDnN+^&dW|9}tOSzT)t)NJ59{}f;bY>5zImXSgMLtAR+t7Tou?i#l83k-_|WI1@`?ElF`OP<0|+VQt^q2~2@1BLc*l0Oo%N-trXnqWB{zE%rezTQlm}+$LPlMRQ(m< z@XN-AMEoU+!?A+9pq-x7TdXMa$^kPAjx=~YUGoS~RyD=p)p7|RnwIT<)A)hTX}N?K zA7mzz;KGffj!Ot31OHh93sP&>;Pwm14wzZ^3Z<;x4rR*F{Z7J;g#>of!32sUas@cx z`?;{G6pLzR75dOYx%iiiU$KeeNJs^a_?(Ow9F}}x;W#Ieg|OpP7o{x&Cg&)Q>}SAH zua|A4ne((_>ZOVrn2ZPme+ZzV7OH1i?&{NXK`QCh;~bf z*F@FOrMSt=)#Iq-gWE8`_n+En1U?zl#!`5_WlMQ1FXrilqYOM(SjOC%G22vjx}WrQ zJT|C8)-5GsYIYPzbmy$sSoIHMR-q5+(?*M%2DW8TKG>A7L)^mm&-Q0NMjv?AP{Q%D zV0P=?0ab0rmi&ft!KFzc@5iEJc7IDUq%$jXLAKUX)xR5l>_gbC*gBBth0j2sSaRhd zuGT^Jz|6w1n&KHQE!UMeQw*VtfFaxRg+@iCoLL1YF0je;L1{=;hf);L@qtR`HV2I4 zv$Jr66x@h(h;wM0`Nns|cs582B*sJPeQ=>wo5xj>4u-`5pVMHJI0I@|PQi13TgKl| zO?s>5w;9FWP+c1=<3S87z97z9Y>k!?4VU)iNbScn*N>MPcIXH2$u$kcwN}^R6uicF z8T{g!ZCQq6fEN+wbG$6$rpj3+Z8!B@zKjTj&ZED8GeMaGp8T4}uTI>{4xRyrp(1 zr~e*Abi=(@5FCIwQCIxI3{YIJyY3uDgC`Em%%spR39{OYE_^>sxe#}QH72Zh-8va9 zMM9Ae@R$$B#Ie-$AqCISTF!fr7Md(hV0g+PTh5zbv}Q&!Hs86?azcSZE5MK0_BZY( z6BMxii^Js?LVSMN(B{y8IT3}5X}~eJ|Cr5U7tCeTm&1Bjp0Ak3PxPZakVgUfdS{m| zBAQham{rivW=;$7DfZt_!Hus1{LNxD<||l5V0M9^{qF3if&w4dcH6tlBmaL-pVc=Y zNE-YT&!Y(nM15PXEcnmPR9+T19pSM$!35l~OE3>WqPgNG#-C>i%q%o-IoX|GQOKH4 zx1sP}9)KU~y03%O{TyZ$;O5%h_>;)s`Ew|E;Fe&x$|q|X=Dv_4Ff*^?Oxjt4?w6}5 zeB=dazV}Pb3$d!1RcQY8zE>>(o_3Q$C;SKKA2)Py@InFMGr&i@^Iwjw8)}CT;$>Te zaPdau1!%i}(7Vbb=*?SYV9&n9;mzSAr6qiLF>8c}sPz*L^E4X|&I{V@43yv-@vq15{p zfr~5WkZl~U+_S#eR-VrOFNFTxgnGP!zHo6#keLPi`cK0wu=_<@ zDSYTj!0QcKr19n{XI24TX1zg-edQ$z9$f+Omfe<%)jM82c)bFuf5ZE=!{!xVD12(m zm0Y{l(Onivu{UhB5(-E87kKf4_1?sCB_UhxKLD@aYpF91JzhO|GmD(lCW@ja6(|z-9J`J#@I2r+=a88-Ql+do z0Y9J{*lFBz6oJWQ_^-@bijXRb!qPC53%P#HKjIsR7Z8}4 zamXXPWJ%M#^}6b)cA)s zEJ*NZjJkG5^FDTm*Bgo>uE{DUqmlgZ=oyj+3WHVLgLq$mo(3=v^i5U~`eh6h(9N|U zCz|{~0eBiPXcg=l8E(NV!3=LPiozEz0{qFJ+viHnTQBC#%WX?9NSj7j4DD7?92N1a zAd`7L3g<^c<=_zXASU%0uZJ=Z+|nqtycj%Co37E=d*{upf`r3N-D(#InS{RO6oqkv z)m(&j1#5Axi>Uy!3naS9y=y1TaV#A$T1_Zv)elI_UB??qN<{Tr4fod{_uv(M){WTV z6x?w>hs!3nSI$4-Yb#G?{};y4uu*OKLO%nhFQpu5 z&rhb{fwuwf>3zfn2LRt^z{~>vL{Rl+d;-d!QuxUFYq)j;7RWV{@#^|(V3$N;{3?K_ zHC;o9me7l%W$kt8V;d=**PuP2{bmy5mT3Bc|(Z~}VZf8tNDLjr}bx&ip4dMlbp&Aa7u@8z$%q}T2l zWP{G*Aw{7lTg!!;@#f7nbb(g|m{}NeC0o8JJ=gE$a|p%}&}c0opV?n)@jF2C&SUg= zD)1NQkg+dQoEwUpui2YCqCdr9GadYx7xm#e`oSv$%q$FmEk76Yl@K<7;{7PROVnCC zhCK2QT$>hrNRL{pd>@`=DoH(W7%)_w}_a~0Z;sgt)6+vl4Mm|4)F?}9$Hy992r zJ38)C9HHNUV^vxEIZ`;vnN^@jnN`2`)^#RjrA`=ZQazC4<}A77hM{K|S90-&%Ss&6CUYrx?iPTb&gmwuvh&m+lH+BM z5>!vhaDL8Qu#TlTN-qG%=KN2X-SG6_Vi-TUC5tpszE6)62bI%JilXK}_Q%4vJPc2Z zkEEt)>TR;rUSPL(Vk{@An??TXNgxNfHz>t02J&?H8XBUh;#2hnxM& z70fvkfIo28yj4`SKQn z`&xz*`WZU`{L_MExVD5j0kaDP`saTPLjl4jQUq2j!=d787pk$o9kr6fWmlW1+MI}} z&5&a^Q525H!G~v0>mS4z@Dc$t3obls*M1kekbaKBdp!sIvWU4WBnfh!hr>6xI^6gZ z;rUe*JkW4GSFq8%C#KjuPYsw^X#R>~CEpXyBrI>Yo{%td7~li$Oj#^7U(Kuny!>1} ztT3dxQRswa>y=MF%r%nF9PkIW&KD1Y0RCyM(^d4|@Lvj_eRMr+UTfv6@ta_g1n^V0 zu8E0p*V7cdxP&_|3mUC_f6T&GZubO${j%OwV7m@)DPUET4P3S1f!j0|vD^$c@Lu<` z`pm1tOf(OZ4TNZVg8;s3NAL*jHctzfnW-j^sVV2DiK&-NRFY1{*oSsU;2hf(s)kGTKOJ7}{?m55W=p znyu2nD`!@r{ji`yzG08SD~D6?==mG*9DJL=i5LT(3oHPF8aG3}m7WnOf+>R3IB5TJ z_tv;+QRu(nJ`R`f^3?c4OicMUI-8b*9#i8ufbQ7UtO|MO`)ue9#&Wm7|L2q`TL^xQo zX|6`4$$JPzVK5s!@NDv=yA+Cm*_-%z8k>$)rz7ahygzH=!8<47R5@jP)Vc#p|Ic9!wx3Qz zH+WLO%mT@r`YUUfzSvx=+?(Qv+^_|DgPz$vto44n8!bw22(MN{a6vs>Vt z)WAfHCafJ~0sPv?=gUw?!#oO~{eBCq{jJOHCADtx0pRa!O`{Rs^(O@{HjCsUCc2%) zg?PBbplu}FUY3+I1n~~tB8ebWxdJ}ovvQQwyxW*a_|V|Bk7Aw3!;6CJg#kQsTh1BO zpXUe6EDWQL7iZqY<^#4-c(YTHIK4_)DEyga(aw{R8kJDDX zru$gEJ=lGo8aQp`-Jem%l<(bT{ufQ82trqG<m{)O-N53Pbl$!{ryS`H<5T-0}&)>pQO% z7Y%tLz{~>P{BS*S#WdpoDxjIPg#~W)3-%>tH%@-{Ocwlapm{pgoqTu0&pn0~Ra1y|w zDsX7Ka{glzQ~86>*HFIdGzuSA4EWHU{d-EyD;{iz??APc{qpwLe@SsLGKOqcM#%b{{{H@=i084TDR!2gX`~b`K0n(;~23v+I0X$ zQ9K0QmY*mou;j9tSA6 zUM|4hvd7{y1~v}l?ojSg=CcuK!ndxoU%!AN3UBru@R|F6+aW0s#;i<#nR_eMxh8ny zj<8&yyOR*n=Fgox2$y>wFGmG9>{Kc$z;l3V&LLlXXs%-P_cb<>8-^XD1vlg? z9zXkK+0>*b#gXd{9CKE#bVNURGBAOYXs=wo-VUX(o=M?LHvoR1>%#)c2ZxQ(@Trdj z*Tr1KDVl=UoCWwF0md(|d7cbpLG#b%*@j{B-gy+>-~-?*WcHO(^8w5%1ah10I&*}F z{G{NPZFg}60~Js4RRYTd%q-w9-EJR<_^58XhzQt^*`?HK(ZEQa@amn^eEb-ITWU2w zhVW!B3ho{T%@1y>z%z78o(nLu(7dy}6aS_mdlGZDQFy;oyWo(&L!&-Y^F^mPTpnaP zP_sN1M1HU0ekRY4-|(=;BKSd~ST^R>0cPeLK}|IG1*QK>ad;&G#~;y& zm|O@yPC3jfP!!mdYr2ttnxY7NvK!}T&qCDD703{tfD|*T)#3!N{4GTgX`td-p6!;V zv1(Jztb&qT=3KxDPFfokA!NcJK##9+9FDE?3}G;b%PR)6?+rYj`=@a5fvp`Hx=r** zX=Vrb`M*EF(yyRG7_$oSQT^JA<-&*&6x?P(EKKv`YHzgSSpqW`#73EF>8j>mkX}yl z!4!wfKK94L2Iu_PPLcxY%*rbjUY6HUfvgk??sErvu&BvUF;U@_0%jJv(0RiOvCdOe zO5sBld$@vGbE`C_>gCKTzzvE%h{;WM(Y^P;X8Wmkt8onQEWw83<;_N3)f`6( z2Z|$gHn@=Vwv)z*EW%o*<|IzbR{*_#0(?gu<8R z1K!8>))OfJ4g~<0dn)>30Gu9C@EX}(F5n;5gT`Rt+HQ-kO35j3}gw+%%Uh?zu=KFB^y4E z$ezTgg%pSV4&YcFJ_7SS;ZcZZR)HcS_qB926!Rnb0L9^+3mn@%bn1&*@N|Khh0!!D zN4*EN%qgPqe&6@vl2qSG3Mm#v-vMv?uB(`=mFUJ1T894_$75lgTU3Va^JIaUh4$6a zA*ZqZ>OK@c&NB|me($|B=Ix3p94zrk@PvVx1^no&y-yIIo=4%mJ^()Wug)(e9dekJ!Q~DYTWaor%l}DH1h(CeyVnXw zp_Y&=wB4`td_9`2aemNT*(>k1pNL1~nEhPLBj@ZbBtNQ|Rq!L!CtTUT63(6O(@mR7 zF(iZmL)f3oTA~s>X;`D1w0YBG&VmJ;%>vt5s)F2-A4=Uo@ zO3gd`9?!kE4WG9H;ZAMh3Gr$M#dGnJ|LKb}0N8Xe81Q;_yUP*p?Ly%V0s!BqX?>05 zy#QwAqj=c8g9r~$K#dIOUuro`h1n)Fei|0VqXY9uC5)&QEH0B{sH)~EO-G9 zAf7Tjh=)q^4G%H%Nq$Me-5Val38~j$ZS;Ys3k?tPP844`zY9B&V|<9v(9iA=*D$(G zr;AbuikMZ*Wh6lE@w4!wysPlTtjYnN{$?C(3maD4BMULMP-Vz=6q}eDR^+X~H#tPk4|O zjDaw`N8z)-L+itLXa`HJTl@g{v$9iZ2=A(Qgb=X!&m%kt$+g^wY@C1RG1p$ZZ>5I$1 z0edLC*(JdLF?p}0q(B(63h)t+bdO^XA_^(EO*O#xCl$8BA;6OZW)|@3^atV(OMKl# zLP3{~iCjVFFK_W_7KUJY$3%W}ntVgNH#VQulY;w90C?iS)c4ptPYRe>Xuh}hOmX$O zXeNaZ-3a*PF9ums@5`B$!R7Dn)vy~q*sjjXXbK#il?a=OU#!Gs3%Ii295g;+_@T+@ zyy7~APyGOm?`oQ-@g_8^g2w$_H`ac0@RsfglcR)sxowZacHElTIoN%k6|_6byPq2{ zk6%E+vP0|c6uxxKQLcVv&=6Ot`wnA|D!WY#F_ne9*4Vw|G?ikg2|EgF&&kDs=mD=M ztOF08x3f5m8hCG~@CF&+LFB-GO(hQkm{o{h_=uC@i!>yMf?K`;xL?WEk=Q)X3z%65 zpySA%nukoHzET|at&^bY|9#6g$%XjVN!*3Cfeo%;50X125ixLgPU0HgX>dZUxAU}s znVAc+4mzs-d!^hqXA;HX7n%errZmT=NO%g0LcxXNPc6loQb_~_4?h7eBnQsH2{fbz zCzAMvPFZC$%|-0$^Atzi3*g9oF-oJXr6^|&ZD+qDTazdfXZ zg;p}(Q?E5lwRyL6M#n9jVvr{TLvw8>je?SQax$DfYxZ0`x$m1v!Hu5+{7%wAytx5W zf~UzK;PSW%6d>#!MPT)N3K#I?tYI0b%5%7VtB z{=9O)%>6@>O=Y^1f5~goT__T-fE2jzed_DlLJZ3X0?>yE)5T$!znX#v9)>P7*}Yvn zG{$!!GPBT!6-^U)b=HV&XH}>8m>ZZ4g>N+}eydYQyN;qx68vFE_#t#74&ixa^Xn>izC*kl3BjQQH|GBRt5q;}qH> zZBJ+*)*2HMAY z7am;>I|N-&+I2pzP+RLC_xk@wBDKeH9*MqlT1%q+Yg#&=fDA1XaqS$!xD`zgTD#p~o2$&Gks6-L#@ zy*+C`hR7a_qPY}>`&OX1rLe)23-%~5voNxE?=XJ_l5Rh9LZPmXJwc2Lze~XJIsbjE zjiKav{7L;0~T|{=lg4bq8h^lt^l*Y7>PY*I}<1le%eynsFV| zxSGdOpJ826__fQ$HhJ zrN^2yh1zXq8lgntM&OvdX?&cdg!LxiSUxm=BaTn+Xv&3(EPw}0b!{QS&1L5Ro!d$A z9iPyMSImR3Jjw%k6;OnivXQ-n7V>G)X#H{&Ie7Z$6y7jl!j_moeP znzR=7IecTuLj>hX@d@b2;EoaE-6K4CNaGx`bH%F7JMm~1)6(}m#ZmPFI1WsUx+%Hg zRt^-?zOrv{N7p`@VIL_9J)@Ic&z~FSwMIR70>R9JpewI!=hJF7s$<)qBm^}Z4*2-L z_Y_GkgfXiCAH8A&-zC7{>24I`Gc&yGX>-+{rI^n%74rY3I9!r} zBUrcbKFNi2W))nxn!KFv{$VbZpQhkGPXRt+z@Mh*0#6{AS-?;2;LF!VjdauAQSi{; zPjLaCpZD!1wO-DwLI+a2sZ!qjTN?wzHm3*;qXz>;UdL;1(F2}83^~QWPAXT&@(obz z{b=WViscV3r-(6`8UQ4*`|hhHKMa>}KeWT=RQ19K!(lb$L+)XK&-pQU9s0oYhXla) z{QVFwE-@c`Z!sUd)szpV4}j#1i#_iD5q>Hh9-e|vs#j+4bsH9mfR~gHH4QVkln%vh z@D&eB4~;SeE#(pBy=t%IU_ZJM#u8~ZL5v1Jozq;(nBCoRcOow{FsmSg&gQFp zb((cU(d;y#Vz>>!fBX5>2mRoA12YSe@beui%`w^Z$i#sniJNm8J}a3y3bo{k!(8ye zvf1FdsD<@X3Z9`l4V99<>5tHd{5{Prv;cmkg9k5D2uZ^gCWG6N(}WC#1<;Qmx!+tV z9M(5a!*>1DmHe6+CWH4Q%7qGfCTt?|4Xe$`&1Kq|JeabtsmgB8qWKaE8;&9RnS_w? zzcYCpA{qpLlpOG8Rv`{?eZBd~Nn>60jscmo{(n+n><#eXVXyGW0_F_fnJ`ZsctUf6 zmb{Si!D=Uvq^K4|OFl&H%!C`$0xS8!Stdfx0SfMT4d9y}#Z1OH@SK5}g|VRXd`9iz z-CP}I<)=)Ay1Xcp2!_`W=5)anBYEqkKO{eLet;HhKV0VZf96NE?ioVLz^-SwlqTIr z-bX)p=D^H?A9s5W*6>5EZ%c7RP63XHFe^RDg=%Ky;g~n{G!99Nc@#Wh>lyg|Np?+B zbb%)i+s&&hQ2B$Nl>KK>vN~o+Tu#>Ufq*Sk&eH?^5$_mS=hQ-(CK=7vW(&DY)K5fFH^& z5a+o(S72sAzIFHg#v?v}h1QlXq#1r_e; zd{8=vHWqV7!>JTS^tvo~FC8!Yj4JSi;a}kBWxPT9yw`CZrCn+k%Nn+45mKaPAX8hj z!uzI^#HE_tG9LaqHeNmLm61TbXtl=%-pLy<20x6Wff1G1k!&l0O($?p= zAjfuG)TqZgn4A*?k!@P0(rSg5Xt5M9pwl@*(;8=>kh#SlLP2=-VHD?(pPe*W+RDxZ zi4A1VL`^zJ2x71bmNs{Rz&ru+LH5I$b)F)zF9(uEKKXZ~pv0G-<28QywH8azhoX-Z+}-Fr*Ym^6nD;0K zPa=%Y!wcW+&sK=9Y=52*({DK7pB!wxLu$T=Sp^AflN$IUTrrMOU~GHYs;{M^P01p3PPK+%!gG|AckZY~G8HFVe@N3f^t9 z2@xv>1N_-VzYbyt%w&5Rzb;tge%g=7}!H?ag5?fxC^* z;Bb)`2~~4|#HXf_O7g*N?nU@=&#q<#=tJ02$_KqzfImMmUWPvK{DGN;Fx+?YTaNhH zBNX23Cg2kTDoUj0!){(wzW>eERDN{42v2`R!ELlJaRtM}-;KcLdG4TnN$L4V2UD5R zP0h)bvZV7RmO$uVB6M*1`;uz@=&9_)l8OHS$&>WIFY%7li)e`je|7nQOGGeyyup*! zT3y9Fj%N_eEDWd{=i7)E`_$7-^QRa>cLGDzp8Gu|2g;dMQ1bhJRWCvTi*;$p^!q;6u&Mk$fSS z`QV^;nGhkj>t!AeZNp8^&2Y%p2G~OBXD(p!qI??5`r+Lr|sXn%!we%qKjcG$X8 zcM4xP7Vrk)Q+r9RTe|@~WA~*JgnLh=;1%nx;N7k9BRoaCx$IvKmld2*J+Z-Dk!8Li z+bIh9=_~Lgf1Tb$WMEmsX-*-Zy7<4^ZJz8Yh{~ZTjNe{SHvWC4k-X2?1wetB!doDj z-uFN0^HnT+&idmjOBKFeA;zMW$yKgr%kKN;OWs5=D;rDl56i~*g5N`B-pt1zaE?k@4ixKu|_@W3>H zC%tL38(rY}0y7Kv0vq*a#Or5M_{j3Bs`-s4vEPRVu|K8utIGlZ(r1V`s4YHG_ynU| zIC@uYw;$W*xq@*noV^>io*xcjuU0$rTtdR^;ki5v=X4GQOU+x1$mLc^9o20d zMNzyQD1!VS8lek3UkGNN`Cl-V_xdseCGZWW@KwoxpKPq9F)rOwa$%WeP70Q^)nS{#I?z*I`$pKVb=5-SK+UfYK?`s@>UZ@6`oPl#W)_Cy#}>^^Ar?yg+t(CoMfx@3(F}bEB#U15 zcr5u)&a8qO-xHhG9?fMl62n)NAJL8S;G>!HeLqg3BRp-;&*P3Bb9N1`%gFE0D1+Tda@cq5N`J)fK+)xDg@+ls;XGIyS zb)8ij$|xNSbgy$A?mN8SEBO$>tU^#Pw}$=9>=}=5cAe0{vJb%D7<|X<3yxOyxz4|V zq@|-e*Ryu~RO zglpg6YTlXE7qbv$Y`snvS~p;7QgI9uTD3{z8-$v1e*^q^=9n!~Fcdv+@Lu$eZS%{Z zvbLuj?YsDb2zbu{-u`_=PiJg0BM zcJLg$;rIV*1r^r--u_xYTssmjXUYTgp((MvwA_R(mmIvIP>0;3Jdpncis4tHV+{(FpGSG*xJ~e=x%Q80*MT@hc>#i% z1&>18hG=@kiAwfRL|&JHXisv;8A+ZTW)*naSF)Y#c$oQuj=Hiip9oUm7oeE`tsGaB z;2Z@rGY;93YpON_Fy%|sQ7h^d5FC+~1-w6dcD%xcG2w}=W>!X_-6Hf8KOe@T)YY|s z)z_>Gh$tmY1dfert;ZMwosRIlNcO6Z-Hp=k;h5s4bL~2 znK8*e+N)A7?u7DbqK-1T^RxQupI<3yLQM*}zA>I_vF;{#RL-n|MWQrqo6>!Aa#c8ZN8LkG3;JLSiPXr%i zn{{-RPDcybrk~A)getjdz;gQA0!pZfZMJuFn z;_#Atq3v8JDHKP#?h8dcHAlh?_)(v022d0!5co3T3zWdAvejrjurRn~)=X2rxWdKM|)m z%GjaZEwpa)a-w|k>3gWA;b;mTw*=tv-5W(o!B8ya4ruqD+_((jO1rq*ESFw$n+Rw| z0&vWDoGEU8=4UaE+*WqmP-ZGyc~n)f9UoQp%=-qGDAZ2r6jR|tU>bO3o<!qZLH?s-@^qSeS3#dt~5Az^u?7n3@m9Aw04zq`haZzXiDFj4lNJA{S7C6oj!_+PEV_dqNzDxK06bJNia3GX z_KU0P{fqi$%krY6?_L^SsivdKvE-& zS%uD6IPR^z|AW1WlMhmTvB@g}LGvz(8)|sckq3VCK6kbi`q8!cp+cR1kMhIiC-|{% z^C>(S%##jg75ehcq|I~WsI<7p@(sOvgdjfM?r~A0$}HSa5T0)^Gb51=?XEg^33mXn zmyf>hJw;kyiYL?ycz!l4oGEEi&a8qaO`E6v^2jkBBEZqxfFov*j|zR^`NnqeW#La% ze{sIPzAd2sOHc)cLFbA9&cj-m#m!Q}*$mu;3$Ke*$soXEX zvuDHYU+NuS@A2>4%C7uZd&3GN3UR%!Pbf2qpt$NG< z@dQ{?JT()6=g_}hW}!kn5t+n^v_G1F*t5dw*ke8;?@k~jg(D2$pI zyRAPpDdKlg6qe`j!!J$DS1pDeZ{}DQ~BBn8>mx3tq z%qk3-JvT#Y*Xhf2PUII81IE35F_-mD((oE|gXJO?TE)C8pOONmLszy>D^{p0yB8CY z@pA(TgFUGl8(@muiupA>^1;&w07cp~%7O5I0iC+8n-U%1`z@GR=)tU{z!6416^SVX3wy90uvEt7lwINyDfalpE<%G+vIG@5v!NLvftU-LUJUESp|;Y zPaNeZH5mtghva;sI2?^1ay|CnSJ?vxBqPi$43P&LY->+5i7%rP^M`~gUL$}g+aTt$ zQKSs+J(rV?&MAP`9Pvje74R@wo|E^N4tE^o{_$M~k+9qa!>sIr4~q z)>C$OOYO&8*{F|7r#Q?W0mn8SD~%#q7_$mPWV+%vD~t?J_0nHa-LTPr3`d-;`#nTI zcxIyin2*WDVBJ$?BsuJoq1S|+xx~(dxyvn86rc3HW?yAWQYurp=5{*ks&ga z43Qx+M1~TIup>i+Q$i7KWQcGghlrzOhzun|Wca;%t$X!uzwh&p>+)XL`gE^*t-ao7 zJ!^RDKP8-X>HU;Bo2uEZ<402Or|cpiz4B@w6+S8{W!rLwJS9Bwn#U1Ix6Bb}@f)wD z$Jz=dB-dwa9#Q~Y56K61-I!Kd5 zhdMcgo$1{;V^Y7FV*Q7uK)UBJFE$jEuq#9)FI)%Y5MJiZ&f)8ti;Nz~KNg2MIqWMw z%763Ny+~4VX`)ILFOACKCjt)thuzzJyT)Gr=goYoW}^;l${ccxs)KPRufy)WUV*X( zKk2EqIV)%H8Oj-nQBNrimgRDpjoseq$DnJns6%?JEnjDh^G1|Us-8>K!M-yue`Uor zovmas(o=2m{CX4E%Ct0`OPLR8`;mPv(F|_WbNRdJq3;c7@b>DV(#z$m!<9y|Yy2e} z^XF3%d?R!D*qIYqM|L19l1m7hIu$9`(=k-(;9I-`uOke%;E%I#Lwc;Of!h31C>lY^ zV;LlxJ)&w5{X3Vx-zS_OCrdE+>ltG_>;KPem}ph`8DU~_yJxHsGKSqvg9euNX#b4g zs?=(~yj&wqt{r+%kW3E_*O5sN$yIpYbcyr#}eh ze;o0}cLq>)_nxDhdfpZwC4A$`=MmMgZk5OUJU7Jff~bbH!&7=H2~iwgtzL2KL|ML9 zO5{r`EjAR#aXjbTeQWB;IXupg9&2l~b9u8P=o?nrrHPyw6vQKhL-bFa!R2dOSJI@X zT1JD+Bkaht)Vm9J_u{}L~rlW-KtULIaZkEQa;m*dRC;~n|gOlf6L`((YIQ8zk%;7rb`48fX3=|27#rLCIWxB3{%l0{{H6+v=L~Ya(^wHO zNy|mj5{vb7V&qPB<&a)R+rG%HqZ-W_&9g3GRW4ClrXdW;UjJNur+*h|Gm7<{?r0Sj zUIcT1_3?A;*oNe&XE+5YKF9z5=3jSlXjp56>-p#W6ZJhRvYWG{Axl~$k#Zi_DI*L& zJm(iuAMAxA7yLf#4_rgD`fb_u0+NP^Qc8n);}`twP^&>$uhMD=YW#vVYTB~$W!I}q z314YNg7CrCqq{dXT*c9q4L43VB{w+Us(bjJ{AH|8bLDCx_&4x=%(v4Jj}MHB%{ zhyKaIKQI|cblpIe&x=R-8h$_JKksmY6<5A}8mSwwdZ$o`(malE{d{{JtYG9Mx_*_c=3(WFv_KT&Il6J=GIw?rj5VM#ulv7_@lx^^lej-xBm(byM z^c9c0N9Lb^72e1DsPwpunVF{@Aw!DYDKxF0zJ9W2I>9&7y=IJNshKr*sFNHIo(d;${Pn?uq&-qBgnFtFzg zv;AGzDH>_mvYROhu^CD+lIL+oj~y@8LI?{q=I8Toe!Xpe9YUnpcZI~EEAokk$vns* zliqe7Ejwa!D4(s-D4X~>f#IDY3GqyzgcM|P#;(_@J%VAOc*yIbxjPOiw?w}e`9!-a z4PP@qJGZT^vkvQN_?j<>G)!UJoFyxwI=q&aRqDJZ>@@Ap8TH#2&F2abZAj0xjZ%G& z7kWox%z)Q~2 zU-PSdkJi}EA&FVXC=DK&ynM5IABGDXrPxAxs@0%=m9hcF3!hTO{mZ@KK1Q9z5(JMe zq{rIwF|`8NmUrnbW>Dh|VL@1DUVi!Nnb_^1wV*_L$}G4)!yA9ztPfQ@cKRE(QCDw4 zc+tEQ-IYc&c)==@r!GK2n*~(C)JXn!t7NWUELU5#ixpRndnw)W)L@pFgF3}fi0oS& z(WBYVYjB%QgF4`cX2UXsDGB5u#GWm{dLy+`TTm0bZ z=e@X#;TJX*NIRUp3y3P%Zs&|?-#@@g{sGSI1^jT`1QW5QR#+rKGWJmrmoyGBh!owJ zg%Z+JNrnWdCS3rXlUa0hV z@iEIC4skCMlftRu_UGU6gl))dYx%Fooae>2oy=u7gGg@=_RG(@PSwEe1Fu2Wj@oS? zf$i9k9&5Y&0QC-?tw7<@5G1XYlu{ty#_yS*S2m7~lEq|6PqkJ&GBifKdAiMe!iiuP zUV8bAsec3(F7LyuFU*%dzdHv(L86H}RX%z(FYh`33=$98AFja~{?~&?|HO1I(P|4- zJUNjUKajq6B3xkML=rFG=KOUr3v#$jmCtR`UIzRs~B8a zRuXaI1D}=Fxcx_nn3h5*aeU4hzq>e!A14bZo=ZM?hDe7TG)RgjW)*%Qx|2ukLROO{ zYYVev4QbL-ZKrPjBSCl9-gdh}X-T9>A>pdO1LqX${RD@{71Cn~qzE{w4mICYHXD=n zzDS!jMidgJge~SE<7#oeWI-j;Q?0Rvi@o2$SZOLG0G(iTH0 zhT(k9SYA?FWLjCoF~5jiTCMj)oxA#wXqd!^6-7iRF+ao^ymOE9^|5xa+~ z_xheHL)hg|i1c#B%*4iTiuXeXOH-6D4sSf;WD~{E+VTlGDR1LiqnNNVuQP{q$gZYy z;KRYDm|0i#?XGX6S?AKLTsQBT@GL;3t3RC(XY{LfeE zf26Mb=d+}z+CTraZ6SFFBs2@-*sDp9J2Os$%N0$z8>wXh>4q@7gbsr z%1c|hJvk)*aZl-~*8NE+&x~lAx(O!Ek57(ZYjDz;S{R4e=sjz{$(^0d^}1B{=!U9+U^rs z0D}mseAszjzFSylY!qVI2kEKy&$pcJ(I0=_>;_dl_5&~8V?;-6+~#W;g}i)P&C{a1 z%@3-4YU8iWJDR&UCg(_~C#EWN|*}cP`XOV#PSaMG>uC2Op z!{D+W7;%|mn7`qSI;~gfEW8FuPqm1!o$6j6%C;6J#(kj>w)IPxiLL{@sz3%?#He4w zHoYm#O5{)1NiU)_RS99G%aD@r_)#nB>D3PRnUL09nI!$+*>_13<>C5I;bG1gs-Rau z3BKR=@iFped^1Eq32VfaN74=hP_lsn1fD42-_ZyxYAE-C{1d$RlzAJ)hGruTRXp-J zuf5NzwOBmo(ZCBuG-lCUw5C8mPX05oaLm z%)b%dr8}_V$`*^o)$=S67{H5%?J&eCj6~NFRPnsU{IBO*w8lXn?O%8B|HgN6OnI;u z{&}yZikBYc#p_NTF$m2s#Q-Wj{?}vveu_y?V$d0?xbf3(eC7ZBI-Ll_?;M-shEm1d=6}bB3tRou8X8zMF#kKh6>(m;&KhrG{t61>d+0m=7RcIW zF0zKKLtI0|?4@2@!|9V$>EMUF24{nY-GTxZ5lD}?IwtU6eM#F zhy1jOeuantfYm=RvhUu@+95FJR*wT)5nT?p1U z5@TxoAe^+e;ebMuJvuYR2MZyoalIRbimCC?P%7_JyQ?{kmC%#KIVg;eY!F|2$Cg?V6myV}sjVL){%; z3ZcOun<^jn*H7kQzmqSo${I?fr`jsiInlrk#m%bxBpi%w&xdYu(l6y8v;a6VG@eh>JULKv1x6100khovJ? z$~QTbGKTWxs&%@%6e248BAhgD{fjk()01w8<%S57o@yJS)qdZ$s6|{Cs<`chU;I*} zN%MBX1r{Gn;N>UIE!*pn=0%lv3H^mrGNw)6$bUa6l$ZDKa1$w@#GKt!d9PHd{Kb0G zW|QD=vmk)w3sN~?^Ad}Ps6fd-6d>?3um8^?C(N|9V?n<3R9pYGUqi)8x{=~HVPB-h zZ~ifo@j0LI=h?mn)o=D=s#@XT9~&%G9Vke`=-;dj6z{`P2NoiX`OR)LQjB<@b2Ko~ zZYqUH59SEt4Y6Y3n8gVjxQ?mqkI8%KT_Y$$-g!>&3mK>zDWoufzSrmL|I8W9fTxzieSG6g!iWY zNd9QsA!d!xVAXiaBM>sSPz1Lm5Slf0)@0+D~2LioM`Vol`*$iHbt zWW5mt#k$!uIN|J93J_dhk2^U#@L~#l(1r?n_0>j_lTGw9>I7ork;bHj9)*Y=0>s{w zHFCV9Fc``SitCrvd+XuD*~cnstlUUSasVhB)34uz5bf%Nx|$@zT>ssNzmQ1OIBX;V znI{1FeoKKBKFJD&O#&)1^j%vdVKnXT3 z;AT$f>(x#Gq)?%b0^L&Y+&+N_F;`G#nhpTM=-^-2z>08T03eDJd)1BCl%*3iF(XKj zwLd_%#(8CdkF=q|UugMMun(^s&4slj!todo>w=<1c9mrmjw#gfu05sSh{Fi%<<(@J zArT%=foQxY;;ZaP+Ebz8>5{iNKBOruAQAr6mE6?j1^XwVW3Y3g)s=9y#;61&sWk=- zm6WSt_7Y=7hq}s1CPlJ}5_>_=Gw$98O>5>v5@P2=#r{eAra}cfjmT$Z7V0Ycd>V7PoU^3jSKr;{Wn`yn`;pAADWz^|ovB($VhEytD{jps{} zQEaHsT|ITlRwtx#t*j4In}v?W7_12}(Wgu`>;Xi0gJveMge4t%fT8%*R2@GnLWCun zh=C->+#8%>s`g}1)i$E=Oi%cd7$-BA;_ge2JR1L1Jx!7ZSK#TENRZEQbwbVUQF z9VZzs_rPd-;c}wfI7#;e;!#I`ECy(Da!7<%`EuOT?f#ulLI#U2%9rD&Dtiuis&n*T zQ&OWGWo)1gI3c$^b%v3A8({P!+bE`?Hb#9(MC1%0`hJf41Su@i@G7TncYUH{s=j_I z5UPbFB4HO0z1w@}Z0t4JEmSmIuSB$^u{%s6(r*JX>0($Ts9sEyn2u|_tCXkgENu@$15ML0P+`>3LnRS-u+ZbI zQ#W`K)RROQPXVIBch4MIgx?f_xcPcAGSr$V9};014#fL~^^qm!H)4gCR~Lmi=`~Tj ze58A2kR~ab}3&kij-STo#N@ zS38~u!y$uYWPS!?!iT?B$!6Gm5s3TwwsV1SR~S%!7FZZyNZuc6DG(M4l>rY(70#b^ zvMw6G4kSc529VC%8jcqbDFhi~fJS*axKBECgiIw7rW=4bc{Nzc5ePvx2uMoJANv4_ zi69}?DS#;Z??Y^>4NN0afKY6ARr@#`D0??txItnZ3xUaxk6y>M@a#pQkTPS`=lYP6 z^@C)1G^xmay|$rd4cU^kCKX}HqR-_+fhcTKk!l+M;Xs@ls}l1S7K02IjBORpMS@{4 zkz|Ce0mJ2v$7NYY$r^#^?sQ-j5N2T{A~p$#kfrYn;RXvr&IrcI#O}!KX>6{LjMO(^ z)KAMDD$7tw7umDXP&s?i^RgREFH14VR}zz5zY;ffe63s&m9d0IgGzAq(!jiSsE%ig zN|dX`L%{I6Jo$$##dT;U4DFud?tu{CMiLBHfDkhM?*=f0g&->=6>o+~Z-+S(7XlHn zkwlm$0O9#28RN3HqXs32dR%G$xhD{D8WLgq0*Hk2FGHY$g&!}#P#S(bqkFrRCas7B zxzsV_ratau)lW7gsg5B$)$4PtE41X88&aNn4FKZrns1*#3yVPpfT1`Up`Lg?uIz_b zGJ@m;`h&Cf_>?uWlze|7Wv}Pd!H{AUL?R-OiQ4q}eil+#407BM?K^(&bs$t{Nkqa^ zAjXdy)L&L%k^>dW6$9OLZpYKuy(KZ})hlyf2e|$21SL`&qSC7jUp=dwddZL zl_bbG1|av6iaLu#eleBR?bf(So&Mc~6{t5CS?xS!hJ^UE ziQNreqmm}+C5f=FT!nku!1AchUb~peRk){$>$BC>>y&K^(`1-bp?r1g0nGWd>Ue$g z&ye;2M>*$6i$5ks`2$IiuQx!iat%JpT_wxAiuz)ol~Rpbe_qZ_Nm)t)g7*P1s!a&? zAM%fv@2i50P+#Xou+`*m5)pk5h@=j8{*g5p{ENEiH$62JnP!buE{RAkUzLY+6s&PDu1Z;&X(J)D$+1)2SKOCX*mMCxIW8bovo|wHuUe&0cYTd} zUy@QV1C-fAOOge}Lg6KJw5hNF%N82Hg(N|_8-%I;!+Q&Y6pHK?h{Y*wMBE*6m_(TV z1BBzCWaRk}iu@xWTQh%%_&+9_gjnlU<9@XNa1l2eu~0;>8hYxmZsB$d4mxSShbg`A zE>x*Tx$0;Q%C8wkRnRgl8Dd>cy<&EIDSq!cEcm%6!okt6|JOilc+eQ^CmCVa!HC z&xr!|kQl?uz;wQR{|0&q3rH>tDNUcR9tT$=GDwE`7ceUBbHM5?i%7lzQFY|k8D9K@ z_1b^K-PPG<+P<4#Q4^=API+vrs?I%5?KmX^s#t)cst%Lqgw6T{RcReahRYZ*D&c}Q(ZmL+f(ZP=GS%h$ZK+@k`%8Epm;z3*#}Bkc(MUX6sieo=T`A@coIQ!0#m>- ztusPr0U$p`RLH%u2{wypjM7O&WFZiq{d|!D$CMAnsw09VZC`|%l!@>m~P{Cr9GlH@D)ZgKd5p;!Q z7#Dys<^4*G3R)R{1p@JV+>i_)qP~&{%Lc~W)9ya=MZm`5lLp2ZvvYf>ohOv-i`68x zFs4kk9}3R##*KY>b+l4qh61CE9N1TP`C60VMsnO%fRkJ>Y!7TiEsAr0Akj zw;iZb{zekvn*hX%S$4>}Xr*K&2q_^Jt90+tNx48`f?ohr9JkyRN?6L|1vvU2ju|(E z6qAo6Bf3sa?(X2GK00}51CyHETxD+Kbvip#G*(S(QsyQP0Os$+lypd8vC2TfvFfTS zySrB7Fp{KX`h$|WbGnWgnAgI*b=SDT1hfIV!$}IT! zY!46&tEJ?_4i>2Nly=6m1><80-xJU>HjX4C)f4D$tk`Ej_)P~c9Up3iR-_>DC0xk>rRUUa!HI~ zg*x2VGrMc!H^X;?RH&m4?bK2-_ICg_)@UM(>rlp;cL5?asQF;ol%Otk;A_3K`#4vr ziR()uY`uV}5`Uu_Oku%^R~_}zTldt~=L^1;VJR z31w%bH4qB()Q9kbrA#^q#$P>eiC>G#j$|ZE5sXpS5n^dOhsjiduq=JJ7&7eUl8E$h zAS&Fwc^fivcFb3m)g(5+I~fSq{UjpqIuLu_?`kHS;c!E!C~y8(2#UTfEyE^#Hjx>lxbtN&D z?!cJO@=-wwi$~nSQM!&Qr*oyPCTS+gvEKqtulb3(Ns}$W=r?;7DdtNVdq{-aWgxm7 zXe^SAEEKsc7zI5Si!PF%K{9;5fZ_G(_gl3{`O@D z7{bC3RXuceud%5jd27;*=he<_%XY16tfrBecq$ zfv`{%iMou^Q&-XQ_Ngpm}-GoW-{ zH|P_m@Wq=mraUTBY^nc8YA@>w$?+%vXW7Y#Lu55+1)@T~rz92>%B4xv_Vy zPP+#wYyqc1eGCNC+N+CZ$@5Nwmh~xj!-j%0@7r6Q+*-*{VDxvE3l|HPW@AZ2>f z57bsd3X4Tn3dW+>7Qav(n@uDmH31C$vkTp1M^q>4^R;9>>H7AmWmiXPoGy@*>=&Rk znA<@d_-5hAOQGb}fE1CT_xwmQit9As#XEIPQvYIz7%bAQM8RkpC*gy9Zb~I{b1TATxZfrA38UuRhU52G`K_tQU zI0$JG88e}Rg(1?18+lEZ%-$uI_|ndj43``*DttbtvsFAPMacth|wq((!?ST~`S8dWK2*pMedq;jBfpEQ1%Lxc0XA%*)0Eiy< zI#z@mQXrzzYpCuOS5xwHsJ_UBs{%5o9k&N^-l9c%|lHtM3Bbu3@)<8iEP&BXN;3CgS7i2FLcS%LgzN+Z}>eeW@m zSNE>lh_bb`2N1hghrERr7LW97q|W`_S2D#TX#i{uawHMPK0rMAFc}DKH}&%oD!xpL z5);Izr6j^K8VF61!W1f4C=x9gKDW-`n2sjtZ<1mEFBnfpf6!UXiuqR{Zr#1~H)@iR zOCsDVm~lVbZPZ6!zx>s#X z8CzftL~iQsZCr*nA<{t*_JmIm6Ei(8?&DTS>FKYf{pJ5Q5z{OaswD;%_(31SYf|#pX50H z0H?{(4L8v^EHCmyRLZ+Si&#`D%b*G6tVf$Bym2O;UXJ&b_D7u7rU`Ex<=0Eae{{IQ zt|Z6b9h^tDCQi`8ViNZz>d@W((sS zQ0sZEF8Ha7*8%fiU-5y4#`OU0>+%q%aC5tI->e2RYaR9QjA&f$CeVM zIpu4%%AEW9VCt1FP{P8I7Ut;nbz*ELK#6BZl2JScjFasaBc#zPadi`jo~Cm#oM-~3 zkqE<$K#VZ^fgN@{E3#2AMm5?XCKM4nNQSuvjMT=pSMjQ7Wdvz}P|m-1DBL+ve8El= zmri1Ai-1Y4@W2p`u$ZJsNSXH5K)i?3ev%9q^QPQY)km|{vXmtAreY{*Vj;RnPTQtb z!+4DVBB@t;3}moHn-PNXX=ghzG_KZ>{Ivoxap!h1DKXkgA|lTK zQEtv&(J*nzD^z+wC`Z`l$zQvbR$5e7NlromIAemY&yXE4c`KycpRN+gV!IL&k=~#g zH+5Ex{IhU`g(VG}sr8-?mwNoY`r)}2JH%qJYs+Sov3Wy*>3ZJrv#i9ysToF+jvue; z=Dxkhl9@8~bj>II_u;AWi6zTax3JXo7V>Wz_lO8qWETlLzvY?F3>;s1X_;31h z``GjaLOI8(tM18Ojk`0+DOdo`m;hS`!Ld**w7|RXYCZ89_6sBd%EJH{|K(yU08*~x zu&B$?!fjtsmylB=!ZaI*{?|4k&4KVF+d|#=PC03fW23sLNaw80E0SYfMa6w>cOi3% zEG43fircE_bY893SzbxLP*+7+>(~>RHoh~kTFLVzJyl$d@>-42s8N<9iSY0NqNgHX zXC9m;Wi3OC&845Q@n#V>7A_?T{?Q=V`gkA==Ib@lsEoeNKj~uguR$Ei2>Ta|%brzE z%YKynD-hAC!D3H`*)tLmTcHKF)O6~1Odt7~U4s_rs^R^D#B9r^W(&&C)GlB=wKUTi z=v7?>;!(V-7}T8lk%(+BAP(Nqh$dk%$xOk>)Lg^8oElF*l2N=HjO{@$u*||^k_<4EU%GD$j~{S=ZDLBTsEK$?a?BMixvSmGU9Ds( zL5h~@UbCu7-TjI>ev6zpimTd^^3}EjD3;f1H{cY0=~suAXq)aMpNMoznjOh-nF_`x zo3s05B}r2SB6Rt&Msk@}EDcMhg0&fUcb|uf1 zwdCIroOWM(=&pwwJs>fWKY*DSH&?85#{F8W(i2rGsBI>;PN*tcQqCr{vE=RZp+r4R zR$|iD62>-~m?mOzJ6jTw?hZt5%Mkqb_}!utE!8XXn@Me)qYe!}T=uGPoke2uws4G6 z8QEIhsOEaT+S(V6LzoaUWmWVuG>^BMB$Qr;kSiHSY|uO`D!BrN($YLYcg-Z|4#_e8 z3eJ7A#X8A(zpnz5cJiEVCMinUin7+SMJsOY(u*sNA&12$Em~oa?lM(Dd zB*)$joavtf@5oIQ;|7d=NchsS+{rW&;kFTo>-AoYffN>-Y!p%&%u?SOUv_h!CVvOX z@zsFilB;`TaF#|$FdPi2Luj*f!yJl_V(NN`xYxy2^4KK{M;MG7_(y$FYtzv5}W=krR$q}Ims(PX3g4CzQzs&X3!3wWXNIp5=X%qvRhp}x$GKfjm;>Mlez?) zW!ZU;WjU&)z$je@rs#faTH~~i(*!nU%TMu|gA`FeKxVy^Kn@B112*ub+T{L*0)ZY~6aRZtrqLCHlta)D` zCazwk<490nE8alLIyT>Q_N~V`lN8&9pbYN$ZZiB}Ig^D}$kHneMXn+(kVLo~1|o0L zR7{h!FTbS2Lde6W?R4)k)8w2YIbPY|q+~r23tLivqS6CLzu$?Q7U=vXuSi5-m3G`# zm*7DvxtHWuX~$Pllx)2B%EGn5P7`}(Ur+|^6d9fbn1Thp39SyT5k#5LU8`^&4zjrx;XGmIfM3Uv$q$5BWbRrR9Za|z0*TYLn+c`?y zI`V9*!u^NZ=i=G2MQt-r5)-=-n1{9dq(BLaMK*OryBxB5AX3>jJ4r^W28_mPTb(4Q z>ViOQeK}NYu5r3aBC?Bsc%2?H5HeT@@(~Q>NgErT&v$D)f03MG^G@8@mdK|w;zg)3jf8;6IB9Dm$a5@UN7nCs8mU_QW;C1=6WKl#~oJi1HTRg&TI7L1VR z<&Z*V0m)k-rM`FL@c7gSAtk4T#CSFA%>C6IPY}PK0JE(sz0TZUgKH_FYF?*xo~r|=4DRLE!?iHKau5z0>W%JJ+1KYA0`85awsyvP7SwV5O& zoP-F6dz-NWqqW53RA+T=??KY2c5bbRBqvy<-#~1$%Mt5HEExG44CS!cp6WZ>v4$h9 zuq7pvAp2Z^I$y5&Q`QobE3~vR5?_|oWV|C0ZpK}>vvqrQy9P^GL}J{9hw*w&YQ0y&{ z0oEEUA{k+Oz-V;v%PYBcO7;Mud}!44j}0$ou_Pxp1Dp%>Y_~!S3s>&gN+%@iNQ3r( zh<1=-^MpjCD!Or3D@1Nk$x>9xZfd<7;eOYi4jffpsS zNJ3y3M7U?o)Y()1QRxTWgGt#EjTCrVoO!07zsY^LrQN?Xd4!qZ0e!zRcER+s#?4Z*XuJ! z#NuaKJk_gL>Km-=Vn?nhUPCg2TTm22<-jk$X zB*VUGPi}0FM+tbDYa1x0X;1Xks|~Y6;F)37lWH5ckw7Fzp2Au`-}pLGFzQ)^4}_`t zlSqbd5Ey+eN(RYpWCaOCC6o7)IU;2nNeDg*f^;F(FPOoilCwQ=TiD7OI^P!7m|P<< z(QkpV&-kHpoWbB7gebe+eyiKhtiF+$g=W1dTOA#NIotXrFg$VM2#$W0_faA{pEZhPcq|2@ zxA#Du>2TUof!H3DIt{fcTt_1O{{})o?X5`gu~_79FqA_Y?f>IIkij_;6qXCnp3#jz z$hMT^3N34f{3mirX75QvtZ{Gd?8F-1_i+T@UsAI-h64ZcN86%4HfFskTT}aj@$QYy zJXwaSUvK2*KADTutzzdoZp5)o<8hZ{T6-d7xQV5>M4`|zDR%A!#sTvXNSLm8XU6^QiR_jUIEnArBg z7(MHn-yi+Nu0P31p9#*n#j7fyfmq&T7C`!^3j#%^!F3VI$lC)($GB^E8TA}RLMK!TveJc?)4LuX)oQ6! zNmKHmub%(^Ueh1^6NrPo#?FNn7Nz_YjI3Qh;=nMf)Q@6Bx9!K$Obt4hU6M=Yl_}oFrVByIm!Kkt$l+B~1s@TmY8JS^V40iAvExTc}RUkCO zU$I3t3E>(=A_}gEnp|#wNFXc}R|Vnb=?f01i1%HRpez9)p~<+Nf*?gDCH?peMe%&2 zoZ;9n-5;pmpR&}nWq)p|^}xjI9D~TDWq);itu9hfzc#e&eD7Q7RD36rV?7p}PL2EF z?WG;pBF6Sd(~RtIvmZ4|@+1+Cn}Dc0IjaGe!XuMS{rO2&<@gT^fymfNB0Metv87sf zAhasdEzqRnI+KOUiE&5!Td!8*9_^ z&@Q=sN}4*rki^vs*^FH3Bqr?~sJ4k62}EAZw;oWzawMY!E2 z+!>5O&u%)wYmhS#O0~fRc`;V1PRuxxV;cz0hS5$tpv7tRL6!7{M?M%;+0%3tq+Hlc zB3w=Zk+kb-*#8F=CRQd9C$nbnmB1(-Nxv4Hgrx-&9i%4oZ!qtg~ z4%`MKz|4_y)wmxRPY2|lkY)Jw6NrbiyRuw~RFjBdB*M}Uh&0nv$fxtm=Ka7>NZ*;g zvks?orG|-HMRM$qfYa2Yd73OG=7^AT+Og?3)F$mTiEw)iLOSPMi+y+M?z!FE8j^u5##GFT{L2Zr)kK*zFg z!JVt9F&a#AqUVA$S-BD;fObGL@D)-{?(fqQQdG-HMDl(hu67-aP=YVv91x67F)kay zu!|=dnfJlC-mOZJ?1;^SLD=Nx(DpkBu6ZP(z+f=<^nH!0W#_Cc6cq<^OBIKzsB<@9 zIZEmv-n9l(wkmBw8CUgy&g9e6b}&XWORtxe3%$Q$N^cSqHVv2w7Nt57eX>wwr(hf&@?t(}V|9>Zq^5&me1G6!xu2?T4#BR_4{h1iZITLyERvA@69kvX z)(BSl<*vVkimA_jyFi6|rJT8j8+7I9YwsAB)LS>-u#gF@}?X zc^I4|rZZ9`qS6CKzfr`p8Bh{3n?#sz1>(EuXPwzh&{iOn zLZxeA*$2z{u9B;wN_K_nqWMSp4^OJng}Wrjr39S6%#}KM`J@t2rB&IJ+3KLwKw0`u zl(}9low&INeGGFTg&o6b>BQYtes!v&+ha9_ok&pNSb+W;)>~)cHGiz&D9_d}+yD1i z+UGr;#6)fa#$(931JJ{QlFi`g-)eTn3(aH}Niq^HfKk4)wD+Oxd+;U~g_JLb%u8Vyr7_8%uHah)#a;W?JWC{KNz zfjDjd`If9C%Xt{T3t1W9A|_ZR<48hqAPDjIUiL++uy7=B7=ASNE5C;4zM09^)uhgD z6hd;MPk}RMePth6iNR@sace)~kIAp<63Iz^1y0iu?{QR;$0Ydx>Hq%LWFLMscArQ_ zW?dI`0soE=FHd%^Oxkog*36 z&%k*2myu2fiFhU|@_zhC5R%@L1jm}gxtVwRH++i@!XlEI!{KJFhxwvGGR%fkZhG_s zV|dqfI-^HgKOhv-Dyc6{!8hHdcSQa$665a&%(AcLQz3;VM*M^n-;42(lCqjagdG9m zsa4C0qFtr^u1ALRa84@FUEq+2u zNIZ!!e*naq8GqfAr35_?Qk3mdwP|bV9Tk&D5^O7uWwc^DNAR@BEW!9%&{;4F z7m(I*iHN)d#Qx0vcv114BzFbFGct;;)<~m}*?%M> zK{<-MdZ>OX)}6F(eiQvsXxg0>4|RkaHb$c;L(@9~apV0c7|M5%bQ-1h(essFbjM!r z0>Y^`iO8D{)lsOTvWP(un9^`2OMz_2n)q#p`*=}pJk^9 zq$txnlB6gvg3|N%s(OMVE!A8Um|^?E4j(VokYYoa^r69tz>|WJ$&nknH!G} z6_s4%&v;2qYt_n)vNY8h9HU9%WQf)e)i5`-%BaU-ndqwy<4HtzAP}?Gy}^PL4@OoA z#^aC#cDhUQ)IEe`6rTcP?Ac(QklFRL8$NqgVXOu!{4S9M!+a1v|Fc;PBW7=sRC*Ah ztn;>6+3_FgClm6C#F*C`%YFS8x_-XgG(q*o^4o6|(ue3mEwI^1n;L08ma^4$5HOi8 zJ6ocUusyAV#=_Tjqq?%&NhD7$xRMN)WnjFounaquwM~<>Y%D)rqPH~sLiOG3vK6U5 zS?fuNR~#UZuN;Yo5SAE;gAnER`&V=)tcB-DPT(_e^qVDbk$uU328^Qfb9Jr)IaXKFUKD+K;^2Mz2ILh0Eeqda0?60$v#iYML%nHBb zj?QA^LL$=rfXL3?DAtTvQe=@}40-Wp2^dbRNk-lg!T4C(Np{2`Rv>~BTZu&$&qNYY z`WT3Qd)g0x8!Rk&G7h(f?zk&oC@J-}fY&6)xY~H`>iWC!-DN3$)yBhA*YS!d)F#4o zJY}k7FCd!NJL3;2EH>!{hVtY?3wdXbq$O@J39|PEsN&*2D`hP)zCz2YjFZ;TlD3>g zxE%l@@8J{CIxILjAhbl9onVLXrSUN*o@Dqw0OPMKb96QuWjzows#kkkws9nnLCh)gw9zPMtDMoa;mD^AB*rw^GJ^4PH>E`Zv27H z!BQhTMSbqh`5_j3G7gdqkDFk0^gfRC3X4TA&HIX;V$D{7(VZ_v^jC2sLugBoW0WKwPaC?9LHdPh7tVM3Y)|#K`VfZW3jy zq2(lQ>sZtIRiT3I7qOg#?%w0~oGy?N(wStKj{{@H)wSbg8A0QKP;{KHzT+iNYGS67 z7~9Rj^gMGEhs}9vWb-6k!ZV`JLnyfrNg`Y>0&(^0=V)0;(nX1&Ju;=RJTHdhtXm|( zs~CiK+kC~j2^NMF3qN{4GIfHA!rvq#u$c$`AD4f%k%tB za!MOb=Eiz0EeV7k7KWHj=FTcRzTR8*T}3I@3}`i(a@TkmICH0Wz??*@$8Q)g3ioqr zy+-)Xjr0qS7*Ap>R{>My&86Rv!$Of&Le7^FU;e09TnGuWKP^B(3alq+^~9V8M_*m} znP}{^OC-WAABg2yiJs8HLXmvI$h=SfE9GcYEfJ*=~R#U@W6ZnSgQ3{PD@ zkcfhsQ@N+g9zV*qd{`)IO@*ZoO|Ogv!MpKP%2H*25cHmN#-pkSO@P=_6;k=_wjCrC!>12A?^-Z)F{7^*BF zl&><3b(Y;7o|Ba9ik`fKMy)j#+cXLduc-7qVQE39s$x~dy|yRiN3kss0So@o$=~lYm&4JlX&7Fi2u1e@m_ss*w}J6EaQj->48LtaD0+5L zhc?6=DB93tFNv|d2F%C-?lmEWg&x;tAXa`|BsN9HWs(T{Z^Dqplkdt(V!q8#w_D>T z&B%_|6e;Soa$c0BZkAr$(j(t&4nYKqIV`=nr-~}w)a`oVa!08$Ih{$4?>KPYcqi$E zV_D;X(Km15cMP_cOeYb+n}O&)zV%>8VR6T1!5IGVtBARcc9D$ei(o8%HdJRd#Nd)Z z-1>E{C1j{>lZfPEAZ`}j!^EF&4EZD&oi;s7%Y&HBLT5D_t`1GZRWRD%qtz^`eLRMNvvrYi zoUA8p7{@eGrZ|Y5S^48hg8wQIws(uqo=7?9{d?X=QbI{W*l7@&Pmld9 zYbZG_U4;CpzckG~lB}-2Zf}_-CaEMQHXoSjMGM3-FAG9m!xDYlv*n}FF`NMp2&CgeQHFwX;{ za^A~xvL8Wt0ukM~mpG0P^MORz)|$gDo#fx(A!M*9q}CklM6m8CLcd{IctaeW5{3uNF^T_y0p%{#bCtM_Mr^5?*_)&hnYIPG^U%6I&{o@ zX&9?~L0x2oG>nuLN^>AFZnJ?I+o}rQ+x(7^*+R-CSGSdrlCzj(_(p-z`0m)UWdkYo z5hW0}s?}q66iM&QlA|Od_%0A}pI2{&BP;~D>!aS=OC<$VZMTY9kkL~T5v@O$o4PS_ z))Kj049d-gr`3;zizA|{>T@YilRE)%>zKI(RIs#1XTi{4(eV|`u(Kx_nVw*Dy*f!} z1;l2$Ks>!^F$D4hcdqa62A~DKaz{E8;SR@UNDPNlk0r?Jx*Q-ARI@2MBX^cAtuNVc~~#Y=!MURL;p>_(vR*F^2?sYy)U~!kgi; zC289Pr%h~i`M|pLtI6L>a{RA>bLLSZ(m6Z|xdxDa6R*aY_@~?>5nQICdAc5LPxMB6S=P79Be4WZPBa z1>!?peX*&-VFroF-VDUo(jMVx9Cm;=L@+Gs_3REA?z>1v@kKEDp8JKjw)U0ldTAbZ z{G5s(4}#xql3@4=1pP#xOsHVt$0wn};6U9$oN+#6K4qtQ^ZDG))JONQi9#zPsJXNN zqy4zIqRVXEZSpbgNs6s2D7!Y@%Z3mZfVj>_tMvTa=L#xwVKT{ZSr10NtkswsvIs=l ztHKX3oZBeQKxAzv30~(wFj=%IA1YV`atI&tr`BtUFA7Oh5Ss}kCVdq!pZ{IF4$iQ2$ZEm4uvoofwmk243MDyt zr@=|yd#xeoXyrI00;9~TX~(VyArcpNZC4ij@Y%67EB`C;(?f9{i8pmu*69GLflwwJSRN&?;4`V<(wxm zzIni`3{1dUq_%ys@`MuS;|<%O$CZ2_5y7?mxUco+Mv7>W1tqooxUtGwmge$jAf?xZ zQ4>GP-RS-RS!@}u^LsXM07p@KfqG(4x}LN4N0cmWTpdngk{1EfZ^(A6N%92AVsP{u zL|hR=i`^QMkr@ldmgRSJrWH0v1){0mpq{YBHHkzNJOLtO)z~s;EfoI=Q+D5c9A1;IM0SrPFxT7*u!reSlj;U%d4BFa|N-ate&>WOSIqLbbNV(%C& zPV+|%AtBcD04Zpc<01FhhrP4rk6o*Wbm(;uh2!N@p4 zGCZ=tn0dPDY*|KH)*}A$QPzES8if4kB*DMZVs7YjJu_sAc}!AiF&zDV=sNqLP^C&K zbrw^GhIIp?RrV|_XJ~&jCEWy};PX~zs4y8oB4TF)G3?imvY5pCfl5yx;!1~21H#Im zM5IOmG2ea3QrQaC-o>!ucyU=sa*QNo-vyy^6+f}`&O(w*X=tzPBZZtxeZ(l_{**)% z>-%#zf7kc_B#Uq@=MOW7wiwH9`IP1~e%1XcHw`-j;r^}LPIL{X73jJ+b$d;5iYlY zDEGo3R92C6%b!oY_4=#ze#>W?vmTNZuiv29cd$_;HWwoN(6U@=ImrQA`a{&vkD)2jd* z5@b9cpfkR%&txrr-&e=PaX) z^=-b48{6?OXM{2=25G(wJ@v@DB(XeP(w;;Fy8_W|*sjS?!eS6t!SM4>6pK|xQ%FYi zdNB5$*{qW{GYDRW<*vVPh?%A;oFpXwA6@4G-o(-E{nf4k(?vHmqB{vigl52iC@+|n zh|nCWC;`z$H-uoBDlkRH0h_uq)pXHK7cH1Bx`6~lH-vx)0SpAVQ+N05=kI-<8}9Fa z&YYQ@Ju^EyyDJ}L5o$c%$!0^k@;Jm=A>NrLr;Jg5eaCV-+c;NVusCymPdTb4NW@DN z2EW1}?cDX2B}nwgY$N<-iltqeXY9jXJVI5md@SqH-iJp=u?UXpvDuvzsS}IPuX{uY zkANP}bc&^avO{X?=Sk}7lWm03GgyROBZl3j5!kw825-idbLaWx+LMrNklK5BGb%sT ztdx`Y@({C^Sa@!v9nUsIyQeHfeBrh4X*=i}Ay0XXz7q~VV7=jglWmOtrJb}t4@5lD ze3Fq~+R5&`O?~-tFte&NyZ-#81B+1O^VOcL737_e4k!fvF?`9L^AK&s;qKW+NQ`9> z?ypT#Uh_fAj#wu!O2oQ{T_e!*?c(L z2*)3=2urr+s7xc^u^Rr6H{zvZBj4kW3T7MPcCk3xmm@|OX7^$A6Pe<1>^0lEP53Fb zRfx;3Gher6A*;ye=k2}06tD?TJ zCFv30vutB@GESwP`up^lD77hR#;LSNq^b=@YJWg5qs-LoI(BGt7Uupg;TdZRS$s6- zaW+>gqWobSbiW?_KHE6c#`lKxSvQA$Df45V6Z9_f}gHc9XRvWOq&rpU5H}WgFsbo@umi_taT4 zjQ6Bke9WDEI~%H7}Cy~CD_N|&R?<(Q6zN^1Dl#WkNPacs)9caVqHPj9`$*Q*0WdKW-$USvW+ojFpDwa$jnn}Ze$E* zA;e>SEaOeNv}hrJmDHG;ZH(3DS&a6+B30C; zgkG3Vf7D;f>*05E;kUAlaNrA%kbln|)(Y}eMwr2-fC1+#X!js3`DSF-u~%x%py#IG zwd0@FmPCBV!yLHm(9R^$O|lL1SAQ0!$E9J@c$li!1UV} zO*`z1Svx{Dl^e>pcU`Np4N*Fsg-C7Pp1nNHRv_v8VDdb>2Obi6u4Wsl_6HWp{&}c& z8S;TQrenv%@hsWWa?Z@IU)xoiN&EF;dJp!viY`N{&1C22hkyU4-3s+bWE-b{ZxjcQ zzVTP)@P0)Bk3sECv5L<84Z)M)_7)@KY z;;)C94YRWA)ZfD-p3h&#-(woYAd4Sd5D))4)RY9W0JBBk@pY_;fx-`#y|aQ zy@z;=i;0tY4EO15V^n;}Vstp#v4+|V*GnFvM9O3ST4?IWY(q3E@1p&=EymcGhM?ca zly}kI5SLVzJEqN6^2=A)t7T>k#6q7~avAv7O~h+-E(1rt+B zhlTuUIz2`0qL|Z0<<3ob*`pEwsoCT-=#5#!Ux?IqCv zOU@QM>M+DPHTII||3^Ko_?MD%U33}hSL3H4Wgs>RLU}v=H*k`k&`qdsvGU!C&Te@K zDl$&#j{->6c64FVA6d!c7X5!ZI+Qmy=~d*2Vx*&gd37i8|LJHW3amZWLL~6v{xg!Y z?PzqK@@YC+Na~nlB#EA{c#gL(eu!%Mqi8@cXY?&ybm%wf^k_mG8&K057^+^PoF&dC zN4c}XeDZJAhV)J#K%$ z#7iYg#a_Bvbvr)Un*W6lq#j%f>Nsr>v^(vPqXt7Z4uPDZ;aFUWXDD>A4})wT4mnH5 zz7f#w8VT9zfE+eTVN$;kPz7?(siPGK!j3VJBgR4&#z9Wkv3oqUM^E5P>laKhTp;xc znL74Pg!Y(8kS)JJ4xJ3yujAxjnVr=y*rvb&;jxf|I!<#!yE6`Q)KtjEX^=A*^ZEtP zbm(B80ognga+Z#Lv!LDOf^3})IcyGLrG6nm1=|1Uzp3%CfMYJ?h|Oxv z(QeFY{eme0I%MkDyAaxA5+PfDgB-dDvR}u^i;-PZzhFy(1;Udd2X&mb1lpZTAxABP zY+MdG1F^P#!LtH7*jGX}%aF5l?DIgoD+RK3738qhvt!A8%1?S=HFQW_1KF__a>P2w z!g|Q*I(DZ*d-Mj~urh6g4w*XkZi4oh&5$iyAct;+?ALK}>^A6N^Fj{a4mqgfv>njy z+zB~q7i8mZ$gvqZ!LtWC*!MyC8t9N+iA$*XCMc4 zoOTx4o#!A&ori3^pfVZ%85#i(MbAam0kho?*?b9dmX3Xwq1|-_vh}LMbp8purUb>(K7F0XZTAvTze}x{lqqxSiH7MBnBDsb4Vt0Xb90-anx|<_=`bUC5yU$bQbO zej)iDbg$Pup~3;#e)*RlIGwyX6E(f`5%rZEkR$Ry7V<()*ReZaEOdy@57|@za;A>G z1))902-#8ya%f@5{#c!mTm(AUib4)A205tXwBpe2ECD$x405coBos1q>?sB9_R^5e zWguti*jElfVJphI*tWYbTOGj;6k4(%~LAX|Du4()|lQ@`NHg64n8y&>EBKn}M- z4(d3qFSI-RL5}LLyZ##oK!*$+dwzy?`#{L%L6Ea_?6X6=Yq0M6Zyf?1!iGW)=s0y4 zv^$1Fju-)17zsIjr0)9fc0h;dQIJieA!q8?I|kZg#zMA?gB%(=9twUPCr^NOTMXpz ziI9UjPMZYn&R-zMMoor-@mI(hI`&L~cDt?z%}!{~(y=cN*kc9PR3He}X^_LFLk{RT zbq2IMW?swj9L9cXexB@>o|D>wA(g94&MYhsN=NF(C*wqnb$8wZG{fTZICl`?D0aoeLH0H z4#-(L_U$BgrGCM+3l^~Mh8(sBazMwad!gNt203CMWMMyMwSFO;2=sj8|GE#r0?`K{ zn+`$F)Uo$4w8tEQZ1Ex1)Gve{g${llCm(}$+i}R@Cm;uPoOTl0oxkg@|52x)gE1X) zhK@a_q1}E4viU6JEFJsK>8}5-^RR&R0_3oZkOMkS^+UVk66A=>kcBI{t5^CJ=-|Ez zIrN+gE~&T1MRWSyHJPE;CloeT#q4JpFj@FgdEUu>QiWUJcAtZmzMGPd#)AGdO*kS zzo9+)1!U7p$eB9!2BAIXm4- zp!$WV_mGVrAZO^<^AXzZ|3Nl?f}Eu?o&S8Fp@ZuSWUCMl?u^0=kOMkS6`|cBL5>LF zOzTJQ^>6_nKgt0eyK_Q&bS}sy^aoFAN&4SR9eZ;_drTh2ynahw=n$F@vR}u^`Jvrb z0CIRi$Uz;a8L6GuFE|Uq0#St_8;d~B(6Of|wA+h8HW!DSMOmp|@RfiLt}w{fl90nn zK@R9RwKTLl%0P}Ni&?E-5XwP^bRE0Dg7#<=WK(&_nL74XfcBV*h_&@wDnWm! zPObv&wyKcB!yyNCoc47*-2Zoe0}Dib3)xr=a)ypQ)uG*91G2d$8K2RTE>o>tIqZw=WT1vpm7f`Z^{0~`cb zTgcXSki*(T4(K?w1GGE7*D@M^5kF`JG=Ezmr|a0=5!$1Fgly^rIa9~p&Kf%&|1n)O z0%A*7$f4aJ`*oZg4ehp{AcuE{9MmwGf6{tD2WL;nQN17=dqd99v8NBT+ij4|eHEtj zUzRG6>!+`u;y~EdAF_1-h%L$>}3Icy5#fR0mjQ@z89{nh$~h&UKPm9eZaYyQY32W)>`9aX}894cV{bwtgXP9&~Wd zha9y4ve6AWL&u&3XtytfY);f&|FaUIgYP%Uu0@coiy?<4K@R9RH5u9+OLR#Qu@pK8 z%OI!g*u5OuqgOySt%RJZV{fbs9b!C?Eh&&gS3&mcIC(X++txr1Ukf=ls1wrGK?mo0 z$Wf_~jT<0m=-9In+U=VF#|q}nKoGKY?ArqEuC0)*+aQN|AqRAvx?O8W`R~}F70`NM zCuCt4}J>kTbQ6$DcP1I>hXQY}pSv^Z;bPj*|~UyX_F<@WU#T@gLL( zc>Ya0qB>x9`XEOgg={p>lYknxj^a{BF;e;&O=VuvHJqFM_+_&@K0_>65zPr%w z3P85rgB*4razMwa53pUWUvNBx1tK0n79K-R*RlHvv`1$`Ha&%$iCI&>;C%)iV*Y|` zc@8=BZ^(WfC%=Gp+e^sdLEZH~hy;HA@xN)WAUpqo9Q7Kq@n6UpI`+JQcKci1_22vs zI%MhCmj&&v_mHh0AcuW~9MEy|w40DG)pF9-y| zY=oSpV_zX?cNK1({=3r z4%(w@LpIf6%<301xj>E|{lPHq70wuY2>{X%#n=n&L#S|qeP z8$*t20@>IUa)ypQ7GhWG7wpYo0dsT6SvvN$fOc0)$kzWs4r>KDKv=C`NNo)r98r)X z+CUcCLQdDQyB)Mgw}))%fLK$%kckD&|GeKrj`;zy#R@sJBV@mhlYfMETc^43{y)4k zbO`D=tqZg}yF!lY2H6-5IYY;upXS2-e|vXWz}y3JmX3Wrq21LBvb8tlus)CjePW@I zYJ=?P3pt`6WT8LgbRD|~KzsDhkWH}zp^&L#?;vQ8u|u{Dh8#KsvR}u^L!mv^HVg{k z!yyNCoHhd5og*PfIUpNHLC%02D|kjj2m2Vv=CP2obnF`k?XK~VtrH-J#b_CgzW@-> zdSIf~0qqY=f*kP+WMMMobRD~Yh4$zv8ph+_q)Wm~9ebUc0?0om4zgt`W2W2|1|av{}&ZbU}`q4cRyca)!!u{`15`2m4&e=6R5_bnKfC?XCro zt!~I+37l#DLO>Dl@uM7A$Q>v<5+O(Y23c4HIbFx@#n2v|#F*7Dn3ADGrjET!pgm?O zWXm$hq01rrb)39{+IjtgZ6z!aE<+CLIL!m?&J@T|s~{U!L(ZVA)Gv6}KnMF;$mVsB zvvllR5ACj0$kq*z!!}}8>lXqnY<|e$mmmjqoOT)7omU`7U4?AC1~^v8fP&z; z4jcsg4anvU$XPn}-Gp}6Ey&i}T1Mk9><_Jg)&n|D{S(?9cOXaHg)9Uhr|Z~#Ph-d9 zKl;8#Kx}#dIa9~phtMAL2(sld=sK)W*sj{Mg?71PE^FYqhu`e&QyYfM{=EtnoFN76< z4gnpf7KC<(5pqN!$UNu?)v^(oVj*0*rD;OI9LCDatry;c48$mWlLeA2$uQ9Z{nrIp2 zzqP4WKX z+o?>(zh5KZ`8T<}>VVnS0dn~Fkb^o-`vKaWR>)Bu6{ho#@kd3#^$8g|_H=@FduPbz zE|9Zy?CT2cu5O%Z{em@`3#5J_>?gGeW5+3A7o2^$e{x$^ZErp6X@}y9QYX)unmM9J_vG9$7yzGcMgUeHH5HIzhE2+ z9Wr$683yh4;gHQEAZO{=Hxk-i4$Nx(f^`&h2pbJKpySjr(C!!uIbs}SVLaq?%$oWI z_XOw=9Rt}k5pt%Ey_29l<`>A8$&f>T)m{JnNZ{um|C>AovQ2lj40l3%P{(O;(C(ZH zIcl2j`fr>L9Wr$6nE~zgnUKx1AZO{==Yn?EY~2xA=Rk+Bc*p@Ar_P0T$2`ap^C1fh zAg9Ob1h*SHL?=KtErgt@V{am~$NUD_vIuf)=wc}Nb)1|8?Y3md;Y%O~b)2>o+MUY) z#|lx)fgl)HK+e#yXC<`TWyod^iH0$LBOh8(sAazMwaYoXn-4syhL z$U>@y@%T^I3W(hsG!BTPH$paTf}E*i?`CL^*#gRG;A2ak3ZMZQCJ- z?|>ZCaoSF3ckWV{&VNz66#>^T823QV(6MJPwA<4loA*J^(y?zpx6}Fs*8wh&`UUGj z$YF;d2Xvfz7}_02AV>Hh3r88V`h|2Z(E0`UF<2n_IAqfa$eB9!o`m+8-yvI0QRejv zq3O`UujAy?&~7^eIs7c-ppMhdLA&!jVWoZ{>H>5yUWA;XV~-!&?Ux{%FGJ4KvF{4D ztMv=6tFVCe8sxC+kOMkSy#eix49F2TAq%$wnY}=wQr*oS|dSQ)st8gKYi_ za+Z#L&vn;-*Wa*!^#$axmyiQGP7Ol4;}ztHe;^C7uc45xWB0$%9{mQg=`G|;9edwF zdrTJOSj&4TgnoeR*KzVkXt(_bIs6mkppMf%1ADCC`~n0aN}#|0&j*6h069a)9ueB@ z5@d4-@`ArOd*v?{g%S2fV(}k2xPyGlZ!&Ttr+C+;*f(nPAj3<>HOymQv`C_qe?_&JfY*ya?rET5Gf9tEw3z@hW@b9jK!_7Y8yJ+&`2`bXUij=ZpMFa>CJ5{J4?hP zXQYxCQtPe{lA6U7`6|KInw9Vl=C+~>dyv1tHBdHo_ze{r!VKcM33A6S^9-vb%TV5y z{B09f;_x2y&^l5a#^vCEu9wxu__;34tq~(9RNZ74D4X9eLIsBN0?+PFh*AsKM(`?= z8p^Ly=b$RXM>0uz^?01Tz06t^gC1&-TSCqb*lNW=tZ^$)YzL2RPmjH?#&(Y4x;x+9 zi&zhwNkHzSXUm6w^`H)`diJI2Z5+eB>rDF48|#i{bC9ox8XI_+itDW-RDbh$t}p1D@DA&4^Z`YrsK_I0fA^#6?wi2erJkjm zBsCkq?uP_h3E5N;cV!GW%~<(1spGUlnp10?$ZK(SEJAAWE}4glOrmlHX@0xYY9#?A zlVdPM$ju5IM17z73ojp;_eYX?wC5d@d7aOW?nyGlEhEkG|LaDvf8|Bqz8*VO4K7UK z`n4{#>u^0%ROHzHofEm-NOH$=_sU})^usz$dMB^A@mCGVA9&`;V2VSh(Xs>m)wQ|u zt7dCZ<1>*$$IXJa8~kc$?^GV+**D>d_eK>S6w@AWw0r&Fnd;Tze| zV&k!{`zPZ)@i15S(@iJB;BjJgrpEnFQ1zgk$P;7k`vJDZv$Db zC-7MFJMEdT)?r=9^#!XtT*5ld^F%Js{Mn$HWde%+S?InFyIVFbM@R4*uXbs_0!ihQ zk~B?nEJ7!0)Gjo>hZc})bx1@lqUpYvmx+D!N$yzTfRYVD61N<9(~hSZKE6niTS5lK z9kZxM;ZEkw_3e~8W1Z&w5-y({bZm#}Zd%GKSa`3UZ0IxxRZS;*WGJ_6Eo$qsN=f&& z71m4$-eo-2?DFyv9E;BM%Xz4+i!$Vdc1x6_u&m$(D)p{#1s9+b{z@({pVOj&+9p5J z=`&blqhA4J8=5}Nfpm`Th^ zkY6S4M2#`+RrOuiozC@XD7Z5T1#e;@^APp6?c-5`JLr;x zCi#9QODl^e%PHuOx$(RWa!bf+YubJsp62-hUclcW7x@FFco{(Ja2`abv)@8gb&u~} z;1V>`51~_<_#09OTEpB8#Hm2gDgvEmLqw@isi_=?jFrz#dBn~T%-DKl;jRM zsbiCscwVGw?&D!b9+;k@hBqJO-Ee>ZHZ0RDM=H&NT=r5eRd3%hepEFZ4`vBX6a6?Z zkbl~DVO~43T%)c5u1ixlWh$3EI^F-yi`1O-Y`WSU z$0@G2I}}cmm1cZ8uQc#PHVnf{Q{goC9MH{4mRGpaNKuhbG_5;E4eUOHhG*}+sCT0_ zk)%U1pKQ zx9jDO2bZD_3%|mHf9|#CpxTxo*QE!`&MRk$ru8~cpm%6x7 z)9p98Ym@0U$dZb>ns0H}!s+t83o>%eLei9)=oU z@;}g7p0ORdyH4|42R2Ntf3o1x&97D}%YHhm-$BFuFE@&HVC^xrUjj%bM;~0!x}#zUsW83Ci^`u|FwRm#$CA2+xiGCd|RqZ*+>yt zXjj&4(m<1y?gyye^$DonUa`+`e46wRx%auV_r|NuH$CF|M{fr*i_w%{7|CE)GDlb@@l(1#FX65Hc zHrjEE2WlqzXS_t~-#p+h!1fof{c~deHMn*<*FWd-*5@Zbs*MUN`rLjWCSjeX{og!( zxe;fQQqq=cTI77eLyfAN9K=Ov^1tMAXp5FnY7NF9*Jn+*xCrYs_mND}P8wH)th-q1 zzv30|E)q!U+lF)no$UYNmfwH-H*r+4A_=xmEKkj^xv9yCD{PrSr+me5{p*QIaeb0C zhvEB|x2tKOZ719=Ivn0`IllV?&3t8j%XMq@D{Zhl9S85YytLx3UFuN>6usX|f!tWq zVUWeAljqKHs<-1kkJ5caqaU$OhrtIf*U595oE+Lo!bhfyHSfuVs%%GtKAlS;Wj+Pw zsFB_O@ere$Z6m7_IsiT~S&BV6h%Me}Y}03M8GPfevQ8!C(++k&qfs#xGP3 zMD%m{ZmS#@ux!rZF*IhbjsBDGtFE>XCQsPp9foB(0&>ie%Vi{@wk&x@R;Q#HVlW4D zF4gb6y;~5SxtP3Y@-A}QK{DSEN>!=elUZO^Y9twR&yf$;Ler#p zdmh^_AlYxo&5Aq@YatgZxtg!ML{A=O*symhJuf8r4SAWor(a?D)sG2^zd0W@g#3Bn z2a=T}?+sjC*ySKeK6u(!f-4*%8^W=(J%Fod-mBG3H&c(jBs$L2}(toT+;^L}aR2Vk*Jp zWv222uuOBj1Ug}OA4iJ1K$hXO=e%Le`Pt&=lh~PNcS)*BW!L_d*!LH(HAa^{m4|PX!8R{sGYAh#2tTC)Mlx0H2Ou4TOFE_)> z&5`FH#WxYf9&Jz$DOiqGkvO^e7c7%pmj6H_u%h&A;;f{5Lu7RZ6rCpKerZdk$Jm`_ zb9tt|t2c-&6KOk*6_{+h>m>6F&10rY9Zpo&t~EqYMdm)}-`8(ZY&wNkLPH*}Oboxu zakqA%V>MT%ZepGK^7hZW@#>}W9Cja3qnAfHG|5*5$z;9pee`xL)5*H(9C~pS4}VO0 zHExCG;H=>+a@`(sT>W*ZuCT9Jlg`dut2wX$moN9ZMJlAp`wer>e}A&Fv~DCizGd>! zySwhP>rci+thupv{@9YQ&~E=wJunkMjDt!{M1KINZ5!P=dQs*%)K(cI}Slp zwaWX4J!J8&P6R4v)-BO!XJpHeB%7TQhRqCKZndoK=O<{#D;(qnlVZp=qH#>)0 zLRRL6x=bzq^uThpPi*y=99^dXStQW8xjq_odv~H{U#YELM8#lz=3KBw5i)Y=+9U!^ zDj{6`Nfx!8z1UyZN}uVT`kD9k4(>o=B(DjgEPPyNenPc$g_-+ zXK--39%(U$?H|3JsF}eWEm`o;+FdqcXPV~!V``~uPg-J?wnS(}WpV3e`Cf56gQYVi zBx=gn@rtA5ZjDAOzK@r-l*Dra%kd}{Rru-odBs^YwPEt3lV|&3ndG;Dt0&5ReL!)R zylv4{iQJAgjgG-G&TqarSlxR@PsLTVv}bX*5AQ~{Na*C;fvJUtEc&E6`?>t=+zN6= z=uPMMXb9k)E2(k#PSx4=1B=n``dX62B()7zruOx>Kc+edxxD4rak33WQ@bM?2lx(6 zoPR~Tsu!IuI$8##?H)8eDYUv$5PADa)D0QOb^-e z^l$YVBzd}^?jyTq2MSF=(P?UTWmOjV@!S!m;gY!<_dQnUIhN@{8>w`0Rb$r<#aZ-4 zvlv3ZjV>(HjQ)wWZrS!%e2LF;$=aQnay}@=^Oq)e4;HD^+U^h33Ia@)2GmVs>nl2a z_hjz<1R%IFl{Z;pH? zDIQh(W-K|?bd-7fGv~3H9mv)NU4abXA@AS|1#T&f$aS$lrI~hI04XYRyy<9L$^> z7pOr}fUd8HFg177ljdquoI{y>r&0=8X3;bs#?)wYZ_Ny79M0scOTQ_PW6=A`;d9u1 zWxiXQO!SOk&NGLK_}FQRkEEhB&3jmPZp;qm-*wRHZa6rdx|u2!tTh7O0Exa)ELO*5 zo!Ju_n(U)lpp7>hX=WDd7$zT#FZdb9r&&IhsY|S5G^aDb<=Y{RMq_81L7|-Mv`@54dPUr3kOdWgwH6G%8?v7z{uDpkpnL5(I)e@ok&nnK6dmqUKHA$ z@*@sSv-?+CUToV|9+k2Qt%RqrfT!oq;?o07?O19EDY0^0Ri(wEpUclC2a~W&=Wpj6 z_MrKZYO#b3b|NVqF}TPTte_%xEe{ zPATmK=XB;=pm2`C*qP?^462Gt&d7axC!#hOXHrEfdg`+B*o@BF%n~v7N8W%MykVL9V|18+AeV`?peq-*vnxyQMJ!6m zwI!7$GhJsdX89%^K0?CK!?Yx^=+}jUf=A)V=U82dI_s@ zSISwqy&~F{Qj>VHvmAFDof#>78DBTAEYF^5lZHq^WFV_2vG8~$^XN3aoHeG){qbb- zrY(1_U~=;JE7NgfXiBeSHEwP%#}&d4^o%lJNgt{-7W>f|8mZ(~PW0`ck$w^WtwY|Z#666ezQ{9 zfu*zb8dgK)D;LPMgdV7MEtBhA-LwcF0G*}RQB^E&k&lL=_mac_SEAD7qvz3!8)E8u zR@IQc6_q}vK^>{gv~t>e_B4Pd_y#_nrRJJzqOg$;D8m(Uvw&9D8(E{8TwB!!H;RUJ zZ({P|;cH)Enas}OW;E~`;W_*68+Fu3rY-EoSsI-|cGKw61F3YF_x>AR-X!l-%xcPLd z-Z4jB*>xQX{$bHNk2%*LF&b|$(Nx~g#9)bvIlLRYwINx~;+94l zjx*;{8v_3-&Z7GSmBn2Va*B+%OQKJ*`g&Fxp zipAPFYMk=$kFGz`S*X|5mXWhUyVG)-$+>ncB^NWA*Jqe|AYtG)YTNx>o@@DyTyp5d zeU>?wcOE8pp)|7X9Fwi*!^j;0&Fk}2l`787quZwmGE+z^`_VPHQkviwSeT>|@5ZT3 zab9F{U*7^U8tAm`XVI7c`B1*JWuY=18!s{UReL7l^#!|ydX#Jokbaf|8EiI_YTaFhqg!q(4-=&5 z!O85NnL0ae@#|H?QA)1S8T&Syu|?l7us{_4;H{s3k=#<@NRbAvcKq+F3F@J`|75LS zWp2UlVd=v94hzz%(KlyQchg-aZ}GGvFGr6y2h>^Waj6V@Ws7F^L#FTS`ceB}Nwhs; zhWs_^vzJY1c0Xpd7Ax*iW`agykju}!Rmt5n&Fm-4d1J+PscK`KnN$`_yp(Ho-GkC9 z>M6S$MNe|JcZ|o2k!SppXUIwB7CLu7V*xu48cNohbRc^EV)EV(wN9aWXgWV#H~_&F5E4otU}Kp*A7F6**Qo!RV_gm^N%@C)s=UOzE-!Z+t3+;HTFZhY3EEfOj zE5lE?TDlO)V%K-^P=xNC1n+w^bpOK-Xi7aY@6XEG?VULRqrWoc_cLOo(sOPAy>jOl7I-w_me2!)Zo;Vea+nJngNz z2f4g+PY)ZGNk)r8JX_)X9y3&NmYjxowlRCA9$O^SHHjF{p8SM1v8(PzDW1OmAWpv| z*V>$n@+yN%Aur>;kjM0NI`f1u*O0O&YV|}RNN$Tcc!28`x%{}FSyr#M58Pm)@^JzP?=Cci|5a+U*Z9l*bM1lbe;=k9@7UnH19Nw=VDSG0^2m9xmT6 zy6LofXaTN^gO1DP%i~w8Q}c4yQRav0Oe#6@aow8M(}hFOX*xgZGrR^Cza%7WF? zCJ6<2iT>e_y7NjSMJ`LfzhA8^fN1}@3-Tfr4WsJdB6Oi`oXcYW1#+`|XmKfd3&*n!w8ww)X9@KFu?R{L{Q8j8y~HEl#zvB*D3AQ<=jUX3 zNayQfOcwhm%5iJ)%R_!Hg&)y~IIMYVH zSG|p8xc8gjJhGyrw~&(bSOR(ItloD7sCPh=)KKIah2y~-z{snM~!K%z;x-=gmKDKNt)vo znMrK(mu#qpFH`|VDmP4yLq9->(z_B5Y>uZJtTdGzmAO8*zbk!m}H zs!W&CGB0W#G)0Qs5OOBwVUk+F9nJ&oN%@)VGt$idnw=K$=}GyOaTi}8N~Ujk1)E!V z*aSh7n;Sw-PIgRFEAW0B&)y6VX{NkdLQ}jNN|d(y(W$>sj7$mih%ME5i`o=lC*wdg z#cMEGEP0h|!po+kI}FoBE{8lT`^R(aP1C$4Z|2O_^|Tis$!3mc52WVJ*n<6Oj@RP; z*7)swAky{(6;oocO47Y&!^k63I*)(HOV!Q)MmJ?RYxDNLs3>==jNfdIs>7s^V-2V5 zQoG1lmxoChwp>~4(}YJR`tEt{Re!4`JoR|+5{>0%>+lE^4RD*7Ra7?Q#ltMMF%NzyeGxh1G`OP))5X>WoRs@HqT)Pm{K zqVFpz^CHc7ZVEY)cwJpmOWu~eNU>(S>6ZaC-~Y#}2z{}K>@3m4w6x-S*og6s@d40; zZ_UGe&VL0yjgkD^7UIpdom>WJ)Zn>NV2tIk;DPjG55wJ^hbuR&b1JTdW_}MIt>YM%?qfbvPhP~l=B;|; zDJt@bc6rpLx8&``-RpcEPFBG*@q2T5Sj9@@zK%A?(ue8d<7@Kv8~CHMP#c%tnB};2 z9whm>6f$+rrPsLGG}rs0D-`+qv2O3AR}rJs7g;1*KNduaY?`0t6rJV!^XN0S%YC1& zMbU#?3TYIZHy%f)i9djOh8SL79E)YzWarOZk2H42NlCZC#erNtGkT3?Xd4G{{b~tW zvy4&Xe)VptcO#O=&fULlR~bJ^p(#I@FOjmY*H)Wi9>Se%`=^tMjLz(eyy@KUomF?= zQ06YV4{qXDI6Aiv)1G`CLfdQ_$I44>EnAg`DRg#6Ci>$1kM|?n z=jBTcHlWUQPGLc$4nuZnU#=2kdGsDtq*%2zMkm*g^hqQgO(%IpUf593T$wy^Xg!Z# zw-5ttpwf(=%A$z59?5aN@xt3YjR#)Va?MFxAE zhbFw6%S8i+AF2(qByhdLg*eiSG~pL=c~k9%0oC2F=!+VLpTIgz_C($ZExKr?7~5|= z%8RMLe}}#4w7!VTS(`UTsKJAZUb;eyk65Q^zL>iYntS}E>h4V9`oqQFcE>th(j=p{ zkO$V|&uK1R#wBd9h+jS{!-yt3vXFBn6&Raa`$m`KS;{Qpdb3>Xdpup)m+?v~lnRo? zAI(Pdavmgqa#6OBq8ZN(Az3%#G#&3-!S|HT2g&q66MiKRf2nP^DD_yaGS}Om9!cgU zI=6ecytkBpis~LfI(_@CQfYFQ=+vIV+c@(3-O6l5+wWM#Be_bgnTI3MykE`bF9RB@ zkN+iMO+4G-`?lLBUT>s`RN9jjvcA_Xf!%Alt-EuW@+gaD{yJXCYk=xF96nSPXTZX&y*rN`h+<^Hu|x)Ohy`Wx8VS$g}r0&gqYn%T&`4HYvFVx4CG zCN2;5Pa=CkG`L^Udwp6m9J|xZ-^|>_+x6wRzwz7Awk_z+j(lRfx8ZHeD1Ch-5lZbiQsU`#aX{Dd;C5xcag8A=P- ze*V4o-47{%Ec9E{t^bjy>@>~y^D56~wb$JHIu7tSxl+q28v``W5Aq_fFMif6AB96` zE+JnUNV|UE2NfwImApu4$SWIW;2*(oALbXG{P)SVo96Wq9yR#FN!B*BPfR|p`-;_G zj>FQt=Cag3TmnzGyhnL~;DEa+xByM;V_aT2bXG&&Je1kTxt{yqU&enww%pFwl{6fe-L#vPDcL2eNj zu8|83!<%Yp={$yO#}~~-!+DzPd;2zPi(5}~{0x_G&nvFoc|6POyuS!7Z1`83idxy& zR`(UO=Nyl;CEr*)h-jjp=W+g-Q%u=7peM|HftP3z-<+ICn)8ZWzD93N*7z=RckxkU zGAq-Z_j9?}{hD_5bXhO)`vupR!&s(Sf0=t1KH$_WIRi+i-x{`Va~FHloWH`o``+uU zxx;f@<@)}_zHhNR&G&0)3dNrwi2G+KZ+_5Y6|VCV(?8EA3pcDsib$qIZGE37YTMm6 z&;Y^fba7xSIVEyFN-3K989d4ZQ_sb!zv(8|=eMgd0qZpNxhz%Ov_N+o?7hW{6gqdF zEFx&~-{x|T{lC3XYq0#mbgB57naW!*bO8Lxi(Jq7n9TU}ko}7Os^9kUI229)JKVj@ z=V>mr2HRb(k0`7CQa`}ue)YQ7P~C$_Cr>sEjpURg_(jUJd))Kb`wFd8Pv?EUy8e5R zlCw1VAMg_A8=um2r|}`zHy`RS5l5mc8b!V{F~4R8^gQD3$y4j%ifQIQW~%sXpKNG| zrg+Kxggbs5T8r!>(S%pzcPpj#YQue*+`a3E^^dVm6aFa=oTGu<@#$U^*!qm^9!aIE z9>P3KRqE!2%7T$a(Ts~q9jjg{#xEJU2OMIKH3TY z2v_J^Ug`C7f9sZder^kSVSG)tsc^chOOEjNuQhipwk%%h)}K;HF43v}J(qj*$e~%3 z2NnIxC-Vl}r*sYffw$+{GPEfVesIS5k%w9wH@OooLUaBLq8)$SG)BV>|vYoH19-oPtA@@!Acp^nbj{hS;(}V8Zyd@Pr6_NYq-k{9!dFHY&Qg)0fr-nD><>6!O zXUNtH&2>dSvcBo>s=GHIckdpocM9t?*Yk6E`H9cXRd-7P-kOCiYAcs%I=vU9m}*5l&M%WTJm&hJJZ>i093lsgi7Zf%8ltOn99lEyUa3-coN&%RHp^+@|$ z7C~gA@8G11 zM4IeemKyz0Qn%saE5(XPhQ#7>q1h=Y5oo@b=CM{9`)lSUYZ=t>@rK2Wsgz`+6 z4lnG<(wOEwH-waGk$TjyVD;~b+ zE3&6d^Inn9{MV|C>h7&Pmwn){LvA(%kJp$gXk?T9s5$?AR2?le{*LR*isvWu4^4P3OSWr2D3dac z@2ia_IQ%nEV(CP_o}dX|hsPS;p*z_up#`jUnJzUbdV)QYq8VS07wETRpC$;j zlndp=7qZm)JVwHY%DVTe91+}hqDXJH`k+bQfXBaCbfIQ_C^STK2l+hiVb(K#Vj@MP z(*BHzU;j6k(NAqPV!HU~wrpsLzZ;H@WT{^5R!`N@)R;R8|H?QM)gOsCxZljKYJ@cUb7 z|KkCcUQZzlU)mC9E2c|@r*ukc7NoyiNVC5+FH$Lx)lH3VjN0UfP^~w?)&xEt>A}D=^~JX1W_Gb30z7M~Uj-7g)GKJicA-I2sRWUwht~ zRae`Sn;Dw;9k_ho`iVSFV~PJg*N=RC>?eFsH0^&t1C;!lRq6biU913-Y5rZE(V!Lf zrV~B-P>ISlceK#VPmYf0bdX=-dw$J}y=lt-IG1kCh!57nA64wc!%SVfo;*sxZHyEZ zd1?EN3)FshcV_NViQPXdyFzqL--SnV+Ef6 zc%a_h_xW+%bO=PFLmg#+=)ML($Cd#pNMgDk^=~ND3maV5EnJ0cO46ZV=W#kVXqL47xb|0$0^AmIxzuyA14PHeU><3}nC9dGEzJ+d z5FTpe{-4=2M~B2vUf}H9U$vX{!?^w^XIagCE|STseBv_x9x$!IJ)95Q{)Nc=M@Pd5 z9woMF=auRKn?`cI^5JddfazFJUyL92YpdSR|PzT^ICZ&B}*Te@z z$G~`A;>+t3{1Z2}Y7Q#47xR}XFG|s|FoCx#Denm7uBwsbjN##m4mtwf5}wEl#BY7P zQSDFTB(5h-oze;GbPOPw?vYG+3BC;U{DNi?@~FJg=+DTVj)BR%*0trkfb9tLuROf( z{4>1G&+c*+c}#Tmn`&!(Q}~L^cZsZ;X!6IhAmW&@vS9>%L&@soaVH-sbN~mSc^}6c zGN}6+@cWekZV4&-nY%QkXFdKZ2hI99JkZphnVNN>C7zd9-!+vzlBC%`mltryE+Q9Nmi=6p zx)&IyOrCTE%;QBS_tyM&lw_OF^)mi*WO||LzktidzHZ)IJ%}LE>CK$!x^mx5GvCch zNN0C{1zrhrCNPV5y{ufQBVOJ{E#%?f{_ix|S)>PGOhn=FFMo-)4CRVJ6CYXVvfxC| z9%Oc;B|N{ewJmxIGwK}rLR_*h;tgrDPte`GniunH?Xlcs=aSC*NF{^H;E-z-!Z%^Q zBz9XS{oZFAK6;w($-E7*8`gDIJH@($-%%|cGXTpp=a-@}Lta66X8%TY4j`Evh!hx6 zOu6x)NxzK8uO9VAb7gld=lb3OKR?HzXwt7>J1+*8oUjo;Oc7Rc$K}Qf_+E%iSdk)< z>Cf<#M8Bv&ek7ZAo?GVr6Q9u?Vw&(CE>~=Qw*n7?p2Vhbz5nEiWbUU4&t>UY*NVD} zns*g1a`oMxWbDw4U(IBx&V*R)uc}FwHQeIaFiyFlrCGmrE`9qI{qEeWg{#r=`jJ9@ zrAi7zY>NTp}d zSysOH5P!YsPUAt|MlA*psrGTh(QSv}Tl4#wC1msV=*l=a&38raes9igUMJeGKfvAd zAN=+M)@iOE1a2Y=?<{j^sEKese0_F4HL1KT1+WFkK-FU=lFRw1;6`w}m) zWS^fcx#;YEnH%PRYNLGgLJOI$Fk8s2DVE>F2r>)o49mFwq%4gO!lR(uk7iodmL-P1iHGd4Yl_vNXr+{DbQSgqxpn zYiaWT$>o&RBRi@GVZ6h1Dd+I-*u|ITKR1L-_^&3(7TO@sT^^|Em_GQPoaTRkhq-yB z68PIT=6h%ake5>;KD@y7()>p%`Jhzn_A9)Tz0U%PzEyI{OZ+mm>jAIPRq{KsaX?#Q zeaQ9Rf4Rxkil+Y~E*DO^&__MefTH)^UG4$aY5G4#7Xk9S5ZBMFQN0~cc$EIV1aftu zQ++0v+vaFAR&^JiqG_JIP1WYlXIzdHkxHk-*CBGpes~DEpYZ_e*Q_G@L^SFDVzZ%P zj2yQS&uymX+;Q`-OUP~@O?5>!?EjUFdDhF1jO7`xrd%9-+!1p!7 z$| zZm_KIK=r@_ieCEOQW@(s@4xVhSCl`ctPW`n4q+bqA@}!Z*@}Z^zhNFbh)VrGYUXl5 zWV&Qc+N!LiaI8oXndtC3e@HVJ-4c&9b>Jd0yy!3p;c~Hg!xpH=V9J3SL_XC%Scojg z=vY81?bCAohg4O)y*cNxQ#y&i{XhpoF6J*LU6fztz$-&bC=b!G|5Y+u(lL;m$Z~uBl(d||0bEM7LIpk)69jGBe zE=jhLR#GF){`~XU!^UR^oN8oe0bXOwcT30(HqHHlJZ{#%a`{vE3s9qxdseCVt}~86 zXLm&&m7Ec&2KE%<5xn>0?MD0y!S=#D!jk}%3QFUBL?3>4B_%B;n?-pE>&TqWHXNkk-;U&Rq=-}!Tx{`7 zPT7QS?cHU#U)fJec+bnCTh(&RQ!>^1Pr0R{Swy9orj{C^Ww-aCz*D)Vpf4{EA*+xF;IxG{Gx! z_ceuoAnzH_ezaAhdIhOU)gjoMW_M-oJ@Nmzy7K@f>Nk$#Uw5_WCOf3E!m^^nqEjj} z%2K-NrW@@dyRef^=%zzOO(iQAJ1IM`Ea{XEi!Q_Zm2{Jpk(FYW(fym5F9Y*_{NvZ} z^?aV0XW9ME49xDbm3169cpG-Td&$bIxGlMLYm=`21A7MiHQD&YrM9t4v4K5bFEYQ6 z74o%8-JVxV?azSzP~6+TdyqgvnC(+j;-AJBWqVXrRgJks2D_P#zkd9eL%*82Ru z{aF1i@9v#8ar_vTe}}QHxAy$za_dBn^lz5AS5xe|u>)>sgXs>He{;UlO=|i1qo^-8G}Ehkmxz&u^JK*Q1{#&@ynU!|+>nRUI|cWsrsX201pat-s1P1J67>9v!4mak_0H2}NRJ#Mf2@STv% z?)GjkzThY8yD<6`zK30IKCvgFf>*?ZLh5`h_cQ9%a_`I^WwaAGY1C?{wNLMqR%T!pM(~H_LjN53##H zUAWZoqAa?PU0>~?$E~{=dYuoo%j)t+LYr?r@#+ktSrREVgTF+MX z7c&)X?WJq-hCMS5GN1Z|_Oo|9Y}sksb$0CD->wh+{(b8itX|@Fx%U^bv~ZbaC`Sd zYVUn(*7YJEVVAdBt&iiCb2wzzr>#8Dx(%Zj`9XGh?wA`M>+HSOt`F-!$h!9FRetc; z)?d9kWRx{ie;VV5*n4^9fA3f)9lgj8ZI!#XXiRRuQJ>yK9cFLh+V2nRpfl@3y4vMc zdVOL&HPP*v!|h%D@?E3-Oi{1-BkX9wEyHpC^@feJhV{ni%LlaIVO%eKBe8y0zI*Qj zukSqS!jbj|^?W>Uy$03m{wVtrbmy;Ebh?8_+udVA-&rRsz3h*%%ZrANy0X(=Y1e1J zf2#HLO0WB4?e^(Uo#i+yMUOK+)z-WIsBur4d(q4Oc)Ry7%ZdVVvr96#lL z<2xmG^N25|IW9H1lkNKXx6U_T^5`@BDR%Yu0gpO9=l)Y$_3j_4XX3Y_?4bAg`&+xQ z??|3z?`Yp%eXW-~df`Xy^5`d5f4=jfhez7`zoPnQ`^Q}M;vdzDx^6UXn9VUy!nJnk zzhynkbLQ>-{OR@%`pun(JLK^*?2&H`e&uy@q+a%C+U3f&hwRe%NYq*OSG2OQT^`b9 zRQ2^_$>;Amo+f3^w(DpA^qqAo*Q-5dmxry`-nyRX1H^kytKN0X5j|s8H~;Wv-7fVW z-~4xe=i?}hws-NyiGN$KV)ZIN*WSao3ww?{*W5$!JiD{&pgE72d(bQVe7ihsuX(x7 zjw^P(`^zB@wx1&CRepiJ^ASh&>^#eScZ=wS_Fm>K^4x0fMX&IfJZ5_j&7fh+f?n+Z!y~Yw*jR4cwO)tNVdx zjc+U+yQqE7OP}41#QNfNpL6Y4d}}gyX)Eb^{qLR`-@vIg*lpHs??-=m{FfUe z%=by`dUCz?BGl)1Bhg>~PcNC*UKYkv_QY8I&9v?(W>}wNy~?k!XH45?C-M3>e5IZB zS)p3@JM}uh${ul7b>ka4kGp2n^-(?S+S|>tKF42ecdvWQcfT_~KjJ+JGO1R3_Z!oit)HOK ztNl7V*z(6FUfUYa;;(OIy^~Y)TdC_)yIt;{wDfQMMpEGhdxJ@dSp&?+tJnRFb~*b{ z;Fiv3CwP;6)_-b{^)f}T{hN&^64o2B&Yk>rr@3O3^;hx1cMsgxtm|cei(Q`6JZ)~L zJ({-bgP(b5iCNcc|5m$v>qmPy7HGq+caJ#qT*vFv+wAr`zFOURZol2GFWYGIu(@}= z{O_>Kr(C+f;|uE^YuC59ebz~4yI%W7S^sEb>Py@!%8hIFcWq((A)EWnH*|=NZgN7?%(`Cp6YcVZ^p3Z6 z+QXCVx_=GtB(ttp{GG;gck>4xj6ZKQ<5}}Zq-#b+zftKGUhBH4*ZO38^Gy#v-|TKbn9NQUg^{9^6PKCJ-XBGz1yxo_T9eLjW)f??XvOWZ^za*tn^1xxW~T#;=Q^3 z?J&L2@3nXJ$`?be8z_2<;Ph6#`^$x6+BeShYVR?gL7CsC?lOK!%=tHBD@LHdd>0;b z?T+S$tJizZF5hv~0_&sIBcd}}&&0YPxVCr;n=Uh9QW?V+iirzTy-kCjh2)x5{!e#mYNAG~N!^CQ-) zyj|Y@?zi{reBN^p+wJdcIm3Jcte?c>Th;E`&{bPMAE_Uq|B+VG^}#zm`~7FWi&4`q zb>DsPk9cWNdeq+e6_s%rbEsbAGwprczI)G+pPN538-C0l_`@d8wEwn&UgM9qUZ3_F z)pOm2=DqrwQL(-#-EUlQQR}Ay^)i3Lp7;BfxeGcEGXA8!!Q|^6w_k_1p2QT4v%UF4 zqTLH8Jl@$t&9e7&`m@8@Pi}{FwaZKX8z1bnXP&a#myL^EZPxW-f4WufnlPcKS0D2x zl6SV+7i3dAmG*=1Go^yzq>DXR{|@J!#e}{8@XyeT~;pFIsLt7W@T1dqHrw?n{bjp6X1~(A zozJ^_u6?%qWTN$)La%kBst?+==FXqc>CTnx`uGK_Z)4Q;T7Si^E}6HFg0DYyAzo zJaoa?dv!kYTD!jXOTU^gHCj($-fXpZ&2#lkc*eYa6))Ron~*Vqt!(z1wwPsQuQ+ddnrS~c<9DEpvR)mhZma*Cy&&L&YxOXrN{VV^!-}TVeF*$W5e%pJbNg8ZtvbZXZwB3 zJ?S<7gdhLH_pM;K^Zk>5`vv;xm(JZ?6=OX!g68Gj_p`BF%x24u7B!%**d%F)!wkno9?$P-}%Vh%kBD<%g?bMkzVWV@~dn1 zYG0a-pMd|xZr^z60`qCVUhFGc)voDR^{hM6yz}Y*)oz@Bb;^2HqEGC0xqHvoAIAG` zmVUE0nEhSqO!EWO>wKkM4llgq#m>ha{@qw_*5BtEv!?Y;SiQ`ft?urdT+g?Exk7(p zYDT8tRDQw|>%h><{11EoTNUTs(b<3ePva|U{w3P(^RBi|=6aR?W$)iNbQ^KfR)5=j z8vRPqI?b4Khjg{eH(Wn+QD;ErAG>|u_fDQ~*7Z97*Dn8X^L>tI`riNS`k>>TPigFO z_j|*hXx|Ia54fPl>4nqv*0VjmGUktMCVGw2FC)4xJ_|pr5$qb*`nK$LAHQOLF#3s2 z_c;CIoZXiXwU)Ksam6U>6}egIf|%K@mwWG4x%>Kk?!&#UXdionbo?=Et?EURCbK~HUA?p-hWc6p=dCDzMmz4zQ2cKhtdcAjFi>m|QttJ=LupW__gSN5-Ecfb40 z(2BWpz3%OD*Whn@Cd|Im_*#_KwmTn>9y81A)C=DD6S(@%7LJ(MUPXI%hu!wP54IoP zz8|C){kry!2KIT@aWk}L*SnuNboKVH8tPTw*WRShIo)RU~_wE-Lbv95N*c*H_cNM(N;*c&o>RsDm*7VLMnGNk-9rWmJ&zp6<@cY^2mG>o= zb=tiiyT0+%%dG=KpW%(N{^Npk#yaj+6gILyo=<-NuzgEQpXE2UcjQU$ePm}qa1*=U zC%wd4oO`;pV@;U97~1O}xXN*-ESLb7+j_nV z{b?7h`O5tlT@}v#%{=xG?f;i<3YY$C<*oTDtupwUhkMbUF1jY1?`9tFO$YkWY87pJ zzACp0`tciUU{!7qanat@=(=!Wb>@jR=-`@`+w+xcEjCnyvuiVtu0#9WbVInfF7s4h z)1CP$v>qGW>(f=?+y=~J8`A!MbW^zGF>=RzmEMROgg2%=o6t4ke1GQgP3gd9wAwt= z%Q;__je`C4H~*XQ(vbnQcMG~MTrhsb-?_iUKsvZpCW!{u)@-N4tD| zJLakFlPrXGpxuM$s&H;c=CPe0RjXuC!-2x+a|8oq2o@Ixv_{ zssIaR;mn@QBYV-_z3IAeVF>fYK5$Y6hoYcd`_dKRY>;_$KiaoH-4HGgbLPhSPaWVa zC>1)8b`Phk!nqO5VQOqMp)81p~x^UrG=85Cl*7JkMw+q(6;EK={;p_>_qbJh7ljw$U@nk#K^Hu5; zyI{>%p;Kx1X>?UM7iAtBN&839P1~*cs&qOV(r3`&GilFRbWJ#aHuHFl4xFQH&sSYGV%o7({?#vIy+29&OSA??{F^^tM`!1my!o^F?yfa^=F5?EF z%V~Flt_tU_U>>`Y_FqLeO*`hR($#E8Uqgqlr9DZyCY(<(k6%Xzt{2yTbpsp9!kHVH zM{c6MH`8_D!Y#}bX>t7z-pU5oZFEIAdpq;!9kg#O-4HI06Q8owcy18N(C!IzRX8`1 zd2ABxzmskzMWHmA4e2R#cq;A5(lz1yUCiUt=w#q-7Sug-SvYeq^T>4C+e6od3pwOT zm6(Bo3f@P%?x!ol*$0?MAEbQ`(GA!*{)!K?A(f{?kI?Q%>8fyUCiB>1wEuC3&Evo6 zEEq05;b<_Nev%FsXwNLVCY*nYdHm^)t@BS{cBf!n|DK`C!kK58N9NGpB3&0QJlD?k z`7iN&yI{=^zCgQPq$|SNmzYOirhRkiM%#M6Dwf!gdW8(q%gQ7VUYPt_kPgVIF^1+n%oi@3BG6r^~{b_nAj3w08kr7cP8Y zQg%O8SVa@t_tVAU>^ID_J3vA zF<&*!g5zJQMyJ1~!;5IoH*`%n|1IeGYH35sVES%}ZJkmvbyXiWeRE6GbNc5qDtI)1h>56dH z#XPzi?OWYx@}s&e}zrk1#`Yi zY(@t+r(IsUBAgw-Jh}z#+tRk4uNv)wHD476+6~&Nt?1C!w0j%6DxC8%k8Rs>YrgVt z$A+eGX?y1B9q8~N+Os2F6VC6Xb9=su`?*12XIkw-mxVLCGLP&=dv~Yn+U@zOum>9w zgXv&^cI`=5gtL1wkM2$ThM4ZmR}HJ6zuxBm7Wd%>siAaeU)mj{tHQbcn8)@v?3l0o z!`RRiE*-!;eIOkkPJ2esHQ{_{0`LFF58?)agK2dLT^7z9$~KeK%oVk{HL>y(_R6Ez_zj~)&o_ST_x^{!*#PxLW z2HJHaT@lXS#5{VlZ9QN4Zm|p2Jk<~`rkSU1r9-#T?%V0AaPE#)-kPssW4VEU9NiQy zjc1EJ!I>t4DdoSn`*+GDyiU-@!uXb2Z)Fi+h_hwi7{571TN+=E8$n6F|FaRdLubW^yL zXP$n94nInJX3{mo&iN|;7#re`(}5>w^(0*u&J>tOX3^fK#Pz@a6dMXp(}~%1@EO|m zEL{=K&S4%ciZhe%IW{zei_bGpy+DUvq}?ykRpDInWj4g-(*6?N6fV8OJpC#ievS6L zPA6-kke|nf_#1TKO8{TUtpoc4Utv32~{ z90l|IoBy)YU^@O49jMXjYq~6)S;Rc@P22kXFz2bdaN#@ViN$pAd)if}E5g|y z>|D=R(Is}lny-96(hcF_Ps~$4)1jrbdl_A|-I}j*4K~D<)Ba!Rrf_Km^YpKD_&3_K zQrn)dYOR8P{Kgviog2iPbl?wK{YjUFGk-CU{B5~CUwQvwLtVJ=FZ0BIbWlySZz@@j z!PSed2xq&@yfa@#ySag{H{B2}_Fa>3ix+z>*lX-eA zI=nXRS!ZG|xBc}t|64N(Q=hx^t~HZ+H(TTD(t*CTT8}OZXVzyP*?{(L2pg{oSx|+3 zXiy0c9o&d^ZA@2$vzsuF_IKL&s`xf_7K~Sg!o|&)r#7cUUfMl?t_tV2aOCEyh;8X8 z81@gOo5H27n5Va;>^=y=G(K0FrHQ!x-6WTz&tXsZGHanPHGp-d8#g4 zxRZHeG98>kyQb0=;cV8<^?Vh*%Pv^+m2Vo|5H8-$JarEpx|eoOr>nMG^Hr{g4Y3^U zpFuZ;OZPEP-%p1hpgj+2+w)beRnU*$SOX7ngZRUAAWy4D=(2F;QRb1EmfQ1{_c1oq zg$s`}Pdq^fpQK#{x+0vNW#*mvD*6;R@I6g8gp0G8r=Foh&(iKWbk($DzRDHZ5POdH zKTkJ>OD`}_zetB)qCGE*>wnEC*k6D1zxlazyhI0Hq1CH&Svd0=^T_Ms`tO~`hPrU! z4d#hA>0p_5y+v1qvv1>KU|b8{;Re2U>4tFeJ?5$Tbm)EBU7@Q6ljg7SVz*M$pTF;CR!;McTk z5nX|e<1hOS8=~LRzVGOUaB(s7)c16#PP>0_*gXEL&Vu3G5=VpK*pIaTC%P$I`k8rp zDIH$cv336OG&%)io~jAwmotz5LI+mR>Q}lfocXPt>+@e^WxHU`SKi<0x^SV%Jn;t| z{F8S5MOWI^^Huh5HbnoSegD!8;o^VHQ)&{99-Np07Nsv7siMU!8e;4LYzUt=6K;!kM+Lyggq<*5L+TH(eJltjj#n zmkzE+yVj>GmOJxRb^|s7?2=!S67!#uSS9om?7Z(`UnUscV5<6o{n9ov-l8*j+$ zXje_)(&o(5UOGHr5?}v&wqQd|IKL(H_&_?a6|J_W%fgv$Ch_%u#K#T1+tPL6!gkCP z+ta}vXxAXRGAPMHc1Jq86YcZU4dLR>%u~D2pPeVC(QxGJ1GoO$dB+8?Hy!lfgbr;qB` zI{$=^?i9=uisu-*CY(Q(dHgs!a6GLdbh%@F{>z-ehRBJu_awS5TsWC|;uJb~D(yPW zww|vl?SlFEjWrOp8?>V%Y2PTiAzVD2dFl*0bY{z~`O1A38>+&&vzfx+a{zfO-5vIuNJT7`m+8p06?&u_1CX?Y)Gq3l}bBp16z-UQW9b zraSXh#VY8px3vbY;0DnvY2Q_JL%4V~^VBtT=vu>$`O2MSLsdAJVjjDW_Fqpog-bUu zPv0o6|KXe1;JKNu3FmKN9#7MOTWNJ0UA|3R|1-C`)AWl;nFjm+&cfHpY0UPGhcWP z?J3eV;rw&V>NQX1X(9 zxjtt@ML7Ef^XQkf?<=|?T&yuqeQnq=UxgO2!Tk+g70!LjJoX*!UraZJOW%v@f4a^M z!avZSC3Htm(8dKe(2&U_2jKo303F*I^!Y)4p}- zhH$a3BR7x#)OwDB;n4cDdjq;EoZFCjtRL<7&`pP}^G|6bHl#PE!<*2a{&Y<^zbW(h zW^`clwypWb4gYq*I{%l2GXt1MwxGRR(skj&K<0_9Y`5kIx3&w`eC67Pt_Wv+%%j`V zzU}CSaB=%q-kPscJ8*;0AlkhnT@}vl#60Gw{X5gmmhJhfv? z^Y~yo5U|{yuhgDwC<|xyVjkI>_70)z!i9a9Cx)7K%n$C%23L@-2xs?W9^Iez4Wk>v z#RH7oF<+$)}p zUqM%eb5}BtT}At^?$|p1n~s8c{VQG5X)v9>mJW-f#*<=R6V6}9Jbr!K`ur2Ppp05J; zutD8RmxVLanMZnPZ;q}D7iO4wXTD0@#|?t_)2;{Tig5Np=Fx{}-@|mnv}3+1=Gl;X zgbqDQyJyl>;oM`)V~^ARC&cx?X%y_Qzxm(NlXSX3hiB2Ar|6n+{%Pj%+2Z;ic!mw? zS-LEonZrC%q`lA4b>YJE;!Ku!fg1#0q+Ku372)j5%%gK@Ux{ucMWOf#8&a>*q1R~l z>vUB(H;;Mj4La$6lZB>msmwh679D<@_Pj&ag!AtrPpbHPD5$`ETD?z~g)2S1`+AJY}#>_X0r#_=YpVRIy=&Eq; zOXjh!I=0R~{#vJC%u`L_($~z>i|Ft-wC7v8CY=ASo$K>od~v&A&R2o&X;r7o!kHhK zN0!juAL)AAdcG?B#D>JrbZ{x{T1Hodvkm6a<+SgYmRs{x!!B5l-&g}HxIyYyI`kXu zUP)JlbH6i>HMQ;e%Krx&n!=?&nWz7v!++DBf9RTU{$DF^&sXvPxIsWo#>GhWqRYaW zF6NPL+S{A1TkgzPg+6RZtU?D@rClz%BAi`~d31H!w}xTIeAO@uj(^29>C{?uXl>fP z4qX+_xtYh-oy^z&{=RHz3YXSno?f30Z$NuCq-(a{(N*Exw#<{U z?O5<{Pd9~2J1|cVqQg7Vo}K6#om6>08{#|Dfn8{|D_s`O?8ZE@JMG=WY2)~-qhLHA z80>5??hgd$;GVQ=FS;U}-J5xIh{NXb@7u>wFx(I>4rQL&mktGK_kMI$IJbW%x6VJY zVV#0`{_!6`H-$?FGEWbu!y{-)i^-JqQ~k`5k4yN;$S!r5b(M~`i}HDCFTV?#r@cs%n|gbtlRyHBL6!nu=l zZqHY-levNa6uK!~I+c0)G&&rmJtOIwc6+|ck77gobUJVbtXgYW~k3 zE@hafC(z-Ev}Y2WR5cb<{!TQg_+&aTg;rDPvT!ELJaU)Q#_{K!<}4V`2ZRfEGf&(@ z2k)g_)9H$Ew#Sj1$A2{EC>Zw5pc}%)`KZU`4&V4ixB4!uOXU#6=q+w)a!E*oMc+W!jO z6fV8WJpCFSex3Hrv)rDqYPz65|Hl93-{1!EH|ao`R&UW|;mq62Bk!2*%vaub*-#fQ zyvIB-pANoHyDD@=IJ>~e9rIQ618(5^kZuSU|HnM_5gq!Nb}yu>hMn_OuF8hkC$#@l zx+z@xjCuNVI{XFg`BGf}YhSV<{}mmt(SfgNwTLbYXTD(``Bq&2z2C8+E?ij5Jn=mp ztkbR^=!$SQxr7bTA8FrDbVIoKGxO9^I<$;-H|S(l6mrYi5c`Gpub`X4rC*t+f1|@I z;iU5Xj)JNQ=bOyqf6#$HY4sOf7S8o)7#>*M$rJF;A!|xNR5gMZ3D_ ziqq!tm+fXlv^VYRLpOwrt1wTkN{3vud$o?OYWDDu{CJ_nsigRv=;O9 z+H`oGw)OeP<8Bwsd8#IyUzd5jFCAEqR_oJc;mihhuIH=BhIYZ4ue|-}x^Th6Jh2fS z+?aN4LRW0J=BsRfHbgh2eVfq@;o|1ZQ(ihWfOc=8ZO>QLRzW|0V-0M{4Ppan|5kKU zxU@C%^fq+ZXSqFJdA4OkO*p?D^Z533U4hb`v%hu;bMS!YEL?}7wz7A3a|fFqhNpi&Hv_x(6N1J|4_Oq zT-uj;I!K52o5K75p8eTS6V4A~9zTE%97wC-bXhnvBFTnGi1r>t*M$oQGfx~s2M?uP zhtZX!C}a<3L-YvR7p5D+#Uq)gj-o?H(@FO+EL4Sa$1;x{NBfVbo5H0C^YjUDQiV@M zL3vK1Yr^@Hna59|1E9{IONY+u*gF5X&+inBd8#U$yMTG@LfRjvo5H0r%+nXOtPm`9(c zeY5F?aPb-Dsb}eAXbubRB3%{EJ;yxuJneshZVH!PM4nXXmrzjQmub&jx+a`2F^|7O z2VSMsYfc--Ul|4C`M~SW2IKy~JlgvPT^BCA$vjb}gKs%(9{;Yl9R7t)?8 zT@%iK!aV*d9r%n^pWD{+Rk>ZT=BvyXc7t~0OWOMtT^BCYm?yrbgNs^j%~!5(*iaG9 ze#<=i9qn68H-wAdGf&mE?fEM70~_2+=&Eq;N9M7gX#dZ2Q@FI$%G>i*dKoteH)zjt zx+a|eg?W4h9r%@2znSjLS7oc9zuxBmW>#{8$nUhbN!Nu7e=tw{NeBNj?3k}yf3u+? zoc)J+^k3TdAKefxs;PK>k?J*-um3|`Y;bqeRpDH3=CMAse-*kZTv~N1U;n3F+#tLf z?OC0!3Fp^f9$%9VtVOG}lPr|irZel%5jX8!m#zyJ`Z7 zwszV){nhqaBdyb`R!ujKv$B(B2 z5!0RdN}a%lvT)`^=8=2yQ5c!s$C zr_SUCp|fcB*>qJn7h@hfhxU)Ao1?|`zjQ7e(&y3P^J&iobWJ#aA@g{g4va~%pe~}z z!kLSiM=qhgm(q3N!ez`8$;(*?CTQ0cbVWFOCG+T2wC`%VA)G8;!-mwgwDAswc+%)j z(N*ExbM?HTo~`j&Er3jaTE*(C(y2mbVWEjiFx!++BcbQIBcDNic{E-no5VVwEHf) zDx90fJa#wjzo%_|{%dv$#^X1B@%Y|$gXQ#eI^08ha&%2NKZAMvKHGY}3fylOta(a3 zK$nFx4>FHDM0+2m>%xV6D{swLiAT6W@KM?|ldcG7A7dVUoc29IH(IvmtKySvNEPVN zEZY4PT@}tf%{(@n_CI5}Jzq6-q4oJU*1)seAU%f;7irIPbWJ$_JoESqraSXh;6*m5 zm*}!^=4IxQxwN-L*M$qO7`bDlx-6V&Fpn&!y}!_P zr_JN9u!0SVU+Lg)v}+|@5zhY3Jldpve{^ge{|!gMJpUH|>@=88{Y8iVrrrP0RpH#f z%wzwxt6&o9kDcrJD!z(cFdwh623Dn&i!KXiR%0Gn zo%XIl*KN1vtHPRWNUTK%*QQ8fz9AM=>Ua(lk=Z^VYCaA{-a=}qWxf7-JtT@%i4X6BvwD!w^42zY5VfG!JXwqPFF zlJ*Xy>!uy^RbeYOB(|o5+t4l_T@lW1%RIUr?b|-f>wm*2*k6D1zr`Ks)F3*vBkkUa zt_tV;%ws!edH>(P3mclkrCph)cca6*)1E!(ns9z_k`3_y9oUmrd(ma#%-+l+Lul_l zbUi5wg`sRn>`MoOv}-@QBAnfyd2|?^^c}!LL%4V#^VD!UG=g@A=&Eq;Amm9EI~WD! zKZI@ymkwo~K8y|@PJ51^Yp`+r<-=@HH3?&GEbdGhoZE5BwZEGjcVum{1-dD zT`=b>{~2^sxO67-^jUQHY}yl}Yi;ZKDt`_e;-l%nxwJZuE(>SQXCAqL_FmX>Yrd-6 z1?%w}Yaq@I5@YD#MYQW;x+0vtgn9H*ZF|1*UB-rnaPe~HsRSLmf_7g?SA}y|S$TWD zie1eO{MXP;;nKCt)8bSfPBHgfN7pQO=BxbmY>3}L2X3U*O>|i}b2IbEEwndn*fC$# z&4S}!;Z{0v8y&ozcHKc>KFrN5_flzi&Jn8p6d4^V9@7G?8{sqN~EWJH_=sHkljv zr_fE|(p2W@EFHd!_DrK|)5N05-_3^jJ#^q+T1}_R!kHfCksR$!&S0S~T)2;U;(j{# z0PT8^t_WuzVxEjX%z`gZH-w9iFi$;7hi205$LK1ZRJq655PO35KS?)*O9kfXS#sj=xWFM{Fi%!4Y4HY zewz-zLwnw}t>>#+yI?+kV-37#H)zM_(}DMC<7c;V>Mjds7BG)|&~j_O@_xvMx^Urt z%o88c!H;RzLb@WHt?JyKucDuD1K+1~L%8@E^VH{b=nLBYC0*5S&sVvx*buAH{;%n# zaA^_q^fz?)TiWxT>CSvrvkLm_ZLNXD+#vov9jMdl2f8erS;9Q>qhZH<<^72bb>YI# z%o9uL;4<3Ppew@J<>LAu{e>I&R?rRM;;+n8ztN$UwEK6u`n$OP=bCJY{XzTxq?^K} zznG{0ro;cxo`1#lzxFR1^8e9sbr+8FKrdQ#(PiOGH}gocHw)fAbX~Zx3iHIObkIe+ zR--Gz$?WQEh^|5V)}$N4#kH8H)}}-2&~7)JR82yqh0U2KymW8??b?E_ zIBcDNvRkqtI*|5lMK^?tTQg5>Lx+5{d)v14`LEh3Sm)o|cI^hsvF&O94s=tvG>Cb6 zM>@QdZ9QLk{C2^br)t9aotejXp#!_pYB#zpoY}pVx8|$J9^Ak?n63*K0?ZS8(!srG z*WPrcWqZEL4q-!dAKEvRZU`6mWu6Msq5Ww0{+8SGRaF=C=im6>+%RqsJAn2dNH>K` z!}M~7S0@QvS0E+v?!uW;H}|KTg01>^a^ zRdh`_e>L;?HFV%wT8TAQcG^7tGAV8lxsLW;PuGPDH!x4!NC$7CT{m}Z9sd-j1? z$u3y)mFG^nCY+zlJU)dEOr=$pF57O+SDCxm5Sd1M@22a*g?pGM?xlm%X;+W7JzrH? z1^xJqHIU;5(HXSwKDr@Xyq|gM0Xp=c<@S8#euxcK;oQT_V|m*D2;CGeJ<2>i({yLP z3O~jM&*OAWIR6Cm_>**?K&x4F*|cN6$~?t}$kViUHeDAkJi|QkEFGLfyNcraUoi^y z*Wdha_BlHGJnegdZU`4&WS)A74!ta{|L(bLs0!yw%ww<6{#WUyaOpMX>DQAigy+$o zH|Uyh{!QlbG97q}R&Uegq$p(GVMF9y+WQ_|7cR_ao_L=QR_LT_0Sgu3><7%FAJV@6 z(GB6^N6b?n!$}odh=Oug>8fz<6Xvl`Y5!+*Q@HfGGdGUE^cT*8@qFM*+Vd4%6VBI| z$G@fni)i(Y!{+f{b`}h0zI8Mhj(kUZ7t?j&!uQM*bvpP%$JY7BwWL!p=BbKs_DAN? zpJ?CDbVInflzD1d+xq+$YP1XHeC1wFSA}!GFpsUE{lC&p;nHt*uIH=tO1ogqSK;4j zPm`_*=l@_H|C0{9@-OZEkFET>R-qfh#Z{T7T$bDORcJLfxL2pE!nrk=$JV6%Ytc>N(%NR;nXl68aD%X$ z_N+_Sg!6rw$Je6+>(goj!;bl?Y!)26z??49z(JHwk3uWQVPRt{I+PgDd7cT6=Jh3aC4DQB)Yj?ULoZW+YbTI7;&<)|@ zp2(9bwHFF1v^VV@LRW=z`!J6UrTzQTP1rd8NuV7SB9 z@jt>*FpmGSa3;h&auDr3n63*K4q=`+v}0?2@UTw7JpZ^3rz^tQBbZ0SwC_l|AzVDF zo$K>o>gaaCI{$@^q20&QRpH!m%wxyX{s`S{ThCXe6WEYGkq)0kdrqcn!ueB}$4{jL zr?uRgZ`@;HLs>X8l6hnl?LD2Y3m48{o;XvxJwJFB8(e4872#}*dGs9GH=1q;7tgiw z_I#B(j~j%}r`;FORpH!)%wuudKZb5v?#x%Ei`bC9m=0e;doHDG!uiXX$1kS?3B!*0 zN?pN*vT)`~=8>yt@6~i&xNr^g#I@r39~4(ZSBe`{gtON%k6usvZlD{&#T&)-KXnr~ z2;EG(Z=tKgxis_Gt+f9(x_O&;#HHKWkiLTskEK21=$deTJo9*l4kRbApeE8~;mjoF zkvnPcWV$X~n8G}nn94#hOS|r(E5g}n%%gYHzI*5fom9np*^rt}hk9stj;;#lW-yQ4 zNBi%0+Bp82C>YNN9&k1o_Xi%N!w=D(hv}MdKF>V9TOGjyY4ef}#x%ZAh(I#i_H&(T%k z-1E$1FVOxMZR`1}*)Eum-&g}L*$vw1m+A0a+Eb!y!ueO2$6sx^HD3i@V}p8~E(>So zF^{}Kd*7t%!iBQV?fEM47B>jKO}pNqE5g}#nMdEFee>ytc6+`mzR!kKg$^yC-5=0Z z;oOJJWB;T5ADQmVS52#+zuwjw_?R1{7t-M>?fHbR3Fkj$9{+K<+SG)x+a`o!91S)m4(1>v|34*g)_f1k2GoTA9P(f zS@@F;iNEOJ-?Zx=x+0wYmwEI*+NbVz-sDQE1`Dd#3k@pOMTfd+cW=5Xoa@6pwu;ln z@#kOFSumat2$x*U)2q?p)oITfbWJ$FrXx3x|M*&tg5kj0v|5KQ3uoNSBkR)MzI5GT z>-EH&mYeTvsobAUv>Y;rbwXM&8jZVQj{}wlHH&{+>LWla(?oH{caBef^ zvCVDk`O5FL3)Vc<6fO;5p5B5EZ%KOw(lz1yR;|1>U&XiP27zs8<)h2OnQfUzwxhk< z)Ag3^`Kqu38xn));EuFwC%Ph>^)rv|O#61R+@7x*x}ZP*#{U*~_gXt^Fxi?F<-^^_N<<2h+Yo?&kgf#vyDd9!jSUqeF+&?jz``a4yU| zc4U$T|50>PxO6o0^f7e!SlV+OT@%hHk7q+XLI+Nu)roXjICB#7$jP+#6gpWKg~F+9 zNSsCoqqJ)zT@lWXVjevmPAcCSD5!>T@l58av*^&-v^z#ug>&aPb7TF-Mmr0}^MP~e zrf}&z=IQh4@CCHzLb~R(dHm($Y>1Dc0~gWiV!AAxxrBM-Qrdf2$JX&*cNEO?Z{hMz zgXu(q4qidKuB0o%*{hgGuWnnPe|*=p3+6o45H4QJJS7g>P>Q+xI=U*HyWY?Q?uyMQ?&bOx+b8{QBb}z-4HIm#XR*k9eRg$ze`tP#<|DU75aQq`W@G-3x(q-XHm3icoj;-^L_tQ?nn5XK(h0mBLKBt3U z(5^4(ig5O;cCOEV(OSD;&R4##>4tD|5%bhHbm&{!{T*FxThCXy#cYUuPy6e1Q@Hd4 z^Yjur{3Gr8spZyuRkI7$<2Tm8&)guslnyMTRf8@IXO=UM{Gx5oSKbwDs0$Z)ylH|IxnOz_%XV5H7CIJhcHG+K_hlqpSUrEaW_NY$MvgG2Ij{ZNfa= zpAK(Idy<>6P!rB?&OGj=0|RKa1zi@-Y{@(s8OVZnE4nUR*qV7_8#?HtUE9(XI;pbT zu_3xW?c0HF2p0!2PwhyDcB0*Wr;X#Uih}WcU}tB8aerVJ+P^E^6fW(?JiR*|-os(@ z`1cHU6b#pd^8x1ZJ?X$+wA!043ulIOa_jsP*{4%5&p+OwbX~ZxFY`o@4(><0_NOZy z>+@fB7#pGo(7prdhH!B>^VA4B6r$Y++1B$_wOueDzp(}mwi~o#htU2*>85b$Fy`sQ z>F^OPx8^HPm<=`I{E^J#N6~?!X>|-;7S0^2b9=su9LEj3$J2G;LWFtZ1Uh&k?K+9B zXt(F9?8$71om2%aszLit_v5&Fi%`W2QQ{wm(Z0< z#PvUWDI21f(Z0*+hHx>#Jaq*fx{`KZC9eO~tJsjcnvPvV`>&;&!X>f)bc+4q_nppy@q9oyH<@{C3hkdtH-$@C=IOf}Hjn@CG)KX(=We%xT>nI~SNgD=yrxt81WRYe!{=im6> zY>690U!i@k(hcF_Ys^!x)1i5$JM)$M4K`GTb8j+_m1+N5bW^zWHuLm5h8^=&_+2)5 z-lJ>6`T5M_@6&+_trpN_!_N6C^8p(oAJX3c(RJa%N6Zr+)4_$bt17Pll`0#upU}}y zY2RmbL%8@k^VAn~=*uJv?yu;oaIVHY_BHKaL^p*?-!M-nzhxo(9qn06*M#%mGmqEl zzz?)qLMO|jkol1fk)LSq&vae5u#|aX869lEN#$COf~p8-e_!!}kNrve|Dv11rN14ydHkjSaTE-P|D`?u(KX?`x)=8ib|CZU zR(>3AzA;4vsD*Rga(IC~uP=<&2KLN|nqCpdHC z_)DGWEEvxRPNLl>(^cWzDa>Q1(*D!vrqkx}Uy8CJJ(3QOqCKb6HR1dj%;RU$fwMZ+ z=by7X1@pKs3uj`?Bj?cG(R5w7a4z%2d2Q?Y!SmY%bG~w2Kv#sb7c!5=Y2O&SAzZx3 z&PQAGRO({8pdGq|c3(#oNk6ljt6ZiJ&+4u10diBu{*!V3IqoQZ&|1DiXr>~^L zSJ9rU>6&o<8s_n9we9&TAWnTM#SO~Bnd_KGuBW{>&~@R$jaJ^CuM#(LgW%1y>lV5q zoJ}*2-b(v!qZ^hx^HuS7Hl*&LLt|<8IJzpF8_ztJq5TsKJLapVS#bO-O{CM4=K&7RNtEuPP}vpn0jdZveM^L!4NvE38+n&sKC!!v!sPS0m!g6DJLU7pXbEYDka zd#29_w|fG$6Fr|bdpw`dWqG#j^-S-Unrwp`B}1-+o2sKnT9PSDdv|vMR&Bz z{$bXTfs*TjRU0V0S|%;kZ_)aR<%S=pC`jvHqjd7h1~C*5Z?uR=%W$7Jo1zqP+ZziZR9v#JzTuX+d%OswG4`lf$CVj=Zr|w~ne}HPzy;>%uf$ zgA0>t&@4e@X(>?nfLW^C-xnL&GOoSVRETE@|A=WxgJwrZ6v%Hib(EYREhN_`EZ;xG z|A}Ik<}>0US2q+#JWxPbtf(6=Mf6XQYsvBji}3__j=H@N*BTx#@2gQq|@{v_1)%=Mw$6Jr>u&0_%zP?`TNdKW~>%T;Fy%k^X`3 zk>6X#E8;;vmq{bZTBM(Lxzwoq22z^WFEn7bT}teKh(Jz+L~HQ4*!bkttf~UO(eLyd zrCa5ZGNNLMwCNA|&_UGPY2Dh>k{l&z#c3=+Ufq!fk8UUixDglMH8aL$lo-LjoRI{s zfr6H25et_Jj!n59uKK8E0n>W_y-|utIYcTJI4@#3_gm_clydYs#FzYB!)g&okFdC< zPOjKS<2S2VV9Um{2z@doZ*nK@dNC|JLca${jb?2kP(Th;>{GyNFfGuMbCb3{+OEr& zx@D+hhQkY`?Zum!DGqeciFz;Xlv1wjAbO2|aY!^x_mwRJw*SupH7t}d#bzXLP}%IF zNeA|l$~QgRL)8PleZkgBmDaCCkBMHF@B7Csi>c)z= z6LFz)tTeO0Qc~c`LMS@F=_}T(z?Yf|llq=!BQ<;1ZlM~0>_td@_lqLv%ZDySubaTk zf$K7zuU}IfcwQ9YLkIoaDB|W~7U^BLwM0u?<@Xc@f)}?)l{fAu=!;Vm6=8h|R8rg> zGM(bUZvy8bzwq)CiXMz@G%^3*R#OY^wlw~j6MI1Rn!L< z5TCXDD&qw>b%e#wZ;Hhxo?NM-qQe)ncy)Quo2mk;`ysqIf5=p&1Y;@0Q_nAmr#NuE zG{Oya56UUxE*W=SDb|bP!1OX)Tx_+gSgdyD8kIreWqI4s9+iBzE}?8Mhsq~Sk5_eh z8h_Ms%y2q3#e1!+B~ZX5-D|(ztak$t{34$FOpy&@``Sgag-XJCCL@{P^0c`@Bs)PxLicd{HlmQ95A>cRS(qv7vVLptkH@!ZW*_} zIF?Rv;C?kOE;N5HrQ|x(a z+98F$vk}F%TBPM{v643r+sArbV0>+?y%|@=DfR}`LAAvny?sG(AUwk2h3pR{?}hR5 z$8prf3=>bk?LspE-RoJTrSrEE-_=-338NjXF%Si9ZIkX$K_Gg4gya4iT3Io~g}At5 z^H|Bd$Ocj(P`v@qAgsJDSxZqb72c3T;)hPvc!UUHOAsd1c=b@q&?m`eYZ_s(1s^|V zETPpJD9G@`;46WOHI~LGeqc(4aEb%Xn;=}VVL3lV+|bk_m0YulyuDdUxktZlIzfPC zn_Apt(HMM2do#pGo~psZ2H8ct-;O5cmzgG|tyrxcw65bS7K?zRFVymbqCKF4g@=BcwTY3WuD%jrX{$rT zk92JmsmM7xq7`R;oZU`wAa*B&M|Ak9>M4w!Ez-I!o5?qLAtgEv5WR)FkdCIxPNH|q z995+1A~5?jLYcQxd^;NRZ0(9V-FaTCXcXQJam|h1t*HsX>h2sCS2-_b>3uXkFw2Og zO~deQ0tFdf|0q!9@hv@3yvX#NtbYSu_rel(qNEyhy5cZ7T-j^ z0{CxC&=uJDQx*Ez`;ed@eINNaE8MYbPf!t8>NF^1A&4W-$*)@O7q_zO%2P1rc^6N|ZdFqM!Fpi5k z8~aF&;wZO)^q8QV)qf!CKfoB<5X`Wm^PO1l$W^pj!Lbj;B8qRTr0S^yh9Umzst4n+zstP>(DAe@+V@Pbs zY;RRC=E5}H)U_EKX%_JD;ixI&tYfxfRCom9IV-$i{tp_&XoMTON2qF5Glq9UV)5tl z*eg&VDEP+v?^50>$}MAw7rBv4+UwdcES`s^Fb<_lY#H8Ekv5D+ymJ3B%)>$}kl|x% z4?S1J?GsS^w9Cr42~A)kkIjTdeWj{xqh&4!O+xwYM{E9~dVu_sIV|`$kgOe(sjDXt z3xkAyIe^{3`YEVjL+6^s6+=u@Npsw_o;1f71Gy6g)=wks9=d_Neb0I9LvYd)m{pcI zr`ZfSumt8$N84`}jSXqAP7W5y#LNuLWm-613Mm>#-V69|Myu|&|GTiJkv-#_3?@EmV)|2`Pn1gb;^A0~sD*|{g!y~8o z?pNx^F_$Y4ql_%v0?N-rC7BEVJXEBO^U-eaG38@@V`Et*0PPoG7VFwvRh29*8Nc&y zZ8yb%@(WRXew`huig@@U@_E@v=HemA`zh_3f%A(|KIBJEI*#G~SrbX*n`|TBH*$o> zAURMVDex&PR{P-LI4w(1mnGp}7W4u2mm+*Wf72665r$=`s6_sSv5$7=V+|VUPm-n& zUrksv>yxT!*)6E)SCdDFsU~2*6&2OG*)(=$U-d95D2l(gwyczRjS}4}8kJ{;6P0-jvEMVFEE8$& z6=>y*(&wW?rwro3PAn=q`n!J*#T@fW#9PD+yi9Rm{wjo5-QORii0fA)-no6CD%g?X zT}d@MDdM&@TwGjz`hVatfcJ5v`BoymtTsi;Xi0;LfVCtbDMH;@fxYZg0PP9-d&~}k zKI)~4D;?|5icOtfY^B8k?InwJC9j>3$@`$(cXMZN!yF|N%*^Kk>*En#nGoGqvD<~X zFkqq7=t~qaaO-*$Jry}m3HsU|^Y=L1b*QCuYg^(LJNhD7Y z=ss4b9Z>bi_HC%8f1YMiMh7ctslf8>q+cn$kyPTk9+LIKLB+@KKuz;@Ut+Nu`1qZu z=;Fp~v5#I2XMBcQcgks{AD@nm=rLBs^#s(GG;cC%W01wPi{nCYV=3*mg}j3QZY-hZ z%lQ)Lp?bcrL#5z)(7lI{B@6RjFZ55gvH@K zwq$ACjsut_{hwYe#0KIglV(DGisz@*N+H42Zx|1v;LcrbRD3_ghhE~xKsI~>OI!p7 zl6e1Y-ip2{IQhc}|C#m|qc(_#AK|!o^7(c-q6gX^#Vp%q+-01FESh7OrH`|-Jb_Hp z0tJ%9x(w|}$$OVXjJF&|B~kejSWF1Sci_lpd7d)LS2d)d^w%D9Se<}xM_BCFtd`6@ zu*QCZPgROBvyD^}F#jYf>RD?AqX$R_okH6S`h1VIhQkaukpDCe<=StEt@=zokL4su z(0|=2|2DRfn}xjG&!5499t@fPPI(j4S;V7v)nc6_#5(6VEOhE1dAp)X4Y?5#PZU|p zTQ5-mJgPXd=8CEtH(x*=NR2nkBYXjL=`=u36l2v>%0m^aO>s z$qdiT5*6DnV=sCq2OU!Y>91ghPm2d+Sr!OL#k7|7AMimLP#+V7mPRRLTOzU2;pDQq zh>0cHd>1f24ad0SHDGbafD5x(uJC#)#XZ=0IPk;33NX3En z|8ZCtZj%xx(I7PFK1#-X{p?RAZ4Y6!Bv1CkgfO=5s=m_s0EH)=?hr?XA((l{Vevrj zI4LyeHrY*@T$nPeYxUSi<)CE%)gNKf4Cn0FwBqUp<;FDOQXlEjvqi+tiKAg_argA!6=D4|j67DCWg#>Wo}f^PV`^_>^Z?bi=V)R6 z3@>yB!1x!K5^Ktn#rA-7)HX4y30sf^zRPfzEvc$F-SHB|4`)7RZ4*fU3I~YqH>zeu zjIT*sU^6#k6Imz@q0JjKXZXrC@)!kP!i8xu(YP_k)Pz|1b;v3)hGl=OSv-Ly1C@m)ZI}Bx;Cv=3 z+m~5?r1H589}xFBmOPB&jP%+M(owQ*T}mhx%%@*D=|7_Qr#+1sm4Wo1u;8_Zlk%Vd zvIKp`ETi(z*hxzOU;hQ+=#_d^J9okU#;GbS0hbRXY?cf1#>`D}NXcjp2U?H@I|=^~z9!As6DcPF0*i4T2s3 zVIi}Ol$J>&277KREP-m{CGFA`1eutJJXene_45=$yVJy&D`#8=X0qu*Rj#{ITFW^+slyzW)c49=^589TafQDW~tdpKdzrXi>ozPwn`&k z(q){y!HuaVXaH3(N1nHrJUeZD0G3_9L>ir#~Dr&0IrhjZ=%S}eB zsUWn3e^JrVs0KBZ90AohF7$9p8C~h<^eaL-eW@|3NXAhejjs`^+KW&F6&L$&Mt4QA zu_h`$^I2+ihfc8+uEim-&a+$|6m?;W?!c=j3#bxk1GO>3jzaA{2J_){u+)7!yTsEB z&}O}$zTbzN>@T6$#?qL?FWUS3Dn0z z4JD_j{HCD+;{A3dF~0!~fWU0rFJ4(|QFPlIqIA#iW7zH!ho3(^IGDofU747tbY-A4ZD_Q0B>uB%6!UCpRg}93%$D=TD=}<33z#0lb%=Q??)Ql4!aJb$Dw&t&Q$4`+jtKu~{q3=$ zUegH`ZL;0)@IHY8Ch0Wa^D|b1{g%$CDtSh5I8_B~?}D0Yo){r7+CdgWSIm-`XB%tu zz<7kkgSqN?y8LdKVdeH4Y?cj3-<`Bqx?HZUD^)GHl8_{*2MS*LyB6!Qf$u$eZz!gP zbyeQhNnnUT#(S+_LUC~My?FB#+U?DG9~Rp3&H{O; z1N6rv-LggbZz(Tr>yN7L-#YA1aG?GGtf9e&Sp|dsfPpAnC3ZqIRRYwP;YwF_omF%@ z261s=L1!ssEZx$uU@&nWY#HY7GYb_-V;CwvbYa{biUaG1Al$igb~eNTJ6tk8|KqAb zR2+Cel(hZ-(P=LIe%8H#boemTvd`Gz2$gn@*rSRN-c2~jx=)bSj6ms9o0H^mN1!0X zxqa^UQ!KZPMDc#N#<1WI_&$omVqijlk0xjcCpAEa@WRysd^!*4PH^x~>%uE|^k?=6 z()Q^-1+j6@)wE<_`)DpNZTAIZ{$vA!71>2A{P{o z>^I@O8W>@ogh~0AkCz<{aD6gQ(!JbdJ*`x{ehOyEmZFgx7;qhvbUkz%FDqGWQ&Cm) z(Q|Yp4P2jwk%*sqV{pK9-jRscmS<2MKy`w$MNI7s$(ppBysKjdDm~x5F=HM0cQeAF z<8-Q3HRDXgf3>u+SOb_oi^F1bV^Wsj(?!x?Abg<4dTI%feKrpW$a=E(gCoR}@HwbD zbjC&IN5Q$zMb(xcuRXReYUW{viaQ#O$9f7B5EhmMxqVi1g3j%g~LX^_yrUvI5^lcMSC*?;p^KM5rWr>Cj@U8!`vYdd@)Mz zB7YH5v`$+7(hIvc0mDxWHTf zx@3kXmg^N$i@%est!V%U+?Ep_%r7I4jo=eGR^l5yd~d9%YwTjJ2`J=BLPeon>oJl- z6WE7(8tz$&GqHTyEPOv^DRuc#H(EA0{R0R`bUeZ$H7G%ojH)KwTmd^$nW8{}B(NhL z;`#vAE%7#R5cRatj$>{T+Q1>+ShcMr-wYZY7!G46b^6XMY6eiBpb*q#tQvxoY20%A z5gcBpzkfw@0QZk#fo;vc%yWPtLC3h0)cz%f?ZAQpVMNgg5610{&xo_Q=MHq~$7FQDAxopJ@iN zU&9Q$u1vNo84TAEPo5mfz7cR9VX^tGQ*^9TaIN!C4~~>fe;Ze4zgwEI6X7B{np2J=+clRb;x0vBQ!c z{irhF|2@nxA*{2!bPGA$n5Oe@(3kZq&;tJBS%e-jWfQzIbmc!J^=bH%V(J)r(mEVo$l{VcmAjL$Gj!uP+}=K=OV z=de($zU1q_g;b9VAzhB{&ONm5f%PxQcYH!lf@xbziR9 z+3*(Czq++cUj7F1lO(q2A)LB{OXleB-=Vg9g`S+C?+VO+kFZY-yIbLMkQ;H~fze5E zpne7!fU#YteXnFWKj$P#(6GC>MzXaJpnfKY1^0I;W8^kco2Cz>e%UOsx*H_EopaGvYr-t(jP`^5Z8a@ zxEOgShujo^@|dJ^&--Ll?6G}ARUxN?={Owd{+*b^wof-5FYh&lG6H_^48qVPDP$qt z_VE=VU0U2qtD@WS6Fafe!7L0gkY7*J#T2Gm9Pb{W$Qpm69Xl2_rQHs9@_!J%_cZFB zBJPrL$H>AxDGprMM8Q`R9vh_ixvRAs1T9B&yUyyusUUD&h~m-Uzkk^51H7C@jN(U( z7E2+2=$^831OXnnrU=Uv11vhkTe%*x?+7ftWSWcTi5m?WeB2rQ$&9zYyM$t9ZI%u~WwL zwOqj_Qh?F_MBLroEPz}R;H#hsL~5Ee30Jj+59aNUJ5i+kp2`M^EAgbUMjag+aLJrnS{2x?k;X5%;I zHNuNVNlQDcqS>nyhr}lr3V0mObdnTU&nWPi*$c!jjj9XG$bCwd`x z?>;f*C=L$0EW$ej8?ZnezKC1KyS%-`svam_4#h`JJhnyAZuUpKLDkc$QRzPjZ+i24 zuOhB5k9h8do3BwEIF7K;cCr*2OvgmF3MhHR_306j1b$aU^jGlMmWtkhN~AHcK6uwe zW*yL*pzQREQ0iHhVA4@J3UjNyL|-sT?GqpPI#f3Z!iWRe&e(c3-o~7RXHry zU$xd_3EPD!y0rN9)PC-<|3y6y>lIQ>EQME-6*ZkAWena-hST7=tD{p`(U%QTx#zBd zdd%S=^1MQzAj54A){ax^$5Io;&p+0%SzX|GErg#x^xmzA8)`?vu}87Su^kkK_=KR~ ziOS4LZmvk%>u_9LkY|Y;&H>-+@+6^ZA1UN5+ca4ZwZv;bviSjU6r=thN#+1wp~Nra(}qNcc->?J)smKb_LvWCZ!67@~6#0LYj$?K&+bxhKg$ajE^ zn86fVQ_M2dP3{MQQ~JR9W?1U}k>}bf)gI6s@iTRQvXBi(FT;yNj&@bV9WA)HaK;)t zGsmaFd>9&x<+?{6%Ho}kEu;9MTBnp!k-EFWt%w7rBSJAa=MqJ?i@?B)4Xtyr?O5Q( zTO*w5sP<414{w7G?3#mF2uyE_(!c7LQ-xKUc8EtT&pd)!0tEuY&VVugVTjffE$z9q z7;z$7Y{oda?Eu(r#H1~=Tpm0ygkZ|4*W??rXtWIM&0lxJTS zLYSUW{JM>nmsykv!unq1!?IJsF9*q!GC+Hh0u0ID?DZ|h8e4C~cl4MroZvwDKE(gf zU3BDfi<#wV=N-_Oe+cpV9Tr*u*9i(*m$d7vdPj$e<6^ex=kibr9DFEd8TIpxs%;zl zA%3z}b~a%O4!%Fa114`&^?NRYv*=4WI9@)r0Hhy)IqbO;ekpGnK9E5S5Pt~5m)lrhD<&C+ za$IPzT?#!x9yaas#D^Kk*09WKdbWGHB=B7AA#_I zO+m91OWZO(Wbl_h6bHtSM)3k;2C7!z%wrI*f27`GDh`w%%VA-SRnpd_0~q}{lniY7 zybP5DuFG(*uWeL8xNSU&m#njsHZkD(1oC=pP`*_w&)>o4448-+oZTW=Qw7$`a8%tM zt!S|z?wG{I#rwYF<$f4gKN&S0Nt&x_u*NBf&w00=Q4Cl=m9V?d0pjMHEMYwh6yPE- zG`AVO>#*nz7(WfmU6Z*f%PWLW=Us?!xf!1_2WLNn`z*n`S(c3<8Z%cX)Nd)pFQzwD zokK|HH@^W}T;Y75i3W`-+N&z93E=xIgb(JO{9LIZ!)$DVxyHylPQcHT6d0wCJ2O_v zV4s7E-X))XLvdjIT!fEZj8JWq4Vs5c{VG}QbiUMUK1!MfL@=g;;Z7M(7#&!gDh8@A zAZE~M5usm6zQ2LV=QJ&hVi&cVq~Z~)v|iF1a&umO-KSyi%h9}!#ambuvMzc#`D7dK z&R5>Ry$B81x1ewfiUao-Bb-zJvbiE|j^wyFu1GN{(La`ip}_tnm|@&-4g2))BKoD6 zA!^?sVft)n{$B`^2D{RY9UBswVI?D%5!9wD7dZ&$OtjfM7lo4RXGU`u^m&<^r zASYGNKTh_lkj)Xrvk5i6NZNnt+|`0;LI5^*Rd)&-l!2siIa;&p^@BuO8_)`3P(g#w zQpQnw>y8T{(Qa%kZ&im@umY7NE*@o7sx&+n@x1LXe55!ufR#Lw5}LJ=BSbJqvkG&} z_%XW+Y6=t(7E^Qf%kr+4)tJRPCx#7!p&_inZo1oe_VJ+rLmW!?DtC*K1sZ`2M_&=X zV7bKauf@rujMVZJhDNXsL&3@|B}F($Lf!oW{U%TxT)qv%h`curDbh{?gGb3IH~TEb zp&i5{+^KIjHgN)mo7R)*7j{9}@O>)mmgd(Xj(F>@0NhDYXiEfSm|O8aAu? zTw?;_OaEFDNyUNtyKn>;Gxjh=p-No@hVONHKo8ZN`)=&G`<-JOl0iD$&ZWiReI&Z* zxJVwslnSWm@%y@TU|t*Mle zlXlj(5z=L^TO&{rwWXknm~p=42oBso!BMew9YYqc7H|@k&(AHTOrQhMuL$WjZF$UM zL@?WN3f0sjjSerJ0Op^@al|iUae{B0Q$R#|?_O3vppqk67*B zzJvLM&N&pXH7ohMA|8Go@e0Rd$=oWs{R;?(J)EElO*9udF4T&Wtc%u=S3M^~^UFyY zzv$jT%Ow&u(HqFbY}+!ZPN4f`Y&9d7$bAx2i{T0uSD~HDNpk?x2@Ja;H~qr~bs%j| zMd_64Zq^S1)13%^zP4BOia}|JAIUyz22~DJzsh0pz}bCSrrn&Frh8WLFXq7mZmdye zP{hxxrm1!XnXY32`*rW?&;o$%H#jUbPnAM;)6L3mgmli^{aJtrB)^FYtc`QlrwTa9 zZ=s0^Gxy061rYroJStO_)EIUUK=u`fze78k0#PSUB z(``01q&TqsIfsRPddd3(U0X7|AQeKF1;oz3`cgq4IYB}1;ESDyD|+qeh;Ld_=q<&8 zp)WmcHJJX}XOAb#b&Dh;80rmdazvJ#TO_ zi1X6)mZu4Ne<|b!J;Cb#jzhYrW78TaZ{e2lib=g$X9bLZkK!AD)!M3vo85>XEi{Mq zxWM)d!U4MLTi6<#CGgN^VvdBF+gUY1bc3*1plDrreht2@?E}vuw9b&M!|Ck_VINV8 z?a|_yiai0JI4%yh^_BMy0^>1B`1MB$sZTGJaePMUZie~ta1m(#1zp+ufqxYJ#;*wL zE3p_4DE|$usWG6hsuy<2c+M-;Shos<|Bm9eFZbUo%EN!4IjfGBk<9_>|0EU4w(p*Q z?QvL8^NTbddV`bL{M<5B6(|rCIO;RJ*DHj{Eaq>H3t#;uYfpN;Yqvirnl?5pMG-Y< zqWLY4`v7H^>rK; zW|O;rX4B!7Q-%r^l)UrNrnxd3X72e}SfSWp%Fc1|(5{(q+!%a&4%8~FlG1X~g)lcl z;`L$w$?*`d-7A_O%^Y~iBM3I<#9~WdD|v$!3v~Yr;S-MdC5kor{~`Xm*hnMAf$Icj z*Dr|!ODt8SZMjhT`Mi6B2o8QdH?f7zJgCopV)_;Qr_ zaFBN7B`~{dxwHNbEfF}bkLG*blESiVPcV9;`e(1E)TTLr==nG-tez(MM$-MyE`-F+ z8|TTpKY-`?QOVje^Peg&8t#KyqR7ljs66_bmp zG0V|0f3q&p>)i(501GY*I4V%3y}fxr00xsLEnW zi9?YTVS{S-L2foVGK5mAw55T0uoDq-BZ8Y-|gKgjeFYP;!;jXfPe3 z)vk;sw9MJu?eCy=SuZ3kY$lqWbst zmhxZ*tTFt{(}btLq?F6FWv3&g`y8&0a_!YnyUEwVHqt;ds7^WzwuU$FyGyD1pc*LM zYsBVMibD&iNjwreK(%w43>4IkP=khM+RD;Q8y&uQwdaz;xI&WeXu9#s ziIA?>=TgkO0KA&8f3)sFEUc-;Zv*jJg`6mhqV_t#k17!O=}M=mbz zOl-$@l*22UJ7J2}`9)r`0LR`L%g9@0NF${TeHX<27N@f@FHjv}G5Ydlk9BEVSInT_ z+`2MR1XS-94JQGFrsOm%zu*~+3h0hTb&I?Zt8EJZrvb*xNim6!`T7B5a`eDbqF2A& zK+Ofx_e8j5^PxkPw=nkNxZoQjMKq!pu@vr&(2oGgw+y`^-bEmG8>aB8yIecq%=@6; zV)x3ksSGe9yf5OGbuXENaE5Lr6A&B~`x)1J-Y6f6^4ShGW|X9Q0tFeKz2P1U)IhzZ zAK@51)F)gdlj3Y20WiKl7GUvynbo5Y;59Ageap550O<(|jX7zS6j6{)tl0;mEe{|3 zrSj*4P(2=P@QyWJ(cT;og@LAdV`Wd=~N!bKZJN$ z_N#&313V@cOhZwAM3*;gb_v)&4B^nz#pJP0J<&~Y@Xhx_*vbHqe>h6_S@ML1IZ&16 z5gZrtbeDW{(a#+`5=A==u*nM}Ih_2A&fXYUz!u zY!Vha|K-xk5S#=+-D$sb=z#!!bFf6@sJG_ zm?H+N&qTQL_Lr())+ysj*^7ly?ZEU|TwHu26!Vz;GtEXtwYqd?aS%{_4#F{U{%np4 zYQ{})m?~Q)Rh>i!!pU<{vP5TNq*CkVd03?Hjmq3FgMXio8RlIWq8_U*AmIQz2Xt}l z3#tdWPEhzn4WIp^3Vdt}qxnXi?jvbn0$g9j2cJTEguFWj3=de0=0rzalh3gN=SdPA z*S(+Xz48K%NG$o)){0Xo4wPSl@W`<}84Lv&mm)sy^54IyI8c5W!mBF0R`q5sg2N$= zJTWX(09ra~_vOxIRYaYLi)ndV%kz6c^);Af zh`xSrC5tJJ5QhGqN?1NY?%RRuYca=x?ziRbNW`rpE?mAZX5s>+#5*~W!H4x8pPITfaC;)b`*HGQ+=gc9Geh-y5vlGiUZ3xV*yu> z^^^TEXZjY*vhCt5HfRN=Z^bNY+m%%x= zpgoAk4oZok;^5o&BCMIvimi-;DNcg3{b<6_a(q1o7@vgl5lIah`#|2b5Ak2WDz2jH zf$sY`EOye4!}$(AP2t8g;aMFio*XtKls|x4di3yRd;;y}Wa7Zs{|?s_VV?mge-NcB zq_$(98l?4y5FgMyGM?H3te4^HnRVGZ3y9keqxjV4Yw36bSbqf3Cb891s1lG4ILdMH z=E!$4TY&bMq|5n7&*B!y;y8v`E@dR)r2xSE<5)?|uRcZ9a2=#~>p7Bq~3VE%*=B16)6a@WKIx>WX^J zX~buosVT>FfdYZS`|g#rsdSaXas~zKWaMOS8pwVY;nfePBq@3g=Mb-8@6(>*Ky(>4 zw`h1$5x1Y`;zI7JQhYRRauY8Qj?x2X;(%e_6v?2AsQCHG5-iXHre8uhPmAw;6>%rx z;;dmAa%T->zl>#$N{~Xfvx9qAI3)I1mm*J#0oPM8>BzwE9^-yDNr6+!vwrh|5k&1y zjO91nR|O~LG_*8(!StcjQlR@)gj)vmXDyi1{Tj!G2P37F6l&#d0>K{8`j#=utJcGbj$0_+K+iTIbLW1W!{XC_ zS7%wNGv488Lf-e1x0BxUQur=v`O!9~%6+*I7aMkMCO11^`aK>}3Av0}x~K5}u<-gd z8_GQk(EUCpE!|vS_O(!>ng?h^{fwGyft})kf(-8%cTN?3S{|af5RtzXtq~x;3rm=D zuC^TMKnaFNnB{QoLj!0QAioTc`p|5kQn&WU7&VS*-I2oJ>Ys2Wf>(@`kwUNQ3VMoq za|Z8gNhN{%&k(-!Yw2Z0uM=_6RVSW@>cITxJcC%NQ*4$gb<+z}wm4gjaH^*~~ns4)ZI_yG4{Ddeb{SgI}ZQf+GQ4 z6_fRE5HD&i$M$)HbC=;C1Iw{d6lk`+Me%OAs*NXV*140EXh3(p{zBD6RKR;KEZ*rZ z@EK{~JV}7lGjBfLQ*3d#QF#+hD4UQ4ubzSMv9Kp>5dmy5W|FZX{g06Lm}DJB_h1+P z5Y2aFJwF$$=yeeo;-}aIpY9X~qJKpAb&ikE74h&-B-*4KGKJ=~<#8d9{4>uXX1H#8 z9Dmb%!IVoibEuqEpgRxF`%La~rLr0@eR|hiRQM!e%vksL8 zdJ~wrCGB}Bbjm_f0rnqUQ229OYIL2}$;6*%+3X2*` z*T=C+#W-br&Nl~(LxJ3XP|L5*m|U6c~s zGA>lj$JPPBu?r}kG2e%I1Sr5PB0e_U*o~?I&#vRJSVkwxH%dbmeKtrVzj|)XM({v) zg0kfY!SE_e9oe#@vf$buaqt0-J_mU{c0l`B6ow&CNPrjGHML{T&D1WSy$qkKes8<- z){dMgJ|`mi3&nx=eqaHL!KbcqP4lG1Uyr z&yC`PH+4u=3<=MJnp>5SQWnw&YIfnlV)5xbVp# zX(!R?%5)0R8@PmJqq5Yxy%K79wuZrTGS6SJo265BBhz|{pWAju%d2%5dqkxdKQfkzVHhnij zVo39Y&}{(StD}aE7w7a)YS3JRw0pV@MHqjMkN#b?wvpfi#gCU-rCM3j*FyYZl?I2X z8eq8$w|3lObp>|YYNLTKze-g%)A@$5I?MUo;`@$&6gvXyqU5EylGeDANPZ;{ObE8P zub!W&hbH(0McAkYAb23cL(dIsttd9u=eYPdl^hdh7cs-^OasgyXfCO?!nkC7_@L_AQCVb^o7z6g`a z$R;RWGfyO$+((u-<**PXNEtV1!!7 zElAC?nT&>MEMkPO85E4tg(odwECi0Xhwc;%~&q*5W=I=XL<=9(cj&2Lqcx?PyuOt@hOKQeLvX(|*3W@O=5~mW>@}4!82oyB zEO_asOCB>3dgF3_<(swBD_Srxo}e(NSZ%M0oVF0uJ|=%ox~L4ky#rCf4kKOCtEdyu zk-K~`c1a4=41S%U;MaQ?247L$)X|CH?6SaS_1SO$Xx|y7+f`p5z!;Cl~*8#JoROa$ec zoG4_JB;2SJY^Yrjf~@0Jl-ck7LkBmQ?(WwfCWamDlx zi9(!B9=ZbKNebvTSO%ziFneFbJ3Va72FJj66T+vBiQmvd@)P4wj*BgdUgF!Gfb#u# zf-onK6u+D9{Bj~B*4fh<951-^{-}Fsx%ttGZqoq7>rFJUIdDnE>Ly)C8i3VHW+ODJtgbhag@!t_h3! zf#)(D{nzP{iutyoDBe3QiFRN>^kInhNbV;GuVe;(ICuKOd@`zJcW?mL2@bDy?oy~c zhe1v@jX-=-{#e!G>PUn&v0f~!1cDhy5ii4jbGc-Vdv8+>2z3m+wjqdN7gLF`Zpl_7!Hg5ulsq9T*vYhVFLMwAGyGe%)KL|8>{o! z{5}qKU){Ek^=A;oj7JT6vKc6nE@>Mkpk(~CQ%S}Fq>TeuDld*&w)(kdO2D(qd3?Ws?53AtD3O*clVw%qPL}qbn6wrPuY8q2J zk1FsnO+!@^YPXOl!hrhIF-g0$w;XlD7j|QsuHxRACRz&RKaEo07d$>Q&njQbY{s%p za}G48I52-E!k?a&Wz$)pTR#i&yhq}hvjFDH@Q{hQW-Holv$?p?ZJ?CmpxZUV=3r+a zo?>hT#Q}3UEyc4lpHl_Ed4dAxFD2Vmb4HGNh_}dRW}gup{Cp0Jy}o42GVC@kz$~>| z?qo3!kbWVDg~z$2jHNUzbP))SQ)X1_PE7&2FT(t@^;PJi0{^DrixI!NYdo_Y=pKpi zD!(Rd!XMsKvjlOU*gcIX#*~&?k`- zn!s~{!|h_<3$pDFAa098HM`a}p`jZ%__h3fgfU^Vm5?D|9cJ+FP@HWx0lLfZ#DBXk zRw~mWadEMRHc@s2KzSP`9S)kF#oZX=v6R9$SFl+$p!|9c3m*ccv~6^m&V`U}OTNJM zv|!-;22@aN84%$gz`Y$AHx)kx7n&*{(`Rjy_tD@+2A}*#kYs0%XVEQi1Fs{R3 zRv?&d+RbrswGa6NH~;f1(A|z%axT-KP|9%2_+`IdlPC^BO(GW;2H%rHJJF>g^B&Z2 zI9_6$2CDBxcu8k_bw#m0iTh(g(_9{s0oh3kY)ot4Xup!dwhxP(8zhAmqx)&Y_H#(o zM!)tL5Ck0HUsUY9=QPy;JSQl)^;YJNqZHMSWYWCo-dJr(DReNs$Zo+wEX=V^s#++C zK*mFuIdX2mTbdbIeVBZ6dcmm}m_s$BbrBef3OJd@C=AR#f^g1FE7vF%gdgR&*#CcJ z<<&r7_c6?JN^?Xtde9tS&X*GW7P0wU`i%nxf*G+%nCiHd7TTg)E zDVXEJ41YS+#XA_o2{b8g8aefJf&Nn)SdIz8`RY=mUG!L-{Uqwx+j%z|u<6h2Q%z80 zYxRAKqB-a^O8cyz&H5;C>1Pm*N%6a*h&u@mI~Fn}YXo&0E6-x@Hn0^V9 z>NNl9Ibp27jFwfLKY`6x0MiK!KZ=h`X5lK~b}#H>xMR4toFD3{OO9iW-^?zR z2D+0JXi>)W&Z@rJ{vYCr8{wuU@ap%m%;tT_KV)d@2zr2$8!C1BMJ)%uKO{bi{s>E3 zTS|OM?=x`{1d7TW@O?8C1b6P@uz1~dG|LLJ=@Dib+bY_ZW&zGWCRI*<#G#!gCEDpO zA2&hZKf;5Pwo^Hv`V-=7=|9HAJ5{X|g^DvjMXlF+^kUH!F#H+L3!ZqRn)T2>N9pKW znQW>U*e%1B(x+68#r6Wlhk9+PLJ9?Pr*l-uM{e^kO{*i|B?`tBe(;D|2b`ASBSm`e zRE&1K;^N}hfUUeY09L<7)jQuwiKplmJ>wgcwV5i(ktI0vw^(Y=Sxe1|dKcnif$U}Z z#5ef#cbH*8z9}p!fl3U2kH!9IDWx@|XM<|HQFQF*5v(@_QB4N#@`P7gJRDA-KvEbb z#G=!DJ;s5SOw_gSR24Qx0eAiZ;nn@`*cI~)9}&0B?Z%uguv>;7z8Z915x0NBF7dJy z`h{KrI`K1FQn`M#$3Qyh3#JUd8K+uI{Yp59se%wEfnhp7q#~cq29|##bwD@k zYZpn{3Dm`yzN6m#aUFR$4D9}a2?yFY$g&B~P14welQ`ayO5X=~{*&j>9beLs4LLZ` ze{oz$`Xe_7s0>kaviv+%P5j9ep>Tw~oWY z+TK#=bVl!NsH3g^j(orY=$##vxc}>=S{!l7_}5!6$5Z7%?i?uo@Q8aig~66^vQq?H z)x6dHS&R?PJ12*Q8J8sM6}m*A`3oicn@2xH4S|9TUy6O9T57laF9t7Cj-<|kk34gs zl9&FaRsEPDH^;?(kH}vYipJ3(CGU0;dT?BOPI7*Y(rys#c{n2UTqbl4_YYP{0J8>)ce<4}uMr(y02>h;1ye1y5ZD^<3RNM;-z}7DHLg(xhbD z8`Ny@)&ypgsM=~$+8AoKy&MWQ->{GkuOJHXkKrTHM$MinwH@>iN`pcX7~%4spRx5!sR0L3fB@b#5{da%u8ki%3F3+Wm1)}Iy*?5>3Hys}9u0=fwf z7gkQ|&AJJ2*p<ORss= z1fte$^Ln$%Y+72NAj21;Kh#l-u+&HK53k-2q&V=rK@8utnzy?==>TRM8uA?Cybba4 z1QSqQP8vThHp_NTdk_|Mqfg)3v>+gTBZL!s=MGWq3Tn)8!SF>2nNO$kyqchB&SouW zKh5jWDdV=UgV;1NFuf@k7Z>c$<-tZ%Gwj-HO~WV-WN(S^{j1Tc*&2N-#LE<#w1sNTprLq1k0}TbGf{~iF030%e#dPms1Xr7y#Jc0d-X-=Y5ni z!aI^y%l@uQj)S$LF<3sFk3eh(AmH_=T1YuD%y)TD(6-c3F_ciD|kCgU7Jd4IqDS)U>{WQ$=P|A5?Yy zfsG%X0rvMLZ%wxA`ic3btKQm8U{-D7vnSc*Bj`YX6BaSxccyA}#vF=0OzS4!=sN)W z`=RuQN&a1wYSs7WxKQP>^k@(Lu(xGseoZOfpKcwt4Zz&{-nDm=+(7z)h-UuNUe%ce z4C1(Wqt9i&nG7gT64<4@+BZ_jFB%9s2FFNn=WFcgRB9CvJq#6_7M)(D7;79t963GN zMf#+wBk43j;h`wG;#KBuMbbrZ_#x&=|40f0xrd=)QFW?hi5|j-W7^Id1?63x;N(YO zA@wSkf2|av8Hrgo2E}`L=|BOKbg#$WRISfiMxm;)Nicl{oDY}bko7N=5)2WDzn(q8 zNpT=O!s6i~2UPpX2S&xIFNoEZ}6hF zkZKCrNnkkkF{>JzDBK{LmvWsn3xFYG6@x1rW zvVI6iJ_*GGlfy13;^xVSce+|3hT_2TDI69;s!H)a50V1)Q&IBE<8^F50=Rbyvt1{h zUQJQ-+NPlb>t-obPn$#7bX1U5aq*?ra(WrO z*!C9-OMvAwQSsql#zl&>aTemmb}nXtD7f?42#{pcKh9u{oiQ;z;c3u?_1oxdzJ{>z8KTGO{mY$90SuMu?XK* zWv`>Lgyl>45Lr81@-9s$_q>)8XTmn_*NpSHO~OeM;Kf>|T!Wk=cDDMO+_4JU+eEP$)}o?Pj}Bfa3&*3LMpU0d7X;L7Qy_>S~++t%c|Uj~>fW z;kd69FVbE*U}X%y40g`})^C6(Cn(fWp&B~oXP`11s}O(JXx9#Eq9Ja-GP9tY2V0Rc=vX!BJPs$UDt}RKpt4WmWvCulBJNcv|9*Y$00FKk6+wD z0>vd%yzh8gVu*ANRe@*exVMbu!^(K_A{_!9Se|X5Une$qxHd_7( zFF5cmJcn4>Zvy5_vG(6O zQ5;wT> z80Ap4mZ0N^dzaqHw$1_h9awUcKN(qe7dbIaS9)} zb^9K4Q0i8HmgB;!N|J9Bou;^rkWSO1`~XGNb`Dke)c@#5aA*nV(U=31`+9VM0T*zN z{daB_9Y8xEDD)=h|Ml{?s?u>0_4l8jkA)e~4lW^lv)}nZ#T?^h#C`tD97Azv1y?W# zxYmx%B|^Qp2n=r0ZD=x!N<$+^MR>@8eRmb*;Z9PG?7tuOiu6@^WRphXP`XYc`j4uv z2y3pQlE9a1*nTitW}qO$!EIvBE8>=GC_d(YQ=3v8$bTK-P|HIWi-P5b8;ED7jyOcc zf%!80#4FExMZ5hbiXS*IkvT~q{w;(n^_>*0hzH%q2GsJcy!-{+zr%Bg2`g)Pj1HWb zqC38QcpTLQ%)g68JUv$`Oew;25Als9&a;>tIR78&zu$r^bmiPe<__SE-I$^qC){9t z7tsDb>Z#s#jcPb&et`J>K8I)w!rlKvgcH_f997KGyAV&mQ<%jT;Qt8>z3Wl<4++>} zdxX+uaz02ST7dMA5glne&Xz|(I^YT7X?ZGbr)656sa8b9k_r7h-qi6F<@YZQV%rda z^3Mo|+45ZuxEu|%8=s@}kDDL&Q|-X`7aSH7Q;Ny%5wf^2O?R{Fd=?r4?b8X7+3y7g zT#&yyg{*C|kG&d1Jg*Q=={P4{sZGsm#7n%(3EHmPJLwJIrFv^_vw8^q1iTcN0}iWq;4-i^U~{S#%BTccYSezP(jV zF(?DO@tWu585v-ICJEWjlKY^=8jV%!K~4gL8!Lo`sE zrjIE9e#q3Bv?74}pAfEk;})AN1aY^FpQ*WiBNYece1v?gQwa3t>}XUzKuG?iG9wZRN{+1POG{gYwn;b!Bdj z(_O|}RQ}Y18VPjIi{jV2bWja|%=-V6b=?6?B;P;mM#Vczuy+yb*$8&eDA)n@4EAoY zVh{FqXY5^r4G?sL*lRd@57-MDu=fb+DYjrQU-dULZ{F^P-@l)E^XBdDXWqPdQmXVM*k1~(JgUEi9JE~~cQJEmY~xd#M{j8b z;C>l|2Mw;J>gSrW92ai9kbL&j9S`Rb5{p*uC2w#9bFAf1&E3rhn7;((mq)mF%iWB# zAnxlcYqv^1Q)u4oIYMHyqh)ivAA1EP@|fn-6i80 z?H)7jK>fNX-sf!;qafIBuD6Bfbcwc`FtP~67x5^BG3YrF}Xld0^`>TLd_Rnw^z6NrZBajbILW>Z2stmLbLbKL1DXdz>a1$J^2rtkxgen5sH%IARox<3> z8mzIjKuc}zCAh~InBNjhHk3Q!aqp|H)f&Ffe`!Ni#6wWves->{uaqaSwMIQ#stU-&pMV=SCMuElaPf4^@lH=qcCtk1f>_- zx-)+bPiqWCTjpI!mX}(9|Lw3!Si`%Wl?Gfg9`ot^42lE)+oSls1c%D$m^-ZDo7l5& zv$z`k{$JSc$eX2e?B&pOBp;q_V_H^U4ipUnLD}<)wm03PA6Jc44PaIywq1Plqy^L@ z=mB9I7LL`ElKkj?2j5O88ChlG9x4ejj|}SzyHtJM-WkQeR0?CZKnLi;VX;|IlAOnc zHyYFx8_jEynh&Iz4)1QLrBCZpDylgN4#yx~oMjn8;C**l`B}dlug25^J@}h{S!NoD z-xF)hITPg(*t$sx`~+p?dqy3gey=rf_+OZDO75nd{k_rDmft(E85K~!55n8;mffjv zLDv`YwEkt8ICy;-4!^wplOk^GhvFxO&7VSW;C+8YLw6fk#ujYRn=rtc{5$hWz zOY4&HtZU8KG!(c$7{&d*uT?FGnulP+NpFXG{A7M879=Em$q{X6A~3Az^_NG^*C3D* zw!KJ5PVt!jS%+c!@g*G0#R30^BRrvZI~Lc$Gy9G}{BvxzQ}m&s6A&2EPGc)?Q(mln zBuZyLe=wZl&<92lYSCpJvD4AYigeIuE-e)Gm!i_>s=4)jV zTzeIpE#q;ddVIL2rm~+9c>6({jCMwAPNf?Xm83crd%usg!Q=%{n1xr*-V?7kOJsZQ#lHF9< zTHiS+oqq7N%D*ElHrTQ?NBCi%y9N$vh%s6=>jHYuLq+rNe!heDk(Jr`i2Gg-wo#l- zY{{)X>&TLMMRA*tDui|}Kw+=s4kxKFc=&}J7T1-j>9O0;vhn%l)}S0tdeg8$Q(0zn)S-x18g``qo5rSwxxj5KRGF1DGy!(+3vLBJyIqk78+$Snxg zIL@ZQ)7X3j7$1*%Dy=K;@mm1jb=dO7?EkU&0{l6`Vyt$L$C8PCJyw{12KHUAy1$(f{#WAH+ z!In$Lcl~pfePrkZcGTqhd_s0H+}9^z+3>>T_k-;CDD;GXd4bUDsuVekrdKq3QTFCQ za-mF_O*}DV5afb;)kEY#6&kSa0rCso0y?*YX7jA%sgMZM`nPQX%LtbV;GnPo7(~9o?adR#L`vxFbu8 z&LeAJL!U6ZpL{0{^ns&Xzql@~3imc(km(pN5lT;x9TmkU51BFpx%*dzI*(_!g3PzmMbhpNi-r0cA#F@!)1Po*}7yDU0FtoJV}27bsHh^ zvLmk?R)fX16f)JMM-YYWh4H2kVE!r8|6+E=4@JNJG~&G`jbxq^m@mWWaVI}3;*K+< zgVH;Q#81Q6L=#AVmMam@)Qs^s31U2lC3g;abCLn+&*Nx#tr1(_2K!wEX5*)Du!xjh zhq{ri7jX7G#7kacZ6ca4a!GCb$M0DJ3W$CQ74%vzg3aGsJg~XaiH~egcDEH znV^W9Zg5;|-0H2I=mO_{6N|jZjFF4jml51I`2cAD`#4nwG0iQg;3vM&Ta+d&w@LDa z-liaSZ-0Zr;N0)<9w@%3$8t)bSa%nKda+F)iw?o9-$hHdXZ@XHql4`pmURfZ0U2$e z_m%Y$?8Qp(;F;^IeZgm ze-PYwz2zJ)pQZ{f-EXnN^o&scYcgQJ8x4xQv5CDhFvyb4alx`gs&JET-3)$*qIom( zsd|d;J>sr=2WC^_f&Mb=x3l;$3WH|b2NXZEDr^J6f%qR0O$nOgQl#~t5U)8gZY#xs z{RD=e*z{|{92V$yd?sI%C6`Cl->k(ke81B3A^S5EF!ljOr8K>cr6bm3YB zkMNrO;DeMwg3UCFhGm@l-?4_Z+E9-b74!diiLmabH1iwTP%1R~!N>g;|Bv)Pxv=)4 zzUwc15e9+4Y!O||H%0dU#L@pErm$o9b<6dk!a#UUG~cfJ_VPwoo0rB>ID$3ylcQMMOt4F@qYha8BcMbx(x4_yLGH0?$Dw5&MQNoP#nna zgK)@nn3aI##zKfUuuj`d#ewIA5w_`0Iu-3M8K1l4Fzb)t;ESO6$$-TylK|SyMG;@y zXFD71!MhjZuz2)CcaN!=rZ`q;GvdmB*sej4;Wu9EMsW5%%ly zwZ9_nTMFBKGb%z(oB`YAqQnxN`QZqo1)#|FP8pawN7yUbQm){F?fSOpvJ#Pf- z7hu0j#s^gT+Lt~qbbwkY?*A#Gw(@q&wGsCYJUg1=&;k4r&V6dPs(Welgi$O|ir(t6 zh0P$45|}-VE+_f?OP!H5fJ0(~M^|MB4IQ9PG+$sna?7Mx<69SN)Jzq4hy?7H3;Z+J z%c?m4>!GdR!xpDgWf0udN4Qq!0-uyNg2?s+F!YICimXEqM|(F!(bc-uDq1>ayl?aL zp;QI%zELy}v9G25P!yXQqZYq*U)oR{IR7W) zvp*2^1h+qi&IEcu5SEns{aubPpl^<4vmd^tIR)qhhzgc((&I=vz&To=;Fv>G<-J7E z1zPeV?V3xXYK_U*3agktPGi#upnq!=A746H6-l{d+@5`yZT$-hK131|D810Kn~gc} zxaPK~{L_GZe47dIKNt%R?@959)ioigs>z!UBk=1R1R37_XFgSUVGTv`b%Q=Eq2j>* zb{rNacak1&r+1M1wnu2KOG;`(FQ9mikhcAW`XSgBIVjixm0k(FDN!64{}+eF)aSqD z*b)@f5v$aj8pu?E$2TJEUo4S%c6c#Pg2P`jyhqA@2go0WHAa3Iq8ipsoe+O9%*J>I z?C;EBq10%}s~Jt>xDgVkRBJ`q0;KPP_0M;?bU=AlOV?zGL>T$ zX&F&^hWVx7ml;NbinaG92T>ebY@(Jw{7f8yej+YVcSabW=NoUKU9><)SSf+ zP{SqTCx$e*NE-$(-=BXr(V^?6m}54fmR+IAY&Zgvhod<^?oG*&V$}@5Dlzp^7NaVI zfUvmfQv*3b0h_D?QQd{gg&*Y5+_hiSYQ0xib{A-H3~N^I>_TIB{0rkLA_j zO>w)buyl>!Hl`pbIa&gh#c@NC= zz_pJhtfBj;#l1F_m(hoR0CRJzRk=x z5>EYz*vOa~A*^Eo?a{`<2qc&;l!VgH6E0m@SHXRwEvsKg7+0EIiB8@ z<@*n|>uh{no}B~hu}J%+VNF#}x6eT3A=W0;MRC?!P}7<6UiFDxA+I~8&>{Cs?vZjDRvtsFr41!#Arno`;*8ms9R zqK>_94zd9rI4{F_uNY6$$ANESTZH1N?-q|CI52)OHrO@su*WGs{Surq4aiENYJl?u zg_v=2s`R+nE@FpcDJt%I-^o&sK=oy)`NESmIl?64a^8WZu$oC^3b7|@r&lwKOoY87 zrGR_%30+nU82|A#QWJpSQPF(kSkHvB%JZ35pk+%pNRP+Ty#$R`lGvK&R=mbZ;d$sC z?V43+)X%#0JOTrQfJNGx`vO%HW9w?7gk4T&meStR+q!$K!3TDp+hA5K@Qud7tKkvs z7r@V-JEpnU}4_b?gD)fBA)=9vV z$06J|rXR~Yz$bUg_@lk|PS6H`+3_g8Y0PRiWP-S99pbya3$lD4xbyWK7A;Lm? zSf(8i;m0y*KyL}F9A4SqV-?HZXl7nQ^k;3=hs!%~kZ9P`K~{dj@?+z;hX%U;4s- z6oz-?*o@+{EBdh=L_qc}2*=I!iC4spTe;oh<#A~g2A{r-ON-OH#maZOKm#thOvryk zepDd-c5LLr*hwvvM$9`f`>^Mg$8zgVE-(CgDMfv!YdV@;*mBmlEgn&eL6D1%zYfIx ztzeUNH%`_+#_%Jh;Mez{LF=~oFn15~zIMdhX7&oDhC(-x;o#*bR1t zIKbvR&<*}YB^^q(xvM;F&|bvn=*qJM9`u2I2-_2nF>eUAI1v|n4Lsl=cD~7lb7gt(N@iWvw_fy#B$R1LKr}P#S^J&zv>AxpcsSXHY z&LI3FIZ|b{<}Bii7p%>~CJllNM-=c;#i!PDD4y!Dq*HNV`FVur-F~B5@$tPtf(v#X zO7D}Cs5FqApzsDidnX^kHpxu&BI0*aVg^tgSbhm%lb_!;MLg&-;@2Na%>Mw(QxWd* zzWr83+=;m8(`UZC2nXK&3RanX(yB7wbQSSu@9Ns9Dqy)2;U?3LvOyOZ;Fj^B^E)tc z@bqaY?(V)um3^?Jb6i*vAVp54>kh%!5K1pB1w3L$0u@ zQaIh!0vk}9i5(`dTlO(!`|6Sscd-%sC^%sBkNhs zCz16e(fj}vYlwlFv-BX(3IHn z{V5FWevC@)tX{lck@n3%{O*}5VH5{?BP=!2!x@_JKAMJ@9u#KStKu^B2*{WG8I zdu2)4E}Ayid_ln-mwQFwn=%Lpi`7Oy^O&<(zhZ@p5378j6@cU45bpM%<2KYo(k|aQ zE)F<;p6?3+mXiV)l|wReJgfbGSf@|E-}rC^B>#bp+z5O)S!pEbCsuGc7ReV~f;ay~ zMiBakG|{d8y@Qj$FogL0RZ11MYhw6ia5sP275yf!7%u&8%$=7M2eJzs7JVM;JPrl8 zu|#W$n7~qiz-Eu1DxSRGPVf-Uj4C zNSv}V&SQIU0c^8C^T90sfnH)R7{kv`$7Z~unt}B?lrGh;v?>75_#i%iaP(As0|r5c zt6k}h(~$$e`i`W>?+z$Y!ZYV0sBO@4fAsN3`f9C2$j8 z%3L*mo8@HS9hyp^p0fLuv=I=#G*-zxP(NBR-;KCXsFW1-AHA3SP#G>N z9N#P@?fjRlq?X0XtLMy4qLqQ={Bt?7xc5p3 zKk2!HWlq6zV`an-IIFNmf!|d)EW|aH!iLhlpe_PIF0@S~8~?$lSH*r=^EC^RIk&5! z+9ka@vBU(B`wxWc?X9^`c|=WhY%c#D$)^X64$l*aogNUD_T-aTP;IS&I@~kg{iHg8 z)ntz+dmm!I1G#c+K=!SLRp#~TXrNVq-!j}gyU?GCHTK#lzPMuLqZ9{%`(q1FXS~hf zC4%%=WyA8OtP0RP0O7NNBSt7KIA#3i{jvin4lJ*O;(2bbtD}gU>SD_`<3`IDAOp+m zVU>t(_B~1!w~QaYF=->k!Kv5h;zGUtQqsi)!t@5Hpi74UMqOZfLxlZO;Is>8dL!br z*#DG$<}oq?(FqD<+`jPkF~tg7W5j1A#7-eN5dBY%if5;{lBcquU*804JkecFrJ8{4 zG8{Ovq#W9kKTjG^yhLbWHu(p(H$}MLs9Y+0jLop+WcM?^cnN$D2+sE$K^Tfq6&SQJ_JUytD1w+%Kj{u>-A2F4Q@meaJ8JkoIX zwlO@1nk$P1M8No9)c-87SB{izPzaW7vS(m+6G$J5Z6Eg}%CuUK;_@cfg{sex7%Bxv@mMcG-BA33{+Zm&uPSvn$~ z`1Sk(Y7&s&i27~k`^Y;G;3;%rSjG9H@FiLWdVmZcnE0a+g+bib3B@B{&#g;v=mDK$ zV4sBWpqyuFP2YvMJ$gx?@cTNRoq`TPaBy#lwesgkx;naIS$(U3>YyKV!`6pA*{vFs zjolG1`=%NTkDwRyh~fL_7j;lk+eKjL-D%$fn8$^l(36mf?Re=hMLxR#Pi^jnHL^3p z+2T2LhTaIz_%THFsWp9wCU%p3! z0NEoE?p=4}dqvzOGYavj3clTw;PB7#BFNFSyDBlQ|CRrr^#9e7Vi z+n#<-SIrNcGHx2TTs2+&8^vF=D#kuA^dHkdh=(0aZAMK1A3uY`Vz~k1q?tOKyl=~m zCEC-&zA?W5)V83WpUv;E`4s54%tS>u#?*_Bv?qN!&G#VeX!GG4UH z&|VY=k}pQ_tpC|nsVMUj#Pg&*Zb!v|WXil@{;NTrdzQ}nbJm&i=up^u)@Q-)sNE(z;OaYLO0H|LNUp{ z0;NM6#xha@(N`k8{Yf=8^95^yRv|uYg%=A9z@@K7_}9S~D(y~!!_~e%ed&CTM>cC> z_?>-KQi2szOwl}q7AzNJX9=8-;pzp$0xA0kU9xr)2)5d6+Q{}r0oP+uu;E+DD>uD# z+p?BJ;=un#@B|)^JPvKXYMiNBxzxoY{^?kQ1Zp18T!xnyA1{ZeO+?!|J|7b^AJAwR zh`t^hO>0;@$L4;$g!EKV5S=Dl!NNi@rT2Ie6tv--=Z}k9zQkRsp7OL%8hpq;%9o zl9JmIPiWa=BgKK|2#d=*x;@T^+IL`u#Iwg()&Z!#lfz>1Pr2oc5U2YttdhTD2J?hK z_uW_}K6_@4Go4N>)3zxzq8~L2VwgQx<-({ec~2L#VzOgUQTpCuS_4R*gl*TWX;Pe@ z;7*d3k~5|5&yQQv%%IhdHUr^HjluZa>a;jE8HM+t7f`Zh-a25T242)mssF$#{ukB3n%Z z?jJ{SuO6G(7EI3l6NoQA)rJK`!2Od5`~1F6HLhwLq+`+j6GGmc*Uyj=c-VDQr*~59 zu_hz#{XFUn#ew)K{A+lnOI{7>Q9IvLD0nlm^&=_>lqWEx2A?igeIWa3ls<6%C+p(C z_cI(8i;!jc3enN37%Av1R;ho^hlN|f_j4Q;=9T8ZfOHb*O^KLT*(C+RWHOXO()ICpf&89DaeInuGpsn-W8)0Tnj*ASjDjgvED^s#yG*dpp>wSrYpDJM7=+3Z8Qu@a;aYP2ACRm}lgVJqBXxT)T;s!y6yB%;YRqU|dMLT9)<9{ygaSx#lOQe|% z=+STA`=~T->tBq>KyMk2*q3j!qSXF?e0F-XVZfy-cuXgjXqVjk#U?R8^T$}BcCT(8Cz4GW*ut{>o$FGgm@oIr&5Vt%<{71n}Q>bq6<49uq7MaS@f7O4FO8_d00@>#r} zq-GJ(hV7}jm9_`|`z;B5=pkpJ-+A2ifZ>Z9n;dP=%SaF8&L(|{{a$*Q6h4*iF3`L~ zK}&MyK=vpf4zpwegt0nsr=JrZ}+shb*3w zZC1oBKRGV=`ACodM|Zsh|3cBq#s)nUQJp51uR7oV$|F3WHo;+hE&J}@a*Djo3vuVi z-7^Rd)D{p8E}b2qNb5z8i;w=^;_*8(ED!=GOHmp0M`;c%>R7R}!yKvu7@iB^ZA(K` zZ_t<<@ss)EBd9nqJP)?`IkFYcHo-@7VTtzhUM)+m0MoruPw3SpvlY|Lc~Q~v#(U&+ z98mo?ta5mVUzAcs^E={U?yO^o8w44y6)~bC!X)pK55+CU7X2v>l+Vv$Vc$L}at%%A z`xZdSPrrR;sWPBD!s7OVeRHIc?FF$)!%aSkR5=h{hj9BsXK5~hcj_P?Y&0ydlvbAg zSc-F8@LnLL^`koof=i%im&l{6^Ma_ZB;v(iwb({2 z1g6XI#@o$R1hbWjs*evmdJI8%{29Z#BlB-VhB;uZTs3Qg?gwCQT(?qCIf#QF~No z5M+4M!Fag~5Uy7yO|yNA6QddJfa+BUH)y_3?EFJD*7;WDx`pXJQa~1c_0I{!QWRo? zk<4AfOR-l&$xYj&?7Vb~#NhS&eSO5sMJBVPGZ0;d_g}5FOA&W8z&=wnH(yc!sy9S6 z{yn>?-i@&lnlo_}`48c>1thNrj=eGOW8&(KECK@txCjj6)cdJDSt1pv{wJy#IIE$@ zQm45IFA*kgTr)Gy7-cHXxo#k2WD7($zo;mtX^IV0)4x8A4`vVu41d2!yqII1-r5Xn z6xtQa{5_C85aBDj%ac$M$-M*-P4wa_vF6`wSOVWpP?&8ryd{NSqUX)*%{e4KTazWb z8F1?@P`b=MDQyz5mIs`nr=K4jG~`fh7VIjEg`Y| zp0a)9CUABu8_+xy<x8zF7O(7i091ERL}sG@I;f+IM@PgD8Q^Ct zz;YvT|MXamXuHr>kv4|K^0da;lkzqaV0kC5M+l!Gg?rJNoC_iG%i1Em3jxPFb1h;G zy{bc-yPzo*r?+WG8wFS1mBZrcbI0UAalz}+bi=aV+c$XR%nbq-X|rY*?5sS3wR=Td4oNrIG>Ug)4Y$ODlBP>3D$4=?0;6Nyi};oI@mouqcGo&arRXHW;g1bQXI~8h{=!1kqwE&#HUC zP{fnU!WmX@@-qBByW$?@VI2`Do-#XgI>mwg!#FJJrzd(`185vhdRW5*@?6!8AE-Q# ze*~(Dar>&$oi4=11Fgu9suw1ZF#&qONUSh@;?CuYJ?2q}-{{nhrJA7&j7Io@^__aX zbPVD?rV-t%(4| zoHAbjYeDw(!1hTf-ni~O_ANl%G#T-w2dW*R?E>AWV6)3tSmevEpo$yIgyEAUA2S_S z4oxL-A3Y2!COnv-7;l-zwFvWPO36AZ89W{PQEGFRP6C~}zloD$H+!cZoj?@;(+LW_ z>&W?ys)Kd5e-IBSJ%h&8!15W0woh1JPq9L8;kfu{?KF9137Afb*bhX6Z#O)C`{3j$=Dfi`<=l4`iOFX0u0bh{Lg zPLID#UWz)#5Bbd_pbc7vtLug`@B7f3klnWs-=38EVP5^km9@{$<82DMyY?e?*!Rk`NPEB^9X4J=Vi`UM6DZ8#pFyM)|Y|diKyW-xlJ=;A<^Kw zk+_3eWXGJ>2q`L=MrF?l0u*x&{~;fKgRWrTL|zX|o;FC4-3kOQo6(!K`^1*Rp+e9W zG^FLZ7`BK8?B0s+v%dnBs>yxxKE z+flLVWFx_0SF~xZocIEM@5CmGUG17&>CKsw)VflBU_in;g_5+x~n>r|upxc8@ z58v86mEyo{0zJKguX<&E~p)5PLmD)g+JkbA(!q!5?m?s8;BP<%O zRLimN&9RrfXS&HyoG>Jq8UrNXhl-X*9#(PDxS#uOK{_P|S-|uIyoNaWSP9j=(&X+( zED=tVds`dOb4FVaqHs+6Y}`=EUHTzx`N`O4ER2QluN63irN#;yHZi4ar!c(i`Q6%Oq1na29|I+k$iW`V?M6 zm{Lfp;H0a*rc6}rM{@=aNKDm{BOeJ(KGO<-6IE+w(tCG>(bXyIAMBh}U; za+Ahc)E**E%bc51rkJmv>MBTMli;9f#YIa+$MOF z&<`#WpF-Ap{KSRV|5R+(UqUqnQZ62)IP?Po!wHK*JH9H?j>{-rstNqO6#76a!bcLy z*H*-hR}gmz^Vl*XbbzY}pRW0Oh$8Ni@%=}8U!*vAdnbx7D7BEyzu-yDX&e{B3X?lj z;^}p2&;!zWfw1M6RN*kY%l#V4&aOjF$ajj8_kocD*oNNetVbwey^gIOo*&8P$H4m= zsQV+y$#tXuA@jY7kbziC%oxh~j=1(vq3`vS$F$!lrzK z?hjBpz5E6CJviTGJo{?*ThtsN{6iFFA%}1nbgd7G4AO z2?|4Y#cliKfeoJA@syWomp9F~o<1V*{~5yDR_&0Je@#T=e~8ET8qO9wfd9|2g|;mt z`Z|`MqRSJ*yd89aH>m#Qm^9|Rz;NHUh^K!~=|x`+IDG=MEQzqa zh`i$!YS`U8ktf=3FsA{rPd1u)HLgkyRtLSqHnuFO+#1y61Hg00?NZRC?TaQ|O1w_3Z0pQ2p%jlk@O0&O)Z6o#HaP#~$#tH1Eb z3p8N+&Wi-UI?_yiG@(Sq{}8gYlF~A157hra1+$MFlKTa804&n}-1;I-vBdF{SJ682 zPGCt*Apb9fvu0FeaS_;I)U4$$=yHeCZ>Sm|zZb%bi;w=LXm`o@**`yyp*T2yfr|@M z_DRjd=s|q5$RY7d*&_1X3_QPfE&t2zxNwhjz9tu{X&)gyE=u=|pGQcWdarhK#Sm+5 zH1O$(fy^xc@AF`*`h}f5Hi7$kV}*=sEgw@wzW;aQ`=i zyZtsIL@_Doca961_EPpKn!@(Z$05;G`F@VSu{q_kdH#i?Xa46?KFZXVr|R=#3jqzM zt6~gO0aSOWqehN(;{NCCS+;+AC4C_+agY z|JYbB2eKE!_6GLpp5x`{3S$-jz?*D-4V0JR#G55vD=)`Zgo_J{Z%dIDx`-7~6t%yv zLw+t%bq62qn~3^isC)dwJ4`oFUWPy4tE&oN9K})GXXvnUv`wHq`QtW>u9c@%?4p=r zEQ$D===UmrUkc%S$^WTVCR~UMJwl`~1N)ap>9xGK`xnhr6r0PShWRU+x2HJJz3f_k zLW|shqP|a7Q;zfldRL{G_&<4=HwXlUEL-f-$%=Aod9GYsTKymXe_x=y?^>8=33Z$2 z7^HnGpg{wREn>+@;5>mLVcRY%U1`DYhtj#yTU@0$(7htz3QgL1jgcZ}FCx2)Dxut< zQ&W~uIf!#Aqk+Y>#XY*7Q!e>lHA9}$fOoHgl`e(W$#GYisVbHwE!e`NKHz#aG~iK< zjAZ2j+=vUBy;8E4?sq)&2Z}~cs}!b)TB@UNujGgFJ)uDQ8dxRQmHu%`6H2cN7^#bUWP}{`lqjA zkVC%~E-M#%y=U1}V0{2KP;ub09MPAt4mNOh+u}u36FB?22uJPjI$CMKCF7683PBVH zXJ3zt3)Rj_0V#A(i@82(*sa|>oJs=o8=$14suU2sk#MIW3Kl&0;2Sn&P~gb#{Z-iu zYaUMtIw?O!lI{+4=s-aq&6%^-T8A&BUVs*DY_jY92Z@FWS>s*5%Nia=b>03wBv?n zN(Ey(#BG^VnCZar_6Q%`++Q^jcggts3#*wk1dewgUwZcj;+p;Is^-4tzfjA#z^s?F zQQ&z;gujoz!UiCCRE-hwq4#I72$kXnL55eKh*s@VvxcGg7VBCT>j2w3$?%tW)sy;m z#^Gbvf~nLNpgKX}MIIGK_EX-Ay$j-rk5;o!4OH)naIw_(Clv9ZZuqHdm)}5P@bTTb zv>3X+hR6SaopMRKa6;Zg0j%$VO&l8JRArb=JyBWP@>_Uv2zcL%518WlifkSYZ_`a+ zc(TH~zIUfK0r7itSQy_x3Olxz^b$)SlpIj49OD?Uy)VL9e(!9`v+DXGesVRO8wR!$ z82*l()%A%YZR@|5uPA?*NIw#g-GoM5Y)O8xMy~_VhojcnxnHwL2#7AjnbkM4=mVb4 zF@TGUlP8f(ZElI3J^-o@BqKcAcu*j}$~_wgVFSDNc4K)6VESNG)W-XcoI`^~T%-*4 z$Uh8dLmvsqJ_HpN>{4!;@}%aWh%XqG%w{#f_6Tg?<)VD*oobq4yg=CECHa)5iT(2k zX*W85ZdO!Vhoh*=CRI2@H=Xntfod=H$a!GhcO;KN#FZ~QP%S`pf-*t~d7V;)s&o!z zA4MLJUR5Jz1rDNuK=RRCPEA2T(5rXp?{yB79U2zM*v^bZ(54lB6p^j3{WZW%9A?Rzz<2q-?Diwkc@NRd8t zAh1k84P{TgnL{Ok;u8_xo2!J%ap@)zF4IeO1heu(D_}V(fz`_e%SS1u+a?n)&9YWO z%WjVWYlS?6aLFa-M<1gX;{(xWp!SR*t#&EKn=NSN z+L>$+2cFMF=^_!eRc=}{3-PYiLx-UjgCN7vXLqPNwskg&S3YfL(?#&=b2u#i7+%q1 zd%N#koU#>o?oZVN*$E2XFSXrD)db!?4;}TBzHHnC#?MFT{D0M|j5dA`zbA$7IR!^dPhp=O>f#$lSYeAoJpV==U7!J)uRzpK)910GTfdUvG>haFDTP<3w|{@3i0>k= z3fgjqQ`mwW=yj|@yljk$)YGsmZpL8UFWqh!H^ zIB>RI@73mUisg2R>k!JEmcky>^uc5suP$8JmE+#|paeABaJqmz1On4HpfPaOw$1V~ zY+)4`zZt89oZshhX5F#{OZw=2~jpiV3KSYK-ww*Y6cM`P+ocm#}M69`Ps+_!l z8bL>}ff;YIS&$60KZkr1Nd?& zu>J%#u*~r%n~iYB%Xrzf@CyiF{K>U^*IcEOD(`A>V3_jqDQ_3Jp3DO&@zXmN|ABH{ z3O0Iu&M7tkfTx$?ojZ!DoQUldiXTjbuBOSdZ@$|d7> zV~?^i6sUg@#c#SgTvo)*mpCqD&6Z{^p=XL4T}IK>_sTFb!AsPnlA-0`UJ^3@Y%1p) z4FW;gbBb$=cg?YLzHnqocfo3P#ICBoBfl228-rV{Z0 zh0mU@C2tr3YxEDXEd4?PUxEkXlL8o+1D~WS<~SaqdR>r|7DQ8=3tTuu$UW$uB58cg zCAG&+Mzi1p2%mwGeeofxsM$qe=x5Kg3;(5BfbW^)>FI6v;#2s21z2rah z@bga*E*RdTlVXbI8OOx|9~*mYpEn4k2yP!ORYA4#V*L*_wfx!j8Px=wf6hOKS6wOj z5?%4}eSv~Kj#gAf?=oB@^BW7)z;JsOT5_Ri6F!3huD?V*3)+5Ab?l&5q_?vD>^=L; zqILk;U!(Mcf(6v^yNr+dwx4=D?%&^Ft5YOP&O0~WqN+le0DvUw*+yJWoLr5WdG zv%vlTq4Zyr0`8NapavFMQ5$A@lr9`NpSYJNb>I{uU0fK7?TGj z-+jKSih@kuh!<#AosEIO`Mew!Yvj>-WINqhqOBC%mBnko`QK2_fy@G`S-0hPRJ8G% zRo>nJjL(NvdR2{Dt{AV&k9e-?J9khVC@;gAmRlA@+*W{#3;mi&X(j2yMih+WXIYvD zt5%KlI<#f@WM6q32GCtDdUp5^kG*i@f>QqNF4ug;o)@B!?&AjxG?DD1wqr*QKfapG(H`6t=K<7^q$p#fdvRswg%WL%j6l9c_y~WH=-GQ zdwG8!&i_exsdiH&3PLq~mat1Nqbg)tGR-ipKG`1D>m zZUr^ACM;zupnq;KQQLv-ZO|NjK`HwM{a=*}A?>8s-Pi~QEN_dtk zV)QfSuEC3kppj1l;?^s#Q4`AjnNTJ{wXeh=5S-2Xgy!?)feae3wnJ6xJ_w_zDqwtj zgll9pR7Ll`9S~n%=M|f50Mii`<1^QLOcTh?fxmbaaj9_=pV$N6J7U4y`&l`nt{@{X z6E2ZWh0*k)6z?!>I<#DIm-5g~g2Pyln#3pzv(!$g-0??Oc~dexv#B#`iko9LQcXbq zF4*R;S5ouYv`sfc+R;tIs!~bdeOFYFy5g2d3H7%+rYCE6p|@bcBp!YttSefE=||vfbzYtJ?pOl)b~bwMq20B)NJ5A z!a}oiQraGRDBaPAw8nO0&R^J!3If~vl2^)(AYU!u(XEaBP;tcPh(sz6T#W0l~Oc^b0y-zVQ=Ja0DK?7`70WZzNLCVy=EZRc$qI& zjTmw~i zp^irRVaqpqTvBHlL*$vy>$)k6J{u6-%;mL9x_3}zl5~-X|F{_Wo{9t2Wq5h9v5ZY% zxos>D6vTkB^jU%H)G1b8FqF}D2%By!w;Jg-ZZ0$o~ zVEaV0uIZkmKNV@?B*fd+NMX8x?2|bxPOe7|=(}T8mmj*YOxyR{6y}V8@l#OK^nn{# zHv{9%Q#mf=zAk0!>EPUG8V>@5ZC!JGP|bAIvapp_=CnaTSiJYPm`4iQ`ZreCTVN=g zFap*8LAcg*FBLI;XK-8;22Axh%8CWr6E|n8<`{MhuORHZCN=LzFF%_+6Ln1A`6Y+_ zL9?*k#P)BkGb__SUGF<3N}p#rZ2~d?$ZX<6_rLSmlh*8j>Fv-!1X9>%;A)x zdeB?VT?B%^>`fDxqXdSpzy{M>)nioS3}1-~o_~@mB+;BlqgB{iU*C})Ub~5?S&eFv zyX<1I6jfsoWH=%%FMUIN0I;q>@iu!Gu*U>~M`H`0-;|Iec`(Q~2CF>CKG~nDf&hlV z;KH}WG*TL{$D*c5FZ_7=3Y_~|R5P%0MV52`^+9onH|RFsOcepg;}LeOn#p#cg18fL zadm{39GL;l*I^aI4$+JZ7j09Ud2@KDjx89{ESW(k2i(bTjf3So z;ooK4w}H5E8){!2H;VaYVE%T5&)#g8q!{BOI6E>a3_L6^C_)$5fi>oy{i<@S=A9fD zN4D~km){|-*@aaGr2Do}8qw@VyxYv_%=1xO4FZALHap>0x_nLqp2E5ZYa|YDc8qF* zo?yqe4;ISfvDo38gcXkYYFOM4{eZx*$LY7vs%35azogT%zkA=39!JuH;FI^p@pFbf z0&-kn6SNOi|LQx7<$a(J?B}rXaDtSbPU8_LLfXXrBI_+c{R61r@Xie{mDgfAi1_G` zrEEY3+8;vrSNBh<@X#&e)vnECj|h}M%tIHU?o@e;J-kKB5mLnV#Qj%f0c{sJf0XMN z7k-d(ECT6{kr@{~=Ex%GJn#Jj0 zhyEnu2R^?Dph|%8GF;~HI5Bz;H+H&tH8?ZpVF$LvyjkJ8X3XuL3 zFA#zS$*V8Do5F>V_H2pY+3*QuKaDCnY^f>t15j^1gJrs;Bxaz0uo1fEI9~315nFJbeIV}{ z0@h=Z_T=1iQNypkN4`8{5R*nVw1#-ZCgvE+8vgGdv+8uY$ zn7koU_Gh}Oc)?xNa%ti5(~8~3duYhdj^XmD51{{jtg@@Hrh-z%MR3^F^7er2z@ZyF zKxM&I|K>-Hcqe#>y53FdbC>FZ4)6#oc1HvUj%djEYQw~Z(B$CypDHh)7)8pY`g{M{~lp?j{-Ev;z6_V z1ILB*`cl-Uh2-6o_=utt%7@QTL|ro8H_vf42LaZ9BK?8gZgp$IpNh2kGiteF3};>x zDE|fF_LKIgMj_2t#D8U;XoYGF0)fljru!CpT;GW(Sy%mr(oN>IwNe}y|DD5P>iz<9 z-()Xe@ckd}Q7ap;937DUf2ik-6md_{Z~uXc3QQr3@ILF+&M^t`{Mh4`Q1*s^ z_+mW2gY$@4)&p(0NfGp|m)cEls7c`QwFt*$6)2-Tv?UjsI`>TnIh6tY&y7W8&zh0B zoI$!gST?6wGr1ac1T4~qq*PKZdDy(Miu>_I*u4SWATP(Y_5JfDE0*bhL%dg!a*rqu zT>xRR>(`JR&+hmgs~lRtjL{OhK|X}|A-q`^ z;=<~sl8-=BHCqd!=#u$xumD8OI>h@GyUyG&^aG!G?r!JpS9^X@QwZgI|EzcdEi?!S zi~hQFk8SVP!twkHpr@~&QhDeKMdJAsEYH6x-|SlywdV=m--1fhe$Z5A+`fq?4A>?~ z))(W_;;t5Xcud!etE1gH}Gwa3o~@SSjGSJN!F8q_Aj0+%3<1?p$Ck&to;lO!4hsD6|U*s_XI(bk4 zRtbGtvMDtMoPQmJzhrd_Ql8T(<2BxoTtIQ)eOeo%Af zfPv)%WkZ-)sn@I=^K(a2EbBYve>^k-rZXAY=1`_(xU65Yn4#WI(b8m?t zwC2K^Z>qVT3vnU7H`$$)L`1hXN70yns(w}sH@85;FSOcDVPJSmH11`B=wXDW73vw3 z_;NGqF$gl8|LmPKgh{B=8Ws6=_{{hG0ngiD!KQ<=Ri{kIjjL_3q|N71vdaR>W05v> z=^ik#ug#9Si}mH4?#ssdL7CUR0oCfGVP`UM_4`uDBlj@d*$I0Z6Je_;PA`W zkf!`bbKrb?Y@(zgK%OUa;&(t@H;x3b_yuVH7gl*_UhFY;y0Jw2w)cD1-@xa0L_OmI z*Qy9=F%mDtF5rE0?;CyN;PAr;%1+X>{Yy1H*L6ZAsmBK1pwi&$W%y;j`>MFw))~b! zT>bYDaUg#eH2uM?C8`}L15yZSqirX`4X)K3rNX{A-8@H8p)vPg1)FGXD&M47as>R!y+1{ZM@8?z#*I>i0+eS8HW^ zX$ayQcefuxjRo2d#TF*NIO(wt z@0LqKvaj*H0}wv~HML!Qjd2z_mSq^KN)_J8sTpAZaIDhJJ>Zh^rgS4XF6aKq6=UP>_C4rf!Q@x)h4nL7^IDnD82AebN0D_{bLdSejv1$VvP%N@oWonx6aBX zWQQ_zfN{Kna6DE@xEMzgQ{z#^vaM&>@-}dP0>X)o5h;ph%|woiA2mOD7KNH<5O{%~ zFtn}*m#veqMwNo~rKD=n#1^3cWYR_HZf{|)Srd)aEwixEB6lo2W&qyLCbKAd$vpWtVptWrYO0$P&r=VLe(OxF27gabm{ZS-FUK+u z@Lp_l5x=}jLmdy0ejcL1D+;Nm+WPs3$JmE4cM7COSls^XG%me@e#ZhFmHcP0uLPuD z$cJsA?a&-o?HL#GCd5ja{p5ia$iEnivb-win9aLL8624X?8n#(>|cWRuAKddO~An_ z^HS6_|DS6-Zw0+z8CGaN`*R?Ddr(2M9PwWp0?Q$85D*qZTvGUAx{=drMaku@1?F9V z`%wr#j5^Q^6_A)`1)os}e{6%h6@d5zhR;>zzYVI-Wnam0(G<5zUN;5iuj1d`E9L*V zy6*rriZ+hple?(cv17-MomgH`qhd#miXBUoSg~U)L5+g31Us<>P2v$##F!|SL}ClE zV#kiL5i54=*x%h92KM{-hx&Pb&+fo6JG+$Q1{SVse~ck~tJ%qq#R<*}GJ4M6W?j-a z-(SAh=C0QUYF1efx!--uI#(@vx{o&_HqN*Hx|Hj8?&Ep0!QnH0z0}?R8VwIhDSMJi^ z%%i9LRC9~&TYt5Odfg3E?;m=i^$LgcsOT9#&D_+7(u;O)YG>9@H#>V{)#AnW&h(tW z+ibG*3e)jXc2zW2*PjQvC(5CHR#pE@UpRS$`=aL_Q*UJ(5qtM~=Fc!!tJlnPUBdY9 zHQh5V`o+0k)f3;8`#zjH@OsidUzcW@+c#nP$2!06t7rTyvx|vuHvjAWaKiVQ`kcf5 z{KT&7d4IntAN%T3uIH&WtM2?xY~M0FcHYg?Grwf|hkuxPrMLU|1EzlYxI>b5UC;Xm zJLUdIPFw>AO3O<0Lwi8ld8JEF`-jYK-kaWXu0i#qlzG_HciwMb=i?xH-p@AW=BVmF zy<6j*W9r-Ocy`vV>xplb^>gx9qt5A0@4WDc>E7_*vp2H3^}H{4j-9?W4)1(EM7Ia$ zn)X+GKRZ7HJ?XpUQOo@FNAI>&9yN>o`hMq{MKAV`b#~H!=)m9j{9W{MlZ>_!{k!&h z+CO1}t9*xw&o(!#%sGDguDPJ|K`}k^pES4i@^|Zx^=?#hUZ>tSd%?i2x7aTSg({}? zrQkCIy;e29voa3aa$r#WI;*p4RrFjxasIW=UD7|8+*4Mk^PSUw-R!&|p{M%Oo$mg{ zRy#plP57TN+1%y+>b~x!=e&sq@3;A8GkQ0t^sE`Yx{2>wyRN7Gb7oIxU;Jg~`byub z@bhMa(lvveDWxZV)ogIy#=DEB!?kYq)GyC<L;zhL%u+Ow;;E~(=$n)-}gw{hmP zp8qeI@&-S?c1Q1Cw7PZQKl?jRxb^gZ*?JhA&)SSQ#hJGHE@WOY=R<3qUvAYY*0rOa z{;!(*aFepW^t?R9^?60_Yi8u(AH8l*>dqn1EjO2rKHa-Pg_>#q{L!DjvFiF5c->St zeC(k@uRHjL8Th05?{_~luMYzg^?6Q$yqt=x-t>=~Y8~6Rshn$!8^bzou*~bN| z4#(SM(YLL6*@cFxh<2|INWvl)v)UN8>;GS-fQ1PJ@Mb|boU*;_`v)n z?cZ@q*3Az7T5C_|I!&+i@0r^%=GK$&83eV!B$Hh5Ug7!3jB(CWKX)H^ zeIR^n);P8JwY?$24Ku`PJM8aVX6U0}q1n-CYrcpl_cfCY{$}h6Q|uk-`TvR8&#bv+ z*URDYPdoL#*rfxL7qb_Xz-OlQE`$q37-hIWJ1;`Tvu3_wCPn_m!uM&kCrYt>;nCUvC|_ z-{0AN^=xRLRn^P?LDz16YVU^Uelhhc-g|8}@p#o!LFe)Fuk|KDwa2yp5gtII?oQi-RH*M zoed72)cMTusDXuh*`MoeTNV9??|;Nt*XuErMa-_39dTIqy$L$&ael>6pbze~R8RBO|WB8zi%vb9tizYQA?Tnvg_{DeFb7@pDFh@b~p)3zV+h$(q@xX|3c@~spt1H zro77USAE^PLH=b;J#qg?*ZWjf*?CUhw`IKh3WvT;C9m0Hm6Shf?@3Sg zIsNMm!poZtY8QUw%pJX`uVBhoZS}-ky<1f4)^{HI&RKR{Px=*2du02~T^FwLl}vr* zImKt}c0KD?Hsu#v!CiWLZ*}Y29(dT^c3n^TRVH=*GGt+8oM19O6AVjq*Bw3gSM7|@ z_v*NTg>&tXv3OVOl=?rvWq#+ic0KV;F!-)73eKpVS--lum3>p@m8@H%XZ#wby5Rl8 zUC(@jYfkEX^!J#vyDzWk%NZ*<_JeDz)v@n7@jhW?Ewi&x@BeB||btUok%i29}1UE0`mzjxdi=baHf z>o+mw^>@$w+-nbSYU;to7I$`|=lo`-yuzmsf7)xWb?Ymy{HJqF={djoq|Prz`A2o0 zW9fMl-@@!?%qd~#jX^!>x9pVruN=JqpV(-bWbk2UUF;k^dfErgel|Vns(X63Co`l| z@7wlOYoW7W9E)sa_I*(8dht6A-mT3n2t3f8n0n${iC&X$owk|tN>FFwZ=>t$_HARm zr)xh~&@+EqGsw;n>(#|CemuD|&w~H69u?<9SzpJUo3E$6Rn>d{VUzEit7^UX%66T4 z->`iLc75Kytj>nap6}dX03ZB~Zf{LU=hd6t<~a|Ep71-ET?dY=p3(csG`jVBj?>>% zuh;t>Cv~ntS~D)|bti|Ky)5?kvjMxVXZuc*I-e1qb|St6P3>%U^U&WLnB5HRv#QSB z?Em-G!>~H#cIhO2`}{dDZlZlciiORPs~q~vShEl7)yiGXPSTt8b)J0d32%bI6K^fK zF852jP3nBgYtHueZx8ADzPs7`(B^8xdV3G=Vd|6SeR{lI*YkZ(Q!b1u?$c|pS#|wf zYgy|rL0jE=y6c2|F?-l`y~ginJs$SoI_sN1Lp=NT4l@tc=y_k-8|e9N zRrQQK`?+BU_4Z%b-#U`*ui5DPbC_A6^^8Bj+=WGdIk|g+(bG71pxN2E^PYBI)6}!x zl=~mwWeUDNyb?7#JK>DqyKl1T_5L8UuhY`=To*^tgUu%QT=GZv7pL_haENufah~A5 zHQbrI`c^fpvi^1FRaVW}_fQ`IhnoGYdfylL9L1cBc_g;T)(yr@+;25)~b@y0Wyzv?yZnEvJN_T!0 zLLUmpntcr&ahmf((08HMt~s zqUZe?X6U0o_d8GKb$7$m`#(Rl(0z$e&;B#bCOf}9?a|)7NS@WH_uYH*z;egg9|I4a zZCcm*b(@jBR+a2r-1R@XX~UF<_E}ZEo_zeqjjrp9+&QLx^FDt#S6BL4XJn_`KkVdT z-J7UyzW-e7A$PuU<=~mF%N?ug4A6JZ$bk`K?LU-II?wFn_usbfPH#Q)&o{$*XMFBF zdDi<5UtsFj?fs>5{?l`Qlqrv0W|QyCowB~lvRj}3!*%=Fbv@@(rhS`n-=E%Vk6+lS z_pkBfRpwVWI%j~3I#J(m)>q~&X}@dRGNr*6ydT@a-iw~`7n{y~$^#GV{)qLu#Ax#a zdA{Y`WeUfHvqa{td?i`O01)h0?G9Oyn7w}&3uXGQwW&BDOTz1yF= z#*8uN`8D>n>w2nRYj!kc^!0pg(|?`W;=f^+zh!TsSNU%F-}5(g-VxFFxOBbQ)2YAC zbv`ez=lTt1FS~sC*?+y;6TZ>ZS0Ayyb3651&zbU}FCDpUuf1mK{o~Jj(Am45>*LIz zd!Mkk_&x9VO=efaPhb2Bdsljqzqwof@0;!mE=6iOhp7OU@*F^S9e0{kq+!x*6@n#Pb9vygnl>Hgax+x7V9I={fxh~|* zi!@8e4z+fyXZ-DExVy&P4go@?MXGoi#*1n$bz-Mh~AqFyw6e>cMxXwPX9+MEZC5;E>*q z8&+8_edkXc72q38MJPPu=rcZY~yLR5E| zP2T(D$L@9b&^}Y{-)ZXK;*vEt#cVP+TXBviJ=3RlZvLSA2M%gIYAsyT%&-rg{#y5% zQO|J`E%DonS0((n5eiOHMqo@0fPJ3Vekbyy=iPq0LesAX`rv6{vxz29X zlYC~UvHyv|M|aN8H*(>WUStnZe+L*8^fMXEe(2ACOJV4gB`R{GgyPdklVcb(ot6`f=1%`26& zV(FFs5mVkgGQ@c%q;F8e)cYSeYAoK4Et?Gv`t)OG#nl@m=bHNa>$IP?$JIx{qn&d9 z_}v$gN5NxelkwlZGs@i5p?y|a|FXoc$8zn?J>J=%?}6V2h7{}<$74^J{r^)sp?mt* zH_88`$z~4UqWhs5eJEIwej9!Cr+b@`tv99SS!aFclWaR3XkHE12SBCs8d`rOv1_kC zJl~9PQ{OJ#Z;P;xft?0*lEJr~?>()zMeQk5zjejT`*vL)0#BRglJ9ON7yM_;7^{8y zbN8}M9}mxVqP|lW8Q-{ndB6Ra2lah#S&{xj+zGEUpY+l2oVoV6;dkc=f^N<{Z*J5! z&yIDj;q}o_HRT1LZ|k~f@V;Q4AG|qXn0*)Ym5x<)4u<~CH?bC;{g!wB4x%2Q@S@q% zPMf@UtF?(f7+x~fO+WJO()$?&UpDnC{Q9uc2Sc~~OzLRYFRxc#G3|5CKfrlft6ShdElUF_OEm_OsW5b+%et9S6}qJZo04g zWMIVQ_QhrL4YS`zu0F77?^hoJZ<;3(p~GEsN4;frJ0B2T^xf_h9NK4Boxegc`i;+A zC%W9*oqE4-!gbxZ3-u}B9ka>z#}09=LjHG6efdz)xnkB+-<12~#oib9>Bp&5H=9g& z{0rwjeLef%Gvy~{-*Qp!feJ6^)cZ%TvZPt(Ixp_L---IXZw-vQ!hUj7vr5jzW8dR% zc2@#D`#&)IpZl2i!QTGkADaF5?fxBp)8r$w!3mS!7}MLJW$OJqHcl~Xho1Q#n_Z17 ze1+eI&NMnn-%+~`tn;q(%O(rW?jQSX71yHZ{lwJ2I_Vet`uC>&79F_Zvq^(?7!)12 z?D|=Qwj4b0#19({_*cAU&`JZ>Pp%Hyus`zYq=8F@-eCP%kuw+DVV6e^8gcONOFR-E zaq!4R1}d9p2YKezew{RE;idi6k#`QPb^QE6>!cU_IxeqI&fR}|#tjVW!up?@aQ-Id z@tf(uEp$t`d}}XH+XH28>lJKA#?#(BT^BA`UtVr+XZ}gtK?f($)^FjOerJ4TeUir% zoPAhN8sO-iv~PfJ2p0>?lauMtUB-HRrKXsIz7JL5+*IbVX|#Vj-4rg}%{*1?*o+^( zhYg+?bWJ#aFZ1|JIxvfF377BFxfx$&?&k)P6779}t_v3)WS)444n9n`wY%f1%4{}d z=g`qdXkVFb2p8uvPd-YA9<$vWU#Z90P!-NS!94aP?Vm?Cg-aFYsri=OMidw?u=LZJ4$5$Ea#Rzi@+y9NcKzm=L>%xVXm?vJQgRju-R|e7; zuws2fg8K$!U!$Wn+V?u$5H7yKJozRadTU8nVSK57|H0|ET@~xLRE2ZzFps@U`|EU5 zxbzgb-?{7@5Z}8B_8bt-{lGldqWwS8P2ti{%u_%2 z?2I4&rB|?z2hXo`O*sD>^Z4&{piQ@g%YSrpy&z=%>=x|tRpc+)`!`(|F8sqh@h=_x zk8XFZ$5$0q;7Txvj`q>Me!3xC9Lzkq2pw9qEyjkbaL&U#wm9uyf^G_zmSmn< zO1nFLcxg6xmZ59H`DK~My>wtXx+Pp*-pRY;tIP`AAhIIuU5Ty>7glDTScMMy=(gkD z_^Prh8?vj>(bZ|+8gxUrxF+-DT6Ab_%dYX2^0T2ToLh%^Y+c&F9^Di!t@2X?1hbXt}7U_)k4ID|t z0JauWE&!9zPtTJx9_t z;rvm|<44nhW9U}Tdi^U8XG7*#I&vKCjnj4E!U*Px-Y@_Mb&Jg-d7a+>EbMNp286hxUx5 zYr^?+na9tg1LxB%?e6%hd;uFWqv%MA_FhQWg$oxkPh3m~N89d=ui8#QKiO>8 zPu4ncDIFE(4qt|OL%4Vu^W+%IuJKjqayFMmA(}bYvXuy@{?17j9;rxP=bhDjvi3t!${=MrX&< z(LC+Doo)yh?_i!xPhcT5kyexFs&MX3=CJ|VU!a@9>C$92r0$}_Q)tgrx+a{T#ymcq z4%`i=Rf`2xE}}tY?x7 zuhW6|9Cyc8EnUz*f9v1n1>7L>J{|dh_I^m$g$o}sPkd~*Re!&ewU(%{cSA}z5F^_#s`@f-^mfhp4(zk3#eMg7Cr#(N=HQ{`V zdHhE@@RKl^qkq%Bf9QsA zG5s$alK;^mH5nJ7Y7ku&&h;^m_0#^rbh;@DrA63~T9ghiMteMTO*p?e^Y{{QS_PIw zLA8X-OEJ$ZO-GiYz01;d;eywlTk}7$oV#FM4=hi&g)1vC&#p*ESE79@(+#)n>U41SHWI?OKbHSY^T_SJvw0Bp!E?n5n&U@pl#O~Z6xCh-9uI$M?yB8hZ zoAyQMhHcmQs<;mulKax3{b)6et_tV&XC6C%_8&Nz=l`Zva6jgyD4jZp4j)W=4xwwp z`9qn<51Y)_{{x4!p(R{Cf_WxJM~yp;~!Myv63RXCSt9=l!JjIaE6u%Rhjn!r3Ykq%FyJ$KSI;rxJ;cgI)p z0yhXurdz`0yO?LD(2=RMcN$%H+#6pNrn4b&Hytd}ZQ;s2%(FA-=)JUWre)Xos$myg z{}gA@$@}Qg{j@64RpHzN%wrFV^S}QgHZ+Ax4>M2Aro(e+&m(kAIA0d$|M*;P5O|bs z36~#Zo_U;(JVAS(r0Y+LrLi!N4T%aJoKLrfD^D@cK21lTp?&FRS!f6spJSeUo(@%M z^#WZL&b`Py9eard|I2h!xbzD1)T?y(HQH07Yjj%WUuQ%74La~9-4ZUp#XR#i9eIcL zzU#Ji{MAvgt_SMw2J7{K_vqjPx-DFJpLzBJI{Kl@_VMrg$W^f15H5bqJlUW_3u*NU zT@}uK+RL5wC-zydV6Q*^&*`Rc=?mtmFX?cT_IyRxde-Y-{%bbGzo7%)(k2 z(~%!&Z_8MZuj<``egCaF@S|zaPW(g%f2P~Qm0y@=f2E_pb=(|ZL%7&xp8SIj z{Yk68=&Eq;Z=IX*RqP*b;QyCy3YY$4o>F(=}B0v|5p_3g=e3i_iaKD{}+?Ds)r0 z$DemccfqF?o79ZE4whyhF!Lg|LCr+f@R-sbVInfJM-iobZAdn?L}8z zcGjQV-fW0PX#YNRQ@FG*^VEKHco^;3ziYkz)p`YI{mmcHZEzevkPbxYmT>tX=9z=( z$RWmheC0jV6rAx?UAS-<^TgqF@CdpsT!}Hy9@%kcd=)*44Zfr4hH&v1=E>o7=vZ1E zM^`&GO?wx674zJad&)G(*^zWxBi_!g&V{Zbl_CFC0ss@ zdFFIFa)#~R_{w`G8|uP^vzRB&rh`ekEnKnwdVKfZS^twAY1uWtik`~`-+6RHxOhJE zZ=^#xT8*RA zRZ+;@#D>_-wEq^mDO|dhdFnPgJRVLfPaXwT6VBhxJbniqm_WCL%M+PrCb@0R|Hz&0 zf^|JGK-Yx}1?Gv#bnq^^EnJ!6%I)JXJJnUN9Gyn{rqd1K;@!-XMLKj3t!DJ>9RF2U z!Cs+q_x2iW$7a(0S#(plbRYB7{dBn0wO)Tb4|EImc&a9xe~@|nAv*9d-4ZU(W}ca2 ztjAZ8M@+#PUwO-PUAQopdE!wz_!!+5t~}n!JL9YD6Wk#BB<-6=H-w87=E?bV=qXw~ zt!>6v)lNa*e`^jr!wq83(*Eb@rf}(b=BX+je!+2feC2tO4K?BXOU&ah(}7p$mT>u1 z=9$-Q_r_O|8XLT?({H~59uUZB3_}l-@eMrYXqWvG!P2p05d1@gY{zRPrJ)g3nCY=9_dHi!a@CDrxE`P~9 z(@e7v`HJ>_P1l7B-!M;nO9#KB+rpLf_iV`iKu24&??<{JT>Oc7@@G2q3!PTKvQQPy z{l+}@JMC}NP2tiX%u|2DX%+qp1?Bmht_kP=VIKdN4*W;Agv)A*Ym!^XUuKZIU|kRN z(cXT#E?gMQJh2EJT$FCRZ6E)Y#n_Pb(9y+d-x72~xVR+q7MoavrMmGANN(^ z+_KDLUfRDL-4re@&pfq4*LwW$irs=ezVfU@*M##cGmo!A2Yhr(xNLpzyEBkke>1C@ zf-Xl^r@d>?b>YIA%oA(T!L{kOvA+M-9PqOtyAB;)m-ekkH-wApGf!?nhc?tU<14ih z8>+&&0Q1ZM()-mF?M(-GPqoNc)D;4dLQW%#%CQpo) zm3eG8+P^#96fW(-JhkT(zWyKHiw&N=>6&mp!aTkY9oUy{377XvvmrB#j_gl+51{M9 zg#(!ex}6q<%E4^N9zsVCrG1Cd4dLS9%#%mZ=}?RXbtGLC&K<=(b~NojhHeU% zh9gg_)Uhb2@Nu*!PS=Fp|5Bs61!w$liuPPc*M##IF^^wN2S(GauJ!n;d%xW0m?y^2 z!OJ`DjIY|J;M{*}4qU+vvRBg4t7zX?x*=T5GEZKuZN^ujYuKQ!rK`fZ>zK!`r~Nn3 zP2tjwPTn0~rE=ULJdXCqv;3Y9;Soo*(|h$ zD|47YIx%oDG;Y#;x@S6v0mZQ;sm z%(FE*`a11U}!= z0qyyat_kNqVjlmP4m6DQ_^Q<{*!SO>0}D-qcIFd0@+s~8jIIk8K4+fzqT|l^D)=QE z+QOA4^Xyl2^lRGp4c!nfeyejczDj<_4MN}3>Ib?ioNF?@m1+(Hl%)` z!@ts=-{_if{&(i_HXZoGc5i&uatiwKcILpJ+#vH89r>H~{zKP=3;!}t{AbxUz6z?T zIRCeWD}$J4`{-yt?Hf!tgo}$z<@5if^@nA9_upCv7NeDit_tTCXC7OE_Af~{mz>Jy z|D~nakXo7!FGG8lrE9`@FZ1|vbYS^33$5kp@(OfjMLMz)?OmC!3l~;lo=E#x2(C)E zg)6Hu&#q2K*PwlC(hcEsaV<6^*QP^$TCGD@g>&mNkF7`ht-rJ5nqw)|WI>fSK!Zwc zNQXC~JpsBVoZpyvd=tk56H^0&7EcE@W!e%hZ^k^cIUU)8_HIeng$qICX_Xj)f(mX$ zw}mTPGtX{AN4KSY|DzkQwfq#fV?#1ThqkBH4s=yGwY(rw|&NzAh+)6r9CUxIEp?v1aCr?Me=8XY>FR%g&v;oO%V{)1fP9btPRD&RxYkHkS6Mvn(`)OII^bT|Al=pf8uxd3ikRFDAFzA@;%HmGw8^@w09<5?^&;Zg;{J!+(!rRr`y7n67%c> zbo4>m_mHt3Up2Y~`~F*V;9=9Cot#aF=FsX9x+1$0Ze{66!{2Xy2^+WQe*|45ww3m>x~(V&A1>9%m?6Xw}Z z>F8&)?{jhfZ+y;%;um!COFGn~)mL;?IQKR4So#|l{NK_|;nH`^Q{U6!A81dDt_i2} zKe8eI6CL=OZV8uvVV?Pwj{HV@e}~hm&Vnkm(V!B4(7`|Hws7Sy=GnjL=s#{-$Di+C zcfqy#BDY_+GUYdDk89K5o?e%u8*S~tN;H&=wqH-l@6^&tJUeMaBhuG-WgxT*5n5MwdkgBX>H~yKOJ6&_N+_S zIyU30{CaGNuTKXypj*P_4Vh;)q9Xy?yRqZ$_^Pf8`sZ)`yRZp2NNh?6H>2CamCc!F zx1gh2+U||7d_guego{I%C%2+QThnSAx+{ zM$#2ysL@`te@ zemEUCf^G?yW6U#0(vhR!wDKN}f~pG_j$xh{P6v;r+rpLOm}lc|Tk}6U!dp=t6;Cc`LlWr zw&Q2hfh64$E}z3ZGm?&++qGVQyytZb_IRo;TsWV3;sQE2if#*6Qp~d#8td^@^deJm z##g?J>4tD|H1p&obm&rAiFKxG+!*O9!r|Tf*gQm}jn~BiA|Zj<3Aev!O0rxPf`%Mmm_I+rpJ`%(FMy?v1aa zH?zTa3*8Vd-pV|A8yy-?t2|w`J^rtQ3QMMQw=;^}LHj4rP2ti+=BY_^_)gk009)Td z!-C2e(4gXz>A+odOSn9Rd1fjdndY|jAb6*{3)TuCT)3NgqDTktq1(ch8O*cyx@=E^ z=uB6^vTqjM5H8-wJb6DID$(izy6Uns33Cs!A@&gMf0%9xmu53h&7s4O(4KPF`XH$F z3eF;spWAJ49DkG!JVv*K%a1e9JV8gEG}hxQ?>tj*##43SLWOx^J{^3DZVOkQW}bbf zo0?j<(FUZ(x8&`sgetISic(cv2HdEIe$ zd{xs0{qwi}oqvNH#NVU?Z_zE`^4rWa@6eHVZTH4k-Z~rV!iD#kCl=7b_vyB9ALvLc&4Twwx-MM!iFx8@I`|9S7OwotJe&TFh3N0J zuT3|Ei+?ar{z-@aqSfDYx+)5}f7lTFm-hchH-$@TI$oko4Wh$+u=O1@{V1rKaDFiJ z_#$**QMx5uUW|Fh@vo;A7! zdpuPW&acTlz7`!=n{El0{me7#80+y>WL;Bm##i3;=(=!WeddV`=-`HQTez}OC-01} zvH@-o-I(@mLN|nqn=(&sMu#@1)fU=jd{ylf^!>Nyz?R$~7Nq?{=%#RKE9R-K>F_p= zyW=a*wrr>g=l{n%z8xJ1(JkTf_RKRo*zS$5B0I9dJCv>q7j|Nv*qILQLbru0VJmly zud=&xgXnIwZ+E&OT-<|sa!)$67p?Z5&hvlODwxOL{%aOR04=wOU)3s=%dvLSmE z9X*=%9YZ&Si^G{GkEKJ$(bnI9VWBFV8^JtwJncV$ZVH!9WS%++w!VYrWE7O=6uKsy zPcV<4N(WA(Tf*hj-MMxAWzKLHtm}a@Y42HdUAS;I^F)#ko$x(DD)w5oIF6Z;XE5Wx6?J@ z{2k2W6X?K1x+PqmWaqu{Rpw4^5E-Do1-dR=n9MwJ7ag2Jw{5$|SCy%3$WEi9(`nz` zbVImUWS+c-4$Tnfe|0Y#s=~RM%ww}?|9x~*xO6}BR7srw!w;~*^B`Rl&OgLF{xBVw zO}B*0bHu`vd4wB8%CvVbT^BAq$~^HH9ekW_r$wRi1RJtX($RUeuR=G3i}RT$pQ6*D zr&&`9(f;S@rf{i>-1-ih7f?{)7irH+bWJ$_GV}N=bl_FG1zX2o`876V zYINjv+WQ7w7cRWXJn&!B59z9K?jz>0k7<8{ZVHzcc5}V{r9SBvobkh-(w@)gnsEMe=J7A+z?XEZYdyXy zH`$Q+ijI6ud%vOU!i8^{C%&VD-*?;@U$srax&PK2_<OP5H9}AJo$^Z z8DE8dWrO;St_tUVXC7h88)b8>8fzf%RIIm?O&d53YS*6o6rAKD{_PIO0;KXx+a`og?ZdZ2Uew9tEO2f zuSRE9rz307-ZkmEaA7UxiM8oq+Rs8;xUvrO?7DPxJ=(WE-4HHrz&xGYkcH4jv7XM7brm~4L70#W1hpwg7b#zrYcRlmi z4YdD8IIWs2s8S9MDm9J{-$Z+Erfb6aTbRdhb=x}r0=Kyf*7bmJc|7w>o{rp3d+(s@ z!i5R0+&=yj6I}(%!AW#mxN;}+>;N4t(7wrZ!)0gvDc;3~=gO*lV`dHg2j?SfhkJ62f&G@SL7#ot0)1fD5^(0*t&dp;U ztI+=Wj=STlrY`88zxD6ZQ`{i+G#!41_B>11g!9iak3Vm_H@*r~+0YU$zrZ~6A{}{& z_P$Klg$u7(xodotc$FIjU!&W?l^XNx>vZ%D+V>{iu^gf;XfDV61dp@FT!ugMx#~b2&9$3hRmT>tK=9y3F$Y-?obGj~E zNPoeG#FuoiNwqO-H|>ec#gQhA0%jV?*+LI`jjrT69%7_apPzPjFiKe?~zy zg-gFMPyI@Vf1^FW(>39I+nrnUKmLciU|kRVNw>U3MSHWI?i;MOeY$q3^LmpZ!PFIC=c3`oDi?HZ+AxyD(3M>F}<^j*Ota$GdDF|8;l4a^VD5gXP4D zbnqm)EnGR7dG-`Kn&{bCe|)F*3f6e4AzVC-dGd5RbOx=?q^rWYv%0xn|6*r%3-+ zrZ7)UrNh%`&vd#rT^uI)yV(#g(t&&EmT-9n^US?;WG3xR&tjo2T)2;U;(j_s;>_9*RtjBW~-9%r6`Og6>reFMUcp{}e6P?A;o_^zldsXC8m(TZt3B)WFZTu;VsFy^x9FyD>22nzcj)lD zw5M*Y$5*v(!M^|29C*((XvY`Of%oZ_aQOq~nGfm6M;&*@SKg1=P!}#Vm?sv}!B6P6 zaOG3x+0V4i_$vB28+>2T4dLRK%#%$z^cAhXrmNcB@m1~{HpITA{om0|;nMfaQ$Nt* z7VY`bc5i%Da|-(LcILoO+#vol9r%TA373Cmp81WA{BGGbzVf!&P!}%z!94LN9sG-K z3s?STp8ZFh|D*r1!S^5C5H6~FaKVxsM2Grl)lXOZ@8R?R++a4u7NPx%(oNygV$4$> zI=ndTSt89sZ3#NRBpqLh4lGT#gv-k?&n!zv(q0z4%h7e=!t%@$E6~9e>9%lXCFbeu z$}B`zp?yBOAzWOQd2%&6v^uTUfYYkVg37Il1{GV2_ODGhg-d?ssdeb^x^7#?pJzRH z!MYw0&aclrz5yNBkZuW=H)5U%xNIN)k&Rsi%ic}sx^Q7r=84Vd;O2B&xUxkrch;Zm zmc4?#@DI#!^|_gcH9|XMRsF@cXzrjT-bwoVoy4_7u^=F z?5%S%zRE_pL3AJ5w=dlgF7C%XIgAeNPpbnQcgI&%UC=*&dk!4P4PsH+e-PaiE*;D~ zbqF0k)OK%t%;QJUff(HqE+5G}bChM*_$qQV8@$KRb>YHr=80qJ;BjdGaJWbTX|@5$FHvDQw6k=-8>W|1`QOTsob3>I^!3 zW|{@hS#(V}e>U@Yk`A0hw}i_hnP<}HvJg3s_MT7Ig$oxjPmH32DY`A3u3X55>_v3+ zV%j&FZU`4IVV=B{4)G^$&HoG=s=~R;n8(J@{>$m6aOn!>sVm*K#t&cRE?CzCW9gc3 zKFd6QH66HyZV8vKb>;T)pSjLeupGIb_TE6(g$p+_Pvq#}IJ)h!v;I_WVng<3I(iH3 zyOnMT7jI*p98ZVxT|46|b$hqqtp8Qv+#Sqg6KMZLx+z?m#5{GUacBJSfGIfRD^G#0 z3Fjv>kKaWHrqC_n^3+b=8DC|laf8To+Iu%$7cLZ;C+?wxGw625W_(q-mkrsObaWQ& zyN_-N7w>1DEYYC{9Cyc8>OnSCg>w%vk3CHLXVXpL(j4ZgM{K*s50}~CnM>D%^N%u* zKSl>0r(441C#>8xzREnw4I=YsZ-uT47v?ihJVgherrVa?PiIRC4c*iaSDz05rJ3hjTDZVH!PW1gzneF zA=9EGKhoZx=(=#>XXc4t=-{tCJI8<9Rj|*0mEU>|wzI#}(KhY-gKh{H|74#0t82af zg#PXp?D3TPhpr0e{$(EfkM^q>cww?BTpDC@J-$lynSvfa+)sN3(>3AzBFy89(t*Y3 zmT_l%RratUvp5}Dg7z*+*M$p9F;6T_2ba+{$#;WcQ_nsiM#zZUcO+H}BA zw`{w{SLJoskXe_GtVes-r|ZIn4VWi3q=OsH;Q7C870lyr|F;sLvm4XVO=#bybVInf z8S~`kGx+*{XbU!|E$OOoF33DKg!XSmH-$@Er`eF&h7NB_d;Uk)g!9`mkB8{M_H-*P z3gsQxklB%r45ht0(RJa%&dd|L(CJ{9g|={ISLWH>=;-dWZx6a5T-+0RS|#^FL523F zRfMhz=k{S9+n4t5M>k>X_$v)#Lu!9Id;sk^kgf^mqs-$6(Sd_qwvYdoyI{F|h^xVJ z=1@9v80|frt_v5AV4jHe?5sb*BYOpFJk=Ji9K}3)G#x#L_6?^S!o_2|xnBR0$8`(# z_$m~q)d;#OoI9R*>;&3>BHip-kFQE6u_1Lb9X^HjBBw2M_iVZ@Tu3rcoTF{VSHY2NXbV@)Wu85cj-F5ZE}$F2#ZgY)9bY9= z+#qxztuCUg!nuo?$41lsOX#NK-uS9?DH~Ga+z`$%_gqHTg!5yV$1kS?S6Ft9uUdA& z^-uXqI&&2r8B2S!bX~Y`HS@$Z;`|@HmJMy;%5}`M*VEA(Xy1)=L%5g|=l|q5ZVFliF6=6iG`MM`A+7U0XkBk zy_4y>aN#cI>BJNkf>Y_XaAg|v>~uPMH|;CZ4LYrg_pl*3gAUzGtC@6FI5&%V>^|Cm zzuVUF*F?d(9w@mRtk(w~pu-Q+o`>j~aQf%YOKds&2GWI|JEFM!8B;6UZle>(Vmy-nsELV=J8iM?u@Sjud$&eT&^+CyiP~n zpuKO>b>YHWIyd91#M|5;_zv9`uDr`UTc@M%(Y^(AL%Tb^D!$K#X)(|KNJoF7eLvHUpT+sV_zN47ztW-KX!Sc?70$Jp z$Nr%Ge~R;e^G`OE{-RTV)8T(;&%bm{IR78>cv{_yYreoBx+PrhW1i`!BZF!0B6M9i zU09S2iN)xkhi(g37H6Jaf{rdp`<8;!s=q# zg|*p`@YBI{=(ccWUFO;K=;->iZ-cJ&`q$_cob|W3VYk6?aw9qvpw-57RXDc^^Vp`w zdVJ;I%oLpQR8zRLIrG#Oba+eJ6Qpax`5~RWGro#%#SH>m(=FlhHq0~I(vkns-tFjm z$7Xz02(cltJssSEZVOj-WS$*LM|YxqJ3H=N=;V=f=qOqpO;?3;$1sl# zPqW}ZmTn4{j$@vR)8P@c=Xkm%oKK&?hWLqe;3T>wTt1n3<`g=TpuMNk>AENsPGdvj zbUJtj-4?E#$vk@&9X%UfMER2U4jP~P?CPb`4eS59hrhi7oI@u^(xG!{bsk+6&YjOZ zb^)AL{!u8Xrf@06Jar)*zKHf*OxJ|-qusf6D8?^w7pyCROX-$ySxnzdhW(MtXzv)h z?zX)Y6fS2&;tD!=CEXUTT*W*)mX2m=-_<=kOHspBu;)VYnqGtL+x0mHdAoMSAp?#OSqh8p1GZl z+(COM&~@X^_^L3G4T(u~@J_ldTp3`VEzr@)wC^r$Grnqc3i|$Ab6^TLNKU0g(`YrF zt_tVwW*#d#?vAhg_pqTUT$;f=buS&BNqc6|HR1eycHSFb#qZ|^ffC&kEx0=vH9Xs#Qzi+* z{`cvoaOnf)sSoM!N3`c-x&~XvU%tVH_(D4H3EdJdf66@b86EkY_I}~Aef-zm1=unGRKhjm<+)v$HuYa+h zy9IlE<^P3l3YUImp8Aar|4w__bggSWzRLf>hWMX!;4iu*T>hJR<{vupFYW!WKa zj;~@%aRdL-bW^yr4D-~obl6LKmZNKqd*iG8@@$B&KnGT&Tf*g)m}gd|BdgF}pJmth zs%{rt{}fiG6RXj|)#=TRDcd|OnWw=Yn!B5$Ztx=H=_fa(=Flh7R)nS(vcwTO%GwAE?n4( zd17lixDDMFu58OZ`#(Az-Hruch;9fMw`ZQ*fe!6RtD$t2w!VsJCpN@(rv1CnP2p0Q zd1_ZWyc_M=-EHgmtD#_B5A5M?uwEb7lMd`fw}i`kGtWfm$UZLH$G>-9SHW^!xUe7d z#4tLzKiw9t9Kbw#V9(C_6OHx?_WI*Hh;9fM4`!Y`gbp1_tHbDO&wBmK9nOZ>5wt%> zH-$?_GEW^vhmWQ`#~ADJRjpgF@4qz%hMNZM__1{0IJzZVjx*1Upd-h3+!4)j(No#rJB@A#7f)xNJcACMNvpHys&;pLl{=dau_Wz3 zhi(d&Mlw&GONY;+J?Go*jjw7>K|kKk9JqiR#7EJA6x|XoU&uUj5gobMvTJiA(8Vnr;hMGR(7=iSvJS3>$ox(+%O`70i=Y(xIzpHI}Z973cq4mJPA1Y5z5J zQ@C_3^VD^8_jd+pmLMZpkjB?{wZ`*xHOe{Y8oA$ z?zVOOdG2->tm^^ce35zl9y&0CZV8v~WuBSovVHtVX1NNMz4y^|;llmQ6D2zM0Noa@ zJlM;f^(XsKuVAly(T8c@Y`P&_oWnf%2puZZYHrth{j2s0_V_CIXt%*}>@nK^INkg| zSJxfTMAF5>Zfs`@_AX$<9(w^bmP4@y+j-Vl4|}j;ISp1+)L_HD0l|)9#~!TMgS~v7 z(Nhn5(6b-<&CHv(C4bIu-n=(E`C`jYeA`)`=Js{%&S?b<=e6m(UTH_VHb4A=Hf_A9O@Hx9J1;># z+Sf&2))p{d(WXmW)u!EE>8;na`Bs-U-8e&=)?H_5*}g6v0BC>8fg9Qay>4pLez&yg zOs{mxZEb$!9c|ilm!=i_y4?4)0xqxg>igP!%L8pX@PFF0$19!sP@8Z2i=1&$a0i|7g>0uk_YTZNBw|Hr@E8 zHm!T*HU6i+(hAsLYty~nXw!agwdqW+bjmwzexyg6Hf4E@|GD351zcX~)gQF^mVdSB zz>nIr$19!sNtdZsg5D-iudn>PQ{ zrc3COHH%bkuk=A(Wow8tx*T2Pfw`@hYg0!X@@uQqKcq)p%TN;?W` z^TUg1)5fCO^cPi{`5$L7tw3~fZQ5Kyn=VmOn|6Dpx0cf8TT5%xjmyYsW?!c(D+A2` zr+cOC<+S;|%4^epe%f@VS31RCn;#i~X>Q+C0Rd)Tm%E}i?ea>muB6SkRMw^gt7y|6 zuXJi4&*%1awyN3!?W$?hhU(h%U9YsGhBiOErZ#P?rA>d~X|%6%*47F{8?|Y39c{Wq zU2WR!mEKxUn{TbJO*d}9(z1P>uAx>S-79Txq|NWuSey21qD^OdrBj+}^CN?3T4mo9 ztQE-JOq+IjrB^rC=3825(}5;!+T)c@ZAtP~_I0*a+5+ubYtx1{+VowowBuK8et3vB zZEUMee<5kLeVwzNRvM%Crb~3trrloYtsS-b)=t`VqCYeM+3wb+)4kI6;oAIOBeZG1k=k^oS2|^sI-l@Aa#@+U1pA zZPn&mBDCqiaoV&;ou>USb-Y%*5*->URF@IQ@hS^-^@Hl6O3w$IY$_nNIu`_0j& zGriI&b1}a+eLlj0c?dw-G+&#}9j#5fywa-|X!9)#lYOKzMHc$B5UsJ2^q1d4AAfy; zLj6y~h7FZm|Jr?mg=GjELKlvvuw~=|pCD1U9Pj{P)_5sn&IX@hEF)OpxWBlsORKnu z{}nDDYiY~N*jJ#g`L||oqPjeeWyHiv4vPiP=Zy<%zOhTJr8qC*w+f3at3IkXEn+La zh!i34jM_VW0)&x8q?YT^dXShBhq`)PjFV!k>>%|rbXq}5tmYZQ!~`kpmfa^oG_671 zS#ibORJY@F43S(bN#)ih`2_f6N3s$HRi)|Ly2Ac1F) zZ-fH`pMi0YtE^GAwIcybBvh%rjg;6pc{wSt2`kh6_RY9Gp-JXgOEF%3VBF3#O2#y4&_VMd4wcNhn=pL*zS(`&FQgxEbNqFFXwtaq||$gZIW%qj<`i z#YB87!rRkcum%9_Zp4KRZ>6x<4WtRSZbQ-Op8Ts6&DQOR?{f~1qBu}}2g2Vke@axu zbvrpO`iwg)Wvp5&a~(7Em&4z#Q3}|TQPKPD)vOc;p6^0E?)i`7eAI{@V2dN~aOQMo6$rndyxFiAQqB2MQdq!IS=@2})vwu}8bj3s z?GJKTJk;Ww6p^45@L-Pq=FI!Cv;a{55bD`6vUeq=`nFWWv%;o#r#R65Fo%VRJCc8e zRLc7!2rZc@WfY-Z;Vwe@J-cSAn$U3+m98vXp&3yMgg+)pyCU|JXMAhXG>P#ziqE-l zm{l3rF2fH7k2t1O*?EGrAo;C#fY@R^BOkE+Br0*Y*ndrtHaigyJkvUi;=uMa4vUqn zcQg&?#vJ|84k2@B0n?84qZ@l3U>$=6f`YS}IJXO;L8AQ}YF!n&CynC3_VWm@8~cqmE;2nG zEBLZok+`gh8<+b^&<7MAJXDhQ4vh zY-Psq*95%3k6MuBDv}Mq0 zqN`r%O-cdNQ+%>1S-=pOo2=Nd z{KIh}xq?)u?F!2HOw^wE{Xc0>nIw5o@L-O<=lP`eR0;U_7pS}4+&66ag(kASL`7L$ zbH~LduV+sTq<@7)#z(!3RH|cmjd8jvo<--wp0MQf_69JV%G5CaZv++55WF^u}J8im?w$_>qo>FH66s_5b*b( zkmtGTv!NOc=su(L=eheO)DkQZnDtQc>%VIeC0_pvNuK+)Xixc$+Ixg{vr`<1{~zx}!uztzBZ?M|wRGdX z(Ui>{vG{QRIw}vu|AA`82Gn758mNg&#wW~39#6%A^gl_zGSCsb=Zs5AWh^=e_W(~m zq>QCF#5O(%mu=K&j3VwqT$r?5^4&%Ug;WxrgJWb8?{TsN0?OEZc@fdK%`kah3!E?H;B&jk@AVZUeudGS# zhTE-p(_ax!DS`%eIz~u)0^^9!0@4>nJvGbZV|@W?WGaSuyBeiffC-#0j&SzjsS_0a zE*bB*chFOc1LsSi_?bZs8Y|+Kk{lPNmy+TqGe=(vMNb7;Rr4bc;zH~-OQ{3+X-4L z@gSiWxk5*&uA@Av@f+Av@-4Z^XBhC^4=b`Hb;?LZ-sq3=Df%jLX}%DJ0^dm%5O|1D z)t{UJSR!*n^zwnzhH>v+0S%O_H&ZoGnkypSV|->cY8dEV3E@lKw{%nL|G?x6dO#c0 zR6BCOaHWXfuZZU`)i_0Q@bxmhr{poSBAyb$#f9}%rL^SLggTLJ(des&Uo;`BsU7Ox zcC-(38NmBc)G=v^R430WqQfOaMw`^~>@otaZjWl)^{Xu}EJ34NI$&PzuH)kdhC;jz zobQNP%UWm1lMg87!90Cp(L9UjLqSyEi453uDlCQss$ytcXNT1Pe+vnG=_BhA5aM(} z{W+!EUY*up=ABlEyeY*8FCk6<*iUenh&?|fvI!T|#}USHVMMSLR*){jhId8L7mrf^ zRodOy4b7ekY#f)Bx`{=nKz%uDW%0Edui)%X>a!)5Ji++_Z1D)l-vdq55(@7feyg)PbI7egDb!d-26$iGD;aY?oZ=^IMby()Hs5n&$XKnz9ZbkT7dbc`C zJ=`*0{Kml@6bGh9p!l<|qhl3u>o`)4zt<6BZE`Tz3@jgy(v$l{-cY1<6F4qz3Y{s% zUOdbLhhPCS^y>;eP%S&zCld9e))Mu<+F76kET4ppa?d1t2Tt_KXgPiI64t+f=?DvT zrb%^v()F*DNR;&CUCag>Ao&!m;;Ac1{4IlO(^R>@&~Ub00{(p(!V?N4tF}d4i03VP z{cdB}2GqsPu!QD}?ca;Dema?Jjo(3Du49MBl;uy<`FY37&9wc1_A?N^7-Kl5G^Uka6sNS8!xnuFgXOs*ZL^`4{%hZ`g$rPP6oxNn1uxri;Ub$6@i~e zSPZP+N{TW#_{$6u9kWr@;Ct{W zx*{Gd$Z&z-VHXf45&jYsKN0tBJ;j0lOA($G)Il|f_}THHYRBE--U8^)GXjM3dhT|i z@+q;rgs}9!PC1bjF;88#C0L#&=(>HH#S{vv9D-d4Uw3{mKb|EhM6b|Jh zH8}f~4ryb_RMIy4a6H-Rl9)jpLqdouMpUMO#JIs7&^zoB?bJB^LeG3Y%T6g~g ztr&EGtq8As*jq(8zik{BZ{F)5Pd}jxV3vOShZ<*;M@-p{s@%E)Y~+DqUJB1d5PF%&Pc<;+b*z4bV$Xc`Ip#UmM`DGW~k1O|?wD+3f^-APoE zYgnro#DfI_!+P+;3^rc@hS{Acoi@?2pGpJe(-5v{+2lecL89L&jtfhJq_k?ZcV!|Z z7PxoWD?Um&&Beu6cQ)f08N;~)s%W9WmC~w+-E46IPk z`@7_h0EEAeidwI&%KQTqG2cME`pB`2*ueLj2rv59MKw2ZBQD-NX_h$xoWI3cEHoMs z7oWOTwKHVB&9wA(3-5qay2MzSPdN4zIVBK9F+xnD~9xtP(e9{R5j-%OI4`UK1 z{5`}A?>xz3JRtmi4vPUHQE_#)YEI!iz#<82iglt!!N(IAT62iwccm&R|3m3b<)eC0 z99;ZEglEn;r1DLszYy=+^acyQf$@(Jp8a7{T}8W#;IK+*J0fNMv6&DAq8vBM*9mhR zSL7{^5%1{RqYTBt!9PK`+zVe-2{-r#K{W^$V){) z{%4pqz4$<0QFsA{=a>_cV>1uRf&7>u%$1})Rkx6r==cY#dF#ejT67L))?u1V~R%Ai^JoYj0F4?|g~%xDeQ%*8@2JiqCb0-}}V*#;6Zqm|v5K>NDM9 zA5wANaeg8vbT=c)9IT&X8j88GE=@EWZ6L|jx z6)kx;N#&zlh>PyMN8VL%|AIm>hZCF^oAwF~MUyRE@{qJNx&~r0+ho7f5 zQQFl*U`7*hdiO$n3vJWm)sP4cg|l2oX19yII@RmV=cUl1?6Z4O=MVj)|w zAj8@7o4-StOltF@c=dvvnO6Yf=R^4El6fo;hsO5H&v9{ht=@52Wk=Vhr!j2>x08@1 zp6?o+$gg(y1yIqVJkgAO!2E(lngzLw4j)x&VA05-JmNej*_V0ZGaR}jP4VMmm;-b>&MTms^HLA8YL@ylj5gP%6~yf9}=6p zzS7RlGANp8mG)ew0YP+Gtkw8OHm?!hTn_W@yN;g~fQ8kX~DsWur(@u&lb%0bp9U*9##S5cdV&&V?gPh-@%-TH)WWL9G}J-U9~CEW*p zq47Al@Op@@n)kGlQWIl+tV#a^*>XG%z8tgky>riBqZDyAKvi?TwqzSO5Xv+}_|e+d zBNTCSBed|T>Ipe;V~qD{EG0LJ_o*PhzWPZi;BJfs_AmZ7?(uHedjifkiRY7_Nb_$> z32Rd{{qsecu@nc+2XR>NOP1n)EFg`e3nmKaA$M_b1=S)YL1EXu^Pj5m)7}i#UaJzr z=CMHc<_OR4(^s{N;@1N43o{O}I2ZViuvooyy1a4QynBBF8IBV148v~Nke2|Jd0 zqL4g`fl{VcXsBYBCWGkX0`*&SSh(bT)Feeb<#!Zs(J}fu#lhwGMtJVijVeED>J!h`m5x+p(HQW)FP9cG zdsKphSG;vxa?bqgz4)t#4$uz`_-9{}{Qx~0D8axv@pCGG0cW+cv~Kl z!_E|nv;Sjjm%x7umlw|Fll%ke?9w(6JBoeDIr^Z${6U2IZ1ZLB&bW+6V^{zPnhk@o zDjC1dWi1KxM_AZ0T#DF4MPCU|L$UZJ>E<=1#f`&AJ=nqRu=r*a2F?={ zz76ZWzl9>~`~#o6j%%zuJq6N-V^%`H-!waX=HY1Bb*(R(835f!V1enA|CF)}`{i-p zjXC-lYcwMVP=2JWXI-qSgIGsld~-CO&5MEUqfz~(Wj(zor;EL;cD%kc4Po0)TjH=8mJV*-0Y zc2F2NKOU7Fp4L^hbYPl*_`%^x%$EY`CnCJ2P-%7`3Y5DL7cb6l8|NPvr<%J?!XnYB zD^yG8mdS|M@hQg|8b}|>VbKxQLNoaf5`CApp`7oCTOZ_at9G7Rdj}hYTO5)G}}h zu^&DIt(95&T{EpQ&O~dG*LEILI4{Eu$1IttyiKQ#iwoleq&j`+LT_{wYUr_d78}{2 zvCXp(pECSU)f&xggtHSno=`Nq5f>AG)|Gerfb4V7XzsjHT0c66u+HT)5jI?t$2s8o zJd9=iPpeu_Hy_PbSW(J^W`hM89(y>w8p33<8ja#TzFcI3F_3%#!l!MmS1ICt3pp;9 zZMY~dt8oNOR@tYpa@MTTOXVnrlYJ4Y^W3v%QFXxf7=&{?+xSzlVp@z=t}mY>Plc$iD(B^mcLeuS$gsD-rMbzB6+d zzH;6jBIuakRjk_BrL zw|1rtp$`xA-+(arite-0Cf1E;I%k1Uc@G>qfyA?fh|W^haJpEbbD(s_^Fb;XKt4^z z3?bh)uMpfG&-3(8^*PuS4Z1-Bsy}c|iYQ83%Wo4(CXX96oK_OtJi_9j(L?!eHRpaJ z7ML}96nk~R{Ui>H_wu}ymn@)&X)_jS^tjc()CO>W3wL*7`y@7`g0zdk5UMu+Z!SNv z3GvNVo+0FFB*k~!L~3u@hMFrE8?cvZ2EuPgxaOXux4*oFA@hG}f;5a=$$GkuJzNvC5s336&4Ae?%Z z21j^+@F}R}@~HAGfP|JY?m_%sU5lAk2I3rq#Vw5*dHE3MUM%vqPFofeL!h${;aP9z zF*gYo%=-~P{-z=uHG%sF5PlWEi46%L?nYc(zGIR+NdWR6#3Fq^9Z6JPf%OpL?<<^q zO>rQ8Du>0=*K5i1X|SR@jCt9)gJZ++LIgzhY35)SH-ohO2pLxCPO>=rbTriu%s)yZ zM7jYiR5{|+SNx7)jdGh_vmG($0R)ErKB0!T0~|;B3-PrsQ47!kP9R)vPbjG-a?W%T z@yo5&&7nAu-$^_*{gz)aPnHKBcmfy6f({V=sDSJrpbMm-veW|CdMZXNr?5zt&R3=Y z^o7$TvZQBT#k|MkloB2SgU@<8bq*s2^o27BSFbwcr6O)Siw0^r{N+d#`ocNPTAi;> z+~X0ju>g-^IFC{M*|yKAHs}rn1>1QF9Z(r@q@$)ELl(gaB@L*Nl=U@z5#ctoPeW%UMt>=Owg1V&qabdP1kTjI){bh1sAE(&j5D9X7FE75Wg+ zC$6IH`cKW80mO|t`uC;6p3(x)Bd+lRLJGOm;vkELT;$!b%K$1*W6cA7Ap;F&K706B zc?Y`dh!^D$+_OK>wb_PA+Cc=eXA$HV4;{98Q=O1)#3B{os zAS_I&DD8>aO`LAZZInDUyzeS12_4`Lajw76FOfIroucS9-9_m=`+{OA4*b8zrG>K5 z+UYIHVB`=^kVClHbkBPAeGZAEYOe6w_pm%b^?lleT%qcL_5VZo=)QEe;|wp;Bjc0i zPG=4dX#Wt!vpWryo0gn7{tGRKWE7Cs|AF?8ut-?U2$hpIxUtC0!IyA?0JO&(y?bZQ z_DTym9;2p0_6WN70Hl9H8i-CC#807P6=CDwsJ?Xe6FGvmli!}x?G<)+ix_h9ky60< zl+1$Jhx5T7FH#t|{tVS*w>hZYlQTcZ>I`|(jcpzP-~U1Q@|!BN75#1*e|{wod+)&Z zOccL?MLxPuV ze~pTk&n57T0b!TH5w7xSND^x%I4Rct~2Y%oPf90ZAOkn z5!dMvw^yzdhIp`mu;{mJmg@E#G6&9q1(r`=!9pyce@=uu9LjovdWhrCh4{^aZ5R%Y zpTO{e(GrVlYb_-=N?(fbl%ZOH{CN`icLnq6Mk%^Yza;Q!7%d!J0DfUzjz^S*6m{v4<;!}}NAQ~6G3F%&;#y*i7k z0qPe|;J1bhS~OEpZZ3fjP_o)jd1(}=UlOy97a?OXzcvG&+l_hpOE-2eqUwPErO@{A znJtvpCR$4)p5gcABozn#m*KDw^GSNVkbZclD+^G7&sr&}Dm@mIP7t`ysmDG|&}A=& zN)P?oaXVECq%WVq7uUBxQmsGw`Jt_~ZKc?&^e%x+g!E(jS>%ry$<1f}sCc;WjZNu* z@Bs)H*c|X9>!^VG!$AN`M0pK5^2(sq_;V zOJzb9c6ciISvP7D=w5}Z7C*S#X%?+La?X%Dm*vGyAbcR!C-_qKPNn*`s)(1}XJt4r zz8Z&xcU7f~X!_N!^X!C3fATz7R-GjwQ0s*2S9d zmny=>TI40O<^1@J2^0p36BK3*v$Kn`C1&p3Ya>2nVd1(|94KzYE?uG4I7PR)4wn{7 zUnJjmcA_6i1HtQJM#msO&4-F^%+Xh#FpQ1HK<|2JH)gXTM6qD4kGLm1{&$K4y&E8$ zn9@-tu4{<++q~apw;wFXaQK#=Dsg+G1lU{=TYLIaQh>Tnf=^YlWuVBP9Q2bP#XX8g*`K?>9=(X=sD^u5S7Mp*V1y z!t|2~VN!2&+B{Tp{L1O?^FT^lOP8p^L%0s{ZLcJ+FvHju^(WUk+m-4Erpxf*!4=9W z)p52%aa}(XTSo(?ha#NZ(a=E=H@8Rp(ayDRC=NvLKp4c16xJvspN-&-oMb^4E0HsO z3@rgn??^^*`caq9eJN}s^+eWA+&76iDh;D@K=IDJt;H^Ws&QA>1+^Z#P??QE)LO70 z!yD`63s9&xyYmd;kDQXfgVc|z9@)scCQ!R4s^~uTxoSn0T<(WC`ga4{B-5$`xqm}F z$CqZYDKIp*r57rC8T^Yp+ycvg$09r1UsIiR^~iXqmJ6Cw3&8T;D4zZCkEu#q+WH`# zn9H9L4BUBNgd0@e@JSIj^h5mW&;Dm94t$s4N})3o6mds?;-}fE{SSAR5g2^>078Ot z^h>&JJ+>&aMhg!oeSS**bLoKlg&>SpR+33UUSaM zJQ%C~JoqaczJcsR5Y9Daf@-zHjku7zl$7z5&iS?u#h7T-+&)Uht;0}*VPe1a6bG*V zf$*(v#~AJ4o$A67|8e!QY%o}m;d2igWh>h4!%_V3vvIE}4rCvJ@N|FOaz)&4B*B^I z`8A$@#RY7qIJ;!_YNbzX%z@gZj6%HZnq;=m3S1w}VetyNn-2y-C}0|c1)L#`?^DA- z`LS4FgyXr_+}4G8`YS#a!f6rXxI<($0u@ah(Bp>k1eOTIKi=5Jo(%Xt4h`g}@T+`w z4C>?|c@XvlP5wbO0p-V|qETB%?NJQaCLq3TSw(iR5GX$p;j(3X*k}UE4U-VxxuT|- zssYN&@RhS2_9@yOlTkcw^{a~n2hK-wROo4zBGT!am2nD(#ADkF$g85@-Z4ub+pxPu z(e0dyx{t13e~{up`DqBRI$0z`5jRgqJgEK8c!~q#|K!eEG;~&Z0ylwyA?+uFF9X*; z17W|cw9Sfg>rBM!kAB^a;=p%@$@^5!RNe8D~o zCU9az1Y6Gl?$1VDGyST`D_rol{O0iRU##_b4y_fipP=m7gxU|KtV+j8^QX+kiuU}P zJBCUE@#i6&*zpkEVC2KLX+GkiOD`XxIM6;C;j_-!9~5zyjIVD$l8toW=NF)Ou7C19 zSHvv~IWE-6l6?Q818CqP4vD>wjKF0N+@-=i{p>1%EdB+;$B=-Q-pwptoz4O$XcF6E zH0sW^kPr`@%mQ0Ll{_{PE z0vs+BVrP4;$QqYng--o9tqE-fU_HX3XVX_cU56)dF2@2DSHEG654>N&O^APeKc+OM zc_mi!#JD|t-2;ffiVO{GvKe^y)3YjSX0%yne} zpFINi<5Bf;ofOuUM&vGp#2x96`Jz1#KLO_x0}FY5%3#@q`a@2Rm(RU|&rifE#rAxu z3M)J^KID2K7XAYNlTiHNgI`pHux-YQe!ng4smLxr+k&DA<4#Od9@elGaeKoI7DEE_ zW!T4Kd!~pxwxQ-aL!`&K_mL(D-;NqGiuP5lX&85KT>Nn~nRgzbJ;{J0+HZTPD(&2f zdTQr;!`>%wJ{jTdyF=LM2wlXy3uk>XeXr9B0^@h1^of4?vy^(fWxUCbp)A+{x~E_r z5B+?|R((Oabq{f>?0UwV>&8(nK=r+-ywsK2Y*7cKb^8!+w78+{LW2bvPKoU4QtD#g zpTIwl-jcPI!oczaSd~ldUTM}W{0^e}?Aucp(gHwqgvE9%HpojEP@|MXSmfvZPWNaL zV02l_YjzMV7<@c+?}X;;Q9%K{|;Wo!h8_7 zokV=yf%eQ*g0pubeEsVG8Y|CgNaMKJV#r~BlmZx!8N&TCQY^Wzh8(y&g*rZu9ZFjf zBAe5Q?ki!ar)V~wK|CU7c{b++w##s*W4GnKnjq167Atc9pKy7&1InL6O?`WJSG_0m zc`Wkx!PWez5wJcTGe#Hk(R||T#vFamW`D581m0gj3z4}?s9c}*A}SJk^~E&};Ql2n z5mjc~ zI4rJQyjY%J0mEFFrw>`5rwvsFe7}jBoCDN1CR%P0TC*F?4f#K^s6@yX08_aeuozjMoUusT6znG?Jin0533zYD*{x%hrK$WyT9_JhWjXe@nNgi z6bGIoES7sRMLtOmPwIF;;wg4l(S!FJNeSTl|FGsc+%+_}SQ{VmWfSq^%%;=;5T2m$ zE#%ZLs<-L<3#;>F?Au9H8o2(5yg4>E?z2)AJ)7NVbi=P7G?%zO<{84#&r)nodUV}Q zAUML*sabuh7%2V(?Y)hd!{!3;jMl#qf3T7Fd&LVZ$vHaLM@l zj8=oFWnlXo6hD3~wxv=b%Ui^AEckJg;z0LzX!c-LTvG=99?a3t`%4O>1%U1z)N`vw zlUIsi7w6H^5nm0VC6qE z=pqM@{v$_)TZ^SVGwHEF<0lkM-UD50OjN&K4(za6^`2GdS>Mo^v zO!HTizMpZX7nKIb{tZKgme^w~TGXURywc8y z7SuSPL!{RAa5*VKoZR)aL$Op)vK9*dY_$j6Koj=eLK>FNh z^407A9ao;$gSc4CHjt0oK>9pbAV%M8h*H4z3!1*3CqrH-0pjPytmghhysxv&hw7Hr z+^AZcM_8~tm9jk4WjgY2f{$T^3p3cRGLXK&CfMH=W)GI9h48?}f@s#V=Bym8KnEaM z>{Ot5wqAGT8Jq^JOms*Bdp6*|FT!cpe|@Kjn+tJV2ze}-$VI(>@E%YY<(Io3vlS7j zkQ;F^WAjJ3vd|5RU=ibpuN@T=)}o02eW5p-+(I8Hwuz6|`D57d0S0u%QM&l6eA7`& zus~oK-T#@+m=4nR5-6S8yS#%+Lk}p4@bYP%YN&)9FeruiccJ2NiUa#)c+&XNs##Y` zX%xTI;$bEg2kMsrm|QI=&QO$_%A$0sJ^PrW0_K-PxYycQQHr=r#v?A4U=IrPFVDrr zw$F{4fscGX<%gUgbJF2`_c{f8P#LFJN$=(RKdjhlLJmS~Peagc+DsSRN#w%;SqjK>M0l;85eWRg_1z)ME}ux)5FiUaK%p{AYH|IwUV zb7789$0MRH@rTMl~7m5YSJ>SNbu4yv_3kZv&uCMa)2=?}y`1;V zfchO!QG?H(bxH&Ibwtx+Uwx9l2Lt-cS(8RKl>=6I4Jn;A@pYp0zcM30|IVmv(4+{j zt#(rvtiamZ%~=!)UBHZR_hPB4xv-1l0b+wbF|@ki_`}Gvv5VnG{K4D>)W*^kmFyqi zb~2TQF3=6Dv%1lEuZgoq&MS5JsC+3IbcOEN?aPgMt+bS_2O5ca&~+=tp)2%6xIme0 z%r?}?@EhXW2bN@`F7yS2h0(jEtfn-0cl5$)mR&Um4$Onw{~a~_RX6;tQW0bCO?*yS zdChzZLk}P*tSzt1CHdx}!K1SeD*ijhpU>-o{(UiH{=z7))Ar_mXmw&_C=0uR{{68? zqrKhbC>I{pjd}WkM~m5Ljlk&-Kuzx^9%`%9-)cdhU40shyrB;aMCrC4erGNclcj$TsYKD8aRwDxAYo<0dby_BNa)%p*X}pnZ@)1=?Mzc zmqD$5Yo$o13`4x8;AV?e!1zBl@$*wr4OHWrDIBFOnc;y{3y^&{!Vj9PWBw7I(Iw++ zAFlYDiUZq6aB=bQ_gtENU&}~TWchwPfEED4kHP{oXPnaP>yf1#%+tSLxpyor0%RYJ zJ?hK`7A--IY-7+sbJv}FR2s-Wmb4jNAQQH_HGaxqMa#nMEAp%W7>`-{WeZv#I2#zSu+9iW%y~U&Vv*K&Iw#xs6JI17)if{h@OZV z3_tp*yr6j!;z5634EVQnv#A@Cf*sx1}2c!O(Uw=jo;xv&!NR&fuO+3SvT&w5hiS(&T*k_0m+%|}In)@p2G2(*vJ0#AoMv;B?9O7I zzCo3xDo-DaMLJkNY5an98QR@tyEls31@bS)0ztZbn$z&Q6>X*LCZHz}6k7Dm+VrVtnVcwI zjdi_x;7|E`X6OxTut@W?yf2j^rnQJ42$;n-|Dh|aL%8?!ysGfUCF5m7nzLylbc6L= zTnHndK@X(&Dp@ulbg76`r!KvGEN~-V7!hkeU~dE(#Y13tnz!f01X?wqzJx83C+8NW z!ZrsPlG*p;z4VC`2HMA?jt!$~t42;k0^*r}2<-8I@B{`W^?qZ4Fx14c38lCEbKw+G z4s1{4sE~F<^2tq~#F#{4O8Qq_vC0&-I1fZ8D0>jG($JprmC&HtxfzvYe2`-M(%Xij zx1f^z^-anHnzxcp#Qs8C=NFZK--cDY)-WRAkfvmhZ&s9m_ApE~5KMx@45>D@_hyTT(0nO-P*3fd8(HWItlrCEVOAF@_63%`-!XZ3^^CViCyeo<=Nr7W`@`;#`d0hVZ7)qGa(26js0bh-Qu;vu1+FtGkTLgjv zZi2(bWUoszwgKx;qjYHA^By_K&AaIa9k|eCqFwT0hC8rD7{%~ zd4S#_k#Z3w3%C;G4~l^Dmxy~{e{Cx8iLnWEn=bPbLiH(9#Nfk3N$x9Hjqgi)s0LCO z;zH^uetF93t0)?gJW90)V7Z3%&~-d3M-xDK7Z#cLvXUx3^$;9Zc86SGZX4L1fr{F_ zD(E%8wOvO|`^P?J{-06a=Y~|19HFWpUaI^-d6kBnq}!x!C!Tj<>lqXVe@;*sLTVN3 zSYMHL+(NU>hsR333*zx7gSSzB{qkcfCuY2Z_@m$3vlj|nm*IX_db3yy8r^vp#Rs2k zvzVF%qTfTSt2Tbq{Hw=&9}DC3o_ig;@1uc6aVf;@yo3qvQPxL z{+PppZH45U5KpS;_k=7;u;X%5f>>h#%LxjD zVEqf!U%&8ewyF-&9vRPWJekF^K>L@Zv$87^x+O&^mAAb@61QG7h{E9GU-Rf$SQMmT zjo}S0Rk~JerQ*POf&%A9yi8P`(Q>>+d~L|j;Y1vK{5$eE>|^cM!&DKz(SyR*X7{;7 zbpzpLcxBg+wG`%r&*I|Zo&x0RaCR#hQ2ssYDfYdVDm*cNAkRcUEEDR4@L?Vp|1Zk7 z{$JzeiUBv`LW`kN+Cq9w&DM`7YM6gf6|7l5A$~;n8)E=C_0Jp@H#B^pImDy;f(4rW zsBsi+1`9G=vQa_ROR|4O@%Y>DV=W;3Hx3KIJEgP=^kYK5@5JSi&qe9Sgpc3Rb(~Cs zz&&?!in0L^nlI%)tXoo#AihchEYC(;5&0^rq7%~(EO5PaY4Bg1=RdI)ev_qv8|WD2 zLP%eEW?42e0L68QeA_`9qI&TbpG4jr6OV6^7ZriyLL&d{D*n8xgonVuw+VR;vvn4r zxR}U8;qRgSuu;kV271(=oHbHjwg#T(Kt;YQ#(YwW7;+}^KZG|ZN+_C3Jcz=T`EL;R}w~S98+odBFhxnxc8h*O# zh-R*7El6@$Jl`o+o;U*E4QOK3Wos+tA#}co&(6Bo7V%&KVR7fr@?No?y$}{DxbMsv zS_Bwhn8RY>?w2%I#rqXWgsF;;Tk@$%J8LFE*xM5NT$Bd3T}PmlqKVKu#ETo4_X5Tj zLtE9K4pOnqR6LPy?#%gpBCP_r^%5wp%bkZ!!9J(7q&Ay6xM3UfT|q zQmAdsz@}_}7Xmx}~LYygV7f}ZN5+RdyUr%(Fak6{ z@wf}w^0-QdfQE?A8!_z$wF*6<5e^tf6WM+@ye&gxln!oOc0QGcPC#H5K#)s5G8Uu| zU)}`eBDOW`Pvn64O%W|T>g{^v35`LBmpGEmnj2`3u#o4H6u+6ymYl(ajIZn@Qn|5H zp2369Z-zQ{F#OZUVyyTB2kc^Lapa6S8_z zp6`mZwPhl|WqWbpR|*5!TP5;1?s4NTimt4%R1nCq!yzLOvG0*C;bdsfDczDkW$2qh`=E#qG?fw0=xM zRx!@%FvMF7@5jb7V6_Z)tXR8@qS?`vIBI$oq`1sDj=;d}Zm1)4YjMhW9*i5iBYti7 zI<_wZ+$J!*^G5YlZ^hYzOA9e0rL0`Bq|(tnQ9-Bo+0zuo=HECjZi!O{^Dmp2TMYX(hi?}sLXzU*SdC6Ky51{8;jv-MGs_8WlG&Bs<| z;Sq3JhOhr=VO|KtQ!FT+rXMnj))5#z5aH#Si6@n+n+75Ny+I(0q=43gIV|qTzsxHL zaLIXPH;~_nupd1Dxrbn(BK|2_au3B}eR?GS2E+MBGK)-L{(YrOIi*gXVW?+L`yf6S z1ONR8R<=Roi08oAlF(sLS*}lx~DXpUjm! zECR-l!}^Wb*Ne>npiQjf$(YQ3Owg#C9OMA)C-4$tjZ!D@J~t?&n@DO&7x{$nIhqp; z!2-#FfbBrXZ(ipK?UTquu+OccKYXCi1|48BmhiFc_d4m~7l|)yA^c$wIsrl9g~k1Q zUge!qrXc>XXl?dtpc70*c=}sgveKreX^3AK9?R+jonSh`@3QYtQN&#`Uif@#HaY_R z|3vYh`ll*!%M8Rb4h&dI)j;er6X9k1QwJ#8Ju;qrWh5graNkB~!oHh075axFZHq!J zOaJp@%7OZ`5S}z}t12Ql%tqYRq-Ho(1H?yIEcV3fzsPfV0rA~1`2_>}=c1||i#Ms3 z-;DDRpVh3&0%`*2kFYr3Q&e;A!Z{xcT&t9qO>%($(Fh+Jw^rQ&79f7ENnJLWKo3}m z@bI}yO-ci~3C9Hn$TWy&%X&mV9-ii!itmm@r4S*12gLzq@zly<}EqA+lLB}%uLzjBKr?UM1- z)M3m+0>@Wzaj{3UCtl-%C64C_B_pM%2pXyet|m6=ui(X|KRYSPJp_hs+r##NDF=$L z;jc=poL?QCuSMyZIj>%zT7cr~(A=vK$>%H$6AbH7vhUnxr>G>bo4{<~_ZcWf%%DGv zc5L8+V*if+s85G&F4 zQ$b*HJcotM)sl~!em8DTK*=@7j##NA5O@>9jXYhVDGW?=%Xs0Ep>Y%k1}AcH@l?zh zuhk}N5~>=bTRMam0WNRmBaP2qDXKSZ2i+DDa+J?}~R+4Ww8o2sxNBcFmrrn_Sfye}gFQP79SM|`89b8%rGH1z?e&F&> z(#&j!`Pi?j^*2*8>R+PE%BK2(%exTHo>P*&erQ1#;^K?-8S;z?_`I7J5nc_E{14Jg zy(}qMotaO%^L<2c*n3cYR>#$<9byl`VJ>?(T>exZ2)!3o?eA9xF7tyL+4iBTdEs?O z(gy%a@8_Dt`uo{wPLMVn;GwM0_K18m8kkLT*r4DuR`RVuPbxVMqUKt~I?*@}eDxtj z4cjiLmMM&>h!1X6?;lzZV7ClE@7cvcVW^1nFpBpon#pkB_z{F{X~H5!+d#+xSb zSQBcmbMkq!PaVl8g}SG7f`A`-+h5PtL_pG>#^XJ)+d8(#2p;yE$0qmFXar8WNV|zJNYHfK=ZR0>MdTcj?K?;#lo5mQv3>foFn&n zwAJf+=D$iETm*+7@l|*=nZm&CbW~8$C}o&Zi2}<7>`|`c%$)(XFQVGkxz)bMLvWZ@ zw(I+jss&nKLg}!3H^(ZKuw6#{ZB$d{PJq={5I#MnOm{`xaFvX~CF$P;ig%aY4A7e7 zz7DN3E3*HJvA zwDmc~f#ElB97{7Xe+E1;-z2ThCc*1tyHR1__bset(V9~#^q%V_~%_-!=$ zE_(~}2B6-02l11mE3&nBVEA2x*YB$zqSRe?5ABBExh8MLQ&qtNW(hqJUeOq4Pn(jUCJ5YqdnecD6K0mUDqg8glC zbx~?zd4eX-mg+Cx&H`lr8?)ZME3Wx(m9GN{GsS_IhA5TYH4M+n%B6 zWlNv3Koscy9N~RuEbWvU8U8^$v)NG=-2vBS_+s%Xs--MPCW=RvEJ6Do@cad$WlugI zqbN7NMEvPKku5_3%@G#cfAXlVyKufj@$EZL|DbAs=C679BfhDr>Zs;7IM1D&mz@v> zn!hDFs56t|%N`|P?+u_t6Ws)biFJogZmJj<{*Gv1w^Ss)R=1!#|@AzZpHwD!NTy5Fe57nmr9L{42t9 zH7NZ4PekE@y{rR|H{Y= z9GB6N(ojXS!zT$mh;XyF6ct4`sKW&g=|j(%PAj5D5k=<=lj0}RkJr8s2yR)u*6fKQ z>C~f!c8hn_qc~7I2ZzNquGwCz5$2p&B& zeLHx-PUU&+`4Bf=D$Hij;K%bP@zaSRQ&mHXUjeL3>W!N6P7|;lv-Gh(w|6TBQVJ%) z2~=T(11ScKH=wS{(pY(89%yFr<#|G*yOPf)dP*~QA*^VJ&U;l=auFO(Af$h0^#{fm zM(O2a?z8DCXM7RF1HLb1^HrdGQH0M_3~#1X-h;SU{Ctvp?i%=Bj298x9+^W9q9x1! zt+N$JW$q7cVyH5pe2FB!hdfToI7SzF4JA?V!m#-)VgJ4P@5Qtx!kc90O)!u%e8irP}8HvYWKO0Xu_l?3p z`Z`>@zJ5a0V~Vt)E?Qk%q6z;x0mzRT`b(7$s=B$O9x9q|iX2T8K|E6*)vT%9%Io7Q zV*@PlAz&zTNWgv>ew5UFlTssRLsT{4{0lyB2kJLMJ$q_IsA48_V=NFZe3yL#P`?Ql z`O>TN?}`n#j63~yuqpxRo1%E-8U^UH@g}tf0UjV8TY8Yf!1-X5UNB-PTmOL z$d(X6Jf$UypN{io-WNFEiu4e+TRc5d)t^kQQTk+}fd#_A`8Md-XuUN70QP@#Zx)lLF4SN4+KMOFrfI6TOBG2<`YRwcLG>KzC&**I{YTS-QjM z=!j<4JQAi8Gr;jqSaxX+$v25EJQzEpV7#ZciPi_GO7P{0M z*$1KJW28El*e4o&IV2W0oa1v2;C4UK?kxN*zk*F$L92_v!0qvc16j-n-0qL?u4{eR zS2!SU8Gv|PT>riFVSv{bgh!bwsn!8KGXB@3Tx?|@$UP9nC#_n-+ze>94dS?{yQk+4 z5%@hAGm7r2t@)XlVF+uiftpn5_g+;#6|{Mw3gzi}vCyJ)>Eii1-} zSd4s3y7`T0Ij~I`pTz%X({}7WDi2jXVuDr(v|x+e=RLEJVC@lq*|yHIi9|8%tQ<<$(Y7|ZY{c|3M&+x(WSr$P@P zC_G!%sM&121PnN4a9lW0N{ZS~?A3%rniiG3W10mpqq%4lsvj>D%X=>{ec}TgI0S3Si60 zK>oR?X}-0V*DjxR9;!Nf@h&@&1sz~M7HM#@o>!adqR|cOx5!~JZNOlG{tpv~y@( zwjc-HVKEtm+4l!^@2a9j(-IQ4uj5MNAde} zDmGW%gC!R0-rfFA9t5E~EW@n&J!3StF?ujZKcw4j=5wGkEGPA+2cN{ABiU8}?+Yu? zwBNR3EQW%CU!Zu3 z77uc`q-c>l(qhF^I9xWxYDfwkE-79##ft`a2=4HknKy5D(_jDVXWqP#eCExYH?onu zR2T`EpesH(cUz?ej%6Dm?k991A0;@w7q2fZ$Kb)(xjylXU@>q7R%rdR+a0JT7z{Fe zderGfN&&8wSfkAO6;t|h2=@Kg!=70o*r%f8tMro=Wabfu_DX2INm@ZG`qTuepNu6GNnc7FI$TkCWqjk!lur}~&TmHXV0SW`H#zCIAURA)F%}Yp zfso2!(eK9@`L+u*z>R6T1LtoyrX|1>a0E4-DBdVqX@KP@s+#fQrK}1D!!evce^ilE zpb#%f0>|XYMR;Ql#=~)hOQ!!;xpcM@h(DYIUm=I_aFWA95t9^ghuS{0&&Kqf2t`6n^3o=K^bhrn5iv(u7{Kir~oYP$5E`;Q+K3}_DJVpM8 zA8%fg>%LMC`(=)cN&E4uKtTR0nBlm$f_fUbiWv;rx4bif{&K>@w%2^Tb>}rywXEid z(X?#f|8>;l*mA_@I*2I)GmM-0xirlHBj5(Y`7iyPqO`#+<1v-Go}oCf|0e1`TWVIO z#i8XE2Cuj6mmjEu0dO00O&j?>(?Z@$(%@0~H4$vB3L{T}%R>A6**@J;@%E0E1`AN4+7S^f$s z56J(3@Qj`h&=TWwiUt${AEI2Vg;zGydI9MX7SG%tnK|4qf53vr92q1VC1``?BdS_@<|K<<0{K57eEQ$u z!AcvvGCpF+E9N``^FO2b@TI0>in#3y;)@)4dr%yh|CRh|>;z!8tD_WY{Wp|8@OPz1 zii0O4!z+%bsg9mFzH_3B70S|41?>O9b%?{;j?T1-4E%}uhx)B#3n3T>1ctSjA^nX~ z8`m$C?mbsGm*QagencOPK?QMtOHrvbntTc& zaqov{(Gs^TUVOq6Mg*4dM4w>a$%>5I6WCekiRYTkHYt5f+NnkODT-BbmbbeN zSTb9)OvBZZhx8!3Y=3eHU!MTi^J1R0ZDM^Q$X-m*^{@?O9RqCFW1T)WxXyNup<`_R zh;P)x{x`5aAHqouL*o>J>GNZ`<*Zuyst8aXlXSPI?`2B}D8W$xRTcfOXcSQeoG*yz zuiiP?vB^=?k&n(K`dmSK}!9dT{PXcj2~ z%FFPWw$7GHC%FPq{B>djHsgSe4?=jy&lZ~$adVAL{O(mmS_uk+d9O)O7Nk4bqLd=+ zAuv#T{*%vlDGrRUh49?IONT1r*4l{sFB;00q(J#P92QIVy6JNRT~ik`Y%UcnZ;%)T z8IDQn+d|QAuZQBz{g$y+6i~lD!kx=kAEAgF8X$hAbTV5)fsvQtFYmbTwEyM zMGEOekNHO$QA70Qx~CLTQ$xfb9}j1i01SPjP5g^Jy`}VBYls3jL0AWhH`)ivRt8Al z7>lcNOY-keV?GuWsx8=eH2W!m?IGmHVVAzv*ef1JyM-}ys<|rM%jJ@Oy z9B+Z>(RLH(Dbj(V92X1JC7-%t---s7lLU6QSvy9GNMRBEmZ)N9&7*9p27b3fIQ0Gr zws#J_Vs6cGp>0bZI4#0C-Uf4g*?E|mHpt;YT*!My@{gqFlM>pZXj+G#s%l%?aa=4K zxmAuR0Lj~9x&1Fm>96RwBQ$2zlC5a-HrRNhKwx-Q?dPsc-km)Rb8Pu%G_(0Y@D8Xu zyn~dQgI-cJbVNye`5OPDx`Ep=e5G#<)oD+hL6=QXI(L z3t{c(F((vpeQ(4+Zk)v2A|N+`p?=SEpt0tA>W)5WA~$!Y_7wPS;cCQLGjjX9=oHu& zQ=-?*=1X2+xSa5Qz24^(wW}Xy@n6@~=O9jho**ngBt^x}Ax|U>;D~O>|5BJ20cQNK zO>pv(ysQ?RgHAslg0LS)tXicWZ9W+AftY<-;RnpF!%t})gm|lKAP(Ff%wcgr(WFel z2h9*Nd(uNu!loGY4cCTRRFxE-&Vv0=gnj5H{<(>lWmFrr!wAZ*(5838Fc|N5!*Eoz z==NtPN)MwBkZBYO7SUZ~qyY16MY!N) zDM8_i8*%Z-)%G0r55D<>O;6DG`U!}CF7!9^vw-vjhF6{!hcS+T zv?G$Vjol%eSEiLr_=%_@cyAsSO9bJ-Nx1eowM;%G416akFill#P?AP?`0whP%yD7O zPU+rZdI%|I3W`qod)PmUsQGWidt?n|Ck%n@|L`AHxTVWvNIfJ8=G`gZdh!4dFn=nR zTAD-%oz#?CZ3r3mOL24PLtFKtF#FQG`Q-Br&{9n_Pt#Q#+3YJ;(kRGq;w`<(g|bgW zRWB|&aDaeSpN@(iU$ve@MdU4x8HlIktX-4hKzIVf&vCx=GDX@s6Qx_U`^F{$ApIV=vh3ADlihM!rv;7hC^PVX4(6(xMn0LuUW%Jnl|9vMGl>%b;Z7y-*syvm7Zs%3|D1;>SB7}`PD^c`D$eNW(^);&yAN%cG z65>Wdh9?eMe*3LsK@01Wf7#hIBN-zQ(2*(!Np|a+tIK)?sUeTJW0sgN;cy;LCssMzW z;P5hj)8sHJ4ZL5^rNtMo3;WFbmJN_nMo2SKabW#M6xS}9;NuW^F+~?qs8TJO0f@f| zYjbr}zk3vhQDuuKP6#_{{ny*G6b5^rfYNm;sXuqEPb7w&eWkK%nfg>3SWi$GYe64R zu{wfoM-t+~`R}x2fbq$QZmi!>H9G`uM!a|Ii)~anFrL70M!Jr97DYj~YYR#bzW$g6 zQGx7R5w6(!_)|sPybba16<;vwg28ug;>WN?S`R4F9s)yyoVAXRp*Rpdg%F9JNYZwf z{FhLd(z=~^8T4S5a7TH(8$6sHT!m2mgcNX#-l);+M6Hh#3duv=C=i%^hDqx$rJtmN z_Ww{YcgpKww0NNRE-okvo4P8MHS8vQV&4sKn)?Zb!MGC?=Bt3X={_4I&ONB6P&}J$ zfZThrOwC%`Tt&NSAL74jZe_m~kb6H-LQh=^A1nB5k-JF(blnnDujy0|(E9+wJ1(TI zRn%J!qN|@Q^&LdRqZJR~@7*yUbrSgR?Ikd@r}(L_@&pRhK8(7j7mdEAWU;vr&%U%0 z3)BI(QxUFp>tu*5F6fU)Yskh^8L_c-A4P%MN61f3S18(nQbbYuI)&pX1`5l4jU#fv z>0=m~yO_3JRw)J^$D)d)U6@C4pftjw>)&me;<2t1B>X)ig~a$8ELuf#0Ig4wZenlS zWs6o>HuEX2UtF|gAOFrb@H!0>8v1|si8XmJMVGcUlsv) z{YEWLBw+YiY}|=&k#ChoYtCVYyA2a@Zl}780;cE=)<4@_$zeZ_IZBSR@FPyZ_zQe5 zK%6nAi6U=sW67&Oc$j?#%FFN(?RAxjbEc#C+>x``IU`{FMT9f5Xk!)arb`?bW_6Ub zAE_JZcbP+C=#-c0CXwAGOwtuTJK;Um0(`$h)=liWjaxN8E4nRLvCN~l>QtvVSo3SB zzu(S=@_9k%e=nx#O1^2wrbZzBb<{L3)ZSAm!InX~jGZ|%S7pHz;QS3D%`WJNR~)Pe z>u+*DU5FdXClO#h!C?@;h%lV>vGU#5W%zh(fp;+FYRC}T#eg9o zC#^1CLkd~FhKw(6*zaQ5-`oAgIuu5L2jT9gW~&YRJ;V!1@ysiP0dOCS{?vW1Tr`y6 zk<*?QxaxDd-~sB=&s?jDL|GqlTv$9t3MoR*mezZOqMCLqRl6OU$5^g0-{(vxEJ+f) z_?utypT_L`6I8O~!fh501J*x9*qJt+nIfpS;Th_lnD$y;w*mDrN!K|%T{WjVpL5qo zydAWT{_ep17g#{sh;wYo3v+|{@kz7&hiHFqdmKpqd1HLFTx|2zGSu!O7J2scK)-ZJUU<$yyd=>P?5ZSyJeBg zBHKHx@d5G)ao`t>g!fp;kue{b3j>AdKOo*?`h`)nPB0Q=IHS-kr!2p9!S(48xAl36?`!>)dV!Q+CZBC%-13OaM5SgoMp-q&-XBX zZSYWOpnX=9UN;N=JAz(P|ke(`+UEztUcY5}%qN9p5> zN<}Kly)y2c@Pj!(!1Np_zNB!pYPD|5iFoYjoF=LUXr2q<pgc&&!~S)_AsYiRwXmxejo{JK^T+;sK^zUKvnrNxQMRqlD99?SXu zS03hOfZ3Pfb8r0L$mNJG|9F1EVTh51-hub|xDug2J}LDujiZ?J$Mb{0cNQ=^2iCqo zJl{dcxXI4mLdSau4Aa_~TRDqZ9>w?v4KNfZ z-NHU+|1p{QOJM8?%9ONC>Yi65m#TA2r4aX2*f@vQ z5;*?{!Wr{c)>JC*mhrqp&uykSaNdC8jdPcdSHvv=h?f-}1W_DFUmD@fZv(0KjNZMB zckVrs(Go~sCZ4bTe#bi%Xfpr^5 zyDAZz@Pjb9761kk=J!fntLxZ3rSHfdSK907oih#q^L{uJcM68%-n0!o@z=9-G~b#21svbP`k6dK8jA+ zFdcA!(5^wCez_0NEt1&@$yNsaPAa^xI)9NXfNP7ur{Xf+F@V=BjgI>Ee zH$%-g*W&Bw!0F~FJEgl6RGK}Xija6HqK*74KTx^_m)5ln`MpK?S*)S){GGuhDXui_ z%z7w)}0pn293X6L_M2b2``}h=r;DwwUU77O(lJ?dpS#g|{vVs0);cc+= z*<-J~Qc5?pMZ9**2sG&UlG>{Nc8rdP2$Qyo zq&-2c_24lmxxCtBRU9;MEHP;8t%yf{vuIKF@duQ-L44dL^CJ(gaj3}seo++70aPE) zVIgv-6q1u3NHI^~kXW!ynEVR^)gw_!;bZlNDJ}HK_@TV-nV$qapNN{qj;keqh7@|; zI!RXLDdncBfajAD{@x^jO?n`%nSywo^UE0pC~g!G79&dL$#h83{x@dHqb8NMr5EHhBmfx~k~ z)3Sm1GZ9|BEg(Rtl2^tX8Xnjw4#b~@;w={cQ(qCc#UOsc?~a$^!1~$5b!11}&mU2p zw9(Ju(&COudbM{uz8^AK${B$^FoXlvkn#Fu>9 z-JEIxOE1IzQ?{xmSl0p+A9b$jA}S8_Ux;vU*p2T>UCegwYlySVlPC=Ik45Ph?nKpT zG7sWHcuwhFd%7u_un0xh{~Dkgx7Nkz#OS%hQSV=r92b+3p;SS$gyZ5d*Lih(+9=2= ztxAl~bavLhl#uc%{X}=xTpa?gn z>GD3v&71}x{Tj?tzIjbmBq~_6ti=?+%gy91B%r;-lXP(-B$Z$7mGNVR$HdbL1MMBC z>HOOwGGU=wwm4Lkb>79BGz(CF9m1XOmgt}~UB4c2&EJRGQXF_M!}h5Y;uLYm1}r&v z-d%`m0`)iII4PX*k0KtpiHi#pQ^}`Hs3ZIZAu%@kwa?D6E1vLyz9%8(%1Or*r+ore z&~Q6lHA>8hi1)jkewK;@?~@ST)1j@(efG$Bc%DY{sW_PZWE9_P^+-y^t(y@~Z2pTy z!NBBi;V!foIqQict=Y<@#h)>aRVUz#0wxH~%aV2{owDrPxU4YPExk>neoD9#3)?uq zeRV~xAqDZV12txf1LtM9*w;AK&~|Pom1CQ9g&oXO1J3V2B{yrwG*FbAcJjc0_PCUi zK;KpM`;SYCu^)aa(O5UaI``Nne^CX%^Icq8I9rIf!?GKTD)Xx zUKwxc-K8}m0N2SYGse#=4G0UJPBUnelSkNCJjG`wmv|j1$ z4!XO0ogiQ@&YXC`_ToU&aS-uOuU@q#jRaO7A{LMyT@gCI_ql)?co@Ymgbg*(J^_o4 zu$VmfzPv*MCAeIeC12Nn*v|u2Jr&`m&X)`Zaq|(xKM$FGl9mAUKFVS7OTWIEwr)L` zri&>vkcAU~;>So9b_sPhd0g3ljcO9M9>+plrG_*A0$6?m;R^xVFVM1~PMVWskh7is zF?Ce_J3*mKd%ZNDQl#ytI4)-WxK8d2u<>b_rD1q2)drB^G-i1l6Tv^J43x(N-OT&> zSa1|-0dREF$)7m{ydht+HaTdVFFCiZ5Vwt zgen5+U%(8DQ|kF#wzRmhgmY_?S;QAcKsv$;9+$nLRLCpiyBf^u*CgA)qEn3mr?WHI;~X}Nq+_LUYB>Ui37~K3_p0T?nlQ})W5iNS8ym{ z09-@7NWT$$VuYR#yp9F8BmJJr%L1s0^$xKK>|v`7 z?Yq+)K>535`D>z2rNmZL&0iW1Dk?U?t7^YdkP}`!FXr=<2RR*f4>P?x_KhEY0NUTj z+O~Z&Uwxk70pj~xFRj-Q&e%()l~HpSe~JdQ-=o0-~9pFKj-FG z*z_N6QewcJB*72&`c&mZwEn>S7YL{9iBjz!+Fs%YOH3iQR{&=J6-qb0^{X3I0za|- zHR3x4g)gKyke|TpuD|f>&rGCnyx}>-DXkJWb7eC? z3VTjnGFukZ-Bhp$@2LRdh287^gCGgzs)!w_brI)2Qs5}Vi-hOP(!eC(b^P+;R=l@WJe60EexCXCV|`-2Ti z^tdJ|uc z;9H7ix~dxJB``dta%=HiDh#A9i8{`FY|R!@z$9C#1is@w@Nx?(4aEKfrQ2rztRj-$ zz;Urwx9j|2XP`DF=z?wfQrUFA4elqK<(0qmU^(g5iOO|x(up+f8-)xvjee7 z0!)KTrGT|``Q|E%D)K(8c!jC}N|yt;wAk$BAVsmcJeL;yn@jipNAH{!selUZtlp=p zv4`Lgn>sV;9Mu4nu87i=dyG?4`cK5C1Xx#5ao}?$gey+@&L{~D)KuoU7=E)wrbm}B zNmuCVOjYQ?UIkUv9vyU(mH_OoikkM;=_wz#f>I3Cc$%QsNvXjs1dot7vO#@$Dg$w6 zbu1z7)slI%1R!}JYRQ&Mipxd&%oK!@(evA}-3%aj4TM*%Td1nK8*!mdS1EPK4x(Xs zO%zS;wsr_D3+iC0h4_}A`58Td;122gP6Szortm)kQpu zt`Bo&f#vl$ELsY^#@iU^yVS=ltqu-kt`6{=!0^%V@||T922F4@z#PM;cB7*os2B-i;7$v*c`)(v#-Kh?B=E zSs)1<78AmrMaA5TxJSmbT{%di4aoNp6yK6}yUKyJHbHaIWoj&y2D&#z>EZjM&nwC` z|3my!OuIIS8wD8-TDy^X!O(;DW+)yUv>=9x1J#=&JYCe=Q46`w)B(2UR3rQp#E-> z1}7peRA6fXu5GRj0=+Z4qDbzeX)-!9e+TSir|;>6tuBFQ(}RrRAMWvjFYe zW0n?Q$8f6*HL{t>&qWUoX}3xNGwBL8Gz?4qw9liq>>W@?`I6`4b^+%}5{uz#&r2a! z>4%0K9Z|{bshen^45;2oMqk5|)liAR&I$Y|@+HjzT4^xp1cms;)z?;p>1;hF&vYsSNS4u1q185p|XBTOs z0pj-FDBh#{1y)TUejkLx4)#~Yqzo2xKiZ6AGZ*llpy1KIUbH>aQDo;S#@AL^8lburvBL8Ni(|A76APRkl&I$#aigtQ*0MG{Z3%`F|*bvdynEk{l5?n z-E6Qa;+BC}oot8C$9H3 zsK%pH*3qKC#1Bp2FXznZ=kwZ{ei+Kn9oLi%CEz;3LiaOL#AWLHJBFiV3EL++PJ!$r zunKudAm|sf>myNc#QjceKm*YU3@5)T?h8`-z%>dL#Q!1rXJ@xmt*Bts`OtJl)Et4L zy*5bcB#uhFm(eI1*{q?88Xg%BKlg%7j6m!$32;+cm^M+~@!-53i<@$vddPCR4VT#I2_WmmdT(nkozChy)(NM^o)90mZ_+qqNX_Oec-eWi+uC@l@ANO zBn32IOJk%3dme@I@vo+-8fc3~^@hIvZqSMV$ETtA?jaxLbMerN`stWux90d;ngwVs z!$X1|H&$Ben1SM*?$=sOaNzn(vTkF~gk)Q(T9yRP;=;n1i&9)6dZh0QLSnMtVxMy@ zt{4=a`dCT{VsxL4g`Jvxww6)}^BffYHCBqcP8XU*=AvljKW;x(L_LTLM|w*4YSQz4 z3G-0Y7!>1GM6L4?|Gs75MT!H@7ofXeVee%{TCYgI7NNinpReN>7Lgy_xq{3j2Ujsa1XxW__E3%xzA@9Z?_7+P8MUs4 zJQl!u|BGc$?byz&)ZerO@keQQCQ%$1z7*jTFL&2h#N9H!YfW3W$N-8j+ zK~}EIIU+{>a}Z9r0L53JS@|R%FxIw;r|Hf& z3Ssd(Ao*&9@7EZ}8pH{{2Jw}3k|)v@0l{Us$K_r-m4-UjqIl0$9qBX<1eXw8DF|S9-tet+a zc^rI}4G4eP8L#$P5Eo;Er|@t#8262sA*IBhjM>mN)=eB2Cp=mx?>GVL<1x#S#rN5k zA7s%aAU-nrV<>inQIO$zciO4k9D5>)|2o^{3>63FCn3DBW^Lv>fObPN;>SJBSUeb* zPhgneCAN^2^xf>*X`*v8ADKes7&$Zwq~F5zh-W7b%d`qJZRN_uwx3SW8UgROaa3p$ zBliSU%1x5s9h3JDR6#~3R&_$|x6802$k~Au#7q4CgLNFxe>=jOed^b7yod|Mwvwyw z)OX&qgO~+&0CoL-)sJP{iC#kCxnpU0!218VUZKY|$$t{fuiu45t#S?=MkRsp1nzxn z4lyc4cJ@>1>)4Ibr#k&h-5lWi9z+io@5E+f=!?L;oYvyo>>a5RAUi?9xqB35S*7T9 z?L)kLC-%ZB55er`u+aO9r2Wl~haEu4%C*1ErW%0h2N5p)*9Dcc;F0lB;l z%~e`wKY}{Vec&P(aQi62w`aa&Q#R-JF^-G-eof|~D`2;rkhT1tOczI-$1&5Q4wt!o z0fwI-q+~}3{tZ+)f~J#PUf7vc@^4GGJN!;zeU3W(*i9HtYl^d*oqSjJi-$%duu4-`U@Nv-jPG3ooGX^BP0fPewL{p9d05{8>+ki7y!|G6-mk{+gF!(3TZEMK>(FAz?H!7^ z;Wny|_f`Ox0EmycZpHY$CPm(P2dmk3LM+?A0m|P+HDxP#GA%ev9?VikSj5HySoM1d zU%jz6RVl$uaQ5XXF}=-q3Iq4=qx7%Jz11fDfs7~KN~Gez{fAtMF#U<|O?WR!VNSdD zqm=rB-b~o@2vsDe)d^B6Vtb5uY}<=#DGscE!u@F>w6$+2L;sX#5S?A7@aw8z-sOZL zFZN|xDLI~DDQlvW>F*9U{yF}*drGirf)9WfDBQSE_a(GSl>Bu215A8CdSlfD?|O;& zqt$QNYz5SR#bME0sf0ZKp#bx1%(A9_Wwx{c`oAGD3--j@soruVFj({u7z*C|GG8@X z9bmtggjMLrcEsj08c`Hzev_`FN4~@vzmlmuFkh3%f9`WHyDnC0uGey0T%E0>{6-WoUrzG$Ig;s&r9()> zr?UT{3sWGzh-Lg&<{y>!8K^_N-^0P|HvqFwV7TTZT~YOoD+|`>sOyP*+ZfoNHIc91 z{=Ta^7;Dak`u*<|V0%wMe7{5<{p`AZlhR@jf#F-puUAmNjPpJ_=qN3YI<8ucT61vK z!n1TK+IK;joxeGt%eGogpu#7z@mhdj{B#NxEO(%AHpl>(pbGyj5<>M?PQ(_+wJ2ag%&@ zfDeIuJWUAyQ;Hfy7nOebIiw5yU0h`u+ysa2JaIJO}(EJaA(gRxBebU?4G@52MpxXXVZds`y zFgyU^f`jIaqA;lS$aq8sr`b@Y9 z1?(m;oDn$i=P4|V*!DkBdiTXfy(tdFu7o9SF0$F@Aum&9%#iIuJ4Okx>Qykq?$iB! zUQBgkiq5auAhtyXX1ywAsO3H26IQfT!xDBUkGeps1pKa!aL=|`SWThly)qt@vXWU$ z#&0n&Q7f7MYf9b?UrZ*1lA<-htTfve#FYtgQ2{a23z5!-=I=PJ6 z`g$-y*RysQTR;QjgHerr{v``l!x?Wxe9b8n+hhf{H^gQwre97)X-y-PuIu)TN8BhN zERHI;&u8<`-WW5)&iT!z9^ku)!{U^_Q9k`?2;nJ$v7Hn$WjpyvpCTmgw1;LoCFX2` z`p1Yf*KK_v$pnND#(8b#}%)w3z7QKjziF0SePY5=>B`T`Db*#KT zgrCdS3Uy5lD13nG0-vTe!sTbiupb@7^=%N(IwX|Q6L^oXC}bt8vDtBQ6vNS${O;`G ziRi4d~c3wi<2!28Xj{K1e!GU-8R-w!1F!`hi)qQT~TYX za9lY0TS_fXA7ifA7fnX(5vu5)m%yMnep>)DB|!3ie8v;IoKm?tw*DwRMt5QhEf4rT zfKPiuDU1AQ2K0&kFU;ZWn(&_H0E)}-n{EGXRx0ioh%J92rI({EA3O*ZOuToVMPEU2 z;9$gC#f)PO0&dH&cTBEvielFgE-sc{Ci%o@hN7O$#gFz-GMI;9hL}>p+;swW5628+ z*M+F&FprFfr&=pgMPS)Sp!nsjHr3d-jwJrtn$=|W(^z2ZQ84VIP&)kn+_y??G}c6Z zsK_rx-YB6RVH8LT{D1{&v{|X-uty+1wcEWF6bGu0M);Yhr^O_d>m@OyP?uor81`RsD0?fT=Mo5aD4(#62{MvVzbh3 z+_(|aUH)2!d7D7?NX{~{$se?tZsb`eVsWnv6=7~ASoBG#(k4n#XX$YOFG9My+efSX z^T}AR&oRG!LpZi6s3awIjh22-A@px7O>@~XUTK{EA5`)-Yc34d0Lw`VJmWCqsw%1$ zEIOv5s!<0D(BTY*+{XJbej<7IyjTBIvzEk3g=EhLW z-eVgT1p7S=^Uof>UKQ#zPv;yIDkRIB^g!|%nB&;Cv(uHfdJq>1k%MVN==&TAGf}kH zfN)iK**c5kqNDyqd71&1$B+pqY#zC+RsXB};U3_XW;SY@8glbF7Hkv{7W<8kldB3@ z>~kk`3%`ztsqp7HDG z^FCkTN=)&;ynw&x1N6rP-LsiLSX35j?plQz94oYPN5eo^jb%SraBHMeC-WMP3lp+Q z+P^5Ri>xJlUeb=j}|x zMp9Y!$@J$7*$M~-0YRa4`Rm`}FSPS9un7w|^05!w34k#WPv#~11qN~Xc;*j)v?&3} zySD&eKfoABL@ikk#i*8-Zp6irf9;bGrh(N@!YqBKC9nk+6k$n5Jhf(dX47B$yynpz_$vkpO#Tvwk7|5OabW{`3c;*GA#ny|6 zM{6cCZiAt}gz$e4x3Og&r~GBaQwKhh{W7C~u-K}7Y^I2c{R+<_{tB-o4-+8&Rn(T; z^jnHjDZ@363)v4#ai8fSyr%?WaRluQDXa&5EX#QvGcT?3f;oJ^_zW!W@TJe09&$C^ zz$|kgHy%jK0~>!6;lP)hRclALjBlASg;@z8{VfzcZ=i+Y}&e8&73&~Nh~p6{x_Y7fl6hs&}9PSt8tf1gm9 zc>_-q*zXO*CnyZH9&dN3%!lIv$AxFZrML#0DDxk3NUU@GNv8dkz(=_MGd1QItvE2B zpiH?Cmn4N{p;piJ7|T0!e_bq<1hPLt$=%zfdspdZrTHmJ4w>1Mbq4VK8Nz2O4KYy# z&>0>Xul``p5Q>9ge~#is2m9|(#H}xQZwOLx?j-=vU!wf?+auUsFz5Lzj*B}R6q89y z(~JU1g0oIpcD+$bu)ju4!RO{OIs(PtAbjw13pO`H0R}H$_Gtf+v_0v9?}r@PrsBmk-T6E_*)#-9|ALyf-k2StlwkXc z_}tcmhf*Av{te;#eR{HZ1@xugUCMu5U^_{G?=<=^*dVJH96$Ir;~#h69SHDe zexmm3eTS%qUEnXoFE8Kgq*{RNGCU;o)Kpoy==x0@N%jm>hv+jD2EuES_?hT#z27Us zW^EE5jtdLjW-}s?Uf{4WlB^$A(R0Nfgv6`|gXEb5I4>sg=LIGPs#XYA9qQg`c1yHO zV0@M&c-&ho_s>nGCYr1$ed4dZ@rWA*0>c*@uKrd95bW7d+P-*jPbv*$_e1zftpk-% z3Axmi9r2m#Pq5RU;L9K^3UkQkkXz^bBi7Oa{h1s|(2ZJ+6k?^9d?ItA67z_n%s{}e zZ_0&u&$ZXtS{JyUn<${GQSBBfC5|4Saub9Ou+l!KNevIf*0iqbcbsnnWnVTTnzEHAz52f92j1l z!=fS1oatn^M@|bmoDG+s!1NNREMs`JBT6CGl8Cp`Wo5G(P`wnwoksm;D=1)$<`2XT zUyHGoA;pb?43`tD3|F+<4M{xqb22K^Q!@cvk+Ala)b}Qx@C>CY7GTeD~ z%a)36XBiYvy6WmpaWL#LIPkhIhlS|=Qs2__0ToR>4v7J0tEo2TjRGdH5#4`QDl zZRNO_Wz&3l&j2_cK|C(@G-8KDpHbl^2~czoSH3w^7m$23scC#Hv1Tp2p-KssF(_SP z;tLi#0Dg}}_~yx?ObHOgE8|tqNDK#Zk3&CXX|WoLa@%+g3(oR3ZGi%1#r5mA7F5`)vc&Rz3>xsm1oQQ3O^#8sSwn|EC(rnrVoKww~Jq>uD4a7UL#{ z%j-M%Y371@E-iJ}=h&WO5zinrIx9sOscjy-74+<` z97XfaN`0j$_Q?25p~@191M63yhQX2)n@A5JT32#NJXc@^_tt^(t1#hm;8&m1&zjYk zQoEE>jz>^-7zH`WyluPBsdoDso=JD$njc$3G2ceJR{DES61fcFH&`{}7$hvAtZ}%! z2@MvXB(VpAv~{J}J@i>`rvo(yXQZ*sKcIUY!l@q}cBN}f>xehVg3z;Utcr^fu24zNBEGj#dulZp-cB*cpj+B=&n0>;bm zr)FDJM$M5-x|lu7dS8l|N^jr~-i!+ROChSbQQ#ILNp4Bd(}N)f8XNdR5a`_!Umq(~ zc5USfgq=xJ-_BGrW*h3f7-~|jdCg7~EgB`=+f9!o7D++Tz_~5h!T~zkLvT0+mP_BB z76v5Wj?%}gwqhn6q^&zRF2<+D%f2sgozx0`+d;2cTvN-}iNdjK{ZiJ^Ax~eRgVGpr)?D2>3Ek@7+faU}R?;`tz;i?#xb1&kf z8r>gB#ewYmkiNr7M7CZ;^;k4e=X8#(60Y-ppwZiz8dcW^$K2m?n%GBgIA06Bh|*P|N$Z``9GH z>3$Z~j0H(5HIO`mjC6JgX8R4*!p(LA+pzjU2tNb^EWe56rsw&rT3_pL zAztM3KM!er7}>SAU@8^D-})Yxyp8(LcFMqt0^#qVqM|qUs5UeM?_!Ql4XXPb8Y2mC zZq?I-x!*uFmxs#>WU`F1(+!T8d#K{k*O&6`N)R{S$6~Lxo;RP?A9()&;jnqTR6Bwm z8DDYsn(DQJhbTV8k#o<+11FGeA`J}7NZK&nOVHr0E(c*#buMy6DsUh=gptf$r#Y1;n!P)`H z{s!fp;X^a18j!bmIW8Wa@lNhPApBcQ`ehrE>HLWo({$B(tzttNDE|(#Xr>=R?(vdr z?=fw&k<9-CxoQ8vQNegc3c0kLyeaXKBf9C8x7lb-!M4lrR{eApc^#iHoH(rpWf3s_ zGinX}Q%X&ym+b<-pxRFBj?|)R!Bv;xBNv-7qYVAx`ikN&epc*3#lctqhOoET)e95` zar1XFAJOj?i?_EiX`uKI9vKsV1*Is$9s+|sDz&>LV?H=CKRHXplyz(#2G!PITw2KT zTDtd%hTQA@=8!mUSccDPN~1~UF4D7$j4V`#Q6MN3_;54%j)z=pyB6_s&Z5mJ4%8Ns z`BU->>#CdBw8L2do8)0GMLg}rM9{zUfl6h~$CNb9soR%z@zv;(rWWDGUV9mJCmJ2)YdZ$pol|neMvSUgTXF>RVdbBD)=;Fz+h!lVCUPMt&=n^RXC2rAViUXk$ z7Tp6+WwLwDl9(mclEzd4wM!vfVt1qGN(rVvlKFw1u$EIP4AeG|4yMP6g}WCs8A&%u zf|2^`)mqm1K<$8JzG&!npSiox0842uE!N*N!N(ylgKDPV4^UY(uZ-{Buw*c;5OBLJ z>hZ6-cUeeee${CRTRBt}z2GqOX2Dr0kMQgg5$q>~D(Nersv>)z^0+(LZ%oi_`8HNH ze>*CY&R}0hn%T}oY6MLG6SY@A?5AFURzm#Ff>X0-{ekWXi;rGkP<_rKSaen99Va*! za?%3rtDvI0p2PB14SD;tD&p=n)!42NkiQy-#nzU7nJD4GG~L=i^0Orx(7!rr^837x z!O%h0KvdPruOh!+3hWQU3|Y72QXSXQ)Ij`8ok?uqQbk5Vh6DEbtCqd?np|9H^e?${ zKp)Z!uZ0@!-ap}_y#`e=)aJP8m@$rrd|(7%f-Yci-YrT7XC2Hia!x_{sR9@Qb+HWX zk2&L%ET(#hU;KL1LU9-Z^$|X7-K7fTyAc;BwEb7UF#uzrK{DS;KR1GfeV`GRV62nn zjY)pV1uVP~3u*Yj^=b=`xOnx?L45jzanKOiGN+A?iL*7rLIQpl;IC1^FlbC>sT@nm zQ0~(wQzTk%!qQXnjz3LX4&y+E=OtaRDjnqrLGhK}2GeN}20{~#3Y#BFDLLr2O<+^3 z%R|jUP9PWsazb+w$+atOsJ5cqZY8scls5zZ+cXm5kk`EP|W*9>fbTMi4S|CYj!rH5==@aa`P5RK5lX)FvtL%Fyhy zqm`OCx}&0vOXAH02WIy`^tQ3wcttv}C*ne$qioIuaw9B6^pX6X^nARl7m;MIlogh| z9b(BvWT16#RFL;zAz_ve}qdNud+%hK{J5#7z<;~vZf+z6bK4VKv~Veh6s}n zF#U!2nH5PbC=LuCi16?QIaC(KFo@&A!{$<0ReG@QDS_BRREXP^$t80RMlEBj&kdu> zf#E~YIqwBm9>AiQhH`1`1yVaF~22oP402z5fP{)Q{#V!oF}RMNil5*JbGPJ1NXdkHB9Mna=;6CK7sp|!e#Pp55oU} zJc~J!^da5bAdl4FyH5kRMJ8fHiVTuspV3369)!f<>srYH8({Y&tfA+iRdsgJIvKU} z&MHNPP%Bk$3X0|%Ss+EJwdQYPsz^Dd#UWMX#ux>H!ta&Xe6k!|C%pcL<6`AuI{DNG zaC<8M<+Ua$wkdtF$Y3MGm`2rvJ2UzI6&P=V!`b*B#rG>UaYkX8t|@uhSOQu{W0AFA zZS%RqVw%Q(PGQ7sIkXPedpfGxQ6;-gDZ(w|tL(okQXJSl1I1sTgvU$Z7q!g9q6c;D zE<4-6^I4cwz3yk(MnN_&Nn;yf;<7JYXd%G$7%aqZa&=}cLE1JO@ukHrji@+qeGbCw zo7ZMbco5gmMf~awEAy1Vpd&2yJFM}!XX==T8Gim=M<+O7{d`1^oqcnUmI~?v7a+dA z@$Y#Q2hJlbY9{xPcW5AsYa!1fd~)-bDq`%YrQy6R+Z65QSdNR&j1&209@zCom|@(S zF*lVA9>m2?!SOQRfcuN(EXmuNC|RukVi{YOjgW5`fb+5hvn=huLF!%aZv6h~ZLL7&{lU9EmKRmAwcP2hy*{k)t2-U1_O)12HZ12C`7#7(bW^q$fC7sknX>So{a-?%0TUmfK@H z5XmLDTR!q+hTSnN@jVypRGc`!l!UpJd*2DCYxv2 zPHa6pDZF{+N?Il`ouKdo)z9dBL8*#!2WrZ;YbOsq0M~b723Ixvc_oACKg_T%ceFeQ z0^fI$ZfASq)1;_N^sxvxL7>##6D@2x2Tb3MaP6;GnWxX0zK8TK3!)WlQS5B7QFZ zG@}*}U52ZUujEw39fwdn>{k>$atlO1OpFwLWnW0DCuzKOF;>YGMGjb8`? zU6nuA`A|i%E0yD7oqgBY!9bw+5rlU;OZv<*=A)=6$?kMhML_an2>(3wGfvU(Avj#q zk1oe%A28|1QQGlvg?cS|0`c41CuLAAK=hLw7D^>b_v~?`J(^P}>Dp^zJ3zp387_Vz z&s(J$_B0ePP(A()#ewLjQE~ITQkZ2gS%{uNWdFlufeE7m=`KD{98+|U4I#1vMc&3c zi#f)8lmgz}d#fP6&K{5SRl+M_m!X{myvm9L44E- z$;1x_THizsE8_R6cIeEvFvGaF`+1ZJXnh+qIP%S(K#PQ`cn}wF_N^tK@dIw(L0uY0 zIiF>Q^)62l_O2wcAR5=N=Rx7-Ya3?TBG=r*wD`*TRX13S0!e@s>b9~2lseh(qx$(( zq!9A_K8Z3u;E-;=&8xDqhKJ-Aq_<|oQY9D+3@0c&F#1rdIw9wLgnGj^N+BcY8YA*C z>dh#eP372_o?x_L?+K;>82*$@8T2}f;2D?cCv}q~FiQuEUad~s0v7xk!kY_bd#*Im z@*MFSQzmVvI57PMhsBh;BjhU}@Jo3yP4}k#FqIj9iJA`Oeltud!S)LAu=|T|P#h@# znv7`XnCQA>nh^DGFvr8g4VdKv+RLzQM~;7#0vuixZ&h+R4Lbns-xB>S;-1lLj3ONP z4uyj%4`%0sfblYXztkudD_!roxM=Yo${7Q^|9}a`1s!~X@#c>_MK~HIr5B+$kBfZ5 zLaU}MR{gjh#6?Y+TRad6jQ@-}9yO4(r)W^a`UQ2k1K+V95DfWOgo7UDQUxS5-w>a* zr1&RnzfmACoJ0NCXFj52ZTcO3^K4S=YI?XO{0HV=Jf&KcB5C-Ec=XjFmnaTIm*M*2 zmo!D(`3uDhCtF8S9DJ4E92U(DA~OB@Ce3C};296sFQ!?5@>+yL-**g9N^m1Ce(AED zuW^C#0?#0(ZMv3ebzu=vS)KhuncWB0>ty(AsLK8GA}$OdcU>>h$ikj1C^}OviduI88>Ie(b4#_`~T3|>6(4*5ndkY>+(ed$qH9Y5Glb66}*;$2(QVLo2@fIyP*)` z6~8uNrxk$h1coa@|HsvR2f8)>aU6eoZxK8FS+P?ycFYDv%!V3Kqp@R0DXCF06FVqU zGpgLw3|dlDqg7&**s+5mcI?y)RetB3Cr@(T-~RFQdwoCObDkvkInOyc_vYRiW755y zmsT>}2hH3nVb}F!w|OG#; z>Qg)SUPfQDm7PoWzV`=rzh$PksH|(YD1EcNbJ*z#zn&>CbMk91^d3%h{Z74a z_VNScF1O$3`2w9%|6U7^7N_8b$p*)_Jn~3;H+rsbVD>U%*uaq4_BD5MLsJ^})xfxa z>>sZRZ8Wv>3$%|I7`JuFs;G@SO@ohH^phJFIcW#pCg?t<9MRZR7mu=E}2hi8rW?-y!zjp2ZRoA)J-i5wOA7-A> z8s{#KH7gUE+W7&Wx%=&B_v_ic?bOa^r)JK@Uug4gXFU}A=f?YQ@;KK&dMUT67g`?% zSgSw&hI0bckGrtF8Fl$h=jrPQJ;#TeS7q-XCp#;*?ho!@>M!_DcGes{$E~vS2b}uy zL$N|vb~H=WnflKS=n1})IWnW4IP1LLc{FTx-newe0roT1tNG5RtZv-adBJph!_@m< zJ?qQPfv;!yE}aef*LZp+ese=|SL;}GJ`U?^on{Z97xmpbU%Wws2Bt4+|HQM}-3)n8 zJlCDn!~44B^r)Za+S}_#lH0?ye>`hH=e~rV>myA0_7R)j)ob@hOntp`%m3MRJ=d+W z{xsYs{rD_!X;1U0C;#KTTza1GW%lycjOKy8y@yA3>izTIFLghjqv!hGW|Ki{&uI2G zsdeiQzIOTEc3sc)eXNOR{~?pU#KGNfCh2D!-?y`;zSqtl7&6(ux(w`RcK-BJKRTyY z-P$tszQBnC`)^@?i=-SitaIYqo^J|@XWCLtlK9?bt?U}-7=jw8hVn)t-$%D z@b-6p)!VoKXw(1S^1<$J3e)r4M1x_LEHc_wg$`mt&pDKBiOeKjwu{_q!Z= zZ9my;a_soRA-xyXdy3g){Q2?D&(i2g-wnS0_)2`lsxa1UGPHcB`FRSx#Gh&%5dS=4 zoe@qt;=JA%!PCsxhqixq);K-$O}YR2o2xiIRgz|e1tSmW-Z9bhf1EY%oL}Yn;Aubi zhKQbS%DZpBgV$dg>ejR$0HQlScl#ncc0AfHOPivq8Rr>4)1Nn@*l( z8dn^8(-(H5p8Mm?Rq6M$aKBTXZ63wQ6`gi_yy1OTRS&n`>}{P>gnk&gl&RmmjuW zFYxDg_R)XW&~$f#=qC@f|K*(-y4JYcE`G z+Q*Lmqh{6hgulXi@$Fwh(|`9q?n|1iSuPfvn6mew=et$atHm)Re!Ld)-;fJCHx2c4pI`>K^n(LkAKY)4`rzL$UH%4p zKYG4jV|M@X4y!mfqx3{bUTf;_v|oJDZr8K^y3VNm*KO&r#p&`B$9;ra;a@IEWh zi@}+*kLf-5+(c_P_KBl!b@S;-J?*dWT#@uye^GMCm-b)r(+|gggLybJ7w-Ciy(2yE zyXDt!{qBt3{!2HSH}IFN*g2`_sehB%&C72e{#ma-e6x8Yd8E&o!g|)!miJfn+>N$Uxc|fJ?f@*L7(Yww5zh87i>APoY z=N9ySmpVt8-gUz&>%(lyu#-Et&GdY~*X*J_ePGJ-Me7y6&s5g?pz{+}p<<^r_~+W` z3wz_M`%V3vb57jO)Q9((a{ny{Ug^5;Zryl%!0fwkwSkK!J3q(!pxH|;k~9+(yRLXEqibC`b*Qy9v)lmPv=nqx+qXJUPh)GF(#aO>wEJZ9JR+@5aU$-FplbjE%f@kdPKWADY^ zw;T0*e$|u=mE7!M3g0oD$_0n3-v94EfQ|=FJlftJ?E3-Rqw)*cI^Nc;Dp3qO4-Q2zN_O2`C z=p5_GI)5B$)cMYor@E_d_QCMd{}5;=Pm3nqm66_xz78x z{{3%%*d9%<+0UE7_Pl&T_Z#r~3*(>L$p+su`4i{TRWIA!@|eJ%&M95DmtHXKb6=k7 z46JANi>AC-YW}vprx~uA`eyqq=3LI|W&0&-YCCsF=8kZkb81#uFA4XJUZ-=VsVDc# z=IyBU+xGPji0X$Ef5kffoWDx_TGYAIq^J0+WdMgx!x_WyZIm4UVG&ob15)k$Dwvv z&-8cAP73>8{$;N_`ktw;yxNu@+I2nE-|v+B&mSGa9iE0s2Io?v54ShaQ@(C4?sv4|^j`a&ORZa4 z_|d?`H|%vJ|3#;(|JWZN!h3V;x4wKiRe$WT&-!7c>496Ui!VLlzcK@kyk*%@y$90j z){mLI$H{hGPxr4)d*rXVFZ9|o-TSGCzp4QJ3Z6qn}JU`{S5KzDw4mLY^9yA!|w^`efQ(dbIx>Lw$6e6-$rc|FhFS`0Cl`O|^&6 zbKaEu_XwWZ{q?7vdEYjh>_6%NXTj7H|1VR1@U3N>YYW{T{@c{wy6QRS;zG~-1*W{% zxOV>TJDHg;VZ#1~p`>Ycv=(3<01N9Y6KU(=oXKq@0E!IpKWSi zGJE?>>7CyP=FhROa_imF!s`a6d~Khk3;omd-FxeI>XfX5^+Y}E2T$vK`o;g!=e@Cm zieB!PvdhN+2%?R1z*v`!ay}&PJ zg0cOhc^hVFv#Vtn{q1S9tKofCSzjE?Ib&y2wJy|`G5Z;R^-OcN>|Eb0YjzY}Frm=f z#P2orCr7X0+<(*a-IV*koA-40C&N4QeTdoQ*%!u-wRffG`~OV2^6ev!_C^RVXX=OL z(%0B^J>Qo%<;`X+=bSF|-fO1be@=Q{_h8oZeFd}0uoDh;-Oz}y*s1rO_TIqJ!|k6L z3#`;B_0L&yH`iNv>&L)MGWhCp&G}mD`R<$6`GYuW?ODACpILcY=dMWObLV>$db+P- z9!O?`)1T^fdsj8}iyye(d9R~a`)+x&GY@pN7gn35Zz~My9~ifRa{<4)*}<@dnfrP> z4z4k+v#JlA>$;|~s(RfUv2d~OZ$sBFV`WXVr)B3Cocp}`0PvggR=X^8z0-^iwVtQ* zi!+}e)x9&O=l)t|i=WP@oY;Fv4Xdu-;f%Yu`$k4j|Fx}`()kwKhub+Xf__BFbstGHOsAU4QKy& zVc-2fc0c#1m-v9$$E0l!cfLKK_wC=HQ}4fa&v!c~RXyuXFxbD%X-zYz^|Ou}njOvl z*XPU`J>xer7RSE74-w~__-1B^#gF~tYkLd5#s|$1w>(i1?_yde8~m;HzQo={PyEfzo+3l1 zxfX`Z7SlR^aentP-5H^0|CVNpm%g5NN$*wiZe{AXj+@u8>w5NE<)^~do%Ft&_HbPp z6}C3r$IaTye)06mzfGswKk>G!y0^>q%NiVJwwP6U|3`cO`iiGpzArVw^;M{ZO#A+u z?Bm?R)kkdv z&pGqznLpg@g_wZgW1dGu_e#3>w4zzXv!0g+G29AUF~G*pWYeW&eVtZnR5T$ z_n(6$Ef+Q$-2LO1&b6AJ{ySU8^lkT8FZ_}};4`@XT{``J-eCjtm$1*)O;hS$p}7Oj zK&4&H&L2u`;Otz_{oTwyezk5LoPUG0kMQoM^SybymF&l@r~Mw*i{jkk-7bVTrZp?j z%h!ZGHt3#=^~@h(cJ8+_loU494kI)qMHJ$H1KF@wWdb01=srKLS>n8Z#T`+3;haPd-WzWD?7LH(Ukaxu{pe2A_so!i>8IG2g(_yc z8%yko@1zg!GtuD2oQcl6L_I+65HoOa#Kep2$Es)ip{6{%{;lhp!he_<)cWO_`(I*z ztf^^Ag9B^&NA;d<>2Pb!bv_1r?5@t8Lp|G%Fgu?7$jB>t-QgomeL?XNXYJ8b{-{p5 zf3s$$`^H8;^qQ6F0XALSwbaMWj!tc5oT;R{<42oS_<&zJHx~4iKc>^)HzhVOG;_Ok z1K3mse|yHh>)Q`ePxNEWL&;CFeqF$c_jbP-k+FVE(mDJFUmsa^ti6Gr>&Kf77M`&( zHt?Qcl8YbMy?b)eQ{F^_k2@{nIzkF3nlZ9#9J{SGhMxBcQ@tTxysr0Z22Zli6!r&9 z`}ZB=tb2OWTUGry_nP$Sr@ijV7*l`zzr=HPUC;WHO?l{_ue!c-8$HE(CG8(g>Kk!u z_idD(_+vX;^sP8&V9FNuQr0k~!P`D}gL899&-YV1o&AxEtq*FsKA)RB%_Pm(58c1y zp=W&3iku$-*!3OPy&g5Lv&GA_x+5%&gn*#-|p{zCG}>dv#i(2{-9Iek|%V|8u}0z z-`QQ?rymXs`Q5$^6F%FFyzw#mmt*SLpR(508*a3|j2k}UTzPgTzE##=$0a6LVnSXAl-v4BASof2Wdh(xV7VlqI3!7KYy0W**`g~H_e(Ub4qmP2~ z%^(XFp6>eT&ddd-e(Qmw53zTpkAVx#p00W9K=We(o$uj!)8-sM^HS#qi#`CXs(y0K z>I$y+4~2}W`|=U{5>y`m7n$lFi5(~PohpUKk)!KGH+nRDB%<+|w>z09cKygj2d@3{_CebXiVj?K&9p(A4IY^D^ZEn+<*ypF!oW3Cs)N?E z{ytL63f3OHUUjW&XYPOWs6UsO89#c|>5B|hHpve1JYDSTp@B7yd1lbi z^s=|T^NixZ%C-*=a#yn3(b4T`-*CDiT-t(2_CTSXdIe|TFkKbS?aVy33+>;P zZVH!n>*mh*Dz$sJpvT{X_Kcuw!ubgE_?~oNFS^yW9$%G5vLUlK9odKW?n~E&3;Quo zMCsuE9e2i8ZBuZbzfzS^+#q`Z9X*it9Yi;Tiw84Lj@CBgt5A#$>JYjroI8|x>@eDY zINcO39pU8N@m13Az(aht=(1By=mgC;|s(c(9GRM=A6KL;= zbX~ZRV4gUM4vw+x8eg^Tg6m)9WIB5a9UV*iPNf^d#nYH4lMfGakFP@G*q~0QtHQZ6 zn8(hf{nm$^UC&1~g-hcfPNN}pHa7^TXwNxxO*nrp^Z0pm;C#Auewu~y1$5>@IwJbL z8Rm82!bQvz7t_J?B`masE0;3QUPec)&lk8~V&4^XL%5h_o=#rLLg*@5S--#8JwR1B zH-UNV8rpv?-K5j1bR8Q~IXXO%_FPZbg!4Brk6VB6%>4ucH@R)i{}u{Lm2Y-8D3!T| zj^t_Yt#n1dhuJwZ2wi?eiY##hPN+#vKM zt>(~G;oMWqV^7om3fTzHjv;x)^z@m273HnfE+Z!pi+=;)iY?=89^Tzp%c|C8@y{YHm>r#*krHR1f9%;Rmht>Z87m%CtH4+xk4W}aCbi-w5{V6WOhUB7jXfaxO=&EpTaptil zX#bL3>-DeMD>&uM$3P5L}sV3s+WQo?VrWu15P-ryCuc@l|mRHYC@iLw;Hf zrK`fZwV21&rv2+U?vAgTy3qYHme%D4srBga`m`rN*M##MFpqC&yEncHY{Z6^aCu|q znN8@(rnGl6x-MJ@TDfa{mDrpc1h=5u!j&zVXSbrG)(677FQ@f?eB00s%kJ@2aTptt zAv&}zt+u19!ny64$A;7X9ZG!v-`s%>r5)+iPINd-dv>O4!ueg8$9GM$5ZH}w372*!uiA8xi$aehr0{b^}rEyOSpU_^UP6n zBu;yert5Co$6w(XHYARvgU8Wr;mYyMvnSBe6KP+fXXp5DxC-`UES}VBu$>%3hfb!| zDRfmhHE`kFwAZEs9ZP*DC^bW^xAn|bO-ft*&4ze|4m?A*gv-w|&pby*o~ONYUAB+^ zy1QVx@Pezsa^gigSf$&-m6w=jU#6q4^z5uZzE^t%YdqBuF22S*`8pkXgH|=VDx7<> zo9p#2_ExuGkFWf1(@o*hJIqt>(&6`L&--+(YdyZo*Vz#NfDU{}w}i_dG0)7SBOlY= zPde_5uj;1YJb!Bre98?H4LbN4-4?EV&OG}C9sN?ga)wgt2 zIQN~CcgI(;@412h2f8U-`jL6+Cp!Ey?P<|9$G!1Yem)!GztDkS>6UQ$H|Ck&>Bt|n z_fN~N@m1X}xc(K|bmA{M_&41at}I}l{fCY&6z6~6ziem-7yo0PRMYW*LxX75M^}Y& z{nPpWKQ@>f_!ps@!lgx-rxv5b9@?`wU0XcOLVgK4z9b!3if##)mu8+>hK?*td(&PP z>cWK~%oG2kgUiuv;mY#Nvn$Z)=!z`(R-zliMIZCz%5-QITCGY~>9oqN#)jDHw0{k{ zDO_5UdCE_Rhti(4+_sLt8Vc6+z}oHx>;AwxbYNY&C0t&Qd1ie&5^&i*{=FNx3YP1_ zg$4tD|bLPn{=+Kt5+KR6Btk=KX)@+Dv zL;Hu(P2p0Ad1_laydCY?-dK;XYTbhU{H-}K+%#y%cc241(k_!K7r`y7nJ(y=lXq)j>G{Oeoo^(UFxEJ%}NIJAPt@fd-+THP0ZeKRU z_M`n#x+z@RpLuE&9X^2e9B8{YzN$F|{q=U{z(L#~elQ&vO}B*0G3J>==*Xd#UE?e7 zVQi=i7Y=8hID!ryNwqdDl473Dp2I@)T-tXY-4HIG&pden9lDTKe8tnM%7V&exIye9+J7 z4(8~#aAjgIch;Zm^}T|<@6UQ$F6NoLJMN6HBKNStdoNuV zF5JgFQKWCj8GdRd(Rt1q)5_X-_*mG-|z zH-$^DGf%xihihpTJa5u9;rv_7<8RY}cj%UI`CaCj^m{Bs-lx5Fx-MM!fO+CWI`|RY z7EV{@u_6009sPv%eM&ckiw)+<&*;$Sur>d`KtWZ7b6+x#eMS4frkld0ZDr zzjYU^>w)j+nsEMm=J6lsz>joGxcrkVw~znK&#r>yNQ?H)r|ZInUzjI;rGvlGZI_+( zr}8@+vVYLgKWSf^ZU`6uVxIh)4lU@~8DFV?x&>$buL|cDGLQXB`~Rbx!X@oc1n3*M$p9GEXc;2bZSX z9h>o0Wf?YPm!+d#+Bbx52p9jyJh>blTHbMYe5F=kLsdApBJ)q5s#nA>9xzZp1vfF&*0E5#Ik-o3f!QoZF0fEJ*t|r<=m1Etsda zOtTQ)iuPoURKOc3_^^kq+)er`w`Xv3^66 z`)i!tnU3y4`*x)p!o}T~CwGU_Dzpa*N{yha!np|Z*q*e1FS;pQ8tKlh`JdX`U9heP z_Mtud(lz1ye$3-hIW>%xVDnI}fm!C24E@!xh8?5}<0 zkY0oB?4fk@Fxq!G-4HGw!900n*LwX49n~$^<5}Nxp{v5VqnXE!q5a3wP2rOD3)}QS zdVG~S-V}5>d;;w`k**2n6U^f$(Sb2^%eXVXDxb`T%qetaEbTp&t_v4VW1dLT!ExGV zeAVt0^z*mo!0Fr|dj=gnllGlOH-wAhnJ3S7+#O$qQfyG?&{g5wxy)nd(f;%4rf}&3 zJMWFJQWtWAusAn(GR$kj`HPsxFQx;R&@J1p@m2X!He@cNBbU?OE9km#AJg|5mQ1vlHm(HMH+qx*=S=j(IXC&i|o_Y*5$JRpHzX%wspw{+sBgaOr08 zHBQ~a4Z?Zab1PjF&QD?nxbxy)lP(EbEGrnq>g7f^XIq(KI$kgb_o3!^Wx-MLJn|b0LZ8N?KzRQNT zaOFMb+4t#ao%Ve|H-w8HI(c_|mHdbsgyzxeW4bDw`-FMyQ`+C4n~rBx7q_j|f7T=;=`;zx1*5B|i4ws7TV z=GhhYp*;)f znsEMK=JEgNKw3SDuX#(jJcxOwkB;=y-obQTxUdNGbYf8!f{W2@;fjZOc5yno1npar zZqR8}T#60JrRmTzv|5&~3g^7cV?${F|J=5Yza|RS^}urO2J8O7@^p9w+Or~E6V9*1 zJnnPZKK=tMy9$AG-Xjb84oKZ!Ma1$+Go`sucCWhnFPT6A=6 z+P4nf=vl9S#dX<`T#pW|Ppbf370zwIJhmb2-^f^xubSP0{rs&tu(4^-PHjSmH>EwB z(KX?Gka>LbjyvP4z!q$1375BIp4p0yY)yN&q3gnhVLCVCt3-$!1h=Kz!jhU89kC`_xJ>8fyU7v`~DY5#7vd*iF7Q_x>;XAbPn4N`m1;Ssba zLf3@zdoqvjW!W{p3XEh!OSrr@^UOYUWMA65A6*wNL?7k-|HS^>AUKL{3s(+co;{F` z9z^>NrW*%8%KQJt(QHV@=+GgwI+U&o=MG~YJDm0(k!GQJ1YJ6kP8~&ur*JVF5|_}yOX;?7uk1EBPF_WauBO!lx+o0;WjoTCey*&>9%m?4(8bbI$EH8Qyh24 zR}EdzufO%b#XGq{@-8}bH?8iWtHQZ^naA$4-5X!|i)?5Lm+ohtdVmf;NPDKzHR1d; zD|d~r;tz3yz{7M)xLjhMnNCL@p}mjNb<6JYRpBurX#P=-dE{#T@(thu_5s~9ejgs3s-8)vv1PTx8St$y^Vru2p8XBo_v=M zy+^C}>8fz9?#`|GAN#;vu&xI_q?^K}kC>Q*g#t{$J^)aOpSZso&}FAGGIBx@O!NU*+3ui2p?g z{-#^PK3i|n5bKpO2kWi1|MrCji-4?F&G0*nX(ZPh7K=Fd%SebwrhNqAHs(C z|LDMSbW6CrJoC&7bYw-^yV7Gk|JSX8`TE=cE%@lf%5-oQx-DE;m3ekGI=cE}eE;uT zgAEPg;+o8pemXRiR%_8!;oRD3HpJGU{p-?A;nI4{Q|r^=0PWd;uBAmGzabmq8_|J{ z>6UPL6Xuys>Bweu+8bn{E?n50d14DXxFy{du586TyEU9v(QQyrzF~AjxENxd+?Eb) zN2~4WDr_Bpx#4Vx?Lhl?q?^K}otUS>ba-dlvy032@n3TnEa!K1HCT@CMhAAMTf*f% zm}f@Nkx0+Z`s3ZRSFpxYb>YHZ%o8K&;NEmwxUvuP?7m&=^)I?#w_uO2d{Md~T-={| zaugjpfK~_6)vopUDt8bYVh7Xy(R5R|6l0z`gbp7{dk*WkGrp>sg7f^XIdC{Ph#x@* zj-*?{<)fHq;&kL_Z8N^|9>a#ZaN$_yiR0+t@pN0basu=0iH^JDt7w7^zLV&NaB&Rt z&=dbUJ(n?K#u3YkXC+3$B0pv*`GEI&e1K z5-z8hXU?G`=Zf>c_dGV#g$w61Ph3C;FQnVT6>+xBX2khFdJ%WvyO?eW7cXI+yp#@I zMyt!|>gD1Q<*r~uEKB>Zq?^K}tC***ro$6xPx=}bYQp(zna8iA139`ST%O20b3L7o z+`xkOM!GIsxQThd;RfFqwB(jhnOcGrh_HAEnJ!2&Gq`1eWY8k$5+uuY2RaXL%2ADdGc{OG?P|k zV?DmAb_>qwxs0rsQ%;V3{foJKKaQQjr zndi05_$o4&4c-^%x^Uq|=7}mDe2H!gS6+7V?)WPE3O9(pO8Z`;8^XocnJ3?%Lp55x zX}dSRsyYSz^|t>v_ZByZy-oYyp_{^`cbTW&qr>l8c8#w*bvD$5^B*vee@F*DqFch{ zdCW5(i}Qcv6E=81rR&0l2J^&cbntV!EnN9Rod2_5a)answC`)WAzb{1d9q1|zNOW7 zX%?#A(Yf#G*blV-N4hCo`iXh!XF8m2vEZ3c*M#%GFpvLA2Y#bl!sXwYr!#-B5c!k# zw&}WX;V-Dd)0voa`($SS@pO0<`7guJUT!jv;YOKdsYBf`^pT9K+ zgmbGikF7!b*QA@mB|r1j(2mXc;kDS{S(~m2=htB#UzZN7N4JE_>+9T%uQCB{5ZQqC zZb;XK3mY*{Y)l6?q1)Qs@l|D0He@%Wqe0rYIo%L0ZoxdcB^}zzc5i&8wq`?BIJXV+ z*f823qMO2{ZJDRGv+N!}ygeH{!|9rEeh2399qGVMbW6A#p27S7nVq>oWEa}ID_s{Z z?8ZE?J00AEZtpRJ_x~#+*pQ9T(LHJ3UUWmaIFfmCZ#uM3ngz8lT@}vl$2=CL{rl5R z;nFDPsq_IXgb$=W2hla*{K3rQqv=45ZV9K$hp-`YC>=SB_8v~xg$qY8PaH`HkAl;x z&4Q}L(V((N)6rvS-?4N$6x3KcfnfxPo%5DxdijrNwj|q-4rgJ?8@!q zKXr<$U^zUN_MA%Bg!88{k0P3Io$@w*>maWd9?3*x*=S=fO+ylV?DkK$#o!O8l3S}RXBGM^Vr3-{}Q?> zT)MQAcg9z#%eX=Ka@unRT@%h{na8iB16R?lj?MV0d^H;~6X?h_wD(%NE?l^dc_K## zCpzwquiCnxUvGO3T+a=%H_*`=Y2QtBL%4V|^W-hId*iE6o(<|&x+sjb>TvhdE$OL z_<%V7w;y0b8Rm&+;j{`qhk|MgSDt5{ zol8ewpnWgW4dG(dom=xi`I5U}T@SoWt5@i%aPC#+vDaw->vYp?`}ixp!G=_g4!=oz z-lA*5`L~(J-=PEV_Us)0Emy%_f6MRn8f<6Yrz3UR`vF}SE_}#5@ln@${Rz(N7VPm< zTe$Ku^Xw;d^i$f`pc}%)&rGhzSIN&!!5LqLzM$2YbX7R_74z8FwEr8rY1|oKm6~iw zeM^VGqdni#HR1dZ%;P`OfuFR^_^Q<@=;v?EfuFfSrbS2Q)81d`x^UrF=84}NcgI)3 z-`UU>uKd9~`zIZ3)4spxhH&w3JMWFJk_)&&=pR}wq^rWYf0@Vrqy6e}+?Z_Ic8#w} zgV>Pjqr?5QXE0q8&M(3|z9=17>~Ws|TUNn*{q6sjJ#=PqI{8fyUCFU_7?O&O0rbVH&3L8?Z z(&5!;&+2qdIKKw-_?mP&;Af#FTpr3ivlbm$oA$0l*M$q~B2TNtdMK#i`gB{k5@4R) zfR1iR`!=E*uyyj39Ut*_j!5&`)!*pA? zvNQASE_8HP+P53s=vt4jio3HRxd$B@L8}N|70&I+Jhm6@AK7tdeAP4s=lNT6U~g`a z+J_GBOMCXCYr^>`^Z5SSW_%SG#fFw}`2gmb1L?>?wD(}TE?gMxRh@ioI8(s?0njvzJP_MaOpzkDe-{A8Rnjg=$df; zV&>`iB`gFkrCY+~%a~^_rz2O;-Yi|G)2eVK8xmL1!K>-EaAgAX>@{@sTH1G=+t%^d zK*72m$hjM=`vVi{(Dk&sfvyVYZe$+2$z}Wa_uuR)SZ)fJZegCv)8Sib&m_7goWHG? zJL^w;a<5>oKY`onmT>tF=9vLHQlPz4=z7n3{VUwbhQwWT@NT*-T)BsN_Fg)AAMGm| z>+w~iTd<$MH3#lD4cf^E=+J|-no3uNbJLi|9_qL=zVbiJhNf_-#5^^f4nIPB9;Iu- z`Nwo_##iwf+#v8c-4ZU(WS%M0ktb;HEV{1U9bXk@vmx;$9h^hAg)2`n&pu5@E41$! z+r9Bs!zt*mw=)NxJ38_`?fn5xt2zs+@FN;j;wL)zGu;-hw3uh-)6rktwvIpFukM0%Js@2C zjd}8SI`jvv{-mqIxwb2}kN? zSH5-G&=4-J$2_?{9SYED1G*}l+tA8g)Jb4Hm zI+Rw2(N(wY<1cqO8)8S${v+w8aOo)KsW=@zn)V#ivvd5{Tm^gm%^%xqupK{+4jfOn zgv%!|&zwj{5?$-{$9qz@V2`Kj!i6!+6DQNbQ|PvEWi0dTsm6MI6+O)qobi<}NjHRx zP)(7+!=tRqGV=^S9=}`P?9W z0UfxIZV8vg%9_crKXQ@d?)b`kF&pZ_g-e(xE~SH)(QV<%<;=5J*zS$5qFFZhuB02n z#jBVnuckv2Xmt%;we1>T<*sEz>^ju>)ze-jkIX)M%)^A9nPKTHQobW6BAoq6UF zIISX&qM*Ew(RJa%4CaZ)>EKMdEnF$PbL;raKH)A{*8{U?-)y=eTzrywat# z@;y5AKCS86UQ$3+99%m?J3H@Oc7 z@@G2KqSbuMuJKjXF1Y^XexYN((*ED*rf}(Z=BYpE@So!R?`gB4CY=9^dHioWuz+p} zm;Yg&St!o`k$>6X{g18-7gQOqSYi+z?4#SlmHspvvV-a9BD8N&x*=R#jCs;ShZd(* zdI=V)!nq}x$Cje~OVdr^(lX3b%hKtvmj%xdx+a|eAM^NfbYOY9C0t$sd0J&wL_tMX zqP;%4E?iidd14hhxGLR-t>dq<8XK~!)6q3(-1Qa@jfl*LD@G6j$)oXfDRpK*)_gW2eF|loI99# zY&7kU(M{pfAUmU;g_d>9)%htoCT{1MFKN78|#=$3FfUgrJ(%+cH+at!S~maYpI zj$@uUo(`Tsw@*m3P&tv#Cg|u%v~LXE5H6m~Jb4NoN{?khok~}QbEh$nC29XSx+z>b zoq0NS1`FXcY0p`7O*lWEdHifTkfK|3T9waXL*`sMavtqHpRNlRE?}OxkPhNYZXJJZ z6s+rk3^&MLL`N^CeV5P;;o_ytlb5+{AOE4tT?PC6cLiM)&Sja$uB81}(M{pf)xF$V ze^L{A1$+GPHMHkix+a{zj(I#s2PV?3p7r`yzMc)48|cW5wD%^uE?l^odEyp2m^aqr zt9G|wKYwcu+-e%MvyKv#uxQ<%r@r2Ti%P2tkr zIyd91)IHoFd@t>}kFE*li_GKq(}4%*mUef1Req2SnW=PS8tr|Et_v3)W}Ya~!RfYp zlc#dv8C(i%n=h={%OGjRyy)V*r;X;*p;w3uxvRM1u zFSDWY3Y~qGj=o0wUZ)$v#W$EI(=`@CZ_?^5x+Xl3x44)Sl0u>l`olR zzoMgG)4p%$hH$az%I)Jn`K_y9IrJT^zNf3gxgVIvex&_B(M^|~^{4bR8&WMgJfHUb zLf3@zzcP>iMhAZHTCabtUcp&^%YSqm9B2NdBW>FI7hM-F{LMVEz*vv3g8!I;GoES- zR~9nQ{!2&yqkZZL+?Z?#7YB9n&iE?X#|=XLv>HrTg>#EAk1b037o(dUoAFi2!-mx2 zba)Bcvm{*;&M(D0zBCn* zwH6&-oA#_j*M#%yGLNrE2iAXr@Bdrtv!NWIGaJy64QcO2bX~ZxG4sSGX%>Q;(rw|& zX3VoeI=VUS+k$Qg7t>p^A-NSD+L~6|&{g5wFy^rk?cbJ8H$|be9UD^H)8XN?X9v0_ zoZpdod?z@q0$~(XOSrr<^UN-EWLMg|8(kMJ?C#F3`JdRsU9hePM$m2HN`!fKPdd66 z?Hfrq+_sOu;@)gX?n8(6rPY3PRX7)A9^0SxkLuYu{+q6Xz5bRC=r!0*9Y}`{qCE%G zHR1ed=J8n9di@C;(kDd^{K&4E+6L24`= zK9%;IM%RS%N#^l!j=STl!0Bvg375}co;j0_oJD)b({>I=UnNr9Ab1Yl7OtGj zJbNA;J)ibnKsRi=##hA)*^m?`r%;Bux`?g{=PqU*yM*>%D$f5+t6;wV_J2#4(W%Sn z@D;QtOV@<+S2B-ZCC>kWtJ%;JE>B>dxrUBhOM9=Q>%xVcc!?7exk2!Hx-DF}fqC{u zI(ifByP0mJMWJ{L89qfL7MjAPJD8^i=x~AdOrdMS`8$!P zRs1d#RN!v9C0xFTdFEa^av$w2(skH6{tEZAA@Kkme2{JnSEe%0PNSm_(Y}XWwvYdY zyI{Fkay3{^PNzeU(CSgTDx7Dzx_*y56-OUlpEZL*h9)_&nVfuFPegeSwa?Nc*ZC zcg9x@Q*fTYH3wee2FaJ{&?~fhm97fsUSl46UE7SW{BN+KDO{>CPrXTp-=aNl(>3Az zJ5JsmU&Y_$27&kJmT>uf=9xMj`GEF*NY@?r##e=p*pQe<2S29U!j(^$XFsK*4chma zW!LzsVHaHgil5WTFX+&hwEBv!3g^CN9{Wa||NTuiG=)pwGEaR+hrg#iKhQPd{Ey=N zAODFP1b(Jl!sQn8%zQfX3+?@tuKy~||ApV!kocVr{z12eD}OT2w(00!v@iWP3k~7o z0_Mqo=+Hu1{YzJcbN?|<$J8uLI{zTLDO~Dfp6aK=gK5tqbd64{{Gx1#FGdGEbW6Cr zIP=UBbYw}|yOi73@mEK|x*k~C-C*4xScVQROSgq9Ugp^$bo75N+sD6eIak4QL%6s+ z^W+M2XhmABL|27#zFzLEKe3g21$+JRuR=G4ORF+Ztwx7er#)-XwVw6*mtT_&aX%dx zO1Ff|YcbEPO-I(Dz3Uq5@m0NBu%Ev*2i7wU+KKh)V1RB5S2kdt-H?uM)NyBg<=dDI z4dLP@%#)kaq0ML&q^rWY&2?_ZSFtU)fqzT7DO}o$d1`AqybbLcM%T2vc5i%DcMAIJ?aYClxIrRJ2Y061!j)Z^XLqHeyIFRPuY9|+ zp&?w{gL!fU9g5IuPr53c+iMo@|Hnph1OMK1Q@FGb^VGg{ct6?`rEAeyy#JrypAGR* zbl?EGC0ss`dFCKGaxm>3oo1mvnl8lX#36L>P`WK#IgEMsa5|bkf(74^bVIm!6!T=9 z4joOaW9X`II(IA^V#m?`+Df6X|e*_M8N#RgDFeAA<%JKba1kLbrs=W0_}8 zr6Z@gZ5@B!q`P2U4+s~=F;ARM2hX6}!j&_bXU}rkKK`TQT?Na&v+0I#F~vN24jnp| zR_D=Gm!0(|cRm|p7tsC->85Z=97U-N`@tC%`aMs`aCEW(c@k{BzWpqop zd^z*X6?7zPtjAa0D^0-}Pt}DBS20gqO$R5?ZQ;r_%(K^a+!m9v6PYKk zr$aZ;>PEWSu^C_GZem01X4-!X-4rh6nWt{0!;@&wZH~L+tC}w8*Wdcz{A6wrznu=; zLAQj<1I#l8Ix@v}Z+zvwlMQv@!d=W0chkXp=(cd>Ugp{REW5^6(IOjs_tOpG;seZ+ z57MEjw3JTZq3K1H{MD^D}erYkH&pP_xv(hcF_bIg;^)1kSvdVx+? zMIrYh8)8-3{}SC4F1^e=^$Hz+6;3P9YbdCiaQ=1X@i*u|jcy5--(;S7%WZ4^N8WZ9 ztm}by=(=#>UFM1R=-~TwTewnp<@WKH{lHbQ9Q}~?eMC2ei}RQ#Kc+*U(CX8ko#Vgi zD%k69uF-3-9s7*-e@-`rOJ6WgeMyJE>RPWqp0B$FdpuPW&VR!^-lPNH(k2 z8|(2^AG;?C+3Nt>0pa)3s>fM^3M1w`wKUS{!06PqZ`7--phJJs zs;zCtSJh5IKYwcu{KXAof7AX2bW^zW5A)PQI{dHW?)b{{9~)}Ic{Lk1D&vFbKp))_ zF84Ff47S}HUqu#SgLhH7E?iiQdBQ^n7pL38l_jj)HNMI&$qk}Q(Y~eWhH!Bi=E-I0 zke60NX7l`CwF>6zZ~r&%L9x-DEuug!++I&^eh+P5Cv5H7CIJQ<)v8_;RB zAq!RE+(yh}8`J(x=%#RKQ|777;Is+{QBa=E>6&nU3+C}H>A+TWOSrtXJGYL%%r@?V zbv-bQ_J-)XaA8~KiS6j%_H^5A`}nU6XG3-eI=Un6+lg)n7sJexJJX?Ede-aDuDybN z+*gHjyD^XLPW$(uo5H0L%u|uB_4wgEy9IlE<=Km_3Fk*LkMB(f_MuzC<$X=A$5)yC zOu-pnMWVEKf4VMQ7{xqs03AG#ZX0*TSCxa6&oA(qeOSpWZo%hC9nFKe8 zoJ4!a&~@R$$;=a{(7~~E+qP?bRXLRn+0*D~lJSA}!eF^}bF|3tbeT)G~4 zTBUA4L4|LmJvY%c;rz|aK{q65?ER@ZubReppGnMdi!W3+b$T^BAq&O9-b4wgIa zjIY|J;5>h84m`mPva{&uY})rE-4HI$VV-wxbi*o z><@JGN80xj-4HJR%sicJu@IV1t6%7>-cM-U|kO^bT?S{2mbv(SJxdE)$zpd-b2MC>e;d8z=r)Wc2Um~#TE}M z_Cup$KdhLaFC5dU07vt!yr;mHmrp z?S~<85m6i5&UIxJL%{Wk3TfuJ9 z%3&c|*-%d_-|~^2KWNLN>JwSjzRuJ@tB~g-yBliDV;gB@OJl7Z&_pYHeB`92N3{F@ zwr1K2jYGAvuDMn|>mxf_Xv-s7YGtEYE9aPxX!rkJt+Wa;t+lebjaK$=tCcf-=4(q6u4V|>|Eg#w0Sz8`8vx^om{iK!id}Mc5ZF#Ik zD_g>~azHn&?D3IjCUw^;*m`K?#yz#Nu9sFm>mxgQYs(`dw6d{}MxLq5(E>VGUyXt; zrk_?e_t(n)1GI9ckDM@2TW%esmdW@FwyFV=5BSLGk=kn=k;;(Chtia@$iCWn_Nh|wL*25jCxito5XkQmR6#>?s z&g&zm|Dr9o|4%E2P1DMT>00@gkL;Ym%X#~{D4#%NvTF_G`N-~B+Va@hTG=v3D+kQg z${sFb`?{ogS_Rv$TDkFjt*ndH%4dCK#{zA6#6qoXT*PF#eO(R!(EsFL*J5pjm?c`- zyi_auFVo7IK5~LXTW*b`veLdTc)3==>m#SH(3abO)5>8hwX$KAR=(vUJL5^Ys(oEl zg0_NbwN}pak=<*w<*{qEvSpoC4p^_1Jw#TwuS?pXRj^4~xv^6#>k_r{Ss&T4QCl9d zNh=#S`^^72o3#qAEm}Edt5!B|)5`uyS~=54PDs|4TetfRyWkyK1+R~szEfLn-=&qq zc57wB9<6-KM|RG1X%(VUw6bZhR?hR0-KpC0*fgzd*{78Q_G@MG_lLDW(gCe(OV`Sc z4{BxIA+3DYM|K?6mPZ`X$TM}uqZ&Y$<0HF{Y0G1dYh|-rEBj|?Y&ffxZ>eQE{+#Eu3Q^~^vgv|W&hwGo7q#WFm$b6w zvQ`ebqR4FgdsG08ze$;j0+nr9TDkF6t*pDImCyRfj_ca;h#RsD@yB>m255V_93R>B zhqgTCmR2_3*2?~Ov~s48oNyP*p?#h89s;a=UGROa?Ddh;A85<%54CcbM=Kk$wel^L zdHXu&BdtQzW36m@qLuS}WcO2TdF(T-Z240w2jqZ^?dv=ofafP1c&@Erd!dyZztqaQ zS6cb3kL-A@EsuD^WVwBv@vT-N$47Q~wdFCnTG{+gEBn9K%9%cL!e6vpX4|WD+d?R%3dEi-JmVE7uCvP#k8`axK_S3(+6;t&?-cg z)XJt(S~<^0c9+(c#|CI+OBt;^GoY*%@c76{<+SCt@>;oZ1+A>BsFlz9$d2zdxSJ#%?YiQ-L znp)XVOC{6se@hJz*;!kqK;)=8TG>=rE9d#hZj-h=Hbg61>M3$QVqX^^Wi{KQZ!HEl z-6K6PF4PD5-H2?~J1%^vWF56Y-%Ru(E;d}yBfiz-tzF}+r6tR(_4-hu8LuLqY(6bM zk2LV!LVb|1Wm|ll z%~m(g+DNjsT1a$B33wD*zcX2$$ z9j_M=b%cfd52Tb0zY$N|t%+v*BI3!2IN1|prIkdv4cf>((=$o2ZE4GW7yod*qOfcA z5~BU%9;wBDdx@Q0zs0AVOi=ZThZM0#5~jA0;<~4kR+HLsNF384F+O`wvG3!o?RnqZ z+GE+gUH?h??hEz9q|Cn@q=~RS($Z!L`XKSUMYk1ybRE#oGL?V(ig>7iu&}S7G;3P| zY1Pq@{0=$$h=GOgc2PyIb2%~F3G2s~zIg@fHxrGWNpps6M7#Xc8x*#erd>!;auXm( zJk@52qU`E|MrK|;`!mH2U4A3lKkbn&7jcnZDLOnpx560qI|EnDU9m>tlaD&m8qSl8 zNev5!#heq@5tSM^LLmiaaBQT88N#qdh5(uZ(xTa^efcf$u%gp)F2*l5%j?t+XuaIRb6sja z{FYrP-cM0=4MP+AGZF?-99Tbmk5qB(7Q*`KYvRLOY*57la}?Gn+U@y7S_4==0^8hK zTgtU9B5h_OB_0fch)1AbV!!P5* z=M+^9CNC-4y?Y}uG=0rnS^?NT2JN)i^ejuUZy$?z%dLe{C=N^?hwy~e2mVsj4K~DA z6xr>hIB*?dadX7r_{a|HR6XO2#wxwqglCc}!1wWcq%RY8kOwGp&1bSPO~4AvA9P+y z+W^YTu%Q2|sp67*BC2oPXRkqVi1L##${F?ySF|mYQTxWd@v#&K#!o@G(M*y3d@!0k zhzms?OS4L?AirNy463f%-nxlm*)|pNaz!^Br8uzt7Y>Vc6ZT2D-QwiIr~4mP*!ZuD z#U9UmDVFzi_F%30SCiPoEO#{)VqvIFChs&lk*ps8n$-#40Ic!s1i%OSBc>{32}R^!P*;%Xy4nOmLd2i2q$?+ylN- zl%{avjv-c`A>v+wmPRBEJ4xFH&M!qc->#PbQ(UqvlTEpg$WxswZl}Jv9%~H$rdb!I zhR3l-+E6B)xU|1NOS2%*$B|zxeLF!X`TwCP+m>@9LQbHR?Vn11hQ=%QNN*z6>nlld z>s&|ZG2+-8a9X_h$o|sN)^kgqKXG` z!MjzOwS*c;+RjzQwCtaxTtk{12W>mhh_myCozxKs<2%W8GCzqt&4o-=7}V`TJNAet zE3%_Y##zHzgbWq1#P4hRrFBYwJ9eY}vHw(9Npaxz9)xqk2CEoobYTM%4;bW`9{5d* zSlF;0VQVr@?-Y`nhc70c)*iv8Lx|&h(f)v6d#aLSb1LGGN4{k^Fgy+6XY)p|83&AK z5}X+q-u9Q`I<1yjzK`pR;i=W+2m^Jj`_a~>D=%#HiGk?{5MG+{@T$^5UK!v2a}dk2 zf$8a}UcOVeFh$*d5b+D6QzeQ6-47wWBJ5DEqHZ{hctCtyMT!I6W%%XawN>%od4#Kr zT~0lc!h=Za459oe$Ay%RQmgSt2&GKN&~oOB-E7GXgqPv@Rn~S>9C05<^)eI7v&0Sv z??%Hfdr5Hv=#*y3K+WP)cmF^w0NYROkqTd=%eWt!vP1@Y+e6@E2T}>#<=XF586x*d zw9(|t7uKnuZ97GbpJxlE{l1%8Vy>jx_p z9KZ7lLg!mjoSEh_5oghM{FFUxX$77b&mlghNh)I;kX(izMntfT0MuRQ(Q<*-Qd}%e z%wjHZNX)HqGhW|zoGKkMUqtJ-cPu|f9R!+RLMtt1N-1Zy6Dyeri9LI)NFwV7v?`moLV0FV6VKsNUwie?9691okHgm-kz#N-E7y5#R9e zN0!+E{N-<<7;D!V9lU(d1h|!#M5VVFM4kK2T-cmiLGkdVl!| zZ5X2bUjUPs&{`E(Jsb`c%8!zwf1`UDNq?h(Aa|Ba@!a--iJp<3D1WUE*bu zQbU)=YY59?rHpoT)8Z^beo%<=|DfuL8d7v)IuAzti++5Xz9&vmHGV=r#(v!& z-^vRV0m{oo586%l$sSz)kx@B#ISGnIPp~u!SpOLt>D9R`%PD|5<}ZlnJJaPXd2F3@*$Fl$gv=_0;(Yn_%6zg_Bw0`cHluvFU|sJ`0E`h#E?P^NBO(h`YcGS^FNktgQlqt$ZkOR@TP;|in^{S z;`MJ=pM`j+Aj7%CTeL=)EKQ4{`qD#p*+LA0d~t+NzqvhHQ8$+0xL7h}4PR&g=dr+V zck>S+N(EO*G&KLck%eO*d?|!08*hD7)Xk;Q{)6#V22&LGP`^xnVing^ZYX6$hs~yE5+?OM^UpmOBoZ5D=qU|Lx*lvGsF^is- ziU-Li1NyiiCp$j-#b{MxX0L!XRzIG@7!I+%BEp{=>@Tl0VE7(Q4LHH{;RCUW8-u=Aja*ZZ3w9>OcPrM=mLbv;6rOCEGg&nqx+|ge z9hIL+iJ?p7IA56;2xl^-qNDbbL1(FgHb!s!sTVa3%&&@Yk;p0Cm1p(H_?91{8Kr>s z)lmIX)2fb%c+P+7qRy>uPXZm}-nmUcNgcfJl&N)tTV0Z{R++=JOMLUzg@LLUUagya{!0>u5 z*wfNiCA(DH$OBt{K*d$R)?tc3?)nHHTvJswlX?*sH(WU)lMiBg1FUlBpG20+L08xt za$GEBT_-Q!f#Qv@%1B}MRK_}})ee47gRjRk)5zU_5hso)O93NP-xkIzlt#O5&w@y)RfXPYh` zlq!}Mh)48(8AfrSc}qSc2+Mo%gb4b`Lki&MI{D&TGt~#4o5_!Bk0(^PGC5nZZfnK0 zh3iRD*0*#sr*UfziHoZ>kbMN>x;9u=CTXl@7nPg?W4o)%y;Y@pj<#6k!VYqnv3MhU zWMKS{Sfz8BDXJ9I*bb{)e7*#?fq?X+1P*G3g~_{B;F_yF8oQahmW@n^^kE1G6-j0j z0H~WgAijA0Wj5)<80d&_!_slrlzz&T@e)sdVi6PuK_^rnBGgnZ(yW~kf3v>INood$ zLKlSFoR49~dAY!T;TrZd_~h(H<|K9szW3*N(gqBK?%1-cWIlD2@4*uwVQ-}T zyTC{wC5(=OVS|+MVmTq0yC)hc_acgIs=xr~g>Xu}%Pe~YM=ZS&52$j1;V=Lq5Po;* zOgE)-JOqdH_=L2J6bAbDLGAaeOR*gbFmCJXf<1VBYboUSos|ClP%|=1#{xfS>iTnB z+_rCKd`3}a4IC=SMU761@fp|Qo(5EN48Us60~=w>i--Gxyg=xjD@A^!n>ofo*z|!e zMc9@FkY0wH^o&%kNnKV{-{HE%HgkaSktFq_d&)w1puBzqXUv1K%^iKDj4(Rd{fD3t ztNpjGN;hW8xPIh=42lEcf9C4q&b6ntgs~1qOa5bWSq=B_T}rm%7nI&fwLtR@Lswb` zN+C<>k}G{U8VJt*UNr&Qqh!^&Qphj#ibmK7gvOncT0PrBCclv!5zn7qBJUdk$>pM6 zM;dFEmCjMv;*gRlspKJnl;IsOu&nUiIsBd5#VhWcWt!_(zJmV=}6*Yg70O z#UY+galx*Icswmp(Kg1Qc8LYoK2scMEyEA{I_fLxuBlvIc)wAKHc@88{DKw+*K4VY z%I5zeUbn($`up)jW*Wk!CdRK)EN9Ai8>#PEiUX&oqxzBG^4=@z))^cZ8?MOayn!%2 z6Dv%IS}f5nn0FzuetaiP>yDfj*!%Jf)lZE>eW)f(Hf08Io` z|6RU825eu5RqmX5(Or3555eJnQ26A3C=85WgxYamSGQEOZHo!{Zjdup;n_2JGZsj{ z1ef>Tf~w3=w-gO6-uF}sW@5P<6}@Ir#zRJJ446`3-#)r;Krk zTkHH3MRB0M3}5Uu;;N$VT8`=uuPvvOF5i?~fw^1jf3_*w=HGY*E{^WU`Uf(YmFVTm zZLQ^91bBi>x$HsHZt|5I7zC@Z>6ZWWQE}QDkLHS9?<=QoFbooSk&sL-;Pp97etj>2 zDpuZ1MnGJf)zniM0jtq=?A@>7gfK0?@qKCjRy$r0; zg>I?x0k9d{{V->q&z%h07Cs2X$z|ETA`F17yoNCLgcP@A3HhOP+b~qS2eEAz`b?n$ zL7~N+S68WGl_LppW2wH!sVBhtWPpRjO554m9y-Rj9ku&S+TN6E1L+YKH?6hCr*zn2 ziL;jC_g`E)colKk`7$ywA)VQY*6Lrcs3MPf7s1($)ZQQCi?$iZ?rgyb*o`$twtb~K zA;=^+WVEq&a;RHC{5`1ME_lRt3d2)aU5GcE{YsU>ry%@TETM|cUc?1wV<|9jGwI{> zy{Ovx`Xp6v+EWowJR!)81`{oXwXiIoUxHuzJ-uq*=ZY8JF3q8 zXyW>+qjc5>x*tF^?p%I#LX*yMaY4U@QmcL|$W8<>9t-?-&-}y|JDl+cu|l1XwdCbD zF#Zs>@v?Awu;RSsFyiIT>s6aHM-XnZa)WBu#e=w*JH7)yE`+Fml<<|_6%-FAH&D#m zj-f{jitWc45jcMwTPXPbAF3t0&W*A3ajN{AgbEa8do?#B7-Qjq9T{X`(p$XxL@Dz5 zYSQx&C(!KXM>kI^ju=lO-qQMx?Jfc5Wq82MXw{m=bqf7{WH};57EC5x4{Se;b`G66 z#P(3Y6Z09ww|s5HW<8+#@BC?mX&vMl32J1LBAByJzHBG2$$;`_d6Cd5Ns5c#N3!R0 zXnsfJpn>$UAi|$VxM#jTs~sa<`~_5hu&zjs(mD2vm}`_Swt>RH_e-dq zI?Jb>;t8WC3BWr3UGp@Ize>z4dlvF*6Srw@HeDJ6j(nMB-014|aPjZrj>_pr%c zr;f?TV8D4S@;j3Bd7VOeP=1z=pJU0~QZM55&vNlby6FWLJQ`PkdkY~R3;fQv zY{3QsXZ%a7klG?ajwrzTSG>sYMWs--zGqbg%WM9#%pUkBeLmp(8&s}*-^LaaVBbS< z_Wp-h_6s`(0K(Gi+E9pV6b9 znJKDy*!~4A4V<$kKI`FF)nfK5Rylrge6sS)23-myy+X$^@-`LlpOnDJ+xI2rhEl_+ zM?AU1l5qqF?h70h&%fF2vt4ZxvBt7RKd_$x$d9o2p~hJ$Ytq?*&~w{C&6bl#F1hjLh}`Ee3j9;xu9@&%_xS9Q z?4~mY{etMgz8c$GP`_Xxe1mZDp4G-EJ*E2=@n^y1c&|SPBATpjZmr%hLx*vu3dS?*svQL{0vW&1t~=;^ax#Mb@CB zQr52J@^5M_f%+BKc4o_GAb&}OyNtb}+7|H2_{@p(Rk=+mt}cZ9C}rQEHwo>f34_@? zUUjQ>p`8Q)KLG8%X%Rb2={rLiG_c{Rlu;p`7`TOyIJjMZ`361ohO;c1Dg0MBJzod1 zmrLQ-H->Cd9b22qqjIgykN%}?0?%dm!hwdW^vzuX)#Hk7Wpfg+ydsB1%eyb~QXky0 ze2-PGb{o%DmcVl(!Xru?RL!y;8DCMRBFpW7;eo_`b|vp*&Kjj_Y(eCgrx)S%^Q7=W z`$*3;uEY`1u(GS7sH=<~W`wL%=DAP-algp^qyAF#9aT{O@ucq3EQ6Df0tjA}7YK8l zQslpMBp9ou@Uzl>^V#$b)Fvp9ZO6ImEP`-q2P3}VTRUS9aJxD(erd&riXY}0ILh{x zX44x`yC!;9q{JHj1|wL{#1g;j$ELH60*cqdM$0Tac3v@Wt(^j|4~mJamQWZ7UMGdW zbnwRpRp#a;FuS9we<($gH!;aNwJ!Q$*fLU1MZgog37cG9^X71B8%Q34@VRycRa>Tp zdWfg|xR^x(i0Cq$eC^LBisQ~7u;tTbbM({g5Q_uD+v)_Xxl*cM*Nr3|0~U^vy?1>8e@z3iiEQz12DV^!khkm z+*fhkLvXklTw~}D6b6Df<=VoXFe$`J4_Iu?(BmS3shSItp(*@E|GG0T6vMjas6TJj zarwe2eG>A5F#7VOLW>-wilYUOk)k<*9dQE3TcV-;8RJx&wnj5r@oqIeqgH_F2n*XH zq>NtlJq}kZt|{z{mEtzhGya&?Sb0I2C#nR%+y?L<@k6=()Fv>zEowK994600&BRQ^ z#n4UD;k{LU~3f`K4W`8oZmko9!+=8Y~ckjyPC#YcwN9Ko1vj(gqKWacX)C{o(s=}v7#*;t%$kwtz^6sdfoLR)9 z{6w}MJm3f=f8lp`AWP|q`u-DEtMWNrFT|@14J?m#LIoL~xwoz=*>dzo^_%sJWm9#a zc?8123;L)SVC;i<>9!HCs5;P`!1PtBAaQ+dGq%}GboE8;c3r<;L~)4c{SdD7%^a0+ zbAQAq-5=72ssrB#AbkBze^va?B>0#AlF91-*a#j1fb0WN|G>WsS*!39SqE`koc~VZ zGXv1wN`AXVFg7^$%?p3qU|9to96{bNh$o^deVhSqtU=Y_v0)@)i#FX;@7t=sT)A@v1E#; z>m~hPQqlZ$lU6s5cabpqnWj@i1yTY@MX`39Ra3LWhWO&^8(G2(439?G9^a{-;)roP z;vr!nwEU^jc* zWwyTs?z(58bIbQd%TqrD^VwvIXB*TFH>!Rh%N)XHc5$@xLlzQ&<8#r&0)?Hb(eFWA zSTaM(PNmn&ljdQQF@q|~%TaL0_A5S8;rUW-5qj^U@q9?7$cazqxk{JlVu^S3a+y$a zo4grFjf4uM1jf~fX_8(bzn9=xAT=k4N03 z;*dMW!ny|iyyjgAbj&{xjp7}52s;kVWwkcz&c zJHGBUgs}8hnQ*wP<~@$J1ZOM5dd8iK2bOi{@YN?X9#I?!z8>LnkuC;z^PA@sGRS(nz3Zgg!y#lrq3 zmOcW}w<261BeAvOhlaS0@_CcW>EbnnlZ&Ou32Ee+qEgVvs${on zsx|H9xLCC20IAhF`h5n7rATv*Y_iwujRk0MW2V@>LJJsHA{H}vl|oc`0ep= zyWj&V!1xSaLm2#$+`gwo&P2%XXuTUO*h54=fwnIXE5X*u;Jo!D;_J4#SS}01KgD73 z>8Jkc%)*NWLdaNY))2aiPCt!Kd@djr&8GLJ>}SyG>|%DdR0g*Hj&MfNqN*9!a2E07 zou)9N+Rh&$=N*WquUFq}ah^lGpENCybQ47K^E{`}ua!b(QNK(VP_M|w$*d=U`W-Y$(O>v<36(|VOPmxl{rx3|)M~(yv zWm2S!*7PJYDHE+;sF~0~`KfJLeDh0RSjyf*zg5=wD%TV`HJ9Rk-a;VVHLSegud8yL z3l$I+`xTxkpLW5|?6{6q3YN;x9vWzUgU3N}Y>mf?7si`hTRiaPxX z(1_~~Y$SA$jZIiU>sz=i>f13_X~cXR8@b+O1fR!%)OXO#%HC^ED-|+jyk*UeEQJMT z-$ixr^Mo)(-Fgr4mghII*$|k0AK`MD`t6Fkm*8-X>S+hImV{{jfNKj)Zb?NSEF`^e ze+W>J_)E(jv_4SVgJx5my;U?ZWFwyV_QzIK9Rj%wA6QaBj!Ml$=Oa{K_hJPdA;9g& zh&I`GqNC!o=?UTo%UAw~;=phM!}pVJ4)mEN+)sH8vDvp(U|d5ee}?$;$QC}E_m)4g zZ27emyd@1(&%u(KwqkND12T9>8TLq&VueysI865R^q-amSY1J_l%y*J!ClnU-ueXM;fh2GTll zU0XKn!GGghy8U)a?9n^PE5!C~v)h#wgl!VWos?;jA3 zsyOnn;)7Slm-N5Ai{e1|kEkBKeGr>n!MZ(<<3ibdQqhBSrV0B8Ra2vmvbzePYWNrN znMW4Qq?Up5GVJf|#!jw4-T8?xEX6We`-wI%{y((wve3ym#cR`N#6P-rjiWd)UWPXW zPP(F~yT73N+SCavC=P7@ity>j=`weki5A^nPM-4t)%c61Ky*D8bnGa|8};D7hm^7H zFtPD6c8Uc=7qCX^fp;>Yp@vQ5Wq$p>Ca@I>5Zw>qbEoG0tUQD+AIF6|ou$Y~`YFw` zGIZja6y2I`Z#(kug%zjJu^PW*3L(A#Ix_dfDj!FT{%F}aL&})Al9Srkv1hg8WhlaQvISe4RIR!Y@h%^SAgkN7^i%MsW!4-y!_|kAa z8uZ3tLLv0LQN|H@B?et+EsSOc4&KKWBS7{dd!-Fzw?9a@e?Z=(fEr#>#Db#u`VDgv z=x#te1)o0{p?GgEiumL<{%q|HQN9?ubg@oPpWCX2;#j4E|93Pk;j~9ssOc{y)}VVl z&Jw8Ew^6`rq6w5QiMDGxqcF^Z@1{~%;b_+hE@~QBPhhsQs6QgjN~0?&cWJayvbA15 z5&+HzppElSJ3myO)KZ4y!Vbc&+Vmthpe(9}W{gc%R6U4`%`eM}W98n)(@}~9ogzfYO znm$QNEJ$Bpi7@Vkm+ADWQc72P>}m|$%Rfi8PRbx3-zVfI2w3a&!Vs%ia|Iz@w9mem z6bEKk0ys#2SIRm|``26<70-S1hV69%sjF~U>>M&yzP<~;T_%y4 zts!S^99mo7J|T|-bgsjDUz|Pcxblpqy4YT)*FE?iDUcZpggdLH>`L_hz1y@`D%^%1 zG#vUy9?d}J5cDkWV1rJIbxS>t3(N9L;U(!OOagu&yrO$C`nJ-njdUl|LlD?)`*k-v zN`Zh~A5Es0dN^7!X={KEmz-Qe^JU(KSRsGtKdMNkYlIc@Jl8a<;!pvL{O)?*s@!%o z=2e7qYozRZlp_&MWa~}()K%OuHYJZkKdUUxHTI=2q$LD}_g}CO++Q|OZd(K{mS>Xqc6FsNHPp{cVq zEAqt?WGbEcSQJ+8*1T)tAq5a9!k^`%qm*y3bV2y=v4F`+1Gb+K&u=Zzp5hR_yK-3g zXq7UO50XCASx~cMyKFgaA>VW+UBGTIjjiRIhlit)aX(2}&FQ^@h;Dn~%uXz~R}~SB z-BI&m6Dh-wo_XXDh^77dvr_b3nuof2a3yg>@D_O$0xa)I!XUk~rSB_+xam2Vxfd!A zG@O?2E(6DV^CG_{ALpy)noI>RFq5qiAP89j zX|_qdqyT=H*(>TYJHYXN92N>Lm9k&byJGhK91;tr59Xg(17;7vf_LXX%iEDWhz~^b zeJ9*t8*xB!89wymUyN^{?i_^bkAm;f%?DgmyO z5;*nDyB@4ma1TaL<4%;8&m4g2L$HnV-@JUURI&WL7q;ldDrZ9|3_Kr-hIVwGsktTY zAtkJ3;m2%#a|QzZFtopI)cU51ecN!vk2NU4mg2zlC=LsGccfW)bXQ9^0yTRj<#VEi z=6a5b6)LaLe4WNI5=%m7i2UPLkdu!>L(|6oK@&hes*R%o4-!_c;J+_~ca8@Nl@>^m zPiVU18iOW^Chz={ngGI&B@+RAf8fd`Nil35huUw;rLl|-7;i)P-0OyN(nW5xATG}A znNB7V&w7gROh6}FB?bB1PW)6_eizR+XOzqiD4^V$1 zraRjo$RQkR*e8+aqc4{U2QJ9FPcQ~1{6!iWC4YN`!l!=;dE6g{4%AcM~04hq>RdRL6|fX zTbg`uEz5JjRhu2h)7(`o4+Of;LYtGSOM!10-DjhLQ)Q#Zpi`lO4DTE6VBrw#I_98y zl}tTbYXjHkB3x-l06WP5b>lp2@Li&ma*KW#I0qrW_6=XFR9(NKiIBDjSqK2G&*!kX zu^BlC)qKv`9E(+Y^q9=j4mm|j z=wCPx*G^!ktibcdsJ$pRv4*1UMO>UZts6hw0G==56@-ZIq*lY@NEg_bqKyXI&ak)% z-zZWkQj-igW1i>%CQ4Tz7n(4k#@Et08Fr~;x+ur&}Dvwv5!L}Ol!^d{992t1OhAbr6+p{V4 zzbM+ewPcOJzBu-8TY4*oHXAAs5N7H_cg@`tWydY|4e5W#ewTG{CM5= z97Wx^9o74O^Bs*T!1Em(6$@`1FQ<&qgQlHWqeA>2H>f3`I>JH>`DSBzx>-;|D}EzUqshr6Y8PnkLhb#N8?Yq~XnPPB0-H;bt?1Q+ zq!d(b@o$Nv$}`&ba$KyqERJ8z0CJ~d1yjHOl#LltmxlPV)MfJ0HB^w{jC|EDDE1xu z$b8H${QXgvul<1F`?1{v-yhL@qQ`gu8<=+f;5BLq@)(50zO`S<`64{8D;+bJbuAgY zfaV9$(Bqx{%@vo-hd3@YoFdI?L@$2(A4XMAPUC)xYNm|eF=R99Lu^07N4P#v%F@%f zuB=B%GE1-1ingUJ#|3^LL$g;8e`M<>@YhRlIEw#LhUcF^^W%IUR!s1WQ@pUd(M;H= zC4(srEYIKxw7#Ph{h3}$GMqrgEJqGoI|9FDc*K=oS&#%boF`HJ{WN0~u?ze@#Zhre zna(~7WYcM^5nguiEb0mHo4~NK@YiQmhVMQ@NXtIQZDZ=rhW9ivsRm)LJ3{$Nj;9I6i7zr$hSSdbKXpB~v8?s7=%^Niv(jNO3ru8K|Hsj3C#!bb#^;wSq@gHG(yKKoUQ{=>#@dKlE;nY81{$sv| z5wBG_qQ_F~z`;H}lzoCfSBD9eb1kh@ZNFZ$+@>jge? zyU!;_Qp-T>mk8^mP3o2DE5u*azj=wOL%#AF;f?OEDk^2l_}%3WHXi`H-*9#DO4(PM znaKJU zDQtv;s_7%*K~MJ9r`Cbo1ZE%76h_=peV4zP=*~m^r^D;8qdti3|8Q6|Y~8PUk<0Qg zRwxnPjEyQF`6qHiS}j;CTU5kC-uYuHuW;AMuto?$n?-(7a$O|4e3; zNOkH$V0iw)&z{QJFA)8kRDSV)nUtMP?;qK}MbihPHZxWM#lJ&1y?LxES2Pqt+n=}o zjc@P(%jJ@aGZ$!%5S)dvPOkr-us;J)ya=`-j6Aqid0LYJ@qLS$vO6_EbQ$hdYdcHa zp)cJF(@v{+}?LpXN>1k4mKyNd65fYudbUgS0&nt0V zam~uwnqSji8QaY&bcIb+!1pQu2Z>K_u;mFnrlBfoyEE>+rCtKp3C!-k3!^3ZkO68q zt6`12f~O~v8bI}6@^i44hV4@HL%Iw%RY$$_7wfN5%Rq7h!>@cL)T8u@y9U=5OV`cf z4+_z|CKjZb(=;!VT54ef=kJJXs43uiZQ=<%Sr;oFr|xlfc?b-*T=qUaPhkk=b&%JW*?2dXJ1SG2A&fXcz$H-X~t*Jb~QjdDdmSq zAzkQ4q=4xSd4UiTC1tOt4`gnHHnvx7%xpkJZ;U4TnU4BwkY{3NkjY7hO-jJXV_jN?uX~-?@k`%yyxH?4kT8)i03} z)9F&z-W)Aw&fm+r5lG&GD6-A4+J0XYKMXBX`F3Zd#5QOs$D89M>i5Vxie-e*g-$b? zwvV?zCPskYtq?7kuaGJXnOY;htoxKi+9a@?z_3;FZN09FBkne+{jU9WwsZxKw?)`m zqWVll-SQ*H#U=V0@|p)&-VUn_|D=8=!Xx8v(|ezwrhw<|(NbKgH<~YC*uv0I)|08R zv;u_m4rG|Jzf4g`^S!Q)Tw5rUCe6w@M1G312>HcKOOH~VcXYxgZ!8)v-{u9jcg8l0 zJ#PNHQpMOMmA`{M;U4Q_;5tEJwx4h&UEUz(eE$h84Gucffm#B#cf~4~3*7gK>lUnW zc2dJ2S_4=gj_~1kuj3S#GAYhtd(q#IQ5Xo{jcW^UZ%c_EcamlDo z^&U9Y`St9pSoIPZ4i{(q#Yh7*?}=8|HdUZi|EbnU)3z{hq!TlF59&Lmdo&} zasyTQjk`Zr7hZ-+kuB-@cR>vLDAL?LG8e)r-mUODi9cs z;Ll0X2kBouEjKd$H6iAh%!}(qsf|1{V8|%By1w6!bCPO zAfQj?uyEqEl)ILONy`+}bbWd8f;tItJO<$dW6r6z*E}+QX22Up7-0HTt}dpu|LSuY z*7ggDp6qL{D@U=&4`lxz)+nA})9fBL6Lr&gnNYuz6xfPxV4Wopd!=3IwVj{%L*F~5 zlWwC2*ZSv@zA@d+kC=g$2d6%lik8_#at+Wm&g3bs_-#q{djQ!93Os7pXex`saPj^s4?GtpY)O zE?Ua7j!UL6v|ycw_}j8Ct5F>I{wu-QTGxYJ{Mc*Y&``J>Co>7@WwH) zelgZqR(r1MP|UQ1!iMA=Y&A{ID{|Vsivm9jE5MWv-ks)UykatmyUX`_+wjv{wxbE!&eNz_}?)1 z3cuf4(buiy`ojByQep#k3!Ol0#0cJ0pYZEgg{>AS-GSX5fcPGdaJefD7b(V#3Fyq@ ze|!17aD+vE54N|7P^!3AlPWZ`&^MIAThNIwW(^uYKEL~GMbo?%jo1CDu*?sj{W>h# z|D~*Eb(D!Eew!SVMp9!y`t?|0bCqi7A_y@X!fbWTy7>v{d#-_LG~2rk41j( z>#X}z=_u!BY`Sl-AKh34>Te-A7`t(rKTp;Frmf`1XJ07)DO%pChqQ*2!05{QYnN(& z(!CAwnrWBVat7F+#9<-uj-&@O>-IYZ%+n!o&zNxti{7cHE7vad76 zA*o5_u$Z{O=5zXGPQxk{+BzQ5DnR^w*yiKMlKyZiNrVvb`#fw93&cS9{aAm~x5eKm zu2>JCfj4flQ%Ic-PUnzlJtFYW9RnA=SmNh8(}yi^A;=#@+pbghS17jahYZgVtHOk4NaC+4}`+_D(3aRP3A0>v|M0o~w#swu&80$o`jd8!?C z90L4F4hzC8DX<8=8RbF9FL|gngla-;KZOP&1a&yIoko29tb1%K0EVAIxYj<0YQ3TR zo#SHpYH6zcEL4yShD0s(xnbovi^ePi{)?q90m;uHd~}ybb%td;k8Kof{9eAX1Bne5 z`8}$4?JKnetZ`kyD&9GlIiG;<7qN|mRzsai1@k423)eSGvyy0%<$sxsQuc?&(~mDv zG&2bdA!@iWgiVS-_A9Ay>qks@Q&G{jW}+kg10-AyLvYW+*n8ExP^sW0Fql6bw=$FB z!1t>NkF4KNwI6T4hW3xgUa1i)|j;Z(xN5iDh{O;5-%x^CG2`kMvrE z^CsG8qTAAo_yT9|kYf#N{7d`l#wwmAJWkUP+KJU7C<<=A=`GKT@W{r;*!F{m!Mms-;J*xS`L4VwuDPC|de4^T7^)8Je~O+qx)d&d zFBe)cKSP&}bYu?)!TwJ^Jqp*G`^2nFQUpvr*}6DOkYOO?pq+2NXO4n->vL>+B?Fzv-c!_4dybkoa24sIla$)+HT=cW0!0I&1413MB zh4O`@tS0mlzu^r+b;x&D*vqoF2n4IQw5ZdH2hO+X!P#ATtq2b6_u}^a!a6=XVy0X) zop)c#s7UuK@?@wgxy3t^uGHP{xRy91ZXkb)2^jw#+bh*6ow1s;{V&8DCQV~Ydtm$D z2p`gyQ_Tz>89&@_&vyDa!1E8N-k|16)k@v=5%Eg8YOAO^#QQvi3wi#irgVz#AC8Nc zdjBPVP=Y!dDv%<0aV4w9OQnY6U$j&wWdz#-2Cjd?jCaGN9~5olf2f`7ne~w3z;gn_ zO@zHRMh55_*Js?s*<#>_xxn);XvH|IFw3Gq-~1Kv68}_9qt=1sx-|YOLgH^2qoG13 zDPiYj`lV9hGa3XE^l6-zyAK4Z;GVg< zgg@exl%^n}UDh0s^VVjf=^MnIQ+uqV?Ll~#;pFlk80Db%+~1;lLe1V@st!c|E{*Tk zuHM#GaoSP{wX1v|X`wjqyfDJ9jjd)Y>K++?{A^8qgI({8CUId8rdB$Z+SOyIAr959=tN2Ah?_fO+!v5Kz4Y8rtuf zs@gIzmPCButLO;Is0E&rlLLsUEpNbIE8{FjTr3}Nk-vQg(Y!2H>8o3$+EuldL%cv*&H1!xpnG`^ zi_cy@l^5gCiWkfL%Kw|rzBmDtufVGaH%>?)1L$jE_KIjc|1aIyS_RntJ!2eQ{D5tAbUBni{xAT*`w%nnivz>xNQ4dwZUNyL3~S4d6q-~-|KN$d>83de~Bm)3;YUvX~bq3 zAo~w!CVx`-0oVi0L~DJ-d(EiHeheUc12jK*e5mH_Eiab%)f#u0T~`3AH$*!lT)mGe z_U(;GpRsSjts+a3Vf>(}aT-6UTG4BkqHAcv!;HSNq#sS+&b~zuph}~%`9l;Blb1uG0zug$ih&76pZmg&AJKTvLQ<>S z^aaw0c4)lQ68#{htBvguU;JR!Oo{`y5f(RA{^Ao`Tw%l?`X>^FRlWF*G^8#a$mB?0 z{}l$8@`)|xj_7RVK?CIT6JUBLLKgN`QA!^cFyWyy2@KcL?>AyQ&p`9e=xtWO&=<;6 zSi2w|)c-280yO^#;e$1Y#wqGv8IRPrn?`XUc~?~LySS9C!wqsy^>8fO z+2Nhfvc%90&CS^qx{#{L;XlHk;3--DyV+wY{nPxM1t zrk<$y`QjF~rUu#*n0;hWI9n69V!*Py7q1}JuV0X_oq_tju^=rvPu?(vN|p$0Wp$a4 zEJp+K_u-kPSXcdrB|HR%G3Os2)rmeX41m6A{AIo|`6f~nY}@*w_Q0Z1=O_-ry+6W_ zJ55&QW4Zx|cidO!6q*SY5EdW*uaD~fFZoo)K&-Ipa$y!2AjS{kun<3o{Ka*8)z4@} z%{dPjvk4AH0K($fT6X!$6*%vTOyfHyZ?l(DXMq2M(a@W98B@^5W} z;{HFQ>U-T%IYA?D|)GjvGf%Z`dpK4v;rQ)}J1cug2gMXngq%tE>dw=5`)qpjOLcCYX z#(q>C*e=6!UX>fF7!5o5{ODzH9=7YMoMq?G0K51$yPqHf7pjN-t1xuE$9vT=r|v#wvznJE48FVq>} z{QnS+nf)7E`GD`{X=r}Jq0{`@D}?*$SmCYTm6iBVg!wYwcfxdL2v|P@)l2<8Ue4@D zUNaN%E@i*Are+}E+Y#1@MO0aq7jeN^P|6-dH(1hVaaFNQ#5tbX*0FP>zi*1&V>TsND1Mv|Sqe`CSOBtx(oX0B&lix|Ln$nxOQNN-M`|IAS z$284H{A-cJSE+4ay$oO8lc-wvxnsGySf<`Beqjq(zX0vDH(Xvr?SLzmg*f>Ze4yH& zSwtR`Udt2;;I{-o-9ri>fHYbd$+Aq~{9+CZCxWD`Ou7!TEkVtVw=a{-5X1XYgbzO% z#dcJ{ux=U0#TEG?H2a^Sf?Txn(H4256{&Y-Q&=jds#`J)X2CTtLzv% zkY3c|`Hl?N|7>C~wBTBSrUJ{hk?*4c^?&1AFJgp#hSH_xmDqrH&dYF$1MgRn^&Yzj zTFsfMXlD`_dbC$ik+T#B+Q;+khaAkLoTA6P)&xRH`Wbg&$O}1v0?x0-^swRYzblr# z1P03^7XEgf;t=fD;JS0!c-45duTA5}_rvG2lpPqq4sFC#?WxMo4eJpvls1FmKzSKH zD*CG)(z$`Fi&y@c3U6vcw3pCKrP_t&D6X5Fh{r7ZlWnsA>j?}8@73q|-0*TIlHQ?T zK+~6&B2DxwO0gTU%?3*!^S{>sKdEICNs^{J$;t8UQ>u&Zo3YLCw(nGPribA0*`!_p zgQ<(a_${)wy`fq0+_n|*I$e4MQXC@uHgx82KJulKN$a~RmsfR3SmklwU%hB5RFL5< zFHcuPnB+CdXlnU~3H)nWK>F=y=iTcQca#do9azD>dW^ig1EF3nsu1^5byV!yiKbdC z$r?pX0pWKcoRu;|wPk1CjrgT4@G&l6{GK%aahr|HReRH!1O{GS{r1LDY8)8vLikG0 zGs6}4ttouRO-rO2)PYCGi1Qtm_O(Z|LO*n|Ob{xFAy z{7t3kL-a(~as)MtZ+_U4J}jg)M-k3{dMn$~0$)5b-gp1<8&n+#e+Jg6Q4QTcnZss3*7VJITrby*NLi>)peRQ!v0)A)9Y*&1)85hm)v2q z<)sEm<9|ndz(n&!>MGFuEW#iC5>#_>ri}NTeuH%+@cbNC7p@$UGP+atTF>KlN%_); zs9gx_7r3Ihw#*%$XZ6Zu{TH;6PZ)vo7s+_3NWM)Zp8UOa{Lv0&o5fjcAnz}s$&t%u z@GUi9{$+fI!M0!7Vhny=!xhYfu7$Oro&oI%3cuOU1unB69kiX9h*xTyGnc3X@v}H8 z3@9um9-wzdO;<4jAFIw*za=i5f%ku4jRg%NwkeI+Zeb%;&bZ{f0LXuv zOjGR7Tn`Ob#Xa2}tT8fUqq2Sr6=eM3jzFHY!-F{P^4{0KmZD$NNiE_YdK1*=#Vf@d z<9);@6;7^8aft5-i&>7%e69e~t_Qq=a4c8~A4uP=jd_UaOsmQ)iv>-y2Tia1wKSWf zf%Vx47aw+rg-}q>l<{_70vyy6VErRhKi#>dYBsYzMn4|?Duq|2e8H@Cb5 z2GX7Wy#)(+K=-E{7E_FKHLus%pJ9c~t0651s{e`be0{YIN*5Y(5Dz|mw>-sx>oOdc zSwxkvI-jF@eBGurF95E;K-Ag$t4iDSlH)?|NGbXPeOE3IA;0)EM$o>}TGggXAqdOfQg1`v-(y1$+76Q$^yhNz< zgOsw0e$K>}i^}zDeJ{r!VE8+1utCS%dP*Pa-ly@qN1Ij3VC+rvvNK$Yw($eHbM)T-VE6#XWqkdjpOs-nZjF6J^IxAAiKT`h zy5}K0e9%bM`rP~v;*$dovH1{q{x1&Z)NZO6lSyEBCjZ&hW>Vuo^G^sbSyoeZ)yVoE zNfhXNF~XtFa^5Kwcjw#3-$-8_#sAg`41@gG_GsHZO+>R4 zz>*>U<@rt^3B^hU}>1M->nJ>+shQU@R0s4ap(7-zh!ml=1lV#NQN$!BFrZ-zG?0o$0!{ zsSs+??tjW$DHsfe5pJdbNgW72qq`9o7j4JjH4KCzJcH2EBBj1zAN2JFsEp92xg5?0 z`WHpv+I1wqk#x^STMP^QRkE&`76{BIFr1%~wQk+$MoTI^?iif7q@_$5%!p&UW! zO2q?8BHrnGsTLFm*30nYm&-3J;*L^S?%W0p%+mvsx7<~#rSr$? znwEY0KyjeE49EB1dtMQ@S3>m-C*_yVS^?oJ^CThvS1EP}or?`sQ2EN?Q&eYbs*?7y ztL0ZiRS^LvfnkVcDVN4=5D>oFLB5=b4r2juppB_IYTw$lJUdDbWUqnnkY;aKq1^5h z9Bzh`+z~@t#F*|KAXOuiVp(x$BwI6stR)bu^0e+Deu@aVUK5qqUiWdJ(l6S75ck=z z?=!`L@G`uv`74!EWUGbZ=W6DwPsD-kwGr*M_mXOX6i|obqE{1NdF%n><)rclT^?4| zQTHISw?9d#5`EIfiIArG zytpy6P+)los%|>>5OaM%wJ8)ebbBME7N9|3|K@xE2}Q4Fn!Vg4iM2?0UQ&u3yPHTS zwm`)PHw>+HE>jGP-oHAP* z6t`7vXC#V&+-(sJ+PAxzQj36gh(F1_l?_)QHi6-yePqvminPPXrG=o5Qt%%7Qc+YG zDhT&(sTyO(_8b?B){PjFFhIS|s5q`vM1msf^)J?Cp?S0FVvt_I1WlB0Y1Ou@wF@d5`>+X{vVhcG zQP1~YC#C3CtL37JjVb_w59fm7#B0Yr{&@2U)Lf_Kpl&n+nC_7Xhg}@LP^pNQ znYgCp%N=EegtMx5GxP$%**8$VUrK?#^h}O*6l$n_ZgU%|0SG=C;gR1vGNM6;=*A%a ztW(w*R2=9n!=nm_kxD)6W4X9^<5VYpbr={v4)ugptJ+@4U>J}1xvNWApc@E20paX- zJ&qF~F6^%*#lNNxEv}k~qH}G9n33cJpM-dc@|D<13+y%6ks<=fJ5>- zrQm&Z6x*irnNpm-gGLa5+ZJ@&hUWjObX`CsS1TNyD8-JV$0WWZq*-|TR3k;yF$1gI zw@5eEYM}K@gqs#x&L%`?p>Y=C=bWi*bO5bqBRpx!b=7jog}7L%J84LF`q~Q6dk$up z@OiDgW^5pu=W<+Jl7h=0pm!7|^qk$)U2VbMKvg@=P|TZI|E-1$fcCXjqJM+Hkg(n33_V89xLG73mxc@qfq z9U)C0|C*{;v|}yme5~2VR=7a$bqKqA*taQlHm*l}fvqPS4?yq@2+yoBSLGDAWW0;{ z31b4#TjEAnobqdvqTFobi$w9(A=Xbo?O3i`=>AL!{IQFKB{pJdF~KEd$4sxlQNn4J zCAMzj;^Lj1i`d>K5IPRETt9Y5wQ;N4jQ9iRezr&h!;P?b!12Lj#<6cf{ngg@%M#`f=iJ)R80RuqxJR*@O6rh6eUG1Ht!_g&TX< z`QE?3lxAw}SmeQear_f4z;HRiy6vUBKL^9u7LP?-^NOL<8gP6cqPqBMY^NTi1NI{x zk?@;M_TZ$*@QIrjm@@+6jssj=2q_`O_o6#)Q3nyS)|N6N=+=rc0U_gUDRnN3rX0d@ z)>X8vRhsBRT;Bg@@k!KL+jVdfJfT0%VButxB?!BA_Tu;VwT#ko~dyvH|1@W=k z=5w)py&%J%K0e)xFfrnXv4kUOIIySnasJujK7&B); zc!b4czCSz(e~fqn^umJoLn(M9HK`LFsA9N}^SM$HLn>C}n`r}&K~l0e^hSKxg!`&Z zU~>5DIHpXxxeS8%jPBkiq}}9jd0BDqb5)4SbdpO8egmZNLi7O=|5KSv^(Cn8IF9I?o}^&RNDd(qF*x3w)*#b!Sv&G2kKwlYHQ*HsClxArMd?-^uby zmpd*Y?zQj-b5p^fU&cx}$Pu(3^h+GZG?ZMutS##gu;osKLqeuZRusEr+_!QqW)#4d zr=#NdZPKVg^v<#Q3h~9*v6}m1*qRi$eHHb-+*E#?qSxyhX*K&+eBcUsrqK%oh32jL zy*Esewq8g4{E0ayD9((z_YEEttF$OZ5!T&A;eLH|%oYN(W%#AE^SvT&zlAmFk&lf7 zu;RB-NxAoaD()HXAl@qG8*3(*@w*8Bxpd*0qTESw8l)HcKIQ&B*ztQ@Ui>gI&&u?N zBiL94#+vS9T6*>8@<~y!=MQiWiA@SsN^uhy9tOLdag@S9@rPKa#tT2(QKT&{#Lo|W zFr4B*??(vtsSUe8P#x`Ktj>bO_57KAU^pgdcJ-U7n&@m#$izTTs)=tWQa{(UK`}yG00+lkCm+QDplS?0Y~Nop#nSS zk+p!@k8xuRsKe5^v<%=rL7_j7~r*+1n&gcvJ$RX_#g$E3tUpOc<&~* zKmy$^89x=>U;`}^?7E2Jwenh2E{|D*c&TBX*sU?L2v0CtlUVE6dI zUndo{_M8cPYvIiJniK|h=i<_$zu!}jKhlsJ^=!OYa|_J?+|GlwoA^-*-@K00#fgv@ z?c>XD7XY#IqKX5**RUWzCw4xp%JTxu`T?)CDD9)GYga1nCODictW<_o9JuX6I)FXu zVUk`d!j}A8iD)W|TPwit0;s*r!*lE}hPr4ACh*UyPH^zx7ua)xLpPqyXdkN-U@L_9 zlMHs-1^8VU(Q{2CHnKr`KoRoCv4eYAZdj-iFz5v3x|_`yt>||6a$GDpcZdA1fi+!ur#B`K7VoSv>WDGN(n9k(~`@0Pmp{{Q@4Iw39dm9rb#|_>OPuF za!7NeSIj(`8R%UKC6|-%>t=S-v~&XhLQ=tTa(!vb^#Vy@9*t1DfJdy>s!QM(+-lFO zL3M-u_QN9Q)(Bs&)K^!A<6>I90^FelmScj(_O-E9$zU&wmF)gl3N}-EPArEymXzEm z9}k58$50;2P43#BjbtEs1%%s_cU@MrJ7s)f<-4qBfaevlgupa=rp27eA5~qrWPM0g z0of~ImX)KrdwgWUjVYRdYO~mE4}7o8GYFg8uTQ0G7E2Y>+~ryXIUXMKq&o`LibOeve*4(P@PfOm*gjl4Nr zR&0`sEsvo8ZJ}IRD1J-wi=vz2gPN0$WEXl5PRMk(HJ}BbjD$50`4S(TwFMD2~bOW|oWrW@4?P3gf3nY>J6Ypi+5kN_6E1J<`eC7miufmi6rbs?nb9;-h` z%LBHz#cF(?6{HHOnA@R-VfQ4z3DlFUXT-9;UmWA{A9;nLlIiD;v$Y=WDZPNO*u8%* zk644XJ*ql?Zzy*)f$|+t(~7$r8!Nq{>xg(-Nw<^YVCrQ!|IKl#wT!(J>aWtG68xb+ z_|D|dV7rI;3$Pt>_(u)@qV`5lAH`7ZK=>{QKR>vXdHo>nL|p86-z=Xh1k!g+;4hP; z>{A(7Q#aH!$N$3)S^$u~J63bp#4njX+vt|lhQCVn*d6VGx<(|IGb>$W>4|vM_|}mW z2iEsOSYIzFN)gxgMtr8<3$`u-n@?c4eP!`Jqe$CKTv~iwc`P1w0=plMdhUhH}>b!!ug+)&usbx ztnUC+Q0AhU`Bb3Tg}7)7t014R0{#z#EMZ(z@X&?K8GF z^ErV12#Y70)XFp)+DBlPuOln7=@16MNQ5uMEl^@}qQT5@vGL^>azDT*7==k&bB^*j zwnkR1B#nIr(>sThafF_nUNssE@Xs}g%^mO;n8uJEqxa6l>iwB-2LoU%N^e+RL`65Z zjQ6YJ7fm|?to}Hxiq9(>U%Y{O%Xn0@^JO#U!UOpya9CLAD}`sFyKmZw2o2gJMF!F1 zFt-QfSA)rE6a zoazy%`}n~e`)LD#>QfQ6t&5wk5WqMM@mBR79-ugw`RQ12zNX$DyB01v<#0?N{^ktu z-9o%1`e87^RL$e&mN^o2mGr*PXGh@r3@rQ9jR6;xI(f~+48OjdkmK~Ud3u2)!BxOx zC8jAkth4ykEaor9%qehwHtIQ+F_J$W0-dCrgC$>^w27H(pgqE3I zS#YVvfRRc|O$)geaYxzuautE{i?D#F4=0sUvbYHji`KF`SX>AgzZfShSC3kXuw@DA zKe952hf9I*R_=(1n}4gK-r8tlSJ)f99b9{<8nE>Qg*Wj6V^q5mwxw9ZUY{4xr8)3E z1{Y_+?NlQ*V3{m@VG{EnfcFagzJ_Xv>{yQCA5SK-U=Q$q1;VEn?NBksxDxT~xr_PJ zic{V<^hUHo-}%g&h5yL4imcb!cSzTam%T7x{c7~|pAA$ks?BS-A~9)nWBCdIuzoEh zl@a}?sQy^5by&3btFg?^0O4hLOmSZ}_d<=V>#=|eCoXdD4@kd(3`6$Zdp9XEn%?`< zNvOGTSTt)CkR4&MWk2O{YS3=Cp=-R!#Jnyr@v*3AW`aP?76v3YBAzlyV4H+M_)Q!Z ze&3fK8K|r1BoOf8ho(DK0921d!M`P?up0C-zG*Y6EK@o^^N@k!TR1GfKA7%tq2G-u znv2{2vLh$J@~x=)&on8%`4+N=y$vIVe?6<$T#*jg&2e$Zop16xXFzW`srrDcQpUh7 z^07U~9vsHG1KDr@e(&X~gcT8z-&VGbYDZ{pK`GuspL+9+$BLASoz_yRh)c##oJsPd zIFNcDif?RtS~b<0_amOzs1XYu0;3ObSS){VtjEC#uY<%ou;bgaAIQb(1%kra{x_@H z48SJlOzaQnmeh2JdQJ%qkCvHpTmLpXR!!l#-n3O5yo?vp^YU{ zj$wdPa~_ilZyWA;-pNIh*y2Q3Zu2-!Z~?RA?OMjeFEn4o6jR=_a#LVDT;fTZj-N)W zW)ZK;h~IwnKep7Q-KZB37R$FPl_`*CO~bkI`*Su+fsJ=!*^QUXm9N*rf1*prLe4!; z>qq+qhJ+0J+EP@u+kOSbdpt~J!6z6JR}l`qc~oV&4A=OI$va(&ok#cOvR_BZ9p^4G zOAYmK%6R_E5p3+kNVvhpg_QYHd}aCyjOiwa#O%Wx^22yw?Qfy#e4R@-QT}4Lj5jFK zGlk+X1a6~vM7H@+in!$t;-{|s$NVA~19!35wR>xMT+`CtOMoZ5#5xIVtp@{vpb%E+ zxj*|+MZN7l{zVNs(A6jmfCoec+lfCFaY>O4c!=}gH3wUK0QCvVE+C3c-X2$k9WL%r zi$nLa6+iI)5mx(^yN4VifIc@q#_Tu9cEr$pn)Us&%siZ0AHT-7&TFSs)zMsAg@q+TE>^yJ6gFIBNb>r2G7 zkK@^vB(VJzhsD@4bAE zYVj2l@IHgf3x^9y@n`5l(v6VD%k=F$RRNU$$R)*j)5w*wW+PQ+7%ZPKO`HCKTTUSU zXRJ=vT*5S^I@&LYS6%=09mRq7GF&U^txDYX74?^#^buwZp#C>h(@A$kU85BnF7Z(6^?jLR7|IsQm8KRK9EhoBtms zte5s+c!~S1E=<$tj#leK8w|YvjadR(-pKUsqWKS*PT5E4)8{cS6Ab=eo;sN>TL6V#Jasye(dO^l}K9o|Y(vN|8AL5SE!RBmr4$K#Le$Axc0c>&3ZM=Ah zUxS^vFNhWgCZ3?|6Vl?8P5&sBuxn7sF5mPxiUa4fAiQwXT()up-G;1)S9x=PB^3wC zXXCIK(rkYwv*W}xVP37;YX%I7@9_s$QJ z11=>t%U-XWB!I1G{^Zs`S{)#ME`*==?7mfLtR*+%zKJ<2QyeIt=MWFwuf5J6O^4QM z^KyA%)KT)aCwgG_7D5`|95+uYs%`lW@omRk0*qFmyB16QdLp}OJs04EniH=}=`l23 z@Esv>=aS!Z)i6$6X~5AkcAud>O`2N1pxmV2U+6n&5$ z5_BP?dG*GJMHqnRg;Dp8+7*~@$nAR(#CujeJd{=iNbZYp;egw_lz#Clig?i}CV5Gu z7i2j5?|-%_;?`n^_}18*QavaPOfQZ~wim6#D9xE(g5yFc`5IRTdQ{^jLZa^?r^mc) zFNsRxD>h{91g4il9c#VeZi}Hb3jXfVoVtHN^-74YdLcDZsvc08 z3mM-|dsf$deXfIs%ys!?sMhIo3~N*3P( zs#izYzeYjTn!$y*Xf!tC#s?T*12g1nyja!u<^aSm?w)XkHVhaai17JGomjX6D(_X3 zR9?H4Mx5^+#ct3G1O+e7D_-r?{DVr)u3p0SHi7W95Du?>^lYn?SoLd+~T0WinJ4P zA&)2p_Mv+btLmfZvE5bJ$pz>UQv<}mT`Ag|ssOI*IV^a&r1YBf3Z@$&P5148*?$K1 zyrHb1xxSxL2TLQ=Fn6>RO+IcyzRJ;V zv<2gTcI&^jq*S1J6IAl_V;hgKaX?c{=~7RhDQ<&F!VZ5ao{)ols-xK<{wa3XRJI%e zj{lGA5L(QVVt>(h$&Dc#(rg$uh6N3P-l3$k}D&8_|2DGoZGEX$IK@`8)K<@0bwzv_SsBRm$fx! zsjDr^JO*HR8`6CE;%hz?2X$@9%*Eo`O}qR<^#i{N3XBa6FLe`(B?NDW_@~kpSX37X zZsf4|Ro5ufeRD$?Z<_eOIg6+!AbERUtkAP?rthLVNfIkt*j`ae??AoGRUNR{2Ln3J zQmSL>h~@U0Fi`e_fa{&mC=5NXnmgPCX3E8R&3DNK1Lr$q(wjP)JoZ>D|6=hm{!yW{ zcrfl=h?7VkdKW)0VT6LeOxqQucjxGEgh~VDDa;-xxm9+j(ga&Kls@gXfNnzo=er~N zt@XAzMLM7d;$c@xUZpsgbs4_fdv#4k+|d)oH)Wki1N_{J>4or&);R|#;>O;Hhcz_a zr8p4Zgbe>@WTxnbizLB+^(?ED@tq#&-xkgxaYo5j9$Yr}LG^t?XJ4c0!L0WsR*(ks z#XGCn-VbMfKh(2+bQ9H~M7@9snyhOIKU8XO?T_l$7D}B&ap3&`guj}WNs72`Ae!)n zF@q=!#3v{afAPJVV-;!pAdU+kgQehy^w8YI!5k86P1>h=D$+0n@ggOw^9}&c4@KQu zQyp@=iR`T+F1AY8%MSp+LUkA!B=l3*!tD~7PUD(}qpp%y@3TW5!1@sg7kAfEO-ybX zf4^ihb6bG&BhhW$_}$~2jKz$4Ztu50rriLHABFJPeNVS3y`vqC`1#nl%M=I76Bs^7 znd1VZ6a2HbF?@05ZId2dpwZ4jV=;f-x8M)JF8U5Ybxs6?$^h|vg-vospByAvrgmLgfc%Rzxwp@W0&dNyC8RrQm3*DP8KY4i9YB$EfYA8u=sKPLD`=Mz4l1d zJ8+d0{E2>oaN-Pv$i12Hbb7(xFq1>#rZ)3sj}u5g3(dc8=qaU{P6ER?>$L9i42lEe zXA|i_D>-g)LW*9pf-J=6pystRm+<3X!1TG8kklg5W0S*;DVjWS))iDWa6O7=$a4Ka z!I@qw10GlD#{&P6f1@!P@#tR-%TsY+`cj0$PfTk?VNP?z#rP9>`2jG-bnh6c zBso=8Rvf;W&4VCrUWPR|3nfK=VypT73OUBfCXV8*LnFitT)zQ4NSL!xO43R2gC0W>odz)V`IEDz2vCVW9jL zGTX4Tlf`$*m$;yefUTrA=`OjDKZRdC1mY7M{EL&>B)>T7ojbO16Cs+5Wzcp3@wa0o zxBF_?dVFp$xams(eOoomkeJzJVZXG2R42e=140iW}1x6yRndy zmgmW|5McivgqIHAU{(GCuf5zP3NKfwPPFO;g0seo*#s$U%A;CqISCA-w@UAd za_kW(??grCzi3M-1(?z?%f^`OJTL~7zk&&6TP~0t5@>)M(=cmYjbhmsp>QbFrT7yF(TH_R!h-uyUCXj z;`7ba8UXWeVWH2fd8uO40k;qF_wW7JeWE&m^oR=4h51wOP!Y!+RFih=<~k}5tiOwO z&nSvtM1%~+dzhhwIe`5)!1?N?NhocrFcC;RS{o*t4`DF1x(Q79imnJW!A@-q0b@mZLJfl*aj=`{|WaD z!~;cCiw50OEZVrZ^jlgqi~)oNAyEokLGLfvpP}SqZSn0?60H4m4%4?U!UxmivxXNa z`LglX+EfzQ{}SO6aWhq`Z>Nm!f7X`m(gXEhp?F67v(ZYYm|i1ZVb%yXivaQ8a9CIy zCylyEzw+TG5PW&XT~0P}K>4>wy~?rFuSReF9jbQh%kzZd!1(tF4-S0HEG}pJ2OQ4% z4zR8Rwo{ayqdf8@NYQO`^ZAy%_>j?po|YJtfoemCrl%{C0Ur^+o@WV*!U5M27Roo1 z!dlbk$Q++QvW!@*QfsOJNdB4U7Y3h~!W+=*p2jbz@>*(}i&PTW{guO_U&8K8o{0<7 zG%Nakw$UuW?r&rYXJ@ppc4Dgm=nC_9EFeqWF|3P#*gvp5U3o@*$*W0D^iuD(YpB?yw^()Z&KZJG0F)C+O_Z$EFW^VcH6;PX`!1}S^p4Td; z!2XBiVBatJ;#9>a|8i+@__BZb3oOuNgI6M2?WDJ|2>_;(6&w`NaGYLMgcEVm|7;A8 zngG|yD1!{wzjRcY8Iy=*tf@SaKS>E}*I+{Y@sg^y1<73~Oc7d=r}SHX9LSA)7A)aO z?>?+~&k^qqr2WwDxLV**tnfPiv|eBrd> zKug*x;5b3qAQFX}r92`=j`FDbXe}vyJ$;EGssgIM*lCq2;$f_acy+gKBh?M2-XAqM zvrFks>8F2O1cIHThPCCGAaJ}A>M%XJ{7va~b7jPO^5H!%kZs2+sHeOVIa5wh3T=P8mL?S z2HlQEC?43kH(T(4PtzFTaO;_Wl%^UD*tOMaFee4b9?YeMBR0wB!C?{%mJv&P=@I$5 zI@xV%!dv0pRmw=FSFFuVv5;d^Ll{?q-px2HzVDlvcwYa*k{pF4?<_QUeik83T$8$! zm8x1pQ2T=l??NdKv<^+=7r3Xkc&A9~nxk~;h@8VI4vd!Je1QY}6mfeC6#u=b)C`IP zpIdTR+%)^5d}R-M+R%!yga*uofAjF|1u){RQPnyz;J8wRQ^s@T4oaaonDRDQ#K47V znNF3P+M=rMQF++x1kOu4g#F?NsCes^@#f=>#L*Ifj(?0Pe`%vXi(kOkxL34yGmiF=_S5FoiKCx zvgMge09_f-8S%O==9s8b;5fqK%F*QE>g)?-^W*rJXAq9{{L+T4F2J;R=hDKLbSZoQeIMA|1IzSD>LiB@ zfciaAw|^5$ywZzay@+nM#<^2Yj!NhSfct&8qO*StnZI-T&}FDap)vCoPGE_)k@0+(htC5SF|>JOf05>+}{xz+T^|j)(=YL zpE-V&#{NC1kDI{IGXI$IY-t9hAB=D}XI@q?h+Bpre*MD> z)wIJfL#wTInEeI9%kbReF$SeWZNpLA)ppetf`f4%f#}Jw2W)xAi9ZsHjZLnMjumj9 zq`;F5(LI(b>K$gx(7In$kA2orSi;@Dk*e-7jz-)&JP(^zfb?S!wtu`nR?+VwILwGY zJ`JWYkbW$dx}pA9Ilu-@Fpon`sgI^JUk8{!9^rW}lGMzffU0s#nW!>GdI1wObvp%h zP-tf0+l2St1l_a4O6)3X`Twfvc!XyJ|WX zY4R(b>A;T3f@$mO-NI`*K>kRqP3v8YRH1t};$o`|yF6ZC1kAuJGu$Oq^N?jG7Seo4 zvfQCC3T6>QGh`EKMZnuJN|Uv-F~{%mefaTw7zA=c%c|w%Pf0=3ZF8{rSF58bFJK_d z<)~mRECu$XmofvQutOim{!0r5{u302^{K8G*{}n(j(ND?FurBO8qEHDl+J!=v}$58 zF5tKr(zF~u-vRtzi1paMPKta(7f>#QG)cMRSa=P%zX(;Yd3s&7@Ha0`@nC)$b%t2_aH5#kwSSI<@r7whZS&Ai`-)Qo% zRJs_lD6*_1|K5urwkQJD6BIhK<*tsbqM+Ko3`e@Kne9;k>zCugYI1Lt6)~(pCAA;^ z+)JwttY3-nubeqm6P6Qk(LJDu961EbzY4RQoRq5>b^`f?_G*rctLMMYbe?PtW~q=m z{<)IHjkxeDw-lK~|HH(!sAci~4YC$!uw@-j6D;KGG#h9HvH5xwpI7Ra9D)LI?FO85 z*AHf60T@qE)|+DSUd~KME^QJgvaqfsu6cp!e=1MC?v)6XS3l6aFL|iY(@B-(J zP=v`cb_a?tU0-$!#lhh3M7Y+?xhgM4w~OOK+z)9~FpXWmL`d_e%;H&!X8Uebak-DB zJ;j0ddk~J%JyeZy!(NVybJl#2&jbPa?f9?m`%qIUz)4{E|90Ag*i-<#kLR#3c&ij# zg-$-EeJD9fJjXmZF!lSf$YOP8qE7&vbYqg{L4`HLXqjN?51@~gXPq1(Xdqe+qW-~s zs=o?nrTZ!EgS0mhaCfKPr_oq zz3)6y$q|r@x}R>5f~(Q{+20Y;Y^btnx+3aGLFJ9}lj!Eg6yl8m(+?-|FYy&9;t@ME z9>GF;#78rK35b3a;cGdnvSVh@P8Y%9(7iK>@gGe6F`WMPcV$Kngv}1D&Hg`8yi_22 zDr&FYy6Y*W`d-HoZ+?0tTj^0ndO?Oab?Z4n5x1T|@i_hC`4k7TpG0{1{J0;Axb76< zeRGAdFe%u1gvBo_i+KdU?58n9#PKpQR1r}A48mnTcV4ULH=ITM!s}%vC=PT#$6=x5 zX({>~4WT&^5?jnEAs@a2x}QfS=kLI6Yv@bU1&)i)qL1-s3xM?(G2zbJrXF8NcVmjC z=iQRb^#Rgf!V+c$g|e{#C0H&4UPie4h@WKu+NYs>=O>@vD9zP6vEX$Bd&(XZ7<)|8 z{C#@uw35Y^PNq(JfJ_W*QH#Jp`zxsbcb=ZR6yboY92dHGkRqqhb2Q%(($x57J*kK~ zuAz$A-BVc{2}pmPM>vEHPcm&X8E=r9u*2(nVm;myzKM;hvTKvvDCi&;rfK$^Si~$h zkpC7Ie!Y1`79a<4^KESGs2Z$JK>a(|s&zS~;ADF2$?Gmc1+Ph?>QUG3EJEVz?dv`6 zzFF^~u+L8^>?b=kc^@nAtbGr*_J9iL9-wI7+*0^XYB^sL2p-T{F?6@mfA)u{!LQ;( zBgKK}E`)Q8sy;~(H$39FXwOqZjuimeA7hrqTcTxGjhq*j@tElc7!GWIf||;`D(G>3 z-Sm`9672lkyVJ6>4}^b)MXX6at~&bQmhqsB|N7I~0^OgZ`1jryRc*GsAU2C#BAEQS zE0qSazr+f~2qQBEm9(!=)8UV9HlBd&2#ddV*Yh~lX?u+sicR?NnUn#1e}ib>6p>BQ z@OK5gP2>-ZE}IZRD+FE*L19+>e%5)1!XWK&cO? zvSR&9+h_&B*ndM6ojQf6jE(&}$Hl(y$PEA%u!k}512c5nwmCy-sNpBB8J6c}{}#~y z7fSa%EUG*Tr;HD&-a43S0s8;P#f5-fQg8^J*-gJugX?s32Pz4q|AUe-`=rRZ)Ma;b zsEl|ojLmXD_rI9`y|bF6)Ysyb#Ca4r=^$Gz0^hw6PCxLmwIZ$+I4*?mmr|S1@@^rd zNz9lnN{-Fgpt>431NdHafDR z@OY<#^%`(I8^YO|K4b%(^E*4o#gO+)WU~Yu&ymDWE^n7I^3y{lE`q?gs*&xVv9vY7 z>zoLe+hdj)Nj~0`3w76NP?{fr1bdzv6C4AsW-=IFc~IHdXD#K5>IDL`7^d*4r$-3S zniqBL_S=gKA@0+VQ^XL}>Rf>>QK88?Etasna295vf#n2-*YZ0xmQQ6v4!aM}A>?l( zJsLo7!%fVON{YQ1tn&B`1+Y3S34Om`~_oh(JUk-hOdM8POZhd%qUL@^SAbO!B zzQVqqyh5Rlsc;g1iY@1l<`f357eO7_#x_tbj@^h0XID#+i|N#t=u3FR&UNZ?j8XJj zijp2?H~jmoq;{9v_F|~_V`u#mMOs@N@!`kfSR5Pdx(rX)IfzY)&_r7aE-rStJd?+o zfbJzpsWk5EU7CDEkotK6rBL*Bg;(;4EMPn)X{t6$Q@b*yc^2VoS;;#q{ePl#SigRM zeN;;TUiu6)<2w0A|Prmhj`z} zl7FdY;Cguui!=QOt4;wELtX(h+;7vA?L$ySdO?OiwR+n|>2YgCR8%}{fJ{&@=Kh%U z_jAomaROZ>ETvV;4wtApU^{`~)xaUIGrd4-uZ-HXmB?#+LnL-A4Gen~Ov>?MyvMX{ zsG7tdL5MhfmzDygua?C35*(+lDNS(_m=RtqGPM8?Apqs8b7~4d?t45lW~zZXUZt9; zu>;Zva8xtv$r9DJkz2;U?yo2WKD zwY4}dwix`2AG84SV}fSMk=&>Jir0 z?~>8|y60>Q^bPTUMqv^nZw@gk?aF$YW&kU%NA;~8C9f#z%?*i}YD%y5HJZPX!a(~*sNSn( zk4)=+uf{x0DEM6pE=~v4S%k#UrvJ$?JQ!G30~S0XEs%99kUlsGHra&=tvy!fx+W<9 zph>Oiv_`;q8SZ)H+X zxk(ZzK7LvX+)D3dCAK71lpa;~J}$+VT}O7%TX7l9m=@^+Xf1)#tr7khKV0SLXxkv3 z?Z2g+sW=dtz_1ngq;U_W3v6vUd&RSV$YA6idONN{tlMr$rhhQN$kT+4PAU2&J!$kE zA*5(It=)^{p7>^*o6 z;bdWHR1+Fzo!AqVysx%A)8I7p!Zhzo3;F627~Y#FXz~qDWL^sNkW10F zP&{pTS5*T{;fR+ilr@ct1K;}~T=uXpTLXc1w~VKZe(y)c!Ibw+;`0V_)%9RGqXT_86M;xpo&D>2BLVkb#vDcHQ>bzLNuGU zWs0IaU@#xW;sU7*g~5#>C|tzRu5l~Ejv?g#W0zEKzCTJ~VE#}twBaeoda7B#IEu6NAIXVA0+GZgC7~(6_lTzNI zyiw$bbl^rdh{1i-D z*S1uqQRv1r&5B(CQM6t_`v@#$#^L`|@o~#k#4iMOV{6^Qvv~2BOV^inBSV4j}aax(xlY9_gE2i%;chCqn+R6017aE7HYq}Iaw7CFwRCiY|6W?R25kIIaug(gB0JE zUKMf?h<)Q)Jkp*m+kxqGF@IA31h#sGTAQN~5A7LVnd$`-KM&!#1)7ymYVI{3@gnb+ z$!hchf!V1;u~7XcinMhBO8-6Y`;Owk@P!-}qw@L5?-WCQbc--cSjcl0ngp)PaJQ&q zs;Gl~G0w(C&oi?DR9}Kh7FYP6YJxIYvEXujx`V#~jE_e7t#|xbYz8Xhl<_C6mmj0` z2f8oi;=;KQDK(PDnN2Z#B_|g8!vulk%TVv@yOAT6esL2VzGMGAj~uE5jxWa?FZ&c! zc?OmhSY*B+Dfns}DYE%W6rFdtiE7oRUBz*+(9xTCvH^%Lr|fQ?+v5={+iKJ`vDU6Z zq@uv|HCSjva`f3qBhLYAQF)yXN94Z_47;54bj2)>Z3V|V%ycls$xomH+1F#S9T(^8 zqx6q)1L8>~Ubmt+kX_=iu*fWB)Sw=u3n5K`$SZ910&KSt8%l%q;;wZnZ`T})dVM#J zoI>>i**9`nZ1pMBbCtRYGx$tx!%Qh9hF%~r%wd1BJW;A`jYB<8M1XSONPH;`@ZAIR+i|Y}44jv-Y064#!bbT(e-V^uV?xy5$ z6Bs67a!84-CxP#KP|-x;ibpu#vX`%L#Kj5B;R2&>NBKI}@_FvqYU8nlkdKvE+!aVK z!!r-HP{l%Q`%t{`^2OA*0?O}4wDywIs&h^O2M}Livuvl$0?rc{R;lSVW-5(!97O5( z_64jI2f8P4-^BZld^v+XOO_))A;jINT$_}3kiGYpDh&J?g*hO;lqy-(>qy8{)~$)((A0IH{Q zFHzX)ke|YWW*ClRu95#VLGU-tIK%I9zDSZ^OS5lQ z-a?i0K4)PII$*pE|DE1SWlrt4xw!Z;s)6he0^{$Xrfh4p8s%LfFpAc zrR|^EgecNZ#KrH{aWbue@%MQaq4jhrl|;sgGxGqevovWf?{c8}Lrn0Edh2oe$&D$R zkNp=MpalcdU09zP&vyJ$>SK9?_?+(39#I^u`(uQi8v71KT>Ave6Zg+|d*SQ>RKz9XcGcza5^4c2+X?#T{3HVk}85_+3e1DBOTJ2hs=_Znkq%ocek4x}_ z6+rnnSorK0@v8Il=C_D%o$sJQDel+2!y+zc8=2|Mo!5KJvVYlv-82i39%1psgHQ6U zY-oq|1J5EfUoT}Gqa(bF8?}TQY-+zI14}-&Z@c_NG>ic`>3ypa9?LEJN7TPFd}a6^ zavc;#z$YvtWkC2^tZ4($@EOY(dGa)8DGY)ym|=5-NuJQii2{Pd9?!T_XQ&?F|5xsd ziw|nhH6AzJrf)bsJUbCeVHg14QFZs>F&`9ZH{#;hr{iV22t(ip&mw#nD}{fjJGPde zs3kt~He2HW`+p%nd(D=29-!;B|M48+2TO78xx)aE6E@dr?CH|~Ci4S330Z@E1q6n` z9|F=d5~8(Db*1_Ne^Gt<_$&Or71(<@VPKie@4+~{l3}V5UNx1xbJN2jQQjQVgcbP8 z0u_7&2#6=17|FKhVF-vE7P}p4;BjWfg(;d+E9XWZv4viGOIr zz~X03=1-6QXt+peu2(h!kJ(AC6P3;I*p1W+Bn76=#KBwUDmkp#5l>sxE|}tA`Ew-0 zfjwc@QaKz6P1fba9F`*&gJ=$5Kf*!*a!MzZ-f6Mt;*x^3kmM)Q>0@H?8;@V|Co~B~$@WJs*d~u@gi1SwE<) zNlR2*Pb4b5q}V}}qy9dq;!yA%Ho<_T8*%a2#}1ru!1Mf=;rk%}ElQ;=1+dU87tYBC z*MaZ_li9X*S?~6l9s<%9N`_NM#4q+qpi}QHf`F%8;An3}yR9&mnx-vWpWs0ABFX$F zO#5#y72yD16dv2P7=-iuquBHQbs@e ztarWA2vsGw?I+Q{%u9#4cdXFY!`ym7hVzVUT?S!t@YfH;gSI9x%Lkk;!(nl4jt%k- zG$(ag%;_T&6*@;|VJV=XcknL~5(Hrq1@cvs4yr#AnYd6& z>bIy$FAx}J{5%`|5hcv8kJ4L5K5j{IV15G*3&-N5jHNWJr_%#eMoekLxB`6VsGsI? zpN}fN_J*kUaKY9`s9s=tBZP~z+N_E$8X6;hVQ}OEDh}q{fR^sv8KwkilJ^wW7N zvt3GHc`zEUB_mYE%hZIloNk=*ismyc(^IIeQ z_4qeNaS%7Q!A5km+B{AHx5b2p_hUQ`Z@5Sb95^ccrXQ^naK9ZE5ca+)^N64Tvk~=d z@YTvM2LSiOc#`n(fi!9+J@o6<9<@{$k;phfwde%`vu|<;g$MA@l7Mz=2h_eR&ldR` zmq7lGsOn8hDb-3%*9q~Axh37S{xAe&xJyP`m8WO#j3s<1uuis@Fbw`hP5nX=n=8aH zbipiN8nlz$F&GM6llis&Ss!Ju8k*uHNiZB1%-hdAJ{S(&I4ne+mHa~J^%PTggj#%% z(r?p?f&M+P$f8qfWulxL(=>ag-2F+b38SGWW+^#4J3rS7HL>(UZ*o*Gd5;T*LT{c& z^SA9~YO?v-LTf@@i{tmmJ859|F-iFKS4#h92RY0Tj=tcJA=LAP0ni6Ee;ZeZ?PNh+ z0{W6+Pme+fLnm_w4~782!D3Hd#pZ1gcl1LwuW!F;Oe+ZN?~icSqzA2(dK(8I9$(|$ zUy6g_A4t5d|7fs%^ATpoK)H*+>>m=!E|(lR;qS!o`|IcFHA1tl{ zgdc*^T_RSq5Em%+8j5(O%WS;;FI&Ku;qZ(L#aiW>o$A*tkfgE{0JY7rtbb0_V`T zZnBR?(Wk@SsQhLp;$oI>kN7$nC_V-=bWG{1nodk(5s&)cq35(raBRlOW9S`T9>VY> zNrEwSw_sg1n*!CxBRuR=pJ=7>mI;W*4td9pO#{m(B7DDl8~N`b57SH{#AWw%=XVdH zT7cjLg)*xJyH%UGw#gh9y{!#kH4jXmg7Wj`ZfCJ$&h!YB-!b79H@HA`k^ral11n5Z zD({$zdKTm}uAn$jeHy|K|8!JU-Z&lc!Q0{=QgNWV1>xKOd#;K_xMX~B-B*XHI9T~e zE-t((N7hOU$!MN||3>i$9wP^?&qT%hE4^dY<6NJGc%yQ0iuBmi$QSxMX%1){rn6AJ-tu8E+d=?>!{Gs$|8F8&?3Wb5{ z^Khv)L<+n|k1H7FquRmMhqB=e#(V+7JNA!@Qq(#T7i~`#%l03rz7XrI?;?eLq9(+& zh(ltKu`Ty9f#-|KsAV6nIJ=C+RG;1JpMf*!KRVvcN@1CMDA;QmI0i&m|uTqF?uwxn`LjOK0>w~rAu9U@r+7?iQj>6)d6PJf2-ZeaWQd1bz37DXn zSE}YDrS7&}m?6GsEM$Oju$%k&;*+APehk=y;vK(}lclrhqgY_%?xKmaQ~D@9i%-N7C z$3lUP0cS96E{WX3#|we$B!S()^nNcr+D_*{$5|8|*t!+JhyX_Z9G1E#cU#pYXgrUm zGpois2c};{@se>tD$mV)iN`C1rAy_lMX>RgF~_{D z->xeKc%^Y%^xvZFM$&H33z(!SIJlhZw1(A*s>p%<+Ef)dHR%W^{&00wO3+VEhffZ1DadjhaFa zraKA3Y_I5j?wNcu1sH!5Rr~gzcT%ai=~goCkMHGc6`=fWR5kHMJC7saZcGt|Kb6uq zA137{-a+NYiI3R<4MwpXmb=N`UgT$5nfK+4tkP@UeD6Y<;ZZAClnD&|JuIf~I)^-& z0ztL+F|EwpXnAW8%snP)rVElBej^7cA7DkQPHs4qv=TT&V;)A$7Wy74w&$ir}Wikb#r zOw8m~xiC#=kRW9orN{5KJwx#|J->OJoiIN~B8-!QE6@$~dM{8mK-bvg=8)G*tfVbp z+Ze2*UXbC{n+?o|ht^tOp?F$nT}>(u!{9aQ?{}|8Cf7yx2D5~AxIrxucXnj>LWrR? z7EGM{w@SV+Bz{8C zwAIB`mf7+d@xl+UGG7Lm{{`WJv0vHh2I{T-ig?8Ah!3^ywfb>;&D(|=(O z?|S{!pL-FE|H0mZ@Gm(waXyLoCP4MySRwm>9%iNXF2seDFH&?HdireJ9~8|aG~1$x zn*S2NgdX$r&LutSLgQ@pyi%avLfkMZ!;fA7_VPw(R7EN51KpiCi;zaYb^AI+pH<+Z z;>BtIlOxK&ZjmQxM%*sfOUa_spmxVnDSS3P`}~qXaPDIiT>piRwr5G<@AsW8dz2~w zPG?2EUv>G}$^@hh*{~{(Y~(w){9!{NcXmvAb=u)!hMkxq^!h4AR-v;?L0W?w9zOqKsJ96Xt# z2uFO?I~8%SVsgQMZpg6rttW{v$~a)c53}m`dGVz%%um8 z%kZ-%e!=msJhX>5A(3A^nwiU zS!Ei4FbT-iN`d1jLLG~I6$&_B8%v!qRf-<9mXf><>aJV%$p)$fNG`)!qLwoPLA~vD zv63k(=fK`Nkh~tMxna!lNU4h<2<5YR58-D)f#UTs!}vG)CrSpVjQ49{SxRx>cmovw z5YdkR)lZ5aL=P}I{)dvrQ9(DUB+xws;VzmppC}B9jiHD? zi2C;p#ewe4IV>!0AO+5#&j`8*#M}u*Gb=Hr&})&6t=fs&p4&j+1duRE~@mKZD#_<+akQb$Qu@& zgC^?QAztY84|aA4h%Un=)`X2#wA+m+9-*(n%oFfDjKks^v97!ZgAxqwd77~HxfJ{l zokp{Fz@b=vM5c{zCrP@T&rX7!pV$Zn$rD&q42a$t;p6vS zt9a{1T%5V4I5*xv^ncMvzwJIrQE%yjdai7#%lvxac~^wPOE-}J5wf+^4e@8$Eh@i7 zhO1ASvr^G+>(0f6HG<^Rm^zAsdT>Z=S})3D^%l?*b)UY_iA5TK0RzGhM6aVlN4Fxc8-$fuF9fk567ZeCbTE|_CNEHg?SqMqVQa|FQvEaw zg@NotP{m>2Vydk?!%)H@`sG@2e)wN14HkVE@jKa}q>rt>DXN_WhIuh`ecT0#1J8#e z?3aZcStBs?ooNK()k}|KjvnxQB!>lIp%nj-ewx%xAb7sHpOaM%_-)4ghY$7kQ}kL! zp@Q+Zq|_Md-!&gi8qFR}cqonfMt7jJV^HYBA}Qk+J#lyoAx)lRE7j}Fu~_=(_+6wJ zYP%bHW7&CYx9g^q9WWm8I#Zgk$qN`Q!)-bgkf-$qqGJN_Y3LzGVcj&DxSoDwB-9*{0vqju zQTc=s5PK@mC2ZIrjcP#SxL(sx|HD?f<;A~VKv)=dUh)}54S{t!W?q_4N^M0KHeD=O zi{T-^Gi}Q0B2oM_dGu>AJ#70DAx*Cfv;HXEZl8g5sFil?48?)fGf~6YqLNQv`gIe- zEHu;0oAHe*p!964$n1Q9c#{)&>XehdKkp`Q0syt=V7Vo;3-6WsnC7Ck1NX_o8()!$ zLg_>P;$=nJE#s&6@3c}J_&tw{3p%&-D2kp$wfw)U>yC>eS;9Lri}5@cPX*%x6Bv+H zF|Q{o@6_||xyGm7oi6IBX9Q6Urzhrs2%b4Hi&>H98qR>=E(U@a7SpLHf;qG388N)> zuCAF`{!xBkRae){eqCK%)6=sA?M{84uB_Z4en+G6NK2xo%4t}NxcA5a7GohNSKyZ+ zH&&^>SYuGV(EDsU!68#whUnlsOEt@PV=Urnhqtjg2Ix*;`1tBCUu$b5k|U1mOR;4V zm01!9zZ^~ZCLe#OI%NKn=i$=+ho2}6Twj5P{(5g!h5?V_iY&Z#2lg3tApA<~;8D#l znujW3t2izOosgGrqVJNoS&gcPzWR-=W5Kd+4fcAm99cdqUv4moieR-(aJ%BTwP-5m z$S#(PKqOy>@S3(Q?CRC}tjBnpGc$q05XlJ&@h@1`R4i;8(8ymKPuQq7uzn-L!;OnH z<+b2Vh*z(3pY;jMkLR%D_@PXR7yX=y%=q?4rA`afm$6y>%VXW2uZR|_97DF$*Oj*P zX8{4?dIEOuH8uK-ddV(=!-O<@8p~6G{F_m`@za-@pCD=r;t{`8V}Tdgzm>z{Xi}L^ zwvr#wu#H1f-|6QW4S@Iv>worW$(9lD+gi7y;nD>Sz9sGf@pmA4r`L&2s?)}uXuLSx zp=|X5@}o$KIcXg5zcL|r$xLc2Nf7@VCT#@A93Y~cMK zTm)D1o37fCT<^UKi%2>JE{$2-;Z#(|2Y<&;g?1@WTj$04)}pn598F>w!Awg>8l;~W=TrO2~==$hmjLQ>jE z^4bM>PB{tL;)3D1juYK7M2uvq1yCA_P&mKlg z42~0AQR?2(rVI;+?Of##X0`PTXK{FGlf4u z_49npiM{&q@(TQx!56SiT9}T1#{!t{9b;1uu3VgJO?$$&Xqmi z>>-+#iyYF=e_m||^$-Yti9{N@>s2}%xl{GqMPL{`{Raw~6y`F*3yL?LQ`MucAU;1t zUQThK_Em((h1_M&TsXD=M%?tSE1S6>loJ@vOAd+DB)ryZs6Fb$7`nuPNPZpB>I3&~ zQC%_KK>XnKnQZkB+*aU-YF_hHbw@6$H$Kw22gQNiH#sb|Pa5U+dY$qG+Fc(QR+N3{dn15PDzhLvx+1)@JheapR5EUkeaf*+wno-VnQH+`S4%wy6i zJ7&S0Vo@zS3CwzwUR`Lbtk{9+PteGT4}8y(`e)Cw^D8Nyy&g4iz&ZnzYD zw4+WjRfmM-IjVo2wOg4f$>$1QV26?MazQ&9CA$@3WXZZTQ1#m2;+oR1uH+>>{*`86 zI*RnIw(im7PSzqcK0ZYD{Dm%cN4-Qpy2T`ZQLP(ap{mDbdEb7z9(#w7zUi+Q9;vF1 zf6zo~-bORUf#a{q??umT71xtbD1=PVe6-j6hPRNct)}tUAb{p?(Nx09HJZsPU%~f9 zc3|^1@cbRmPbA?n3-55t!``Enqt`~Wl|JzN1H#GeMra=U=!y}K7`9MJfK8$T4-Yx5 zssF`&co5DV&}Mf+m&N`4KE|nf~dx(P^{^gmMw#4V9V&st!37d|AI|_b6`ku#)NoYI_e_ zHb>RA=n+ryJ9?kuz;q7|OU{)Rc_B_9ROd-97F*O)XPb0?=-S4!b0-L}bR0R>3^ z4fZf$cYV?AatLaMtAY7Z4`Vy$Y%)dz4|Dk|2$#%3-Ox`3uh_;Qsh{ zVS`U|w%Ms6puPe}zU-N$+P8Ugb+OwexnLE2>NT|*TDW-XwC2H1aP<^kbzS_vDYXEM zuYsQ2trVsBczy+Ocz1->75VyXIL zIT|3BM@1x47?|&eMm{^cXp%RxKjIfgFStY1f%***UbbN7_p0%H#H9yGzw-neh~J1e z5U159=Y_IwPBumx$1k^JNjGr53Gt6UK#{CRG?R!ffNM*pt8?ArmPtgBIIOHJgww}a zaZSW#|%u9i$2jU!A^oe5*3*h&Ju5+d`pBY_HWWx zz3CRR1_brZt)khZ4B&lhKGei3!<2e6xb7k%*z)f){s(FZXx}CUjz1NzJXGpG&>*TU zc42Dv`xx2+nBNZJ+8_68h-_%jak0W0xtSL&vt2_-nmX%ni8E8ICNyKHS&Lc+&UfIb zRO3u4IHs2^99L9)*RVF>}r}zK0C>|8H!N{9T`g zY6IPOh;KPMc{t)Gk-+SzQK79|)Q4^ki|b1GL=PwtH`n5&2Oxhp?D6f`rf!D}`E*Cq z9!Z&O-Us3zrFx>axI&uHM$=rJu+=fi$M{B=`LR+t0s4<`Pxveck8Zf~FHhL9^_70a9bwxSu6 zNKkg(jFfPj83C{3EGhgn+HE};ZGrxwyi2L|mE}r36k7NUMOkK02W5JNL7<54ZzIRg zYQCy#8-|Tmmm0>m|G^9}951fpVGbCmwKpBT@5Wv|JECACy@}VSi=Tb(}%_gK_X1!bL%a%F3v{ zo+`d*~Z=*Q^Wly^lD<@?D_a|YZzT7WK?IWMS(D&ky-UlcSY0qSYN5?md zR@K8I5#Kdz;6aK5|ED0_;ME8AO9DT2QxQ+8IZ#G3CQ*Tt${*^1Fv<6)q57PUTiNdh zBVanh;?%86RCS-)3T%uVpeHUljMZv1qfS_0zFL_@>&G;-Sz z8~g`0=(p%5yKO-GSsWJo{wU`(XSokT`l7C}5!5u$K8no9>~-)NC)v^$9I?zMi43by zzPinZIxv3@_BQwV&|lOGbrGDs$|@dARwf1r{&Ufh;|It@C6gD5=b;U!VJche0Qcu3 zJZNzq;K%<6^Re zVWlsRCahE7J3)bS@weJ)`Mv~AJ5920WBM$4Q8b1``&G@8E%Q<`V(AG3LcE;wf<_(h z7;;1Dmvh9wcPNtz-0OTIg6`74EPPL|1Sq}?;aPc4G&ege7V&^To;{)JK=C+quK2lJ zw3<4nTaKF3h7UN6x5y+aaH*9)Bp^)K{U@qhJ<>Hr`4womYMMOz0nI*qR-)#+zNxHc z1f)h-bY7Etyzo!D|rTdN7kMsDaLF$#HvfimWS;_)c*_-AN|SBMQVdQg1dtf}D;7)sNpf;4pjs};39 z4S{rF0@#z=*^KI?y_Vb0{V7LBBEw!?B^30ezCO6gTrXQ!1f))d3FHy zf$FtYZ^Cw>_WaZGaf$=kccGIby<8=pv*~tonRw46=S-&qArm2~t$m8yJFjtxXsBlR zLM3m7sJ;igt~zO*W(&1X5;m#WF_drV1p1>uU#p=jPQ3=(|IpC83&%!M9LB(2ghL-> zEmqZoZD>EMRJ_~nntj+H_FO}@9OYvGacRTtMm+n3QLvxH9J=pJOxa!{i?$ph<{&9>V)yC^&zkyfUAITTzEl=3I4^uh(H597e(2 z{9~ zUcK}wH3E^Ipl~jF4}bPt5xj7u;Iv>FF_bC;{ZrBOn?79_7eU*69P!xp*?p-x@ZZj1 z=|?}AZJhx1e8k1P>2j!r9^0_f!Bxfh5wh=b3WcR%>ph9*l|5ZR{u8{MAUu)xU81*0 zcM{u2lkc9DrbVDkg!B(OSDQkeg5Kj!q21K}ulcV6bU)1n`X2K$ZmSJ^(#gG`U-uA` zdh=Q)u$|z*iL51YB{E4{246di`}%PP1LZTZkNcJTbX5BY&O-cb!-uRc17ZIRb}?+= zb+?L-6D9gHk+uwK2ne4|2v2r!)DgWZx-BUzXVFrx=4lE~f%50D@59x;X0tEcC>OzD zEjF=FBiaKH{yb{ywolxpUP06a3}5vQvbr%a-HF;K?~c{nQ$r5o9m)o=>xGm?f%6Ij zV^!nUi(Fm$Zd?fDFTnLnXr@`ZH(SYo>&DB7>#S>Hs2w1?0yjBXS+il+aRt?X`n$#o zst$C&%A<#1kv*@_M_uN>xuSS>zuajzea7Q`4TJpXvS(F~^9c;k9_ns+Md9FFc%TAz zwC+4jsu^|zyFcIgHk(#}<++@9(#NG|RLi=Xgj(z+t`)_0giRtrVN&s))~Fa^lG5D5 zdXrz`7zzW`^Dq|7y;qZ(iLWOmQIhJ@k5LSRGZ{av!Z< z%<9cQ*8{|UfM#wS>^Mtp;37EtdW=+m23t@8u^*zg@9VajVG#9*6I(pni=SQt)P78S zXP-Zc>M}|-Zg_%bhGx8CKLjvaflnIlYW59SpQ8GT5B^Jt8Q}FZM1O0)I9fGse2#d% z*8fhVIPhA57Zz@1RYe#Eju)sNeWMRcGJ)5H238;Q(TiZ`GwCr#r%P3O6~+yN0Giui;ZXP5kMFpBTgr(N{l1_~HWdTu zKk)|ofd6`GCV$Ik#HZ|m*Y1JyUpOq*BgZX2p*yl%2uWi-ck$5&jMt^|VV2eRfu@=i zB_RG~^N4Zub^_r=gbz=zsmbmPQY!!8``S7WsWuRvpfHA;{G6hR{8l~UpCsRpyq+{2#al3$O$C2l3in^(T13?OF1$H7+(fO3xe;t?~yEv z=3njjRzv!7*kIL>>u!(s@)b#SlaF#L6EMF#+FDm_;s@#~XZ}}cZ1^v`l^q!n<11hj z-(!oS)F!&GQ~5mp+qZ5{ElnbkK-Q7g&EV!)TtzMsJr2pu`q7fd07EK20nas1lim4v zqK%)uB)-oA=uZUfJSAz;5I@x$TcuRK>{*rZg~AZ%zd_&k^=!3N)ef$Vchqib0njxqwMQ5Q~9CD!2BB6bIRl1?26!rHPl4>{@ypFZ=^oL zlI479r5X!OthIO(alkn_RHTXOsM=`7^<=z7y)njrp=vxi{*4_W{SG0$w{w+dCU*F6 zRjJyemP&DjQojQk%j{dOQsFR0Z*aq0CzVfuXFkcaO9=IK(UU8BFHL@wPjL9$TK6}~ zel4JUJwh0^6L`i*B}eD1uaCwqKi9Jg1Tek|#)tTuuBP0`T1_)R<1CQb!+<$q?0CvZQItBZ{v$Z1WI zDEWBamQVuun;~4K^W7xXunTeVNQNw=&>z)a zksoc&5L!sagbX>4*!9&v-Wc=&?RHDf;C6FvTJo9Q#_NQ91hW-_ik}zZcYzk3U%~RFq>9GKB_G zrku%pIomzm-=0fA;=MUAOZJ>A2)`#Eb$~@u0pHmbFI(F|lzFdAo}_FW$Vs=58vtm$jQm zFu86im+QY>9FWFM`>bU$XDYVc&}lQ9UU^&Ftwq8JKe%;k%$==%Vj)@?vO0SVx8f*f zR>FLo8nsqn86>vV~gq(u=c&LP2cNLe5{3EmRSk zSCK15XA559`yh@4m6tm*B%&2ZTKy$YU`XBW9BH#&mMJ1slP{3}tBS_8><=$7vzP27 z2r=v-e_@S6f8t0`f*iP%cI7*YBdspULl|;tG)LNWlVcg;94{M*tCgi7W4>%>P-2Gc zAb$|kjpRa#=y%S`7FHzG@YZ|oecD=XKrS%QYj!x?m{OH=I>8{68Zv2G*sl?1E7q#G^eNT0zGu$&5Jx+|Ki=zlU#_RmXXecPz0ZB_IdkUB zVTfDS?=63r{FmQKoVBm@Epg?;AD$A6$fwS7u? zP&p~KbZ~&mR;9&wxse@?);fXgdluXtZp+GO>1<-(C9Yz3EiNOq6(_~V9=lw(yzQ?R z^Ajf$qZsmEv|fqrqgvVJ;&>&owm{3q37y$lX!?_`i!ENQ6HhAWTPb$)zoyc*8S0^l zlZk)}En4>!+t2E*;;B>`JuMMewcg|uq>8uL=C?{E=Z8cuS$wRP?Tc2k5~nc-(Ky7! zLHn}Ny_nZxkhJ`EukC2-)I=!}ai3^#G2Dqym#}Uj!$Hxime{z%7|V5xtWwM>>O<5G zR;Ax4zr`-MGPd;W#$u^0JvL2T)+UZkOOJb_p1$4TVN4G&o_6pAu7i&(_lDOwJz-P+ zjq=K@yaFp%z)TeN{ROK-%<9<3D6>75CM72_RV-7DG>@IZZC11`Xw%ZBX{)pqw^53# zaC_pawgr;3oFt}DF-3otg*VxRyCTRZ$~A0XZrjv0DLI*WDFq|ZEYtL{v&nXf?L0Y} z%8qi~jQdPvBV#q2xLs0m^*4{Qj#k5#MUJMud6Zq^3fo9>G@TtS4acHcGsjOFLoT)q zTLC#*lN~L|#>~ldkg8=XYL_OiZM#YSzm84ZK1rNOGLm7-ZeK;Lht=XCU}IZ)`82W0)>o616+KpgdB|Wk z7a0A$po#8h+0rW{iJRE=Y0|_^ZRa&f$<0`8C5fgdUnFX76X&FfTiDWbl9F38o9L+; zJ#w^>8=lm*zB!rVR<^msvbAj;+0M2Vk^gT)JA7NNH8yJpSzW0JTFS9^NbHxwPYfslOi z8MXAz(2cv?vbr-{1+@@~qJz)>#U9*{k=&E1xFL-DupTPvWfONwO78u}QPx96eQa5s zlEgY&w@zu|zP1IOs>Y1#N021$Pa0a;wx?6PcmQ`x6Td~1IFM_;WzZXq`HdTa$;UGZ z)W6Yy57_Z2qxQX+{optJ8M$GfeC{(2VaMZ8Y_oSx6c4q1+Bs7^jE+ykY4YCYw)>8F z!`HZ}5M@jO4R6F2P3q6w@J~KbyT#0Yq-|Q4#@$9S6}z*EqFv|^JK;~+X>4VLmyQj< ze^?85vM5H|k|mABW9aBLmK(k5zQa7rArP79^(`vlMYccAwytZY#mKD9%sSdV*Rl>6 z?T9wkwWItW+uzQ*akP9Oi@zMJCBnwU7Tmpze4=)YaU})gxj|Dr!8Tr-mOPOK6&=FH zPM}d4nICc8?apR|qoHUo- z1mC6IIhX6sQ3H|v=4g|GySvBKZEkzey-B%F*W6Y6Xgl?b5j~YuwdLvLwgv}SBtr1|Cj zjz06nB~9T1;JQmR-XvS&zU?j1J?>iIw#(wG>`_A@l$K2dgKx8&KCj`~Sow{1;QzJ89gDs16(%8MyUqhIf|>3tJ< z$Gue#7VY=KK17+rBYXV{i8hB$8*2#)(lg zB{8FM*wTik#r|H{o;>dHF3oz;!<>KeX+STcpF}Cn*OT>lt%;YcQXL-ldCg5jBIUQX z5q0y-ePaT5h1>G`$Cf-!G%n~{`PH+~=L=Wdv6UL$rsQyI@@Nyku4&p-ESOj zFO?Q;O*W~AWT7Mp++8c78GTl?aDx{2;SV3<$v!{p6UaWlKXYR`-=4ec@%OoVD>r&Y z>*wyR{OgCiJF@G`LN>|WkNn54fV&;>PwRBD&ku;3CGwBYeB<~mvd`~?+{~VDKZopd z_kpmQ8xF~byTK;7>Eo`&{wV4{!h+W#Cciex@XZzRA=Za5CPv`ny z$yKB&aX~i7CkF%ipMUOrtpjx+hxi?+BQ@(SK6lLanAcr95i@=|Mp3i*vu6Hi+hm-e zh{oOd4R2k^zS&>xZ`QybuXV^S(FQofAMOz+NQP>!k)?rPi8JjR&bUW}t_>Y3+r>eu?sK;oC* zAqLTK3f``N`L%w-J)iNzF;Fva?)vrgww^bY>)++3wTo?bTynwIXIg5EVX`y*yj7eL z`?a>r54HupUPV3ZwTKp6(VcW|3RuOj#?s-@m~8WnX|aRSe)W<{UJYGulc9@F8^*jl zD2b~}9C9j1RW)Ou*|+6#^Opqf1|LnhbJP88{AHnO--haNMmELt*pka8U*F_ROV#51*?P}tEP0Sv&L-~vdWy%s)}T)edzx~ha{SxMxYta~pSPcHTQH-V zrC=y=Og_>t#3a2Q@!TcYSM;}X-BaXS1%7=FY)_iWmCGbcDNnUpN!h+N=>HD1-r7jZ z|7Oga{t4aJEZ;-<1sEq%r|zW%5ohBIR&i3LNzIPZ{bBP!v*VaEiyWzvXbAY|k8pEl!)nxZg*kNL)s@?vtIRyxx|v| z^E&S4Kt83ZY2=5Y(~0S;?)>g+r#5weQQOz9oLr*hF0iNKX>ON9~Yy6 z*_WZ~7E-2)MiiZ7&RB(hSJt+)bDEeuSCCchc_GxZoal}4t$;W*P^ZzaFiFaxmEEAWvebg&GIog}J zp2eN$=suRqn^+#jaostkGVc&KyuC7YD#(zV5_|vZ)T_M5xcFC3v~!#l-m;Pv)I4j= zY9B^BCg~sCgqgdaNh^}8LoE8h_LVima(<{WK*~fS>$eml*Po!bF1lf0C>Z(>6!}2; z6Hrx)Yl%pt9S9n%p!rKM|98+`gKGvE7p2lplT>f#K)t12C2D9I z23l8wE+6Q90tRYv7oH(-tt3vGzeL?d=F#iDPz6<)2t5Q2lum?86 z?}1VesJI2HD<@GyT^G=32J?1;j_aVOyqwzkHDK{{FtQbtT>+J4xg{5oNRv%z5$PwR zz~lt2=Ruc*TZ<8iyv@PDI54yh6rBd;|AHzNw^l>Ofl;7gHE2Eo=0`wxJ#LCe#(`lR zN&gG3L_ydGN}qy?+T7v}83zV|x}~7;FqroMbfj^MK4giyFX&$g79Rj3cR^W78nsjQ z1U2&sN&OF0u`U7+;_=&I0^I`rm%ff-5b^0;QyPSpm~P5})r(0l>Rk8Muv z+$}hg{^v8IAowvDJ`GA=f{LsbRG=OW>ehh9lVILoprd|EYUdda`ac4Ti@?ZJP*z7x z?UZ^#uK#P6p+J8GG(7~ZidNLn)erP80s{xZPzV&Iwx)LSUZBbXYWIPL+n~8hHnq#| z3cBZJR z+YKr$KVd^7>r4&x9YE7e(7GLT1wn6I7it%11BRx6qD`RuBB(0WmD*`rf`;*+c|Dka z2DG?eV#AlErGnsSFuVqo`a#8WP~D&#wbQ)~8uP)tuR+H%&{L;7we#!2;$>ju2q=3* zX%Q*Ydr(77e^9>|G!=r@d!Q?|C$;nT0s|H>v=0>h0?MoQqIN1RsC^eS>;}z0f%&rD z#Lhyd#T~c}G7iiHgWJJy5R}IEp~n?%LG@Hnw+S>}1oKMisGXxF=ot_C*Mr4pz{pEb z#=R{<>K7@;kPY(DtOfOc(DWR%Ht0u>yWR%9`C#B{F!T%*W%j3b^1+~LIjB7f8Xke> z^a0c^zyAPS|L(;o@D+l=dtf;AEovz34Jz_L_2;1O7tmOBAhpZWf{u4V&u-BF6Id)8 zMC~FSK-sK8T>D7|cA!9W71YP;X}PH_Xq^hWHi6!YV4&1sY8Pq=iY9>a4WQ~Qs1*&N zc7`UPc?_7p)`AVUAM`y3gAImKLHKP@%9h&{$FZ;e1Jq>>qjtu@VBT`jaTN4C0{!X3 zsam&+<7*2Br-I>4p!5=`C_ReWsnwuv0%+U-=A8u{v0_A>Ca|hHXO{2$6-9T$D=-LB%e+C1I)2UskBPf~; z%H5#qM^KwEgW4I|fo78h8~K|-_a)F*dL}gts=@FCP`VLRoCDS3S=3I~6f}+n^X#DG zJJ9n2^f#PM?Tbf%5laC!WZ!_w|A89i9BQZ^0-9EU)?=V640s`)OQ;}!BIw=-`p$tt@dxyHxG5-o2UIvf_4lCeZ_wDtO6~Iu zpko#2`3Cg=4=h$LMd~9%mQsQ2Ls0n@sCf+PYc8Y5O>cqL4?x!;(0d;YR9{Z*LVZBd z`=I;_Q1vUQm9L<7hVB+@nCF4{dqHWKh-?I90Za(Q$pKow2VH-I-bMw~K41Vtt3c7W zp!`ozRd*G&(+&kKh7Yk}{tC>047zLDsG;vIF!%u&J_JgC2Ng9|Q#-W|)V&WHzX0=o z1s(D=)Xvi#^v|QTh>G{3AW{s4ygYWG+hI&}+%%20gKLvf)z+gESwF|cgrPD#hR#5!|sFQ9I zaUWxAFmDp*_yqI>K!40;3pFfmwwW^W4k%j(Do=r$e?WcXE!565613Vt*SDbePcTq- zE42#^1w|`Cxeru50kyR(+o+*oAZWIN`Co$W-$7rE?bI%)1Hy`UB{a?xc3!)?i=~ z82SVhod@NTUDQt19JFZ1VZ*QvG@kdIgr*_h8P%#-)J3-xf z&?xzW+T}F|9pgaHIzq1h`%j^u_#ZIR_y85iMuE!JpymXqkAS9n2dSNP80cCFdVOHv z2^gwXNbN*}K>1Qob+{1MzxDwN3~63!XzmN%Xr;e4wLCr^?z6dlu1+BHeqjs)Apm!-4 zI1Gj!fFi~B)K1=yqeUcAEkc3zAZQ4I=9E*^Fuy10o)7vwVDJ_gu6&x>NxOoIxuAL% zsJj6gE1aQrc{!kC1|g|m{)6U$p&RpK&1=RTmbd4=ct{j1!y&bu8%?Q zX)y3F7*YkOy=XKjUlYLfuR4hW?O&jw{&{L>9uDSz1iFhr-%~JH`vSEK4+5pjK*bSI z{SeeCE>b&VKQM0*=s0+hYd^_A2nGI>OLV`uCm5Lz%JzZE+n}b(WooDI3YzAE)?J|M z2I#Hu1GNj}fT0a45OUN;&vt^xB-f)2}H*znZ zwe$7^1B<}WK~QuLw8&F$P(xKOP-_7V`#|$;Fu%%A)Xv=%^vwl>yTI@bP%8VG+9^7K z>Y1Q!J7^4od2z*@okiqmLpMa8DWKm47GD4(u{TBBN7fQljt4dCLH!xf^b)jY-Ji`Jnb|(C`d2*ZGAW&)0+QWuWf}7<>qZ6?dqe zv_Gg=45|x3-96Bl`YW}|>qSWF7db2_@azNqx545ncd22dD=2#xRPF{fKY@B#h}xMt zfYzCyYdh!-f`Pbu)GpKp6ivN{>tDVJ1*(gnw$yLb(9jYzj|cPDgYGk+?IGPZ7?tYcdq>;17D-S^9=OYc|gmH^ozLea<%Izo0->HB1e)TF~$=Xxb?K zRs{2w(`4F^o5T0@O4tL+$k=KvMx|Jr2750KJ(~Y8My`hL&5fAvy-i!=NgoEH%^)01Zn(vlq<& z4RlwFqjtXDU@#91e-29TfQqDeYNzf7>T*G&We+y;eg++h3DnTj5%kXji+6yLtDr2Q z9JN!n12ra4zZo=L0S47a0M{ zR)NZIK+XR^y)uQ`nTCMY6`<=F=naE`j8t6zp#iB>Ao>859|BePL2dPF^tho9XkGy3 z?+4v?KwnaIY8UJVhI2vbUQkgCsw>u@cDhbAaQz!+qae=>I(`H_32D^OPyQAKm!V=4 z7}*TUE`!Q43VK}A3e-;oO&dY$InX6er*__^U|_5T8zDO=`W}@34XPStP=VF}8dibk zZ@~Qjfo^3@YUdjQ23LULW1#dgsHjA*9V~Y5Jz(T2kxUFRJ{>36zM?u`=IIzQ2Q%r zkT<4w=I&trJkY%t^c91_iYjUs?gUEbfQnB+^)*87{;MmOMGcMZ!MtgpV+-iH4EoD7 zp?1Zsz{o^U_6evAfSQ=5)K1?FG`#~_9iZ!b(EE2&T>pVa&8Q$`07W)X{w=8b6V%pi zPVEdsLGy=T{#T&;G3cw=g4zY&0>dAG(l0^9@1VLyOA9sB=~_}6-v{%)03E-A9=Vzx z_jd=2=Yf&EpzJ27tkjCyX*z@YIiTrN(0UDYm1|AyyzMR62uuS*TR_ndpj?_w4OOi{ z?Ih6f31|+0`7v#%ox2(6dj||U!0`8=^dC^sxGl9;TSj6-X9JDjf_Z;}j=Jrrp=T)Q z{}3$x3XD7kWwqKh&yHi7B4>0dN(D51Q zxe59!^`Lgeox#W)P_`3PUI#Vhdr~{S1~g3vty@9Y4?S`Hd!@aoVW2e_ngoiRp!__j zlJur_+UB5P9B5t#=AQ!H|A4;6eW-nKBp9}V(i5N}(#Jv#)b(_fx?!MkC79;}9Zx_{ zt-jRGKM*Xof{`yl*#l6S){ok0`hxm}py>c;y$iaME&ZvXw+9$_4-9<h7IpZFyI42Pe4)aA=FSl2vjWv zwTD5&1JIl{l-lL@1>Fll-vKaq7Yrv4qju7slopX`u5e+Dt0V=nFnk%5b>rPa=22k&YS4WG^hLm6y;0OIJPee6M95wLiXs%KpMtvDqp6{B5SX_VbQ}gf z4?us~7;0DC7mO?fWd}iJ2-KvErFQzBplLp6^^C>!@4AHoZ{>HWVW0~bGJ~RBp!^1? zsxXe)X>&ls4A8s{%)bJ<%NnVjFB=R_2E$HJdckO+28!76l@QGRe5?alquBC-4pc92ZJ6kd<&FXs!XMZimsq~E~wiD8gGDk6-?C5kpp^W zfc|Y@@f9#qb{e&lwE>k=K#dF3UjR+9)2W@s+5#IcBk27Y44ei-|AL~d8B`!24XW0F z+LNH+FVI|nCbi2S4!S=AeMMmKDHyIji?g$cq}(5RSA9p?1|9g9HE zLC_xpi&N%MyGTz^W&xG^K+SDXU&T!AOkFvW>(4qD1+HD7_XZfKFqayJazN2cP`({h z1wn1xyVTCm1~g9r^If3(0_cm)rFOvO{e$9hTt3#s7n(N+`RL(eaaenOUy;RO zsD2|e#wWIqtnpTcWQzaJt2pw{3i%lQg!!;I=a=H;!~XBz zl(T5SmnGQ9P$j9+7;UmtG_%<&Y z%EM^NmlyZ$d({-_cS0_%{SFt~cU1MTFv1VFDaA4NqPR^NG1&zrf6QWce4*lnkc+1^ zBs8JM4YU8`MWIh4e+GplbW{AfIj^EnHxY>!q?mJ|=)JGc zD;K&ELN019gp1lwM*Pl;!n#mmKi}|thIr@31#3&vX)F+Ok$pg7zu7V|MN;F=0TzYs z*1MT8q&Tbd;|$4y8XvrhBJa46i~e^d_5~kwNRce=wu%>p_bwVT{+H#!S1ufX2)US; z981$Vv1?)l7DZm`QJFExvG%?Lhi6E3J*oD}g(ovsAe{?)z{Rd*jtpKDAyUkxbLua3 zSH5!LA1vfz{d;iHZGZh1EDF!%KAAD|W9{jG{+=N@Q1H$x7sbnkTvk7H3Fw*+*ZwP-c`8$mfgBrR*ao98HnzQ`}@x$X2z? zjOkK}=JUm}nVVj@&G$*&(l4Km`fIn4A7k~qrY2{`kYcX>d6Qq9WcqLOg!EgsLNDDjqYJNo z>9*4LtSTR7h-W%S#(9v#5914qKQC?jZw?Os03To0HMTABkr{IZE@F(G?E7|4N#kyY zm*NW}zX-XwC@n+N_)AMeqY@W&B7h;@{#I< zkB)n*EQSwEFi0_XPFg2r9AW3=tvzJ~`b5+7Wt=%xdx%pcUDxmC1>rc4Ans2o@P{EtD}&Q+;LL-&3&<{F*TyOpwo+S)J5#1dZr?livzQy0=clQLkMG=KAO!7 zAwr6|T$)e3eTeDL>=4rLIt9IdP5Fr|4Rl^{8u~9@+`iBBcdiQQkN*R`xK#aEUj52{ zp)aG#Uc~hO#FrI_|61d+^fWYnI;|_KKb*B&N&ayHF8qnN`?O&4D(!^iPe($2wr7=c zyz2F%ps)Gs{GCkS&?KafUk&{w-&Y^9>gh~kby@qgs{1lxuD-M{xbzAA>s(vo3$>fe z3iN`SC*b3G<$m$J7_6k2Yr~nY2imY0hF=njAv*%SF0Tx`w(WEt5h-imlr}d*a_AzP z1QgCH9Vd{&{`KN$3NObht-SiZq?pt%Su1K~-{+mwm>XZdA&(&HIDs}y90nhE&!vrF zd7!fhQp~lX&Y*tFSsS)Z5Q<^pO6V>B%pSyxAw-IaKIZsD=lM8q$(7*SAQZ!TAABTK znNW|#K<5xeh{2b+Qp;kvd{!ui{ZHaBnOc{l<;5U>8i#x4Z0F;dwrC6o!tnxWI8`g2 zrt;Tio7li&r}Kx}|mM&4C0eRI2zzS3dn!}5LK@ai{{Vy-L9OFi#Q_a8zI z$ZbORolp|$KY)|8wL8+_gv}dBIp-zi)+1+Pcx#Cl;|n1#9n%u*=dV3akyI#rZQ_td z{wWcX%Ju49lUP&UYnULA%AtJ|=&9H-#`Hgy3OaEh#hm`!fVknDzG8f#_w9rkb^i0* zHe(_5S4yU0rrMfgq(^ z9QEB*=?FvO2z@OS$CkT@M7T`r`Tc%UyRdy73n(2Px*d!lEpb{qb*G z=pg@1Tw#8Cd4VMM=t6zOd_2*aJ~3C^R^sVWo<8%6dpL7qKE=hbC$7-lUr0ULj0j9e z=hx?*0Y53`BA8h;wB$BJBJeF1@{zj}KAN=8dBL(kX9}d4%fbrvT)HenvJfm3(%Y^> zU-$IC{0kyNiaGtEW6P(rvk<-~q~BGZ{LN0X5OVgD?MGPsWTv1bf60?;!Vk%H?c&)} zqdiett%5)jk89xKm{#oNr9qiPeZ(%RXc)jkQ1lkkUz-lSv&pE`4t-aBUfzA_1G113l6ckST=ShXQ z0>eM{z>$j5Lhq)E0+-Z`6Y!D}*ZyZ-6hTr;A|O%Re_T#4$JRlL%lSH1e9O7?vnKFyGH{v&!d zC^rb{@B5%n{(Dyy=rKzus$@@mt5t?%Ku&WOzUHiuUh)+B%wr4qtB}U0m9UVRU33ci z1NzDW*-NcmnPyMatc#jupMGmWin)H!Vzo1?6k9$d7lWyZkdLN=;G^kZBkuE3;2_1^ z87#eXWPmlnIz~v}V=46S?+>v7#ZK20NHM1mete#;OOuPqwN^+!`Y`lqrA8Tf_4`RN zryu#*x-VJ%UcZn&_W|^#E|tDyIiOPnQcUy``-iigBgt)=e($n1t}yUi$cZhj3Qgo^ zcb~oXZ3QVNPGZu}J4cQ`P%^578dMQD8N2$zN6Owt>^a2l>+j|M(LSynrWP)`CLI@l zaDk`$cHW{`ktjhULd5ucA$#$X2xtX;eFPu12Hz$w zWDZovg&aJ+ivYy!matU;Ixy=)R4-}pxUxM*Ig`$HuE!N>{}A#KpHh{kadqeMn^+8V zqCkqd9L#+F8-1cCeZi1fRUm~mdqRJFY1Y5IBv?r?r@y33zsA~N9xSBKo?n$MlHJ+z z4-0_K66R9}5}mq+Ju7Jgy~C3sEq}R?ll~qAu_N<`OkNOPQp^RB(fxh;JWCqkJ}RW2 zc&n=Y=CimI$+ll&SqyZBK#CW%x|tzSJfnB$n0R}*O_H?G_ejXe!pccBlLwPB*x96K zBSeb1AP!XzJ>oJEbrMWZ5=iIzF3idBH7i*pbgs}f$zG6IJtL;uZzW5Hzr@+|cBDuP z!~KOE?Ki`bKIWT_yp+i2A{yhmFkO%)(I_^NCP|kFIXSfxPM%fl7rjvF%wZRt6a|0S zh9(uty-5rIJ9D{xJ&E;jPceV$qP>x1&(e&{kl2PTU=CEj2|0LCUT)9oc05HA_+t@E z2c0@pAb;DQT;wa<&LY`zT;v<$?3(Av(n4J|xjkQ_9m*(Ck#~HSqv?m^0NBjF1q`!YI6v@yla`e}FkHai2bTV;;1|pf%aBay$ z&ZRgz@gXhr{2~<0jIzlzm?odsZq7?fuxzrupuwID$(r}iu=C@qnk;awzqP~z! zS1}|bf`2e4w5KV57IJc5l0s9uuR*IN2n6$s*c5w#_-aN>mt6Yqz|fo9hB!Ov_tHX5 zVv0asBrV{nooY1yY24T%#h#-+njtADpto7l-Ar$jaX{Zu$VsX(#lAq?B1Mv1^pJHG zI^Qs+&@;4n>)BqcO>`VE%@T6b^kYQwvi(7JnrUJjq?jApj^Eo(7rA2M3(1Hi&`o-r zhW=OIX&DQGPB>1dV9wTLDqSz+CLC9V>L2|t^nDu*&MP^&btHaLOzM{`ept=9>EG?q z9%2vFNhK5L_*8+M=BiTZ*|FbyqJw~%1d@MND3Jb75yWK9ya`)Db5b{xJ5qt!1O#YS^hnW;}am041 z#!E+`p+Lw-{e$o^52e6YC)Dd*1a<=)rnyqgTk=Ho&RI)-Z4A7?K~kxc5*k{5(K zgdn^Bt~GbDF1>2oNF!JU~Vkjxo9 zp`X1a-^7a{*fY((se7*s$%AEdsh8+|gN5|V=R-f@{aMwZ$Lxa?b2(VrcOw1Hg6Moa?5~K13frDx^Pr3;NE#cwT*Xlo@jy^5?BTYlds1P#PAJ zU#zU4>0379SuI}m>M9BvzGJ4CuFH|?6&VVF^xf|Q{gB|Q!_Z@<(G~g%M?U_I)vq2P zq?gQve%;c<&w2G5Nimnc2_KqAFuiVxkUn*n!u~j7Ns(;sT>w44@7P84lJ#}H&YL6I z%N}IjX7ma;~QD|#rJqI_(?JMZko8r*>^kp>V!NTczO%@$en>0 zYTvEK7AWmxVxbhL(_F@MJ3v>J$hq|A3CV5SAYXGazY#Bl2r1^yg=4SA$eK|6xsZO> zm2^B2Ox!<&oeTPYL=gJO-tCi_KJtr@{&?98ySUk{6iK3TJ+FRcTn1LP!rdA%y(}q1 zAcfbmGw3P!-cv5xd^(M2lR@LpIu{>(QdD*m(m$OHeWjsA{do23r$B#s&R)7aOY*15 z71GDMpfCJ%E1SC8>GXjVll(~v7MouV^a`%)3%ag?i@5JRI@2a zq3LHKeRgb3nuFl?v)KDnm^qMQE{3>1^X&WH!>c;vOHgZKO@Tc2Zvh|YYArg-%Y&B` zb20RLV!g-CgR7&EexecjrOk{}SwEmN2U5)G({jD+IjGP(OGv-)W9UnlyETDVe~1)w z`d*8w9^~qm#2235QS<%(PCC|~hQ8a4(}P+4bp7HC^tpo`G-2_Ft_sz^|6k~T@xK3r zSHJuv)k_L~yJb)R&K{jAB-9c};VD%udKz4c%=s(?x@eJAi=KwIKLzXsKVw0O+}Y&q zgnZl{1s`pzd=}z`p&dEv$RU4^-yWZ$63o1Hl1{nci?oNMHZ2TFylEAhNVr-q8Eg_er>!)UFov@{OSz)kTH+U5!6CHh7O01EuWs9 z!!kkV2&9VD%|ApVO(MGtdNT>PvOFM_DA;2Msp#3hITBl|3tq8 zi-|uFt|O4j!?o*hsf^j4V^2TVysbo0rw(nuW@{Jv<``+ew5gEr;vg!Fjftf4zkE~c zq5st4i{7LaV}w{y3#kENE>wD3F%WGLVtJG-W4qUbPa+ObNaOz+oJPC;|n2uQ$;52hdb<5n(+F7 zgA{Z6%hOKIVOK+5!%TtX_vi=xy6MAbvHI!qL%&QqKZr5k<3Bt&MhN*By$C+OHErNO z`1?sQ7sGE?demYucnXB{xd)+NHM-td7DK-GdnNhN3@6|G)s7I8`;QCBZJ|ti-^N2z zB!^p`<)t7Jf__EUwzrwS_zxldt`sFr;o#uh(X4tpKS)(_^~cP+=^S}4zoZ*PGL-^p zJl+#NuADkr$csVQi~5M|QM>I>7K3bvkp9|y=&y~t!M?d8?=z9tA}mUKdapGZF}=w* zc`w!M~OAq=O6K>i~4;u21)Dj0E&nlUztnOJ>>=yWrhma-Y_Rg?!YkQkUlQ;=uSCyj)mGG3P`6qr%?TgcmZ&O~#Z_ zS0JC+UEyO_e3zl@oX~GRNHNzZF1_qKm*vwsKuF(zZe2`UdoASW!b^&|wJ6Ebc2Ahz zwM0liaTn@053HKb>ZfysU3KY7wD`Gm!QNFReZuP%^0Dv+d~^&9d$sIZM-sYGm;OFQ zQf)YW?Tic!f!~Dm>nqfwdDLv2P?5zz=L@oWG>`5(^PE|A*w=Vucn?*pCy>bfIdI~< z|JOF&$&h!TPGYNEIpjtn4)zg}pPB*r@Aah(SqyZ-Fcb2&t?sO0d6X{@(%;?&{o9Y8 zjNw(U-ChsxCJfj{zkMP(Q0*7ezqkVZzEQ2SSp9Ue5Jdg8Pfwi3>et>8(pQSB@65T_ ziQMcf?QX*hz#LbfcBH)%T5n_y3`z9`@>jo2eR>k&YhS1YJ)10$a&B~Z_o#EV(;AhYuTBg^8`}N>C^7q zi{5O5i47Lksq*HJ@V0RO?4n&WYJ9By&xob6#It%g?|evGHn10!O3aXS+TD?b5$;Ib z{O6s}!$yR$>YdneCHl;m@rYu`H_4}&Tsm7we(__-7d-s5xI|9gqg)UD{W+~#GQGkr zq`!X}`i{*9_Jtl(hBMHAw!2>|rdR(cq?f#e{#fI`**74xCm2aFm&M&<8b4rqT|z^F z=BH*gq-WtpVzubE1$4SViiuvb^zE?oX6_g0j@-IJJ0T}cM>lll4DL%ViaAH_@Uq|- z-4JiE{iEhT2IQH9ob*_ONS35tkA62zCk~{TYl&m*kk4349GivoqfbKL_R)B@T1YeD zC&ipTlB>vNde0>xeePe-U+?xSd)>#L|019iLq6vl$uTDPmu@7GNL&3z>?xr9FF*2f z5UJmYe$ycS!+CS+&XVi8SS{pa*YHO4Z212f<_mB00hRS_XzYw8(Ky$P1koq`iT!w|Jf5mKW9mxQ-+6)?M2OJ zWyCzcUh=j&nL2r22>Dp3P}%oYO(Ne&W_`!YK}eyZZ7AEge6&{w8ma_N#QJ_Jn!^)M z$|SQG=#-(q%6>DoT!y4@9(@6fA&p=ue?mT9q-4=NOd7T3B8!7g8&b1q9y?`Ky}~X`tujj>kCl2s@7_?!$&0~Ein+e@ zX>NLdrZ)@`($}|S;fJs*6WG@nY}R0bgC3g}f5jY_R|q-ixG&3jeq-$9DG`V+niM88JL+b^W=5rlq3vuSL)hp!(28YyZCoWKPl#7IDg5sj+IW-y{k^HCru|IAMxYi z8(Es>HEKg{+n)-b9wc9UpA*Vc}b5_g-q{CXd#fpiCHaZ z4lf>9&(0_1+^ztLy2@1+l3 z7LuR(3-Sj^XDqCGIzf02`L$uAqmwLonU(_iyIsE}&0m?0zkbQ9UfZB0-Vpruwtazp zdUTCT)k?_6i{bF`xJCR#76Y9eyxnq5-vb$vO8V%7w05G9yiz{oWlx(1^FlC_V$y{q zKTVkJ>^qb_&67tk!$u(|^}lY3pH{BUVG}(zK_KPyj}k0*<}`ox(xv&Fkduzj5XqPe z7C$c%_p_GtCAgR#tNDv{`C_#|LWkB-(}YGkcUZuZLFWjhn7bgxCG{?uBQzD#&(K3( z`~I4$ycmL{nA5jdvm*MXns2O-e)%%!mu&9Wj@3`+2+PzMlz!bDea|6i7t(Jz0{zX$ z6Zivy^eF1Tc5wllu@;8E6Ve}k2>sQ28LuA5Gh-f6xuodqO8dS)qOac+O8*veaZ%BV zrm&5s-8xSw!PYFXwy?MrzLJ{ywY?w%zmX*CuDVr1K2i(e<3_b9>^oM>7f3O8 zI@A6>{R0~wjNb_9o8E(d)4uNS@^axI#Y7)-A;#y8Vh4o1K8YC&^Qqb=E%;?gye}$0Vwh#K_gFbq|t3N`DIeoKdj_B0C_?VD>*KO!i zx4GDoDHauefxi2LZQrv~5D5$Ek5|dYPs;X$_|MVGs@b&u3Y|n_nO;^iTOfbex@Ob- z?fh`&Rn~sGprFmhtotkTM@+ALOGy88E-~cZOP?{0{|u{t7xk}fS@{LiYd#Rt$M4Rz z@B6uKiX?Nomeo(E2)m)LI_q3Mr+-em@S*JG|6L)h`4i$V|Kq(Ay!=~9F_-_}RF_9F zz45+~K3mp?w!gW|&0aUbs|vC<_8jTp3`vLQ^rz0G{=DjK1nTeK0s5QwI`XHhUQ*0m z0{@J3p3m5T`R1CqLPsAV9}{PCK2jtJ0UJvJoh6V`t_iDZox97L;8`FfU$`A1?0L5B zD_#mh+uP7Ti6ODny2JGT{X+WnLFj9W_eN)Fbdqot^$)xByeZQc-x1R9k84X)*mB5R zHtVM&kvzUFjep?MlYN*zlGIipg{Rs;Kl9w<)~x+>me3aZIz?OP7sKQf$hr&ZZ%={# z+jhqq@Y=7P+Sb0WV&@Erbl^l*zjB_C{)G$reIx3xV)fG*!X{dOOp|Y&1s@caoI=fB zAs>}4wsj^R8%?I$@2~F03&MO6jo5Tz&r24BzF5dX{Zj2{5_4zoW=qX%ia^S_UJ!AN zqhm42f~jIVfh=}x2?q&ris`%n+@zS(pT8Q&VgXn?3F(K9hdypeCR-u3)2RU|=JeU0 zHgCuDuGvER8S9~6_~}>tZ#{yfnA0!lcA5Tih{W%83+b1ifj;KJ`RI2)bZS6~iCz*j zbbZM?si(;=;eHhIvE?Ove7I@WPrMvRMeVVm)q6u8*M=8yh4&KLFZ=IcayY9!Jqa5} zeK5B~pBdAnJq=-W?Jgy2de`F)wr?+R7A}s42kRdhY&gRT!WilzCiuu%)RnFAlHou; zO~}XnHSO`<^;Gp;M1k4C+V*&vblQi}Ax*VKNH6gthUA}Cv$cB63`j9|CZ6P6*RV6G zy)2|peGdJ?7P8mAbs)u@{z9rn!SseQ8i5=%ZJ?o9G`@IRRFXyVwbI{L^r}M86pu;k%&SRBEuy^ z$q@0Bcp}4ZpSAYA9iQLwU+d%h-D`jMKIg8z_S*YA*(dR#ikU?j2RC~GC%#x8R9g0g zj0tV+MHyw4Z=a<)C*{<}XRzO5_5+kIZB4vQdjz|7(V&<#;)Rr6cq*mE4@L20l`w0i6`)!MD}4CF_3#L!?H#o?2R9CHo1`fM+BY2GpwMqW%~bev`U&2C)p!b@yAtu|68~Gr+lTld$N`JvE#^ZOg|)A@ ziNcqhaKI3AuImFy`;I5Uf7#cr%G<$-n)i{#1&X7(1bt8j2u9ooh!I|(2J^!Ie!=@- zS3%(onhd}&{aaNXi4Ory27re7-t*xI3hRTL*#JUAOUD5)1~J#0@r5@J4;oM&-DGl1r@g$Qpn9jns6 z)lFGNp$iUT>tR>+N)!7whY;Q-XoMMW-S8BJFH<32K1{*$CKwVt1iYa8cVC58ax@eJ zv)6#tD~dzV9Rvy<=~`-_=>gkZU}jN4hkvsVavvNG2N4Py_d)zCySQKc5rAR@W)|@t zPdY>49-BcPLn*xVJjCzo`&)rj)Vx886Mx-fujDiPc>4j%D7;fF;CUC3esHo`MhZXDD9N+_K^QR*r zq;3~S7zq0r3waI?4>&M06H?F_Ik2WsZaWJP`cWiiQysBlFz=4JM2OI-K%%{|?^38D zWkPuSQFz-(bV9MFo4Otb;sa(DXM_JCl_qTvN8w#_5P#zM#CS>jX*rJgI$!i4go_Y$ zkHY(WL%i2x51t6codsqVMOZPhySk416$=aM3?Xz3=`aLze72#Pw#0=}W){1U()0=( zG+`3t^rZ07lMvsdYWpC>1LhX!*U9yV?&356p*xmf2tT?&ZU2*OkH>j6=Nr3q?PP z4gt(8jzzB>Gpjh>Z90Xw3>&Hl9?;uJ*!6lE;(2%wh6EFDeI3FHe4{7=hm4{8&0tka zx@e5gK!USd$}>4Z=yi&~{R8%(a>Di$J{urDU}mug4l^H@aeT~o3h&>_i94{lu0kS# zs+AKE#LwQD#0k>=b|Qu#%+(2opt^gHv)lp5A274%z-p^}bpj^egTlwHLHxATnS99y z0g`+z;?JkqK!qB697?xQ`1Dl7n^gT#lYcRnr6GKN{aPw?KjkuoE_maFmlM3S`cKk( zo3{wBZF~i`oLTFJUnqQ;@i6Fp_M%$)h{ph-*)Zt6Uqa)qTs^CH!wB_+5yP+)>3v~4 zN&DU-5Z`4*+$4^7bf@sfLBkXkD>fPlVXnKm`YbrG&;qznUEQJPG642Y_Si&mSf3n* z*I_N5v{B+i6f@s;ZEUJFLaA?2v*rr8Kyf&|KpoEC*|CTF0dv@yqJ>NapQBl;AjA;bOVoRI6Os z*^d`-vo&AlKNLsAQsiiBX(j!Uu3~29gKY3)b~$KGN?Emz;z&3;oL3aJ?D&d10yPMU z%n^10fUy4ZAudGu8Hyn5DLUb^&65AXz~f-?424KK>Y#}f-ck5My%8W}*M6V*X&Wp* z&>sOpzP;z)i??smVgw;%Wq-t1+^J|P83;Fr5fCkEI0Lw6x^7(ZXm zuMNRSftkg@bluSX68FJ*6@@oDgm`P$kOLAQLYY|{h~t6Eij_5qEbmhkhwZ}={8pzk zFD~&)NLbPX@eOP{_mD{7XoL7po9?J3v=~U? zt7kf6jo_01ek((m<&5_WJ&x+b+qYXx;SF|U`#;9Wr7xxcW)_EV^Qf0l%Fc$+?J$M6 zyovZ1ad&y0C65qpG6&dgJVNuw>h+6nAw}R&%LN2{pG*D>h>W(h(!FD3-c5lpC3oz<8n}dw@WAXm$Wax#%RS_oU(`Nw0h}13ZMQB z@UlQ{rQhJ5ET3yq4K2%jbd`ROG*N1bd=#NxL5ESe&FY}uql4G6O~+B7zOdXyoqsay zMd8aPje^n3xj%RVI*;+ee@3`%_E>59EQ*=M=H2cu zXvXmYGFL)ACv#Wme%Hh+eC}XjA~TD4k8uaoFX8a66y9qb;$2r)R7%D^XPhfs3Lv|) zPr62kpH6WEh9SqN)sJ{FnRqXPxr~`bAJV4wQRh!GqbPht2I8F>L>5SVsA6V@7tVaD zrAY;|Ypow%cO^Es5)R;4Z3dPV`<_^;Vai* z`zCr;VGjNu^JNNe_I5NL z%^KcNIu}CULi@6mPfB|u&C{If{e|MNZT1gnXu9lgKkfqr1+AYf&yk1@ebC#q3VQb5amwceS#3*GH37|-aZ5b%q-%Iy?d*pyQEDNKIA0g zhc4bJ{WU6OW^pdIxH(R9?Oq;>2rf_@(Jzq0%`$l%_W?qJm&no7VWj4|OSbMVs-QTM zn~VV+SFJP8M-G^ahJTHLe%x==TpjLLnT;WI%ymTk(p!u9vI(PtA&4LQZQ>L@7xczZ z_>!e#l=@n;SVGP6?qZ1pj)7zFc{P1hjRV#>;1TSitNs6A~QNPm^zp zv4nyS4r6&>_PLF;MmF9737k$DspE=JXNtgmA$o9a@(Fc(3}FE?iw^jf%c1O_DHyYg z!uuZ@i=Y2e*(69tKy?W4!qAM-nqq4qT!waqvXaMDga9_PXvA&Qwr7o0p&)m;b}Na3AkA^!MR zLH%Zg1OhXQQ{m^Q`HIeu@T&=I5W^Q!9A3MTqsQSS{tE{_Wu@vF)TXj`Yc|QuDH5Ks<_Fo$&@xfvm_@I5?WyKyo zBjocbd|@Qw4|Q+EYe_JTpg{bBXTx1N-ef<8ugpPw;E+FtO4@h3hWN;hy6R<@&3y{5 zTRk54ZJ&gygEj~jsu91kaF7SdTJ67gFA8rv z8S%Eg%Jy;nAy8mu5kG5Y*SEa?L9;2m>sG`U4d2jH(ta8`T?0U%@pCg+<=of810rYFX z>+kWreFzdPCW!3|y8m8Kw5o@2SBfKf9CEx1tJISCU^pH*ZcK`iJdRb

@M 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

W)R4#F%%5Wo|eoyM4UYO^%*+{6DFck5+Lu&JS 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

%INAUN@Kif!4%3=3PAh`Jv8V=?@-cZL;M| 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

;XAR8e2ANmrNR{@!O4o%8uQ5-&ZrL?o1>ayp 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

  • l(E#dMo=4me-9&Xs4uRJ|$s0$Z1W**;! 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 delta 552606 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 z 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%0A78=rgqMS-L4)dX9PWc{)^~-3!J2 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 diff --git a/dev/grigoriev/grigoriev/index.html b/dev/grigoriev/grigoriev/index.html index 3eb32e5b..052aa3b5 100644 --- a/dev/grigoriev/grigoriev/index.html +++ b/dev/grigoriev/grigoriev/index.html @@ -131,25 +131,25 @@ ┌ Warning: Attempting to store Main.var"#6#8". │ JLD2 only stores functions by name. │ This may not be useful for anonymous functions. -└ @ JLD2 ~/.julia/packages/JLD2/IyyZz/src/data/writing_datatypes.jl:447 +└ @ JLD2 ~/.julia/packages/JLD2/NKGUi/src/data/writing_datatypes.jl:447 ┌ Warning: Attempting to store Main.var"#7#9"{SparseArrays.SparseMatrixCSC{GeometryBasics.Point{3, Float64}, Int64}}. │ JLD2 only stores functions by name. │ This may not be useful for anonymous functions. -└ @ JLD2 ~/.julia/packages/JLD2/IyyZz/src/data/writing_datatypes.jl:447 +└ @ JLD2 ~/.julia/packages/JLD2/NKGUi/src/data/writing_datatypes.jl:447 ┌ Warning: Attempting to store Decapodes.var"#37#38"{SparseArrays.SparseMatrixCSC{Float64, Int32}}. │ JLD2 only stores functions by name. │ This may not be useful for anonymous functions. -└ @ JLD2 ~/.julia/packages/JLD2/IyyZz/src/data/writing_datatypes.jl:447 +└ @ JLD2 ~/.julia/packages/JLD2/NKGUi/src/data/writing_datatypes.jl:447 ┌ Warning: Attempting to store Main.var"#f#14"{PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, SparseArrays.SparseMatrixCSC{Float64, Int32}, Main.var"#6#8", Main.var"#7#9"{SparseArrays.SparseMatrixCSC{GeometryBasics.Point{3, Float64}, Int64}}, Decapodes.var"#37#38"{SparseArrays.SparseMatrixCSC{Float64, Int32}}, SparseArrays.SparseMatrixCSC{Int8, Int32}}. │ JLD2 only stores functions by name. │ This may not be useful for anonymous functions. -└ @ JLD2 ~/.julia/packages/JLD2/IyyZz/src/data/writing_datatypes.jl:447 +└ @ JLD2 ~/.julia/packages/JLD2/NKGUi/src/data/writing_datatypes.jl:447 ┌ Warning: Attempting to store Main.var"#6#8". │ JLD2 only stores functions by name. │ This may not be useful for anonymous functions. -└ @ JLD2 ~/.julia/packages/JLD2/IyyZz/src/data/writing_datatypes.jl:447 -┌ Warning: Attempting to store SciMLBase.ODEFunction{true, SciMLBase.AutoSpecialize, Main.var"#f#14"{PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, SparseArrays.SparseMatrixCSC{Float64, Int32}, Main.var"#6#8", Main.var"#7#9"{SparseArrays.SparseMatrixCSC{GeometryBasics.Point{3, Float64}, Int64}}, Decapodes.var"#37#38"{SparseArrays.SparseMatrixCSC{Float64, Int32}}, SparseArrays.SparseMatrixCSC{Int8, Int32}}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing, Nothing, Nothing, Nothing, Nothing}. +└ @ JLD2 ~/.julia/packages/JLD2/NKGUi/src/data/writing_datatypes.jl:447 +┌ Warning: Attempting to store SciMLBase.ODEFunction{true, SciMLBase.AutoSpecialize, Main.var"#f#14"{PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, SparseArrays.SparseMatrixCSC{Float64, Int32}, Main.var"#6#8", Main.var"#7#9"{SparseArrays.SparseMatrixCSC{GeometryBasics.Point{3, Float64}, Int64}}, Decapodes.var"#37#38"{SparseArrays.SparseMatrixCSC{Float64, Int32}}, SparseArrays.SparseMatrixCSC{Int8, Int32}}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing, Nothing, Nothing}. │ JLD2 only stores functions by name. │ This may not be useful for anonymous functions. -└ @ JLD2 ~/.julia/packages/JLD2/IyyZz/src/data/writing_datatypes.jl:447

    Results and Discussion

    We observe the usual Halfar model phenomena of ice "melting". Note that since the "shallow slope" approximation does not hold on the boundaries (due to the so-called "ice cliffs" described in the Van Tricht et al. paper), we do not expect the "creep" effect to be physical in this region of the domain. Rather, the Halfar model's predictive power is tuned for the interiors of ice caps and glaciers. Note that we also assume here that the bedrock that the ice rests on is flat. We may in further documents demonstrate how to use topographic data from Digital Elevation Models to inform the elevation of points in the mesh itself.

    Grigoriev_ICs

    Grigoriev_FCs

    Grigoriev_Dynamics

    [ Info: Page built in 37 seconds.
    -[ Info: This page was last built at 2024-10-21T19:26:08.189.
    +└ @ JLD2 ~/.julia/packages/JLD2/NKGUi/src/data/writing_datatypes.jl:447

    Results and Discussion

    We observe the usual Halfar model phenomena of ice "melting". Note that since the "shallow slope" approximation does not hold on the boundaries (due to the so-called "ice cliffs" described in the Van Tricht et al. paper), we do not expect the "creep" effect to be physical in this region of the domain. Rather, the Halfar model's predictive power is tuned for the interiors of ice caps and glaciers. Note that we also assume here that the bedrock that the ice rests on is flat. We may in further documents demonstrate how to use topographic data from Digital Elevation Models to inform the elevation of points in the mesh itself.

    Grigoriev_ICs

    Grigoriev_FCs

    Grigoriev_Dynamics

    [ Info: Page built in 38 seconds.
    +[ Info: This page was last built at 2024-12-04T03:37:24.106.
    diff --git a/dev/halmo/halmo/index.html b/dev/halmo/halmo/index.html index d484f8fb..a1d3b90e 100644 --- a/dev/halmo/halmo/index.html +++ b/dev/halmo/halmo/index.html @@ -289,7 +289,7 @@ _ => default_dec_matrix_generate(sd, my_symbol, hodge) end return op -end;
    generate (generic function with 1 method)

    Let's combine our mesh with our physics to instantiate our simulation:

    fₘ = sim(sd, generate);
    (::Main.var"#f#9"{PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, SparseArrays.SparseMatrixCSC{Float64, Int32}, SparseArrays.SparseMatrixCSC{Float64, Int32}, SparseArrays.SparseMatrixCSC{Float64, Int32}, CombinatorialSpaces.FastDEC.var"#19#20"{SparseArrays.SparseMatrixCSC{Float64, Int64}}, CombinatorialSpaces.FastDEC.var"#17#18"{SparseArrays.SparseMatrixCSC{Float64, Int64}}, CombinatorialSpaces.FastDEC.var"#32#33"{LinearAlgebra.Diagonal{Float64, Vector{Float64}}, CombinatorialSpaces.FastDEC.var"#21#22"{CombinatorialSpaces.DiscreteExteriorCalculus.EmbeddedDeltaDualComplex2D{Bool, Float64, GeometryBasics.Point{3, Float64}}, CombinatorialSpaces.FastDEC.var"#7#8"{Tuple{Matrix{Int32}, Matrix{Float64}, UnitRange{Int64}}}, SparseArrays.SparseMatrixCSC{Float64, Int64}}, CombinatorialSpaces.FastDEC.var"#30#31"{SparseArrays.UMFPACK.UmfpackLU{Float64, Int32}}}, typeof(Main.sigmoid), Main.var"#11#12", Decapodes.var"#31#32"{SparseArrays.SparseMatrixCSC{GeometryBasics.Point{3, Float64}, Int64}}, SparseArrays.SparseMatrixCSC{Int8, Int32}, Decapodes.var"#7#9"{SparseArrays.UMFPACK.UmfpackLU{Float64, Int32}}, Decapodes.var"#37#38"{SparseArrays.SparseMatrixCSC{Float64, Int32}}, SparseArrays.SparseMatrixCSC{Int8, Int32}}) (generic function with 1 method)

    We can now supply initial conditions:

    ice_thickness = map(sd[:point]) do (_,_,z)
    +end;
    generate (generic function with 1 method)

    Let's combine our mesh with our physics to instantiate our simulation:

    fₘ = sim(sd, generate);
    (::Main.var"#f#9"{PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, SparseArrays.SparseMatrixCSC{Float64, Int32}, SparseArrays.SparseMatrixCSC{Float64, Int32}, SparseArrays.SparseMatrixCSC{Float64, Int32}, CombinatorialSpaces.FastDEC.var"#19#20"{SparseArrays.SparseMatrixCSC{Float64, Int64}}, CombinatorialSpaces.FastDEC.var"#17#18"{SparseArrays.SparseMatrixCSC{Float64, Int64}}, CombinatorialSpaces.FastDEC.var"#32#33"{LinearAlgebra.Diagonal{Float64, Vector{Float64}}, CombinatorialSpaces.FastDEC.var"#21#22"{CombinatorialSpaces.FastDEC.var"#7#8"{Tuple{Matrix{Int32}, Matrix{Float64}, Int64}}, SparseArrays.SparseMatrixCSC{Float64, Int64}}, CombinatorialSpaces.FastDEC.var"#30#31"{SparseArrays.UMFPACK.UmfpackLU{Float64, Int32}}}, typeof(Main.sigmoid), Main.var"#11#12", Decapodes.var"#31#32"{SparseArrays.SparseMatrixCSC{GeometryBasics.Point{3, Float64}, Int64}}, SparseArrays.SparseMatrixCSC{Int8, Int32}, Decapodes.var"#7#9"{SparseArrays.UMFPACK.UmfpackLU{Float64, Int32}}, Decapodes.var"#37#38"{SparseArrays.SparseMatrixCSC{Float64, Int32}}, SparseArrays.SparseMatrixCSC{Int8, Int32}}) (generic function with 1 method)

    We can now supply initial conditions:

    ice_thickness = map(sd[:point]) do (_,_,z)
       z < 0.8*rₑ ? 0 : 1
     end
     
    @@ -336,5 +336,5 @@
       record(fig, "halmo_ice.gif", range(0.0, tₑ; length=frames); framerate = 20) do t
         msh.color = soln(t).ice_thickness
       end
    -end
    "halmo_ice.gif"

    HalfarMohamedIce

    [ Info: Page built in 50 seconds.
    -[ Info: This page was last built at 2024-10-21T19:26:57.778.
    +end
    "halmo_ice.gif"

    HalfarMohamedIce

    [ Info: Page built in 48 seconds.
    +[ Info: This page was last built at 2024-12-04T03:38:12.606.
    diff --git a/dev/harmonics/harmonics/index.html b/dev/harmonics/harmonics/index.html index 8db8d64f..5b039818 100644 --- a/dev/harmonics/harmonics/index.html +++ b/dev/harmonics/harmonics/index.html @@ -90,4 +90,4 @@ x̂ = x .- sum(x)./length(x) norm(x̂) stats -norm(Δ0*(x) - b) +norm(Δ0*(x) - b) diff --git a/dev/ice_dynamics/ice_dynamics/index.html b/dev/ice_dynamics/ice_dynamics/index.html index 073c9e3a..5aace2ae 100644 --- a/dev/ice_dynamics/ice_dynamics/index.html +++ b/dev/ice_dynamics/ice_dynamics/index.html @@ -177,39 +177,39 @@ [ Info: Done

    We can save our solution file in case we want to examine its contents when this Julia session ends.

    @save "ice_dynamics1D.jld2" soln
    ┌ Warning: Attempting to store Main.var"#14#23"{Main.var"#13#22"}.
     │ JLD2 only stores functions by name.
     │  This may not be useful for anonymous functions.
    -└ @ JLD2 ~/.julia/packages/JLD2/IyyZz/src/data/writing_datatypes.jl:447
    +└ @ JLD2 ~/.julia/packages/JLD2/NKGUi/src/data/writing_datatypes.jl:447
     ┌ Warning: Attempting to store Main.var"#13#22".
     │ JLD2 only stores functions by name.
     │  This may not be useful for anonymous functions.
    -└ @ JLD2 ~/.julia/packages/JLD2/IyyZz/src/data/writing_datatypes.jl:447
    +└ @ JLD2 ~/.julia/packages/JLD2/NKGUi/src/data/writing_datatypes.jl:447
     ┌ Warning: Attempting to store Main.var"#6#15"{CombinatorialSpaces.DiscreteExteriorCalculus.EmbeddedDeltaDualComplex1D{Bool, Float64, GeometryBasics.Point{2, Float64}}}.
     │ JLD2 only stores functions by name.
     │  This may not be useful for anonymous functions.
    -└ @ JLD2 ~/.julia/packages/JLD2/IyyZz/src/data/writing_datatypes.jl:447
    +└ @ JLD2 ~/.julia/packages/JLD2/NKGUi/src/data/writing_datatypes.jl:447
     ┌ Warning: Attempting to store Main.var"#14#23"{Main.var"#6#15"{CombinatorialSpaces.DiscreteExteriorCalculus.EmbeddedDeltaDualComplex1D{Bool, Float64, GeometryBasics.Point{2, Float64}}}}.
     │ JLD2 only stores functions by name.
     │  This may not be useful for anonymous functions.
    -└ @ JLD2 ~/.julia/packages/JLD2/IyyZz/src/data/writing_datatypes.jl:447
    +└ @ JLD2 ~/.julia/packages/JLD2/NKGUi/src/data/writing_datatypes.jl:447
     ┌ Warning: Attempting to store Decapodes.var"#37#38"{SparseArrays.SparseMatrixCSC{Float64, Int32}}.
     │ JLD2 only stores functions by name.
     │  This may not be useful for anonymous functions.
    -└ @ JLD2 ~/.julia/packages/JLD2/IyyZz/src/data/writing_datatypes.jl:447
    +└ @ JLD2 ~/.julia/packages/JLD2/NKGUi/src/data/writing_datatypes.jl:447
     ┌ Warning: Attempting to store Main.var"#f#28"{PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 10}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 10}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 10}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 10}}}, SparseArrays.SparseMatrixCSC{Float64, Int64}, Main.var"#14#23"{Main.var"#13#22"}, Main.var"#14#23"{Main.var"#6#15"{CombinatorialSpaces.DiscreteExteriorCalculus.EmbeddedDeltaDualComplex1D{Bool, Float64, GeometryBasics.Point{2, Float64}}}}, Decapodes.var"#37#38"{SparseArrays.SparseMatrixCSC{Float64, Int32}}, SparseArrays.SparseMatrixCSC{Int8, Int32}}.
     │ JLD2 only stores functions by name.
     │  This may not be useful for anonymous functions.
    -└ @ JLD2 ~/.julia/packages/JLD2/IyyZz/src/data/writing_datatypes.jl:447
    +└ @ JLD2 ~/.julia/packages/JLD2/NKGUi/src/data/writing_datatypes.jl:447
     ┌ Warning: Attempting to store Main.var"#14#23"{Main.var"#13#22"}.
     │ JLD2 only stores functions by name.
     │  This may not be useful for anonymous functions.
    -└ @ JLD2 ~/.julia/packages/JLD2/IyyZz/src/data/writing_datatypes.jl:447
    +└ @ JLD2 ~/.julia/packages/JLD2/NKGUi/src/data/writing_datatypes.jl:447
     ┌ Warning: Attempting to store Main.var"#13#22".
     │ JLD2 only stores functions by name.
     │  This may not be useful for anonymous functions.
    -└ @ JLD2 ~/.julia/packages/JLD2/IyyZz/src/data/writing_datatypes.jl:447
    -┌ Warning: Attempting to store SciMLBase.ODEFunction{true, SciMLBase.AutoSpecialize, Main.var"#f#28"{PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 10}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 10}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 10}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 10}}}, SparseArrays.SparseMatrixCSC{Float64, Int64}, Main.var"#14#23"{Main.var"#13#22"}, Main.var"#14#23"{Main.var"#6#15"{CombinatorialSpaces.DiscreteExteriorCalculus.EmbeddedDeltaDualComplex1D{Bool, Float64, GeometryBasics.Point{2, Float64}}}}, Decapodes.var"#37#38"{SparseArrays.SparseMatrixCSC{Float64, Int32}}, SparseArrays.SparseMatrixCSC{Int8, Int32}}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing, Nothing, Nothing, Nothing, Nothing}.
    +└ @ JLD2 ~/.julia/packages/JLD2/NKGUi/src/data/writing_datatypes.jl:447
    +┌ Warning: Attempting to store SciMLBase.ODEFunction{true, SciMLBase.AutoSpecialize, Main.var"#f#28"{PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 10}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 10}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 10}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 10}}}, SparseArrays.SparseMatrixCSC{Float64, Int64}, Main.var"#14#23"{Main.var"#13#22"}, Main.var"#14#23"{Main.var"#6#15"{CombinatorialSpaces.DiscreteExteriorCalculus.EmbeddedDeltaDualComplex1D{Bool, Float64, GeometryBasics.Point{2, Float64}}}}, Decapodes.var"#37#38"{SparseArrays.SparseMatrixCSC{Float64, Int32}}, SparseArrays.SparseMatrixCSC{Int8, Int32}}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing, Nothing, Nothing}.
     │ JLD2 only stores functions by name.
     │  This may not be useful for anonymous functions.
    -└ @ JLD2 ~/.julia/packages/JLD2/IyyZz/src/data/writing_datatypes.jl:447

    Visualize

    Let's examine the final conditions:

    fig,ax,ob = lines(map(x -> x[1], point(s)), soln(tₑ).dynamics_h, linewidth=5)
    +└ @ JLD2 ~/.julia/packages/JLD2/NKGUi/src/data/writing_datatypes.jl:447

    Visualize

    Let's examine the final conditions:

    fig,ax,ob = lines(map(x -> x[1], point(s)), soln(tₑ).dynamics_h, linewidth=5)
     ylims!(ax, extrema(h₀))
     fig
    Example block output

    We see that our distribution converges to a more uniform ice height across our domain, which matches our physical intuition.

    Let's create a GIF to examine an animation of these dynamics:

    # Create a gif
     begin
    @@ -283,39 +283,39 @@
     [ Info: Done
    @save "ice_dynamics2D.jld2" soln
    ┌ Warning: Attempting to store Main.var"#42#45"{Main.var"#41#44"}.
     │ JLD2 only stores functions by name.
     │  This may not be useful for anonymous functions.
    -└ @ JLD2 ~/.julia/packages/JLD2/IyyZz/src/data/writing_datatypes.jl:447
    +└ @ JLD2 ~/.julia/packages/JLD2/NKGUi/src/data/writing_datatypes.jl:447
     ┌ Warning: Attempting to store Main.var"#41#44".
     │ JLD2 only stores functions by name.
     │  This may not be useful for anonymous functions.
    -└ @ JLD2 ~/.julia/packages/JLD2/IyyZz/src/data/writing_datatypes.jl:447
    +└ @ JLD2 ~/.julia/packages/JLD2/NKGUi/src/data/writing_datatypes.jl:447
     ┌ Warning: Attempting to store Main.var"#40#43"{SparseArrays.SparseMatrixCSC{GeometryBasics.Point{3, Float64}, Int64}}.
     │ JLD2 only stores functions by name.
     │  This may not be useful for anonymous functions.
    -└ @ JLD2 ~/.julia/packages/JLD2/IyyZz/src/data/writing_datatypes.jl:447
    +└ @ JLD2 ~/.julia/packages/JLD2/NKGUi/src/data/writing_datatypes.jl:447
     ┌ Warning: Attempting to store Main.var"#42#45"{Main.var"#40#43"{SparseArrays.SparseMatrixCSC{GeometryBasics.Point{3, Float64}, Int64}}}.
     │ JLD2 only stores functions by name.
     │  This may not be useful for anonymous functions.
    -└ @ JLD2 ~/.julia/packages/JLD2/IyyZz/src/data/writing_datatypes.jl:447
    +└ @ JLD2 ~/.julia/packages/JLD2/NKGUi/src/data/writing_datatypes.jl:447
     ┌ Warning: Attempting to store Decapodes.var"#37#38"{SparseArrays.SparseMatrixCSC{Float64, Int32}}.
     │ JLD2 only stores functions by name.
     │  This may not be useful for anonymous functions.
    -└ @ JLD2 ~/.julia/packages/JLD2/IyyZz/src/data/writing_datatypes.jl:447
    +└ @ JLD2 ~/.julia/packages/JLD2/NKGUi/src/data/writing_datatypes.jl:447
     ┌ Warning: Attempting to store Main.var"#f#50"{PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, SparseArrays.SparseMatrixCSC{Float64, Int32}, Main.var"#42#45"{Main.var"#41#44"}, Main.var"#42#45"{Main.var"#40#43"{SparseArrays.SparseMatrixCSC{GeometryBasics.Point{3, Float64}, Int64}}}, Decapodes.var"#37#38"{SparseArrays.SparseMatrixCSC{Float64, Int32}}, SparseArrays.SparseMatrixCSC{Int8, Int32}}.
     │ JLD2 only stores functions by name.
     │  This may not be useful for anonymous functions.
    -└ @ JLD2 ~/.julia/packages/JLD2/IyyZz/src/data/writing_datatypes.jl:447
    +└ @ JLD2 ~/.julia/packages/JLD2/NKGUi/src/data/writing_datatypes.jl:447
     ┌ Warning: Attempting to store Main.var"#42#45"{Main.var"#41#44"}.
     │ JLD2 only stores functions by name.
     │  This may not be useful for anonymous functions.
    -└ @ JLD2 ~/.julia/packages/JLD2/IyyZz/src/data/writing_datatypes.jl:447
    +└ @ JLD2 ~/.julia/packages/JLD2/NKGUi/src/data/writing_datatypes.jl:447
     ┌ Warning: Attempting to store Main.var"#41#44".
     │ JLD2 only stores functions by name.
     │  This may not be useful for anonymous functions.
    -└ @ JLD2 ~/.julia/packages/JLD2/IyyZz/src/data/writing_datatypes.jl:447
    -┌ Warning: Attempting to store SciMLBase.ODEFunction{true, SciMLBase.AutoSpecialize, Main.var"#f#50"{PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, SparseArrays.SparseMatrixCSC{Float64, Int32}, Main.var"#42#45"{Main.var"#41#44"}, Main.var"#42#45"{Main.var"#40#43"{SparseArrays.SparseMatrixCSC{GeometryBasics.Point{3, Float64}, Int64}}}, Decapodes.var"#37#38"{SparseArrays.SparseMatrixCSC{Float64, Int32}}, SparseArrays.SparseMatrixCSC{Int8, Int32}}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing, Nothing, Nothing, Nothing, Nothing}.
    +└ @ JLD2 ~/.julia/packages/JLD2/NKGUi/src/data/writing_datatypes.jl:447
    +┌ Warning: Attempting to store SciMLBase.ODEFunction{true, SciMLBase.AutoSpecialize, Main.var"#f#50"{PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, SparseArrays.SparseMatrixCSC{Float64, Int32}, Main.var"#42#45"{Main.var"#41#44"}, Main.var"#42#45"{Main.var"#40#43"{SparseArrays.SparseMatrixCSC{GeometryBasics.Point{3, Float64}, Int64}}}, Decapodes.var"#37#38"{SparseArrays.SparseMatrixCSC{Float64, Int32}}, SparseArrays.SparseMatrixCSC{Int8, Int32}}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing, Nothing, Nothing}.
     │ JLD2 only stores functions by name.
     │  This may not be useful for anonymous functions.
    -└ @ JLD2 ~/.julia/packages/JLD2/IyyZz/src/data/writing_datatypes.jl:447

    Visualize 2D

    # Final conditions:
    +└ @ JLD2 ~/.julia/packages/JLD2/NKGUi/src/data/writing_datatypes.jl:447

    Visualize 2D

    # Final conditions:
     fig = Figure()
     ax = CairoMakie.Axis(fig[1,1])
     msh = mesh!(ax, s, color=soln(tₑ).dynamics_h, colormap=:jet, colorrange=extrema(soln(0).dynamics_h))
    @@ -380,5 +380,5 @@
       record(fig, "ice_dynamics2D_sphere.gif", range(0.0, tₑ/64; length=frames); framerate = 20) do t
         msh.color = soln(t).dynamics_h
       end
    -end
    "ice_dynamics2D_sphere.gif"

    IceDynamics2DSphere

    [ Info: Page built in 55 seconds.
    -[ Info: This page was last built at 2024-10-21T19:27:58.565.
    +end
    "ice_dynamics2D_sphere.gif"

    IceDynamics2DSphere

    [ Info: Page built in 57 seconds.
    +[ Info: This page was last built at 2024-12-04T03:39:14.013.
    diff --git a/dev/ice_dynamics/ice_dynamics1D.jld2 b/dev/ice_dynamics/ice_dynamics1D.jld2 index 31e97199fbf8893c5dcd51c559c88ba0e8655311..4ea0794cbc04a35bd48322cf921b1a61679ef53f 100644 GIT binary patch delta 40386 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 q2ee7)rz$<_ncBIU8E#7^S{`w zA^W9p&|>OtZoV* z1>2K0TrY|0E#!xrao$4z>1JFXftzl_^%d&{mvaWDI&K1T{X{KWU$m-3t3F%dkF6;C zi&k6*RB3z9HqaVarCtwh4-)Q9cjg8Qwh9|=h`=dqY=>59=i7F$P;)0pKgs`L;$8>& zSFx(v1v&v$>Q5p&9P3q}Cezs-u>&gpKpk)`d{2lkZsx0^e6m-%v70SWLLsyc?rlXy)Lf9-bi*dMBjQ*<{I#I}{TSKaDZ4Fx|3EXTmi^)~DwuP;sf-BuR1-HV8mC3>=yPH&DQLup9UPX_nKSJ|b;P9T zn1O=tn#PLb*FOgeVK1G96T1yeyH-&dAVk+OQ|#%upqkJ=d4hSjDw})I@;{b;FA!{7 zIt#hW4CtuMZ`DK*Wbmb)&|qt%X-~RcOth{=UqQLlqh^gtHT{LCC}$(x@EjgA+d**N z7GTvsuPcMLEcLU^~%6n7Gr( zbVQXcfkJ+3=Q^}f`Ygd|IQZ>26Coj~Eu93!Fj${Xe;}B?m@7ucbO_a~9Ezb*WJ7X2 zVujN$=33~Q^rLE(cRWB+Yg{YLQd?!8h}M#CCq$$eaU&D@*A`rA z+bbNV40!<6%GwH{BE^8{JMeX+OCI zX}OxvHFf0t$~!cP)>bZ0rsc|3LTOnXd^)RB=--utEe^-ZBOr{HYgW>qO8>5GZ<pf&Zzn)!%hAkaxHl*8i`!!0+eH=Njmb$`dshH?> zw#N3bz18c5Q%!yP&me>TM?d1IKdfd#d$>t%V;ML+by`>s;B622#$s^n%!eejEy^B%FoTj*%9Cs%flm(&azEGiSqjP&aHhFuJmVU^~@}t1g^AZo}0O z9vwHcFvQkG*Tqi=?Q7!4NHEQ`;c5!5nPwKos3S&G{EQA7Jzg9bCPGkV6HX~Cqnf6| z9{P7JA)o$VTUr;?5%)$|e?n=h>#lciO1P|^vRBYhYkuiJOuj51CTAn09Yhr zNmtvw5VpDrThBZ9YK1o1L8VNWD1#nQ(dQ1x)hOqzhH@6}NeH&tS_sN^=GsULtG438 zs%bm4Y>t*)i{KBPT!ZEIg6Zid^W9N<7HaD{K~qe#F5Qi>Q|RO}EVsvQpsRm{mAe4p$@{M(>7d3fjeVn;aNpToaV$&C&BfM8K)L{ow2dd zoivD(zW9Mt4w{j%KMg2k2?9g+@zq5mP3y3;BpP=2I zt{LcAlAqY&ZHHCy+rSc5ww*0N`b%B?r}=+tcjDFnv8!{#r5R#`WIIr@JyNo*sbYI` zBd~J2A;=)f_8KhdYTZ$5lr)S+qm6dB?^TCUu|3$TI*eS=Y7tr+BhAjig6l;yi?L`^ zm;dl-+8}W@8YcwNt>ba4t_Ow844OKQc8>`{!bKZyqOkv>85bgOhV_Jf)h)P5!dF^5 znUce7q6J}`4LyaZCgja=)DsWn1{neu;iPDi z_Vmktjrd?(}b?R?>QKzHZov-Bh>TgZ^E45z>K{#iZ!Accgz; z*7vMZ?nKMtLPw{srhkk3s4IKXzr_U5@_Z`j3_|}^ZlDV-i+w}~bfte+cBosG?cJ+v z7iW5X`cKFAtfDWTort}}AVZ8T{q&~)j8detFQuTm)kD5DHKD(?;C#z~D-hyunJLzX zyf6|T4RQVz@!C=%PPMSj75WcsA)M;vE%??|{8~7Prxuk{T31TxijIE8VoG(rA#a(J z;z0fS*TkjRFVw6GYA&HY7atAyPp7e{qGll$nVbQ(yDxGfqDrOyNc~bITnb5Id!!H*b(8|gQwH8VXI(h0$*wC$&yN9Yu*|tjA zj+Tw+i?Lwr}dS4T0>D!{Fg!h zqn}3fU*&RRY0smcZkQ}|e6aM_PB)=ymG`F^EkA9%I91HcuZ%lL8Lv05aP5COLQ|=_ zK~UaGQM;C|<>tRk3N0F1D@JW=BuM9NHF330H_K!#bf)$7*8w4FsRZ&WgJ3^O}iO4aAP7+pE^}ZydSwFPW^J)YuRE=I)ZS zQus53eM6iS3%Zrv{7;}E zcCzK}FQ8o3Ozd4U*?K&-c4;iSB$MSifV|TbWP~foQj}#aaeI4^ecVCz^Z@D78RQO- z^JU3hpkirnkm8sUKea)~zGM9tZ`A7xa%De|cTn28AOGu~|e%L`E4bP;6yC6L_z)Fn9MJD_2H7o_SQNQVNDF84vUdjL{h2(srx zkiJDA{T@--m_|bL7%Ij;0g1j@waU{jT>1;&CY%tjJelg$ ze06F<>~kAM_pg^Cs$O+UcIE1l&CZ-77f2qtau$5{3mLI)!P(CLocLo0#bv&)#Q$Zo z{p`!h)8SCE=-Ak)hwNk_yFsPL@- znfw!E8Ky%mhp8c+2U(;5>7oZRN*`pN0Z3I1kXl2K*+w9h#vnB&Ak&qir0vUUL4|K^ zkjZsGmemERHUk-N4zkDsq>B~EsQMuD8h}*UfYho$X4`^P+Jn?I1exB5N@@OS0u{av zAd`jm#dfuREzaqBMnR8wiLV4NOG|~xYsgL(TulMG;NzcRwyYx`5RLF zT0%C3ye|aAw-}L|100_Vo^O6fJpPdo(~HN(1Csm?BEyc4*dWA}{Eo!Fk&q7$E$#wR z_6CulQO^Q|!qVT7f)WXNnRa3ZAnH;?98OKFE;zmY9dRs^kYTAcKLZk9hDgtEDJeqa zyWf$Bw-S;xYtacniryl!A@|{NA@}|7NX|P6d6ZsA0C9Pb$QS3da>4rJ?}*h0l7E@E z;zOgZ0TT5Akp}yobPz&6{f>lulv){ca&SB#c^_pY^dWD@TNEu5vOfP#WPXx}8WV>o zflz(MMh5l1`&2Og`a5FyMMAo@IocQy?H5FP4en8??~!52^kz`I0q1Axs1d;p}R6*keyKR{dc0gTq5#9V^V?8e3y~PN0i7~pCtHH z{7!iPkccLxev^Sn|AB5jYHnaFB>nsyNvx2NySJaE0V4Z}NKn@K1#3&V-;v^<5;CgI z%PD}+JCZQIg5K_*Nj&A;$=X%Nqz6Zj5Cbg~Z53Nr0+h@lWby2U9f{)^P^=uFoS3f) zfXd_ujc;PUniMJ+Pyr9nimdu$08%RuQndVhmN@A#AjfI|J#!Sg02E&hp`oLeHX@Pw z3@Ad6BU=}7mi%bHh5!}O8fl{Gvf}T}B-ele<>+%{e*+4I#6JMY#Q>p(b5sGux&{NX zst)d%2-?8_MO8=W-n-ZHNT?wL3aJ55^EplX0+d$+p*n+y3?o@a3@FnO-D{X01(3=J zp+WaG(}=M#12U{hAxpU>|6|+)fV8wm3It~wFo^`3FrWZqaBpdB;yHk_jS*V4;IK7G zQ!=1b6MzP{^nU@6Qi;%&OH&$<3R4DDPF19kPb(V$kj50Djw{dk6Q9})$h#J_6!mqG z8ld!A0P)wl^&^|>a9O`~^2FM}wD3QJom^H28>+iVNFgP484VTJ0q9-A343VBw=P1P zk{Xl{PcsJOQ4gSMtzAa}lw1#?4@t);0{t${Jd#dusBZ z07Y3N)H|nlHxjC1Kp{2&%^zF64M2G|2n`*#qZ7%pWk8uKfL^R7z5uCg5h^{t!-N>y zGay4dj@Y)L`;_PU2S8d{BSmk;L*r{Cupt8qu!oig-yK~BP_{in1wIxlNm?TYl-iIZ zkMwy<-ZCW`AY~(jn$(P6Kq?wDpz=o0(z8XYJps}*M(Ea~C7#5`fdP3p0VrWaLNP$; zO%Qtg@_7@I)RX}wI?(y`ES*;BE@%LdtSLfMdu|UVCCwO6aZ_mNL$w+80rG8zki)w> z6NqPX?g8gV>bKzR6@B(7TW54>!JXrNUAY)USGjPyA!P2dR$LzAVNEY_4J2{SoIC%r zIY&+p;mzbKC(@t=XE*=cq&gOb>vH@s;hX%EuBK}E6xPDSI%23M{JJ$-w7h_jTt(81)# z+ZwIyH5hhWrgjnBi*0|Kykn_m|0p^b?l^F(BB(YEIf?;y%j=FANE{GJlilJkJhv!D``tFHWvYuOlzcl9r0sE0f}qN zfMVM~OFe=XS!00OAarTWTs0|d$AAjj0#q<&6|P*=?GVzIaS_DHodG$v2WW!X4_uVe zhZkYlzjFCd66wKUBHV#leCkvHcvs|(4SgSH>qc@rNa;K6M*Bnuj6lyF5NLvJup!{F;Tri zYP~^b_W`N&VJ0x5JNTftVr^@Q}PsI?8ATz`(g$)gSP>s?Tb*ZbJ9B!*pC4P_yBZr=BH$U zvV9Ob7qsa)@KC~L&X`xv4@2;Ezis3d7a7*Oh9fLffMhl^b05QJv74m?LHhBBaX zsv@17?)`|%Y0XfCp89_OllTl{K;C}XS2i}A3+|=U8mWWrjrOr2N&Zp>6Z+E(4ucHF z8H~g0o=ShrQ~=2I;h3pFkiH{9CTl>J1u-)i;17G7KV%zD9@+lr!_`kQ-ALMShU2LL z0BQcR{SJ;Rha*(c;946}F@gb=Qx(@+;utjC3y@|6LN|w-UNqZyFL zD1c_jhYJ8Dk3#5z!|qxnZj6+{=m46*(U8HOAqS?y7?h2{Oa)`6#$u+%fmBZb89xzZ zQ3x}G-ebUranl{@Vu;3|4||ME;z-h1hU1CBm<;|yAcklxLZK$(=8=+d45)Z4wB&PT zx(SA8976ABjPN3!6Bv-kcz_mb7L;I!#v>FKXRjb}6B$tK1b~FHBRI*IO+YB-Y{?&_ zFoXdWOa!QAa4kHfsY4J-Dd}6CI8A0ij+5}DtlO4$;9fkfk;dS-okgQaWT=$Euwa_O z$>c;2&fcRjKLHY0hG!G%DVQiNCMpc1%QTQt;UM#-GZW|$3VypzEceFg^Km}TW8h9ln0Hh8>sNRVDXyP=D0Xa?uXm{i# z9D?yv5$YcsJC#I+GoXlR0M%Y}U@f#%G!3DKw;w$txzia?4t>P^bg7m6w(c7DbVRCk zf4GoX&txE0GoYR3Th?lzov0ZI9UuO)goMtL(ib#^rf;S=0PQ_`Tu*`Y72!#s%WO>3 z986OLNYy-$+DMSu^O@;$oCPlAC)+Io7vg833-00XpODBo48J30)2V+iU54f);}O4z z)=1s%(Yr?9Np1uK%9#T#J!#ekPYGNi5W09{aC>4sj{#ZD1!&TU2iU=*<|3qOwB3M& zMlzs~c>rBIZMhrvDQ_M^7rvW*Ct33uP-Y~oU8h*#8J%iAGOOF@ohHW748|}D8roD) zHXIt#Mj;e1C2c2 zv|0c@_;~z%5Btyp^g;Hq#xWAQkl}bp3_$05JQ{%!iqY-uUpIP_tVIkcb0I*Z&606i zQ!PSh^N!c|iSZH!WVjfh$0J5rVTcwZRO{NQ5E8hQ0R=1pXw_zyngC@l;Yi>EdN<=| z$e$!_8G}h(3QWb>+i!qTF2ja8*3hmY70Ve=IaQGsKE{(b0;E}vQ2kbM!Ng~Ult8Z- zn!s2{;NbC%@ky|3yzHV}iHVBCM6CiTO91J+8f3D-OrYTkaD0UQ^Ai}M73f2!W1}{b zz&M8E0W0am|DBG&f40S8glLU40+W|du_0-z7*J{)v=sBUnKOoH6+)qgUQ0+tJOe7H zDsO+#h0kDrTMSV=LXS_cX+wNgGa&B-Xle6G2fQ7Xo&XR(`|d@unLbbb+clNM)xeB$ zbLa~V$pma@LNnn7DOtm4s8|3fx=_jNi=6U-?>a;nAsk8!$lY(C=$!Zw@0q>luD~6M*J?8+Z_) zbb?TVzx7d)w1EL7t_LW~pvV9tv;m<`wO<;Ml8p?gcmqJUWFM|#gf=47&mm(z@!Z6K zJQ4wlb=rrk-Q+}s44RF2OX4;&px8|SefO${mzB#lA++p6X%Q(*Vn79(0kUuP$2xFN zorI8{*W4iDlq_Y?me34tfecQ4dq{k`ihh!}V5X8WQ`<08+d&rX0O_&|WYlhE28*|V z56>=dsE#2@MjvW4@BSC@+{SR+V=KLz(2kCa&OLPN9$F)f!1_=1%}LyL1{AvuPs%fQ z>efB9MuI-Z*ncF2I~Y*Gc8+i#XiL%C24RSHAk<`gvpd9T7XxzKiHGRpdoix@v_@)a z@|Yu;Byu+cir58#NHUtA2rU)uLTKIVSKCQ$3Iod74F}Fw-W`B(NkN8R9&Jmk|Bw=B zx|Jqy4}sol>^V8I@|3(~`36GrF{^kI3u zQd8peC&O>YRGN#^bP9FO&jcu*)<_ZRvbEhI61kTFMf?d7Dw>hbVTArfsAG>S^+|3T z1IpP8kS4~>0Yj9Akg$4gD6vjwKvw$zx)_l&1)!*X2+58uav`Dn8Bj<%Kps0xDger( zeoFgvY4GLAB(l zr$d;hBbcWQkl9B;DvyKIWHR%YbC4c}8`2(LYwdar&>?hT$dc#g#QF%sZL7nuul9>B zyJ3J1BXsn;m4bw3Frbhl0G&ygh`lxM2tp%o-8)ROjxwOk41kj6y5q1=9YyHtvx*JG z_&5VHJO)tWDR)b7PkRiZz#rR^Nnj=e3OEkXx^{ib0m?p(P+pUt^m@h#29%l!(1()` z@HAd|0-;WW&EAlTlTrf3I~?3e7=eZd#_fR&YENROvM^KGn5oks)6amEodfB6o|(bS zlip=ofGoXNMfYy9lJ`Y2b zjZlW?n*${63eEwJq@xEX`SjiX-AC6QA=8 z$om}Lm$}&oZ-J-N8fgUTnK_LkNf#JU;(2K4RE_!=2-yXM=7o-UnZeYH7}tw20T`l7=)*u~)n`(1nc;Z( zC4l-QHpSC3&1Hm6)o2z$d~z6&_Z5Ib9`9WZEu~*UXzRoV1|;b!14_&RDADZBA%J98 z5&HZr$Ay$!V?f1M0UGB&ss=#5*AR+dad{r`yv~3;a&a=clr$TlWLhI-u+_ZlDI_kB z0mWX2mcC7zSRbIW>j+JK<>pHY^Q8=mHw3wS$l#4aNAW8I^y8b4nfePebptbX6J-1? zkVUsay4+=EFfku|_;TF}GbsBDeefGye-A0S!En6zFMt9a?>EN~-9SiQW8WO&d6NNo z{0-2p=H<&VM1Lb>7B}TRiMz#sVs8SJ(sCA#!LpkOeduv(9x1%dfC_E_wE9WZLTE{S z8=>T3`&tmEy9~(j4nBr5W=$i2;%SYP!K6!F+mgt83@G9*P5Tsj>tpD3cYum$jRbAk z!CxS`1yTm3dx8ZVnYWkT6TEa#fDEb&FjMz2Qx7mx4?#v1fy{dZQuTzH!B}e8R85y8 zBgc0GAIfNrBK*r}3{fFM zf%iS?>zR~6>89XQ z7=vx6JdA@3x;(>7J;zMFz)ZaYseKJHyBMVM4Ksrg&%p6EgU#3BlP9?ipIqF4FfX#2k#C|TC9MUw6sP_ zM&0JGACSNj1{Cmy_Wy@85LrWp0F+H@B*>vvz(bN&DrHc*DOf`0PN7TD6XoKAE%c)* z#YB~1qTXVn-h@fgz=^vu%?OoWcl|q6^lecK;+rZaDn zw2urZ^#ee*k&W`9CFMtiY;LE#Bo&_+Q29rIJU{*Y4j|1Zgu;FJgT&_x1M>b1(3)Pd zFo4oOBedeh)XOC4tCT?Lp5Pa02zHEkbNmTpQ27-z^$jysj+y!a(zgO+@=uUuGP&SU ztorRjQovVmqC@>OygQWr6`hFQeeN?!D`$9~`VDU>HIhYPjLH#mJu*3oRD5SZ<>k;) z$Bb$1F-G4J>KgLFhWJ!4AnzXlX?%L&la=W|5bD49PAN(H$$%0o@Os~?1N)#Q*-wN% zBpq(FwnYB>W7Ne|L%L--{F@#yzA`yX0VQ6VS!6X_BBV=cVsD6580`sMVaq(qMa6;l=Ipt1Ne zc5`1ngr-E_$snEv49G(t+#P{v?U{9)vUbK!2uSVib z7_P?}15`5M>`DxhF+%4ryOgDO#yn$0fdquSnGB7u4Lvrgdpq$zO<&Ixs1CUD{gl64Ic}J}4 zF(9kD0L^Of3U5J1)kWw>fT}wQHIs5E-WrtG!yJw{y$a7LitqtV7jw*&1?I{Uq^dqh zZ3B?m*6bWQn#l>blwO!A_^JDT5Ur8=Y`vW$+mT2MhU*dL;JSs~)!P^(bAS&0uiUAqg0CaYAHr_DP z+8|`-y2OeE+DbVTZx6~--)sm_*s47k_tiT24ak8Lo%e0aVAK)k_SL9YPt6GkTJ&h72gv9-w)P8XX2m)exa- zcfKYNZK&edt zy4tb689+)0gc@G0ZbT}YGN5uARq?w>vj!F5RYpxygd=n)@BDTm@6LU}XH;pFex z+aQP8_+YfMIp(Sb=E@1A%mt*cE6C)Q>>L_8f)|lH^15J<9MOvn>7xgcz!nVG1DXT$ ze2W`Cv7g->A>*Vsmr0rv14?ZH(7dCcVlhZg2tBn4{*zQVGoW&+5*AL!;grZL0BM{N za{l_LFY$3@K;ACUlKi>f34qdF5bECcX9Y=W$$%1F0jl$!y8)1_B|@*u-5-(?HwIKp zqblYwep42n_4v9WbY$S>OT@Faltb|@p}ZC5@U-cdp^(G$R+y_cn5(v!t9BsE+JjVk zfQ;|J&S5zoZ)2c5bBw1Q9w%CGoWIs;x&Ng&~2gaPHKCE-kKlYL_9qhkcT_8G-zqZao}FE zJ3@{|vp)Q#v z7}{skGvevRaNR=<(AE68c-bUbjZppOa}!BiX9g7O1<<BDeS_4 z3OWO1KmP+>j#YQj1u18AIC1L6fE>HZg|}ZU`Tb+MLqqXhk!h)kjwX@a8B9bsXy{o3 z9So78$TmZY!r_ZIMb;*O#Q;2mhDTU&lLU~V2;VS*E zO(BKxJuy|iFjd}|sy-m|`hryT1F7|8r?8+WcyXuG>POg-dZ8EFXViR8oV*#XJN5>s zg`?SJ3{r1|YR+p+FPHUUKoQ;m83k}w02O&7G}Gevev;dl0p;`osC;p(13)f)5el3z z{w=ZY$AGMS0ID}*%2(U`bKYs4U}>y-Yk?4z#PteX}1Y-7&QQMH4t+(7;`lQWcE;y%3&Zi z{_Gs)3=qAb-+gI>_X1o7q7yI8YtJCogBhM%4FbFCIO`N zL+Hqu-nk^up8*9711QG4OKpI%hauGI{JJcX7Qlc~{pIlR-kU>908$1ZG%cy-JyJ1T zN}+VSa5$;oTW;UMd4Tw%Nc5u}j)@w9i5iKC(tu140x25}(sv9yftkZGM3X+2V~9pb zKG^Y(mVF_{BN=`h1_D#D`gjA3P@o(h3OhM3i3DmGOu$HBK3c{*VSq;BzHX`+Ttd=< z7*MJPpux&{c+Wu@gpjsktU0L|#em9#02-oM{sLOkj6!Jki$F8tGll_qj|S-7-z&xd zls+1v8gtV&kfdM+lt^PL4ngC0hZF$Gf)TPCHnAZo87t*ayjdt8t2+|z2up+vYQ|!w z#$l!=V5TO5Ob!8AHVLFUl%2uUvEW6`uXm4u7s_$y#mlIa6{KQ3!}aoU0Oi!^(H4U= z9wEJE<6aV`(;+b_wJ5ei=yF_*+mVL-7os$vc+f;Qsu zvn&*$DJR?;lR~YOL-BT@Tq`Fv57RF&o&8h%F){k_)ncl`FjZ4ARpB7xr-Lk-0n%j_ zJB5kVvh*cJw-<>RqcC(L>Ez{gq+}|?^Wre@JndGk0F2R8-R`>I3nZT549H^|Kt-zx zaoLnS4Wa4vUzw4(=?o|~9H6#Wx8e$kmF2%nmmtb3Hua36QPDPpEV|tvl&ptEIC|V4a$8DP!X+>4h=18G%zE%bEFhX z_Y3FXFg!bS-Xh4MdJg6)0&_JNa}^0PO8UWR`b%9=P*yEq=P-5-xc=wj!RNq>GTNBr z#ol1Lx+xN7on?-4OS7SNCxCM4_Z1B_t#7e(maHYTAM5& zk@Fc)L?l3)Wd7qZNRbHL*_20bhea`Zf}O&Mh2TV9^CQbJMhnsNTwndxBzG~x z^PEMr_vO$SJR$idZjYKvqkjCASL~Q=p}&B?u`>F8o14mocD_r2yRu z>h&I=yrl?TPui~_S<4wv<}!fVR$P4skZL(X8RzC)CB`clkYOx9C8maWeMTFLQ0^cj zQxdq60R_;giYYWXT#yPaWv@WU#LNEzNsE(mDBUt#39FgDHuyzQRUBq&6=o_PGqoC| zMgW<<2Bd5qJA)x{;6vPFBb?sy;?RdW9pdRd!+3_{nX3S5HtAh4hA18(kH^VBi1BI$ zWSBs&A&5T+<9{1l($X5KmuC+9Ko>y*0}5CTEnOKt4sWJpua?6%r2jHlM$*uuzRfRFuE$Jmz)Wq#Ol<<`yBTD163DVG>PONxGF(sH0Irwb>yd#m+K5ogg$K@%ibMufz7e3irjuI$q)9}m zbszP5;PU`NKMeLQB3|5c+s{lQZ$$%78qQ*Et&swIAb&s)Qn-f!6{J8*iTTxr0;Jx9(9M)Y`bEN2 z2ITk$KwW&3cLNmv2SQeQ`n5>ppHd2?TZXBa!n@0#hd~O<@Mk&HdofjMn5umsUG{^F zIsh{7AUlN~e}WfHMs#V5LHZNDm>gr%m&BzpT#wxgP@Qc0bx!Fg{L1zsw0x3}iWKf+ zKm}<4B_wUd=bzO35Q@8^*iM}GGa$!wfJX0MgjY=B(-D$&m{pfV9$-Kb`vEfOyvPXL zE834xv26WHl6#N=9WUnY@98Gc7(0CaZ4OIwUk20}F_9a~Luk1?Q}qX131`aTCEbPS>QyZt&5 z>r4h@bsV6pT|42;oT%dnwOH)b% zpF$Fj0F-xH=X&lu8} z2jl=$>(b#z0A=SOv?o8e2T8lefKsml zlu%=z83ySZLJ#bwd?gjR45<7XKn<4jaLS`TG+mMpK7*H{ds<EW7 z%_W|HOF5Ko7v8`ePPQC{FG)$ifw{Vgxw?h9x(%}I4oLMqknsiV9G2ezFWTk>oW>yi zjb8Y4a5Ex4w-~N_-vr3n(4huE={FH-m-L`7NxIE|5^n)y%h^oqhtz+4q# zu8J^Mk3beZ2I=w?WYjZu4vQav7xkkv@X+B~h+e$0cTXXnMGV(H9s*<`i?+fbJw(VQ z&Nqp~Jz_wyMF1_R&*7Kr%Zd>4xDou86h3A^1&;t)^Zq-IL-k{XN}EqYfzx20ik>3W_tEUrB=lS0O+y z&k^!VJkXX{zm#$)-7kEBIXv~(fF6*;_!pR~mzb;9n5$xtdH;Y^m4MWivU6DQ0=&4` z`Ph8yNiWfhkBcweBTlawt~muDu@d1r7;Z-C-yjWk)2b(b|HvX}uyyq1#$CknOv zegmK)S|dU8ujdRTx&JVroMLeA{MF-l=IZhfLd{obGl_Kx1G0Jp(C(h5co#3~4MH=X zJot-*mNKA_5;^?#n07!6xR*z3B=?%#YUoF@${0{4jjEW#ywLJj0IA9lDjhX*ATfR? z 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 XaEdt+8Z7PEX!)M1WdnO0s+IYFJwFz{ delta 78666 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 ZJnpGo%#l!cS#*Qs-BrqX&zn||@;@D@$ASO= diff --git a/dev/index.html b/dev/index.html index d44a40b5..5352c315 100644 --- a/dev/index.html +++ b/dev/index.html @@ -1,2 +1,2 @@ -Decapodes.jl · Decapodes.jl

    Decapodes.jl

    Decapodes.jl is a framework for developing, composing, and simulating physical systems.

    Decapodes.jl is the synthesis of Applied Category Theory (ACT) techniques for formalizing and composing physics equations, and Discrete Exterior Calculus (DEC) techniques for formalizing differential operators. CombinatorialSpaces.jl hosts tools for discretizing space and defining DEC operators on simplicial complexes, and DiagrammaticEquations.jl hosts tooling for representing the equations as formal ACT diagrams. This repository combines these two packages, compiling diagrams down to runnable simulation code.

    By combining the power of ACT and the DEC, we seek to improve the scientific computing workflow. Decapodes simulations are hierarchically composable, generalize over any type of manifold, and are performant and accurate with a declarative domain specific language (DSL) that is human-readable.

    Getting started

    Walkthroughs creating, composing, and solving Decapodes are available in the side-bar of this documentation page. Further example scripts are available in the examples folder of the Decapodes.jl GitHub repo, and will be added to this documentation site soon.

    Under Active Development

    This library is currently under active development, and so is not yet at a point where a constant API/behavior can be assumed. That being said, if this project looks interesting/relevant please contact us and let us know!

    +Decapodes.jl · Decapodes.jl

    Decapodes.jl

    Decapodes.jl is a framework for developing, composing, and simulating physical systems.

    Decapodes.jl is the synthesis of Applied Category Theory (ACT) techniques for formalizing and composing physics equations, and Discrete Exterior Calculus (DEC) techniques for formalizing differential operators. CombinatorialSpaces.jl hosts tools for discretizing space and defining DEC operators on simplicial complexes, and DiagrammaticEquations.jl hosts tooling for representing the equations as formal ACT diagrams. This repository combines these two packages, compiling diagrams down to runnable simulation code.

    By combining the power of ACT and the DEC, we seek to improve the scientific computing workflow. Decapodes simulations are hierarchically composable, generalize over any type of manifold, and are performant and accurate with a declarative domain specific language (DSL) that is human-readable.

    Getting started

    Walkthroughs creating, composing, and solving Decapodes are available in the side-bar of this documentation page. Further example scripts are available in the examples folder of the Decapodes.jl GitHub repo, and will be added to this documentation site soon.

    Under Active Development

    This library is currently under active development, and so is not yet at a point where a constant API/behavior can be assumed. That being said, if this project looks interesting/relevant please contact us and let us know!

    diff --git a/dev/klausmeier/klausmeier/index.html b/dev/klausmeier/klausmeier/index.html index 919f6710..31fd09d3 100644 --- a/dev/klausmeier/klausmeier/index.html +++ b/dev/klausmeier/klausmeier/index.html @@ -124,7 +124,7 @@ end return (args...) -> op(args...) end
    generate (generic function with 1 method)

    Let's pass our mesh and methods of generating operators to our simulation code.

    # Instantiate Simulation
    -fₘ = sim(sd, generate, DiagonalHodge())
    (::Main.var"#f#5"{PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, SparseArrays.SparseMatrixCSC{Float64, Int32}, Main.var"#10#12"{Main.var"#9#11"}, Decapodes.var"#23#25"{1, Tuple{Matrix{Int32}, UnitRange{Int64}}}, LinearAlgebra.Diagonal{Float64, Vector{Float64}}}) (generic function with 1 method)

    With our simulation now ready, let's specify initial data to pass to it. We'll define them with plain Julia code.

    The most interesting parameter here is our "downhill gradient" dX. This parameter defines how steep our slope is. Since our mesh is a circle, and we are setting dX to a constant value, this means that "downhill" always points counter-clockwise. Essentially, this is an elegant way of encoding an infinite hill.

    # Define Initial Conditions
    +fₘ = sim(sd, generate, DiagonalHodge())
    (::Main.var"#f#5"{PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, PreallocationTools.FixedSizeDiffCache{Vector{Float64}, Vector{ForwardDiff.Dual{nothing, Float64, 12}}}, SparseArrays.SparseMatrixCSC{Float64, Int32}, Main.var"#10#12"{Main.var"#9#11"}, Decapodes.var"#23#25"{1, Tuple{Matrix{Int32}, Int64}}, LinearAlgebra.Diagonal{Float64, Vector{Float64}}}) (generic function with 1 method)

    With our simulation now ready, let's specify initial data to pass to it. We'll define them with plain Julia code.

    The most interesting parameter here is our "downhill gradient" dX. This parameter defines how steep our slope is. Since our mesh is a circle, and we are setting dX to a constant value, this means that "downhill" always points counter-clockwise. Essentially, this is an elegant way of encoding an infinite hill.

    # Define Initial Conditions
     n_dist = Normal(pi)
     n = [pdf(n_dist, t)*(√(2pi))*7.2 + 0.08 - 5e-2 for t in range(0,2pi; length=ne(sd))]
     
    @@ -157,5 +157,5 @@
         time[] = t
       end
     end
    -save_dynamics(:N, 20, "klausmeier.gif")
    "klausmeier.gif"

    Klausmeier

    We can observe a few interesting phenomena that we wanted to capture:

    • The vegetation density bands move uphill in traveling waves.
    • The leading edge of the waves is denser than the rest of the band.
    • Over time, the periodicity of the vegetation bands stabilizes.
    • The distribution naturally emerges, despite the initial distribution is a simple normal distribution.
      • This is evidence against the real-world theory that these vegetation contours are the result of an initial (man-made) distribution.

    Conclusion

    Due to the ease of composition of Decapodes, representing the Klausmeier model opens up many areas for future work. For example, we can now compose these dynamics with a model of temperature dynamics informed by the Budyko-Sellers model. We can take advantage of the fact that the Lie derivative generalizes partial derivatives, and model the flow of water according to any vector field. Or, we can extend this model by composing it with a model that can recreate the so-called "leopard pattern" of vegetation, such as an "Interaction-Dispersion" model of vegetation dynamics given by Lejeune et al[4].

    References

    [1] W. A. Macfadyen, “Vegetation Patterns in the Semi-Desert Plains of British Somaliland,” The Geographical Journal, vol. 116, no. 4/6, p. 199, Oct. 1950, doi: 10.2307/1789384.

    [2] C. A. Klausmeier, “Regular and Irregular Patterns in Semiarid Vegetation,” Science, vol. 284, no. 5421, pp. 1826–1828, Jun. 1999, doi: 10.1126/science.284.5421.1826.

    [3] W. A. Macfadyen, “Soil and Vegetation in British Somaliland,” Nature, vol. 165, no. 4186, Art. no. 4186, Jan. 1950, doi: 10.1038/165121a0.

    [4] O. Lejeune and M. Tlidi, “A Model for the Explanation of Vegetation Stripes (Tiger Bush),” Journal of Vegetation Science, vol. 10, no. 2, pp. 201–208, 1999, doi: 10.2307/3237141.

    [ Info: Page built in 29 seconds.
    -[ Info: This page was last built at 2024-10-21T19:28:27.986.
    +save_dynamics(:N, 20, "klausmeier.gif")
    "klausmeier.gif"

    Klausmeier

    We can observe a few interesting phenomena that we wanted to capture:

    • The vegetation density bands move uphill in traveling waves.
    • The leading edge of the waves is denser than the rest of the band.
    • Over time, the periodicity of the vegetation bands stabilizes.
    • The distribution naturally emerges, despite the initial distribution is a simple normal distribution.
      • This is evidence against the real-world theory that these vegetation contours are the result of an initial (man-made) distribution.

    Conclusion

    Due to the ease of composition of Decapodes, representing the Klausmeier model opens up many areas for future work. For example, we can now compose these dynamics with a model of temperature dynamics informed by the Budyko-Sellers model. We can take advantage of the fact that the Lie derivative generalizes partial derivatives, and model the flow of water according to any vector field. Or, we can extend this model by composing it with a model that can recreate the so-called "leopard pattern" of vegetation, such as an "Interaction-Dispersion" model of vegetation dynamics given by Lejeune et al[4].

    References

    [1] W. A. Macfadyen, “Vegetation Patterns in the Semi-Desert Plains of British Somaliland,” The Geographical Journal, vol. 116, no. 4/6, p. 199, Oct. 1950, doi: 10.2307/1789384.

    [2] C. A. Klausmeier, “Regular and Irregular Patterns in Semiarid Vegetation,” Science, vol. 284, no. 5421, pp. 1826–1828, Jun. 1999, doi: 10.1126/science.284.5421.1826.

    [3] W. A. Macfadyen, “Soil and Vegetation in British Somaliland,” Nature, vol. 165, no. 4186, Art. no. 4186, Jan. 1950, doi: 10.1038/165121a0.

    [4] O. Lejeune and M. Tlidi, “A Model for the Explanation of Vegetation Stripes (Tiger Bush),” Journal of Vegetation Science, vol. 10, no. 2, pp. 201–208, 1999, doi: 10.2307/3237141.

    [ Info: Page built in 31 seconds.
    +[ Info: This page was last built at 2024-12-04T03:39:44.820.
    diff --git a/dev/navier_stokes/ns/index.html b/dev/navier_stokes/ns/index.html index 43fbb0f7..e8f1e294 100644 --- a/dev/navier_stokes/ns/index.html +++ b/dev/navier_stokes/ns/index.html @@ -12,4 +12,4 @@ gcd = great_circle_dist(pnt,cntr) p.τ / (cosh(3gcd/p.a)^2) end

    Based on the configuration, you can see different results that match the expected solutions from the literature.

    Here is one set of results from using the inviscid Poisson formulation:

    Vorticity

    We can visualize the distribution of vorticity at the $\theta = 0.4$ latitude. The difference between the distributions at $t=0$ and $t=12$ is accumulated error.

    Azimuth Profile

    [ Info: Page built in 0 seconds.
    -[ Info: This page was last built at 2024-10-21T19:28:28.035.
    +[ Info: This page was last built at 2024-12-04T03:39:44.870. diff --git a/dev/nhs/nhs_lite/index.html b/dev/nhs/nhs_lite/index.html index fe368478..d3f7470c 100644 --- a/dev/nhs/nhs_lite/index.html +++ b/dev/nhs/nhs_lite/index.html @@ -505,4 +505,4 @@ s = EmbeddedDeltaSet2D("torus.obj") sd = EmbeddedDeltaDualComplex2D{Bool,Float64,Point3D}(s) subdivide_duals!(sd, Barycenter())

    "NHS_torus"

    Results

    In the DEC, vorticity is encoded with d⋆, and speed can be encoded with norm ♯. We can use our operators from CombinatorialSpaces.jl to create our GIFs.

    Vorticity

    Speed

    [ Info: Page built in 7 seconds.
    -[ Info: This page was last built at 2024-10-21T19:28:34.907.
    +[ Info: This page was last built at 2024-12-04T03:39:51.966. diff --git a/dev/overview/overview/index.html b/dev/overview/overview/index.html index bdec8b18..89d917f4 100644 --- a/dev/overview/overview/index.html +++ b/dev/overview/overview/index.html @@ -788,5 +788,5 @@ # Animation record(fig, "diff_adv.gif", range(0.0, 100.0; length=150); framerate = 30) do t pmsh.color = sol(t).C[point_map] -end
    "diff_adv.gif"

    Your first composed Decapode!

    [ Info: Page built in 38 seconds.
    -[ Info: This page was last built at 2024-10-21T19:29:13.272.
    +end
    "diff_adv.gif"

    Your first composed Decapode!

    [ Info: Page built in 39 seconds.
    +[ Info: This page was last built at 2024-12-04T03:40:31.164.
    diff --git a/dev/poiseuille/poiseuille/index.html b/dev/poiseuille/poiseuille/index.html index a6b27afb..2403a71b 100644 --- a/dev/poiseuille/poiseuille/index.html +++ b/dev/poiseuille/poiseuille/index.html @@ -314,4 +314,4 @@ ComponentVector{Float64}(q = [6.1920127883135164e13, -8.568007487148114e13, 1.9201126813454332e13, 4.378232165394925e12, 1.8030374371124078e11, 2.8426519954607034e8, 710.8769150994917, 6.748007174036271, 6.60426400300304, 6.922786733469125, 6.682957266215476, 6.945403324312223, 6.7111376191740355, 6.656096080521041, 6.479123002928333, 6.147464655239918, 6.0393618314981845, 5.652147818805783, 6.154271691684817], ρ = [5.0, 1.7758054753548302e29, -6.8141080132203945e28, -1.3074226599053273e28, -5.179078079719823e26, -8.152453309063853e23, -2.0200503431610353e18, -1.2631666518743517e7, 147.24610626456547, 56.36699150835656, 74.77129907634759, 19.020919411453633, 7.7736198102141625, 24.816711506008275, -7.713715102650178, 9.350784612594685, -41.20554002070084, -6.373736847235397, -107.83102825931032, 5.0]) ComponentVector{Float64}(q = [1.1872311497086327e14, -1.6427946335913153e14, 3.681545345912436e13, 8.394642881892475e12, 3.4570700757818317e11, 5.450384428328904e8, 1357.033806521059, 6.748007178063511, 6.6042640030030295, 6.922786733469124, 6.682957266215472, 6.945403324312218, 6.711137619174041, 6.656096080521035, 6.479123002928334, 6.1474646552399115, 6.039361831498188, 5.6521478188057745, 6.154271691684836], ρ = [5.0, 6.528332303732435e29, -2.5050469818549493e29, -4.806432744956543e28, -1.9039665777619965e27, -2.997058245157065e24, -7.426241321036376e18, -4.60344428676951e7, 147.24610490847428, 56.36699150836021, 74.77129907634993, 19.02091941145731, 7.773619810213891, 24.81671150600915, -7.713715102649317, 9.350784612596406, -41.20554002070008, -6.373736847232409, -107.83102825931041, 5.0]) ComponentVector{Float64}(q = [2.2763198293694738e14, -3.1497876390476056e14, 7.058755723957314e13, 1.609534256072918e13, 6.628361437609381e11, 1.0450212822498903e9, 2595.9161158413563, 6.748007185729912, 6.604264003003024, 6.922786733469123, 6.682957266215469, 6.945403324312215, 6.7111376191740435, 6.656096080521032, 6.479123002928335, 6.147464655239908, 6.03936183149819, 5.65214781880577, 6.154271691684846], ρ = [5.0, 2.3999281654352328e30, -9.208987116154255e29, -1.7669280274524022e29, -6.999311315417555e27, -1.101770585650097e25, -2.730015105335222e19, -1.6845774169172958e8, 147.24610232452667, 56.366991508362105, 74.77129907635116, 19.02091941145923, 7.773619810213749, 24.816711506009604, -7.713715102648868, 9.350784612597305, -41.20554002069968, -6.373736847230851, -107.83102825931047, 5.0])

    Notice that the solution contains both a vector of flows and a vector of pressures.

    [ Info: Page built in 20 seconds.
    -[ Info: This page was last built at 2024-10-21T19:29:33.085.
    +[ Info: This page was last built at 2024-12-04T03:40:51.033. diff --git a/dev/search_index.js b/dev/search_index.js index 8f4c3ddc..54bf4f05 100644 --- a/dev/search_index.js +++ b/dev/search_index.js @@ -1,3 +1,3 @@ var documenterSearchIndex = {"docs": -[{"location":"bc/bc_debug/#Simulation-Setup","page":"Misc Features","title":"Simulation Setup","text":"","category":"section"},{"location":"bc/bc_debug/","page":"Misc Features","title":"Misc Features","text":"include(joinpath(Base.@__DIR__, \"..\", \"..\", \"docinfo.jl\"))\ninfo = DocInfo.Info()","category":"page"},{"location":"bc/bc_debug/","page":"Misc Features","title":"Misc Features","text":"This tutorial showcases some of the other features included in the Decapodes.jl package. Currently, these features are the treatment of boundary conditions and the simulation debugger interface. To begin, we set up the same advection-diffusion problem presented in the Overview section. As before, we define the Diffusion, Advection, and Superposition components, and now include a Boundary Condition (BC) component. By convention, BCs are encoded in Decapodes by using a ∂ symbol. Below we show the graphical rendering of this boundary condition diagram, which we will use to impose a Dirichlet condition on the time derivative of concentration at the mesh boundary.","category":"page"},{"location":"bc/bc_debug/","page":"Misc Features","title":"Misc Features","text":"using Catlab\nusing DiagrammaticEquations\nusing Decapodes\n\nDiffusion = @decapode begin\n C::Form0\n ϕ::Form1\n\n # Fick's first law\n ϕ == k(d₀(C))\nend\n\nAdvection = @decapode begin\n C::Form0\n ϕ::Form1\n V::Constant\n\n ϕ == ∧₀₁(C,V)\nend\n\nSuperposition = @decapode begin\n (C, C_up)::Form0\n (ϕ, ϕ₁, ϕ₂)::Form1\n\n ϕ == ϕ₁ + ϕ₂\n C_up == ⋆₀⁻¹(dual_d₁(⋆₁(ϕ)))\nend\n\nBoundaryConditions = @decapode begin\n (C, C_up)::Form0\n\n # Temporal boundary\n ∂ₜ(C) == Ċ\n\n # Spatial boundary\n Ċ == ∂C(C_up)\nend\n\nto_graphviz(BoundaryConditions)","category":"page"},{"location":"bc/bc_debug/","page":"Misc Features","title":"Misc Features","text":"As before, we compose these physics components over our wiring diagram.","category":"page"},{"location":"bc/bc_debug/","page":"Misc Features","title":"Misc Features","text":"compose_diff_adv = @relation (C, V) begin\n diffusion(C, ϕ₁)\n advection(C, ϕ₂, V)\n bc(C, C_up)\n superposition(ϕ₁, ϕ₂, ϕ, C_up, C)\nend\n\ndraw_composition(compose_diff_adv)","category":"page"},{"location":"bc/bc_debug/","page":"Misc Features","title":"Misc Features","text":"DiffusionAdvection_cospan = oapply(compose_diff_adv,\n [Open(Diffusion, [:C, :ϕ]),\n Open(Advection, [:C, :ϕ, :V]),\n Open(BoundaryConditions, [:C, :C_up]),\n Open(Superposition, [:ϕ₁, :ϕ₂, :ϕ, :C_up, :C])])\nDiffusionAdvection = apex(DiffusionAdvection_cospan)\n\nto_graphviz(DiffusionAdvection)","category":"page"},{"location":"bc/bc_debug/","page":"Misc Features","title":"Misc Features","text":"When this is scheduled, Decapodes will apply any boundary conditions immediately after the impacted value is computed. This implementation choice ensures that this boundary condition holds true for any variables dependent on this variable, though also means that the boundary conditions on a variable have no immediate impact on the variables this variable is dependent on.","category":"page"},{"location":"bc/bc_debug/","page":"Misc Features","title":"Misc Features","text":"In the visualization below, we see that the final operation executed on the data is the boundary condition we are enforcing on the change in concentration.","category":"page"},{"location":"bc/bc_debug/","page":"Misc Features","title":"Misc Features","text":"to_graphviz(DiffusionAdvection)","category":"page"},{"location":"bc/bc_debug/","page":"Misc Features","title":"Misc Features","text":"Next we import the mesh we will use. In this case, we are wanting to impose boundary conditions and so we will use the plot_mesh from the previous example instead of the mesh with periodic boundary conditions. Because the mesh is only a primal mesh, we also generate and subdivide the dual mesh.","category":"page"},{"location":"bc/bc_debug/","page":"Misc Features","title":"Misc Features","text":"using CombinatorialSpaces\nusing CairoMakie\n\nplot_mesh = loadmesh(Rectangle_30x10())\n\n# Generate the dual mesh\nplot_mesh_dual = EmbeddedDeltaDualComplex2D{Bool, Float64, Point3{Float64}}(plot_mesh)\n\n# Calculate distances and subdivisions for the dual mesh\nsubdivide_duals!(plot_mesh_dual, Circumcenter())\n\nfig = Figure()\nax = CairoMakie.Axis(fig[1,1], aspect = AxisAspect(3.0))\nwireframe!(ax, plot_mesh)\nfig","category":"page"},{"location":"bc/bc_debug/","page":"Misc Features","title":"Misc Features","text":"Finally, we define our operators, generate the simulation function, and compute the simulation. Note that when we define the boundary condition operator, we hardcode the boundary indices and values into the operator itself. We also move the initial concentration to the left, so that we are able to see a constant concentration on the left boundary which will act as a source in the flow. You can find the file for boundary conditions here. The modified initial condition is shown below:","category":"page"},{"location":"bc/bc_debug/","page":"Misc Features","title":"Misc Features","text":"using LinearAlgebra\nusing ComponentArrays\nusing MLStyle\ninclude(\"../boundary_helpers.jl\")\n\nfunction generate(sd, my_symbol; hodge=GeometricHodge())\n op = @match my_symbol begin\n :k => x -> 0.05*x\n :∂C => x -> begin\n boundary = boundary_inds(Val{0}, sd)\n x[boundary] .= 0\n x\n end\n x => error(\"Unmatched operator $my_symbol\")\n end\n return op\nend\n\nusing Distributions\nc_dist = MvNormal([1, 5], [1.5, 1.5])\nc = [pdf(c_dist, [p[1], p[2]]) for p in plot_mesh_dual[:point]]\n\nfig = Figure()\nax = CairoMakie.Axis(fig[1,1], aspect = AxisAspect(3.0))\nmesh!(ax, plot_mesh; color=c[1:nv(plot_mesh)])\nfig","category":"page"},{"location":"bc/bc_debug/","page":"Misc Features","title":"Misc Features","text":"And the simulation result is then computed and visualized below.","category":"page"},{"location":"bc/bc_debug/","page":"Misc Features","title":"Misc Features","text":"using OrdinaryDiffEq\n\nsim = eval(gensim(DiffusionAdvection))\nfₘ = sim(plot_mesh_dual, generate)\n\nvelocity(p) = [-0.5, 0.0, 0.0]\nv = ♭(plot_mesh_dual, DualVectorField(velocity.(plot_mesh_dual[triangle_center(plot_mesh_dual),:dual_point]))).data\n\nu₀ = ComponentArray(C=c)\nparams = (V = v,)\n\nprob = ODEProblem(fₘ, u₀, (0.0, 100.0), params)\nsol = solve(prob, Tsit5());\n\n# Plot the result\ntimes = range(0.0, 100.0, length=150)\ncolors = [sol(t).C for t in times]\nextrema\n# Initial frame\nfig = Figure()\nax = CairoMakie.Axis(fig[1,1], aspect = AxisAspect(3.0))\npmsh = mesh!(ax, plot_mesh; color=colors[1], colorrange = extrema(vcat(colors...)))\nColorbar(fig[1,2], pmsh)\nframerate = 30\n\n# Animation\nrecord(fig, \"diff_adv_right.gif\", range(0.0, 100.0; length=150); framerate = 30) do t\n pmsh.color = sol(t).C\nend","category":"page"},{"location":"bc/bc_debug/","page":"Misc Features","title":"Misc Features","text":"(Image: Diffusion-Advection result and your first BC Decapode!)","category":"page"},{"location":"bc/bc_debug/","page":"Misc Features","title":"Misc Features","text":"DocInfo.get_report(info) # hide","category":"page"},{"location":"navier_stokes/ns/#Navier-Stokes-Vorticity-Model","page":"Vortices","title":"Navier Stokes Vorticity Model","text":"","category":"section"},{"location":"navier_stokes/ns/","page":"Vortices","title":"Vortices","text":"include(joinpath(Base.@__DIR__, \"..\", \"..\", \"docinfo.jl\"))\ninfo = DocInfo.Info()","category":"page"},{"location":"navier_stokes/ns/","page":"Vortices","title":"Vortices","text":"This is a discretization of the incompressible Navier Stokes equations using the Discrete Exterior Calculus.","category":"page"},{"location":"navier_stokes/ns/","page":"Vortices","title":"Vortices","text":"The formulations are based on those given by Mohamed, Hirani, Samtaney (in turn from Marsden, Ratiu, Abraham).","category":"page"},{"location":"navier_stokes/ns/","page":"Vortices","title":"Vortices","text":"However, different choices in discretization are chosen for purposes of brevity, to demonstrate novel discretizations of certain operators, and to demonstrate the automated Decapodes workflow.","category":"page"},{"location":"navier_stokes/ns/","page":"Vortices","title":"Vortices","text":"The full code that generated these results is available in a julia script.","category":"page"},{"location":"navier_stokes/ns/","page":"Vortices","title":"Vortices","text":"We give the vorticity formulation of the inviscid incompressible Navier-Stokes momentum equation as follows:","category":"page"},{"location":"navier_stokes/ns/","page":"Vortices","title":"Vortices","text":"eq11_inviscid_poisson = @decapode begin\n d𝐮::DualForm2\n 𝐮::DualForm1\n ψ::Form0\n\n ψ == Δ⁻¹(⋆(d𝐮))\n 𝐮 == ⋆(d(ψ))\n\n ∂ₜ(d𝐮) == (-1) * ∘(♭♯, ⋆₁, d̃₁)(∧ᵈᵖ₁₀(𝐮, ⋆(d𝐮)))\nend","category":"page"},{"location":"navier_stokes/ns/","page":"Vortices","title":"Vortices","text":"Our initial conditions here are Point vortices:","category":"page"},{"location":"navier_stokes/ns/","page":"Vortices","title":"Vortices","text":"function point_vortex(pnt::Point3D, cntr::Point3D, p::PointVortexParams)\n gcd = great_circle_dist(pnt,cntr)\n p.τ / (cosh(3gcd/p.a)^2)\nend","category":"page"},{"location":"navier_stokes/ns/","page":"Vortices","title":"Vortices","text":"Based on the configuration, you can see different results that match the expected solutions from the literature.","category":"page"},{"location":"navier_stokes/ns/","page":"Vortices","title":"Vortices","text":"Here is one set of results from using the inviscid Poisson formulation:","category":"page"},{"location":"navier_stokes/ns/","page":"Vortices","title":"Vortices","text":"(Image: Vorticity)","category":"page"},{"location":"navier_stokes/ns/","page":"Vortices","title":"Vortices","text":"We can visualize the distribution of vorticity at the theta = 04 latitude. The difference between the distributions at t=0 and t=12 is accumulated error.","category":"page"},{"location":"navier_stokes/ns/","page":"Vortices","title":"Vortices","text":"(Image: Azimuth Profile)","category":"page"},{"location":"navier_stokes/ns/","page":"Vortices","title":"Vortices","text":"DocInfo.get_report(info) # hide","category":"page"},{"location":"equations/equations/#Simple-Equations","page":"Equations","title":"Simple Equations","text":"","category":"section"},{"location":"equations/equations/","page":"Equations","title":"Equations","text":"include(joinpath(Base.@__DIR__, \"..\", \"..\",\"docinfo.jl\"))\ninfo = DocInfo.Info()","category":"page"},{"location":"equations/equations/","page":"Equations","title":"Equations","text":"This tutorial shows how to use Decapodes to represent simple equations. These aren't using any of the Discrete Exterior Calculus or CombinatorialSpaces features of Decapodes. They just are a reference for how to build equations with the @decapodes macro and see how they are stored as ACSets.","category":"page"},{"location":"equations/equations/","page":"Equations","title":"Equations","text":"using Catlab\nusing CombinatorialSpaces\nusing DiagrammaticEquations\nusing Decapodes","category":"page"},{"location":"equations/equations/","page":"Equations","title":"Equations","text":"The harmonic oscillator can be written in Decapodes in at least three different ways.","category":"page"},{"location":"equations/equations/","page":"Equations","title":"Equations","text":"oscillator = @decapode begin\n X::Form0\n V::Form0\n\n ∂ₜ(X) == V\n ∂ₜ(V) == -k(X)\nend","category":"page"},{"location":"equations/equations/","page":"Equations","title":"Equations","text":"The default representation is a tabular output as an ACSet. The tables are Var for storing variables (X) and their types (Form0). TVar for identifying a subset of variables that are the tangent variables of the dynamics (Ẋ). The unary operators are stored in Op1 and binary operators stored in Op2. If a table is empty, it doesn't get printed.","category":"page"},{"location":"equations/equations/","page":"Equations","title":"Equations","text":"Even though a diagrammatic equation is like a graph, there are no edge tables, because the arity (number of inputs) and coarity (number of outputs) is baked into the operator definitions.","category":"page"},{"location":"equations/equations/","page":"Equations","title":"Equations","text":"You can also see the output as a directed graph. The input arrows point to the state variables of the system and the output variables point from the tangent variables. You can see that I have done the differential degree reduction from x'' = -kx by introducing a velocity term v. Decapodes has some support for derivatives in the visualization layer, so it knows that dX/dt should be called Ẋ and that dẊ/dt should be called Ẋ̇.","category":"page"},{"location":"equations/equations/","page":"Equations","title":"Equations","text":"to_graphviz(oscillator)","category":"page"},{"location":"equations/equations/","page":"Equations","title":"Equations","text":"In the previous example, we viewed negation and transformation by k as operators. Notice that k appears as an edge in the graph and not as a vertex. You can also use a 2 argument function like multiplication (*). With a constant value for k::Constant. In this case you will see k enter the diagram as a vertex and multiplication with * as a binary operator.","category":"page"},{"location":"equations/equations/","page":"Equations","title":"Equations","text":"oscillator = @decapode begin\n X::Form0\n V::Form0\n\n k::Constant\n\n ∂ₜ(X) == V\n ∂ₜ(V) == -k*(X)\nend","category":"page"},{"location":"equations/equations/","page":"Equations","title":"Equations","text":"This gives you a different graphical representation as well. Now we have the cartesian product objects which represent a tupling of two values.","category":"page"},{"location":"equations/equations/","page":"Equations","title":"Equations","text":"to_graphviz(oscillator)","category":"page"},{"location":"equations/equations/","page":"Equations","title":"Equations","text":"You can also represent negation as a multiplication by a literal -1.","category":"page"},{"location":"equations/equations/","page":"Equations","title":"Equations","text":"oscillator = @decapode begin\n X::Form0\n V::Form0\n\n k::Constant\n\n ∂ₜ(X) == V\n ∂ₜ(V) == -1*k*(X)\nend","category":"page"},{"location":"equations/equations/","page":"Equations","title":"Equations","text":"Notice that the type bubble for the literal one is ΩL. This means that it is a literal. The literal is also used as the variable name.","category":"page"},{"location":"equations/equations/","page":"Equations","title":"Equations","text":"infer_types!(oscillator)\nto_graphviz(oscillator)","category":"page"},{"location":"equations/equations/","page":"Equations","title":"Equations","text":"We can allow the material properties to vary over time by changing Constant to Parameter. This is how we tell the simulator that it needs to call k(t) at each time step to get the updated value for k or if it can just reuse that constant k from the initial time step.","category":"page"},{"location":"equations/equations/","page":"Equations","title":"Equations","text":"oscillator = @decapode begin\n X::Form0\n V::Form0\n\n k::Parameter\n\n ∂ₜ(X) == V\n ∂ₜ(V) == -1*k*(X)\nend","category":"page"},{"location":"equations/equations/","page":"Equations","title":"Equations","text":"infer_types!(oscillator)\nto_graphviz(oscillator)","category":"page"},{"location":"equations/equations/","page":"Equations","title":"Equations","text":"Often you will have a linear material where you are scaling by a constant, and a nonlinear version of that material where that scaling is replaced by a generic nonlinear function. This is why we allow Decapodes to represent both of these types of equations.","category":"page"},{"location":"equations/equations/","page":"Equations","title":"Equations","text":"DocInfo.get_report(info) # hide","category":"page"},{"location":"canon/#Canon","page":"Canonical Models","title":"Canon","text":"","category":"section"},{"location":"canon/","page":"Canonical Models","title":"Canonical Models","text":"include(joinpath(Base.@__DIR__, \"..\", \"docinfo.jl\"))\ninfo = DocInfo.Info()","category":"page"},{"location":"canon/#Physics","page":"Canonical Models","title":"Physics","text":"","category":"section"},{"location":"canon/","page":"Canonical Models","title":"Canonical Models","text":"Modules = [ Decapodes.Canon.Physics ]\nPrivate = false","category":"page"},{"location":"canon/#Decapodes.Canon.Physics.:heat_transfer","page":"Canonical Models","title":"Decapodes.Canon.Physics.:heat_transfer","text":"Heat Transfer\n\nSource\n\nModel\n\n(HT, Tₛ)::Form0\n \n(D, cosϕᵖ, cosϕᵈ)::Constant\n \nHT == (D ./ cosϕᵖ) .* (⋆)(d(cosϕᵈ .* (⋆)(d(Tₛ))))\n\n\n\n\n\n","category":"constant"},{"location":"canon/#Decapodes.Canon.Physics.:outgoing_longwave_radiation","page":"Canonical Models","title":"Decapodes.Canon.Physics.:outgoing_longwave_radiation","text":"Outgoing Longwave Radiation\n\nSource\n\nModel\n\n(Tₛ, OLR)::Form0\n \n(A, B)::Constant\n \nOLR == A .+ B .* Tₛ\n\n\n\n\n\n","category":"constant"},{"location":"canon/#Decapodes.Canon.Physics.absorbed_shortwave_radiation","page":"Canonical Models","title":"Decapodes.Canon.Physics.absorbed_shortwave_radiation","text":"Absorbed Shortwave Radiation\n\nSource\n\nThe proportion of light reflected by a surface is the albedo. The absorbed shortwave radiation is the complement of this quantity.\n\nModel\n\n(Q, ASR)::Form0\n \nα::Constant\n \nASR == (1 .- α) .* Q\n\n\n\n\n\n","category":"constant"},{"location":"canon/#Decapodes.Canon.Physics.advection","page":"Canonical Models","title":"Decapodes.Canon.Physics.advection","text":"Advection\n\nSource\n\nAdvection refers to the transport of a bulk along a vector field.\n\nModel\n\nC::Form0\n \n(ϕ, V)::Form1\n \nϕ == C ∧₀₁ V\n\n\n\n\n\n","category":"constant"},{"location":"canon/#Decapodes.Canon.Physics.ficks_law","page":"Canonical Models","title":"Decapodes.Canon.Physics.ficks_law","text":"Ficks Law\n\nSource\n\nEquation for diffusion first stated by Adolf Fick. The diffusion flux is proportional to the concentration gradient.\n\nModel\n\nC::Form0\n \nϕ::Form1\n \nϕ == k(d₀(C))\n\n\n\n\n\n","category":"constant"},{"location":"canon/#Decapodes.Canon.Physics.iceblockingwater","page":"Canonical Models","title":"Decapodes.Canon.Physics.iceblockingwater","text":"IceBlockingWater\n\nSource\n\nModel\n\nh::Form0\n \n(𝐮, w)::DualForm1\n \nw == (1 - σ(h)) ∧ᵖᵈ₀₁ 𝐮\n\n\n\n\n\n","category":"constant"},{"location":"canon/#Decapodes.Canon.Physics.jko_scheme","page":"Canonical Models","title":"Decapodes.Canon.Physics.jko_scheme","text":"Jordan-Kinderlehrer-Otto\n\nSource\n\nJordan, R., Kinderlehrer, D., & Otto, F. (1998). The Variational Formulation of the Fokker–Planck Equation. In SIAM Journal on Mathematical Analysis (Vol. 29, Issue 1, pp. 1–17). Society for Industrial & Applied Mathematics (SIAM). https://doi.org/10.1137/s0036141096303359\n\nModel\n\n(ρ, Ψ)::Form0\n \nβ⁻¹::Constant\n \n∂ₜ(ρ) == (∘(⋆, d, ⋆))(d(Ψ) ∧ ρ) + β⁻¹ * Δ(ρ)\n\n\n\n\n\n","category":"constant"},{"location":"canon/#Decapodes.Canon.Physics.lie","page":"Canonical Models","title":"Decapodes.Canon.Physics.lie","text":"Lie\n\nSource\n\nModel\n\nC::Form0\n \nV::Form1\n \ndX::Form1\n \nV == ((⋆) ∘ (⋆))(C ∧ dX)\n\n\n\n\n\n","category":"constant"},{"location":"canon/#Decapodes.Canon.Physics.mohamed_flow","page":"Canonical Models","title":"Decapodes.Canon.Physics.mohamed_flow","text":"Mohamed Eq. 10, N2\n\nSource\n\nModel\n\n(𝐮, w)::DualForm1\n \n(P, 𝑝ᵈ)::DualForm0\n \nμ::Constant\n \n𝑝ᵈ == P + 0.5 * ι₁₁(w, w)\n \n∂ₜ(𝐮) == μ * (∘(d, ⋆, d, ⋆))(w) + -1 * (⋆₁⁻¹)(w ∧ᵈᵖ₁₀ (⋆)(d(w))) + d(𝑝ᵈ)\n\n\n\n\n\n","category":"constant"},{"location":"canon/#Decapodes.Canon.Physics.momentum","page":"Canonical Models","title":"Decapodes.Canon.Physics.momentum","text":"Momentum\n\nSource\n\nModel\n\n(f, b)::Form0\n \n(v, V, g, Fᵥ, uˢ, v_up)::Form1\n \nτ::Form2\n \nU::Parameter\n \nuˢ̇ == ∂ₜ(uˢ)\n \nv_up == (((((((-1 * L(v, v) - L(V, v)) - L(v, V)) - f ∧ v) - (∘(⋆, d, ⋆))(uˢ) ∧ v) - d(p)) + b ∧ g) - (∘(⋆, d, ⋆))(τ)) + uˢ̇ + Fᵥ\n \nuˢ̇ == force(U)\n\n\n\n\n\n","category":"constant"},{"location":"canon/#Decapodes.Canon.Physics.navier_stokes","page":"Canonical Models","title":"Decapodes.Canon.Physics.navier_stokes","text":"Navier-Stokes\n\nSource\n\nPartial differential equations which describe the motion of viscous fluid surfaces.\n\nModel\n\n(V, V̇, G)::Form1{X}\n \n(ρ, ṗ, p)::Form0{X}\n \nV̇ == neg₁(L₁′(V, V)) + div₁(kᵥ(Δ₁(V) + third(d₀(δ₁(V)))), avg₀₁(ρ)) + d₀(half(i₁′(V, V))) + neg₁(div₁(d₀(p), avg₀₁(ρ))) + G\n \n∂ₜ(V) == V̇\n \nṗ == neg₀((⋆₀⁻¹)(L₀(V, (⋆₀)(p))))\n \n∂ₜ(p) == ṗ\n\n\n\n\n\n","category":"constant"},{"location":"canon/#Decapodes.Canon.Physics.oscillator","page":"Canonical Models","title":"Decapodes.Canon.Physics.oscillator","text":"Oscillator\n\nSource\n\nEquation governing the motion of an object whose acceleration is negatively-proportional to its position.\n\nModel\n\nX::Form0\n \nV::Form0\n \nk::Constant\n \n∂ₜ(X) == V\n \n∂ₜ(V) == -k * X\n\n\n\n\n\n","category":"constant"},{"location":"canon/#Decapodes.Canon.Physics.poiseuille","page":"Canonical Models","title":"Decapodes.Canon.Physics.poiseuille","text":"Poiseuille\n\nSource\n\nA relation between the pressure drop in an incompressible and Newtownian fluid in laminar flow flowing through a long cylindrical pipe.\n\nModel\n\nP::Form0\n \nq::Form1\n \n(R, μ̃)::Constant\n \nΔq == Δ(q)\n \n∇P == d(P)\n \n∂ₜ(q) == q̇\n \nq̇ == μ̃ * ∂q(Δq) + ∇P + R * q\n\n\n\n\n\n","category":"constant"},{"location":"canon/#Decapodes.Canon.Physics.poiseuille_density","page":"Canonical Models","title":"Decapodes.Canon.Physics.poiseuille_density","text":"Poiseuille Density\n\nSource\n\nModel\n\nq::Form1\n \n(P, ρ)::Form0\n \n(k, R, μ̃)::Constant\n \n∂ₜ(q) == q̇\n \n∇P == d(P)\n \nq̇ == (μ̃ * ∂q(Δ(q)) - ∇P) + R * q\n \nP == k * ρ\n \n∂ₜ(ρ) == ρ̇\n \nρ_up == (∘(⋆, d, ⋆))(-1 * (ρ ∧₀₁ q))\n \nρ̇ == ∂ρ(ρ_up)\n\n\n\n\n\n","category":"constant"},{"location":"canon/#Decapodes.Canon.Physics.schroedinger","page":"Canonical Models","title":"Decapodes.Canon.Physics.schroedinger","text":"Schroedinger\n\nSource\n\nThe evolution of the wave function over time.\n\nModel\n\n(i, h, m)::Constant\n \nV::Parameter\n \nΨ::Form0\n \n∂ₜ(Ψ) == (((-1 * h ^ 2) / (2m)) * Δ(Ψ) + V * Ψ) / (i * h)\n\n\n\n\n\n","category":"constant"},{"location":"canon/#Decapodes.Canon.Physics.superposition","page":"Canonical Models","title":"Decapodes.Canon.Physics.superposition","text":"Superposition\n\nSource\n\nModel\n\n(C, Ċ)::Form0\n \n(ϕ, ϕ₁, ϕ₂)::Form1\n \nϕ == ϕ₁ + ϕ₂\n \nĊ == (⋆₀⁻¹)(dual_d₁((⋆₁)(ϕ)))\n \n∂ₜ(C) == Ċ\n\n\n\n\n\n","category":"constant"},{"location":"canon/#Chemistry","page":"Canonical Models","title":"Chemistry","text":"","category":"section"},{"location":"canon/","page":"Canonical Models","title":"Canonical Models","text":"Modules = [ Decapodes.Canon.Chemistry ]\nPrivate = false","category":"page"},{"location":"canon/#Decapodes.Canon.Chemistry.GrayScott","page":"Canonical Models","title":"Decapodes.Canon.Chemistry.GrayScott","text":"Gray-Scott\n\nSource\n\nA model of reaction-diffusion\n\nModel\n\n(U, V)::Form0\n \nUV2::Form0\n \n(U̇, V̇)::Form0\n \n(f, k, rᵤ, rᵥ)::Constant\n \nUV2 == U .* (V .* V)\n \nU̇ == (rᵤ * Δ(U) - UV2) + f * (1 .- U)\n \nV̇ == (rᵥ * Δ(V) + UV2) - (f + k) .* V\n \n∂ₜ(U) == U̇\n \n∂ₜ(V) == V̇\n\n\n\n\n\n","category":"constant"},{"location":"canon/#Decapodes.Canon.Chemistry.brusselator","page":"Canonical Models","title":"Decapodes.Canon.Chemistry.brusselator","text":"Brusselator\n\nSource\n\nA model of reaction-diffusion for an oscillatory chemical system.\n\nModel\n\n(U, V)::Form0\n \nU2V::Form0\n \n(U̇, V̇)::Form0\n \nα::Constant\n \nF::Parameter\n \nU2V == (U .* U) .* V\n \nU̇ == ((1 + U2V) - 4.4U) + α * Δ(U) + F\n \nV̇ == (3.4U - U2V) + α * Δ(V)\n \n∂ₜ(U) == U̇\n \n∂ₜ(V) == V̇\n\n\n\n\n\n","category":"constant"},{"location":"canon/#Biology","page":"Canonical Models","title":"Biology","text":"","category":"section"},{"location":"canon/","page":"Canonical Models","title":"Canonical Models","text":"Modules = [ Decapodes.Canon.Biology ]\nPrivate = false","category":"page"},{"location":"canon/#Decapodes.Canon.Biology.kealy","page":"Canonical Models","title":"Decapodes.Canon.Biology.kealy","text":"Kealy\n\nSource\n\nModel\n\n(n, w)::DualForm0\n \ndX::Form1\n \n(a, ν)::Constant\n \n∂ₜ(w) == ((a - w) - w * n ^ 2) + ν * Δ(w)\n\n\n\n\n\n","category":"constant"},{"location":"canon/#Decapodes.Canon.Biology.klausmeier_2a","page":"Canonical Models","title":"Decapodes.Canon.Biology.klausmeier_2a","text":"Klausmeier (Eq. 2a)\n\nSource\n\nKlausmeier, CA. “Regular and irregular patterns in semiarid vegetation.” Science (New York, N.Y.) vol. 284,5421 (1999): 1826-8. doi:10.1126/science.284.5421.1826\n\nModel\n\n(n, w)::DualForm0\n \ndX::Form1\n \n(a, ν)::Constant\n \n∂ₜ(w) == ((a - w) - w * n ^ 2) + ν * ℒ(dX, w)\n\n\n\n\n\n","category":"constant"},{"location":"canon/#Decapodes.Canon.Biology.klausmeier_2b","page":"Canonical Models","title":"Decapodes.Canon.Biology.klausmeier_2b","text":"Klausmeier (Eq. 2b)\n\nSource\n\nibid.\n\nModel\n\n(n, w)::DualForm0\n \nm::Constant\n \n∂ₜ(n) == (w * n ^ 2 - m * n) + Δ(n)\n\n\n\n\n\n","category":"constant"},{"location":"canon/#Decapodes.Canon.Biology.lejeune","page":"Canonical Models","title":"Decapodes.Canon.Biology.lejeune","text":"Lejeune\n\nSource\n\nLejeune, O., & Tlidi, M. (1999). A Model for the Explanation of Vegetation Stripes (Tiger Bush). Journal of Vegetation Science, 10(2), 201–208. https://doi.org/10.2307/3237141\n\nModel\n\nρ::Form0\n \n(μ, Λ, L)::Constant\n \n∂ₜ(ρ) == (ρ * (((1 - μ) + (Λ - 1) * ρ) - ρ * ρ) + 0.5 * (L * L - ρ) * Δ(ρ)) - 0.125 * ρ * Δ(ρ) * Δ(ρ)\n\n\n\n\n\n","category":"constant"},{"location":"canon/#Decapodes.Canon.Biology.turing_continuous_ring","page":"Canonical Models","title":"Decapodes.Canon.Biology.turing_continuous_ring","text":"Turing Continuous Ring\n\nSource\n\nModel\n\n(X, Y)::Form0\n \n(μ, ν, a, b, c, d)::Constant\n \n∂ₜ(X) == a * X + b * Y + μ * Δ(X)\n \n∂ₜ(Y) == c * X + d * Y + ν * Δ(X)\n\n\n\n\n\n","category":"constant"},{"location":"canon/#Environment","page":"Canonical Models","title":"Environment","text":"","category":"section"},{"location":"canon/","page":"Canonical Models","title":"Canonical Models","text":"Modules = [ Decapodes.Canon.Environment ]\nPrivate = false","category":"page"},{"location":"canon/#Decapodes.Canon.Environment.boundary_conditions","page":"Canonical Models","title":"Decapodes.Canon.Environment.boundary_conditions","text":"Boundary Conditions\n\nSource\n\nModel\n\n(S, T)::Form0\n \n(Ṡ, T_up)::Form0\n \nv::Form1\n \nv_up::Form1\n \nṪ == ∂ₜ(T)\n \nṠ == ∂ₜ(S)\n \nv̇ == ∂ₜ(v)\n \nṪ == ∂_spatial(T_up)\n \nv̇ == ∂_noslip(v_up)\n\n\n\n\n\n","category":"constant"},{"location":"canon/#Decapodes.Canon.Environment.energy_balance","page":"Canonical Models","title":"Decapodes.Canon.Environment.energy_balance","text":"Energy balance\n\nSource\n\nenergy balance equation from Budyko Sellers\n\nModel\n\n(Tₛ, ASR, OLR, HT)::Form0\n \nC::Constant\n \nTₛ̇ == ∂ₜ(Tₛ)\n \nTₛ̇ == ((ASR - OLR) + HT) ./ C\n\n\n\n\n\n","category":"constant"},{"location":"canon/#Decapodes.Canon.Environment.equation_of_state","page":"Canonical Models","title":"Decapodes.Canon.Environment.equation_of_state","text":"Equation of State\n\nSource\n\nModel\n\n(b, T, S)::Form0\n \n(g, α, β)::Constant\n \nb == g * (α * T - β * S)\n\n\n\n\n\n","category":"constant"},{"location":"canon/#Decapodes.Canon.Environment.glen","page":"Canonical Models","title":"Decapodes.Canon.Environment.glen","text":"Glens Law\n\nSource\n\nNye, J. F. (1957). The Distribution of Stress and Velocity in Glaciers and Ice-Sheets. Proceedings of the Royal Society of London. Series A, Mathematical and Physical Sciences, 239(1216), 113–133. http://www.jstor.org/stable/100184\n\nModel\n\nΓ::Form1\n \n(A, ρ, g, n)::Constant\n \nΓ == (2 / (n + 2)) * A * (ρ * g) ^ n\n\n\n\n\n\n","category":"constant"},{"location":"canon/#Decapodes.Canon.Environment.halfar_eq2","page":"Canonical Models","title":"Decapodes.Canon.Environment.halfar_eq2","text":"Halfar (Eq. 2)\n\nSource\n\nHalfar, P. (1981), On the dynamics of the ice sheets, J. Geophys. Res., 86(C11), 11065–11072, doi:10.1029/JC086iC11p11065\n\nModel\n\nh::Form0\n \nΓ::Form1\n \nn::Constant\n \n∂ₜ(h) == (∘(⋆, d, ⋆))(((Γ * d(h)) ∧ mag(♯(d(h))) ^ (n - 1)) ∧ h ^ (n + 2))\n\n\n\n\n\n","category":"constant"},{"location":"canon/#Decapodes.Canon.Environment.insolation","page":"Canonical Models","title":"Decapodes.Canon.Environment.insolation","text":"Insolation\n\nSource\n\nModel\n\nQ::Form0\n \ncosϕᵖ::Constant\n \nQ == 450cosϕᵖ\n\n\n\n\n\n","category":"constant"},{"location":"canon/#Decapodes.Canon.Environment.tracer","page":"Canonical Models","title":"Decapodes.Canon.Environment.tracer","text":"Tracer\n\nSource\n\nModel\n\n(c, C, F, c_up)::Form0\n \n(v, V, q)::Form1\n \nc_up == (((-1 * (⋆)(L(v, (⋆)(c))) - (⋆)(L(V, (⋆)(c)))) - (⋆)(L(v, (⋆)(C)))) - (∘(⋆, d, ⋆))(q)) + F\n\n\n\n\n\n","category":"constant"},{"location":"canon/#Decapodes.Canon.Environment.warming","page":"Canonical Models","title":"Decapodes.Canon.Environment.warming","text":"Warming\n\nSource\n\nModel\n\nTₛ::Form0\n \nA::Form1\n \nA == avg₀₁(5.8282 * 10 ^ (-0.236Tₛ) * 1.65e7)\n\n\n\n\n\n","category":"constant"},{"location":"canon/","page":"Canonical Models","title":"Canonical Models","text":"DocInfo.get_report(info) # hide","category":"page"},{"location":"api/#Library-Reference","page":"Library Reference","title":"Library Reference","text":"","category":"section"},{"location":"api/","page":"Library Reference","title":"Library Reference","text":"include(joinpath(Base.@__DIR__, \"..\", \"docinfo.jl\"))\ninfo = DocInfo.Info()","category":"page"},{"location":"api/#Decapodes","page":"Library Reference","title":"Decapodes","text":"","category":"section"},{"location":"api/","page":"Library Reference","title":"Library Reference","text":"Modules = [ Decapodes ]\nPrivate = false","category":"page"},{"location":"api/#Decapodes.compile-Tuple{DiagrammaticEquations.decapodeacset.SummationDecapode, Vector{Symbol}, Vector{Decapodes.AllocVecCall}, Set{Symbol}, Int64, DataType, Decapodes.AbstractGenerationTarget, Bool}","page":"Library Reference","title":"Decapodes.compile","text":"compile(d::SummationDecapode, inputs::Vector{Symbol}, alloc_vectors::Vector{AllocVecCall}, optimizable_dec_operators::Set{Symbol}, dimension::Int, stateeltype::DataType, code_target::AbstractGenerationTarget, preallocate::Bool)\n\nFunction that compiles the computation body. d is the input Decapode, inputs is a vector of state variables and literals, alloc_vec should be empty when passed in, optimizable_dec_operators is a collection of all DEC operator symbols that can use special in-place methods, dimension is the dimension of the problem (usually 1 or 2), stateeltype is the type of the state elements (usually Float32 or Float64), code_target determines what architecture the code is compiled for (either CPU or CUDA), and preallocate which is set to true by default and determines if intermediate results can be preallocated..\n\n\n\n\n\n","category":"method"},{"location":"api/#Decapodes.compile_env-Tuple{DiagrammaticEquations.decapodeacset.SummationDecapode, Vector{Symbol}, Set{Symbol}, Decapodes.AbstractGenerationTarget}","page":"Library Reference","title":"Decapodes.compile_env","text":"compile_env(d::SummationDecapode, dec_matrices::Vector{Symbol}, con_dec_operators::Set{Symbol}, code_target::AbstractGenerationTarget)\n\nThis creates the symbol to function linking for the simulation output. Those run through the default_dec backend expect both an in-place and an out-of-place variant in that order. User defined operations only support out-of-place.\n\n\n\n\n\n","category":"method"},{"location":"api/#Decapodes.gensim-Tuple{DiagrammaticEquations.decapodeacset.SummationDecapode, Vector{Symbol}}","page":"Library Reference","title":"Decapodes.gensim","text":"gensim(user_d::SummationDecapode, input_vars::Vector{Symbol}; dimension::Int=2, stateeltype::DataType = Float64, code_target::AbstractGenerationTarget = CPUTarget(), preallocate::Bool = true)\n\nGenerates the entire code body for the simulation function. The returned simulation function can then be combined with a mesh, provided by CombinatorialSpaces, and a function describing symbol to operator mappings to return a simulator that can be used to solve the represented equations given initial conditions.\n\nArguments:\n\nuser_d: The user passed Decapode for which simulation code will be generated. (This is not modified) \n\ninput_vars is the collection of variables whose values are known at the beginning of the simulation. (Defaults to all state variables and literals in the Decapode)\n\nKeyword arguments:\n\ndimension: The dimension of the problem. (Defaults to 2)(Must be 1 or 2)\n\nstateeltype: The element type of the state forms. (Defaults to Float64)(Must be Float32 or Float64)\n\ncode_target: The intended architecture target for the generated code. (Defaults to CPUTarget())(Use CUDATarget() for NVIDIA CUDA GPUs)\n\npreallocate: Enables(true)/disables(false) pre-allocated caches for intermediate computations. Some functions, such as those that determine Jacobian sparsity patterns, or perform auto-differentiation, may require this to be disabled. (Defaults to true)\n\n\n\n\n\n","category":"method"},{"location":"api/","page":"Library Reference","title":"Library Reference","text":"DocInfo.get_report(info) # hide","category":"page"},{"location":"harmonics/harmonics/#Harmonics-of-the-Sphere","page":"Harmonics","title":"Harmonics of the Sphere","text":"","category":"section"},{"location":"harmonics/harmonics/","page":"Harmonics","title":"Harmonics","text":"This page shows how to use Decapodes tooling to explore the harmonics of a discrete manifold. This isn't using any Decapodes specific code, but it is emblematic of a more advanced analysis you might want to do on your Decapode.","category":"page"},{"location":"harmonics/harmonics/","page":"Harmonics","title":"Harmonics","text":"In this case we are trying to visualize the roots of the Laplacian on a discrete manifold.","category":"page"},{"location":"harmonics/harmonics/","page":"Harmonics","title":"Harmonics","text":"Load the dependencies","category":"page"},{"location":"harmonics/harmonics/","page":"Harmonics","title":"Harmonics","text":"# Meshing:\nusing CombinatorialSpaces\nusing CoordRefSystems\nusing GeometryBasics: Point3\nconst Point3D = Point3{Float64};\n\n# Visualization:\nusing CairoMakie\n\n# Simulation:\nusing LinearAlgebra","category":"page"},{"location":"harmonics/harmonics/","page":"Harmonics","title":"Harmonics","text":"Load the mesh","category":"page"},{"location":"harmonics/harmonics/","page":"Harmonics","title":"Harmonics","text":"const RADIUS = 1.0\ns = loadmesh(Icosphere(3, RADIUS));\nsd = EmbeddedDeltaDualComplex2D{Bool, Float64, Point3D}(s);\nsubdivide_duals!(sd, Barycenter());","category":"page"},{"location":"harmonics/harmonics/","page":"Harmonics","title":"Harmonics","text":"Compute the Laplacian eigenvectors using LinearAlgebra.eigen. This requires making the sparse Laplacian matrix dense with collect. Alternatively, use Arpack.jl.","category":"page"},{"location":"harmonics/harmonics/","page":"Harmonics","title":"Harmonics","text":"Δ0 = -Δ(0,sd)\nλ = eigen(collect(Δ0))","category":"page"},{"location":"harmonics/harmonics/","page":"Harmonics","title":"Harmonics","text":"Let's check that our eigenvalues satisfy the right equation. The first eigenvector should be the kernel of the laplacian. So the following norm should be close to 0.","category":"page"},{"location":"harmonics/harmonics/","page":"Harmonics","title":"Harmonics","text":"q1 = λ.vectors[:,1]\nnorm(Δ0 *q1)","category":"page"},{"location":"harmonics/harmonics/","page":"Harmonics","title":"Harmonics","text":"The first eigenvector is boring to visualize, because it is constant. So we will make some plots of the second eigenvector. If you run this on the desktop, you can use GLMakie and get an interactive plot to explore. We will just draw two angles.","category":"page"},{"location":"harmonics/harmonics/","page":"Harmonics","title":"Harmonics","text":"q = λ.vectors[:,2]\nfig = Figure()\nLabel(fig[1, 1, Top()], \"Default Angle\", padding = (0, 0, 5, 0))\nax = LScene(fig[1,1], scenekw=(lights=[],))\nmsh = CairoMakie.mesh!(ax, s, color=q)\nColorbar(fig[1,2], msh, size=32)\n# Second Angle\nLabel(fig[2, 1, Top()], \"Bottom Angle\", padding = (0, 0, 5, 0))\nax = LScene(fig[2,1], scenekw=(lights=[],))\nupdate_cam!(ax.scene, Vec3f(-1/2,-1/2,1.0/2), Vec3f(1,1,1), Vec3f(0, 0, 1))\nmsh = CairoMakie.mesh!(ax, s, color=q)\nColorbar(fig[2,2], msh, size=32)\nfig","category":"page"},{"location":"harmonics/harmonics/","page":"Harmonics","title":"Harmonics","text":"q = λ.vectors[:,12]\nfig = Figure()\nLabel(fig[1, 1, Top()], \"Default Angle\", padding = (0, 0, 5, 0))\nax = LScene(fig[1,1], scenekw=(lights=[],))\nmsh = CairoMakie.mesh!(ax, s, color=q)\nColorbar(fig[1,2], msh, size=32)\n# Second Angle\nLabel(fig[2, 1, Top()], \"Bottom Angle\", padding = (0, 0, 5, 0))\nax = LScene(fig[2,1], scenekw=(lights=[],))\nupdate_cam!(ax.scene, Vec3f(-1/2,-1/2,1.0/2), Vec3f(1,1,1), Vec3f(0, 0, 1))\nmsh = CairoMakie.mesh!(ax, s, color=q)\nColorbar(fig[2,2], msh, size=32)\nfig","category":"page"},{"location":"harmonics/harmonics/#Exploring-solutions-with-Krylov-methods","page":"Harmonics","title":"Exploring solutions with Krylov methods","text":"","category":"section"},{"location":"harmonics/harmonics/","page":"Harmonics","title":"Harmonics","text":"We can also use the information about the eigenvectors for spectral techniques in solving the equations. Krylov methods are a bridge between linear solvers and spectral information.","category":"page"},{"location":"harmonics/harmonics/","page":"Harmonics","title":"Harmonics","text":"using Krylov\nb = zeros(nv(sd))\nb[1] = 1\nb[end] = -1\nx, stats = Krylov.gmres(Δ0, b, randn(nv(sd)), restart=true, memory=20, atol = 1e-10, rtol=1e-8, history=true, itmax=10000)\nx̂ = x .- sum(x)./length(x)\nnorm(x̂)\nstats\nnorm(Δ0*(x) - b)","category":"page"},{"location":"cism/cism/#Replicating-the-Community-Ice-Sheet-Model-v2.1-Halfar-Dome-Benchmark-with-Decapodes","page":"CISM v2.1","title":"Replicating the Community Ice Sheet Model v2.1 Halfar Dome Benchmark with Decapodes","text":"","category":"section"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"include(joinpath(Base.@__DIR__, \"..\", \"..\", \"docinfo.jl\"))\ninfo = DocInfo.Info()","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"The Decapodes framework takes high-level representations of physics equations and automatically generates solvers.","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"We do so by translating equations from vector calculus notation to the \"discrete exterior calculus\" (DEC). This process is roughly about recognizing whether physical quantities represent scalar or vector quantities, and recognizing whether differential operators represent gradient, divergence, and so on.","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"In this benchmark, we will implement the \"small slope approximation\" of glacial dynamics used by P. Halfar in his 1981 work \"On the dynamics of the ice sheets\" by taking his original formulation, translating it into the DEC, then providing a mesh and initial conditions.","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"The initial conditions used here are exactly those considered by W. H. Lipscomb et al. in \"Description And Evaluation of the Community Ice Sheet Model (CISM) v2.1\" (2019).","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"# AlgebraicJulia Dependencies\nusing Catlab\nusing CombinatorialSpaces\nusing Decapodes\nusing DiagrammaticEquations\n\n# External Dependencies\nusing BenchmarkTools\nusing CairoMakie\nusing ComponentArrays\nusing GeometryBasics: Point2, Point3\nusing JLD2\nusing LinearAlgebra\nusing MLStyle\nusing OrdinaryDiffEq\nusing SparseArrays\nusing Statistics\nPoint2D = Point2{Float64}\nPoint3D = Point3{Float64}\nnothing # hide","category":"page"},{"location":"cism/cism/#Specifying-and-Composing-Physics","page":"CISM v2.1","title":"Specifying and Composing Physics","text":"","category":"section"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"(Image: \"Halfar Equation 2\")","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"We will translate Halfar's equation into the DEC below. Although the equation given by Halfar is dense, this notation does not allow you to see which operators represent divergence, which components represent diffusivity constants, and so on. In the DEC, there is a small pool of operators, ⋆, d, ∧, ♯, and ♭, which combine according to set rules to encode all of these notions.","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"In the DEC, gradients are generalized by the exterior derivative \"d\". Given scalar-data, d gives the slope along edges in our mesh. Similarly, the operator (⋆, d, ⋆) generalizes divergence.","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"In Halfar's equation there is a term corresponding to the magnitude of the slope, but it is not clear where this quantity is to be defined. Is it a scalar-like quantity, or a vector-like quantity? In the DEC translation, we take the gradient of h, d(h), and use the \"sharp\" operator to define it on points in the domain, where we then take its magnitude. The \"wedge product\", ∧, takes care of multiplying a scalar-like quantity by a vector-like quantity.","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"Halfar's equation looks a little disjoint. It seems that the front most terms are responsible for computing some parameter, while the remaining terms on the right encode something about the dynamics. This is because Halfar's equation is actually describing two equations in one. The front-most term defines a quantity - depending on the strain of the ice - that controls the rate at which ice diffuses. Since this computation is rather separate from the rest of the computations involving our differential operators, we will call it \"Gamma\" here, and define it in a later component Decapode.","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"# Equation 2 from Halfar, P. ON THE DYNAMICS OF THE ICE SHEETS. (1981),\n# translated into the exterior calculus.\nhalfar_eq2 = @decapode begin\n h::Form0\n Γ::Form1\n n::Constant\n\n ḣ == ∂ₜ(h)\n ḣ == ∘(⋆, d, ⋆)(Γ * d(h) * avg₀₁(mag(♯(d(h)))^(n-1)) * avg₀₁(h^(n+2)))\nend\n\nto_graphviz(halfar_eq2)","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"(Image: \"Glen's Law\")","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"Here, we recognize that Gamma is in fact what glaciologists call \"Glen's Flow Law.\" It states that the strain rate of a sheet of ice can be related to applied stress via a power law. Below, we encode the formulation as it is usually given in the literature, depending explicitly on the gravitational constant, g.","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"# Equation 1 from Glen, J. W. THE FLOW LAW OF ICE: A discussion of the\n# assumptions made in glacier theory, their experimental foundations and\n# consequences. (1958)\nglens_law = @decapode begin\n Γ::Form1\n (A,ρ,g,n)::Constant\n \n Γ == (2/(n+2))*A*(ρ*g)^n\nend\n\nto_graphviz(glens_law)","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"We now need some way to compose these physics equations together. Since this physics is rather small, and there are no naming conflicts of physical quantities, this composition is also rather simple.","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"#####################\n# Compose the model #\n#####################\n\nice_dynamics_composition_diagram = @relation () begin\n dynamics(Γ,n)\n stress(Γ,n)\nend\ndraw_composition(ice_dynamics_composition_diagram)","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"# Plug in our Decapodes to the composition pattern.\nice_dynamics_cospan = oapply(ice_dynamics_composition_diagram,\n [Open(halfar_eq2, [:Γ,:n]),\n Open(glens_law, [:Γ,:n])])\n\nice_dynamics = apex(ice_dynamics_cospan)\nto_graphviz(ice_dynamics, verbose=false)","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"We have a representation of our composed physics. Now, we need to specify that these dynamics occur in 2 dimensions.","category":"page"},{"location":"cism/cism/#Providing-a-Semantics","page":"CISM v2.1","title":"Providing a Semantics","text":"","category":"section"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"# Interpret this multiphysics diagram in the 2D exterior calculus.\n\nice_dynamics2D = expand_operators(ice_dynamics)\ninfer_types!(ice_dynamics2D)\nresolve_overloads!(ice_dynamics2D)\nto_graphviz(ice_dynamics2D, verbose=false)","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"We are done encoding our dynamics. Now, we need to provide a mesh, initial data to use for our quantities, and what functions to use for our differential operators.","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"Our mesh library, CombinatorialSpaces, can interpret arbitrary .OBJ files to run our dynamics on. Here, we use a script that generates a triangulated grid of the resolution used in the CISM benchmark. Note though that the \"resolution\" of a triangulated and non-triangulated grid is difficult to directly compare.","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"s = triangulated_grid(60_000,100_000,2_000,2_000,Point3D)\nsd = EmbeddedDeltaDualComplex2D{Bool, Float64, Point3D}(s)\nsubdivide_duals!(sd, Barycenter())\nx̄ = mean(p -> p[1], point(sd))\nȳ = mean(p -> p[2], point(sd))\n\nfig = Figure()\nax = CairoMakie.Axis(fig[1,1], aspect=0.6, xticks = [0, 3e4, 6e4])\nwf = wireframe!(ax, sd; linewidth=0.5)\nsave(\"ice_mesh.png\", fig)\nnothing # hide","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"(Image: \"Wireframe of the Domain\")","category":"page"},{"location":"cism/cism/#Defining-input-data","page":"CISM v2.1","title":"Defining input data","text":"","category":"section"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"We replicate the initial conditions and parameter values used in the CISM benchmark.","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"# These are the initial conditions to the Halfar Dome test case that the\n# Community Ice Sheet Model uses.\nR₀ = 60_000 * sqrt(0.125)\nH = 2_000 * sqrt(0.125)\n\nn = 3\ng = 9.8101\nρ = 910\nalpha = 1/9\nbeta = 1/18\nflwa = 1e-16\nA = fill(1e-16, ne(sd))\n\nGamma = 2.0/(n+2) * flwa * (ρ * g)^n\nt0 = (beta/Gamma) * (7.0/4.0)^3 * (R₀^4 / H^7)\n\n# This is the analytic solution for comparison.\n# It is ported over from the CISM code for comparison's sake,\n# and we will use it to set initial conditions.\nfunction height_at_p(x,y,t)\n tr = (t + t0) / t0\n r = sqrt((x - x̄)^2 + (y - ȳ)^2)\n r = r/R₀\n inside = max(0.0, 1.0 - (r / tr^beta)^((n+1.0) / n))\n H * inside^(n / (2*n + 1)) / tr^alpha\nend\n\n# Set the initial conditions for ice sheet height:\n# Ice height is a primal 0-form. i.e. valued at vertices.\nh₀ = map(x -> height_at_p(x[1], x[2], 0), point(s))\nfig = Figure()\nax = CairoMakie.Axis(fig[1,1], aspect=0.6, xticks = [0, 3e4, 6e4])\nmsh = mesh!(ax, s, color=h₀, colormap=:jet)\nsave(\"ice_initial_conditions.png\", fig)\nnothing # hide","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"(Image: \"Initial Conditions\")","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"# Store these values to be passed to the solver.\nu₀ = ComponentArray(dynamics_h = h₀)\nconstants_and_parameters = (\n n = n,\n stress_ρ = ρ,\n stress_g = g,\n stress_A = A)","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"We provide here the mapping from symbols to differential operators. As more of the differential operators of the DEC are implemented, they are upstreamed to the Decapodes and CombinatorialSpaces libraries. Of course, users can also provide their own implementations of these operators and others as they see fit.","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"#############################################\n# Define how symbols map to Julia functions #\n#############################################\n\nfunction generate(sd, my_symbol; hodge=GeometricHodge())\n # We pre-allocate matrices that encode differential operators.\n op = @match my_symbol begin\n :mag => x -> norm.(x)\n :♯ => begin\n sharp_mat = ♯_mat(sd, AltPPSharp())\n x -> sharp_mat * x\n end\n x => error(\"Unmatched operator $my_symbol\")\n end\n return (args...) -> op(args...)\nend","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"The gensim function takes our high-level representation of the physics equations and produces compiled simulation code. It performs optimizations such as allocating memory for intermediate variables, and so on.","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"#######################\n# Generate simulation #\n#######################\n\nsim = eval(gensim(ice_dynamics2D))\nfₘ = sim(sd, generate)","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"Julia is a \"Just-In-Time\" compiled language. That means that functions are compiled the first time they are called, and later calls to those functions skip this step. To get a feel for just how fast this simulation is, we will run the dynamics twice, once for a very short timespan to trigger pre-compilation, and then again for the actual dynamics.","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"# Pre-compile simulation\n\n# Julia will pre-compile the generated simulation the first time it is run.\n@info(\"Precompiling Solver\")\n# We run for a short timespan to pre-compile.\nprob = ODEProblem(fₘ, u₀, (0, 1e-8), constants_and_parameters)\nsoln = solve(prob, Tsit5())\nsoln.retcode != :Unstable || error(\"Solver was not stable\")","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"# Run simulation\ntₑ = 200\n\n# This next run should be fast.\n@info(\"Solving\")\nprob = ODEProblem(fₘ, u₀, (0, tₑ), constants_and_parameters)\nsoln = solve(prob, Tsit5(), saveat=0.1)\n@show soln.retcode\n@info(\"Done\")","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"We can benchmark the compiled simulation with @benchmarkable. This macro runs many samples of the simulation function so we get an accurate estimate of the simulation time. The simulation time is quite fast compared to the CISM benchmarks. These results are run automatically via GitHub Actions as part of our docs build, which is not optimized for numerical simulations.","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"# Time the simulation\n\nb = @benchmarkable solve(prob, Tsit5(), saveat=0.1)\nc = run(b)","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"Here we save the solution information to a file.","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"@save \"ice_dynamics2D.jld2\" soln","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"We recall that these dynamics are of the \"shallow slope\" and \"shallow ice\" approximations. So, at the edge of our parabolic dome of ice, we expect increased error as the slope increases. On the interior of the dome, we expect the dynamics to match more closely that given by the analytic model. We will see that the CISM results likewise accumulate error in the same neighborhood.","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"(Image: \"Halfar Small Ice Approximation Quote\")","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"# Plot the final conditions\nfunction plot_final_conditions()\n fig = Figure()\n ax = CairoMakie.Axis(fig[1,1],\n title=\"Modeled thickness (m) at time 200.0\",\n aspect=0.6, xticks = [0, 3e4, 6e4])\n msh = mesh!(ax, s, color=soln(200.0).dynamics_h, colormap=:jet)\n Colorbar(fig[1,2], msh)\n fig\nend\nfig = plot_final_conditions()\nsave(\"ice_numeric_solution.png\", fig)\nnothing # hide","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"(Image: \"Numerical Solution\")","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"# Plot the final conditions according to the analytic solution.\nfunction plot_analytic()\n hₐ = map(x -> height_at_p(x[1], x[2], 200.0), point(s))\n fig = Figure()\n ax = CairoMakie.Axis(fig[1,1],\n title=\"Analytic thickness (m) at time 200.0\",\n aspect=0.6, xticks = [0, 3e4, 6e4])\n msh = mesh!(ax, s, color=hₐ, colormap=:jet)\n Colorbar(fig[1,2], msh)\n fig\nend\nfig = plot_analytic()\nsave(\"ice_analytic_solution.png\", fig)\nnothing # hide","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"(Image: \"Analytic Solution)","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"# Plot the error.\nfunction plot_error()\n hₐ = map(x -> height_at_p(x[1], x[2], 200.0), point(s))\n h_diff = soln(tₑ).dynamics_h - hₐ\n extrema(h_diff)\n fig = Figure()\n ax = CairoMakie.Axis(fig[1,1],\n title=\"Modeled thickness - Analytic thickness at time 200.0\",\n aspect=0.6, xticks = [0, 3e4, 6e4])\n msh = mesh!(ax, s, color=h_diff, colormap=:jet)\n Colorbar(fig[1,2], msh)\n fig\nend\nfig = plot_error()\nsave(\"ice_error.png\", fig)\nnothing # hide","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"(Image: \"Numeric Solution - Analytic Solution\")","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"We compute below that the maximum absolute error is approximately 89 meters. We observe that this error occurs exactly on the edge of the dome, which we expect given that this is where the \"shallow slope approximation\" breaks down, and the updates to our physical quantities should become more unstable. This pattern likewise occurs in the CISM benchmarks.","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"# Compute max absolute error:\nhₐ = map(x -> height_at_p(x[1], x[2], 200.0), point(s))\nh_diff = soln(tₑ).dynamics_h - hₐ\nmaximum(abs.(h_diff))","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"We compute root-mean-square (RMS) error as well, both over the entire domain, and excluding where the ice distribution is 0 in the analytic solution. This is done since considering the entire domain decreases the RMS while not telling you much about the area of interest. Note that the official CISM benchmark reports 6.43 and 9.06 RMS for their two solver implementations.","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"# Compute RMS not considering the \"outside\".\nhₐ = map(x -> height_at_p(x[1], x[2], 200.0), point(s))\nnonzeros = findall(!=(0), hₐ)\nh_diff = soln(tₑ).dynamics_h - hₐ\nrmse = sqrt(sum(map(x -> x*x, h_diff[nonzeros])) / length(nonzeros))","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"# Compute RMS of the entire domain.\nhₐ = map(x -> height_at_p(x[1], x[2], 200.0), point(s))\nh_diff = soln(tₑ).dynamics_h - hₐ\nrmse = sqrt(sum(map(x -> x*x, h_diff)) / length(h_diff))","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"# Create a gif\nbegin\n frames = 100\n fig = Figure()\n ax = CairoMakie.Axis(fig[1,1], aspect=0.6, xticks = [0, 3e4, 6e4])\n msh = mesh!(ax, s, color=soln(0).dynamics_h, colormap=:jet, colorrange=extrema(soln(tₑ).dynamics_h))\n Colorbar(fig[1,2], msh)\n record(fig, \"ice_dynamics_cism.gif\", range(0.0, tₑ; length=frames); framerate = 30) do t\n msh.color = soln(t).dynamics_h\n end\nend","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"(Image: \"Ice Dynamics)","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"For comparison's sake, we paste the results produced by CISM below. We observe that the error likewise accumulates around the edge of the dome, with more accurate predictions on the interior. We note that our simulation produces slight over-estimates on the interior, but there are further strategies that one can employ to increase accuracy, such as tweaking the error tolerance of the solver, and so on.","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"Not that since the DEC is based on triangulated meshes, the \"resolution\" of the CISM benchmark and the Decapodes implementation cannot be directly compared. An advantage of the DEC is that we do not need to operate on uniform grids. For example, you could construct a mesh that is finer along the dome edge, where you need more resolution, and coarser as you are farther away from the reach of the ice.","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"(Image: CISM Results)","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"We saw in this document how to create performant and accurate simulations in the Decapodes framework, and compared against the CISM library . Although we do not expect to be both more performant and accurate compared to every hand-crafted simulation, Decapodes makes up for this difference in terms of development time, flexibility, and composition. For example, the original implementation of the Decapodes shallow ice model took place over a couple of afternoons.","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"Since Decapodes targets high-level representations of physics, it is uniquely suited to incorporating knowledge from subject matter experts to increase simulation accuracy. This process does not require an ice dynamics expert to edit physics equations that have already been weaved into solver code.","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"Further improvements to the Decapodes library are made continuously. We are creating implementations of DEC operators that are constructed and execute faster. And we are in the beginning stages of 3D simulations using the DEC.","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"DocInfo.get_report(info) # hide","category":"page"},{"location":"ice_dynamics/ice_dynamics/#Halfar's-model-of-glacial-flow","page":"Glacial Flow","title":"Halfar's model of glacial flow","text":"","category":"section"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"include(joinpath(Base.@__DIR__, \"..\", \"..\", \"docinfo.jl\"))\ninfo = DocInfo.Info()","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"Let's model glacial flow using a model of how ice height of a glacial sheet changes over time, from P. Halfar's 1981 paper: \"On the dynamics of the ice sheets\".","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"# AlgebraicJulia Dependencies\nusing Catlab\nusing CombinatorialSpaces\nusing DiagrammaticEquations\nusing Decapodes\n\n# External Dependencies\nusing CairoMakie\nusing ComponentArrays\nusing GeometryBasics: Point2, Point3\nusing JLD2\nusing LinearAlgebra\nusing MLStyle\nusing OrdinaryDiffEq\nusing SparseArrays\nusing Statistics\nPoint2D = Point2{Float64};\nPoint3D = Point3{Float64};","category":"page"},{"location":"ice_dynamics/ice_dynamics/#Defining-the-models","page":"Glacial Flow","title":"Defining the models","text":"","category":"section"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"The first step is to find a suitable equation for our model, and translate it into the Discrete Exterior Calculus. The Exterior Calculus is a generalization of vector calculus, so for low-dimensional spaces, this translation is straightforward. For example, divergence is typically written as (⋆, d, ⋆). Scalar fields are typically interpreted as \"0Forms\", i.e. values assigned to vertices of a mesh.","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"We use the @decapode macro to interpret the equations. Here, we have equation 2 from Halfar:","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"fracpartial hpartial t = frac2n + 2 (fracrho gA)^n fracpartialpartial x(fracpartial hpartial x fracpartial hpartial x ^n-1 h^n+2)","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"We'll change the term out front to Γ so we can demonstrate composition in a moment.","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"In the exterior calculus, we could write the above equations like so:","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"partial_t(h) = circ(star d star)(Gammaquad d(h)quad textavg_01d(h)^sharp^n-1 quad textavg_01(h^n+2))","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"avg here is an operator that performs the midpoint rule, setting the value at an edge to be the average of the values at its two vertices.","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"halfar_eq2 = @decapode begin\n h::Form0\n Γ::Form1\n n::Constant\n\n ḣ == ∂ₜ(h)\n ḣ == ∘(⋆, d, ⋆)(Γ * d(h) * avg₀₁(mag(♯(d(h)))^(n-1)) * avg₀₁(h^(n+2)))\nend\n\nto_graphviz(halfar_eq2)","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"And here, a formulation of Glen's law from J.W. Glen's 1958 \"The flow law of ice\".","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"glens_law = @decapode begin\n #Γ::Form0\n Γ::Form1\n (A,ρ,g,n)::Constant\n \n Γ == (2/(n+2))*A*(ρ*g)^n\nend\n\nto_graphviz(glens_law)","category":"page"},{"location":"ice_dynamics/ice_dynamics/#Composing-models","page":"Glacial Flow","title":"Composing models","text":"","category":"section"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"We can use operadic composition to specify how our models come together. In this example, we have two Decapodes, and two quantities that are shared between them.","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"ice_dynamics_composition_diagram = @relation () begin\n dynamics(Γ,n)\n stress(Γ,n)\nend\n\ndraw_composition(ice_dynamics_composition_diagram)","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"To a apply a composition, we specify which Decapodes to plug into those boxes, and what each calls the corresponding shared variables internally.","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"ice_dynamics_cospan = oapply(ice_dynamics_composition_diagram,\n [Open(halfar_eq2, [:Γ,:n]),\n Open(glens_law, [:Γ,:n])])\n\nice_dynamics = apex(ice_dynamics_cospan)\nto_graphviz(ice_dynamics)","category":"page"},{"location":"ice_dynamics/ice_dynamics/#Provide-a-semantics","page":"Glacial Flow","title":"Provide a semantics","text":"","category":"section"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"To interpret our composed Decapode, we need to specify what Discrete Exterior Calculus to interpret our quantities in. Let's choose the 1D Discrete Exterior Calculus:","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"ice_dynamics1D = expand_operators(ice_dynamics)\ninfer_types!(ice_dynamics1D, op1_inf_rules_1D, op2_inf_rules_1D)\nresolve_overloads!(ice_dynamics1D, op1_res_rules_1D, op2_res_rules_1D)\n\nto_graphviz(ice_dynamics1D)","category":"page"},{"location":"ice_dynamics/ice_dynamics/#Define-a-mesh","page":"Glacial Flow","title":"Define a mesh","text":"","category":"section"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"We'll need a mesh to simulate on. Since this is a 1D mesh, we can go ahead and make one right now:","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"# This is an empty 1D mesh.\ns = EmbeddedDeltaSet1D{Bool, Point2D}()\n\n# 20 vertices along a line, connected by edges.\nadd_vertices!(s, 20, point=Point2D.(range(0, 10_000, length=20), 0))\nadd_edges!(s, 1:nv(s)-1, 2:nv(s))\norient!(s)\n\n# The dual 1D mesh\nsd = EmbeddedDeltaDualComplex1D{Bool, Float64, Point2D}(s)\nsubdivide_duals!(sd, Circumcenter())","category":"page"},{"location":"ice_dynamics/ice_dynamics/#Define-input-data","page":"Glacial Flow","title":"Define input data","text":"","category":"section"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"We need initial conditions to use for our simulation.","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"n = 3\nρ = 910\ng = 9.8\nA = 1e-16\n\n# Ice height is a primal 0-form, with values at vertices.\n# We choose a distribution that obeys the shallow height and shallow slope conditions.\nh₀ = map(point(s)) do (x,_)\n ((7072-((x-5000)^2))/9e3+2777)/2777e-1\nend\n\n# Visualize initial conditions for ice sheet height.\nlines(map(x -> x[1], point(s)), h₀, linewidth=5)","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"We need to tell our Decapode which data maps to which symbols. We can wrap up our data like so:","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"u₀ = ComponentArray(dynamics_h=h₀)\n\nconstants_and_parameters = (\n n = n,\n stress_ρ = ρ,\n stress_g = g,\n stress_A = A)","category":"page"},{"location":"ice_dynamics/ice_dynamics/#Define-functions","page":"Glacial Flow","title":"Define functions","text":"","category":"section"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"In order to solve our equations, we will need numerical linear operators that give meaning to our symbolic operators. In the DEC, there are a handful of operators that one uses to construct all the usual vector calculus operations, namely: ♯, ♭, ∧, d, ⋆. The CombinatorialSpaces.jl library specifies many of these for us.","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"function generate(sd, my_symbol; hodge=GeometricHodge())\n op = @match my_symbol begin\n :♯ => x -> begin\n # This is an implementation of the \"sharp\" operator from the exterior\n # calculus, which takes co-vector fields to vector fields.\n # This could be up-streamed to the CombinatorialSpaces.jl library. (i.e.\n # this operation is not bespoke to this simulation.)\n e_vecs = map(edges(sd)) do e\n point(sd, sd[e, :∂v0]) - point(sd, sd[e, :∂v1])\n end\n neighbors = map(vertices(sd)) do v\n union(incident(sd, v, :∂v0), incident(sd, v, :∂v1))\n end\n n_vecs = map(neighbors) do es\n [e_vecs[e] for e in es]\n end\n map(neighbors, n_vecs) do es, nvs\n sum([nv*norm(nv)*x[e] for (e,nv) in zip(es,nvs)]) / sum(norm.(nvs))\n end\n end\n :mag => x -> norm.(x)\n x => error(\"Unmatched operator $my_symbol\")\n end\n return (args...) -> op(args...)\nend","category":"page"},{"location":"ice_dynamics/ice_dynamics/#Generate-the-simulation","page":"Glacial Flow","title":"Generate the simulation","text":"","category":"section"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"Now, we have everything we need to generate our simulation:","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"sim = eval(gensim(ice_dynamics1D, dimension=1))\nfₘ = sim(sd, generate)","category":"page"},{"location":"ice_dynamics/ice_dynamics/#Pre-compile-and-run","page":"Glacial Flow","title":"Pre-compile and run","text":"","category":"section"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"The first time that you run a function, Julia will pre-compile it, so that later runs will be fast. We'll solve our simulation for a short time span, to trigger this pre-compilation, and then run it.","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"@info(\"Precompiling Solver\")\nprob = ODEProblem(fₘ, u₀, (0, 1e-8), constants_and_parameters)\nsoln = solve(prob, Tsit5())\nsoln.retcode != :Unstable || error(\"Solver was not stable\")\n\ntₑ = 8_000\n\n# This next run should be fast.\n@info(\"Solving\")\nprob = ODEProblem(fₘ, u₀, (0, tₑ), constants_and_parameters)\nsoln = solve(prob, Tsit5())\n@show soln.retcode\n@info(\"Done\")","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"We can save our solution file in case we want to examine its contents when this Julia session ends.","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"@save \"ice_dynamics1D.jld2\" soln","category":"page"},{"location":"ice_dynamics/ice_dynamics/#Visualize","page":"Glacial Flow","title":"Visualize","text":"","category":"section"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"Let's examine the final conditions:","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"fig,ax,ob = lines(map(x -> x[1], point(s)), soln(tₑ).dynamics_h, linewidth=5)\nylims!(ax, extrema(h₀))\nfig","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"We see that our distribution converges to a more uniform ice height across our domain, which matches our physical intuition.","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"Let's create a GIF to examine an animation of these dynamics:","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"# Create a gif\nbegin\n frames = 100\n fig, ax, ob = lines(map(x -> x[1], point(s)), soln(0).dynamics_h)\n ylims!(ax, extrema(h₀))\n record(fig, \"ice_dynamics1D.gif\", range(0.0, tₑ; length=frames); framerate = 15) do t\n lines!(map(x -> x[1], point(s)), soln(t).dynamics_h)\n end\nend","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"(Image: IceDynamics1D)","category":"page"},{"location":"ice_dynamics/ice_dynamics/#2D-Re-interpretation","page":"Glacial Flow","title":"2D Re-interpretation","text":"","category":"section"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"The first, one-dimensional, semantics that we provided to our Decapode restricted the kinds of glacial sheets that we could model. (i.e. We could only look at glacial sheets which were constant along y). We can give our Decapode an alternate semantics, as some physics on a 2-dimensional manifold.","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"Note that for these physics, we make no adjustments to the underlying \"dimension-agnostic\" Decapode, we only provide a different set of rules for inferring what the type of each quantity is.","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"ice_dynamics2D = expand_operators(ice_dynamics)\ninfer_types!(ice_dynamics2D)\nresolve_overloads!(ice_dynamics2D)\n\nto_graphviz(ice_dynamics2D)","category":"page"},{"location":"ice_dynamics/ice_dynamics/#Store-as-JSON","page":"Glacial Flow","title":"Store as JSON","text":"","category":"section"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"We quickly demonstrate how to serialize a Decapode to JSON and read it back in:","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"write_json_acset(ice_dynamics2D, \"ice_dynamics2D.json\")","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"You can view the JSON file here.","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"# When reading back in, we specify that all attributes are \"Symbol\"s.\nice_dynamics2 = read_json_acset(SummationDecapode{Symbol,Symbol,Symbol}, \"ice_dynamics2D.json\")\n# Or, you could choose to interpret the data as \"String\"s.\nice_dynamics3 = read_json_acset(SummationDecapode{String,String,String}, \"ice_dynamics2D.json\")\n\nto_graphviz(ice_dynamics3)","category":"page"},{"location":"ice_dynamics/ice_dynamics/#Define-our-mesh","page":"Glacial Flow","title":"Define our mesh","text":"","category":"section"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"s = triangulated_grid(10_000,10_000,800,800,Point3D)\nsd = EmbeddedDeltaDualComplex2D{Bool, Float64, Point3D}(s)\nsubdivide_duals!(sd, Barycenter())\n\nfig = Figure()\nax = CairoMakie.Axis(fig[1,1])\nwf = wireframe!(ax, s)\nfig","category":"page"},{"location":"ice_dynamics/ice_dynamics/#Define-our-input-data","page":"Glacial Flow","title":"Define our input data","text":"","category":"section"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"n = 3\nρ = 910\ng = 9.8\nA = 1e-16\n\n# Ice height is a primal 0-form, with values at vertices.\nh₀ = map(point(s)) do (x,y)\n (7072-((x-5000)^2 + (y-5000)^2)^(1/2))/9e3+10\nend\n\n# Visualize initial condition for ice sheet height.\nmesh(s, color=h₀, colormap=:jet)\nfig = Figure()\nax = CairoMakie.Axis(fig[1,1])\nmsh = mesh!(ax, s, color=h₀, colormap=:jet)\nColorbar(fig[1,2], msh)\nfig","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"u₀ = ComponentArray(dynamics_h=h₀)\n\nconstants_and_parameters = (\n n = n,\n stress_ρ = ρ,\n stress_g = g,\n stress_A = A)","category":"page"},{"location":"ice_dynamics/ice_dynamics/#Define-our-functions","page":"Glacial Flow","title":"Define our functions","text":"","category":"section"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"function generate(sd, my_symbol; hodge=GeometricHodge())\n op = @match my_symbol begin\n :♯ => begin\n sharp_mat = ♯_mat(sd, AltPPSharp())\n x -> sharp_mat * x\n end\n :mag => x -> norm.(x)\n x => error(\"Unmatched operator $my_symbol\")\n end\n return (args...) -> op(args...)\nend","category":"page"},{"location":"ice_dynamics/ice_dynamics/#Generate-simulation","page":"Glacial Flow","title":"Generate simulation","text":"","category":"section"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"sim = eval(gensim(ice_dynamics2D, dimension=2))\nfₘ = sim(sd, generate)","category":"page"},{"location":"ice_dynamics/ice_dynamics/#Pre-compile-and-run-2D","page":"Glacial Flow","title":"Pre-compile and run 2D","text":"","category":"section"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"@info(\"Precompiling Solver\")\n# We run for a short timespan to pre-compile.\nprob = ODEProblem(fₘ, u₀, (0, 1e-8), constants_and_parameters)\nsoln = solve(prob, Tsit5())\nsoln.retcode != :Unstable || error(\"Solver was not stable\")","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"tₑ = 5e13\n\n@info(\"Solving\")\nprob = ODEProblem(fₘ, u₀, (0, tₑ), constants_and_parameters)\nsoln = solve(prob, Tsit5())\n@show soln.retcode\n@info(\"Done\")","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"@save \"ice_dynamics2D.jld2\" soln","category":"page"},{"location":"ice_dynamics/ice_dynamics/#Visualize-2D","page":"Glacial Flow","title":"Visualize 2D","text":"","category":"section"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"# Final conditions:\nfig = Figure()\nax = CairoMakie.Axis(fig[1,1])\nmsh = mesh!(ax, s, color=soln(tₑ).dynamics_h, colormap=:jet, colorrange=extrema(soln(0).dynamics_h))\nColorbar(fig[1,2], msh)\nfig","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"begin\n frames = 100\n fig = Figure()\n ax = CairoMakie.Axis(fig[1,1])\n msh = CairoMakie.mesh!(ax, s, color=soln(0).dynamics_h, colormap=:jet, colorrange=extrema(soln(0).dynamics_h))\n Colorbar(fig[1,2], msh)\n record(fig, \"ice_dynamics2D.gif\", range(0.0, tₑ; length=frames); framerate = 15) do t\n msh.color = soln(t).dynamics_h\n end\nend","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"(Image: IceDynamics2D)","category":"page"},{"location":"ice_dynamics/ice_dynamics/#2-Manifold-in-3D","page":"Glacial Flow","title":"2-Manifold in 3D","text":"","category":"section"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"We note that just because our physics is happening on a 2-manifold, (a surface), this doesn't restrict us to the 2D plane. In fact, we can \"embed\" our 2-manifold in 3D space to simulate a glacial sheets spread across the globe.","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"s = loadmesh(Icosphere(3, 10_000))\nsd = EmbeddedDeltaDualComplex2D{Bool, Float64, Point3D}(s)\nsubdivide_duals!(sd, Barycenter())\nwireframe(sd)","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"n = 3\nρ = 910\ng = 9.8\nA = 1e-16\n\n# Ice height is a primal 0-form, with values at vertices.\nh₀ = map(point(s)) do (x,y,z)\n (z*z)/(10_000*10_000)\nend\n\n# Visualize initial condition for ice sheet height.\n# There is lots of ice at the poles, and no ice at the equator.\nfig = Figure()\nax = LScene(fig[1,1], scenekw=(lights=[],))\nmsh = CairoMakie.mesh!(ax, s, color=h₀, colormap=:jet)\nColorbar(fig[1,2], msh)\nfig","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"u₀ = ComponentArray(dynamics_h=h₀)\n\nconstants_and_parameters = (\n n = n,\n stress_ρ = ρ,\n stress_g = g,\n stress_A = A)","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"sim = eval(gensim(ice_dynamics2D, dimension=2))\nfₘ = sim(sd, generate)","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"For brevity's sake, we'll skip the pre-compilation cell.","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"tₑ = 5e25\n\n@info(\"Solving\")\nprob = ODEProblem(fₘ, u₀, (0, tₑ), constants_and_parameters)\nsoln = solve(prob, Tsit5())\n@show soln.retcode\n@info(\"Done\")\n\n# Compare the extrema of the initial and final conditions of ice height.\nextrema(soln(0).dynamics_h), extrema(soln(tₑ).dynamics_h)","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"fig = Figure()\nax = LScene(fig[1,1], scenekw=(lights=[],))\nmsh = CairoMakie.mesh!(ax, s, color=soln(tₑ).dynamics_h, colormap=:jet, colorrange=extrema(soln(0).dynamics_h))\nColorbar(fig[1,2], msh)\nfig","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"begin\n frames = 200\n fig = Figure()\n ax = LScene(fig[1,1], scenekw=(lights=[],))\n msh = CairoMakie.mesh!(ax, s, color=soln(0).dynamics_h, colormap=:jet, colorrange=extrema(soln(0).dynamics_h))\n\n Colorbar(fig[1,2], msh)\n # These particular initial conditions diffuse quite quickly, so let's just look at\n # the first moments of those dynamics.\n record(fig, \"ice_dynamics2D_sphere.gif\", range(0.0, tₑ/64; length=frames); framerate = 20) do t\n msh.color = soln(t).dynamics_h\n end\nend","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"(Image: IceDynamics2DSphere)","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"DocInfo.get_report(info) # hide","category":"page"},{"location":"ch/cahn-hilliard/#The-Cahn-Hilliard-Equation","page":"Cahn-Hilliard","title":"The Cahn-Hilliard Equation","text":"","category":"section"},{"location":"ch/cahn-hilliard/","page":"Cahn-Hilliard","title":"Cahn-Hilliard","text":"include(joinpath(Base.@__DIR__, \"..\", \"..\", \"docinfo.jl\"))\ninfo = DocInfo.Info()","category":"page"},{"location":"ch/cahn-hilliard/","page":"Cahn-Hilliard","title":"Cahn-Hilliard","text":"For this example, Decapodes will model the Cahn-Hilliard equation. This equation describes the evolution of a binary fluid as its two phases separate out into distinct domains. Below is a high resolution preview of this model. Notice how the fluid has separated into distinct regions (blue and red) as well as the presence of a transition region.","category":"page"},{"location":"ch/cahn-hilliard/","page":"Cahn-Hilliard","title":"Cahn-Hilliard","text":"(Image: \"Cahn Hilliard sample\")","category":"page"},{"location":"ch/cahn-hilliard/#Formulating-the-Equation","page":"Cahn-Hilliard","title":"Formulating the Equation","text":"","category":"section"},{"location":"ch/cahn-hilliard/","page":"Cahn-Hilliard","title":"Cahn-Hilliard","text":"We first load in our dependencies","category":"page"},{"location":"ch/cahn-hilliard/","page":"Cahn-Hilliard","title":"Cahn-Hilliard","text":"# AlgebraicJulia Dependencies\nusing Catlab\nusing CombinatorialSpaces\nusing Decapodes\nusing DiagrammaticEquations\n\n# External Dependencies\nusing CairoMakie\nusing ComponentArrays\nusing GeometryBasics\nusing LinearAlgebra\nusing MLStyle\nusing OrdinaryDiffEq\nusing Random\nPoint3D = Point3{Float64};\nnothing #hide","category":"page"},{"location":"ch/cahn-hilliard/","page":"Cahn-Hilliard","title":"Cahn-Hilliard","text":"and then proceed to describe our physics using Decapodes.","category":"page"},{"location":"ch/cahn-hilliard/","page":"Cahn-Hilliard","title":"Cahn-Hilliard","text":"CahnHilliard = @decapode begin\n C::Form0\n (D, γ)::Constant\n ∂ₜ(C) == D * Δ(C.^3 - C - γ * Δ(C))\nend\n\nto_graphviz(CahnHilliard)","category":"page"},{"location":"ch/cahn-hilliard/","page":"Cahn-Hilliard","title":"Cahn-Hilliard","text":"In this equation C will represent the concentration of the binary fluid, ranging from -1 to 1 to differentiate between different phases. We also have a diffusion constant D and a constant γ whose square root is the length of the transition regions. This formulation of the Cahn-Hilliard equation was drawn from the Wikipedia page on the topic found here.","category":"page"},{"location":"ch/cahn-hilliard/#Loading-the-Data","page":"Cahn-Hilliard","title":"Loading the Data","text":"","category":"section"},{"location":"ch/cahn-hilliard/","page":"Cahn-Hilliard","title":"Cahn-Hilliard","text":"We now generate the mesh information. We'll run the equation on a triangulated grid. We hide the mesh visualization code for clarity.","category":"page"},{"location":"ch/cahn-hilliard/","page":"Cahn-Hilliard","title":"Cahn-Hilliard","text":"s = triangulated_grid(100, 100, 0.5, 0.5, Point3D);\nsd = EmbeddedDeltaDualComplex2D{Bool, Float64, Point3D}(s);\nsubdivide_duals!(sd, Circumcenter());\nfig = Figure() # hide\nax = CairoMakie.Axis(fig[1,1], aspect=1) # hide\nwf = wireframe!(ax, s; linewidth=1) # hide\nsave(\"CahnHilliard_Rect.png\", fig) # hide\nnothing # hide","category":"page"},{"location":"ch/cahn-hilliard/","page":"Cahn-Hilliard","title":"Cahn-Hilliard","text":"(Image: \"CahnHilliardRect\")","category":"page"},{"location":"ch/cahn-hilliard/","page":"Cahn-Hilliard","title":"Cahn-Hilliard","text":"The Cahn-Hilliard equation starts with a random concentration holding values between -1 and 1. For both D and γ constants we choose 0.5.","category":"page"},{"location":"ch/cahn-hilliard/","page":"Cahn-Hilliard","title":"Cahn-Hilliard","text":"Random.seed!(0)\n\nC = rand(Float64, nv(sd)) * 2 .- 1\nu₀ = ComponentArray(C=C)\nconstants = (D = 0.5, γ = 0.5);\n\nfig = Figure() # hide\nax = CairoMakie.Axis(fig[1,1], aspect=1) # hide\nmsh = CairoMakie.mesh!(ax, s, color=C, colormap=:jet, colorrange=extrema(C)) # hide\nColorbar(fig[1,2], msh)\nsave(\"CahnHilliard_initial.png\", fig) # hide\nnothing # hide","category":"page"},{"location":"ch/cahn-hilliard/","page":"Cahn-Hilliard","title":"Cahn-Hilliard","text":"(Image: \"Initial conditions\")","category":"page"},{"location":"ch/cahn-hilliard/","page":"Cahn-Hilliard","title":"Cahn-Hilliard","text":"We'll now create the simulation code representing the Cahn-Hilliard equation. We pass nothing in the second argument to sim since we have no custom functions to pass in.","category":"page"},{"location":"ch/cahn-hilliard/","page":"Cahn-Hilliard","title":"Cahn-Hilliard","text":"sim = eval(gensim(CahnHilliard))\nfₘ = sim(sd, nothing, DiagonalHodge());","category":"page"},{"location":"ch/cahn-hilliard/#Getting-the-Solution","page":"Cahn-Hilliard","title":"Getting the Solution","text":"","category":"section"},{"location":"ch/cahn-hilliard/","page":"Cahn-Hilliard","title":"Cahn-Hilliard","text":"Now that everything is set up and ready, we can solve the equation. We run the simulation for 200 time units to see the long-term evolution of the fluid. Note we only save the solution at intervals of 0.1 time units in order to reduce the memory-footprint of the solve.","category":"page"},{"location":"ch/cahn-hilliard/","page":"Cahn-Hilliard","title":"Cahn-Hilliard","text":"tₑ = 200\nprob = ODEProblem(fₘ, u₀, (0, tₑ), constants)\nsoln = solve(prob, Tsit5(), saveat=0.1);\nsoln.retcode","category":"page"},{"location":"ch/cahn-hilliard/","page":"Cahn-Hilliard","title":"Cahn-Hilliard","text":"And we can see the result as a gif.","category":"page"},{"location":"ch/cahn-hilliard/","page":"Cahn-Hilliard","title":"Cahn-Hilliard","text":"function create_gif(solution, file_name)\n frames = 200\n fig = Figure()\n ax = CairoMakie.Axis(fig[1,1])\n msh = CairoMakie.mesh!(ax, s, color=solution(0).C, colormap=:jet, colorrange=extrema(solution(0).C))\n Colorbar(fig[1,2], msh)\n CairoMakie.record(fig, file_name, range(0.0, tₑ; length=frames); framerate = 15) do t\n msh.color = solution(t).C\n end\nend\ncreate_gif(soln, \"CahnHilliard_Rect.gif\")","category":"page"},{"location":"ch/cahn-hilliard/","page":"Cahn-Hilliard","title":"Cahn-Hilliard","text":"(Image: \"CahnHilliardRes\")","category":"page"},{"location":"ch/cahn-hilliard/","page":"Cahn-Hilliard","title":"Cahn-Hilliard","text":"DocInfo.get_report(info) # hide","category":"page"},{"location":"nhs/nhs_lite/#Implement-Oceananigans.jl's-NonhydrostaticModel-in-the-Discrete-Exterior-Calculus","page":"NHS","title":"Implement Oceananigans.jl's NonhydrostaticModel in the Discrete Exterior Calculus","text":"","category":"section"},{"location":"nhs/nhs_lite/","page":"NHS","title":"NHS","text":"include(joinpath(Base.@__DIR__, \"..\", \"..\", \"docinfo.jl\"))\ninfo = DocInfo.Info()","category":"page"},{"location":"nhs/nhs_lite/","page":"NHS","title":"NHS","text":"Let's use Decapodes to implement the NonhydrostaticModel from Oceananigans.jl. We will take the opportunity to demonstrate how we can use our \"algebra of model compositions\" to encode certain guarantees on the models we generate. We will use the 2D Turbulence as a guiding example, and use only equations found in the Oceananigans docs to construct our model.","category":"page"},{"location":"nhs/nhs_lite/","page":"NHS","title":"NHS","text":"The full code that generated these results is available in a julia script.","category":"page"},{"location":"nhs/nhs_lite/","page":"NHS","title":"NHS","text":"# AlgebraicJulia Dependencies\nusing Catlab\nusing CombinatorialSpaces\nusing Decapodes\nusing DiagrammaticEquations\n\n# External Dependencies\nusing CairoMakie\nusing ComponentArrays\nusing Downloads\nusing GeometryBasics: Point3\nusing JLD2\nusing LinearAlgebra\nusing MLStyle\nusing OrdinaryDiffEq\nPoint3D = Point3{Float64};\nnothing # hide","category":"page"},{"location":"nhs/nhs_lite/#Specify-our-models","page":"NHS","title":"Specify our models","text":"","category":"section"},{"location":"nhs/nhs_lite/","page":"NHS","title":"NHS","text":"This is Equation 1: \"The momentum conservation equation\". This is the first formulation of mutual advection (of v along V, and V along v) that we could find in the exterior calculus.","category":"page"},{"location":"nhs/nhs_lite/","page":"NHS","title":"NHS","text":"momentum = @decapode begin\n (v,V)::DualForm1\n f::Form0\n uˢ::DualForm1\n ∂tuˢ::DualForm1\n p::DualForm0\n b::DualForm0\n ĝ::DualForm1\n Fᵥ::DualForm1\n StressDivergence::DualForm1\n\n ∂ₜ(v) ==\n -ℒ₁(v,v) + 0.5*d(ι₁₁(v,v)) -\n d(ι₁₁(v,V)) + ι₁₂(v,d(V)) + ι₁₂(V,d(v)) -\n (f - ∘(d,⋆)(uˢ)) ∧ᵖᵈ₀₁ v -\n d(p) +\n b ∧ᵈᵈ₀₁ ĝ -\n StressDivergence +\n ∂tuˢ +\n Fᵥ\nend\nto_graphviz(momentum)","category":"page"},{"location":"nhs/nhs_lite/","page":"NHS","title":"NHS","text":"Why did we write \"StressDivergence\" instead of ∇⋅τ, as in the linked equation? According to this docs page, the user makes a selection of what model to insert in place of the term ∇⋅τ. For example, in the isotropic case, Oceananigans.jl replaces this term with: ∇⋅τ = νΔv. Thus, we write StressDivergence, and replace this term with a choice of \"turbulence closure\" model. Using the \"constant isotropic diffusivity\" case, we can operate purely in terms of scalar-valued forms.","category":"page"},{"location":"nhs/nhs_lite/","page":"NHS","title":"NHS","text":"This is Equation 2: \"The tracer conservation equation\".","category":"page"},{"location":"nhs/nhs_lite/","page":"NHS","title":"NHS","text":"tracer_conservation = @decapode begin\n (c,C,F,FluxDivergence)::DualForm0\n (v,V)::DualForm1\n\n ∂ₜ(c) ==\n -1*ι₁₁(v,d(c)) -\n ι₁₁(V,d(c)) -\n ι₁₁(v,d(C)) -\n FluxDivergence +\n F\nend\nto_graphviz(tracer_conservation)","category":"page"},{"location":"nhs/nhs_lite/","page":"NHS","title":"NHS","text":"This is Equation 2: \"Linear equation of state\" of seawater buoyancy.","category":"page"},{"location":"nhs/nhs_lite/","page":"NHS","title":"NHS","text":"equation_of_state = @decapode begin\n (b,T,S)::DualForm0\n (g,α,β)::Constant\n\n b == g*(α*T - β*S)\nend\nto_graphviz(equation_of_state)","category":"page"},{"location":"nhs/nhs_lite/","page":"NHS","title":"NHS","text":"This is Equation 2: \"Constant isotropic diffusivity\".","category":"page"},{"location":"nhs/nhs_lite/","page":"NHS","title":"NHS","text":"isotropic_diffusivity = @decapode begin\n v::DualForm1\n c::DualForm0\n StressDivergence::DualForm1\n FluxDivergence::DualForm0\n (κ,nu)::Constant\n\n StressDivergence == nu*Δᵈ₁(v)\n FluxDivergence == κ*Δᵈ₀(c)\nend\nto_graphviz(isotropic_diffusivity)","category":"page"},{"location":"nhs/nhs_lite/#Compatibility-Guarantees-via-Operadic-Composition","page":"NHS","title":"Compatibility Guarantees via Operadic Composition","text":"","category":"section"},{"location":"nhs/nhs_lite/","page":"NHS","title":"NHS","text":"Decapodes composition is formally known as an \"operad algebra\". That means that we don't have to encode our composition in a single undirected wiring diagram (UWD) and then apply it. Rather, we can define several UWDs, compose those, and then apply those. Of course, since the output of oapply is another Decapode, we could perform an intermediate oapply, if that is convenient.","category":"page"},{"location":"nhs/nhs_lite/","page":"NHS","title":"NHS","text":"Besides it being convenient to break apart large UWDs into component UWDs, this hierarchical composition can enforce rules on our physical quantities.","category":"page"},{"location":"nhs/nhs_lite/","page":"NHS","title":"NHS","text":"For example:","category":"page"},{"location":"nhs/nhs_lite/","page":"NHS","title":"NHS","text":"We want all the tracers (salinity, temperature, etc.) in our physics to obey the same conservation equation.\nWe want them to obey the same \"turbulence closure\", which affects their flux-divergence term.\nAt the same time, a choice of turbulence closure doesn't just affect (each of) the flux-divergence terms, it also constrains which stress-divergence is physically valid in the momentum equation.","category":"page"},{"location":"nhs/nhs_lite/","page":"NHS","title":"NHS","text":"We will use our operad algebra to guarantee model compatibility and physical consistency, guarantees that would be burdensome to fit into a one-off type system.","category":"page"},{"location":"nhs/nhs_lite/","page":"NHS","title":"NHS","text":"Here, we specify the equations that any tracer obeys:","category":"page"},{"location":"nhs/nhs_lite/","page":"NHS","title":"NHS","text":"tracer_composition = @relation () begin\n # \"The turbulence closure selected by the user determines the form of ... diffusive flux divergence\"\n turbulence(FD,v,c)\n\n continuity(FD,v,c)\nend\ndraw_composition(tracer_composition)","category":"page"},{"location":"nhs/nhs_lite/","page":"NHS","title":"NHS","text":"Let's \"lock in\" isotropic diffusivity by doing an intermediate oapply.","category":"page"},{"location":"nhs/nhs_lite/","page":"NHS","title":"NHS","text":"isotropic_tracer = apex(oapply(tracer_composition, [\n Open(isotropic_diffusivity, [:FluxDivergence, :v, :c]),\n Open(tracer_conservation, [:FluxDivergence, :v, :c])]))\nto_graphviz(isotropic_tracer)","category":"page"},{"location":"nhs/nhs_lite/","page":"NHS","title":"NHS","text":"Let's use this building-block tracer physics at the next level. The quotes that appear in this composition diagram appear directly in the Oceananigans.jl docs.","category":"page"},{"location":"nhs/nhs_lite/","page":"NHS","title":"NHS","text":"nonhydrostatic_composition = @relation () begin\n # \"The turbulence closure selected by the user determines the form of stress divergence\"\n # => Note that the StressDivergence term, SD, is shared by momentum and all the tracers.\n momentum(V, v, b, SD)\n\n # \"Both T and S obey the tracer conservation equation\"\n # => Temperature and Salinity both receive a copy of the tracer physics.\n temperature(V, v, T, SD, nu)\n salinity(V, v, S, SD, nu)\n\n # \"Buoyancy is determined from a linear equation of state\"\n # => The b term in momentum is that described by the equation of state here.\n eos(b, T, S)\nend\ndraw_composition(nonhydrostatic_composition)","category":"page"},{"location":"nhs/nhs_lite/","page":"NHS","title":"NHS","text":"isotropic_nonhydrostatic_buoyancy = apex(oapply(nonhydrostatic_composition, [\n Open(momentum, [:V, :v, :b, :StressDivergence]),\n Open(isotropic_tracer, [:continuity_V, :v, :c, :turbulence_StressDivergence, :turbulence_nu]),\n Open(isotropic_tracer, [:continuity_V, :v, :c, :turbulence_StressDivergence, :turbulence_nu]),\n Open(equation_of_state, [:b, :T, :S])]));\nto_graphviz(isotropic_nonhydrostatic_buoyancy)","category":"page"},{"location":"nhs/nhs_lite/#Our-Mesh","page":"NHS","title":"Our Mesh","text":"","category":"section"},{"location":"nhs/nhs_lite/","page":"NHS","title":"NHS","text":"We execute these dynamics on the torus explicitly, instead of using a square with periodic boundary conditions.","category":"page"},{"location":"nhs/nhs_lite/","page":"NHS","title":"NHS","text":"# This is a torus with resolution of its dual mesh similar to that\n# used by Oceananigans (explicitly represented as a torus, not as a\n# square with periodic boundary conditions!)\nDownloads.download(\"https://cise.ufl.edu/~luke.morris/torus.obj\", \"torus.obj\")\ns = EmbeddedDeltaSet2D(\"torus.obj\")\nsd = EmbeddedDeltaDualComplex2D{Bool,Float64,Point3D}(s)\nsubdivide_duals!(sd, Barycenter())\nfig = Figure() # hide\nax = CairoMakie.Axis(fig[1,1], aspect=1) # hide\nwf = wireframe!(ax, s; linewidth=1) # hide\nsave(\"NHS_mesh.png\", fig) # hide\nnothing # hide","category":"page"},{"location":"nhs/nhs_lite/","page":"NHS","title":"NHS","text":"(Image: \"NHS_torus\")","category":"page"},{"location":"nhs/nhs_lite/#Results","page":"NHS","title":"Results","text":"","category":"section"},{"location":"nhs/nhs_lite/","page":"NHS","title":"NHS","text":"In the DEC, vorticity is encoded with d⋆, and speed can be encoded with norm ♯. We can use our operators from CombinatorialSpaces.jl to create our GIFs.","category":"page"},{"location":"nhs/nhs_lite/","page":"NHS","title":"NHS","text":"(Image: Vorticity)","category":"page"},{"location":"nhs/nhs_lite/","page":"NHS","title":"NHS","text":"(Image: Speed)","category":"page"},{"location":"nhs/nhs_lite/","page":"NHS","title":"NHS","text":"DocInfo.get_report(info) # hide","category":"page"},{"location":"poiseuille/poiseuille/#Poissuille-Flow-for-Fluid-Mechanics","page":"Pipe Flow","title":"Poissuille Flow for Fluid Mechanics","text":"","category":"section"},{"location":"poiseuille/poiseuille/","page":"Pipe Flow","title":"Pipe Flow","text":"include(joinpath(Base.@__DIR__, \"..\", \"..\", \"docinfo.jl\"))\ninfo = DocInfo.Info()","category":"page"},{"location":"poiseuille/poiseuille/","page":"Pipe Flow","title":"Pipe Flow","text":"When modeling a fluid flowing in a pipe, one can ignore the multidimensional structure of the pipe and approximate the system as a 1 dimensional flow along the pipe. The no-slip boundary condition and the geometry of the pipe enter a 1D equation in the form of a resistance term.","category":"page"},{"location":"poiseuille/poiseuille/","page":"Pipe Flow","title":"Pipe Flow","text":"using Catlab\nusing CombinatorialSpaces\nusing DiagrammaticEquations\nusing Decapodes\n\n# Julia community libraries\nusing CairoMakie\nusing GeometryBasics: Point3\nusing LinearAlgebra\nusing OrdinaryDiffEq\nPoint3D = Point3{Float64}\nnothing # hide","category":"page"},{"location":"poiseuille/poiseuille/#Creating-the-Poiseuille-Equations","page":"Pipe Flow","title":"Creating the Poiseuille Equations","text":"","category":"section"},{"location":"poiseuille/poiseuille/","page":"Pipe Flow","title":"Pipe Flow","text":"The @decapode macro creates the data structure representing the equations of Poiseuille flow. The first block declares variables, the second block defines intermediate terms and the last block is the core equation.","category":"page"},{"location":"poiseuille/poiseuille/","page":"Pipe Flow","title":"Pipe Flow","text":"For these physics, μ̃ represents the negative viscosity per unit area while R represents the drag of the pipe boundary.","category":"page"},{"location":"poiseuille/poiseuille/","page":"Pipe Flow","title":"Pipe Flow","text":"Poise = @decapode begin\n P::Form0\n q::Form1\n (R, μ̃ )::Constant\n\n # Laplacian of q for the viscous effect\n Δq == Δ(q)\n # Gradient of P for the pressure driving force\n ∇P == d(P)\n\n # Definition of the time derivative of q\n ∂ₜ(q) == q̇\n\n # The core equation\n q̇ == μ̃ * ∂q(Δq) + ∇P + R * q\nend\n\nPoise = expand_operators(Poise)\ninfer_types!(Poise, op1_inf_rules_1D, op2_inf_rules_1D)\nresolve_overloads!(Poise, op1_res_rules_1D, op2_res_rules_1D)\nto_graphviz(Poise)","category":"page"},{"location":"poiseuille/poiseuille/#Defining-the-Semantics","page":"Pipe Flow","title":"Defining the Semantics","text":"","category":"section"},{"location":"poiseuille/poiseuille/","page":"Pipe Flow","title":"Pipe Flow","text":"In order to solve our equations, we will need numerical linear operators that give meaning to our symbolic operators. The generate function below assigns the necessary matrices as definitions for the symbols. In order to define the viscosity effect correctly we have to identify boundary edges and apply a mask. This is because the DEC has discrete dual cells at the boundaries that need to be handled specially for the viscosity term. We found empirically that if you allow nonzero viscosity at the boundary edges, the flows at the boundaries will be incorrect. You can find the file for boundary conditions here.","category":"page"},{"location":"poiseuille/poiseuille/","page":"Pipe Flow","title":"Pipe Flow","text":"using MLStyle\ninclude(\"../boundary_helpers.jl\")\n\nfunction generate(sd, my_symbol; hodge=GeometricHodge())\n op = @match my_symbol begin\n :∂q => x -> begin\n x[boundary_edges(sd)] .= 0\n x\n end\n :∂ρ => ρ -> begin\n ρ[1] = 0\n ρ[end] = 0\n ρ\n end\n x => error(\"Unmatched operator $my_symbol\")\n end\n return op\nend","category":"page"},{"location":"poiseuille/poiseuille/#A-Single-Pipe-Segment","page":"Pipe Flow","title":"A Single Pipe Segment","text":"","category":"section"},{"location":"poiseuille/poiseuille/","page":"Pipe Flow","title":"Pipe Flow","text":"This simulation can be validated with the Poiseuille equation for a single pipe. First we create a mesh with one pipe segment.","category":"page"},{"location":"poiseuille/poiseuille/","page":"Pipe Flow","title":"Pipe Flow","text":"s = EmbeddedDeltaSet1D{Bool,Point3D}()\nadd_vertices!(s, 2, point=[Point3D(-1, 0, 0), Point3D(+1, 0, 0)])\nadd_edge!(s, 1, 2, edge_orientation=true)\n\nsd = EmbeddedDeltaDualComplex1D{Bool,Float64,Point3D}(s)\nsubdivide_duals!(sd, Circumcenter())\nsd","category":"page"},{"location":"poiseuille/poiseuille/","page":"Pipe Flow","title":"Pipe Flow","text":"Then we solve the equations.","category":"page"},{"location":"poiseuille/poiseuille/","page":"Pipe Flow","title":"Pipe Flow","text":"using ComponentArrays\nsim = eval(gensim(Poise, dimension=1))\nfₘ = sim(sd, generate)\nq = [2.0]\nP = [10.0, 5.0]\nu = ComponentArray(q=q,P=P)\nparams = (k = -0.01, μ̃ = 0.5, R=0.005)\nprob = ODEProblem(fₘ, u, (0.0, 10000.0), params)\nsoln = solve(prob, Tsit5())\nsoln.u","category":"page"},{"location":"poiseuille/poiseuille/#A-Linear-Pipe-with-Multiple-Segments","page":"Pipe Flow","title":"A Linear Pipe with Multiple Segments","text":"","category":"section"},{"location":"poiseuille/poiseuille/","page":"Pipe Flow","title":"Pipe Flow","text":"We then move on to a linear sequence of pipe segments. You can visualize this as the discretization of a single long pipe into n segments. First we define the mesh:","category":"page"},{"location":"poiseuille/poiseuille/","page":"Pipe Flow","title":"Pipe Flow","text":"function linear_pipe(n::Int)\n s = EmbeddedDeltaSet1D{Bool,Point3D}()\n add_vertices!(s, n, point=[Point3D(i, 0, 0) for i in 1:n])\n add_edges!(s, 1:n-1, 2:n, edge_orientation=true)\n sd = EmbeddedDeltaDualComplex1D{Bool,Float64,Point3D}(s)\n subdivide_duals!(sd, Circumcenter())\n sd\nend\n\nsd = linear_pipe(10)\nnothing # hide","category":"page"},{"location":"poiseuille/poiseuille/","page":"Pipe Flow","title":"Pipe Flow","text":"Then we solve the equation. Notice that the equilibrium flow is constant down the length of the pipe. This must be true because of conservation of mass. The segments are all the same length and the total flow in must equal the total flow out of each segment.","category":"page"},{"location":"poiseuille/poiseuille/","page":"Pipe Flow","title":"Pipe Flow","text":"Note that we do not generate new simulation code for Poiseuille flow with gensim again. We simply need to provide our new mesh so that our discrete differential operators can be re-instantiated.","category":"page"},{"location":"poiseuille/poiseuille/","page":"Pipe Flow","title":"Pipe Flow","text":"fₘ = sim(sd, generate)\nP = [9,8,7,6,5,4,3,2,1,0]\nq = [5,3,4,2,5,2,8,4,3]\nu = ComponentArray(q=q,P=P)\nparams = (k = -0.01, μ̃ = 0.5, R=0.005)\nprob = ODEProblem(fₘ, u, (0.0, 10000.0), params)\nsol = solve(prob, Tsit5());\nsol.u","category":"page"},{"location":"poiseuille/poiseuille/#A-Distribution-Network","page":"Pipe Flow","title":"A Distribution Network","text":"","category":"section"},{"location":"poiseuille/poiseuille/","page":"Pipe Flow","title":"Pipe Flow","text":"To model a distribution network, such as residential drinking water system, we will build a binary tree of pipes that at each junction have a bifurcation into two pipes. We expect that the flow will be divided by two at each level of the tree. First we make the mesh.","category":"page"},{"location":"poiseuille/poiseuille/","page":"Pipe Flow","title":"Pipe Flow","text":"function binary_pipe(depth::Int)\n s = EmbeddedDeltaSet1D{Bool,Point3D}()\n add_vertex!(s, point=Point3D(0, 0, 0))\n for n in 1:depth\n for prev_v in vertices(s)[end-2^(n-1)+1:end]\n x, y, _ = s[:point][prev_v]\n vs = add_vertices!(s, 2, point=[Point3D(sgn*3^0.5 + x, y+1, 0)\n for sgn in [1,-1]])\n add_edges!(s, vs, [prev_v,prev_v], edge_orientation=true)\n end\n end\n v = add_vertex!(s, point=Point3D(3^0.5, -1, 0))\n add_edge!(s, 1, v, edge_orientation=true)\n sd = EmbeddedDeltaDualComplex1D{Bool,Float64,Point3D}(s)\n subdivide_duals!(sd, Circumcenter())\n sd\nend\nsd = binary_pipe(2)\nnothing # hide","category":"page"},{"location":"poiseuille/poiseuille/","page":"Pipe Flow","title":"Pipe Flow","text":"Then we solve the equations.","category":"page"},{"location":"poiseuille/poiseuille/","page":"Pipe Flow","title":"Pipe Flow","text":"fₘ = sim(sd, generate)\nP = collect(1.0:nv(sd))\nq = fill(5.0, ne(sd))\nu = ComponentArray(q=q,P=P)\nparams = (k = -0.01, μ̃ = 0.5, R=0.005)\nprob = ODEProblem(fₘ, u, (0.0, 10000.0), params)\nsol = solve(prob, Tsit5())\nsol.u","category":"page"},{"location":"poiseuille/poiseuille/#Multiphysics","page":"Pipe Flow","title":"Multiphysics","text":"","category":"section"},{"location":"poiseuille/poiseuille/","page":"Pipe Flow","title":"Pipe Flow","text":"Decapodes really shines when you want to extend or refine your physics. We will change our physics by adding in a term for density of the material and the corresponding changes in pressure. This is not the only formulation for including a dynamic pressure effect into this system. If you can think of a better way to include this effect, we invite you to try it as an exercise!","category":"page"},{"location":"poiseuille/poiseuille/","page":"Pipe Flow","title":"Pipe Flow","text":"Because the pressure is no longer being supplied as a parameter of the system controlled by the operators, we need to introduce a density term and a boundary condition for that density. In this system you can think of forcing a prescribed amount of material per unit time through the openings of the pipe and allowing the flow q and the pressure P to fluctuate. Before we were enforcing a fixed pressure gradient and and letting the flow fluctuate to achieve equilibrium. In the prior model, we were not accounting for the amount of material that had to flow in order to achieve that (flow, pressure) combination.","category":"page"},{"location":"poiseuille/poiseuille/","page":"Pipe Flow","title":"Pipe Flow","text":"The Decapode can be visualized with Graphviz, note that the boundary conditions are explicitly represented in the Decapode as operators that implement a masking operation. This is not consistent with the Diagrammatic Equations in Physics paper. This approach is more directly tied to the computational method and will eventually be replaced with one based on morphisms of diagrams.","category":"page"},{"location":"poiseuille/poiseuille/","page":"Pipe Flow","title":"Pipe Flow","text":"# μ̃ = negative viscosity per unit area\n# R = drag of pipe boundary\n# k = pressure as a function of density\nPoise = @decapode begin\n q::Form1\n (P, ρ)::Form0\n (k, R, μ̃ )::Constant\n\n # Poiseuille Flow\n ∂ₜ(q) == q̇\n ∇P == d(P)\n q̇ == μ̃ * ∂q(Δ(q)) - ∇P + R * q\n \n # Pressure/Density Coupling\n P == k * ρ\n ∂ₜ(ρ) == ρ̇\n ρ_up == ∘(⋆, d, ⋆)(-1 * ∧₀₁(ρ,q)) # advection\n \n # Boundary conditions\n ρ̇ == ∂ρ(ρ_up)\nend\n\nPoise = expand_operators(Poise)\ninfer_types!(Poise, op1_inf_rules_1D, op2_inf_rules_1D)\nresolve_overloads!(Poise, op1_res_rules_1D, op2_res_rules_1D)\nto_graphviz(Poise)","category":"page"},{"location":"poiseuille/poiseuille/","page":"Pipe Flow","title":"Pipe Flow","text":"Then we can create the mesh and solve the equation.","category":"page"},{"location":"poiseuille/poiseuille/","page":"Pipe Flow","title":"Pipe Flow","text":"sd = linear_pipe(20)\n\nsim = eval(gensim(Poise, dimension=1))\nfunc = sim(sd, generate)\n\nq = [5,3,4,2,5,2,3,4,3, 10,9,8,7,6,5,5,5,5,5]\nρ = [5,3,4,2,5,2,3,4,3, 10,9,8,7,6,5,5,5,5,5,5]\nu = ComponentArray(q=q,ρ=ρ)\nparams = (k = -0.01, μ̃ = 0.5, R=0.005)\n\nprob = ODEProblem(func, u, (0.0, 10000.0), params)\nsol = solve(prob, Tsit5())\nsol.u","category":"page"},{"location":"poiseuille/poiseuille/","page":"Pipe Flow","title":"Pipe Flow","text":"Notice that the solution contains both a vector of flows and a vector of pressures.","category":"page"},{"location":"poiseuille/poiseuille/","page":"Pipe Flow","title":"Pipe Flow","text":"DocInfo.get_report(info) # hide","category":"page"},{"location":"bsh/budyko_sellers_halfar/#Budko-Sellers-Halfar","page":"Budyko-Sellers-Halfar","title":"Budko-Sellers-Halfar","text":"","category":"section"},{"location":"bsh/budyko_sellers_halfar/","page":"Budyko-Sellers-Halfar","title":"Budyko-Sellers-Halfar","text":"include(joinpath(Base.@__DIR__, \"..\", \"..\",\"docinfo.jl\"))\ninfo = DocInfo.Info()","category":"page"},{"location":"bsh/budyko_sellers_halfar/","page":"Budyko-Sellers-Halfar","title":"Budyko-Sellers-Halfar","text":"In this example, we will compose the Budyko-Sellers 1D energy balance model of the Earth's surface temperature with the Halfar model of glacial dynamics. Note that each of these components models is itself a composition of smaller physical models. In this walkthrough, we will compose them together using the same techniques.","category":"page"},{"location":"bsh/budyko_sellers_halfar/","page":"Budyko-Sellers-Halfar","title":"Budyko-Sellers-Halfar","text":"# AlgebraicJulia Dependencies\nusing Catlab\nusing CombinatorialSpaces\nusing DiagrammaticEquations\nusing Decapodes\n\n# External Dependencies\nusing CairoMakie\nusing ComponentArrays\nusing GeometryBasics: Point2\nusing JLD2\nusing LinearAlgebra\nusing MLStyle\nusing OrdinaryDiffEq\nusing SparseArrays\nPoint2D = Point2{Float64};\nnothing # hide","category":"page"},{"location":"bsh/budyko_sellers_halfar/","page":"Budyko-Sellers-Halfar","title":"Budyko-Sellers-Halfar","text":"We have defined the Halfar ice model in other docs pages, and so will quickly define it here.","category":"page"},{"location":"bsh/budyko_sellers_halfar/","page":"Budyko-Sellers-Halfar","title":"Budyko-Sellers-Halfar","text":"halfar_eq2 = @decapode begin\n h::Form0\n Γ::Form1\n n::Constant\n\n ḣ == ∂ₜ(h)\n ḣ == ∘(⋆, d, ⋆)(Γ * d(h) * avg₀₁(mag(♯(d(h)))^(n-1)) * avg₀₁(h^(n+2)))\nend\n\nglens_law = @decapode begin\n Γ::Form1\n A::Form1\n (ρ,g,n)::Constant\n \n Γ == (2/(n+2))*A*(ρ*g)^n\nend\n\nice_dynamics_composition_diagram = @relation () begin\n dynamics(Γ,n)\n stress(Γ,n)\nend\n\nice_dynamics_cospan = oapply(ice_dynamics_composition_diagram,\n [Open(halfar_eq2, [:Γ,:n]),\n Open(glens_law, [:Γ,:n])])\nhalfar = apex(ice_dynamics_cospan)\n\nto_graphviz(halfar, verbose=false)","category":"page"},{"location":"bsh/budyko_sellers_halfar/","page":"Budyko-Sellers-Halfar","title":"Budyko-Sellers-Halfar","text":"We will introduce the Budyko-Sellers energy balance model in more detail. First, let's define the composite physics. We will visualize them all in a single diagram without any composition at first:","category":"page"},{"location":"bsh/budyko_sellers_halfar/","page":"Budyko-Sellers-Halfar","title":"Budyko-Sellers-Halfar","text":"energy_balance = @decapode begin\n (Tₛ, ASR, OLR, HT)::Form0\n (C)::Constant\n\n Tₛ̇ == ∂ₜ(Tₛ) \n\n Tₛ̇ == (ASR - OLR + HT) ./ C\nend\n\nabsorbed_shortwave_radiation = @decapode begin\n (Q, ASR)::Form0\n α::Constant\n\n ASR == (1 .- α) .* Q\nend\n\noutgoing_longwave_radiation = @decapode begin\n (Tₛ, OLR)::Form0\n (A,B)::Constant\n\n OLR == A .+ (B .* Tₛ)\nend\n\nheat_transfer = @decapode begin\n (HT, Tₛ)::Form0\n (D,cosϕᵖ,cosϕᵈ)::Constant\n\n HT == (D ./ cosϕᵖ) .* ⋆(d(cosϕᵈ .* ⋆(d(Tₛ))))\nend\n\ninsolation = @decapode begin\n Q::Form0\n cosϕᵖ::Constant\n\n Q == 450 * cosϕᵖ\nend\n\nto_graphviz(oplus([energy_balance, absorbed_shortwave_radiation, outgoing_longwave_radiation, heat_transfer, insolation]), directed=false)","category":"page"},{"location":"bsh/budyko_sellers_halfar/","page":"Budyko-Sellers-Halfar","title":"Budyko-Sellers-Halfar","text":"Now let's compose the Budyko-Sellers model:","category":"page"},{"location":"bsh/budyko_sellers_halfar/","page":"Budyko-Sellers-Halfar","title":"Budyko-Sellers-Halfar","text":"budyko_sellers_composition_diagram = @relation () begin\n energy(Tₛ, ASR, OLR, HT)\n absorbed_radiation(Q, ASR)\n outgoing_radiation(Tₛ, OLR)\n diffusion(Tₛ, HT, cosϕᵖ)\n insolation(Q, cosϕᵖ)\nend\n\ndraw_composition(budyko_sellers_composition_diagram)","category":"page"},{"location":"bsh/budyko_sellers_halfar/","page":"Budyko-Sellers-Halfar","title":"Budyko-Sellers-Halfar","text":"budyko_sellers_cospan = oapply(budyko_sellers_composition_diagram,\n [Open(energy_balance, [:Tₛ, :ASR, :OLR, :HT]),\n Open(absorbed_shortwave_radiation, [:Q, :ASR]),\n Open(outgoing_longwave_radiation, [:Tₛ, :OLR]),\n Open(heat_transfer, [:Tₛ, :HT, :cosϕᵖ]),\n Open(insolation, [:Q, :cosϕᵖ])])\n\nbudyko_sellers = apex(budyko_sellers_cospan)\n\n# Save this Decapode as a JSON file\nwrite_json_acset(budyko_sellers, \"budyko_sellers.json\") \n\nto_graphviz(budyko_sellers, verbose=false)","category":"page"},{"location":"bsh/budyko_sellers_halfar/#Warming","page":"Budyko-Sellers-Halfar","title":"Warming","text":"","category":"section"},{"location":"bsh/budyko_sellers_halfar/","page":"Budyko-Sellers-Halfar","title":"Budyko-Sellers-Halfar","text":"We need to specify physically what it means for these two terms to interact. We will say that ice will diffuse faster as temperature increases, and will pick some coefficients that demonstrate interesting dynamics on short timescales.","category":"page"},{"location":"bsh/budyko_sellers_halfar/","page":"Budyko-Sellers-Halfar","title":"Budyko-Sellers-Halfar","text":"warming = @decapode begin\n Tₛ::Form0\n A::Form1\n\n A == avg₀₁(5.8282*10^(-0.236 * Tₛ)*1.65e7)\n\nend\n\nto_graphviz(warming)","category":"page"},{"location":"bsh/budyko_sellers_halfar/#Composition","page":"Budyko-Sellers-Halfar","title":"Composition","text":"","category":"section"},{"location":"bsh/budyko_sellers_halfar/","page":"Budyko-Sellers-Halfar","title":"Budyko-Sellers-Halfar","text":"Observe that Decapodes composition is hierarchical. This composition technique is the same as that used in composing each of the Budyko-Sellers and Halfar models.","category":"page"},{"location":"bsh/budyko_sellers_halfar/","page":"Budyko-Sellers-Halfar","title":"Budyko-Sellers-Halfar","text":"budyko_sellers_halfar_composition_diagram = @relation () begin\n budyko_sellers(Tₛ)\n warming(A, Tₛ)\n halfar(A)\nend\n\ndraw_composition(budyko_sellers_halfar_composition_diagram)","category":"page"},{"location":"bsh/budyko_sellers_halfar/","page":"Budyko-Sellers-Halfar","title":"Budyko-Sellers-Halfar","text":"We apply a composition by plugging in a Decapode for each component. We also specify the internal name of the variables to be used in combining.","category":"page"},{"location":"bsh/budyko_sellers_halfar/","page":"Budyko-Sellers-Halfar","title":"Budyko-Sellers-Halfar","text":"budyko_sellers_halfar_cospan = oapply(budyko_sellers_halfar_composition_diagram,\n [Open(budyko_sellers, [:Tₛ]),\n Open(warming, [:A, :Tₛ]),\n Open(halfar, [:stress_A])])\nbudyko_sellers_halfar = apex(budyko_sellers_halfar_cospan)\n\nto_graphviz(budyko_sellers_halfar)","category":"page"},{"location":"bsh/budyko_sellers_halfar/","page":"Budyko-Sellers-Halfar","title":"Budyko-Sellers-Halfar","text":"We can perform type inference to determine what kind of differential form each of our variables are. This is done automatically with the dimension=1 keyword given to gensim, but we will do it in-place for demonstration purposes.","category":"page"},{"location":"bsh/budyko_sellers_halfar/","page":"Budyko-Sellers-Halfar","title":"Budyko-Sellers-Halfar","text":"budyko_sellers_halfar = expand_operators(budyko_sellers_halfar)\ninfer_types!(budyko_sellers_halfar, op1_inf_rules_1D, op2_inf_rules_1D)\nresolve_overloads!(budyko_sellers_halfar, op1_res_rules_1D, op2_res_rules_1D)\nto_graphviz(budyko_sellers_halfar)","category":"page"},{"location":"bsh/budyko_sellers_halfar/#Defining-the-mesh","page":"Budyko-Sellers-Halfar","title":"Defining the mesh","text":"","category":"section"},{"location":"bsh/budyko_sellers_halfar/","page":"Budyko-Sellers-Halfar","title":"Budyko-Sellers-Halfar","text":"These dynamics will occur on a 1-D manifold (a line). Points near +-π/2 will represent points near the North/ South poles. Points near 0 represent those at the equator.","category":"page"},{"location":"bsh/budyko_sellers_halfar/","page":"Budyko-Sellers-Halfar","title":"Budyko-Sellers-Halfar","text":"s = EmbeddedDeltaSet1D{Bool, Point2D}()\nadd_vertices!(s, 100, point=Point2D.(range(-π/2 + π/32, π/2 - π/32, length=100), 0))\nadd_edges!(s, 1:nv(s)-1, 2:nv(s))\norient!(s)\nsd = EmbeddedDeltaDualComplex1D{Bool, Float64, Point2D}(s)\nsubdivide_duals!(sd, Circumcenter())","category":"page"},{"location":"bsh/budyko_sellers_halfar/#Define-input-data","page":"Budyko-Sellers-Halfar","title":"Define input data","text":"","category":"section"},{"location":"bsh/budyko_sellers_halfar/","page":"Budyko-Sellers-Halfar","title":"Budyko-Sellers-Halfar","text":"We need to supply initial conditions to our model. We will use synthetic data here.","category":"page"},{"location":"bsh/budyko_sellers_halfar/","page":"Budyko-Sellers-Halfar","title":"Budyko-Sellers-Halfar","text":"# This is a primal 0-form, with values at vertices.\ncosϕᵖ = map(x -> cos(x[1]), point(s))\n\n# This is a dual 0-form, with values at edge centers.\ncosϕᵈ = map(edges(s)) do e\n (cos(point(s, src(s, e))[1]) + cos(point(s, tgt(s, e))[1])) / 2\nend\n\nα₀ = 0.354\nα₂ = 0.25\nα = map(point(s)) do ϕ\n α₀ + α₂*((1/2)*(3*ϕ[1]^2 - 1))\nend\nA = 210\nB = 2\nf = 0.70\nρ = 1025\ncw = 4186\nH = 70\nC = map(point(s)) do ϕ\n f * ρ * cw * H\nend\nD = 0.6\n\n# Isothermal initial conditions:\nTₛ₀ = map(point(s)) do ϕ\n 15\nend\n\n# Visualize initial condition for temperature.\nlines(map(x -> x[1], point(s)), Tₛ₀)","category":"page"},{"location":"bsh/budyko_sellers_halfar/","page":"Budyko-Sellers-Halfar","title":"Budyko-Sellers-Halfar","text":"n = 3\nρ = 910\ng = 9.8\n\n# Ice height is a primal 0-form, with values at vertices.\nh₀ = map(point(s)) do (x,_)\n (((x)^2)+2.5) / 1e3\nend\n\n# Visualize initial condition for ice sheet height.\nlines(map(x -> x[1], point(s)), h₀)","category":"page"},{"location":"bsh/budyko_sellers_halfar/","page":"Budyko-Sellers-Halfar","title":"Budyko-Sellers-Halfar","text":"# Store these values to be passed to the solver.\nu₀ = ComponentArray(Tₛ=Tₛ₀, halfar_dynamics_h=h₀)\n\nconstants_and_parameters = (\n budyko_sellers_absorbed_radiation_α = α,\n budyko_sellers_outgoing_radiation_A = A,\n budyko_sellers_outgoing_radiation_B = B,\n budyko_sellers_energy_C = C,\n budyko_sellers_diffusion_D = D,\n budyko_sellers_cosϕᵖ = cosϕᵖ,\n budyko_sellers_diffusion_cosϕᵈ = cosϕᵈ,\n halfar_n = n,\n halfar_stress_ρ = ρ,\n halfar_stress_g = g)","category":"page"},{"location":"bsh/budyko_sellers_halfar/#Symbols-to-functions","page":"Budyko-Sellers-Halfar","title":"Symbols to functions","text":"","category":"section"},{"location":"bsh/budyko_sellers_halfar/","page":"Budyko-Sellers-Halfar","title":"Budyko-Sellers-Halfar","text":"The symbols along edges in our Decapode must be mapped to executable functions. In the Discrete Exterior Calculus, all our operators are defined as relations between points, lines, and triangles on meshes known as simplicial sets. Thus, DEC operators are re-usable across any simplicial set.","category":"page"},{"location":"bsh/budyko_sellers_halfar/","page":"Budyko-Sellers-Halfar","title":"Budyko-Sellers-Halfar","text":"function generate(sd, my_symbol; hodge=GeometricHodge())\n op = @match my_symbol begin\n :♯ => x -> begin\n # This is an implementation of the \"sharp\" operator from the exterior\n # calculus, which takes co-vector fields to vector fields.\n # This could be up-streamed to the CombinatorialSpaces.jl library. (i.e.\n # this operation is not bespoke to this simulation.)\n e_vecs = map(edges(sd)) do e\n point(sd, sd[e, :∂v0]) - point(sd, sd[e, :∂v1])\n end\n neighbors = map(vertices(sd)) do v\n union(incident(sd, v, :∂v0), incident(sd, v, :∂v1))\n end\n n_vecs = map(neighbors) do es\n [e_vecs[e] for e in es]\n end\n map(neighbors, n_vecs) do es, nvs\n sum([nv*norm(nv)*x[e] for (e,nv) in zip(es,nvs)]) / sum(norm.(nvs))\n end\n end\n :mag => x -> norm.(x)\n x => error(\"Unmatched operator $my_symbol\")\n end\n return (args...) -> op(args...)\nend","category":"page"},{"location":"bsh/budyko_sellers_halfar/#Simulation-generation","page":"Budyko-Sellers-Halfar","title":"Simulation generation","text":"","category":"section"},{"location":"bsh/budyko_sellers_halfar/","page":"Budyko-Sellers-Halfar","title":"Budyko-Sellers-Halfar","text":"From our Decapode, we automatically generate a finite difference method solver that performs explicit time-stepping to solve our system of multiphysics equations.","category":"page"},{"location":"bsh/budyko_sellers_halfar/","page":"Budyko-Sellers-Halfar","title":"Budyko-Sellers-Halfar","text":"sim = eval(gensim(budyko_sellers_halfar, dimension=1))\nfₘ = sim(sd, generate)","category":"page"},{"location":"bsh/budyko_sellers_halfar/#Run-simulation","page":"Budyko-Sellers-Halfar","title":"Run simulation","text":"","category":"section"},{"location":"bsh/budyko_sellers_halfar/","page":"Budyko-Sellers-Halfar","title":"Budyko-Sellers-Halfar","text":"We wrap our simulator and initial conditions and solve them with the stability-detection and time-stepping methods provided by DifferentialEquations.jl .","category":"page"},{"location":"bsh/budyko_sellers_halfar/","page":"Budyko-Sellers-Halfar","title":"Budyko-Sellers-Halfar","text":"tₑ = 1e6\n\n@info(\"Solving\")\nprob = ODEProblem(fₘ, u₀, (0, tₑ), constants_and_parameters)\nsoln = solve(prob, Tsit5())\n@show soln.retcode\n@info(\"Done\")","category":"page"},{"location":"bsh/budyko_sellers_halfar/","page":"Budyko-Sellers-Halfar","title":"Budyko-Sellers-Halfar","text":"We can save the solution file to examine later.","category":"page"},{"location":"bsh/budyko_sellers_halfar/","page":"Budyko-Sellers-Halfar","title":"Budyko-Sellers-Halfar","text":"@save \"budyko_sellers_halfar.jld2\" soln","category":"page"},{"location":"bsh/budyko_sellers_halfar/#Visualize","page":"Budyko-Sellers-Halfar","title":"Visualize","text":"","category":"section"},{"location":"bsh/budyko_sellers_halfar/","page":"Budyko-Sellers-Halfar","title":"Budyko-Sellers-Halfar","text":"Quickly examine the final conditions for temperature:","category":"page"},{"location":"bsh/budyko_sellers_halfar/","page":"Budyko-Sellers-Halfar","title":"Budyko-Sellers-Halfar","text":"lines(map(x -> x[1], point(s)), soln(tₑ).Tₛ)","category":"page"},{"location":"bsh/budyko_sellers_halfar/","page":"Budyko-Sellers-Halfar","title":"Budyko-Sellers-Halfar","text":"Quickly examine the final conditions for ice height:","category":"page"},{"location":"bsh/budyko_sellers_halfar/","page":"Budyko-Sellers-Halfar","title":"Budyko-Sellers-Halfar","text":"lines(map(x -> x[1], point(s)), soln(tₑ).halfar_dynamics_h)","category":"page"},{"location":"bsh/budyko_sellers_halfar/","page":"Budyko-Sellers-Halfar","title":"Budyko-Sellers-Halfar","text":"begin\n# Initial frame\nframes = 100\nfig = Figure()\nax1 = CairoMakie.Axis(fig[1,1])\nxlims!(ax1, extrema(map(x -> x[1], point(s))))\nylims!(ax1, extrema(soln(tₑ).Tₛ))\nax1.xlabel = \"Line plot of temperature from North to South pole, every $(tₑ/frames) time units\"\nLabel(fig[1,1,Top()], \"Surface temperature, Tₛ, [C°]\")\n\n# Animation\nrecord(fig, \"budyko_sellers_halfar_T.gif\", range(0.0, tₑ; length=frames); framerate = 15) do t\n lines!(fig[1,1], map(x -> x[1], point(s)), soln(t).Tₛ)\nend\nend\n\nbegin\n# Initial frame\nframes = 100\nfig = Figure()\nax1 = CairoMakie.Axis(fig[1,1])\nxlims!(ax1, extrema(map(x -> x[1], point(s))))\nylims!(ax1, extrema(soln(tₑ).halfar_dynamics_h))\nax1.xlabel = \"Line plot of temperature from North to South pole, every $(tₑ/frames) time units\"\nLabel(fig[1,1,Top()], \"Ice height, h\")\n\n# Animation\nrecord(fig, \"budyko_sellers_halfar_h.gif\", range(0.0, tₑ; length=frames); framerate = 15) do t\n lines!(fig[1,1], map(x -> x[1], point(s)), soln(t).halfar_dynamics_h)\nend\nend","category":"page"},{"location":"bsh/budyko_sellers_halfar/","page":"Budyko-Sellers-Halfar","title":"Budyko-Sellers-Halfar","text":"(Image: BSH_Temperature)","category":"page"},{"location":"bsh/budyko_sellers_halfar/","page":"Budyko-Sellers-Halfar","title":"Budyko-Sellers-Halfar","text":"(Image: BSH_IceHeight)","category":"page"},{"location":"bsh/budyko_sellers_halfar/","page":"Budyko-Sellers-Halfar","title":"Budyko-Sellers-Halfar","text":"DocInfo.get_report(info) # hide","category":"page"},{"location":"klausmeier/klausmeier/#Klausmeier","page":"Klausmeier","title":"Klausmeier","text":"","category":"section"},{"location":"klausmeier/klausmeier/","page":"Klausmeier","title":"Klausmeier","text":"include(joinpath(Base.@__DIR__, \"..\" , \"..\", \"docinfo.jl\"))\ninfo = DocInfo.Info()","category":"page"},{"location":"klausmeier/klausmeier/","page":"Klausmeier","title":"Klausmeier","text":"(Image: Somaliland Vegetation)","category":"page"},{"location":"klausmeier/klausmeier/","page":"Klausmeier","title":"Klausmeier","text":"
    \n
    One of the first aerial photographs of British Somaliland (now Somaliland) investigated by W.A. Macfadyen in his 1950 \"Vegetation Patterns in the Semi-Desert Plains of British Somaliland\" [1]. From this point of view, Macfadyen's \"vegetation arcs\" are plainly visible.
    \n
    ","category":"page"},{"location":"klausmeier/klausmeier/#Background","page":"Klausmeier","title":"Background","text":"","category":"section"},{"location":"klausmeier/klausmeier/","page":"Klausmeier","title":"Klausmeier","text":"From aerial photographs in the late 1940s, British ecologist W.A. Macfadyen discovered that vegetation in semi-arid environments often grows in striping patterns, but was unaware of the exact mechanism that causes them. What is especially striking about these \"vegetation arcs\" is that these stripes appear to climb uphill, with denser plant growth at the leading edge of these traveling waves. Much like how the Mandelbrot set and other interesting fractal patterns can arise from simple sets of rules, these vegetation dynamics can be explained by simple sets of partial differential equations.","category":"page"},{"location":"klausmeier/klausmeier/","page":"Klausmeier","title":"Klausmeier","text":"The Klausmeier model, given by Christopher Klausmeier in his 1999 paper Regular and Irregular Patterns in Semiarid Vegetation[2], models such dynamics. Although Macfadyen had discovered these vegetation patterns 50s years prior[1,3], defining these dynamics through accessible and physically-meaningful PDEs proved a catalyst for further research. At the time of writing, Klausmeier's paper has been cited 594 times.","category":"page"},{"location":"klausmeier/klausmeier/","page":"Klausmeier","title":"Klausmeier","text":"In this document, we will use Decapodes to formally represent these equations. Moreover, we will demonstrate how one can automatically generate simulation that reproduces the dynamics given by a scientist, simply by reading in the equations given in their original publication.","category":"page"},{"location":"klausmeier/klausmeier/","page":"Klausmeier","title":"Klausmeier","text":"The lofty goal of this document, and of Decapodes itself, is that through both explicitly representing a model - such as Klausmeier's - and handling the generation of simulation code, we can amplify its accessibility and composability, and ultimately spur further research. Lets start by using Decapodes.","category":"page"},{"location":"klausmeier/klausmeier/","page":"Klausmeier","title":"Klausmeier","text":"(Image: Klausmeier GIF)","category":"page"},{"location":"klausmeier/klausmeier/#using-Decapodes","page":"Klausmeier","title":"using Decapodes","text":"","category":"section"},{"location":"klausmeier/klausmeier/","page":"Klausmeier","title":"Klausmeier","text":"# Load Dependencies\nusing CairoMakie\nusing Catlab\nusing CombinatorialSpaces\nusing ComponentArrays\nusing Decapodes\nusing DiagrammaticEquations\nusing DiagrammaticEquations.Deca\nusing Distributions\nusing GeometryBasics: Point2\nusing JLD2\nusing LinearAlgebra\nusing MLStyle\nusing OrdinaryDiffEq\nPoint2D = Point2{Float64}\nnothing # hide","category":"page"},{"location":"klausmeier/klausmeier/#Model-Representation","page":"Klausmeier","title":"Model Representation","text":"","category":"section"},{"location":"klausmeier/klausmeier/","page":"Klausmeier","title":"Klausmeier","text":"The Klausmeier model consists of two parts: one governing plant growth (phytodynamics), and one governing hydrodynamics. The differential operator Δ represents the diffusion of vegetation, and the \"Lie derivative\" operator ℒ represents the change of water in a direction. In this case, the flow of water downhill, \"dX\".","category":"page"},{"location":"klausmeier/klausmeier/","page":"Klausmeier","title":"Klausmeier","text":"Decapodes are written in the language of the Exterior Calculus, which generalizes Vector Calculus. For us, that means that we get to specify whether a physical quantity should valued at points in our domain (i.e. primal and dual Form0s), or whether they are more vector-like quantities, that should be valued along edges in our domain (i.e. primal and dual Form1s). In this case, water density w and vegetation density n are both Form0s, while dX, the gradient of our hill, is a Form1.","category":"page"},{"location":"klausmeier/klausmeier/","page":"Klausmeier","title":"Klausmeier","text":"# See Klausmeier Equation 2.a\nHydrodynamics = @decapode begin\n (n,w)::DualForm0\n dX::Form1\n (a,ν)::Constant\n\n ∂ₜ(w) == a - w - w * n^2 + ν * L(dX, w)\nend\n\n# See Klausmeier Equation 2.b\nPhytodynamics = @decapode begin\n (n,w)::DualForm0\n m::Constant\n\n ∂ₜ(n) == w * n^2 - m*n + Δ(n)\nend\nnothing # hide","category":"page"},{"location":"klausmeier/klausmeier/","page":"Klausmeier","title":"Klausmeier","text":"Now that we have our two component models, we can specify a means of composing them via a composition pattern.","category":"page"},{"location":"klausmeier/klausmeier/","page":"Klausmeier","title":"Klausmeier","text":"# Specify Composition\ncompose_klausmeier = @relation () begin\n phyto(N, W)\n hydro(N, W)\nend\n\ndraw_composition(compose_klausmeier)","category":"page"},{"location":"klausmeier/klausmeier/","page":"Klausmeier","title":"Klausmeier","text":"We apply our composition pattern by plugging in component Decapodes, and specifying which internal quantities to share along edges. Decapodes are formalized via the field of Applied Category Theory. A practical consequence here is that we can view a Decapode as a sort of computation graph.","category":"page"},{"location":"klausmeier/klausmeier/","page":"Klausmeier","title":"Klausmeier","text":"# Apply Composition\nklausmeier_cospan = oapply(compose_klausmeier,\n [Open(Phytodynamics, [:n, :w]),\n Open(Hydrodynamics, [:n, :w])])\nKlausmeier = apex(klausmeier_cospan)\nto_graphviz(Klausmeier)","category":"page"},{"location":"klausmeier/klausmeier/","page":"Klausmeier","title":"Klausmeier","text":"With our model now explicitly represented, we have everything we need to automatically generate simulation code. We could write this to an intermediate file and use it later, or we can go ahead and evaluate the code in this session.","category":"page"},{"location":"klausmeier/klausmeier/","page":"Klausmeier","title":"Klausmeier","text":"sim = eval(gensim(Klausmeier, dimension=1))","category":"page"},{"location":"klausmeier/klausmeier/","page":"Klausmeier","title":"Klausmeier","text":"We now need a mesh to define our domain. In the 2D case, our CombinatorialSpaces library can read in arbitrary .OBJ files. In 1D, it is often simpler to just generate a mesh on the fly. Since we are running our physics on a circle - i.e periodic boundaries - we will use a simple function that generates it.","category":"page"},{"location":"klausmeier/klausmeier/","page":"Klausmeier","title":"Klausmeier","text":"We will visualize the mesh embedded in two dimensions here, but in later visualizations, we can represent it as a periodic line.","category":"page"},{"location":"klausmeier/klausmeier/","page":"Klausmeier","title":"Klausmeier","text":"# Define Mesh\nfunction circle(n, c)\n s = EmbeddedDeltaSet1D{Bool, Point2D}()\n map(range(0, 2pi - (pi/(2^(n-1))); step=pi/(2^(n-1)))) do t\n add_vertex!(s, point=Point2D(cos(t),sin(t))*(c/2pi))\n end\n add_edges!(s, 1:(nv(s)-1), 2:nv(s))\n add_edge!(s, nv(s), 1)\n sd = EmbeddedDeltaDualComplex1D{Bool, Float64, Point2D}(s)\n subdivide_duals!(sd, Circumcenter())\n s,sd\nend\ns,sd = circle(9, 500)\n\nscatter(sd[:point])","category":"page"},{"location":"klausmeier/klausmeier/","page":"Klausmeier","title":"Klausmeier","text":"We discretize our differential operators using the Discrete Exterior Calculus. The DEC is an elegant way of building up more complex differential operators from simpler ones. To demonstrate, we will define the Δ operator by building it up with matrix multiplication of simpler operators. Since most operators in the DEC are matrices, most simulations consist mainly of matrix-vector multiplications, and are thus very fast.","category":"page"},{"location":"klausmeier/klausmeier/","page":"Klausmeier","title":"Klausmeier","text":"If this code seems too low level, do not worry. Decapodes defines and caches for you many differential operators behind the scenes, so you do not have to worry about defining your own.","category":"page"},{"location":"klausmeier/klausmeier/","page":"Klausmeier","title":"Klausmeier","text":"lap_mat = dec_hodge_star(1,sd) * dec_differential(0,sd) * dec_inv_hodge_star(0,sd) * dec_dual_derivative(0,sd)\n\nfunction generate(sd, my_symbol; hodge=DiagonalHodge())\n op = @match my_symbol begin\n :Δ => x -> begin\n lap_mat * x\n end\n end\n return (args...) -> op(args...)\nend","category":"page"},{"location":"klausmeier/klausmeier/","page":"Klausmeier","title":"Klausmeier","text":"Let's pass our mesh and methods of generating operators to our simulation code.","category":"page"},{"location":"klausmeier/klausmeier/","page":"Klausmeier","title":"Klausmeier","text":"# Instantiate Simulation\nfₘ = sim(sd, generate, DiagonalHodge())","category":"page"},{"location":"klausmeier/klausmeier/","page":"Klausmeier","title":"Klausmeier","text":"With our simulation now ready, let's specify initial data to pass to it. We'll define them with plain Julia code.","category":"page"},{"location":"klausmeier/klausmeier/","page":"Klausmeier","title":"Klausmeier","text":"The most interesting parameter here is our \"downhill gradient\" dX. This parameter defines how steep our slope is. Since our mesh is a circle, and we are setting dX to a constant value, this means that \"downhill\" always points counter-clockwise. Essentially, this is an elegant way of encoding an infinite hill.","category":"page"},{"location":"klausmeier/klausmeier/","page":"Klausmeier","title":"Klausmeier","text":"# Define Initial Conditions\nn_dist = Normal(pi)\nn = [pdf(n_dist, t)*(√(2pi))*7.2 + 0.08 - 5e-2 for t in range(0,2pi; length=ne(sd))]\n\nw_dist = Normal(pi, 20)\nw = [pdf(w_dist, t) for t in range(0,2pi; length=ne(sd))]\n\ndX = sd[:length]\n\nu₀ = ComponentArray(N = n, W = w, hydro_dX = dX)\n\ncs_ps = (phyto_m = 0.45,\n hydro_a = 0.94,\n hydro_ν = 182.5)","category":"page"},{"location":"klausmeier/klausmeier/","page":"Klausmeier","title":"Klausmeier","text":"Let's execute our simulation.","category":"page"},{"location":"klausmeier/klausmeier/","page":"Klausmeier","title":"Klausmeier","text":"# Run Simulation\ntₑ = 300.0\nprob = ODEProblem(fₘ, u₀, (0.0, tₑ), cs_ps)\nsol = solve(prob, Tsit5(), saveat=0.1, save_idxs=[:N, :W])\nsol.retcode","category":"page"},{"location":"klausmeier/klausmeier/#Animation","page":"Klausmeier","title":"Animation","text":"","category":"section"},{"location":"klausmeier/klausmeier/","page":"Klausmeier","title":"Klausmeier","text":"Let's perform some basic visualization and analysis of our results to verify our dynamics.","category":"page"},{"location":"klausmeier/klausmeier/","page":"Klausmeier","title":"Klausmeier","text":"n = sol(0).N\nnₑ = sol(tₑ).N\nw = sol(0).W\nwₑ = sol(tₑ).W\nnothing # hide","category":"page"},{"location":"klausmeier/klausmeier/","page":"Klausmeier","title":"Klausmeier","text":"# Animate dynamics\nfunction save_dynamics(form_name, framerate, filename)\n time = Observable(0.0)\n ys = @lift(getproperty(sol($time), form_name))\n xcoords = [0, accumulate(+, sd[:length])[1:end-1]...]\n fig = lines(xcoords, ys, color=:green, linewidth=4.0,\n colorrange=extrema(getproperty(sol(0), form_name));\n axis = (; title = @lift(\"Klausmeier $(String(form_name)) at $($time)\")))\n timestamps = range(0, tₑ, step=1)\n record(fig, filename, timestamps; framerate=framerate) do t\n time[] = t\n end\nend\nsave_dynamics(:N, 20, \"klausmeier.gif\")","category":"page"},{"location":"klausmeier/klausmeier/","page":"Klausmeier","title":"Klausmeier","text":"(Image: Klausmeier)","category":"page"},{"location":"klausmeier/klausmeier/","page":"Klausmeier","title":"Klausmeier","text":"We can observe a few interesting phenomena that we wanted to capture:","category":"page"},{"location":"klausmeier/klausmeier/","page":"Klausmeier","title":"Klausmeier","text":"The vegetation density bands move uphill in traveling waves.\nThe leading edge of the waves is denser than the rest of the band.\nOver time, the periodicity of the vegetation bands stabilizes.\nThe distribution naturally emerges, despite the initial distribution is a simple normal distribution.\nThis is evidence against the real-world theory that these vegetation contours are the result of an initial (man-made) distribution.","category":"page"},{"location":"klausmeier/klausmeier/#Conclusion","page":"Klausmeier","title":"Conclusion","text":"","category":"section"},{"location":"klausmeier/klausmeier/","page":"Klausmeier","title":"Klausmeier","text":"Due to the ease of composition of Decapodes, representing the Klausmeier model opens up many areas for future work. For example, we can now compose these dynamics with a model of temperature dynamics informed by the Budyko-Sellers model. We can take advantage of the fact that the Lie derivative generalizes partial derivatives, and model the flow of water according to any vector field. Or, we can extend this model by composing it with a model that can recreate the so-called \"leopard pattern\" of vegetation, such as an \"Interaction-Dispersion\" model of vegetation dynamics given by Lejeune et al[4].","category":"page"},{"location":"klausmeier/klausmeier/#References","page":"Klausmeier","title":"References","text":"","category":"section"},{"location":"klausmeier/klausmeier/","page":"Klausmeier","title":"Klausmeier","text":"[1] W. A. Macfadyen, “Vegetation Patterns in the Semi-Desert Plains of British Somaliland,” The Geographical Journal, vol. 116, no. 4/6, p. 199, Oct. 1950, doi: 10.2307/1789384.","category":"page"},{"location":"klausmeier/klausmeier/","page":"Klausmeier","title":"Klausmeier","text":"[2] C. A. Klausmeier, “Regular and Irregular Patterns in Semiarid Vegetation,” Science, vol. 284, no. 5421, pp. 1826–1828, Jun. 1999, doi: 10.1126/science.284.5421.1826.","category":"page"},{"location":"klausmeier/klausmeier/","page":"Klausmeier","title":"Klausmeier","text":"[3] W. A. Macfadyen, “Soil and Vegetation in British Somaliland,” Nature, vol. 165, no. 4186, Art. no. 4186, Jan. 1950, doi: 10.1038/165121a0.","category":"page"},{"location":"klausmeier/klausmeier/","page":"Klausmeier","title":"Klausmeier","text":"[4] O. Lejeune and M. Tlidi, “A Model for the Explanation of Vegetation Stripes (Tiger Bush),” Journal of Vegetation Science, vol. 10, no. 2, pp. 201–208, 1999, doi: 10.2307/3237141.","category":"page"},{"location":"klausmeier/klausmeier/","page":"Klausmeier","title":"Klausmeier","text":"DocInfo.get_report(info) # hide","category":"page"},{"location":"grigoriev/grigoriev/#Halfar's-model-of-glacial-flow","page":"Grigoriev Ice Cap","title":"Halfar's model of glacial flow","text":"","category":"section"},{"location":"grigoriev/grigoriev/","page":"Grigoriev Ice Cap","title":"Grigoriev Ice Cap","text":"include(joinpath(Base.@__DIR__, \"..\" , \"..\", \"docinfo.jl\"))\ninfo = DocInfo.Info()","category":"page"},{"location":"grigoriev/grigoriev/","page":"Grigoriev Ice Cap","title":"Grigoriev Ice Cap","text":"Let's model glacial flow using a model of how ice height of a glacial sheet changes over time, from P. Halfar's 1981 paper: \"On the dynamics of the ice sheets\".","category":"page"},{"location":"grigoriev/grigoriev/","page":"Grigoriev Ice Cap","title":"Grigoriev Ice Cap","text":"Let's run the Halfar shallow ice / shallow slope model on some \"real world\" data for ice thickness. Van Tricht et al. in their 2023 communication Measuring and modelling the ice thickness of the Grigoriev ice cap (Kyrgyzstan) and comparison with global dataset published ice thickness data on an ice cap and stored their data in a TIF. In this document, we will demonstrate how to parse such data and execute a Decapodes model on these initial conditions.","category":"page"},{"location":"grigoriev/grigoriev/","page":"Grigoriev Ice Cap","title":"Grigoriev Ice Cap","text":"For the parameters to Glen's law, we will use those used in the Community Ice Sheet Model benchmark. Of course, the parameters of this Kyrgyzstani ice cap likely differ from these by quite some amount, but they are a good place to start. Further, this ice cap does not satisfy the \"shallow slope\" assumption across the entire domain.","category":"page"},{"location":"grigoriev/grigoriev/","page":"Grigoriev Ice Cap","title":"Grigoriev Ice Cap","text":"# AlgebraicJulia Dependencies\nusing Catlab\nusing CombinatorialSpaces\nusing DiagrammaticEquations\nusing Decapodes\n\n# External Dependencies\nusing CairoMakie\nusing ComponentArrays\nusing FileIO \nusing GeometryBasics: Point2\nusing Interpolations\nusing JLD2\nusing LinearAlgebra\nusing MLStyle\nusing OrdinaryDiffEq\nusing SparseArrays\nPoint2D = Point2{Float64}\nPoint3D = Point3{Float64};\nnothing # hide","category":"page"},{"location":"grigoriev/grigoriev/#Loading-a-Scientific-Dataset","page":"Grigoriev Ice Cap","title":"Loading a Scientific Dataset","text":"","category":"section"},{"location":"grigoriev/grigoriev/","page":"Grigoriev Ice Cap","title":"Grigoriev Ice Cap","text":"The ice thickness data is stored in a TIF that can be downloaded here. We have downloaded it locally, and load it using basic FileIO.","category":"page"},{"location":"grigoriev/grigoriev/","page":"Grigoriev Ice Cap","title":"Grigoriev Ice Cap","text":"file_name = \"Icethickness_Grigoriev_ice_cap_2021.tif\"\nice_thickness_tif = load(file_name)","category":"page"},{"location":"grigoriev/grigoriev/","page":"Grigoriev Ice Cap","title":"Grigoriev Ice Cap","text":"This data may visually appear to be a binary mask but that is only because values with no ice are set to -Inf. We will account for this when interpolate our data.","category":"page"},{"location":"grigoriev/grigoriev/","page":"Grigoriev Ice Cap","title":"Grigoriev Ice Cap","text":"We use the Interpolations.jl library to interpolate this dataset:","category":"page"},{"location":"grigoriev/grigoriev/","page":"Grigoriev Ice Cap","title":"Grigoriev Ice Cap","text":"# Taking the coordinates to be from the extrema of the measured points:\nconst MIN_X = 4648894.5\nconst MAX_X = 4652179.7\nconst MIN_Y = 243504.5\nconst MAX_Y = 245599.8\nice_coords = (range(MIN_X, MAX_X, length=size(ice_thickness_tif,1)),\n range(MIN_Y, MAX_Y, length=size(ice_thickness_tif,2)))\n\n# Note that the TIF is set to -floatmax(Float32) where there is no ice.\n# For our purposes, this is equivalent to 0.0.\nice_interp = LinearInterpolation(ice_coords, Float32.(ice_thickness_tif))","category":"page"},{"location":"grigoriev/grigoriev/","page":"Grigoriev Ice Cap","title":"Grigoriev Ice Cap","text":"To use this interpolating object ice_interp, we can simply query it for the value at some coordinates: ice_interp(x,y).","category":"page"},{"location":"grigoriev/grigoriev/","page":"Grigoriev Ice Cap","title":"Grigoriev Ice Cap","text":"Let's generate a triangulated grid located at the appropriate coordinates:","category":"page"},{"location":"grigoriev/grigoriev/","page":"Grigoriev Ice Cap","title":"Grigoriev Ice Cap","text":"# Specify a resolution:\nRES_Y = (MAX_Y-MIN_Y)/30.0\nRES_X = RES_Y\n\n# Generate the mesh with appropriate dimensions and resolution:\ns = triangulated_grid(MAX_X-MIN_X, MAX_Y-MIN_Y, RES_X, RES_Y, Point3D)\n\n# Shift it into place:\ns[:point] = map(x -> x + Point3D(MIN_X, MIN_Y, 0), s[:point])\nsd = EmbeddedDeltaDualComplex2D{Bool, Float64, Point3D}(s)\nsubdivide_duals!(sd, Barycenter())\n\nfig = Figure()\nax = CairoMakie.Axis(fig[1,1])\nwf = wireframe!(ax, s)\nsave(\"Grigoriev_IceMesh.png\", fig)\nnothing # hide","category":"page"},{"location":"grigoriev/grigoriev/","page":"Grigoriev Ice Cap","title":"Grigoriev Ice Cap","text":"(Image: \"Grigoriev_IceMesh\")","category":"page"},{"location":"grigoriev/grigoriev/","page":"Grigoriev Ice Cap","title":"Grigoriev Ice Cap","text":"The coordinates of a vertex are stored in sd[:point]. Let's use our interpolator to assign ice thickness values to each vertex in the mesh:","category":"page"},{"location":"grigoriev/grigoriev/","page":"Grigoriev Ice Cap","title":"Grigoriev Ice Cap","text":"# These are the values used by the CISM benchmark:\nn = 3\nρ = 910\ng = 9.8101\nA = fill(1e-16, ne(sd))\n\nh₀ = map(sd[:point]) do (x,y,_)\n tif_val = ice_interp(x,y)\n # Accommodate for the -∞'s that encode \"no ice\".\n tif_val < 0.0 ? 0.0 : tif_val\nend\n\n# Store these values to be passed to the solver.\nu₀ = ComponentArray(h=h₀, stress_A=A)\nconstants_and_parameters = (n = n, \n stress_ρ = ρ,\n stress_g = g, \n stress_A = A)\nnothing # hide","category":"page"},{"location":"grigoriev/grigoriev/#Defining-and-Composing-Models","page":"Grigoriev Ice Cap","title":"Defining and Composing Models","text":"","category":"section"},{"location":"grigoriev/grigoriev/","page":"Grigoriev Ice Cap","title":"Grigoriev Ice Cap","text":"For exposition on this Halfar Decapode, see our Glacial Flow docs page. Otherwise, you may skip ahead to the next section.","category":"page"},{"location":"grigoriev/grigoriev/","page":"Grigoriev Ice Cap","title":"Grigoriev Ice Cap","text":"halfar_eq2 = @decapode begin\n h::Form0\n Γ::Form1\n n::Constant\n\n ḣ == ∂ₜ(h)\n ḣ == ∘(⋆, d, ⋆)(Γ * d(h) * avg₀₁(mag(♯(d(h)))^(n-1)) * avg₀₁(h^(n+2)))\nend\n\nglens_law = @decapode begin\n Γ::Form1\n (A,ρ,g,n)::Constant\n \n Γ == (2/(n+2))*A*(ρ*g)^n\nend\n\nice_dynamics_composition_diagram = @relation () begin\n dynamics(h,Γ,n)\n stress(Γ,n)\nend\n\nice_dynamics_cospan = oapply(ice_dynamics_composition_diagram,\n [Open(halfar_eq2, [:h,:Γ,:n]),\n Open(glens_law, [:Γ,:n])])\n\nice_dynamics = apex(ice_dynamics_cospan)\nto_graphviz(ice_dynamics)","category":"page"},{"location":"grigoriev/grigoriev/#Define-our-functions","page":"Grigoriev Ice Cap","title":"Define our functions","text":"","category":"section"},{"location":"grigoriev/grigoriev/","page":"Grigoriev Ice Cap","title":"Grigoriev Ice Cap","text":"function generate(sd, my_symbol; hodge=GeometricHodge())\n op = @match my_symbol begin\n :mag => x -> norm.(x)\n :♯ => begin\n sharp_mat = ♯_mat(sd, AltPPSharp())\n x -> sharp_mat * x\n end\n x => error(\"Unmatched operator $my_symbol\")\n end\n return op\nend","category":"page"},{"location":"grigoriev/grigoriev/#Generate-simulation","page":"Grigoriev Ice Cap","title":"Generate simulation","text":"","category":"section"},{"location":"grigoriev/grigoriev/","page":"Grigoriev Ice Cap","title":"Grigoriev Ice Cap","text":"sim = eval(gensim(ice_dynamics, dimension=2))\nfₘ = sim(sd, generate)","category":"page"},{"location":"grigoriev/grigoriev/#Run","page":"Grigoriev Ice Cap","title":"Run","text":"","category":"section"},{"location":"grigoriev/grigoriev/","page":"Grigoriev Ice Cap","title":"Grigoriev Ice Cap","text":"tₑ = 10\n\n@info(\"Solving Grigoriev Ice Cap\")\nprob = ODEProblem(fₘ, u₀, (0, tₑ), constants_and_parameters)\nsoln = solve(prob, Tsit5())\n@show soln.retcode\n@info(\"Done\")\n\n@save \"grigoriev.jld2\" soln","category":"page"},{"location":"grigoriev/grigoriev/#Results-and-Discussion","page":"Grigoriev Ice Cap","title":"Results and Discussion","text":"","category":"section"},{"location":"grigoriev/grigoriev/","page":"Grigoriev Ice Cap","title":"Grigoriev Ice Cap","text":"# Visualize the initial conditions.\nfunction plot_ic()\n f = Figure()\n ax = CairoMakie.Axis(f[1,1],\n title=\"Grigoriev Ice Cap Initial Thickness [m]\",\n xticks = range(MIN_X, MAX_X; length=5),\n yticks = range(MIN_Y, MAX_Y; length=5))\n msh = mesh!(ax, s, color=soln(0.0).h, colormap=:jet)\n Colorbar(f[1,2], msh)\n f\nend\nf = plot_ic()\nsave(\"grigoriev_ic.png\", f)\n\n# Visualize the final conditions.\nfunction plot_fc()\n f = Figure()\n ax = CairoMakie.Axis(f[1,1],\n title=\"Grigoriev Ice Cap Final Thickness [m]\",\n xticks = range(MIN_X, MAX_X; length=5),\n yticks = range(MIN_Y, MAX_Y; length=5))\n msh = mesh!(ax, s, color=soln(tₑ).h, colormap=:jet)\n Colorbar(f[1,2], msh)\n f\nend\nf = plot_fc()\nsave(\"grigoriev_fc.png\", f)\n\n# Create a gif\nfunction save_dynamics(save_file_name)\n time = Observable(0.0)\n h = @lift(soln($time).h)\n f = Figure()\n ax = CairoMakie.Axis(f[1,1], title = @lift(\"Grigoriev Ice Cap Dynamic Thickness [m] at time $($time)\"))\n gmsh = mesh!(ax, s, color=h, colormap=:jet,\n colorrange=extrema(soln(tₑ).h))\n #Colorbar(f[1,2], gmsh, limits=extrema(soln(tₑ).h))\n Colorbar(f[1,2], gmsh)\n timestamps = range(0, tₑ, step=1e-1)\n record(f, save_file_name, timestamps; framerate = 15) do t\n time[] = t\n end\nend\nsave_dynamics(\"grigoriev.gif\")","category":"page"},{"location":"grigoriev/grigoriev/","page":"Grigoriev Ice Cap","title":"Grigoriev Ice Cap","text":"We observe the usual Halfar model phenomena of ice \"melting\". Note that since the \"shallow slope\" approximation does not hold on the boundaries (due to the so-called \"ice cliffs\" described in the Van Tricht et al. paper), we do not expect the \"creep\" effect to be physical in this region of the domain. Rather, the Halfar model's predictive power is tuned for the interiors of ice caps and glaciers. Note that we also assume here that the bedrock that the ice rests on is flat. We may in further documents demonstrate how to use topographic data from Digital Elevation Models to inform the elevation of points in the mesh itself.","category":"page"},{"location":"grigoriev/grigoriev/","page":"Grigoriev Ice Cap","title":"Grigoriev Ice Cap","text":"(Image: Grigoriev_ICs)","category":"page"},{"location":"grigoriev/grigoriev/","page":"Grigoriev Ice Cap","title":"Grigoriev Ice Cap","text":"(Image: Grigoriev_FCs)","category":"page"},{"location":"grigoriev/grigoriev/","page":"Grigoriev Ice Cap","title":"Grigoriev Ice Cap","text":"(Image: Grigoriev_Dynamics)","category":"page"},{"location":"grigoriev/grigoriev/","page":"Grigoriev Ice Cap","title":"Grigoriev Ice Cap","text":"DocInfo.get_report(info) # hide","category":"page"},{"location":"overview/overview/#Introduction-to-Decapodes","page":"Overview","title":"Introduction to Decapodes","text":"","category":"section"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"include(joinpath(Base.@__DIR__, \"..\", \"..\", \"docinfo.jl\"))\ninfo = DocInfo.Info()","category":"page"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"Discrete Exterior Calculus Applied to Partial and Ordinary Differential Equations (Decapodes) is a diagrammatic language used to express systems of ordinary and partial differential equations. Decapodes provides a visual framework for understanding the coupling between variables within a PDE or ODE system, and a combinatorial data structure for working with them. Below, we provide a high-level overview of how Decapodes can be generated and interpreted.","category":"page"},{"location":"overview/overview/#Your-First-Decapode","page":"Overview","title":"Your First Decapode","text":"","category":"section"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"In the Decapodes graphical paradigm, nodes represent variables and arrows represent operators which relate variables to each other. Since Decapodes applies this diagrammatic language specifically to the Discrete Exterior Calculus (DEC), variables are typed by the dimension and orientation of the information they contain. So a variable of type Form0 will be the 0-dimensional data points defined the vertices of a mesh. Similarly, Form1 will be values stored on edges of the mesh and Form2 will be values stored on the surfaces of the mesh.","category":"page"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"Below, we provide a Decapode with just a single variable C and display it.","category":"page"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"using Catlab\nusing Decapodes\nusing DiagrammaticEquations\n\nVariable = @decapode begin\n C::Form0\nend;\n\nto_graphviz(Variable)","category":"page"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"The resulting diagram contains a single node, showing the single variable in this system. We can add a second variable:","category":"page"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"TwoVariables = @decapode begin\n C::Form0\n dC::Form1\nend;\n\nto_graphviz(TwoVariables)","category":"page"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"We can also add a relationship between them. In this case, we make an equation which states that dC is the derivative of C:","category":"page"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"Equation = @decapode begin\n C::Form0\n dC::Form1\n\n dC == d(C)\nend;\n\nto_graphviz(Equation)","category":"page"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"Here, the two nodes represent the two variables, and the arrow between them shows how they are related by the derivative.","category":"page"},{"location":"overview/overview/#A-Little-More-Complicated","page":"Overview","title":"A Little More Complicated","text":"","category":"section"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"Now that we've seen how to construct a simple equation, it's time to move on to some actual PDE systems! One classic PDE example is the diffusion equation. This equation states that the change of concentration at each point is proportional to the Laplacian of the concentration.","category":"page"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"Diffusion = @decapode begin\n (C, Ċ)::Form0\n ϕ::Form1\n\n # Fick's first law\n ϕ == k(d₀(C))\n\n # Diffusion equation\n Ċ == ⋆₀⁻¹(dual_d₁(⋆₁(ϕ)))\n ∂ₜ(C) == Ċ\n\nend;\n\nto_graphviz(Diffusion)","category":"page"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"The resulting Decapode shows the relationships between the three variables with the triangle diagram. Note that these diagrams are automatically layed-out by Graphviz.","category":"page"},{"location":"overview/overview/#Bring-in-the-Dynamics","page":"Overview","title":"Bring in the Dynamics","text":"","category":"section"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"Now that we have a reasonably complex PDE, we can demonstrate some of the developed tooling for actually solving the PDE. Currently, the tooling will automatically generate an explicit method for solving the system (using DifferentialEquations.jl to handle time-stepping and instability detection).","category":"page"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"Torus_30x10 is a default mesh that is downloaded via Artifacts.jl when a user installs CombinatorialSpaces.jl. If we wanted, we could also instantiate any .obj file of triangulated faces as a simplicial set although we do not here.","category":"page"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"We will also upload a non-periodic mesh for the sake of visualization, as well as a mapping between the points on the periodic and non-periodic meshes.","category":"page"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"using CairoMakie\nusing CombinatorialSpaces\n\nplot_mesh = loadmesh(Rectangle_30x10())\nperiodic_mesh = loadmesh(Torus_30x10())\npoint_map = loadmesh(Point_Map())\n\nfig = Figure()\nax = CairoMakie.Axis(fig[1,1], aspect = AxisAspect(3.0))\nwireframe!(ax, plot_mesh)\nfig","category":"page"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"Now we create a function which links the names of functions used in the Decapode to their implementations. Note that many DEC operators are already defined for you.","category":"page"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"As an example, we chose to define k as a function that multiplies an input by 0.05. We could have alternately chosen to represent k as a Constant that we multiply by in the Decapode itself.","category":"page"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"We then compile the simulation by using gen_sim and create functional simulation by calling the evaluated sim with the mesh and our generate function.","category":"page"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"using MLStyle\n\nfunction generate(sd, my_symbol; hodge=DiagonalHodge())\n op = @match my_symbol begin\n :k => x -> 0.05*x\n x => error(\"Unmatched operator $my_symbol\")\n end\n return op\nend\n\nsim = eval(gensim(Diffusion))\nfₘ = sim(periodic_mesh, generate, DiagonalHodge())","category":"page"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"We go ahead and set up our initial conditions for this problem. In this case we generate a Gaussian and apply it to our mesh.","category":"page"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"using Distributions\nc_dist = MvNormal([7, 5], [1.5, 1.5])\nc = [pdf(c_dist, [p[1], p[2]]) for p in periodic_mesh[:point]]\n\nfig = Figure()\nax = CairoMakie.Axis(fig[1,1], aspect = AxisAspect(3.0))\nmesh!(ax, plot_mesh; color=c[point_map])\nfig","category":"page"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"Finally, we solve this PDE problem using the Tsit5() solver provided by DifferentialEquations.jl.","category":"page"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"using LinearAlgebra\nusing ComponentArrays\nusing OrdinaryDiffEq\n\nu₀ = ComponentArray(C=c)\n\nprob = ODEProblem(fₘ, u₀, (0.0, 100.0))\nsol = solve(prob, Tsit5());\nsol.retcode","category":"page"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"Now that the simulation has succeeded we can plot out our results with CairoMakie.jl.","category":"page"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"# Plot the result\ntimes = range(0.0, 100.0, length=150)\ncolors = [sol(t).C[point_map] for t in times]\n\n# Initial frame\nfig = Figure()\nax = CairoMakie.Axis(fig[1,1], aspect = AxisAspect(3.0))\npmsh = mesh!(ax, plot_mesh; color=colors[1], colorrange = extrema(vcat(colors...)))\nColorbar(fig[1,2], pmsh)\nframerate = 30\n\n# Animation\nrecord(fig, \"diffusion.gif\", range(0.0, 100.0; length=150); framerate = 30) do t\n pmsh.color = sol(t).C[point_map]\nend","category":"page"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"(Image: Your first Decapode!)","category":"page"},{"location":"overview/overview/#Merging-Multiple-Physics","page":"Overview","title":"Merging Multiple Physics","text":"","category":"section"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"Now that we've seen the basic pipeline, it's time for a more complex example that demonstrates some of the benefits reaped from using Catlab.jl as the backend to our data structures. In this example, we will take two separate physics (diffusion and advection), and combine them together using a higher-level composition pattern.","category":"page"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"We begin by defining the three systems we need. The first two systems are the relationships between concentration and flux under diffusion and advection respectively. The third is the relationship between the two fluxes and the change of concentration under superposition of fluxes.","category":"page"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"Diffusion = @decapode begin\n C::Form0\n ϕ::Form1\n\n # Fick's first law\n ϕ == k(d₀(C))\nend\n\nAdvection = @decapode begin\n C::Form0\n ϕ::Form1\n V::Form1\n\n ϕ == ∧₀₁(C,V)\nend\n\nSuperposition = @decapode begin\n (C, Ċ)::Form0\n (ϕ, ϕ₁, ϕ₂)::Form1\n\n ϕ == ϕ₁ + ϕ₂\n Ċ == ⋆₀⁻¹(dual_d₁(⋆₁(ϕ)))\n ∂ₜ(C) == Ċ\nend\nnothing # hide","category":"page"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"The diffusion Decapode.","category":"page"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"to_graphviz(Diffusion) # hide","category":"page"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"The advection Decapode.","category":"page"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"to_graphviz(Advection) # hide","category":"page"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"And the superposition Decapode.","category":"page"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"to_graphviz(Superposition) # hide","category":"page"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"Next, we define the pattern of composition which we want to compose these physics under. This pattern of composition is described by an undirected wiring diagram, which has the individual physics as nodes and the shared variables as the small junctions.","category":"page"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"compose_diff_adv = @relation (C, V) begin\n diffusion(C, ϕ₁)\n advection(C, ϕ₂, V)\n superposition(ϕ₁, ϕ₂, ϕ, C)\nend\n\ndraw_composition(compose_diff_adv)","category":"page"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"After this, the physics can be composed as follows:","category":"page"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"DiffusionAdvection_cospan = oapply(compose_diff_adv,\n [Open(Diffusion, [:C, :ϕ]),\n Open(Advection, [:C, :ϕ, :V]),\n Open(Superposition, [:ϕ₁, :ϕ₂, :ϕ, :C])])\nDiffusionAdvection = apex(DiffusionAdvection_cospan)\n\nto_graphviz(DiffusionAdvection)","category":"page"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"Similar to before, this physics can be compiled and executed. Note that this process now requires another value to be defined, namely the velocity vector field. We do this using a custom operator called flat_op. This operator is basically the flat operator from CombinatorialSpaces.jl, but specialized to account for the periodic mesh.","category":"page"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"We could instead represent the domain as the surface of an object with equivalent boundaries in 3D.","category":"page"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"function closest_point(p1, p2, dims)\n p_res = collect(p2)\n for i in 1:length(dims)\n if dims[i] != Inf\n p = p1[i] - p2[i]\n f, n = modf(p / dims[i])\n p_res[i] += dims[i] * n\n if abs(f) > 0.5\n p_res[i] += sign(f) * dims[i]\n end\n end\n end\n Point3{Float64}(p_res...)\nend\n\nfunction flat_op(s::AbstractDeltaDualComplex2D, X::AbstractVector; dims=[Inf, Inf, Inf])\n tri_map = Dict{Int,Int}(triangle_center(s,t) => t for t in triangles(s))\n\n map(edges(s)) do e\n p = closest_point(point(s, tgt(s,e)), point(s, src(s,e)), dims)\n e_vec = (point(s, tgt(s,e)) - p) * sign(1,s,e)\n dual_edges = elementary_duals(1,s,e)\n dual_lengths = dual_volume(1, s, dual_edges)\n mapreduce(+, dual_edges, dual_lengths) do dual_e, dual_length\n X_vec = X[tri_map[s[dual_e, :D_∂v0]]]\n dual_length * dot(X_vec, e_vec)\n end / sum(dual_lengths)\n end\nend","category":"page"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"using LinearAlgebra\nusing MLStyle\n\nfunction generate(sd, my_symbol; hodge=DiagonalHodge())\n op = @match my_symbol begin\n :k => x -> 0.05*x\n x => error(\"Unmatched operator $my_symbol\")\n end\n return (args...) -> op(args...)\nend\n\nsim = eval(gensim(DiffusionAdvection))\nfₘ = sim(periodic_mesh, generate, DiagonalHodge())\n\nvelocity(p) = [-0.5, -0.5, 0.0]\nv = flat_op(periodic_mesh, DualVectorField(velocity.(periodic_mesh[triangle_center(periodic_mesh),:dual_point])); dims=[30, 10, Inf])\n\nu₀ = ComponentArray(C=c,V=v)\n\nprob = ODEProblem(fₘ, u₀, (0.0, 100.0))\nsol = solve(prob, Tsit5());\n\n# Plot the result\ntimes = range(0.0, 100.0, length=150)\ncolors = [sol(t).C[point_map] for t in times]\n\n# Initial frame\nfig = Figure()\nax = CairoMakie.Axis(fig[1,1], aspect = AxisAspect(3.0))\npmsh = mesh!(ax, plot_mesh; color=colors[1], colorrange = extrema(vcat(colors...)))\nColorbar(fig[1,2], pmsh)\nframerate = 30\n\n# Animation\nrecord(fig, \"diff_adv.gif\", range(0.0, 100.0; length=150); framerate = 30) do t\n pmsh.color = sol(t).C[point_map]\nend","category":"page"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"(Image: Your first composed Decapode!)","category":"page"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"DocInfo.get_report(info) # hide","category":"page"},{"location":"halmo/halmo/#Couple-Ice-and-Water-Dynamics","page":"Halfar-NS","title":"Couple Ice and Water Dynamics","text":"","category":"section"},{"location":"halmo/halmo/","page":"Halfar-NS","title":"Halfar-NS","text":"include(joinpath(Base.@__DIR__, \"..\", \"..\", \"docinfo.jl\"))\ninfo = DocInfo.Info()","category":"page"},{"location":"halmo/halmo/","page":"Halfar-NS","title":"Halfar-NS","text":"Let's use Decapodes to implement the incompressible Navier-Stokes as given by Mohamed et al.. We will run these dynamics on the sphere. We will couple this model with Halfar glacier dynamics on the sphere. For the initial conditions of the Halfar ice thickness, we will use an idealized polar ice cap.","category":"page"},{"location":"halmo/halmo/","page":"Halfar-NS","title":"Halfar-NS","text":"Note that the time scale at which ice creeps is much larger than the time scale at which the water in the ocean would flow. So we can either choose to model a very slow moving fluid around the ice (like a storm on a gas giant), or we can choose to model on a shorter timescale, on which the ice does not move very much.","category":"page"},{"location":"halmo/halmo/","page":"Halfar-NS","title":"Halfar-NS","text":"# AlgebraicJulia Dependencies\nusing Catlab\nusing CombinatorialSpaces\nusing Decapodes\nusing DiagrammaticEquations\n\n# External Dependencies\nusing CairoMakie\nusing ComponentArrays\nusing GeometryBasics: Point3\nusing JLD2\nusing LinearAlgebra\nusing MLStyle\nusing OrdinaryDiffEq\nPoint3D = Point3{Float64};\nnothing # hide","category":"page"},{"location":"halmo/halmo/#Specify-our-models","page":"Halfar-NS","title":"Specify our models","text":"","category":"section"},{"location":"halmo/halmo/","page":"Halfar-NS","title":"Halfar-NS","text":"Our first component is the Mohamed et al. formulation of the incompressible Navier-Stokes equations. We will call the flow here \"w\". This will be the flow after collisions with glaciers are considered.","category":"page"},{"location":"halmo/halmo/","page":"Halfar-NS","title":"Halfar-NS","text":"This is Equation 10 for N=2.","category":"page"},{"location":"halmo/halmo/","page":"Halfar-NS","title":"Halfar-NS","text":"eq10forN2 = @decapode begin\n (𝐮,w)::DualForm1\n (P, 𝑝ᵈ)::DualForm0\n μ::Constant\n\n 𝑝ᵈ == P + 0.5 * ι₁₁(w,w)\n\n ∂ₜ(𝐮) == μ * ∘(d, ⋆, d, ⋆)(w) + (-1)*⋆₁⁻¹(∧ᵈᵖ₁₀(w, ⋆(d(w)))) + d(𝑝ᵈ)\nend\nto_graphviz(eq10forN2)","category":"page"},{"location":"halmo/halmo/","page":"Halfar-NS","title":"Halfar-NS","text":"Halfar's equation and Glen's law are composed like so:","category":"page"},{"location":"halmo/halmo/","page":"Halfar-NS","title":"Halfar-NS","text":"halfar_eq2 = @decapode begin\n h::Form0\n Γ::Form1\n n::Constant\n\n ∂ₜ(h) == ∘(⋆, d, ⋆)(Γ * d(h) * avg₀₁(mag(♯(d(h)))^(n-1)) * avg₀₁(h^(n+2)))\nend\n\nglens_law = @decapode begin\n Γ::Form1\n (A,ρ,g,n)::Constant\n \n Γ == (2/(n+2))*A*(ρ*g)^n\nend\n\nice_dynamics_composition_diagram = @relation () begin\n dynamics(Γ,n)\n stress(Γ,n)\nend\n\nice_dynamics = apex(oapply(ice_dynamics_composition_diagram,\n [Open(halfar_eq2, [:Γ,:n]),\n Open(glens_law, [:Γ,:n])]))\n\nto_graphviz(ice_dynamics, verbose=false)","category":"page"},{"location":"halmo/halmo/","page":"Halfar-NS","title":"Halfar-NS","text":"We now have our dynamics that govern glaciers, and our dynamics that govern water. We need to specify the physics of what happens when glaciers and water interact. There are many options, and the choice you make depends on the time-scale and resolution of the dynamics that you are interested in.","category":"page"},{"location":"halmo/halmo/","page":"Halfar-NS","title":"Halfar-NS","text":"An interaction between glacier and water dynamics can look like the following, where flow_after is the flow of water after interaction with ice is considered.","category":"page"},{"location":"halmo/halmo/","page":"Halfar-NS","title":"Halfar-NS","text":"ice_water_composition_diagram = @relation () begin\n glacier_dynamics(ice_thickness)\n water_dynamics(flow, flow_after)\n\n interaction(ice_thickness, flow, flow_after)\nend\ndraw_composition(ice_water_composition_diagram)","category":"page"},{"location":"halmo/halmo/","page":"Halfar-NS","title":"Halfar-NS","text":"We will use the language of Decapodes to encode the dynamics that ice blocks water from flowing.","category":"page"},{"location":"halmo/halmo/","page":"Halfar-NS","title":"Halfar-NS","text":"We can detect the ice with a sigmoid function. Where there is ice, we want the flow to be 0, and where there is no ice, we will not impede the flow. We won't consider any further special boundary conditions between ice and water here. Since h is a scalar-like quantity, and flow is a vector-like quantity, we can relate them using the wedge product operator from the exterior calculus. We can state these dynamics using the language of Decapodes like so:","category":"page"},{"location":"halmo/halmo/","page":"Halfar-NS","title":"Halfar-NS","text":"blocking = @decapode begin\n h::Form0\n (𝐮,w)::DualForm1\n\n w == (1-σ(h)) ∧ᵖᵈ₀₁ 𝐮\nend\nto_graphviz(blocking)","category":"page"},{"location":"halmo/halmo/","page":"Halfar-NS","title":"Halfar-NS","text":"Here, σ is a sigmoid function that is 0 when d(h) is 0, and goes to 1 otherwise. We see that w is indeed defined as 𝐮, after interacting with the ice boundary is considered.","category":"page"},{"location":"halmo/halmo/","page":"Halfar-NS","title":"Halfar-NS","text":"We can apply our composition diagram to generate our physics:","category":"page"},{"location":"halmo/halmo/","page":"Halfar-NS","title":"Halfar-NS","text":"ice_water = apex(oapply(ice_water_composition_diagram,\n [Open(ice_dynamics, [:dynamics_h]),\n Open(eq10forN2, [:𝐮, :w]),\n Open(blocking, [:h, :𝐮, :w])]))\n\nto_graphviz(ice_dynamics, verbose=false)","category":"page"},{"location":"halmo/halmo/","page":"Halfar-NS","title":"Halfar-NS","text":"We can now generate our simulation:","category":"page"},{"location":"halmo/halmo/","page":"Halfar-NS","title":"Halfar-NS","text":"sim = eval(gensim(ice_water))","category":"page"},{"location":"halmo/halmo/#Meshes-and-Initial-Conditions","page":"Halfar-NS","title":"Meshes and Initial Conditions","text":"","category":"section"},{"location":"halmo/halmo/","page":"Halfar-NS","title":"Halfar-NS","text":"Since we want to demonstrate these physics on the Earth, we will use one of our icosphere discretizations with the appropriate radius.","category":"page"},{"location":"halmo/halmo/","page":"Halfar-NS","title":"Halfar-NS","text":"rₑ = 6378e3 # [km]\ns = loadmesh(Icosphere(5, rₑ))\nsd = EmbeddedDeltaDualComplex2D{Bool, Float64, Point3D}(s)\nsubdivide_duals!(sd, Barycenter())\nwireframe(sd)","category":"page"},{"location":"halmo/halmo/","page":"Halfar-NS","title":"Halfar-NS","text":"Let's demonstrate how to add operators by providing the definition of a sigmoid function:","category":"page"},{"location":"halmo/halmo/","page":"Halfar-NS","title":"Halfar-NS","text":"sigmoid(x) = (2 ./ (1 .+ exp.(-x*1e2)) .- 1)\nfunction generate(sd, my_symbol; hodge=GeometricHodge())\n op = @match my_symbol begin\n # This is a new function.\n :σ => sigmoid\n :mag => x -> norm.(x)\n # Remaining operations (such as our differential operators) are built-in.\n _ => default_dec_matrix_generate(sd, my_symbol, hodge)\n end\n return op\nend;","category":"page"},{"location":"halmo/halmo/","page":"Halfar-NS","title":"Halfar-NS","text":"Let's combine our mesh with our physics to instantiate our simulation:","category":"page"},{"location":"halmo/halmo/","page":"Halfar-NS","title":"Halfar-NS","text":"fₘ = sim(sd, generate);","category":"page"},{"location":"halmo/halmo/","page":"Halfar-NS","title":"Halfar-NS","text":"We can now supply initial conditions:","category":"page"},{"location":"halmo/halmo/","page":"Halfar-NS","title":"Halfar-NS","text":"ice_thickness = map(sd[:point]) do (_,_,z)\n z < 0.8*rₑ ? 0 : 1\nend\n\nflow = dec_dual_derivative(0,sd) *\n map(sd[sd[:tri_center], :dual_point]) do (_,_,z)\n (rₑ-abs(z))/rₑ\n end\n\n# There is no water \"under\" the ice:\nflow = dec_wedge_product_pd(Tuple{0,1},sd)(1 .- sigmoid(ice_thickness), flow)\n\nu₀ = ComponentArray(\n ice_thickness = ice_thickness,\n flow = flow,\n water_dynamics_P = zeros(ntriangles(sd)))\n\nconstants_and_parameters = (\n glacier_dynamics_n = 3,\n glacier_dynamics_stress_A = fill(1e-16, ne(sd)),\n glacier_dynamics_stress_ρ = 910,\n glacier_dynamics_stress_g = 9.8101,\n water_dynamics_μ = 0.01);","category":"page"},{"location":"halmo/halmo/#Execute-the-Simulation","page":"Halfar-NS","title":"Execute the Simulation","text":"","category":"section"},{"location":"halmo/halmo/","page":"Halfar-NS","title":"Halfar-NS","text":"We specified our physics, our mesh, and our initial conditions. We have everything we need to execute the simulation.","category":"page"},{"location":"halmo/halmo/","page":"Halfar-NS","title":"Halfar-NS","text":"tₑ = 100\n\n# Julia will pre-compile the generated simulation the first time it is run.\n@info(\"Precompiling Solver\")\nprob = ODEProblem(fₘ, u₀, (0, 1e-4), constants_and_parameters)\nsoln = solve(prob, Vern7())\nsoln.retcode != :Unstable || error(\"Solver was not stable\")\n\n@info(\"Solving\")\nprob = ODEProblem(fₘ, u₀, (0, tₑ), constants_and_parameters)\nsoln = solve(prob, Vern7())\n@show soln.retcode\n@info(\"Done\")","category":"page"},{"location":"halmo/halmo/#Results","page":"Halfar-NS","title":"Results","text":"","category":"section"},{"location":"halmo/halmo/","page":"Halfar-NS","title":"Halfar-NS","text":"Let's look at the dynamics of the ice:","category":"page"},{"location":"halmo/halmo/","page":"Halfar-NS","title":"Halfar-NS","text":"begin\n frames = 200\n fig = Figure()\n ax = LScene(fig[1,1], scenekw=(lights=[],))\n msh = CairoMakie.mesh!(ax, s, color=soln(0).ice_thickness, colormap=:jet, colorrange=extrema(soln(0).ice_thickness))\n\n Colorbar(fig[1,2], msh)\n record(fig, \"halmo_ice.gif\", range(0.0, tₑ; length=frames); framerate = 20) do t\n msh.color = soln(t).ice_thickness\n end\nend","category":"page"},{"location":"halmo/halmo/","page":"Halfar-NS","title":"Halfar-NS","text":"(Image: HalfarMohamedIce)","category":"page"},{"location":"halmo/halmo/","page":"Halfar-NS","title":"Halfar-NS","text":"DocInfo.get_report(info) # hide","category":"page"},{"location":"ascii/#ASCII-and-Vector-Calculus-Operators","page":"ASCII Operators","title":"ASCII and Vector Calculus Operators","text":"","category":"section"},{"location":"ascii/","page":"ASCII Operators","title":"ASCII Operators","text":"include(joinpath(Base.@__DIR__, \"..\", \"docinfo.jl\"))\ninfo = DocInfo.Info()","category":"page"},{"location":"ascii/","page":"ASCII Operators","title":"ASCII Operators","text":"Some users may have trouble entering unicode characters like ⋆ or ∂ in their development environment. So, we offer the following ASCII equivalents. Further, some users may like to use vector calculus symbols instead of exterior calculus symbols where possible. We offer support for such symbols as well.","category":"page"},{"location":"ascii/#ASCII-Equivalents","page":"ASCII Operators","title":"ASCII Equivalents","text":"","category":"section"},{"location":"ascii/","page":"ASCII Operators","title":"ASCII Operators","text":"Unicode ASCII Meaning\n∂ₜ dt derivative w.r.t. time\n⋆ star Hodge star, generalizing transpose\nΔ lapl laplacian\n∧ wedge wedge product, generalizing the cross product\n⋆⁻¹ star_inv Hodge star, generalizing transpose\n∘(⋆,d,⋆) div divergence, a.k.a. ∇⋅\navg₀₁ avg_01 average values stored on endpoints of edges","category":"page"},{"location":"ascii/#Vector-Calculus-Equivalents","page":"ASCII Operators","title":"Vector Calculus Equivalents","text":"","category":"section"},{"location":"ascii/","page":"ASCII Operators","title":"ASCII Operators","text":"Vec DEC How to enter\ngrad d grad\ndiv ∘(⋆,d,⋆) div\ncurl ∘(d,⋆) curl\n∇ d \\nabla\n∇ᵈ ∘(⋆,d,⋆) \\nabla \\ \\^d \\\n∇x ∘(d,⋆) \\nabla \\ x\nadv(X,Y) ∘(⋆,d,⋆)(X∧Y) adv","category":"page"},{"location":"ascii/","page":"ASCII Operators","title":"ASCII Operators","text":"DocInfo.get_report(info) # hide","category":"page"},{"location":"#Decapodes.jl","page":"Decapodes.jl","title":"Decapodes.jl","text":"","category":"section"},{"location":"","page":"Decapodes.jl","title":"Decapodes.jl","text":"Decapodes.jl is a framework for developing, composing, and simulating physical systems.","category":"page"},{"location":"","page":"Decapodes.jl","title":"Decapodes.jl","text":"Decapodes.jl is the synthesis of Applied Category Theory (ACT) techniques for formalizing and composing physics equations, and Discrete Exterior Calculus (DEC) techniques for formalizing differential operators. CombinatorialSpaces.jl hosts tools for discretizing space and defining DEC operators on simplicial complexes, and DiagrammaticEquations.jl hosts tooling for representing the equations as formal ACT diagrams. This repository combines these two packages, compiling diagrams down to runnable simulation code.","category":"page"},{"location":"","page":"Decapodes.jl","title":"Decapodes.jl","text":"By combining the power of ACT and the DEC, we seek to improve the scientific computing workflow. Decapodes simulations are hierarchically composable, generalize over any type of manifold, and are performant and accurate with a declarative domain specific language (DSL) that is human-readable.","category":"page"},{"location":"#Getting-started","page":"Decapodes.jl","title":"Getting started","text":"","category":"section"},{"location":"","page":"Decapodes.jl","title":"Decapodes.jl","text":"Walkthroughs creating, composing, and solving Decapodes are available in the side-bar of this documentation page. Further example scripts are available in the examples folder of the Decapodes.jl GitHub repo, and will be added to this documentation site soon.","category":"page"},{"location":"","page":"Decapodes.jl","title":"Decapodes.jl","text":"note: Under Active Development\nThis library is currently under active development, and so is not yet at a point where a constant API/behavior can be assumed. That being said, if this project looks interesting/relevant please contact us and let us know!","category":"page"}] +[{"location":"bc/bc_debug/#Simulation-Setup","page":"Misc Features","title":"Simulation Setup","text":"","category":"section"},{"location":"bc/bc_debug/","page":"Misc Features","title":"Misc Features","text":"include(joinpath(Base.@__DIR__, \"..\", \"..\", \"docinfo.jl\"))\ninfo = DocInfo.Info()","category":"page"},{"location":"bc/bc_debug/","page":"Misc Features","title":"Misc Features","text":"This tutorial showcases some of the other features included in the Decapodes.jl package. Currently, these features are the treatment of boundary conditions and the simulation debugger interface. To begin, we set up the same advection-diffusion problem presented in the Overview section. As before, we define the Diffusion, Advection, and Superposition components, and now include a Boundary Condition (BC) component. By convention, BCs are encoded in Decapodes by using a ∂ symbol. Below we show the graphical rendering of this boundary condition diagram, which we will use to impose a Dirichlet condition on the time derivative of concentration at the mesh boundary.","category":"page"},{"location":"bc/bc_debug/","page":"Misc Features","title":"Misc Features","text":"using Catlab\nusing DiagrammaticEquations\nusing Decapodes\n\nDiffusion = @decapode begin\n C::Form0\n ϕ::Form1\n\n # Fick's first law\n ϕ == k(d₀(C))\nend\n\nAdvection = @decapode begin\n C::Form0\n ϕ::Form1\n V::Constant\n\n ϕ == ∧₀₁(C,V)\nend\n\nSuperposition = @decapode begin\n (C, C_up)::Form0\n (ϕ, ϕ₁, ϕ₂)::Form1\n\n ϕ == ϕ₁ + ϕ₂\n C_up == ⋆₀⁻¹(dual_d₁(⋆₁(ϕ)))\nend\n\nBoundaryConditions = @decapode begin\n (C, C_up)::Form0\n\n # Temporal boundary\n ∂ₜ(C) == Ċ\n\n # Spatial boundary\n Ċ == ∂C(C_up)\nend\n\nto_graphviz(BoundaryConditions)","category":"page"},{"location":"bc/bc_debug/","page":"Misc Features","title":"Misc Features","text":"As before, we compose these physics components over our wiring diagram.","category":"page"},{"location":"bc/bc_debug/","page":"Misc Features","title":"Misc Features","text":"compose_diff_adv = @relation (C, V) begin\n diffusion(C, ϕ₁)\n advection(C, ϕ₂, V)\n bc(C, C_up)\n superposition(ϕ₁, ϕ₂, ϕ, C_up, C)\nend\n\ndraw_composition(compose_diff_adv)","category":"page"},{"location":"bc/bc_debug/","page":"Misc Features","title":"Misc Features","text":"DiffusionAdvection_cospan = oapply(compose_diff_adv,\n [Open(Diffusion, [:C, :ϕ]),\n Open(Advection, [:C, :ϕ, :V]),\n Open(BoundaryConditions, [:C, :C_up]),\n Open(Superposition, [:ϕ₁, :ϕ₂, :ϕ, :C_up, :C])])\nDiffusionAdvection = apex(DiffusionAdvection_cospan)\n\nto_graphviz(DiffusionAdvection)","category":"page"},{"location":"bc/bc_debug/","page":"Misc Features","title":"Misc Features","text":"When this is scheduled, Decapodes will apply any boundary conditions immediately after the impacted value is computed. This implementation choice ensures that this boundary condition holds true for any variables dependent on this variable, though also means that the boundary conditions on a variable have no immediate impact on the variables this variable is dependent on.","category":"page"},{"location":"bc/bc_debug/","page":"Misc Features","title":"Misc Features","text":"In the visualization below, we see that the final operation executed on the data is the boundary condition we are enforcing on the change in concentration.","category":"page"},{"location":"bc/bc_debug/","page":"Misc Features","title":"Misc Features","text":"to_graphviz(DiffusionAdvection)","category":"page"},{"location":"bc/bc_debug/","page":"Misc Features","title":"Misc Features","text":"Next we import the mesh we will use. In this case, we are wanting to impose boundary conditions and so we will use the plot_mesh from the previous example instead of the mesh with periodic boundary conditions. Because the mesh is only a primal mesh, we also generate and subdivide the dual mesh.","category":"page"},{"location":"bc/bc_debug/","page":"Misc Features","title":"Misc Features","text":"using CombinatorialSpaces\nusing CairoMakie\n\nplot_mesh = loadmesh(Rectangle_30x10())\n\n# Generate the dual mesh\nplot_mesh_dual = EmbeddedDeltaDualComplex2D{Bool, Float64, Point3{Float64}}(plot_mesh)\n\n# Calculate distances and subdivisions for the dual mesh\nsubdivide_duals!(plot_mesh_dual, Circumcenter())\n\nfig = Figure()\nax = CairoMakie.Axis(fig[1,1], aspect = AxisAspect(3.0))\nwireframe!(ax, plot_mesh)\nfig","category":"page"},{"location":"bc/bc_debug/","page":"Misc Features","title":"Misc Features","text":"Finally, we define our operators, generate the simulation function, and compute the simulation. Note that when we define the boundary condition operator, we hardcode the boundary indices and values into the operator itself. We also move the initial concentration to the left, so that we are able to see a constant concentration on the left boundary which will act as a source in the flow. You can find the file for boundary conditions here. The modified initial condition is shown below:","category":"page"},{"location":"bc/bc_debug/","page":"Misc Features","title":"Misc Features","text":"using LinearAlgebra\nusing ComponentArrays\nusing MLStyle\ninclude(\"../boundary_helpers.jl\")\n\nfunction generate(sd, my_symbol; hodge=GeometricHodge())\n op = @match my_symbol begin\n :k => x -> 0.05*x\n :∂C => x -> begin\n boundary = boundary_inds(Val{0}, sd)\n x[boundary] .= 0\n x\n end\n x => error(\"Unmatched operator $my_symbol\")\n end\n return op\nend\n\nusing Distributions\nc_dist = MvNormal([1, 5], [1.5, 1.5])\nc = [pdf(c_dist, [p[1], p[2]]) for p in plot_mesh_dual[:point]]\n\nfig = Figure()\nax = CairoMakie.Axis(fig[1,1], aspect = AxisAspect(3.0))\nmesh!(ax, plot_mesh; color=c[1:nv(plot_mesh)])\nfig","category":"page"},{"location":"bc/bc_debug/","page":"Misc Features","title":"Misc Features","text":"And the simulation result is then computed and visualized below.","category":"page"},{"location":"bc/bc_debug/","page":"Misc Features","title":"Misc Features","text":"using OrdinaryDiffEq\n\nsim = eval(gensim(DiffusionAdvection))\nfₘ = sim(plot_mesh_dual, generate)\n\nvelocity(p) = [-0.5, 0.0, 0.0]\nv = ♭(plot_mesh_dual, DualVectorField(velocity.(plot_mesh_dual[triangle_center(plot_mesh_dual),:dual_point]))).data\n\nu₀ = ComponentArray(C=c)\nparams = (V = v,)\n\nprob = ODEProblem(fₘ, u₀, (0.0, 100.0), params)\nsol = solve(prob, Tsit5());\n\n# Plot the result\ntimes = range(0.0, 100.0, length=150)\ncolors = [sol(t).C for t in times]\nextrema\n# Initial frame\nfig = Figure()\nax = CairoMakie.Axis(fig[1,1], aspect = AxisAspect(3.0))\npmsh = mesh!(ax, plot_mesh; color=colors[1], colorrange = extrema(vcat(colors...)))\nColorbar(fig[1,2], pmsh)\nframerate = 30\n\n# Animation\nrecord(fig, \"diff_adv_right.gif\", range(0.0, 100.0; length=150); framerate = 30) do t\n pmsh.color = sol(t).C\nend","category":"page"},{"location":"bc/bc_debug/","page":"Misc Features","title":"Misc Features","text":"(Image: Diffusion-Advection result and your first BC Decapode!)","category":"page"},{"location":"bc/bc_debug/","page":"Misc Features","title":"Misc Features","text":"DocInfo.get_report(info) # hide","category":"page"},{"location":"navier_stokes/ns/#Navier-Stokes-Vorticity-Model","page":"Vortices","title":"Navier Stokes Vorticity Model","text":"","category":"section"},{"location":"navier_stokes/ns/","page":"Vortices","title":"Vortices","text":"include(joinpath(Base.@__DIR__, \"..\", \"..\", \"docinfo.jl\"))\ninfo = DocInfo.Info()","category":"page"},{"location":"navier_stokes/ns/","page":"Vortices","title":"Vortices","text":"This is a discretization of the incompressible Navier Stokes equations using the Discrete Exterior Calculus.","category":"page"},{"location":"navier_stokes/ns/","page":"Vortices","title":"Vortices","text":"The formulations are based on those given by Mohamed, Hirani, Samtaney (in turn from Marsden, Ratiu, Abraham).","category":"page"},{"location":"navier_stokes/ns/","page":"Vortices","title":"Vortices","text":"However, different choices in discretization are chosen for purposes of brevity, to demonstrate novel discretizations of certain operators, and to demonstrate the automated Decapodes workflow.","category":"page"},{"location":"navier_stokes/ns/","page":"Vortices","title":"Vortices","text":"The full code that generated these results is available in a julia script.","category":"page"},{"location":"navier_stokes/ns/","page":"Vortices","title":"Vortices","text":"We give the vorticity formulation of the inviscid incompressible Navier-Stokes momentum equation as follows:","category":"page"},{"location":"navier_stokes/ns/","page":"Vortices","title":"Vortices","text":"eq11_inviscid_poisson = @decapode begin\n d𝐮::DualForm2\n 𝐮::DualForm1\n ψ::Form0\n\n ψ == Δ⁻¹(⋆(d𝐮))\n 𝐮 == ⋆(d(ψ))\n\n ∂ₜ(d𝐮) == (-1) * ∘(♭♯, ⋆₁, d̃₁)(∧ᵈᵖ₁₀(𝐮, ⋆(d𝐮)))\nend","category":"page"},{"location":"navier_stokes/ns/","page":"Vortices","title":"Vortices","text":"Our initial conditions here are Point vortices:","category":"page"},{"location":"navier_stokes/ns/","page":"Vortices","title":"Vortices","text":"function point_vortex(pnt::Point3D, cntr::Point3D, p::PointVortexParams)\n gcd = great_circle_dist(pnt,cntr)\n p.τ / (cosh(3gcd/p.a)^2)\nend","category":"page"},{"location":"navier_stokes/ns/","page":"Vortices","title":"Vortices","text":"Based on the configuration, you can see different results that match the expected solutions from the literature.","category":"page"},{"location":"navier_stokes/ns/","page":"Vortices","title":"Vortices","text":"Here is one set of results from using the inviscid Poisson formulation:","category":"page"},{"location":"navier_stokes/ns/","page":"Vortices","title":"Vortices","text":"(Image: Vorticity)","category":"page"},{"location":"navier_stokes/ns/","page":"Vortices","title":"Vortices","text":"We can visualize the distribution of vorticity at the theta = 04 latitude. The difference between the distributions at t=0 and t=12 is accumulated error.","category":"page"},{"location":"navier_stokes/ns/","page":"Vortices","title":"Vortices","text":"(Image: Azimuth Profile)","category":"page"},{"location":"navier_stokes/ns/","page":"Vortices","title":"Vortices","text":"DocInfo.get_report(info) # hide","category":"page"},{"location":"equations/equations/#Simple-Equations","page":"Equations","title":"Simple Equations","text":"","category":"section"},{"location":"equations/equations/","page":"Equations","title":"Equations","text":"include(joinpath(Base.@__DIR__, \"..\", \"..\",\"docinfo.jl\"))\ninfo = DocInfo.Info()","category":"page"},{"location":"equations/equations/","page":"Equations","title":"Equations","text":"This tutorial shows how to use Decapodes to represent simple equations. These aren't using any of the Discrete Exterior Calculus or CombinatorialSpaces features of Decapodes. They just are a reference for how to build equations with the @decapodes macro and see how they are stored as ACSets.","category":"page"},{"location":"equations/equations/","page":"Equations","title":"Equations","text":"using Catlab\nusing CombinatorialSpaces\nusing DiagrammaticEquations\nusing Decapodes","category":"page"},{"location":"equations/equations/","page":"Equations","title":"Equations","text":"The harmonic oscillator can be written in Decapodes in at least three different ways.","category":"page"},{"location":"equations/equations/","page":"Equations","title":"Equations","text":"oscillator = @decapode begin\n X::Form0\n V::Form0\n\n ∂ₜ(X) == V\n ∂ₜ(V) == -k(X)\nend","category":"page"},{"location":"equations/equations/","page":"Equations","title":"Equations","text":"The default representation is a tabular output as an ACSet. The tables are Var for storing variables (X) and their types (Form0). TVar for identifying a subset of variables that are the tangent variables of the dynamics (Ẋ). The unary operators are stored in Op1 and binary operators stored in Op2. If a table is empty, it doesn't get printed.","category":"page"},{"location":"equations/equations/","page":"Equations","title":"Equations","text":"Even though a diagrammatic equation is like a graph, there are no edge tables, because the arity (number of inputs) and coarity (number of outputs) is baked into the operator definitions.","category":"page"},{"location":"equations/equations/","page":"Equations","title":"Equations","text":"You can also see the output as a directed graph. The input arrows point to the state variables of the system and the output variables point from the tangent variables. You can see that I have done the differential degree reduction from x'' = -kx by introducing a velocity term v. Decapodes has some support for derivatives in the visualization layer, so it knows that dX/dt should be called Ẋ and that dẊ/dt should be called Ẋ̇.","category":"page"},{"location":"equations/equations/","page":"Equations","title":"Equations","text":"to_graphviz(oscillator)","category":"page"},{"location":"equations/equations/","page":"Equations","title":"Equations","text":"In the previous example, we viewed negation and transformation by k as operators. Notice that k appears as an edge in the graph and not as a vertex. You can also use a 2 argument function like multiplication (*). With a constant value for k::Constant. In this case you will see k enter the diagram as a vertex and multiplication with * as a binary operator.","category":"page"},{"location":"equations/equations/","page":"Equations","title":"Equations","text":"oscillator = @decapode begin\n X::Form0\n V::Form0\n\n k::Constant\n\n ∂ₜ(X) == V\n ∂ₜ(V) == -k*(X)\nend","category":"page"},{"location":"equations/equations/","page":"Equations","title":"Equations","text":"This gives you a different graphical representation as well. Now we have the cartesian product objects which represent a tupling of two values.","category":"page"},{"location":"equations/equations/","page":"Equations","title":"Equations","text":"to_graphviz(oscillator)","category":"page"},{"location":"equations/equations/","page":"Equations","title":"Equations","text":"You can also represent negation as a multiplication by a literal -1.","category":"page"},{"location":"equations/equations/","page":"Equations","title":"Equations","text":"oscillator = @decapode begin\n X::Form0\n V::Form0\n\n k::Constant\n\n ∂ₜ(X) == V\n ∂ₜ(V) == -1*k*(X)\nend","category":"page"},{"location":"equations/equations/","page":"Equations","title":"Equations","text":"Notice that the type bubble for the literal one is ΩL. This means that it is a literal. The literal is also used as the variable name.","category":"page"},{"location":"equations/equations/","page":"Equations","title":"Equations","text":"infer_types!(oscillator)\nto_graphviz(oscillator)","category":"page"},{"location":"equations/equations/","page":"Equations","title":"Equations","text":"We can allow the material properties to vary over time by changing Constant to Parameter. This is how we tell the simulator that it needs to call k(t) at each time step to get the updated value for k or if it can just reuse that constant k from the initial time step.","category":"page"},{"location":"equations/equations/","page":"Equations","title":"Equations","text":"oscillator = @decapode begin\n X::Form0\n V::Form0\n\n k::Parameter\n\n ∂ₜ(X) == V\n ∂ₜ(V) == -1*k*(X)\nend","category":"page"},{"location":"equations/equations/","page":"Equations","title":"Equations","text":"infer_types!(oscillator)\nto_graphviz(oscillator)","category":"page"},{"location":"equations/equations/","page":"Equations","title":"Equations","text":"Often you will have a linear material where you are scaling by a constant, and a nonlinear version of that material where that scaling is replaced by a generic nonlinear function. This is why we allow Decapodes to represent both of these types of equations.","category":"page"},{"location":"equations/equations/","page":"Equations","title":"Equations","text":"DocInfo.get_report(info) # hide","category":"page"},{"location":"canon/#Canon","page":"Canonical Models","title":"Canon","text":"","category":"section"},{"location":"canon/","page":"Canonical Models","title":"Canonical Models","text":"include(joinpath(Base.@__DIR__, \"..\", \"docinfo.jl\"))\ninfo = DocInfo.Info()","category":"page"},{"location":"canon/#Physics","page":"Canonical Models","title":"Physics","text":"","category":"section"},{"location":"canon/","page":"Canonical Models","title":"Canonical Models","text":"Modules = [ Decapodes.Canon.Physics ]\nPrivate = false","category":"page"},{"location":"canon/#Decapodes.Canon.Physics.:heat_transfer","page":"Canonical Models","title":"Decapodes.Canon.Physics.:heat_transfer","text":"Heat Transfer\n\nSource\n\nModel\n\n(HT, Tₛ)::Form0\n \n(D, cosϕᵖ, cosϕᵈ)::Constant\n \nHT == (D ./ cosϕᵖ) .* (⋆)(d(cosϕᵈ .* (⋆)(d(Tₛ))))\n\n\n\n\n\n","category":"constant"},{"location":"canon/#Decapodes.Canon.Physics.:outgoing_longwave_radiation","page":"Canonical Models","title":"Decapodes.Canon.Physics.:outgoing_longwave_radiation","text":"Outgoing Longwave Radiation\n\nSource\n\nModel\n\n(Tₛ, OLR)::Form0\n \n(A, B)::Constant\n \nOLR == A .+ B .* Tₛ\n\n\n\n\n\n","category":"constant"},{"location":"canon/#Decapodes.Canon.Physics.absorbed_shortwave_radiation","page":"Canonical Models","title":"Decapodes.Canon.Physics.absorbed_shortwave_radiation","text":"Absorbed Shortwave Radiation\n\nSource\n\nThe proportion of light reflected by a surface is the albedo. The absorbed shortwave radiation is the complement of this quantity.\n\nModel\n\n(Q, ASR)::Form0\n \nα::Constant\n \nASR == (1 .- α) .* Q\n\n\n\n\n\n","category":"constant"},{"location":"canon/#Decapodes.Canon.Physics.advection","page":"Canonical Models","title":"Decapodes.Canon.Physics.advection","text":"Advection\n\nSource\n\nAdvection refers to the transport of a bulk along a vector field.\n\nModel\n\nC::Form0\n \n(ϕ, V)::Form1\n \nϕ == C ∧₀₁ V\n\n\n\n\n\n","category":"constant"},{"location":"canon/#Decapodes.Canon.Physics.ficks_law","page":"Canonical Models","title":"Decapodes.Canon.Physics.ficks_law","text":"Ficks Law\n\nSource\n\nEquation for diffusion first stated by Adolf Fick. The diffusion flux is proportional to the concentration gradient.\n\nModel\n\nC::Form0\n \nϕ::Form1\n \nϕ == k(d₀(C))\n\n\n\n\n\n","category":"constant"},{"location":"canon/#Decapodes.Canon.Physics.iceblockingwater","page":"Canonical Models","title":"Decapodes.Canon.Physics.iceblockingwater","text":"IceBlockingWater\n\nSource\n\nModel\n\nh::Form0\n \n(𝐮, w)::DualForm1\n \nw == (1 - σ(h)) ∧ᵖᵈ₀₁ 𝐮\n\n\n\n\n\n","category":"constant"},{"location":"canon/#Decapodes.Canon.Physics.jko_scheme","page":"Canonical Models","title":"Decapodes.Canon.Physics.jko_scheme","text":"Jordan-Kinderlehrer-Otto\n\nSource\n\nJordan, R., Kinderlehrer, D., & Otto, F. (1998). The Variational Formulation of the Fokker–Planck Equation. In SIAM Journal on Mathematical Analysis (Vol. 29, Issue 1, pp. 1–17). Society for Industrial & Applied Mathematics (SIAM). https://doi.org/10.1137/s0036141096303359\n\nModel\n\n(ρ, Ψ)::Form0\n \nβ⁻¹::Constant\n \n∂ₜ(ρ) == (∘(⋆, d, ⋆))(d(Ψ) ∧ ρ) + β⁻¹ * Δ(ρ)\n\n\n\n\n\n","category":"constant"},{"location":"canon/#Decapodes.Canon.Physics.lie","page":"Canonical Models","title":"Decapodes.Canon.Physics.lie","text":"Lie\n\nSource\n\nModel\n\nC::Form0\n \nV::Form1\n \ndX::Form1\n \nV == ((⋆) ∘ (⋆))(C ∧ dX)\n\n\n\n\n\n","category":"constant"},{"location":"canon/#Decapodes.Canon.Physics.mohamed_flow","page":"Canonical Models","title":"Decapodes.Canon.Physics.mohamed_flow","text":"Mohamed Eq. 10, N2\n\nSource\n\nModel\n\n(𝐮, w)::DualForm1\n \n(P, 𝑝ᵈ)::DualForm0\n \nμ::Constant\n \n𝑝ᵈ == P + 0.5 * ι₁₁(w, w)\n \n∂ₜ(𝐮) == μ * (∘(d, ⋆, d, ⋆))(w) + -1 * (⋆₁⁻¹)(w ∧ᵈᵖ₁₀ (⋆)(d(w))) + d(𝑝ᵈ)\n\n\n\n\n\n","category":"constant"},{"location":"canon/#Decapodes.Canon.Physics.momentum","page":"Canonical Models","title":"Decapodes.Canon.Physics.momentum","text":"Momentum\n\nSource\n\nModel\n\n(f, b)::Form0\n \n(v, V, g, Fᵥ, uˢ, v_up)::Form1\n \nτ::Form2\n \nU::Parameter\n \nuˢ̇ == ∂ₜ(uˢ)\n \nv_up == (((((((-1 * L(v, v) - L(V, v)) - L(v, V)) - f ∧ v) - (∘(⋆, d, ⋆))(uˢ) ∧ v) - d(p)) + b ∧ g) - (∘(⋆, d, ⋆))(τ)) + uˢ̇ + Fᵥ\n \nuˢ̇ == force(U)\n\n\n\n\n\n","category":"constant"},{"location":"canon/#Decapodes.Canon.Physics.navier_stokes","page":"Canonical Models","title":"Decapodes.Canon.Physics.navier_stokes","text":"Navier-Stokes\n\nSource\n\nPartial differential equations which describe the motion of viscous fluid surfaces.\n\nModel\n\n(V, V̇, G)::Form1{X}\n \n(ρ, ṗ, p)::Form0{X}\n \nV̇ == neg₁(L₁′(V, V)) + div₁(kᵥ(Δ₁(V) + third(d₀(δ₁(V)))), avg₀₁(ρ)) + d₀(half(i₁′(V, V))) + neg₁(div₁(d₀(p), avg₀₁(ρ))) + G\n \n∂ₜ(V) == V̇\n \nṗ == neg₀((⋆₀⁻¹)(L₀(V, (⋆₀)(p))))\n \n∂ₜ(p) == ṗ\n\n\n\n\n\n","category":"constant"},{"location":"canon/#Decapodes.Canon.Physics.oscillator","page":"Canonical Models","title":"Decapodes.Canon.Physics.oscillator","text":"Oscillator\n\nSource\n\nEquation governing the motion of an object whose acceleration is negatively-proportional to its position.\n\nModel\n\nX::Form0\n \nV::Form0\n \nk::Constant\n \n∂ₜ(X) == V\n \n∂ₜ(V) == -k * X\n\n\n\n\n\n","category":"constant"},{"location":"canon/#Decapodes.Canon.Physics.poiseuille","page":"Canonical Models","title":"Decapodes.Canon.Physics.poiseuille","text":"Poiseuille\n\nSource\n\nA relation between the pressure drop in an incompressible and Newtownian fluid in laminar flow flowing through a long cylindrical pipe.\n\nModel\n\nP::Form0\n \nq::Form1\n \n(R, μ̃)::Constant\n \nΔq == Δ(q)\n \n∇P == d(P)\n \n∂ₜ(q) == q̇\n \nq̇ == μ̃ * ∂q(Δq) + ∇P + R * q\n\n\n\n\n\n","category":"constant"},{"location":"canon/#Decapodes.Canon.Physics.poiseuille_density","page":"Canonical Models","title":"Decapodes.Canon.Physics.poiseuille_density","text":"Poiseuille Density\n\nSource\n\nModel\n\nq::Form1\n \n(P, ρ)::Form0\n \n(k, R, μ̃)::Constant\n \n∂ₜ(q) == q̇\n \n∇P == d(P)\n \nq̇ == (μ̃ * ∂q(Δ(q)) - ∇P) + R * q\n \nP == k * ρ\n \n∂ₜ(ρ) == ρ̇\n \nρ_up == (∘(⋆, d, ⋆))(-1 * (ρ ∧₀₁ q))\n \nρ̇ == ∂ρ(ρ_up)\n\n\n\n\n\n","category":"constant"},{"location":"canon/#Decapodes.Canon.Physics.schroedinger","page":"Canonical Models","title":"Decapodes.Canon.Physics.schroedinger","text":"Schroedinger\n\nSource\n\nThe evolution of the wave function over time.\n\nModel\n\n(i, h, m)::Constant\n \nV::Parameter\n \nΨ::Form0\n \n∂ₜ(Ψ) == (((-1 * h ^ 2) / (2m)) * Δ(Ψ) + V * Ψ) / (i * h)\n\n\n\n\n\n","category":"constant"},{"location":"canon/#Decapodes.Canon.Physics.superposition","page":"Canonical Models","title":"Decapodes.Canon.Physics.superposition","text":"Superposition\n\nSource\n\nModel\n\n(C, Ċ)::Form0\n \n(ϕ, ϕ₁, ϕ₂)::Form1\n \nϕ == ϕ₁ + ϕ₂\n \nĊ == (⋆₀⁻¹)(dual_d₁((⋆₁)(ϕ)))\n \n∂ₜ(C) == Ċ\n\n\n\n\n\n","category":"constant"},{"location":"canon/#Chemistry","page":"Canonical Models","title":"Chemistry","text":"","category":"section"},{"location":"canon/","page":"Canonical Models","title":"Canonical Models","text":"Modules = [ Decapodes.Canon.Chemistry ]\nPrivate = false","category":"page"},{"location":"canon/#Decapodes.Canon.Chemistry.GrayScott","page":"Canonical Models","title":"Decapodes.Canon.Chemistry.GrayScott","text":"Gray-Scott\n\nSource\n\nA model of reaction-diffusion\n\nModel\n\n(U, V)::Form0\n \nUV2::Form0\n \n(U̇, V̇)::Form0\n \n(f, k, rᵤ, rᵥ)::Constant\n \nUV2 == U .* (V .* V)\n \nU̇ == (rᵤ * Δ(U) - UV2) + f * (1 .- U)\n \nV̇ == (rᵥ * Δ(V) + UV2) - (f + k) .* V\n \n∂ₜ(U) == U̇\n \n∂ₜ(V) == V̇\n\n\n\n\n\n","category":"constant"},{"location":"canon/#Decapodes.Canon.Chemistry.brusselator","page":"Canonical Models","title":"Decapodes.Canon.Chemistry.brusselator","text":"Brusselator\n\nSource\n\nA model of reaction-diffusion for an oscillatory chemical system.\n\nModel\n\n(U, V)::Form0\n \nU2V::Form0\n \n(U̇, V̇)::Form0\n \nα::Constant\n \nF::Parameter\n \nU2V == (U .* U) .* V\n \nU̇ == ((1 + U2V) - 4.4U) + α * Δ(U) + F\n \nV̇ == (3.4U - U2V) + α * Δ(V)\n \n∂ₜ(U) == U̇\n \n∂ₜ(V) == V̇\n\n\n\n\n\n","category":"constant"},{"location":"canon/#Biology","page":"Canonical Models","title":"Biology","text":"","category":"section"},{"location":"canon/","page":"Canonical Models","title":"Canonical Models","text":"Modules = [ Decapodes.Canon.Biology ]\nPrivate = false","category":"page"},{"location":"canon/#Decapodes.Canon.Biology.kealy","page":"Canonical Models","title":"Decapodes.Canon.Biology.kealy","text":"Kealy\n\nSource\n\nModel\n\n(n, w)::DualForm0\n \ndX::Form1\n \n(a, ν)::Constant\n \n∂ₜ(w) == ((a - w) - w * n ^ 2) + ν * Δ(w)\n\n\n\n\n\n","category":"constant"},{"location":"canon/#Decapodes.Canon.Biology.klausmeier_2a","page":"Canonical Models","title":"Decapodes.Canon.Biology.klausmeier_2a","text":"Klausmeier (Eq. 2a)\n\nSource\n\nKlausmeier, CA. “Regular and irregular patterns in semiarid vegetation.” Science (New York, N.Y.) vol. 284,5421 (1999): 1826-8. doi:10.1126/science.284.5421.1826\n\nModel\n\n(n, w)::DualForm0\n \ndX::Form1\n \n(a, ν)::Constant\n \n∂ₜ(w) == ((a - w) - w * n ^ 2) + ν * ℒ(dX, w)\n\n\n\n\n\n","category":"constant"},{"location":"canon/#Decapodes.Canon.Biology.klausmeier_2b","page":"Canonical Models","title":"Decapodes.Canon.Biology.klausmeier_2b","text":"Klausmeier (Eq. 2b)\n\nSource\n\nibid.\n\nModel\n\n(n, w)::DualForm0\n \nm::Constant\n \n∂ₜ(n) == (w * n ^ 2 - m * n) + Δ(n)\n\n\n\n\n\n","category":"constant"},{"location":"canon/#Decapodes.Canon.Biology.lejeune","page":"Canonical Models","title":"Decapodes.Canon.Biology.lejeune","text":"Lejeune\n\nSource\n\nLejeune, O., & Tlidi, M. (1999). A Model for the Explanation of Vegetation Stripes (Tiger Bush). Journal of Vegetation Science, 10(2), 201–208. https://doi.org/10.2307/3237141\n\nModel\n\nρ::Form0\n \n(μ, Λ, L)::Constant\n \n∂ₜ(ρ) == (ρ * (((1 - μ) + (Λ - 1) * ρ) - ρ * ρ) + 0.5 * (L * L - ρ) * Δ(ρ)) - 0.125 * ρ * Δ(ρ) * Δ(ρ)\n\n\n\n\n\n","category":"constant"},{"location":"canon/#Decapodes.Canon.Biology.turing_continuous_ring","page":"Canonical Models","title":"Decapodes.Canon.Biology.turing_continuous_ring","text":"Turing Continuous Ring\n\nSource\n\nModel\n\n(X, Y)::Form0\n \n(μ, ν, a, b, c, d)::Constant\n \n∂ₜ(X) == a * X + b * Y + μ * Δ(X)\n \n∂ₜ(Y) == c * X + d * Y + ν * Δ(X)\n\n\n\n\n\n","category":"constant"},{"location":"canon/#Environment","page":"Canonical Models","title":"Environment","text":"","category":"section"},{"location":"canon/","page":"Canonical Models","title":"Canonical Models","text":"Modules = [ Decapodes.Canon.Environment ]\nPrivate = false","category":"page"},{"location":"canon/#Decapodes.Canon.Environment.boundary_conditions","page":"Canonical Models","title":"Decapodes.Canon.Environment.boundary_conditions","text":"Boundary Conditions\n\nSource\n\nModel\n\n(S, T)::Form0\n \n(Ṡ, T_up)::Form0\n \nv::Form1\n \nv_up::Form1\n \nṪ == ∂ₜ(T)\n \nṠ == ∂ₜ(S)\n \nv̇ == ∂ₜ(v)\n \nṪ == ∂_spatial(T_up)\n \nv̇ == ∂_noslip(v_up)\n\n\n\n\n\n","category":"constant"},{"location":"canon/#Decapodes.Canon.Environment.energy_balance","page":"Canonical Models","title":"Decapodes.Canon.Environment.energy_balance","text":"Energy balance\n\nSource\n\nenergy balance equation from Budyko Sellers\n\nModel\n\n(Tₛ, ASR, OLR, HT)::Form0\n \nC::Constant\n \nTₛ̇ == ∂ₜ(Tₛ)\n \nTₛ̇ == ((ASR - OLR) + HT) ./ C\n\n\n\n\n\n","category":"constant"},{"location":"canon/#Decapodes.Canon.Environment.equation_of_state","page":"Canonical Models","title":"Decapodes.Canon.Environment.equation_of_state","text":"Equation of State\n\nSource\n\nModel\n\n(b, T, S)::Form0\n \n(g, α, β)::Constant\n \nb == g * (α * T - β * S)\n\n\n\n\n\n","category":"constant"},{"location":"canon/#Decapodes.Canon.Environment.glen","page":"Canonical Models","title":"Decapodes.Canon.Environment.glen","text":"Glens Law\n\nSource\n\nNye, J. F. (1957). The Distribution of Stress and Velocity in Glaciers and Ice-Sheets. Proceedings of the Royal Society of London. Series A, Mathematical and Physical Sciences, 239(1216), 113–133. http://www.jstor.org/stable/100184\n\nModel\n\nΓ::Form1\n \n(A, ρ, g, n)::Constant\n \nΓ == (2 / (n + 2)) * A * (ρ * g) ^ n\n\n\n\n\n\n","category":"constant"},{"location":"canon/#Decapodes.Canon.Environment.halfar_eq2","page":"Canonical Models","title":"Decapodes.Canon.Environment.halfar_eq2","text":"Halfar (Eq. 2)\n\nSource\n\nHalfar, P. (1981), On the dynamics of the ice sheets, J. Geophys. Res., 86(C11), 11065–11072, doi:10.1029/JC086iC11p11065\n\nModel\n\nh::Form0\n \nΓ::Form1\n \nn::Constant\n \n∂ₜ(h) == (∘(⋆, d, ⋆))(((Γ * d(h)) ∧ mag(♯(d(h))) ^ (n - 1)) ∧ h ^ (n + 2))\n\n\n\n\n\n","category":"constant"},{"location":"canon/#Decapodes.Canon.Environment.insolation","page":"Canonical Models","title":"Decapodes.Canon.Environment.insolation","text":"Insolation\n\nSource\n\nModel\n\nQ::Form0\n \ncosϕᵖ::Constant\n \nQ == 450cosϕᵖ\n\n\n\n\n\n","category":"constant"},{"location":"canon/#Decapodes.Canon.Environment.tracer","page":"Canonical Models","title":"Decapodes.Canon.Environment.tracer","text":"Tracer\n\nSource\n\nModel\n\n(c, C, F, c_up)::Form0\n \n(v, V, q)::Form1\n \nc_up == (((-1 * (⋆)(L(v, (⋆)(c))) - (⋆)(L(V, (⋆)(c)))) - (⋆)(L(v, (⋆)(C)))) - (∘(⋆, d, ⋆))(q)) + F\n\n\n\n\n\n","category":"constant"},{"location":"canon/#Decapodes.Canon.Environment.warming","page":"Canonical Models","title":"Decapodes.Canon.Environment.warming","text":"Warming\n\nSource\n\nModel\n\nTₛ::Form0\n \nA::Form1\n \nA == avg₀₁(5.8282 * 10 ^ (-0.236Tₛ) * 1.65e7)\n\n\n\n\n\n","category":"constant"},{"location":"canon/","page":"Canonical Models","title":"Canonical Models","text":"DocInfo.get_report(info) # hide","category":"page"},{"location":"api/#Library-Reference","page":"Library Reference","title":"Library Reference","text":"","category":"section"},{"location":"api/","page":"Library Reference","title":"Library Reference","text":"include(joinpath(Base.@__DIR__, \"..\", \"docinfo.jl\"))\ninfo = DocInfo.Info()","category":"page"},{"location":"api/#Decapodes","page":"Library Reference","title":"Decapodes","text":"","category":"section"},{"location":"api/","page":"Library Reference","title":"Library Reference","text":"Modules = [ Decapodes ]\nPrivate = false","category":"page"},{"location":"api/#Decapodes.compile-Tuple{DiagrammaticEquations.decapodeacset.SummationDecapode, Vector{Symbol}, Vector{Decapodes.AllocVecCall}, Set{Symbol}, Int64, DataType, Decapodes.AbstractGenerationTarget, Bool}","page":"Library Reference","title":"Decapodes.compile","text":"compile(d::SummationDecapode, inputs::Vector{Symbol}, alloc_vectors::Vector{AllocVecCall}, optimizable_dec_operators::Set{Symbol}, dimension::Int, stateeltype::DataType, code_target::AbstractGenerationTarget, preallocate::Bool)\n\nFunction that compiles the computation body. d is the input Decapode, inputs is a vector of state variables and literals, alloc_vec should be empty when passed in, optimizable_dec_operators is a collection of all DEC operator symbols that can use special in-place methods, dimension is the dimension of the problem (usually 1 or 2), stateeltype is the type of the state elements (usually Float32 or Float64), code_target determines what architecture the code is compiled for (either CPU or CUDA), and preallocate which is set to true by default and determines if intermediate results can be preallocated..\n\n\n\n\n\n","category":"method"},{"location":"api/#Decapodes.compile_env-Tuple{DiagrammaticEquations.decapodeacset.SummationDecapode, Vector{Symbol}, Set{Symbol}, Decapodes.AbstractGenerationTarget}","page":"Library Reference","title":"Decapodes.compile_env","text":"compile_env(d::SummationDecapode, dec_matrices::Vector{Symbol}, con_dec_operators::Set{Symbol}, code_target::AbstractGenerationTarget)\n\nThis creates the symbol to function linking for the simulation output. Those run through the default_dec backend expect both an in-place and an out-of-place variant in that order. User defined operations only support out-of-place.\n\n\n\n\n\n","category":"method"},{"location":"api/#Decapodes.gensim-Tuple{DiagrammaticEquations.decapodeacset.SummationDecapode, Vector{Symbol}}","page":"Library Reference","title":"Decapodes.gensim","text":"gensim(user_d::SummationDecapode, input_vars::Vector{Symbol}; dimension::Int=2, stateeltype::DataType = Float64, code_target::AbstractGenerationTarget = CPUTarget(), preallocate::Bool = true)\n\nGenerates the entire code body for the simulation function. The returned simulation function can then be combined with a mesh, provided by CombinatorialSpaces, and a function describing symbol to operator mappings to return a simulator that can be used to solve the represented equations given initial conditions.\n\nArguments:\n\nuser_d: The user passed Decapode for which simulation code will be generated. (This is not modified)\n\ninput_vars is the collection of variables whose values are known at the beginning of the simulation. (Defaults to all state variables and literals in the Decapode)\n\nKeyword arguments:\n\ndimension: The dimension of the problem. (Defaults to 2)(Must be 1 or 2)\n\nstateeltype: The element type of the state forms. (Defaults to Float64)(Must be Float32 or Float64)\n\ncode_target: The intended architecture target for the generated code. (Defaults to CPUTarget())(Use CUDATarget() for NVIDIA CUDA GPUs)\n\npreallocate: Enables(true)/disables(false) pre-allocated caches for intermediate computations. Some functions, such as those that determine Jacobian sparsity patterns, or perform auto-differentiation, may require this to be disabled. (Defaults to true)\n\nmultigrid: Enables multigrid methods during code generation. If true, then the function produced by gensim will expect a PrimalGeometricMapSeries. (Defaults to false)\n\n\n\n\n\n","category":"method"},{"location":"api/","page":"Library Reference","title":"Library Reference","text":"DocInfo.get_report(info) # hide","category":"page"},{"location":"harmonics/harmonics/#Harmonics-of-the-Sphere","page":"Harmonics","title":"Harmonics of the Sphere","text":"","category":"section"},{"location":"harmonics/harmonics/","page":"Harmonics","title":"Harmonics","text":"This page shows how to use Decapodes tooling to explore the harmonics of a discrete manifold. This isn't using any Decapodes specific code, but it is emblematic of a more advanced analysis you might want to do on your Decapode.","category":"page"},{"location":"harmonics/harmonics/","page":"Harmonics","title":"Harmonics","text":"In this case we are trying to visualize the roots of the Laplacian on a discrete manifold.","category":"page"},{"location":"harmonics/harmonics/","page":"Harmonics","title":"Harmonics","text":"Load the dependencies","category":"page"},{"location":"harmonics/harmonics/","page":"Harmonics","title":"Harmonics","text":"# Meshing:\nusing CombinatorialSpaces\nusing CoordRefSystems\nusing GeometryBasics: Point3\nconst Point3D = Point3{Float64};\n\n# Visualization:\nusing CairoMakie\n\n# Simulation:\nusing LinearAlgebra","category":"page"},{"location":"harmonics/harmonics/","page":"Harmonics","title":"Harmonics","text":"Load the mesh","category":"page"},{"location":"harmonics/harmonics/","page":"Harmonics","title":"Harmonics","text":"const RADIUS = 1.0\ns = loadmesh(Icosphere(3, RADIUS));\nsd = EmbeddedDeltaDualComplex2D{Bool, Float64, Point3D}(s);\nsubdivide_duals!(sd, Barycenter());","category":"page"},{"location":"harmonics/harmonics/","page":"Harmonics","title":"Harmonics","text":"Compute the Laplacian eigenvectors using LinearAlgebra.eigen. This requires making the sparse Laplacian matrix dense with collect. Alternatively, use Arpack.jl.","category":"page"},{"location":"harmonics/harmonics/","page":"Harmonics","title":"Harmonics","text":"Δ0 = -Δ(0,sd)\nλ = eigen(collect(Δ0))","category":"page"},{"location":"harmonics/harmonics/","page":"Harmonics","title":"Harmonics","text":"Let's check that our eigenvalues satisfy the right equation. The first eigenvector should be the kernel of the laplacian. So the following norm should be close to 0.","category":"page"},{"location":"harmonics/harmonics/","page":"Harmonics","title":"Harmonics","text":"q1 = λ.vectors[:,1]\nnorm(Δ0 *q1)","category":"page"},{"location":"harmonics/harmonics/","page":"Harmonics","title":"Harmonics","text":"The first eigenvector is boring to visualize, because it is constant. So we will make some plots of the second eigenvector. If you run this on the desktop, you can use GLMakie and get an interactive plot to explore. We will just draw two angles.","category":"page"},{"location":"harmonics/harmonics/","page":"Harmonics","title":"Harmonics","text":"q = λ.vectors[:,2]\nfig = Figure()\nLabel(fig[1, 1, Top()], \"Default Angle\", padding = (0, 0, 5, 0))\nax = LScene(fig[1,1], scenekw=(lights=[],))\nmsh = CairoMakie.mesh!(ax, s, color=q)\nColorbar(fig[1,2], msh, size=32)\n# Second Angle\nLabel(fig[2, 1, Top()], \"Bottom Angle\", padding = (0, 0, 5, 0))\nax = LScene(fig[2,1], scenekw=(lights=[],))\nupdate_cam!(ax.scene, Vec3f(-1/2,-1/2,1.0/2), Vec3f(1,1,1), Vec3f(0, 0, 1))\nmsh = CairoMakie.mesh!(ax, s, color=q)\nColorbar(fig[2,2], msh, size=32)\nfig","category":"page"},{"location":"harmonics/harmonics/","page":"Harmonics","title":"Harmonics","text":"q = λ.vectors[:,12]\nfig = Figure()\nLabel(fig[1, 1, Top()], \"Default Angle\", padding = (0, 0, 5, 0))\nax = LScene(fig[1,1], scenekw=(lights=[],))\nmsh = CairoMakie.mesh!(ax, s, color=q)\nColorbar(fig[1,2], msh, size=32)\n# Second Angle\nLabel(fig[2, 1, Top()], \"Bottom Angle\", padding = (0, 0, 5, 0))\nax = LScene(fig[2,1], scenekw=(lights=[],))\nupdate_cam!(ax.scene, Vec3f(-1/2,-1/2,1.0/2), Vec3f(1,1,1), Vec3f(0, 0, 1))\nmsh = CairoMakie.mesh!(ax, s, color=q)\nColorbar(fig[2,2], msh, size=32)\nfig","category":"page"},{"location":"harmonics/harmonics/#Exploring-solutions-with-Krylov-methods","page":"Harmonics","title":"Exploring solutions with Krylov methods","text":"","category":"section"},{"location":"harmonics/harmonics/","page":"Harmonics","title":"Harmonics","text":"We can also use the information about the eigenvectors for spectral techniques in solving the equations. Krylov methods are a bridge between linear solvers and spectral information.","category":"page"},{"location":"harmonics/harmonics/","page":"Harmonics","title":"Harmonics","text":"using Krylov\nb = zeros(nv(sd))\nb[1] = 1\nb[end] = -1\nx, stats = Krylov.gmres(Δ0, b, randn(nv(sd)), restart=true, memory=20, atol = 1e-10, rtol=1e-8, history=true, itmax=10000)\nx̂ = x .- sum(x)./length(x)\nnorm(x̂)\nstats\nnorm(Δ0*(x) - b)","category":"page"},{"location":"cism/cism/#Replicating-the-Community-Ice-Sheet-Model-v2.1-Halfar-Dome-Benchmark-with-Decapodes","page":"CISM v2.1","title":"Replicating the Community Ice Sheet Model v2.1 Halfar Dome Benchmark with Decapodes","text":"","category":"section"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"include(joinpath(Base.@__DIR__, \"..\", \"..\", \"docinfo.jl\"))\ninfo = DocInfo.Info()","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"The Decapodes framework takes high-level representations of physics equations and automatically generates solvers.","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"We do so by translating equations from vector calculus notation to the \"discrete exterior calculus\" (DEC). This process is roughly about recognizing whether physical quantities represent scalar or vector quantities, and recognizing whether differential operators represent gradient, divergence, and so on.","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"In this benchmark, we will implement the \"small slope approximation\" of glacial dynamics used by P. Halfar in his 1981 work \"On the dynamics of the ice sheets\" by taking his original formulation, translating it into the DEC, then providing a mesh and initial conditions.","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"The initial conditions used here are exactly those considered by W. H. Lipscomb et al. in \"Description And Evaluation of the Community Ice Sheet Model (CISM) v2.1\" (2019).","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"# AlgebraicJulia Dependencies\nusing Catlab\nusing CombinatorialSpaces\nusing Decapodes\nusing DiagrammaticEquations\n\n# External Dependencies\nusing BenchmarkTools\nusing CairoMakie\nusing ComponentArrays\nusing GeometryBasics: Point2, Point3\nusing JLD2\nusing LinearAlgebra\nusing MLStyle\nusing OrdinaryDiffEq\nusing SparseArrays\nusing Statistics\nPoint2D = Point2{Float64}\nPoint3D = Point3{Float64}\nnothing # hide","category":"page"},{"location":"cism/cism/#Specifying-and-Composing-Physics","page":"CISM v2.1","title":"Specifying and Composing Physics","text":"","category":"section"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"(Image: \"Halfar Equation 2\")","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"We will translate Halfar's equation into the DEC below. Although the equation given by Halfar is dense, this notation does not allow you to see which operators represent divergence, which components represent diffusivity constants, and so on. In the DEC, there is a small pool of operators, ⋆, d, ∧, ♯, and ♭, which combine according to set rules to encode all of these notions.","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"In the DEC, gradients are generalized by the exterior derivative \"d\". Given scalar-data, d gives the slope along edges in our mesh. Similarly, the operator (⋆, d, ⋆) generalizes divergence.","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"In Halfar's equation there is a term corresponding to the magnitude of the slope, but it is not clear where this quantity is to be defined. Is it a scalar-like quantity, or a vector-like quantity? In the DEC translation, we take the gradient of h, d(h), and use the \"sharp\" operator to define it on points in the domain, where we then take its magnitude. The \"wedge product\", ∧, takes care of multiplying a scalar-like quantity by a vector-like quantity.","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"Halfar's equation looks a little disjoint. It seems that the front most terms are responsible for computing some parameter, while the remaining terms on the right encode something about the dynamics. This is because Halfar's equation is actually describing two equations in one. The front-most term defines a quantity - depending on the strain of the ice - that controls the rate at which ice diffuses. Since this computation is rather separate from the rest of the computations involving our differential operators, we will call it \"Gamma\" here, and define it in a later component Decapode.","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"# Equation 2 from Halfar, P. ON THE DYNAMICS OF THE ICE SHEETS. (1981),\n# translated into the exterior calculus.\nhalfar_eq2 = @decapode begin\n h::Form0\n Γ::Form1\n n::Constant\n\n ḣ == ∂ₜ(h)\n ḣ == ∘(⋆, d, ⋆)(Γ * d(h) * avg₀₁(mag(♯(d(h)))^(n-1)) * avg₀₁(h^(n+2)))\nend\n\nto_graphviz(halfar_eq2)","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"(Image: \"Glen's Law\")","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"Here, we recognize that Gamma is in fact what glaciologists call \"Glen's Flow Law.\" It states that the strain rate of a sheet of ice can be related to applied stress via a power law. Below, we encode the formulation as it is usually given in the literature, depending explicitly on the gravitational constant, g.","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"# Equation 1 from Glen, J. W. THE FLOW LAW OF ICE: A discussion of the\n# assumptions made in glacier theory, their experimental foundations and\n# consequences. (1958)\nglens_law = @decapode begin\n Γ::Form1\n (A,ρ,g,n)::Constant\n \n Γ == (2/(n+2))*A*(ρ*g)^n\nend\n\nto_graphviz(glens_law)","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"We now need some way to compose these physics equations together. Since this physics is rather small, and there are no naming conflicts of physical quantities, this composition is also rather simple.","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"#####################\n# Compose the model #\n#####################\n\nice_dynamics_composition_diagram = @relation () begin\n dynamics(Γ,n)\n stress(Γ,n)\nend\ndraw_composition(ice_dynamics_composition_diagram)","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"# Plug in our Decapodes to the composition pattern.\nice_dynamics_cospan = oapply(ice_dynamics_composition_diagram,\n [Open(halfar_eq2, [:Γ,:n]),\n Open(glens_law, [:Γ,:n])])\n\nice_dynamics = apex(ice_dynamics_cospan)\nto_graphviz(ice_dynamics, verbose=false)","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"We have a representation of our composed physics. Now, we need to specify that these dynamics occur in 2 dimensions.","category":"page"},{"location":"cism/cism/#Providing-a-Semantics","page":"CISM v2.1","title":"Providing a Semantics","text":"","category":"section"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"# Interpret this multiphysics diagram in the 2D exterior calculus.\n\nice_dynamics2D = expand_operators(ice_dynamics)\ninfer_types!(ice_dynamics2D)\nresolve_overloads!(ice_dynamics2D)\nto_graphviz(ice_dynamics2D, verbose=false)","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"We are done encoding our dynamics. Now, we need to provide a mesh, initial data to use for our quantities, and what functions to use for our differential operators.","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"Our mesh library, CombinatorialSpaces, can interpret arbitrary .OBJ files to run our dynamics on. Here, we use a script that generates a triangulated grid of the resolution used in the CISM benchmark. Note though that the \"resolution\" of a triangulated and non-triangulated grid is difficult to directly compare.","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"s = triangulated_grid(60_000,100_000,2_000,2_000,Point3D)\nsd = EmbeddedDeltaDualComplex2D{Bool, Float64, Point3D}(s)\nsubdivide_duals!(sd, Barycenter())\nx̄ = mean(p -> p[1], point(sd))\nȳ = mean(p -> p[2], point(sd))\n\nfig = Figure()\nax = CairoMakie.Axis(fig[1,1], aspect=0.6, xticks = [0, 3e4, 6e4])\nwf = wireframe!(ax, sd; linewidth=0.5)\nsave(\"ice_mesh.png\", fig)\nnothing # hide","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"(Image: \"Wireframe of the Domain\")","category":"page"},{"location":"cism/cism/#Defining-input-data","page":"CISM v2.1","title":"Defining input data","text":"","category":"section"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"We replicate the initial conditions and parameter values used in the CISM benchmark.","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"# These are the initial conditions to the Halfar Dome test case that the\n# Community Ice Sheet Model uses.\nR₀ = 60_000 * sqrt(0.125)\nH = 2_000 * sqrt(0.125)\n\nn = 3\ng = 9.8101\nρ = 910\nalpha = 1/9\nbeta = 1/18\nflwa = 1e-16\nA = fill(1e-16, ne(sd))\n\nGamma = 2.0/(n+2) * flwa * (ρ * g)^n\nt0 = (beta/Gamma) * (7.0/4.0)^3 * (R₀^4 / H^7)\n\n# This is the analytic solution for comparison.\n# It is ported over from the CISM code for comparison's sake,\n# and we will use it to set initial conditions.\nfunction height_at_p(x,y,t)\n tr = (t + t0) / t0\n r = sqrt((x - x̄)^2 + (y - ȳ)^2)\n r = r/R₀\n inside = max(0.0, 1.0 - (r / tr^beta)^((n+1.0) / n))\n H * inside^(n / (2*n + 1)) / tr^alpha\nend\n\n# Set the initial conditions for ice sheet height:\n# Ice height is a primal 0-form. i.e. valued at vertices.\nh₀ = map(x -> height_at_p(x[1], x[2], 0), point(s))\nfig = Figure()\nax = CairoMakie.Axis(fig[1,1], aspect=0.6, xticks = [0, 3e4, 6e4])\nmsh = mesh!(ax, s, color=h₀, colormap=:jet)\nsave(\"ice_initial_conditions.png\", fig)\nnothing # hide","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"(Image: \"Initial Conditions\")","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"# Store these values to be passed to the solver.\nu₀ = ComponentArray(dynamics_h = h₀)\nconstants_and_parameters = (\n n = n,\n stress_ρ = ρ,\n stress_g = g,\n stress_A = A)","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"We provide here the mapping from symbols to differential operators. As more of the differential operators of the DEC are implemented, they are upstreamed to the Decapodes and CombinatorialSpaces libraries. Of course, users can also provide their own implementations of these operators and others as they see fit.","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"#############################################\n# Define how symbols map to Julia functions #\n#############################################\n\nfunction generate(sd, my_symbol; hodge=GeometricHodge())\n # We pre-allocate matrices that encode differential operators.\n op = @match my_symbol begin\n :mag => x -> norm.(x)\n :♯ => begin\n sharp_mat = ♯_mat(sd, AltPPSharp())\n x -> sharp_mat * x\n end\n x => error(\"Unmatched operator $my_symbol\")\n end\n return (args...) -> op(args...)\nend","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"The gensim function takes our high-level representation of the physics equations and produces compiled simulation code. It performs optimizations such as allocating memory for intermediate variables, and so on.","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"#######################\n# Generate simulation #\n#######################\n\nsim = eval(gensim(ice_dynamics2D))\nfₘ = sim(sd, generate)","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"Julia is a \"Just-In-Time\" compiled language. That means that functions are compiled the first time they are called, and later calls to those functions skip this step. To get a feel for just how fast this simulation is, we will run the dynamics twice, once for a very short timespan to trigger pre-compilation, and then again for the actual dynamics.","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"# Pre-compile simulation\n\n# Julia will pre-compile the generated simulation the first time it is run.\n@info(\"Precompiling Solver\")\n# We run for a short timespan to pre-compile.\nprob = ODEProblem(fₘ, u₀, (0, 1e-8), constants_and_parameters)\nsoln = solve(prob, Tsit5())\nsoln.retcode != :Unstable || error(\"Solver was not stable\")","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"# Run simulation\ntₑ = 200\n\n# This next run should be fast.\n@info(\"Solving\")\nprob = ODEProblem(fₘ, u₀, (0, tₑ), constants_and_parameters)\nsoln = solve(prob, Tsit5(), saveat=0.1)\n@show soln.retcode\n@info(\"Done\")","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"We can benchmark the compiled simulation with @benchmarkable. This macro runs many samples of the simulation function so we get an accurate estimate of the simulation time. The simulation time is quite fast compared to the CISM benchmarks. These results are run automatically via GitHub Actions as part of our docs build, which is not optimized for numerical simulations.","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"# Time the simulation\n\nb = @benchmarkable solve(prob, Tsit5(), saveat=0.1)\nc = run(b)","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"Here we save the solution information to a file.","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"@save \"ice_dynamics2D.jld2\" soln","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"We recall that these dynamics are of the \"shallow slope\" and \"shallow ice\" approximations. So, at the edge of our parabolic dome of ice, we expect increased error as the slope increases. On the interior of the dome, we expect the dynamics to match more closely that given by the analytic model. We will see that the CISM results likewise accumulate error in the same neighborhood.","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"(Image: \"Halfar Small Ice Approximation Quote\")","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"# Plot the final conditions\nfunction plot_final_conditions()\n fig = Figure()\n ax = CairoMakie.Axis(fig[1,1],\n title=\"Modeled thickness (m) at time 200.0\",\n aspect=0.6, xticks = [0, 3e4, 6e4])\n msh = mesh!(ax, s, color=soln(200.0).dynamics_h, colormap=:jet)\n Colorbar(fig[1,2], msh)\n fig\nend\nfig = plot_final_conditions()\nsave(\"ice_numeric_solution.png\", fig)\nnothing # hide","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"(Image: \"Numerical Solution\")","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"# Plot the final conditions according to the analytic solution.\nfunction plot_analytic()\n hₐ = map(x -> height_at_p(x[1], x[2], 200.0), point(s))\n fig = Figure()\n ax = CairoMakie.Axis(fig[1,1],\n title=\"Analytic thickness (m) at time 200.0\",\n aspect=0.6, xticks = [0, 3e4, 6e4])\n msh = mesh!(ax, s, color=hₐ, colormap=:jet)\n Colorbar(fig[1,2], msh)\n fig\nend\nfig = plot_analytic()\nsave(\"ice_analytic_solution.png\", fig)\nnothing # hide","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"(Image: \"Analytic Solution)","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"# Plot the error.\nfunction plot_error()\n hₐ = map(x -> height_at_p(x[1], x[2], 200.0), point(s))\n h_diff = soln(tₑ).dynamics_h - hₐ\n extrema(h_diff)\n fig = Figure()\n ax = CairoMakie.Axis(fig[1,1],\n title=\"Modeled thickness - Analytic thickness at time 200.0\",\n aspect=0.6, xticks = [0, 3e4, 6e4])\n msh = mesh!(ax, s, color=h_diff, colormap=:jet)\n Colorbar(fig[1,2], msh)\n fig\nend\nfig = plot_error()\nsave(\"ice_error.png\", fig)\nnothing # hide","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"(Image: \"Numeric Solution - Analytic Solution\")","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"We compute below that the maximum absolute error is approximately 89 meters. We observe that this error occurs exactly on the edge of the dome, which we expect given that this is where the \"shallow slope approximation\" breaks down, and the updates to our physical quantities should become more unstable. This pattern likewise occurs in the CISM benchmarks.","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"# Compute max absolute error:\nhₐ = map(x -> height_at_p(x[1], x[2], 200.0), point(s))\nh_diff = soln(tₑ).dynamics_h - hₐ\nmaximum(abs.(h_diff))","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"We compute root-mean-square (RMS) error as well, both over the entire domain, and excluding where the ice distribution is 0 in the analytic solution. This is done since considering the entire domain decreases the RMS while not telling you much about the area of interest. Note that the official CISM benchmark reports 6.43 and 9.06 RMS for their two solver implementations.","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"# Compute RMS not considering the \"outside\".\nhₐ = map(x -> height_at_p(x[1], x[2], 200.0), point(s))\nnonzeros = findall(!=(0), hₐ)\nh_diff = soln(tₑ).dynamics_h - hₐ\nrmse = sqrt(sum(map(x -> x*x, h_diff[nonzeros])) / length(nonzeros))","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"# Compute RMS of the entire domain.\nhₐ = map(x -> height_at_p(x[1], x[2], 200.0), point(s))\nh_diff = soln(tₑ).dynamics_h - hₐ\nrmse = sqrt(sum(map(x -> x*x, h_diff)) / length(h_diff))","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"# Create a gif\nbegin\n frames = 100\n fig = Figure()\n ax = CairoMakie.Axis(fig[1,1], aspect=0.6, xticks = [0, 3e4, 6e4])\n msh = mesh!(ax, s, color=soln(0).dynamics_h, colormap=:jet, colorrange=extrema(soln(tₑ).dynamics_h))\n Colorbar(fig[1,2], msh)\n record(fig, \"ice_dynamics_cism.gif\", range(0.0, tₑ; length=frames); framerate = 30) do t\n msh.color = soln(t).dynamics_h\n end\nend","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"(Image: \"Ice Dynamics)","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"For comparison's sake, we paste the results produced by CISM below. We observe that the error likewise accumulates around the edge of the dome, with more accurate predictions on the interior. We note that our simulation produces slight over-estimates on the interior, but there are further strategies that one can employ to increase accuracy, such as tweaking the error tolerance of the solver, and so on.","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"Not that since the DEC is based on triangulated meshes, the \"resolution\" of the CISM benchmark and the Decapodes implementation cannot be directly compared. An advantage of the DEC is that we do not need to operate on uniform grids. For example, you could construct a mesh that is finer along the dome edge, where you need more resolution, and coarser as you are farther away from the reach of the ice.","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"(Image: CISM Results)","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"We saw in this document how to create performant and accurate simulations in the Decapodes framework, and compared against the CISM library . Although we do not expect to be both more performant and accurate compared to every hand-crafted simulation, Decapodes makes up for this difference in terms of development time, flexibility, and composition. For example, the original implementation of the Decapodes shallow ice model took place over a couple of afternoons.","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"Since Decapodes targets high-level representations of physics, it is uniquely suited to incorporating knowledge from subject matter experts to increase simulation accuracy. This process does not require an ice dynamics expert to edit physics equations that have already been weaved into solver code.","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"Further improvements to the Decapodes library are made continuously. We are creating implementations of DEC operators that are constructed and execute faster. And we are in the beginning stages of 3D simulations using the DEC.","category":"page"},{"location":"cism/cism/","page":"CISM v2.1","title":"CISM v2.1","text":"DocInfo.get_report(info) # hide","category":"page"},{"location":"ice_dynamics/ice_dynamics/#Halfar's-model-of-glacial-flow","page":"Glacial Flow","title":"Halfar's model of glacial flow","text":"","category":"section"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"include(joinpath(Base.@__DIR__, \"..\", \"..\", \"docinfo.jl\"))\ninfo = DocInfo.Info()","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"Let's model glacial flow using a model of how ice height of a glacial sheet changes over time, from P. Halfar's 1981 paper: \"On the dynamics of the ice sheets\".","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"# AlgebraicJulia Dependencies\nusing Catlab\nusing CombinatorialSpaces\nusing DiagrammaticEquations\nusing Decapodes\n\n# External Dependencies\nusing CairoMakie\nusing ComponentArrays\nusing GeometryBasics: Point2, Point3\nusing JLD2\nusing LinearAlgebra\nusing MLStyle\nusing OrdinaryDiffEq\nusing SparseArrays\nusing Statistics\nPoint2D = Point2{Float64};\nPoint3D = Point3{Float64};","category":"page"},{"location":"ice_dynamics/ice_dynamics/#Defining-the-models","page":"Glacial Flow","title":"Defining the models","text":"","category":"section"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"The first step is to find a suitable equation for our model, and translate it into the Discrete Exterior Calculus. The Exterior Calculus is a generalization of vector calculus, so for low-dimensional spaces, this translation is straightforward. For example, divergence is typically written as (⋆, d, ⋆). Scalar fields are typically interpreted as \"0Forms\", i.e. values assigned to vertices of a mesh.","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"We use the @decapode macro to interpret the equations. Here, we have equation 2 from Halfar:","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"fracpartial hpartial t = frac2n + 2 (fracrho gA)^n fracpartialpartial x(fracpartial hpartial x fracpartial hpartial x ^n-1 h^n+2)","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"We'll change the term out front to Γ so we can demonstrate composition in a moment.","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"In the exterior calculus, we could write the above equations like so:","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"partial_t(h) = circ(star d star)(Gammaquad d(h)quad textavg_01d(h)^sharp^n-1 quad textavg_01(h^n+2))","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"avg here is an operator that performs the midpoint rule, setting the value at an edge to be the average of the values at its two vertices.","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"halfar_eq2 = @decapode begin\n h::Form0\n Γ::Form1\n n::Constant\n\n ḣ == ∂ₜ(h)\n ḣ == ∘(⋆, d, ⋆)(Γ * d(h) * avg₀₁(mag(♯(d(h)))^(n-1)) * avg₀₁(h^(n+2)))\nend\n\nto_graphviz(halfar_eq2)","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"And here, a formulation of Glen's law from J.W. Glen's 1958 \"The flow law of ice\".","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"glens_law = @decapode begin\n #Γ::Form0\n Γ::Form1\n (A,ρ,g,n)::Constant\n \n Γ == (2/(n+2))*A*(ρ*g)^n\nend\n\nto_graphviz(glens_law)","category":"page"},{"location":"ice_dynamics/ice_dynamics/#Composing-models","page":"Glacial Flow","title":"Composing models","text":"","category":"section"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"We can use operadic composition to specify how our models come together. In this example, we have two Decapodes, and two quantities that are shared between them.","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"ice_dynamics_composition_diagram = @relation () begin\n dynamics(Γ,n)\n stress(Γ,n)\nend\n\ndraw_composition(ice_dynamics_composition_diagram)","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"To a apply a composition, we specify which Decapodes to plug into those boxes, and what each calls the corresponding shared variables internally.","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"ice_dynamics_cospan = oapply(ice_dynamics_composition_diagram,\n [Open(halfar_eq2, [:Γ,:n]),\n Open(glens_law, [:Γ,:n])])\n\nice_dynamics = apex(ice_dynamics_cospan)\nto_graphviz(ice_dynamics)","category":"page"},{"location":"ice_dynamics/ice_dynamics/#Provide-a-semantics","page":"Glacial Flow","title":"Provide a semantics","text":"","category":"section"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"To interpret our composed Decapode, we need to specify what Discrete Exterior Calculus to interpret our quantities in. Let's choose the 1D Discrete Exterior Calculus:","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"ice_dynamics1D = expand_operators(ice_dynamics)\ninfer_types!(ice_dynamics1D, op1_inf_rules_1D, op2_inf_rules_1D)\nresolve_overloads!(ice_dynamics1D, op1_res_rules_1D, op2_res_rules_1D)\n\nto_graphviz(ice_dynamics1D)","category":"page"},{"location":"ice_dynamics/ice_dynamics/#Define-a-mesh","page":"Glacial Flow","title":"Define a mesh","text":"","category":"section"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"We'll need a mesh to simulate on. Since this is a 1D mesh, we can go ahead and make one right now:","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"# This is an empty 1D mesh.\ns = EmbeddedDeltaSet1D{Bool, Point2D}()\n\n# 20 vertices along a line, connected by edges.\nadd_vertices!(s, 20, point=Point2D.(range(0, 10_000, length=20), 0))\nadd_edges!(s, 1:nv(s)-1, 2:nv(s))\norient!(s)\n\n# The dual 1D mesh\nsd = EmbeddedDeltaDualComplex1D{Bool, Float64, Point2D}(s)\nsubdivide_duals!(sd, Circumcenter())","category":"page"},{"location":"ice_dynamics/ice_dynamics/#Define-input-data","page":"Glacial Flow","title":"Define input data","text":"","category":"section"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"We need initial conditions to use for our simulation.","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"n = 3\nρ = 910\ng = 9.8\nA = 1e-16\n\n# Ice height is a primal 0-form, with values at vertices.\n# We choose a distribution that obeys the shallow height and shallow slope conditions.\nh₀ = map(point(s)) do (x,_)\n ((7072-((x-5000)^2))/9e3+2777)/2777e-1\nend\n\n# Visualize initial conditions for ice sheet height.\nlines(map(x -> x[1], point(s)), h₀, linewidth=5)","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"We need to tell our Decapode which data maps to which symbols. We can wrap up our data like so:","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"u₀ = ComponentArray(dynamics_h=h₀)\n\nconstants_and_parameters = (\n n = n,\n stress_ρ = ρ,\n stress_g = g,\n stress_A = A)","category":"page"},{"location":"ice_dynamics/ice_dynamics/#Define-functions","page":"Glacial Flow","title":"Define functions","text":"","category":"section"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"In order to solve our equations, we will need numerical linear operators that give meaning to our symbolic operators. In the DEC, there are a handful of operators that one uses to construct all the usual vector calculus operations, namely: ♯, ♭, ∧, d, ⋆. The CombinatorialSpaces.jl library specifies many of these for us.","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"function generate(sd, my_symbol; hodge=GeometricHodge())\n op = @match my_symbol begin\n :♯ => x -> begin\n # This is an implementation of the \"sharp\" operator from the exterior\n # calculus, which takes co-vector fields to vector fields.\n # This could be up-streamed to the CombinatorialSpaces.jl library. (i.e.\n # this operation is not bespoke to this simulation.)\n e_vecs = map(edges(sd)) do e\n point(sd, sd[e, :∂v0]) - point(sd, sd[e, :∂v1])\n end\n neighbors = map(vertices(sd)) do v\n union(incident(sd, v, :∂v0), incident(sd, v, :∂v1))\n end\n n_vecs = map(neighbors) do es\n [e_vecs[e] for e in es]\n end\n map(neighbors, n_vecs) do es, nvs\n sum([nv*norm(nv)*x[e] for (e,nv) in zip(es,nvs)]) / sum(norm.(nvs))\n end\n end\n :mag => x -> norm.(x)\n x => error(\"Unmatched operator $my_symbol\")\n end\n return (args...) -> op(args...)\nend","category":"page"},{"location":"ice_dynamics/ice_dynamics/#Generate-the-simulation","page":"Glacial Flow","title":"Generate the simulation","text":"","category":"section"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"Now, we have everything we need to generate our simulation:","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"sim = eval(gensim(ice_dynamics1D, dimension=1))\nfₘ = sim(sd, generate)","category":"page"},{"location":"ice_dynamics/ice_dynamics/#Pre-compile-and-run","page":"Glacial Flow","title":"Pre-compile and run","text":"","category":"section"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"The first time that you run a function, Julia will pre-compile it, so that later runs will be fast. We'll solve our simulation for a short time span, to trigger this pre-compilation, and then run it.","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"@info(\"Precompiling Solver\")\nprob = ODEProblem(fₘ, u₀, (0, 1e-8), constants_and_parameters)\nsoln = solve(prob, Tsit5())\nsoln.retcode != :Unstable || error(\"Solver was not stable\")\n\ntₑ = 8_000\n\n# This next run should be fast.\n@info(\"Solving\")\nprob = ODEProblem(fₘ, u₀, (0, tₑ), constants_and_parameters)\nsoln = solve(prob, Tsit5())\n@show soln.retcode\n@info(\"Done\")","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"We can save our solution file in case we want to examine its contents when this Julia session ends.","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"@save \"ice_dynamics1D.jld2\" soln","category":"page"},{"location":"ice_dynamics/ice_dynamics/#Visualize","page":"Glacial Flow","title":"Visualize","text":"","category":"section"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"Let's examine the final conditions:","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"fig,ax,ob = lines(map(x -> x[1], point(s)), soln(tₑ).dynamics_h, linewidth=5)\nylims!(ax, extrema(h₀))\nfig","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"We see that our distribution converges to a more uniform ice height across our domain, which matches our physical intuition.","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"Let's create a GIF to examine an animation of these dynamics:","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"# Create a gif\nbegin\n frames = 100\n fig, ax, ob = lines(map(x -> x[1], point(s)), soln(0).dynamics_h)\n ylims!(ax, extrema(h₀))\n record(fig, \"ice_dynamics1D.gif\", range(0.0, tₑ; length=frames); framerate = 15) do t\n lines!(map(x -> x[1], point(s)), soln(t).dynamics_h)\n end\nend","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"(Image: IceDynamics1D)","category":"page"},{"location":"ice_dynamics/ice_dynamics/#2D-Re-interpretation","page":"Glacial Flow","title":"2D Re-interpretation","text":"","category":"section"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"The first, one-dimensional, semantics that we provided to our Decapode restricted the kinds of glacial sheets that we could model. (i.e. We could only look at glacial sheets which were constant along y). We can give our Decapode an alternate semantics, as some physics on a 2-dimensional manifold.","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"Note that for these physics, we make no adjustments to the underlying \"dimension-agnostic\" Decapode, we only provide a different set of rules for inferring what the type of each quantity is.","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"ice_dynamics2D = expand_operators(ice_dynamics)\ninfer_types!(ice_dynamics2D)\nresolve_overloads!(ice_dynamics2D)\n\nto_graphviz(ice_dynamics2D)","category":"page"},{"location":"ice_dynamics/ice_dynamics/#Store-as-JSON","page":"Glacial Flow","title":"Store as JSON","text":"","category":"section"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"We quickly demonstrate how to serialize a Decapode to JSON and read it back in:","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"write_json_acset(ice_dynamics2D, \"ice_dynamics2D.json\")","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"You can view the JSON file here.","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"# When reading back in, we specify that all attributes are \"Symbol\"s.\nice_dynamics2 = read_json_acset(SummationDecapode{Symbol,Symbol,Symbol}, \"ice_dynamics2D.json\")\n# Or, you could choose to interpret the data as \"String\"s.\nice_dynamics3 = read_json_acset(SummationDecapode{String,String,String}, \"ice_dynamics2D.json\")\n\nto_graphviz(ice_dynamics3)","category":"page"},{"location":"ice_dynamics/ice_dynamics/#Define-our-mesh","page":"Glacial Flow","title":"Define our mesh","text":"","category":"section"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"s = triangulated_grid(10_000,10_000,800,800,Point3D)\nsd = EmbeddedDeltaDualComplex2D{Bool, Float64, Point3D}(s)\nsubdivide_duals!(sd, Barycenter())\n\nfig = Figure()\nax = CairoMakie.Axis(fig[1,1])\nwf = wireframe!(ax, s)\nfig","category":"page"},{"location":"ice_dynamics/ice_dynamics/#Define-our-input-data","page":"Glacial Flow","title":"Define our input data","text":"","category":"section"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"n = 3\nρ = 910\ng = 9.8\nA = 1e-16\n\n# Ice height is a primal 0-form, with values at vertices.\nh₀ = map(point(s)) do (x,y)\n (7072-((x-5000)^2 + (y-5000)^2)^(1/2))/9e3+10\nend\n\n# Visualize initial condition for ice sheet height.\nmesh(s, color=h₀, colormap=:jet)\nfig = Figure()\nax = CairoMakie.Axis(fig[1,1])\nmsh = mesh!(ax, s, color=h₀, colormap=:jet)\nColorbar(fig[1,2], msh)\nfig","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"u₀ = ComponentArray(dynamics_h=h₀)\n\nconstants_and_parameters = (\n n = n,\n stress_ρ = ρ,\n stress_g = g,\n stress_A = A)","category":"page"},{"location":"ice_dynamics/ice_dynamics/#Define-our-functions","page":"Glacial Flow","title":"Define our functions","text":"","category":"section"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"function generate(sd, my_symbol; hodge=GeometricHodge())\n op = @match my_symbol begin\n :♯ => begin\n sharp_mat = ♯_mat(sd, AltPPSharp())\n x -> sharp_mat * x\n end\n :mag => x -> norm.(x)\n x => error(\"Unmatched operator $my_symbol\")\n end\n return (args...) -> op(args...)\nend","category":"page"},{"location":"ice_dynamics/ice_dynamics/#Generate-simulation","page":"Glacial Flow","title":"Generate simulation","text":"","category":"section"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"sim = eval(gensim(ice_dynamics2D, dimension=2))\nfₘ = sim(sd, generate)","category":"page"},{"location":"ice_dynamics/ice_dynamics/#Pre-compile-and-run-2D","page":"Glacial Flow","title":"Pre-compile and run 2D","text":"","category":"section"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"@info(\"Precompiling Solver\")\n# We run for a short timespan to pre-compile.\nprob = ODEProblem(fₘ, u₀, (0, 1e-8), constants_and_parameters)\nsoln = solve(prob, Tsit5())\nsoln.retcode != :Unstable || error(\"Solver was not stable\")","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"tₑ = 5e13\n\n@info(\"Solving\")\nprob = ODEProblem(fₘ, u₀, (0, tₑ), constants_and_parameters)\nsoln = solve(prob, Tsit5())\n@show soln.retcode\n@info(\"Done\")","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"@save \"ice_dynamics2D.jld2\" soln","category":"page"},{"location":"ice_dynamics/ice_dynamics/#Visualize-2D","page":"Glacial Flow","title":"Visualize 2D","text":"","category":"section"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"# Final conditions:\nfig = Figure()\nax = CairoMakie.Axis(fig[1,1])\nmsh = mesh!(ax, s, color=soln(tₑ).dynamics_h, colormap=:jet, colorrange=extrema(soln(0).dynamics_h))\nColorbar(fig[1,2], msh)\nfig","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"begin\n frames = 100\n fig = Figure()\n ax = CairoMakie.Axis(fig[1,1])\n msh = CairoMakie.mesh!(ax, s, color=soln(0).dynamics_h, colormap=:jet, colorrange=extrema(soln(0).dynamics_h))\n Colorbar(fig[1,2], msh)\n record(fig, \"ice_dynamics2D.gif\", range(0.0, tₑ; length=frames); framerate = 15) do t\n msh.color = soln(t).dynamics_h\n end\nend","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"(Image: IceDynamics2D)","category":"page"},{"location":"ice_dynamics/ice_dynamics/#2-Manifold-in-3D","page":"Glacial Flow","title":"2-Manifold in 3D","text":"","category":"section"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"We note that just because our physics is happening on a 2-manifold, (a surface), this doesn't restrict us to the 2D plane. In fact, we can \"embed\" our 2-manifold in 3D space to simulate a glacial sheets spread across the globe.","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"s = loadmesh(Icosphere(3, 10_000))\nsd = EmbeddedDeltaDualComplex2D{Bool, Float64, Point3D}(s)\nsubdivide_duals!(sd, Barycenter())\nwireframe(sd)","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"n = 3\nρ = 910\ng = 9.8\nA = 1e-16\n\n# Ice height is a primal 0-form, with values at vertices.\nh₀ = map(point(s)) do (x,y,z)\n (z*z)/(10_000*10_000)\nend\n\n# Visualize initial condition for ice sheet height.\n# There is lots of ice at the poles, and no ice at the equator.\nfig = Figure()\nax = LScene(fig[1,1], scenekw=(lights=[],))\nmsh = CairoMakie.mesh!(ax, s, color=h₀, colormap=:jet)\nColorbar(fig[1,2], msh)\nfig","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"u₀ = ComponentArray(dynamics_h=h₀)\n\nconstants_and_parameters = (\n n = n,\n stress_ρ = ρ,\n stress_g = g,\n stress_A = A)","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"sim = eval(gensim(ice_dynamics2D, dimension=2))\nfₘ = sim(sd, generate)","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"For brevity's sake, we'll skip the pre-compilation cell.","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"tₑ = 5e25\n\n@info(\"Solving\")\nprob = ODEProblem(fₘ, u₀, (0, tₑ), constants_and_parameters)\nsoln = solve(prob, Tsit5())\n@show soln.retcode\n@info(\"Done\")\n\n# Compare the extrema of the initial and final conditions of ice height.\nextrema(soln(0).dynamics_h), extrema(soln(tₑ).dynamics_h)","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"fig = Figure()\nax = LScene(fig[1,1], scenekw=(lights=[],))\nmsh = CairoMakie.mesh!(ax, s, color=soln(tₑ).dynamics_h, colormap=:jet, colorrange=extrema(soln(0).dynamics_h))\nColorbar(fig[1,2], msh)\nfig","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"begin\n frames = 200\n fig = Figure()\n ax = LScene(fig[1,1], scenekw=(lights=[],))\n msh = CairoMakie.mesh!(ax, s, color=soln(0).dynamics_h, colormap=:jet, colorrange=extrema(soln(0).dynamics_h))\n\n Colorbar(fig[1,2], msh)\n # These particular initial conditions diffuse quite quickly, so let's just look at\n # the first moments of those dynamics.\n record(fig, \"ice_dynamics2D_sphere.gif\", range(0.0, tₑ/64; length=frames); framerate = 20) do t\n msh.color = soln(t).dynamics_h\n end\nend","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"(Image: IceDynamics2DSphere)","category":"page"},{"location":"ice_dynamics/ice_dynamics/","page":"Glacial Flow","title":"Glacial Flow","text":"DocInfo.get_report(info) # hide","category":"page"},{"location":"ch/cahn-hilliard/#The-Cahn-Hilliard-Equation","page":"Cahn-Hilliard","title":"The Cahn-Hilliard Equation","text":"","category":"section"},{"location":"ch/cahn-hilliard/","page":"Cahn-Hilliard","title":"Cahn-Hilliard","text":"include(joinpath(Base.@__DIR__, \"..\", \"..\", \"docinfo.jl\"))\ninfo = DocInfo.Info()","category":"page"},{"location":"ch/cahn-hilliard/","page":"Cahn-Hilliard","title":"Cahn-Hilliard","text":"For this example, Decapodes will model the Cahn-Hilliard equation. This equation describes the evolution of a binary fluid as its two phases separate out into distinct domains. Below is a high resolution preview of this model. Notice how the fluid has separated into distinct regions (blue and red) as well as the presence of a transition region.","category":"page"},{"location":"ch/cahn-hilliard/","page":"Cahn-Hilliard","title":"Cahn-Hilliard","text":"(Image: \"Cahn Hilliard sample\")","category":"page"},{"location":"ch/cahn-hilliard/#Formulating-the-Equation","page":"Cahn-Hilliard","title":"Formulating the Equation","text":"","category":"section"},{"location":"ch/cahn-hilliard/","page":"Cahn-Hilliard","title":"Cahn-Hilliard","text":"We first load in our dependencies","category":"page"},{"location":"ch/cahn-hilliard/","page":"Cahn-Hilliard","title":"Cahn-Hilliard","text":"# AlgebraicJulia Dependencies\nusing Catlab\nusing CombinatorialSpaces\nusing Decapodes\nusing DiagrammaticEquations\n\n# External Dependencies\nusing CairoMakie\nusing ComponentArrays\nusing GeometryBasics\nusing LinearAlgebra\nusing MLStyle\nusing OrdinaryDiffEq\nusing Random\nPoint3D = Point3{Float64};\nnothing #hide","category":"page"},{"location":"ch/cahn-hilliard/","page":"Cahn-Hilliard","title":"Cahn-Hilliard","text":"and then proceed to describe our physics using Decapodes.","category":"page"},{"location":"ch/cahn-hilliard/","page":"Cahn-Hilliard","title":"Cahn-Hilliard","text":"CahnHilliard = @decapode begin\n C::Form0\n (D, γ)::Constant\n ∂ₜ(C) == D * Δ(C.^3 - C - γ * Δ(C))\nend\n\nto_graphviz(CahnHilliard)","category":"page"},{"location":"ch/cahn-hilliard/","page":"Cahn-Hilliard","title":"Cahn-Hilliard","text":"In this equation C will represent the concentration of the binary fluid, ranging from -1 to 1 to differentiate between different phases. We also have a diffusion constant D and a constant γ whose square root is the length of the transition regions. This formulation of the Cahn-Hilliard equation was drawn from the Wikipedia page on the topic found here.","category":"page"},{"location":"ch/cahn-hilliard/#Loading-the-Data","page":"Cahn-Hilliard","title":"Loading the Data","text":"","category":"section"},{"location":"ch/cahn-hilliard/","page":"Cahn-Hilliard","title":"Cahn-Hilliard","text":"We now generate the mesh information. We'll run the equation on a triangulated grid. We hide the mesh visualization code for clarity.","category":"page"},{"location":"ch/cahn-hilliard/","page":"Cahn-Hilliard","title":"Cahn-Hilliard","text":"s = triangulated_grid(100, 100, 0.5, 0.5, Point3D);\nsd = EmbeddedDeltaDualComplex2D{Bool, Float64, Point3D}(s);\nsubdivide_duals!(sd, Circumcenter());\nfig = Figure() # hide\nax = CairoMakie.Axis(fig[1,1], aspect=1) # hide\nwf = wireframe!(ax, s; linewidth=1) # hide\nsave(\"CahnHilliard_Rect.png\", fig) # hide\nnothing # hide","category":"page"},{"location":"ch/cahn-hilliard/","page":"Cahn-Hilliard","title":"Cahn-Hilliard","text":"(Image: \"CahnHilliardRect\")","category":"page"},{"location":"ch/cahn-hilliard/","page":"Cahn-Hilliard","title":"Cahn-Hilliard","text":"The Cahn-Hilliard equation starts with a random concentration holding values between -1 and 1. For both D and γ constants we choose 0.5.","category":"page"},{"location":"ch/cahn-hilliard/","page":"Cahn-Hilliard","title":"Cahn-Hilliard","text":"Random.seed!(0)\n\nC = rand(Float64, nv(sd)) * 2 .- 1\nu₀ = ComponentArray(C=C)\nconstants = (D = 0.5, γ = 0.5);\n\nfig = Figure() # hide\nax = CairoMakie.Axis(fig[1,1], aspect=1) # hide\nmsh = CairoMakie.mesh!(ax, s, color=C, colormap=:jet, colorrange=extrema(C)) # hide\nColorbar(fig[1,2], msh)\nsave(\"CahnHilliard_initial.png\", fig) # hide\nnothing # hide","category":"page"},{"location":"ch/cahn-hilliard/","page":"Cahn-Hilliard","title":"Cahn-Hilliard","text":"(Image: \"Initial conditions\")","category":"page"},{"location":"ch/cahn-hilliard/","page":"Cahn-Hilliard","title":"Cahn-Hilliard","text":"We'll now create the simulation code representing the Cahn-Hilliard equation. We pass nothing in the second argument to sim since we have no custom functions to pass in.","category":"page"},{"location":"ch/cahn-hilliard/","page":"Cahn-Hilliard","title":"Cahn-Hilliard","text":"sim = eval(gensim(CahnHilliard))\nfₘ = sim(sd, nothing, DiagonalHodge());","category":"page"},{"location":"ch/cahn-hilliard/#Getting-the-Solution","page":"Cahn-Hilliard","title":"Getting the Solution","text":"","category":"section"},{"location":"ch/cahn-hilliard/","page":"Cahn-Hilliard","title":"Cahn-Hilliard","text":"Now that everything is set up and ready, we can solve the equation. We run the simulation for 200 time units to see the long-term evolution of the fluid. Note we only save the solution at intervals of 0.1 time units in order to reduce the memory-footprint of the solve.","category":"page"},{"location":"ch/cahn-hilliard/","page":"Cahn-Hilliard","title":"Cahn-Hilliard","text":"tₑ = 200\nprob = ODEProblem(fₘ, u₀, (0, tₑ), constants)\nsoln = solve(prob, Tsit5(), saveat=0.1);\nsoln.retcode","category":"page"},{"location":"ch/cahn-hilliard/","page":"Cahn-Hilliard","title":"Cahn-Hilliard","text":"And we can see the result as a gif.","category":"page"},{"location":"ch/cahn-hilliard/","page":"Cahn-Hilliard","title":"Cahn-Hilliard","text":"function create_gif(solution, file_name)\n frames = 200\n fig = Figure()\n ax = CairoMakie.Axis(fig[1,1])\n msh = CairoMakie.mesh!(ax, s, color=solution(0).C, colormap=:jet, colorrange=extrema(solution(0).C))\n Colorbar(fig[1,2], msh)\n CairoMakie.record(fig, file_name, range(0.0, tₑ; length=frames); framerate = 15) do t\n msh.color = solution(t).C\n end\nend\ncreate_gif(soln, \"CahnHilliard_Rect.gif\")","category":"page"},{"location":"ch/cahn-hilliard/","page":"Cahn-Hilliard","title":"Cahn-Hilliard","text":"(Image: \"CahnHilliardRes\")","category":"page"},{"location":"ch/cahn-hilliard/","page":"Cahn-Hilliard","title":"Cahn-Hilliard","text":"DocInfo.get_report(info) # hide","category":"page"},{"location":"nhs/nhs_lite/#Implement-Oceananigans.jl's-NonhydrostaticModel-in-the-Discrete-Exterior-Calculus","page":"NHS","title":"Implement Oceananigans.jl's NonhydrostaticModel in the Discrete Exterior Calculus","text":"","category":"section"},{"location":"nhs/nhs_lite/","page":"NHS","title":"NHS","text":"include(joinpath(Base.@__DIR__, \"..\", \"..\", \"docinfo.jl\"))\ninfo = DocInfo.Info()","category":"page"},{"location":"nhs/nhs_lite/","page":"NHS","title":"NHS","text":"Let's use Decapodes to implement the NonhydrostaticModel from Oceananigans.jl. We will take the opportunity to demonstrate how we can use our \"algebra of model compositions\" to encode certain guarantees on the models we generate. We will use the 2D Turbulence as a guiding example, and use only equations found in the Oceananigans docs to construct our model.","category":"page"},{"location":"nhs/nhs_lite/","page":"NHS","title":"NHS","text":"The full code that generated these results is available in a julia script.","category":"page"},{"location":"nhs/nhs_lite/","page":"NHS","title":"NHS","text":"# AlgebraicJulia Dependencies\nusing Catlab\nusing CombinatorialSpaces\nusing Decapodes\nusing DiagrammaticEquations\n\n# External Dependencies\nusing CairoMakie\nusing ComponentArrays\nusing Downloads\nusing GeometryBasics: Point3\nusing JLD2\nusing LinearAlgebra\nusing MLStyle\nusing OrdinaryDiffEq\nPoint3D = Point3{Float64};\nnothing # hide","category":"page"},{"location":"nhs/nhs_lite/#Specify-our-models","page":"NHS","title":"Specify our models","text":"","category":"section"},{"location":"nhs/nhs_lite/","page":"NHS","title":"NHS","text":"This is Equation 1: \"The momentum conservation equation\". This is the first formulation of mutual advection (of v along V, and V along v) that we could find in the exterior calculus.","category":"page"},{"location":"nhs/nhs_lite/","page":"NHS","title":"NHS","text":"momentum = @decapode begin\n (v,V)::DualForm1\n f::Form0\n uˢ::DualForm1\n ∂tuˢ::DualForm1\n p::DualForm0\n b::DualForm0\n ĝ::DualForm1\n Fᵥ::DualForm1\n StressDivergence::DualForm1\n\n ∂ₜ(v) ==\n -ℒ₁(v,v) + 0.5*d(ι₁₁(v,v)) -\n d(ι₁₁(v,V)) + ι₁₂(v,d(V)) + ι₁₂(V,d(v)) -\n (f - ∘(d,⋆)(uˢ)) ∧ᵖᵈ₀₁ v -\n d(p) +\n b ∧ᵈᵈ₀₁ ĝ -\n StressDivergence +\n ∂tuˢ +\n Fᵥ\nend\nto_graphviz(momentum)","category":"page"},{"location":"nhs/nhs_lite/","page":"NHS","title":"NHS","text":"Why did we write \"StressDivergence\" instead of ∇⋅τ, as in the linked equation? According to this docs page, the user makes a selection of what model to insert in place of the term ∇⋅τ. For example, in the isotropic case, Oceananigans.jl replaces this term with: ∇⋅τ = νΔv. Thus, we write StressDivergence, and replace this term with a choice of \"turbulence closure\" model. Using the \"constant isotropic diffusivity\" case, we can operate purely in terms of scalar-valued forms.","category":"page"},{"location":"nhs/nhs_lite/","page":"NHS","title":"NHS","text":"This is Equation 2: \"The tracer conservation equation\".","category":"page"},{"location":"nhs/nhs_lite/","page":"NHS","title":"NHS","text":"tracer_conservation = @decapode begin\n (c,C,F,FluxDivergence)::DualForm0\n (v,V)::DualForm1\n\n ∂ₜ(c) ==\n -1*ι₁₁(v,d(c)) -\n ι₁₁(V,d(c)) -\n ι₁₁(v,d(C)) -\n FluxDivergence +\n F\nend\nto_graphviz(tracer_conservation)","category":"page"},{"location":"nhs/nhs_lite/","page":"NHS","title":"NHS","text":"This is Equation 2: \"Linear equation of state\" of seawater buoyancy.","category":"page"},{"location":"nhs/nhs_lite/","page":"NHS","title":"NHS","text":"equation_of_state = @decapode begin\n (b,T,S)::DualForm0\n (g,α,β)::Constant\n\n b == g*(α*T - β*S)\nend\nto_graphviz(equation_of_state)","category":"page"},{"location":"nhs/nhs_lite/","page":"NHS","title":"NHS","text":"This is Equation 2: \"Constant isotropic diffusivity\".","category":"page"},{"location":"nhs/nhs_lite/","page":"NHS","title":"NHS","text":"isotropic_diffusivity = @decapode begin\n v::DualForm1\n c::DualForm0\n StressDivergence::DualForm1\n FluxDivergence::DualForm0\n (κ,nu)::Constant\n\n StressDivergence == nu*Δᵈ₁(v)\n FluxDivergence == κ*Δᵈ₀(c)\nend\nto_graphviz(isotropic_diffusivity)","category":"page"},{"location":"nhs/nhs_lite/#Compatibility-Guarantees-via-Operadic-Composition","page":"NHS","title":"Compatibility Guarantees via Operadic Composition","text":"","category":"section"},{"location":"nhs/nhs_lite/","page":"NHS","title":"NHS","text":"Decapodes composition is formally known as an \"operad algebra\". That means that we don't have to encode our composition in a single undirected wiring diagram (UWD) and then apply it. Rather, we can define several UWDs, compose those, and then apply those. Of course, since the output of oapply is another Decapode, we could perform an intermediate oapply, if that is convenient.","category":"page"},{"location":"nhs/nhs_lite/","page":"NHS","title":"NHS","text":"Besides it being convenient to break apart large UWDs into component UWDs, this hierarchical composition can enforce rules on our physical quantities.","category":"page"},{"location":"nhs/nhs_lite/","page":"NHS","title":"NHS","text":"For example:","category":"page"},{"location":"nhs/nhs_lite/","page":"NHS","title":"NHS","text":"We want all the tracers (salinity, temperature, etc.) in our physics to obey the same conservation equation.\nWe want them to obey the same \"turbulence closure\", which affects their flux-divergence term.\nAt the same time, a choice of turbulence closure doesn't just affect (each of) the flux-divergence terms, it also constrains which stress-divergence is physically valid in the momentum equation.","category":"page"},{"location":"nhs/nhs_lite/","page":"NHS","title":"NHS","text":"We will use our operad algebra to guarantee model compatibility and physical consistency, guarantees that would be burdensome to fit into a one-off type system.","category":"page"},{"location":"nhs/nhs_lite/","page":"NHS","title":"NHS","text":"Here, we specify the equations that any tracer obeys:","category":"page"},{"location":"nhs/nhs_lite/","page":"NHS","title":"NHS","text":"tracer_composition = @relation () begin\n # \"The turbulence closure selected by the user determines the form of ... diffusive flux divergence\"\n turbulence(FD,v,c)\n\n continuity(FD,v,c)\nend\ndraw_composition(tracer_composition)","category":"page"},{"location":"nhs/nhs_lite/","page":"NHS","title":"NHS","text":"Let's \"lock in\" isotropic diffusivity by doing an intermediate oapply.","category":"page"},{"location":"nhs/nhs_lite/","page":"NHS","title":"NHS","text":"isotropic_tracer = apex(oapply(tracer_composition, [\n Open(isotropic_diffusivity, [:FluxDivergence, :v, :c]),\n Open(tracer_conservation, [:FluxDivergence, :v, :c])]))\nto_graphviz(isotropic_tracer)","category":"page"},{"location":"nhs/nhs_lite/","page":"NHS","title":"NHS","text":"Let's use this building-block tracer physics at the next level. The quotes that appear in this composition diagram appear directly in the Oceananigans.jl docs.","category":"page"},{"location":"nhs/nhs_lite/","page":"NHS","title":"NHS","text":"nonhydrostatic_composition = @relation () begin\n # \"The turbulence closure selected by the user determines the form of stress divergence\"\n # => Note that the StressDivergence term, SD, is shared by momentum and all the tracers.\n momentum(V, v, b, SD)\n\n # \"Both T and S obey the tracer conservation equation\"\n # => Temperature and Salinity both receive a copy of the tracer physics.\n temperature(V, v, T, SD, nu)\n salinity(V, v, S, SD, nu)\n\n # \"Buoyancy is determined from a linear equation of state\"\n # => The b term in momentum is that described by the equation of state here.\n eos(b, T, S)\nend\ndraw_composition(nonhydrostatic_composition)","category":"page"},{"location":"nhs/nhs_lite/","page":"NHS","title":"NHS","text":"isotropic_nonhydrostatic_buoyancy = apex(oapply(nonhydrostatic_composition, [\n Open(momentum, [:V, :v, :b, :StressDivergence]),\n Open(isotropic_tracer, [:continuity_V, :v, :c, :turbulence_StressDivergence, :turbulence_nu]),\n Open(isotropic_tracer, [:continuity_V, :v, :c, :turbulence_StressDivergence, :turbulence_nu]),\n Open(equation_of_state, [:b, :T, :S])]));\nto_graphviz(isotropic_nonhydrostatic_buoyancy)","category":"page"},{"location":"nhs/nhs_lite/#Our-Mesh","page":"NHS","title":"Our Mesh","text":"","category":"section"},{"location":"nhs/nhs_lite/","page":"NHS","title":"NHS","text":"We execute these dynamics on the torus explicitly, instead of using a square with periodic boundary conditions.","category":"page"},{"location":"nhs/nhs_lite/","page":"NHS","title":"NHS","text":"# This is a torus with resolution of its dual mesh similar to that\n# used by Oceananigans (explicitly represented as a torus, not as a\n# square with periodic boundary conditions!)\nDownloads.download(\"https://cise.ufl.edu/~luke.morris/torus.obj\", \"torus.obj\")\ns = EmbeddedDeltaSet2D(\"torus.obj\")\nsd = EmbeddedDeltaDualComplex2D{Bool,Float64,Point3D}(s)\nsubdivide_duals!(sd, Barycenter())\nfig = Figure() # hide\nax = CairoMakie.Axis(fig[1,1], aspect=1) # hide\nwf = wireframe!(ax, s; linewidth=1) # hide\nsave(\"NHS_mesh.png\", fig) # hide\nnothing # hide","category":"page"},{"location":"nhs/nhs_lite/","page":"NHS","title":"NHS","text":"(Image: \"NHS_torus\")","category":"page"},{"location":"nhs/nhs_lite/#Results","page":"NHS","title":"Results","text":"","category":"section"},{"location":"nhs/nhs_lite/","page":"NHS","title":"NHS","text":"In the DEC, vorticity is encoded with d⋆, and speed can be encoded with norm ♯. We can use our operators from CombinatorialSpaces.jl to create our GIFs.","category":"page"},{"location":"nhs/nhs_lite/","page":"NHS","title":"NHS","text":"(Image: Vorticity)","category":"page"},{"location":"nhs/nhs_lite/","page":"NHS","title":"NHS","text":"(Image: Speed)","category":"page"},{"location":"nhs/nhs_lite/","page":"NHS","title":"NHS","text":"DocInfo.get_report(info) # hide","category":"page"},{"location":"poiseuille/poiseuille/#Poissuille-Flow-for-Fluid-Mechanics","page":"Pipe Flow","title":"Poissuille Flow for Fluid Mechanics","text":"","category":"section"},{"location":"poiseuille/poiseuille/","page":"Pipe Flow","title":"Pipe Flow","text":"include(joinpath(Base.@__DIR__, \"..\", \"..\", \"docinfo.jl\"))\ninfo = DocInfo.Info()","category":"page"},{"location":"poiseuille/poiseuille/","page":"Pipe Flow","title":"Pipe Flow","text":"When modeling a fluid flowing in a pipe, one can ignore the multidimensional structure of the pipe and approximate the system as a 1 dimensional flow along the pipe. The no-slip boundary condition and the geometry of the pipe enter a 1D equation in the form of a resistance term.","category":"page"},{"location":"poiseuille/poiseuille/","page":"Pipe Flow","title":"Pipe Flow","text":"using Catlab\nusing CombinatorialSpaces\nusing DiagrammaticEquations\nusing Decapodes\n\n# Julia community libraries\nusing CairoMakie\nusing GeometryBasics: Point3\nusing LinearAlgebra\nusing OrdinaryDiffEq\nPoint3D = Point3{Float64}\nnothing # hide","category":"page"},{"location":"poiseuille/poiseuille/#Creating-the-Poiseuille-Equations","page":"Pipe Flow","title":"Creating the Poiseuille Equations","text":"","category":"section"},{"location":"poiseuille/poiseuille/","page":"Pipe Flow","title":"Pipe Flow","text":"The @decapode macro creates the data structure representing the equations of Poiseuille flow. The first block declares variables, the second block defines intermediate terms and the last block is the core equation.","category":"page"},{"location":"poiseuille/poiseuille/","page":"Pipe Flow","title":"Pipe Flow","text":"For these physics, μ̃ represents the negative viscosity per unit area while R represents the drag of the pipe boundary.","category":"page"},{"location":"poiseuille/poiseuille/","page":"Pipe Flow","title":"Pipe Flow","text":"Poise = @decapode begin\n P::Form0\n q::Form1\n (R, μ̃ )::Constant\n\n # Laplacian of q for the viscous effect\n Δq == Δ(q)\n # Gradient of P for the pressure driving force\n ∇P == d(P)\n\n # Definition of the time derivative of q\n ∂ₜ(q) == q̇\n\n # The core equation\n q̇ == μ̃ * ∂q(Δq) + ∇P + R * q\nend\n\nPoise = expand_operators(Poise)\ninfer_types!(Poise, op1_inf_rules_1D, op2_inf_rules_1D)\nresolve_overloads!(Poise, op1_res_rules_1D, op2_res_rules_1D)\nto_graphviz(Poise)","category":"page"},{"location":"poiseuille/poiseuille/#Defining-the-Semantics","page":"Pipe Flow","title":"Defining the Semantics","text":"","category":"section"},{"location":"poiseuille/poiseuille/","page":"Pipe Flow","title":"Pipe Flow","text":"In order to solve our equations, we will need numerical linear operators that give meaning to our symbolic operators. The generate function below assigns the necessary matrices as definitions for the symbols. In order to define the viscosity effect correctly we have to identify boundary edges and apply a mask. This is because the DEC has discrete dual cells at the boundaries that need to be handled specially for the viscosity term. We found empirically that if you allow nonzero viscosity at the boundary edges, the flows at the boundaries will be incorrect. You can find the file for boundary conditions here.","category":"page"},{"location":"poiseuille/poiseuille/","page":"Pipe Flow","title":"Pipe Flow","text":"using MLStyle\ninclude(\"../boundary_helpers.jl\")\n\nfunction generate(sd, my_symbol; hodge=GeometricHodge())\n op = @match my_symbol begin\n :∂q => x -> begin\n x[boundary_edges(sd)] .= 0\n x\n end\n :∂ρ => ρ -> begin\n ρ[1] = 0\n ρ[end] = 0\n ρ\n end\n x => error(\"Unmatched operator $my_symbol\")\n end\n return op\nend","category":"page"},{"location":"poiseuille/poiseuille/#A-Single-Pipe-Segment","page":"Pipe Flow","title":"A Single Pipe Segment","text":"","category":"section"},{"location":"poiseuille/poiseuille/","page":"Pipe Flow","title":"Pipe Flow","text":"This simulation can be validated with the Poiseuille equation for a single pipe. First we create a mesh with one pipe segment.","category":"page"},{"location":"poiseuille/poiseuille/","page":"Pipe Flow","title":"Pipe Flow","text":"s = EmbeddedDeltaSet1D{Bool,Point3D}()\nadd_vertices!(s, 2, point=[Point3D(-1, 0, 0), Point3D(+1, 0, 0)])\nadd_edge!(s, 1, 2, edge_orientation=true)\n\nsd = EmbeddedDeltaDualComplex1D{Bool,Float64,Point3D}(s)\nsubdivide_duals!(sd, Circumcenter())\nsd","category":"page"},{"location":"poiseuille/poiseuille/","page":"Pipe Flow","title":"Pipe Flow","text":"Then we solve the equations.","category":"page"},{"location":"poiseuille/poiseuille/","page":"Pipe Flow","title":"Pipe Flow","text":"using ComponentArrays\nsim = eval(gensim(Poise, dimension=1))\nfₘ = sim(sd, generate)\nq = [2.0]\nP = [10.0, 5.0]\nu = ComponentArray(q=q,P=P)\nparams = (k = -0.01, μ̃ = 0.5, R=0.005)\nprob = ODEProblem(fₘ, u, (0.0, 10000.0), params)\nsoln = solve(prob, Tsit5())\nsoln.u","category":"page"},{"location":"poiseuille/poiseuille/#A-Linear-Pipe-with-Multiple-Segments","page":"Pipe Flow","title":"A Linear Pipe with Multiple Segments","text":"","category":"section"},{"location":"poiseuille/poiseuille/","page":"Pipe Flow","title":"Pipe Flow","text":"We then move on to a linear sequence of pipe segments. You can visualize this as the discretization of a single long pipe into n segments. First we define the mesh:","category":"page"},{"location":"poiseuille/poiseuille/","page":"Pipe Flow","title":"Pipe Flow","text":"function linear_pipe(n::Int)\n s = EmbeddedDeltaSet1D{Bool,Point3D}()\n add_vertices!(s, n, point=[Point3D(i, 0, 0) for i in 1:n])\n add_edges!(s, 1:n-1, 2:n, edge_orientation=true)\n sd = EmbeddedDeltaDualComplex1D{Bool,Float64,Point3D}(s)\n subdivide_duals!(sd, Circumcenter())\n sd\nend\n\nsd = linear_pipe(10)\nnothing # hide","category":"page"},{"location":"poiseuille/poiseuille/","page":"Pipe Flow","title":"Pipe Flow","text":"Then we solve the equation. Notice that the equilibrium flow is constant down the length of the pipe. This must be true because of conservation of mass. The segments are all the same length and the total flow in must equal the total flow out of each segment.","category":"page"},{"location":"poiseuille/poiseuille/","page":"Pipe Flow","title":"Pipe Flow","text":"Note that we do not generate new simulation code for Poiseuille flow with gensim again. We simply need to provide our new mesh so that our discrete differential operators can be re-instantiated.","category":"page"},{"location":"poiseuille/poiseuille/","page":"Pipe Flow","title":"Pipe Flow","text":"fₘ = sim(sd, generate)\nP = [9,8,7,6,5,4,3,2,1,0]\nq = [5,3,4,2,5,2,8,4,3]\nu = ComponentArray(q=q,P=P)\nparams = (k = -0.01, μ̃ = 0.5, R=0.005)\nprob = ODEProblem(fₘ, u, (0.0, 10000.0), params)\nsol = solve(prob, Tsit5());\nsol.u","category":"page"},{"location":"poiseuille/poiseuille/#A-Distribution-Network","page":"Pipe Flow","title":"A Distribution Network","text":"","category":"section"},{"location":"poiseuille/poiseuille/","page":"Pipe Flow","title":"Pipe Flow","text":"To model a distribution network, such as residential drinking water system, we will build a binary tree of pipes that at each junction have a bifurcation into two pipes. We expect that the flow will be divided by two at each level of the tree. First we make the mesh.","category":"page"},{"location":"poiseuille/poiseuille/","page":"Pipe Flow","title":"Pipe Flow","text":"function binary_pipe(depth::Int)\n s = EmbeddedDeltaSet1D{Bool,Point3D}()\n add_vertex!(s, point=Point3D(0, 0, 0))\n for n in 1:depth\n for prev_v in vertices(s)[end-2^(n-1)+1:end]\n x, y, _ = s[:point][prev_v]\n vs = add_vertices!(s, 2, point=[Point3D(sgn*3^0.5 + x, y+1, 0)\n for sgn in [1,-1]])\n add_edges!(s, vs, [prev_v,prev_v], edge_orientation=true)\n end\n end\n v = add_vertex!(s, point=Point3D(3^0.5, -1, 0))\n add_edge!(s, 1, v, edge_orientation=true)\n sd = EmbeddedDeltaDualComplex1D{Bool,Float64,Point3D}(s)\n subdivide_duals!(sd, Circumcenter())\n sd\nend\nsd = binary_pipe(2)\nnothing # hide","category":"page"},{"location":"poiseuille/poiseuille/","page":"Pipe Flow","title":"Pipe Flow","text":"Then we solve the equations.","category":"page"},{"location":"poiseuille/poiseuille/","page":"Pipe Flow","title":"Pipe Flow","text":"fₘ = sim(sd, generate)\nP = collect(1.0:nv(sd))\nq = fill(5.0, ne(sd))\nu = ComponentArray(q=q,P=P)\nparams = (k = -0.01, μ̃ = 0.5, R=0.005)\nprob = ODEProblem(fₘ, u, (0.0, 10000.0), params)\nsol = solve(prob, Tsit5())\nsol.u","category":"page"},{"location":"poiseuille/poiseuille/#Multiphysics","page":"Pipe Flow","title":"Multiphysics","text":"","category":"section"},{"location":"poiseuille/poiseuille/","page":"Pipe Flow","title":"Pipe Flow","text":"Decapodes really shines when you want to extend or refine your physics. We will change our physics by adding in a term for density of the material and the corresponding changes in pressure. This is not the only formulation for including a dynamic pressure effect into this system. If you can think of a better way to include this effect, we invite you to try it as an exercise!","category":"page"},{"location":"poiseuille/poiseuille/","page":"Pipe Flow","title":"Pipe Flow","text":"Because the pressure is no longer being supplied as a parameter of the system controlled by the operators, we need to introduce a density term and a boundary condition for that density. In this system you can think of forcing a prescribed amount of material per unit time through the openings of the pipe and allowing the flow q and the pressure P to fluctuate. Before we were enforcing a fixed pressure gradient and and letting the flow fluctuate to achieve equilibrium. In the prior model, we were not accounting for the amount of material that had to flow in order to achieve that (flow, pressure) combination.","category":"page"},{"location":"poiseuille/poiseuille/","page":"Pipe Flow","title":"Pipe Flow","text":"The Decapode can be visualized with Graphviz, note that the boundary conditions are explicitly represented in the Decapode as operators that implement a masking operation. This is not consistent with the Diagrammatic Equations in Physics paper. This approach is more directly tied to the computational method and will eventually be replaced with one based on morphisms of diagrams.","category":"page"},{"location":"poiseuille/poiseuille/","page":"Pipe Flow","title":"Pipe Flow","text":"# μ̃ = negative viscosity per unit area\n# R = drag of pipe boundary\n# k = pressure as a function of density\nPoise = @decapode begin\n q::Form1\n (P, ρ)::Form0\n (k, R, μ̃ )::Constant\n\n # Poiseuille Flow\n ∂ₜ(q) == q̇\n ∇P == d(P)\n q̇ == μ̃ * ∂q(Δ(q)) - ∇P + R * q\n \n # Pressure/Density Coupling\n P == k * ρ\n ∂ₜ(ρ) == ρ̇\n ρ_up == ∘(⋆, d, ⋆)(-1 * ∧₀₁(ρ,q)) # advection\n \n # Boundary conditions\n ρ̇ == ∂ρ(ρ_up)\nend\n\nPoise = expand_operators(Poise)\ninfer_types!(Poise, op1_inf_rules_1D, op2_inf_rules_1D)\nresolve_overloads!(Poise, op1_res_rules_1D, op2_res_rules_1D)\nto_graphviz(Poise)","category":"page"},{"location":"poiseuille/poiseuille/","page":"Pipe Flow","title":"Pipe Flow","text":"Then we can create the mesh and solve the equation.","category":"page"},{"location":"poiseuille/poiseuille/","page":"Pipe Flow","title":"Pipe Flow","text":"sd = linear_pipe(20)\n\nsim = eval(gensim(Poise, dimension=1))\nfunc = sim(sd, generate)\n\nq = [5,3,4,2,5,2,3,4,3, 10,9,8,7,6,5,5,5,5,5]\nρ = [5,3,4,2,5,2,3,4,3, 10,9,8,7,6,5,5,5,5,5,5]\nu = ComponentArray(q=q,ρ=ρ)\nparams = (k = -0.01, μ̃ = 0.5, R=0.005)\n\nprob = ODEProblem(func, u, (0.0, 10000.0), params)\nsol = solve(prob, Tsit5())\nsol.u","category":"page"},{"location":"poiseuille/poiseuille/","page":"Pipe Flow","title":"Pipe Flow","text":"Notice that the solution contains both a vector of flows and a vector of pressures.","category":"page"},{"location":"poiseuille/poiseuille/","page":"Pipe Flow","title":"Pipe Flow","text":"DocInfo.get_report(info) # hide","category":"page"},{"location":"bsh/budyko_sellers_halfar/#Budko-Sellers-Halfar","page":"Budyko-Sellers-Halfar","title":"Budko-Sellers-Halfar","text":"","category":"section"},{"location":"bsh/budyko_sellers_halfar/","page":"Budyko-Sellers-Halfar","title":"Budyko-Sellers-Halfar","text":"include(joinpath(Base.@__DIR__, \"..\", \"..\",\"docinfo.jl\"))\ninfo = DocInfo.Info()","category":"page"},{"location":"bsh/budyko_sellers_halfar/","page":"Budyko-Sellers-Halfar","title":"Budyko-Sellers-Halfar","text":"In this example, we will compose the Budyko-Sellers 1D energy balance model of the Earth's surface temperature with the Halfar model of glacial dynamics. Note that each of these components models is itself a composition of smaller physical models. In this walkthrough, we will compose them together using the same techniques.","category":"page"},{"location":"bsh/budyko_sellers_halfar/","page":"Budyko-Sellers-Halfar","title":"Budyko-Sellers-Halfar","text":"# AlgebraicJulia Dependencies\nusing Catlab\nusing CombinatorialSpaces\nusing DiagrammaticEquations\nusing Decapodes\n\n# External Dependencies\nusing CairoMakie\nusing ComponentArrays\nusing GeometryBasics: Point2\nusing JLD2\nusing LinearAlgebra\nusing MLStyle\nusing OrdinaryDiffEq\nusing SparseArrays\nPoint2D = Point2{Float64};\nnothing # hide","category":"page"},{"location":"bsh/budyko_sellers_halfar/","page":"Budyko-Sellers-Halfar","title":"Budyko-Sellers-Halfar","text":"We have defined the Halfar ice model in other docs pages, and so will quickly define it here.","category":"page"},{"location":"bsh/budyko_sellers_halfar/","page":"Budyko-Sellers-Halfar","title":"Budyko-Sellers-Halfar","text":"halfar_eq2 = @decapode begin\n h::Form0\n Γ::Form1\n n::Constant\n\n ḣ == ∂ₜ(h)\n ḣ == ∘(⋆, d, ⋆)(Γ * d(h) * avg₀₁(mag(♯(d(h)))^(n-1)) * avg₀₁(h^(n+2)))\nend\n\nglens_law = @decapode begin\n Γ::Form1\n A::Form1\n (ρ,g,n)::Constant\n \n Γ == (2/(n+2))*A*(ρ*g)^n\nend\n\nice_dynamics_composition_diagram = @relation () begin\n dynamics(Γ,n)\n stress(Γ,n)\nend\n\nice_dynamics_cospan = oapply(ice_dynamics_composition_diagram,\n [Open(halfar_eq2, [:Γ,:n]),\n Open(glens_law, [:Γ,:n])])\nhalfar = apex(ice_dynamics_cospan)\n\nto_graphviz(halfar, verbose=false)","category":"page"},{"location":"bsh/budyko_sellers_halfar/","page":"Budyko-Sellers-Halfar","title":"Budyko-Sellers-Halfar","text":"We will introduce the Budyko-Sellers energy balance model in more detail. First, let's define the composite physics. We will visualize them all in a single diagram without any composition at first:","category":"page"},{"location":"bsh/budyko_sellers_halfar/","page":"Budyko-Sellers-Halfar","title":"Budyko-Sellers-Halfar","text":"energy_balance = @decapode begin\n (Tₛ, ASR, OLR, HT)::Form0\n (C)::Constant\n\n Tₛ̇ == ∂ₜ(Tₛ) \n\n Tₛ̇ == (ASR - OLR + HT) ./ C\nend\n\nabsorbed_shortwave_radiation = @decapode begin\n (Q, ASR)::Form0\n α::Constant\n\n ASR == (1 .- α) .* Q\nend\n\noutgoing_longwave_radiation = @decapode begin\n (Tₛ, OLR)::Form0\n (A,B)::Constant\n\n OLR == A .+ (B .* Tₛ)\nend\n\nheat_transfer = @decapode begin\n (HT, Tₛ)::Form0\n (D,cosϕᵖ,cosϕᵈ)::Constant\n\n HT == (D ./ cosϕᵖ) .* ⋆(d(cosϕᵈ .* ⋆(d(Tₛ))))\nend\n\ninsolation = @decapode begin\n Q::Form0\n cosϕᵖ::Constant\n\n Q == 450 * cosϕᵖ\nend\n\nto_graphviz(oplus([energy_balance, absorbed_shortwave_radiation, outgoing_longwave_radiation, heat_transfer, insolation]), directed=false)","category":"page"},{"location":"bsh/budyko_sellers_halfar/","page":"Budyko-Sellers-Halfar","title":"Budyko-Sellers-Halfar","text":"Now let's compose the Budyko-Sellers model:","category":"page"},{"location":"bsh/budyko_sellers_halfar/","page":"Budyko-Sellers-Halfar","title":"Budyko-Sellers-Halfar","text":"budyko_sellers_composition_diagram = @relation () begin\n energy(Tₛ, ASR, OLR, HT)\n absorbed_radiation(Q, ASR)\n outgoing_radiation(Tₛ, OLR)\n diffusion(Tₛ, HT, cosϕᵖ)\n insolation(Q, cosϕᵖ)\nend\n\ndraw_composition(budyko_sellers_composition_diagram)","category":"page"},{"location":"bsh/budyko_sellers_halfar/","page":"Budyko-Sellers-Halfar","title":"Budyko-Sellers-Halfar","text":"budyko_sellers_cospan = oapply(budyko_sellers_composition_diagram,\n [Open(energy_balance, [:Tₛ, :ASR, :OLR, :HT]),\n Open(absorbed_shortwave_radiation, [:Q, :ASR]),\n Open(outgoing_longwave_radiation, [:Tₛ, :OLR]),\n Open(heat_transfer, [:Tₛ, :HT, :cosϕᵖ]),\n Open(insolation, [:Q, :cosϕᵖ])])\n\nbudyko_sellers = apex(budyko_sellers_cospan)\n\n# Save this Decapode as a JSON file\nwrite_json_acset(budyko_sellers, \"budyko_sellers.json\") \n\nto_graphviz(budyko_sellers, verbose=false)","category":"page"},{"location":"bsh/budyko_sellers_halfar/#Warming","page":"Budyko-Sellers-Halfar","title":"Warming","text":"","category":"section"},{"location":"bsh/budyko_sellers_halfar/","page":"Budyko-Sellers-Halfar","title":"Budyko-Sellers-Halfar","text":"We need to specify physically what it means for these two terms to interact. We will say that ice will diffuse faster as temperature increases, and will pick some coefficients that demonstrate interesting dynamics on short timescales.","category":"page"},{"location":"bsh/budyko_sellers_halfar/","page":"Budyko-Sellers-Halfar","title":"Budyko-Sellers-Halfar","text":"warming = @decapode begin\n Tₛ::Form0\n A::Form1\n\n A == avg₀₁(5.8282*10^(-0.236 * Tₛ)*1.65e7)\n\nend\n\nto_graphviz(warming)","category":"page"},{"location":"bsh/budyko_sellers_halfar/#Composition","page":"Budyko-Sellers-Halfar","title":"Composition","text":"","category":"section"},{"location":"bsh/budyko_sellers_halfar/","page":"Budyko-Sellers-Halfar","title":"Budyko-Sellers-Halfar","text":"Observe that Decapodes composition is hierarchical. This composition technique is the same as that used in composing each of the Budyko-Sellers and Halfar models.","category":"page"},{"location":"bsh/budyko_sellers_halfar/","page":"Budyko-Sellers-Halfar","title":"Budyko-Sellers-Halfar","text":"budyko_sellers_halfar_composition_diagram = @relation () begin\n budyko_sellers(Tₛ)\n warming(A, Tₛ)\n halfar(A)\nend\n\ndraw_composition(budyko_sellers_halfar_composition_diagram)","category":"page"},{"location":"bsh/budyko_sellers_halfar/","page":"Budyko-Sellers-Halfar","title":"Budyko-Sellers-Halfar","text":"We apply a composition by plugging in a Decapode for each component. We also specify the internal name of the variables to be used in combining.","category":"page"},{"location":"bsh/budyko_sellers_halfar/","page":"Budyko-Sellers-Halfar","title":"Budyko-Sellers-Halfar","text":"budyko_sellers_halfar_cospan = oapply(budyko_sellers_halfar_composition_diagram,\n [Open(budyko_sellers, [:Tₛ]),\n Open(warming, [:A, :Tₛ]),\n Open(halfar, [:stress_A])])\nbudyko_sellers_halfar = apex(budyko_sellers_halfar_cospan)\n\nto_graphviz(budyko_sellers_halfar)","category":"page"},{"location":"bsh/budyko_sellers_halfar/","page":"Budyko-Sellers-Halfar","title":"Budyko-Sellers-Halfar","text":"We can perform type inference to determine what kind of differential form each of our variables are. This is done automatically with the dimension=1 keyword given to gensim, but we will do it in-place for demonstration purposes.","category":"page"},{"location":"bsh/budyko_sellers_halfar/","page":"Budyko-Sellers-Halfar","title":"Budyko-Sellers-Halfar","text":"budyko_sellers_halfar = expand_operators(budyko_sellers_halfar)\ninfer_types!(budyko_sellers_halfar, op1_inf_rules_1D, op2_inf_rules_1D)\nresolve_overloads!(budyko_sellers_halfar, op1_res_rules_1D, op2_res_rules_1D)\nto_graphviz(budyko_sellers_halfar)","category":"page"},{"location":"bsh/budyko_sellers_halfar/#Defining-the-mesh","page":"Budyko-Sellers-Halfar","title":"Defining the mesh","text":"","category":"section"},{"location":"bsh/budyko_sellers_halfar/","page":"Budyko-Sellers-Halfar","title":"Budyko-Sellers-Halfar","text":"These dynamics will occur on a 1-D manifold (a line). Points near +-π/2 will represent points near the North/ South poles. Points near 0 represent those at the equator.","category":"page"},{"location":"bsh/budyko_sellers_halfar/","page":"Budyko-Sellers-Halfar","title":"Budyko-Sellers-Halfar","text":"s = EmbeddedDeltaSet1D{Bool, Point2D}()\nadd_vertices!(s, 100, point=Point2D.(range(-π/2 + π/32, π/2 - π/32, length=100), 0))\nadd_edges!(s, 1:nv(s)-1, 2:nv(s))\norient!(s)\nsd = EmbeddedDeltaDualComplex1D{Bool, Float64, Point2D}(s)\nsubdivide_duals!(sd, Circumcenter())","category":"page"},{"location":"bsh/budyko_sellers_halfar/#Define-input-data","page":"Budyko-Sellers-Halfar","title":"Define input data","text":"","category":"section"},{"location":"bsh/budyko_sellers_halfar/","page":"Budyko-Sellers-Halfar","title":"Budyko-Sellers-Halfar","text":"We need to supply initial conditions to our model. We will use synthetic data here.","category":"page"},{"location":"bsh/budyko_sellers_halfar/","page":"Budyko-Sellers-Halfar","title":"Budyko-Sellers-Halfar","text":"# This is a primal 0-form, with values at vertices.\ncosϕᵖ = map(x -> cos(x[1]), point(s))\n\n# This is a dual 0-form, with values at edge centers.\ncosϕᵈ = map(edges(s)) do e\n (cos(point(s, src(s, e))[1]) + cos(point(s, tgt(s, e))[1])) / 2\nend\n\nα₀ = 0.354\nα₂ = 0.25\nα = map(point(s)) do ϕ\n α₀ + α₂*((1/2)*(3*ϕ[1]^2 - 1))\nend\nA = 210\nB = 2\nf = 0.70\nρ = 1025\ncw = 4186\nH = 70\nC = map(point(s)) do ϕ\n f * ρ * cw * H\nend\nD = 0.6\n\n# Isothermal initial conditions:\nTₛ₀ = map(point(s)) do ϕ\n 15\nend\n\n# Visualize initial condition for temperature.\nlines(map(x -> x[1], point(s)), Tₛ₀)","category":"page"},{"location":"bsh/budyko_sellers_halfar/","page":"Budyko-Sellers-Halfar","title":"Budyko-Sellers-Halfar","text":"n = 3\nρ = 910\ng = 9.8\n\n# Ice height is a primal 0-form, with values at vertices.\nh₀ = map(point(s)) do (x,_)\n (((x)^2)+2.5) / 1e3\nend\n\n# Visualize initial condition for ice sheet height.\nlines(map(x -> x[1], point(s)), h₀)","category":"page"},{"location":"bsh/budyko_sellers_halfar/","page":"Budyko-Sellers-Halfar","title":"Budyko-Sellers-Halfar","text":"# Store these values to be passed to the solver.\nu₀ = ComponentArray(Tₛ=Tₛ₀, halfar_dynamics_h=h₀)\n\nconstants_and_parameters = (\n budyko_sellers_absorbed_radiation_α = α,\n budyko_sellers_outgoing_radiation_A = A,\n budyko_sellers_outgoing_radiation_B = B,\n budyko_sellers_energy_C = C,\n budyko_sellers_diffusion_D = D,\n budyko_sellers_cosϕᵖ = cosϕᵖ,\n budyko_sellers_diffusion_cosϕᵈ = cosϕᵈ,\n halfar_n = n,\n halfar_stress_ρ = ρ,\n halfar_stress_g = g)","category":"page"},{"location":"bsh/budyko_sellers_halfar/#Symbols-to-functions","page":"Budyko-Sellers-Halfar","title":"Symbols to functions","text":"","category":"section"},{"location":"bsh/budyko_sellers_halfar/","page":"Budyko-Sellers-Halfar","title":"Budyko-Sellers-Halfar","text":"The symbols along edges in our Decapode must be mapped to executable functions. In the Discrete Exterior Calculus, all our operators are defined as relations between points, lines, and triangles on meshes known as simplicial sets. Thus, DEC operators are re-usable across any simplicial set.","category":"page"},{"location":"bsh/budyko_sellers_halfar/","page":"Budyko-Sellers-Halfar","title":"Budyko-Sellers-Halfar","text":"function generate(sd, my_symbol; hodge=GeometricHodge())\n op = @match my_symbol begin\n :♯ => x -> begin\n # This is an implementation of the \"sharp\" operator from the exterior\n # calculus, which takes co-vector fields to vector fields.\n # This could be up-streamed to the CombinatorialSpaces.jl library. (i.e.\n # this operation is not bespoke to this simulation.)\n e_vecs = map(edges(sd)) do e\n point(sd, sd[e, :∂v0]) - point(sd, sd[e, :∂v1])\n end\n neighbors = map(vertices(sd)) do v\n union(incident(sd, v, :∂v0), incident(sd, v, :∂v1))\n end\n n_vecs = map(neighbors) do es\n [e_vecs[e] for e in es]\n end\n map(neighbors, n_vecs) do es, nvs\n sum([nv*norm(nv)*x[e] for (e,nv) in zip(es,nvs)]) / sum(norm.(nvs))\n end\n end\n :mag => x -> norm.(x)\n x => error(\"Unmatched operator $my_symbol\")\n end\n return (args...) -> op(args...)\nend","category":"page"},{"location":"bsh/budyko_sellers_halfar/#Simulation-generation","page":"Budyko-Sellers-Halfar","title":"Simulation generation","text":"","category":"section"},{"location":"bsh/budyko_sellers_halfar/","page":"Budyko-Sellers-Halfar","title":"Budyko-Sellers-Halfar","text":"From our Decapode, we automatically generate a finite difference method solver that performs explicit time-stepping to solve our system of multiphysics equations.","category":"page"},{"location":"bsh/budyko_sellers_halfar/","page":"Budyko-Sellers-Halfar","title":"Budyko-Sellers-Halfar","text":"sim = eval(gensim(budyko_sellers_halfar, dimension=1))\nfₘ = sim(sd, generate)","category":"page"},{"location":"bsh/budyko_sellers_halfar/#Run-simulation","page":"Budyko-Sellers-Halfar","title":"Run simulation","text":"","category":"section"},{"location":"bsh/budyko_sellers_halfar/","page":"Budyko-Sellers-Halfar","title":"Budyko-Sellers-Halfar","text":"We wrap our simulator and initial conditions and solve them with the stability-detection and time-stepping methods provided by DifferentialEquations.jl .","category":"page"},{"location":"bsh/budyko_sellers_halfar/","page":"Budyko-Sellers-Halfar","title":"Budyko-Sellers-Halfar","text":"tₑ = 1e6\n\n@info(\"Solving\")\nprob = ODEProblem(fₘ, u₀, (0, tₑ), constants_and_parameters)\nsoln = solve(prob, Tsit5())\n@show soln.retcode\n@info(\"Done\")","category":"page"},{"location":"bsh/budyko_sellers_halfar/","page":"Budyko-Sellers-Halfar","title":"Budyko-Sellers-Halfar","text":"We can save the solution file to examine later.","category":"page"},{"location":"bsh/budyko_sellers_halfar/","page":"Budyko-Sellers-Halfar","title":"Budyko-Sellers-Halfar","text":"@save \"budyko_sellers_halfar.jld2\" soln","category":"page"},{"location":"bsh/budyko_sellers_halfar/#Visualize","page":"Budyko-Sellers-Halfar","title":"Visualize","text":"","category":"section"},{"location":"bsh/budyko_sellers_halfar/","page":"Budyko-Sellers-Halfar","title":"Budyko-Sellers-Halfar","text":"Quickly examine the final conditions for temperature:","category":"page"},{"location":"bsh/budyko_sellers_halfar/","page":"Budyko-Sellers-Halfar","title":"Budyko-Sellers-Halfar","text":"lines(map(x -> x[1], point(s)), soln(tₑ).Tₛ)","category":"page"},{"location":"bsh/budyko_sellers_halfar/","page":"Budyko-Sellers-Halfar","title":"Budyko-Sellers-Halfar","text":"Quickly examine the final conditions for ice height:","category":"page"},{"location":"bsh/budyko_sellers_halfar/","page":"Budyko-Sellers-Halfar","title":"Budyko-Sellers-Halfar","text":"lines(map(x -> x[1], point(s)), soln(tₑ).halfar_dynamics_h)","category":"page"},{"location":"bsh/budyko_sellers_halfar/","page":"Budyko-Sellers-Halfar","title":"Budyko-Sellers-Halfar","text":"begin\n# Initial frame\nframes = 100\nfig = Figure()\nax1 = CairoMakie.Axis(fig[1,1])\nxlims!(ax1, extrema(map(x -> x[1], point(s))))\nylims!(ax1, extrema(soln(tₑ).Tₛ))\nax1.xlabel = \"Line plot of temperature from North to South pole, every $(tₑ/frames) time units\"\nLabel(fig[1,1,Top()], \"Surface temperature, Tₛ, [C°]\")\n\n# Animation\nrecord(fig, \"budyko_sellers_halfar_T.gif\", range(0.0, tₑ; length=frames); framerate = 15) do t\n lines!(fig[1,1], map(x -> x[1], point(s)), soln(t).Tₛ)\nend\nend\n\nbegin\n# Initial frame\nframes = 100\nfig = Figure()\nax1 = CairoMakie.Axis(fig[1,1])\nxlims!(ax1, extrema(map(x -> x[1], point(s))))\nylims!(ax1, extrema(soln(tₑ).halfar_dynamics_h))\nax1.xlabel = \"Line plot of temperature from North to South pole, every $(tₑ/frames) time units\"\nLabel(fig[1,1,Top()], \"Ice height, h\")\n\n# Animation\nrecord(fig, \"budyko_sellers_halfar_h.gif\", range(0.0, tₑ; length=frames); framerate = 15) do t\n lines!(fig[1,1], map(x -> x[1], point(s)), soln(t).halfar_dynamics_h)\nend\nend","category":"page"},{"location":"bsh/budyko_sellers_halfar/","page":"Budyko-Sellers-Halfar","title":"Budyko-Sellers-Halfar","text":"(Image: BSH_Temperature)","category":"page"},{"location":"bsh/budyko_sellers_halfar/","page":"Budyko-Sellers-Halfar","title":"Budyko-Sellers-Halfar","text":"(Image: BSH_IceHeight)","category":"page"},{"location":"bsh/budyko_sellers_halfar/","page":"Budyko-Sellers-Halfar","title":"Budyko-Sellers-Halfar","text":"DocInfo.get_report(info) # hide","category":"page"},{"location":"klausmeier/klausmeier/#Klausmeier","page":"Klausmeier","title":"Klausmeier","text":"","category":"section"},{"location":"klausmeier/klausmeier/","page":"Klausmeier","title":"Klausmeier","text":"include(joinpath(Base.@__DIR__, \"..\" , \"..\", \"docinfo.jl\"))\ninfo = DocInfo.Info()","category":"page"},{"location":"klausmeier/klausmeier/","page":"Klausmeier","title":"Klausmeier","text":"(Image: Somaliland Vegetation)","category":"page"},{"location":"klausmeier/klausmeier/","page":"Klausmeier","title":"Klausmeier","text":"
    \n
    One of the first aerial photographs of British Somaliland (now Somaliland) investigated by W.A. Macfadyen in his 1950 \"Vegetation Patterns in the Semi-Desert Plains of British Somaliland\" [1]. From this point of view, Macfadyen's \"vegetation arcs\" are plainly visible.
    \n
    ","category":"page"},{"location":"klausmeier/klausmeier/#Background","page":"Klausmeier","title":"Background","text":"","category":"section"},{"location":"klausmeier/klausmeier/","page":"Klausmeier","title":"Klausmeier","text":"From aerial photographs in the late 1940s, British ecologist W.A. Macfadyen discovered that vegetation in semi-arid environments often grows in striping patterns, but was unaware of the exact mechanism that causes them. What is especially striking about these \"vegetation arcs\" is that these stripes appear to climb uphill, with denser plant growth at the leading edge of these traveling waves. Much like how the Mandelbrot set and other interesting fractal patterns can arise from simple sets of rules, these vegetation dynamics can be explained by simple sets of partial differential equations.","category":"page"},{"location":"klausmeier/klausmeier/","page":"Klausmeier","title":"Klausmeier","text":"The Klausmeier model, given by Christopher Klausmeier in his 1999 paper Regular and Irregular Patterns in Semiarid Vegetation[2], models such dynamics. Although Macfadyen had discovered these vegetation patterns 50s years prior[1,3], defining these dynamics through accessible and physically-meaningful PDEs proved a catalyst for further research. At the time of writing, Klausmeier's paper has been cited 594 times.","category":"page"},{"location":"klausmeier/klausmeier/","page":"Klausmeier","title":"Klausmeier","text":"In this document, we will use Decapodes to formally represent these equations. Moreover, we will demonstrate how one can automatically generate simulation that reproduces the dynamics given by a scientist, simply by reading in the equations given in their original publication.","category":"page"},{"location":"klausmeier/klausmeier/","page":"Klausmeier","title":"Klausmeier","text":"The lofty goal of this document, and of Decapodes itself, is that through both explicitly representing a model - such as Klausmeier's - and handling the generation of simulation code, we can amplify its accessibility and composability, and ultimately spur further research. Lets start by using Decapodes.","category":"page"},{"location":"klausmeier/klausmeier/","page":"Klausmeier","title":"Klausmeier","text":"(Image: Klausmeier GIF)","category":"page"},{"location":"klausmeier/klausmeier/#using-Decapodes","page":"Klausmeier","title":"using Decapodes","text":"","category":"section"},{"location":"klausmeier/klausmeier/","page":"Klausmeier","title":"Klausmeier","text":"# Load Dependencies\nusing CairoMakie\nusing Catlab\nusing CombinatorialSpaces\nusing ComponentArrays\nusing Decapodes\nusing DiagrammaticEquations\nusing DiagrammaticEquations.Deca\nusing Distributions\nusing GeometryBasics: Point2\nusing JLD2\nusing LinearAlgebra\nusing MLStyle\nusing OrdinaryDiffEq\nPoint2D = Point2{Float64}\nnothing # hide","category":"page"},{"location":"klausmeier/klausmeier/#Model-Representation","page":"Klausmeier","title":"Model Representation","text":"","category":"section"},{"location":"klausmeier/klausmeier/","page":"Klausmeier","title":"Klausmeier","text":"The Klausmeier model consists of two parts: one governing plant growth (phytodynamics), and one governing hydrodynamics. The differential operator Δ represents the diffusion of vegetation, and the \"Lie derivative\" operator ℒ represents the change of water in a direction. In this case, the flow of water downhill, \"dX\".","category":"page"},{"location":"klausmeier/klausmeier/","page":"Klausmeier","title":"Klausmeier","text":"Decapodes are written in the language of the Exterior Calculus, which generalizes Vector Calculus. For us, that means that we get to specify whether a physical quantity should valued at points in our domain (i.e. primal and dual Form0s), or whether they are more vector-like quantities, that should be valued along edges in our domain (i.e. primal and dual Form1s). In this case, water density w and vegetation density n are both Form0s, while dX, the gradient of our hill, is a Form1.","category":"page"},{"location":"klausmeier/klausmeier/","page":"Klausmeier","title":"Klausmeier","text":"# See Klausmeier Equation 2.a\nHydrodynamics = @decapode begin\n (n,w)::DualForm0\n dX::Form1\n (a,ν)::Constant\n\n ∂ₜ(w) == a - w - w * n^2 + ν * L(dX, w)\nend\n\n# See Klausmeier Equation 2.b\nPhytodynamics = @decapode begin\n (n,w)::DualForm0\n m::Constant\n\n ∂ₜ(n) == w * n^2 - m*n + Δ(n)\nend\nnothing # hide","category":"page"},{"location":"klausmeier/klausmeier/","page":"Klausmeier","title":"Klausmeier","text":"Now that we have our two component models, we can specify a means of composing them via a composition pattern.","category":"page"},{"location":"klausmeier/klausmeier/","page":"Klausmeier","title":"Klausmeier","text":"# Specify Composition\ncompose_klausmeier = @relation () begin\n phyto(N, W)\n hydro(N, W)\nend\n\ndraw_composition(compose_klausmeier)","category":"page"},{"location":"klausmeier/klausmeier/","page":"Klausmeier","title":"Klausmeier","text":"We apply our composition pattern by plugging in component Decapodes, and specifying which internal quantities to share along edges. Decapodes are formalized via the field of Applied Category Theory. A practical consequence here is that we can view a Decapode as a sort of computation graph.","category":"page"},{"location":"klausmeier/klausmeier/","page":"Klausmeier","title":"Klausmeier","text":"# Apply Composition\nklausmeier_cospan = oapply(compose_klausmeier,\n [Open(Phytodynamics, [:n, :w]),\n Open(Hydrodynamics, [:n, :w])])\nKlausmeier = apex(klausmeier_cospan)\nto_graphviz(Klausmeier)","category":"page"},{"location":"klausmeier/klausmeier/","page":"Klausmeier","title":"Klausmeier","text":"With our model now explicitly represented, we have everything we need to automatically generate simulation code. We could write this to an intermediate file and use it later, or we can go ahead and evaluate the code in this session.","category":"page"},{"location":"klausmeier/klausmeier/","page":"Klausmeier","title":"Klausmeier","text":"sim = eval(gensim(Klausmeier, dimension=1))","category":"page"},{"location":"klausmeier/klausmeier/","page":"Klausmeier","title":"Klausmeier","text":"We now need a mesh to define our domain. In the 2D case, our CombinatorialSpaces library can read in arbitrary .OBJ files. In 1D, it is often simpler to just generate a mesh on the fly. Since we are running our physics on a circle - i.e periodic boundaries - we will use a simple function that generates it.","category":"page"},{"location":"klausmeier/klausmeier/","page":"Klausmeier","title":"Klausmeier","text":"We will visualize the mesh embedded in two dimensions here, but in later visualizations, we can represent it as a periodic line.","category":"page"},{"location":"klausmeier/klausmeier/","page":"Klausmeier","title":"Klausmeier","text":"# Define Mesh\nfunction circle(n, c)\n s = EmbeddedDeltaSet1D{Bool, Point2D}()\n map(range(0, 2pi - (pi/(2^(n-1))); step=pi/(2^(n-1)))) do t\n add_vertex!(s, point=Point2D(cos(t),sin(t))*(c/2pi))\n end\n add_edges!(s, 1:(nv(s)-1), 2:nv(s))\n add_edge!(s, nv(s), 1)\n sd = EmbeddedDeltaDualComplex1D{Bool, Float64, Point2D}(s)\n subdivide_duals!(sd, Circumcenter())\n s,sd\nend\ns,sd = circle(9, 500)\n\nscatter(sd[:point])","category":"page"},{"location":"klausmeier/klausmeier/","page":"Klausmeier","title":"Klausmeier","text":"We discretize our differential operators using the Discrete Exterior Calculus. The DEC is an elegant way of building up more complex differential operators from simpler ones. To demonstrate, we will define the Δ operator by building it up with matrix multiplication of simpler operators. Since most operators in the DEC are matrices, most simulations consist mainly of matrix-vector multiplications, and are thus very fast.","category":"page"},{"location":"klausmeier/klausmeier/","page":"Klausmeier","title":"Klausmeier","text":"If this code seems too low level, do not worry. Decapodes defines and caches for you many differential operators behind the scenes, so you do not have to worry about defining your own.","category":"page"},{"location":"klausmeier/klausmeier/","page":"Klausmeier","title":"Klausmeier","text":"lap_mat = dec_hodge_star(1,sd) * dec_differential(0,sd) * dec_inv_hodge_star(0,sd) * dec_dual_derivative(0,sd)\n\nfunction generate(sd, my_symbol; hodge=DiagonalHodge())\n op = @match my_symbol begin\n :Δ => x -> begin\n lap_mat * x\n end\n end\n return (args...) -> op(args...)\nend","category":"page"},{"location":"klausmeier/klausmeier/","page":"Klausmeier","title":"Klausmeier","text":"Let's pass our mesh and methods of generating operators to our simulation code.","category":"page"},{"location":"klausmeier/klausmeier/","page":"Klausmeier","title":"Klausmeier","text":"# Instantiate Simulation\nfₘ = sim(sd, generate, DiagonalHodge())","category":"page"},{"location":"klausmeier/klausmeier/","page":"Klausmeier","title":"Klausmeier","text":"With our simulation now ready, let's specify initial data to pass to it. We'll define them with plain Julia code.","category":"page"},{"location":"klausmeier/klausmeier/","page":"Klausmeier","title":"Klausmeier","text":"The most interesting parameter here is our \"downhill gradient\" dX. This parameter defines how steep our slope is. Since our mesh is a circle, and we are setting dX to a constant value, this means that \"downhill\" always points counter-clockwise. Essentially, this is an elegant way of encoding an infinite hill.","category":"page"},{"location":"klausmeier/klausmeier/","page":"Klausmeier","title":"Klausmeier","text":"# Define Initial Conditions\nn_dist = Normal(pi)\nn = [pdf(n_dist, t)*(√(2pi))*7.2 + 0.08 - 5e-2 for t in range(0,2pi; length=ne(sd))]\n\nw_dist = Normal(pi, 20)\nw = [pdf(w_dist, t) for t in range(0,2pi; length=ne(sd))]\n\ndX = sd[:length]\n\nu₀ = ComponentArray(N = n, W = w, hydro_dX = dX)\n\ncs_ps = (phyto_m = 0.45,\n hydro_a = 0.94,\n hydro_ν = 182.5)","category":"page"},{"location":"klausmeier/klausmeier/","page":"Klausmeier","title":"Klausmeier","text":"Let's execute our simulation.","category":"page"},{"location":"klausmeier/klausmeier/","page":"Klausmeier","title":"Klausmeier","text":"# Run Simulation\ntₑ = 300.0\nprob = ODEProblem(fₘ, u₀, (0.0, tₑ), cs_ps)\nsol = solve(prob, Tsit5(), saveat=0.1, save_idxs=[:N, :W])\nsol.retcode","category":"page"},{"location":"klausmeier/klausmeier/#Animation","page":"Klausmeier","title":"Animation","text":"","category":"section"},{"location":"klausmeier/klausmeier/","page":"Klausmeier","title":"Klausmeier","text":"Let's perform some basic visualization and analysis of our results to verify our dynamics.","category":"page"},{"location":"klausmeier/klausmeier/","page":"Klausmeier","title":"Klausmeier","text":"n = sol(0).N\nnₑ = sol(tₑ).N\nw = sol(0).W\nwₑ = sol(tₑ).W\nnothing # hide","category":"page"},{"location":"klausmeier/klausmeier/","page":"Klausmeier","title":"Klausmeier","text":"# Animate dynamics\nfunction save_dynamics(form_name, framerate, filename)\n time = Observable(0.0)\n ys = @lift(getproperty(sol($time), form_name))\n xcoords = [0, accumulate(+, sd[:length])[1:end-1]...]\n fig = lines(xcoords, ys, color=:green, linewidth=4.0,\n colorrange=extrema(getproperty(sol(0), form_name));\n axis = (; title = @lift(\"Klausmeier $(String(form_name)) at $($time)\")))\n timestamps = range(0, tₑ, step=1)\n record(fig, filename, timestamps; framerate=framerate) do t\n time[] = t\n end\nend\nsave_dynamics(:N, 20, \"klausmeier.gif\")","category":"page"},{"location":"klausmeier/klausmeier/","page":"Klausmeier","title":"Klausmeier","text":"(Image: Klausmeier)","category":"page"},{"location":"klausmeier/klausmeier/","page":"Klausmeier","title":"Klausmeier","text":"We can observe a few interesting phenomena that we wanted to capture:","category":"page"},{"location":"klausmeier/klausmeier/","page":"Klausmeier","title":"Klausmeier","text":"The vegetation density bands move uphill in traveling waves.\nThe leading edge of the waves is denser than the rest of the band.\nOver time, the periodicity of the vegetation bands stabilizes.\nThe distribution naturally emerges, despite the initial distribution is a simple normal distribution.\nThis is evidence against the real-world theory that these vegetation contours are the result of an initial (man-made) distribution.","category":"page"},{"location":"klausmeier/klausmeier/#Conclusion","page":"Klausmeier","title":"Conclusion","text":"","category":"section"},{"location":"klausmeier/klausmeier/","page":"Klausmeier","title":"Klausmeier","text":"Due to the ease of composition of Decapodes, representing the Klausmeier model opens up many areas for future work. For example, we can now compose these dynamics with a model of temperature dynamics informed by the Budyko-Sellers model. We can take advantage of the fact that the Lie derivative generalizes partial derivatives, and model the flow of water according to any vector field. Or, we can extend this model by composing it with a model that can recreate the so-called \"leopard pattern\" of vegetation, such as an \"Interaction-Dispersion\" model of vegetation dynamics given by Lejeune et al[4].","category":"page"},{"location":"klausmeier/klausmeier/#References","page":"Klausmeier","title":"References","text":"","category":"section"},{"location":"klausmeier/klausmeier/","page":"Klausmeier","title":"Klausmeier","text":"[1] W. A. Macfadyen, “Vegetation Patterns in the Semi-Desert Plains of British Somaliland,” The Geographical Journal, vol. 116, no. 4/6, p. 199, Oct. 1950, doi: 10.2307/1789384.","category":"page"},{"location":"klausmeier/klausmeier/","page":"Klausmeier","title":"Klausmeier","text":"[2] C. A. Klausmeier, “Regular and Irregular Patterns in Semiarid Vegetation,” Science, vol. 284, no. 5421, pp. 1826–1828, Jun. 1999, doi: 10.1126/science.284.5421.1826.","category":"page"},{"location":"klausmeier/klausmeier/","page":"Klausmeier","title":"Klausmeier","text":"[3] W. A. Macfadyen, “Soil and Vegetation in British Somaliland,” Nature, vol. 165, no. 4186, Art. no. 4186, Jan. 1950, doi: 10.1038/165121a0.","category":"page"},{"location":"klausmeier/klausmeier/","page":"Klausmeier","title":"Klausmeier","text":"[4] O. Lejeune and M. Tlidi, “A Model for the Explanation of Vegetation Stripes (Tiger Bush),” Journal of Vegetation Science, vol. 10, no. 2, pp. 201–208, 1999, doi: 10.2307/3237141.","category":"page"},{"location":"klausmeier/klausmeier/","page":"Klausmeier","title":"Klausmeier","text":"DocInfo.get_report(info) # hide","category":"page"},{"location":"grigoriev/grigoriev/#Halfar's-model-of-glacial-flow","page":"Grigoriev Ice Cap","title":"Halfar's model of glacial flow","text":"","category":"section"},{"location":"grigoriev/grigoriev/","page":"Grigoriev Ice Cap","title":"Grigoriev Ice Cap","text":"include(joinpath(Base.@__DIR__, \"..\" , \"..\", \"docinfo.jl\"))\ninfo = DocInfo.Info()","category":"page"},{"location":"grigoriev/grigoriev/","page":"Grigoriev Ice Cap","title":"Grigoriev Ice Cap","text":"Let's model glacial flow using a model of how ice height of a glacial sheet changes over time, from P. Halfar's 1981 paper: \"On the dynamics of the ice sheets\".","category":"page"},{"location":"grigoriev/grigoriev/","page":"Grigoriev Ice Cap","title":"Grigoriev Ice Cap","text":"Let's run the Halfar shallow ice / shallow slope model on some \"real world\" data for ice thickness. Van Tricht et al. in their 2023 communication Measuring and modelling the ice thickness of the Grigoriev ice cap (Kyrgyzstan) and comparison with global dataset published ice thickness data on an ice cap and stored their data in a TIF. In this document, we will demonstrate how to parse such data and execute a Decapodes model on these initial conditions.","category":"page"},{"location":"grigoriev/grigoriev/","page":"Grigoriev Ice Cap","title":"Grigoriev Ice Cap","text":"For the parameters to Glen's law, we will use those used in the Community Ice Sheet Model benchmark. Of course, the parameters of this Kyrgyzstani ice cap likely differ from these by quite some amount, but they are a good place to start. Further, this ice cap does not satisfy the \"shallow slope\" assumption across the entire domain.","category":"page"},{"location":"grigoriev/grigoriev/","page":"Grigoriev Ice Cap","title":"Grigoriev Ice Cap","text":"# AlgebraicJulia Dependencies\nusing Catlab\nusing CombinatorialSpaces\nusing DiagrammaticEquations\nusing Decapodes\n\n# External Dependencies\nusing CairoMakie\nusing ComponentArrays\nusing FileIO \nusing GeometryBasics: Point2\nusing Interpolations\nusing JLD2\nusing LinearAlgebra\nusing MLStyle\nusing OrdinaryDiffEq\nusing SparseArrays\nPoint2D = Point2{Float64}\nPoint3D = Point3{Float64};\nnothing # hide","category":"page"},{"location":"grigoriev/grigoriev/#Loading-a-Scientific-Dataset","page":"Grigoriev Ice Cap","title":"Loading a Scientific Dataset","text":"","category":"section"},{"location":"grigoriev/grigoriev/","page":"Grigoriev Ice Cap","title":"Grigoriev Ice Cap","text":"The ice thickness data is stored in a TIF that can be downloaded here. We have downloaded it locally, and load it using basic FileIO.","category":"page"},{"location":"grigoriev/grigoriev/","page":"Grigoriev Ice Cap","title":"Grigoriev Ice Cap","text":"file_name = \"Icethickness_Grigoriev_ice_cap_2021.tif\"\nice_thickness_tif = load(file_name)","category":"page"},{"location":"grigoriev/grigoriev/","page":"Grigoriev Ice Cap","title":"Grigoriev Ice Cap","text":"This data may visually appear to be a binary mask but that is only because values with no ice are set to -Inf. We will account for this when interpolate our data.","category":"page"},{"location":"grigoriev/grigoriev/","page":"Grigoriev Ice Cap","title":"Grigoriev Ice Cap","text":"We use the Interpolations.jl library to interpolate this dataset:","category":"page"},{"location":"grigoriev/grigoriev/","page":"Grigoriev Ice Cap","title":"Grigoriev Ice Cap","text":"# Taking the coordinates to be from the extrema of the measured points:\nconst MIN_X = 4648894.5\nconst MAX_X = 4652179.7\nconst MIN_Y = 243504.5\nconst MAX_Y = 245599.8\nice_coords = (range(MIN_X, MAX_X, length=size(ice_thickness_tif,1)),\n range(MIN_Y, MAX_Y, length=size(ice_thickness_tif,2)))\n\n# Note that the TIF is set to -floatmax(Float32) where there is no ice.\n# For our purposes, this is equivalent to 0.0.\nice_interp = LinearInterpolation(ice_coords, Float32.(ice_thickness_tif))","category":"page"},{"location":"grigoriev/grigoriev/","page":"Grigoriev Ice Cap","title":"Grigoriev Ice Cap","text":"To use this interpolating object ice_interp, we can simply query it for the value at some coordinates: ice_interp(x,y).","category":"page"},{"location":"grigoriev/grigoriev/","page":"Grigoriev Ice Cap","title":"Grigoriev Ice Cap","text":"Let's generate a triangulated grid located at the appropriate coordinates:","category":"page"},{"location":"grigoriev/grigoriev/","page":"Grigoriev Ice Cap","title":"Grigoriev Ice Cap","text":"# Specify a resolution:\nRES_Y = (MAX_Y-MIN_Y)/30.0\nRES_X = RES_Y\n\n# Generate the mesh with appropriate dimensions and resolution:\ns = triangulated_grid(MAX_X-MIN_X, MAX_Y-MIN_Y, RES_X, RES_Y, Point3D)\n\n# Shift it into place:\ns[:point] = map(x -> x + Point3D(MIN_X, MIN_Y, 0), s[:point])\nsd = EmbeddedDeltaDualComplex2D{Bool, Float64, Point3D}(s)\nsubdivide_duals!(sd, Barycenter())\n\nfig = Figure()\nax = CairoMakie.Axis(fig[1,1])\nwf = wireframe!(ax, s)\nsave(\"Grigoriev_IceMesh.png\", fig)\nnothing # hide","category":"page"},{"location":"grigoriev/grigoriev/","page":"Grigoriev Ice Cap","title":"Grigoriev Ice Cap","text":"(Image: \"Grigoriev_IceMesh\")","category":"page"},{"location":"grigoriev/grigoriev/","page":"Grigoriev Ice Cap","title":"Grigoriev Ice Cap","text":"The coordinates of a vertex are stored in sd[:point]. Let's use our interpolator to assign ice thickness values to each vertex in the mesh:","category":"page"},{"location":"grigoriev/grigoriev/","page":"Grigoriev Ice Cap","title":"Grigoriev Ice Cap","text":"# These are the values used by the CISM benchmark:\nn = 3\nρ = 910\ng = 9.8101\nA = fill(1e-16, ne(sd))\n\nh₀ = map(sd[:point]) do (x,y,_)\n tif_val = ice_interp(x,y)\n # Accommodate for the -∞'s that encode \"no ice\".\n tif_val < 0.0 ? 0.0 : tif_val\nend\n\n# Store these values to be passed to the solver.\nu₀ = ComponentArray(h=h₀, stress_A=A)\nconstants_and_parameters = (n = n, \n stress_ρ = ρ,\n stress_g = g, \n stress_A = A)\nnothing # hide","category":"page"},{"location":"grigoriev/grigoriev/#Defining-and-Composing-Models","page":"Grigoriev Ice Cap","title":"Defining and Composing Models","text":"","category":"section"},{"location":"grigoriev/grigoriev/","page":"Grigoriev Ice Cap","title":"Grigoriev Ice Cap","text":"For exposition on this Halfar Decapode, see our Glacial Flow docs page. Otherwise, you may skip ahead to the next section.","category":"page"},{"location":"grigoriev/grigoriev/","page":"Grigoriev Ice Cap","title":"Grigoriev Ice Cap","text":"halfar_eq2 = @decapode begin\n h::Form0\n Γ::Form1\n n::Constant\n\n ḣ == ∂ₜ(h)\n ḣ == ∘(⋆, d, ⋆)(Γ * d(h) * avg₀₁(mag(♯(d(h)))^(n-1)) * avg₀₁(h^(n+2)))\nend\n\nglens_law = @decapode begin\n Γ::Form1\n (A,ρ,g,n)::Constant\n \n Γ == (2/(n+2))*A*(ρ*g)^n\nend\n\nice_dynamics_composition_diagram = @relation () begin\n dynamics(h,Γ,n)\n stress(Γ,n)\nend\n\nice_dynamics_cospan = oapply(ice_dynamics_composition_diagram,\n [Open(halfar_eq2, [:h,:Γ,:n]),\n Open(glens_law, [:Γ,:n])])\n\nice_dynamics = apex(ice_dynamics_cospan)\nto_graphviz(ice_dynamics)","category":"page"},{"location":"grigoriev/grigoriev/#Define-our-functions","page":"Grigoriev Ice Cap","title":"Define our functions","text":"","category":"section"},{"location":"grigoriev/grigoriev/","page":"Grigoriev Ice Cap","title":"Grigoriev Ice Cap","text":"function generate(sd, my_symbol; hodge=GeometricHodge())\n op = @match my_symbol begin\n :mag => x -> norm.(x)\n :♯ => begin\n sharp_mat = ♯_mat(sd, AltPPSharp())\n x -> sharp_mat * x\n end\n x => error(\"Unmatched operator $my_symbol\")\n end\n return op\nend","category":"page"},{"location":"grigoriev/grigoriev/#Generate-simulation","page":"Grigoriev Ice Cap","title":"Generate simulation","text":"","category":"section"},{"location":"grigoriev/grigoriev/","page":"Grigoriev Ice Cap","title":"Grigoriev Ice Cap","text":"sim = eval(gensim(ice_dynamics, dimension=2))\nfₘ = sim(sd, generate)","category":"page"},{"location":"grigoriev/grigoriev/#Run","page":"Grigoriev Ice Cap","title":"Run","text":"","category":"section"},{"location":"grigoriev/grigoriev/","page":"Grigoriev Ice Cap","title":"Grigoriev Ice Cap","text":"tₑ = 10\n\n@info(\"Solving Grigoriev Ice Cap\")\nprob = ODEProblem(fₘ, u₀, (0, tₑ), constants_and_parameters)\nsoln = solve(prob, Tsit5())\n@show soln.retcode\n@info(\"Done\")\n\n@save \"grigoriev.jld2\" soln","category":"page"},{"location":"grigoriev/grigoriev/#Results-and-Discussion","page":"Grigoriev Ice Cap","title":"Results and Discussion","text":"","category":"section"},{"location":"grigoriev/grigoriev/","page":"Grigoriev Ice Cap","title":"Grigoriev Ice Cap","text":"# Visualize the initial conditions.\nfunction plot_ic()\n f = Figure()\n ax = CairoMakie.Axis(f[1,1],\n title=\"Grigoriev Ice Cap Initial Thickness [m]\",\n xticks = range(MIN_X, MAX_X; length=5),\n yticks = range(MIN_Y, MAX_Y; length=5))\n msh = mesh!(ax, s, color=soln(0.0).h, colormap=:jet)\n Colorbar(f[1,2], msh)\n f\nend\nf = plot_ic()\nsave(\"grigoriev_ic.png\", f)\n\n# Visualize the final conditions.\nfunction plot_fc()\n f = Figure()\n ax = CairoMakie.Axis(f[1,1],\n title=\"Grigoriev Ice Cap Final Thickness [m]\",\n xticks = range(MIN_X, MAX_X; length=5),\n yticks = range(MIN_Y, MAX_Y; length=5))\n msh = mesh!(ax, s, color=soln(tₑ).h, colormap=:jet)\n Colorbar(f[1,2], msh)\n f\nend\nf = plot_fc()\nsave(\"grigoriev_fc.png\", f)\n\n# Create a gif\nfunction save_dynamics(save_file_name)\n time = Observable(0.0)\n h = @lift(soln($time).h)\n f = Figure()\n ax = CairoMakie.Axis(f[1,1], title = @lift(\"Grigoriev Ice Cap Dynamic Thickness [m] at time $($time)\"))\n gmsh = mesh!(ax, s, color=h, colormap=:jet,\n colorrange=extrema(soln(tₑ).h))\n #Colorbar(f[1,2], gmsh, limits=extrema(soln(tₑ).h))\n Colorbar(f[1,2], gmsh)\n timestamps = range(0, tₑ, step=1e-1)\n record(f, save_file_name, timestamps; framerate = 15) do t\n time[] = t\n end\nend\nsave_dynamics(\"grigoriev.gif\")","category":"page"},{"location":"grigoriev/grigoriev/","page":"Grigoriev Ice Cap","title":"Grigoriev Ice Cap","text":"We observe the usual Halfar model phenomena of ice \"melting\". Note that since the \"shallow slope\" approximation does not hold on the boundaries (due to the so-called \"ice cliffs\" described in the Van Tricht et al. paper), we do not expect the \"creep\" effect to be physical in this region of the domain. Rather, the Halfar model's predictive power is tuned for the interiors of ice caps and glaciers. Note that we also assume here that the bedrock that the ice rests on is flat. We may in further documents demonstrate how to use topographic data from Digital Elevation Models to inform the elevation of points in the mesh itself.","category":"page"},{"location":"grigoriev/grigoriev/","page":"Grigoriev Ice Cap","title":"Grigoriev Ice Cap","text":"(Image: Grigoriev_ICs)","category":"page"},{"location":"grigoriev/grigoriev/","page":"Grigoriev Ice Cap","title":"Grigoriev Ice Cap","text":"(Image: Grigoriev_FCs)","category":"page"},{"location":"grigoriev/grigoriev/","page":"Grigoriev Ice Cap","title":"Grigoriev Ice Cap","text":"(Image: Grigoriev_Dynamics)","category":"page"},{"location":"grigoriev/grigoriev/","page":"Grigoriev Ice Cap","title":"Grigoriev Ice Cap","text":"DocInfo.get_report(info) # hide","category":"page"},{"location":"overview/overview/#Introduction-to-Decapodes","page":"Overview","title":"Introduction to Decapodes","text":"","category":"section"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"include(joinpath(Base.@__DIR__, \"..\", \"..\", \"docinfo.jl\"))\ninfo = DocInfo.Info()","category":"page"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"Discrete Exterior Calculus Applied to Partial and Ordinary Differential Equations (Decapodes) is a diagrammatic language used to express systems of ordinary and partial differential equations. Decapodes provides a visual framework for understanding the coupling between variables within a PDE or ODE system, and a combinatorial data structure for working with them. Below, we provide a high-level overview of how Decapodes can be generated and interpreted.","category":"page"},{"location":"overview/overview/#Your-First-Decapode","page":"Overview","title":"Your First Decapode","text":"","category":"section"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"In the Decapodes graphical paradigm, nodes represent variables and arrows represent operators which relate variables to each other. Since Decapodes applies this diagrammatic language specifically to the Discrete Exterior Calculus (DEC), variables are typed by the dimension and orientation of the information they contain. So a variable of type Form0 will be the 0-dimensional data points defined the vertices of a mesh. Similarly, Form1 will be values stored on edges of the mesh and Form2 will be values stored on the surfaces of the mesh.","category":"page"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"Below, we provide a Decapode with just a single variable C and display it.","category":"page"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"using Catlab\nusing Decapodes\nusing DiagrammaticEquations\n\nVariable = @decapode begin\n C::Form0\nend;\n\nto_graphviz(Variable)","category":"page"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"The resulting diagram contains a single node, showing the single variable in this system. We can add a second variable:","category":"page"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"TwoVariables = @decapode begin\n C::Form0\n dC::Form1\nend;\n\nto_graphviz(TwoVariables)","category":"page"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"We can also add a relationship between them. In this case, we make an equation which states that dC is the derivative of C:","category":"page"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"Equation = @decapode begin\n C::Form0\n dC::Form1\n\n dC == d(C)\nend;\n\nto_graphviz(Equation)","category":"page"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"Here, the two nodes represent the two variables, and the arrow between them shows how they are related by the derivative.","category":"page"},{"location":"overview/overview/#A-Little-More-Complicated","page":"Overview","title":"A Little More Complicated","text":"","category":"section"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"Now that we've seen how to construct a simple equation, it's time to move on to some actual PDE systems! One classic PDE example is the diffusion equation. This equation states that the change of concentration at each point is proportional to the Laplacian of the concentration.","category":"page"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"Diffusion = @decapode begin\n (C, Ċ)::Form0\n ϕ::Form1\n\n # Fick's first law\n ϕ == k(d₀(C))\n\n # Diffusion equation\n Ċ == ⋆₀⁻¹(dual_d₁(⋆₁(ϕ)))\n ∂ₜ(C) == Ċ\n\nend;\n\nto_graphviz(Diffusion)","category":"page"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"The resulting Decapode shows the relationships between the three variables with the triangle diagram. Note that these diagrams are automatically layed-out by Graphviz.","category":"page"},{"location":"overview/overview/#Bring-in-the-Dynamics","page":"Overview","title":"Bring in the Dynamics","text":"","category":"section"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"Now that we have a reasonably complex PDE, we can demonstrate some of the developed tooling for actually solving the PDE. Currently, the tooling will automatically generate an explicit method for solving the system (using DifferentialEquations.jl to handle time-stepping and instability detection).","category":"page"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"Torus_30x10 is a default mesh that is downloaded via Artifacts.jl when a user installs CombinatorialSpaces.jl. If we wanted, we could also instantiate any .obj file of triangulated faces as a simplicial set although we do not here.","category":"page"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"We will also upload a non-periodic mesh for the sake of visualization, as well as a mapping between the points on the periodic and non-periodic meshes.","category":"page"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"using CairoMakie\nusing CombinatorialSpaces\n\nplot_mesh = loadmesh(Rectangle_30x10())\nperiodic_mesh = loadmesh(Torus_30x10())\npoint_map = loadmesh(Point_Map())\n\nfig = Figure()\nax = CairoMakie.Axis(fig[1,1], aspect = AxisAspect(3.0))\nwireframe!(ax, plot_mesh)\nfig","category":"page"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"Now we create a function which links the names of functions used in the Decapode to their implementations. Note that many DEC operators are already defined for you.","category":"page"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"As an example, we chose to define k as a function that multiplies an input by 0.05. We could have alternately chosen to represent k as a Constant that we multiply by in the Decapode itself.","category":"page"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"We then compile the simulation by using gen_sim and create functional simulation by calling the evaluated sim with the mesh and our generate function.","category":"page"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"using MLStyle\n\nfunction generate(sd, my_symbol; hodge=DiagonalHodge())\n op = @match my_symbol begin\n :k => x -> 0.05*x\n x => error(\"Unmatched operator $my_symbol\")\n end\n return op\nend\n\nsim = eval(gensim(Diffusion))\nfₘ = sim(periodic_mesh, generate, DiagonalHodge())","category":"page"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"We go ahead and set up our initial conditions for this problem. In this case we generate a Gaussian and apply it to our mesh.","category":"page"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"using Distributions\nc_dist = MvNormal([7, 5], [1.5, 1.5])\nc = [pdf(c_dist, [p[1], p[2]]) for p in periodic_mesh[:point]]\n\nfig = Figure()\nax = CairoMakie.Axis(fig[1,1], aspect = AxisAspect(3.0))\nmesh!(ax, plot_mesh; color=c[point_map])\nfig","category":"page"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"Finally, we solve this PDE problem using the Tsit5() solver provided by DifferentialEquations.jl.","category":"page"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"using LinearAlgebra\nusing ComponentArrays\nusing OrdinaryDiffEq\n\nu₀ = ComponentArray(C=c)\n\nprob = ODEProblem(fₘ, u₀, (0.0, 100.0))\nsol = solve(prob, Tsit5());\nsol.retcode","category":"page"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"Now that the simulation has succeeded we can plot out our results with CairoMakie.jl.","category":"page"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"# Plot the result\ntimes = range(0.0, 100.0, length=150)\ncolors = [sol(t).C[point_map] for t in times]\n\n# Initial frame\nfig = Figure()\nax = CairoMakie.Axis(fig[1,1], aspect = AxisAspect(3.0))\npmsh = mesh!(ax, plot_mesh; color=colors[1], colorrange = extrema(vcat(colors...)))\nColorbar(fig[1,2], pmsh)\nframerate = 30\n\n# Animation\nrecord(fig, \"diffusion.gif\", range(0.0, 100.0; length=150); framerate = 30) do t\n pmsh.color = sol(t).C[point_map]\nend","category":"page"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"(Image: Your first Decapode!)","category":"page"},{"location":"overview/overview/#Merging-Multiple-Physics","page":"Overview","title":"Merging Multiple Physics","text":"","category":"section"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"Now that we've seen the basic pipeline, it's time for a more complex example that demonstrates some of the benefits reaped from using Catlab.jl as the backend to our data structures. In this example, we will take two separate physics (diffusion and advection), and combine them together using a higher-level composition pattern.","category":"page"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"We begin by defining the three systems we need. The first two systems are the relationships between concentration and flux under diffusion and advection respectively. The third is the relationship between the two fluxes and the change of concentration under superposition of fluxes.","category":"page"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"Diffusion = @decapode begin\n C::Form0\n ϕ::Form1\n\n # Fick's first law\n ϕ == k(d₀(C))\nend\n\nAdvection = @decapode begin\n C::Form0\n ϕ::Form1\n V::Form1\n\n ϕ == ∧₀₁(C,V)\nend\n\nSuperposition = @decapode begin\n (C, Ċ)::Form0\n (ϕ, ϕ₁, ϕ₂)::Form1\n\n ϕ == ϕ₁ + ϕ₂\n Ċ == ⋆₀⁻¹(dual_d₁(⋆₁(ϕ)))\n ∂ₜ(C) == Ċ\nend\nnothing # hide","category":"page"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"The diffusion Decapode.","category":"page"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"to_graphviz(Diffusion) # hide","category":"page"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"The advection Decapode.","category":"page"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"to_graphviz(Advection) # hide","category":"page"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"And the superposition Decapode.","category":"page"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"to_graphviz(Superposition) # hide","category":"page"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"Next, we define the pattern of composition which we want to compose these physics under. This pattern of composition is described by an undirected wiring diagram, which has the individual physics as nodes and the shared variables as the small junctions.","category":"page"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"compose_diff_adv = @relation (C, V) begin\n diffusion(C, ϕ₁)\n advection(C, ϕ₂, V)\n superposition(ϕ₁, ϕ₂, ϕ, C)\nend\n\ndraw_composition(compose_diff_adv)","category":"page"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"After this, the physics can be composed as follows:","category":"page"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"DiffusionAdvection_cospan = oapply(compose_diff_adv,\n [Open(Diffusion, [:C, :ϕ]),\n Open(Advection, [:C, :ϕ, :V]),\n Open(Superposition, [:ϕ₁, :ϕ₂, :ϕ, :C])])\nDiffusionAdvection = apex(DiffusionAdvection_cospan)\n\nto_graphviz(DiffusionAdvection)","category":"page"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"Similar to before, this physics can be compiled and executed. Note that this process now requires another value to be defined, namely the velocity vector field. We do this using a custom operator called flat_op. This operator is basically the flat operator from CombinatorialSpaces.jl, but specialized to account for the periodic mesh.","category":"page"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"We could instead represent the domain as the surface of an object with equivalent boundaries in 3D.","category":"page"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"function closest_point(p1, p2, dims)\n p_res = collect(p2)\n for i in 1:length(dims)\n if dims[i] != Inf\n p = p1[i] - p2[i]\n f, n = modf(p / dims[i])\n p_res[i] += dims[i] * n\n if abs(f) > 0.5\n p_res[i] += sign(f) * dims[i]\n end\n end\n end\n Point3{Float64}(p_res...)\nend\n\nfunction flat_op(s::AbstractDeltaDualComplex2D, X::AbstractVector; dims=[Inf, Inf, Inf])\n tri_map = Dict{Int,Int}(triangle_center(s,t) => t for t in triangles(s))\n\n map(edges(s)) do e\n p = closest_point(point(s, tgt(s,e)), point(s, src(s,e)), dims)\n e_vec = (point(s, tgt(s,e)) - p) * sign(1,s,e)\n dual_edges = elementary_duals(1,s,e)\n dual_lengths = dual_volume(1, s, dual_edges)\n mapreduce(+, dual_edges, dual_lengths) do dual_e, dual_length\n X_vec = X[tri_map[s[dual_e, :D_∂v0]]]\n dual_length * dot(X_vec, e_vec)\n end / sum(dual_lengths)\n end\nend","category":"page"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"using LinearAlgebra\nusing MLStyle\n\nfunction generate(sd, my_symbol; hodge=DiagonalHodge())\n op = @match my_symbol begin\n :k => x -> 0.05*x\n x => error(\"Unmatched operator $my_symbol\")\n end\n return (args...) -> op(args...)\nend\n\nsim = eval(gensim(DiffusionAdvection))\nfₘ = sim(periodic_mesh, generate, DiagonalHodge())\n\nvelocity(p) = [-0.5, -0.5, 0.0]\nv = flat_op(periodic_mesh, DualVectorField(velocity.(periodic_mesh[triangle_center(periodic_mesh),:dual_point])); dims=[30, 10, Inf])\n\nu₀ = ComponentArray(C=c,V=v)\n\nprob = ODEProblem(fₘ, u₀, (0.0, 100.0))\nsol = solve(prob, Tsit5());\n\n# Plot the result\ntimes = range(0.0, 100.0, length=150)\ncolors = [sol(t).C[point_map] for t in times]\n\n# Initial frame\nfig = Figure()\nax = CairoMakie.Axis(fig[1,1], aspect = AxisAspect(3.0))\npmsh = mesh!(ax, plot_mesh; color=colors[1], colorrange = extrema(vcat(colors...)))\nColorbar(fig[1,2], pmsh)\nframerate = 30\n\n# Animation\nrecord(fig, \"diff_adv.gif\", range(0.0, 100.0; length=150); framerate = 30) do t\n pmsh.color = sol(t).C[point_map]\nend","category":"page"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"(Image: Your first composed Decapode!)","category":"page"},{"location":"overview/overview/","page":"Overview","title":"Overview","text":"DocInfo.get_report(info) # hide","category":"page"},{"location":"halmo/halmo/#Couple-Ice-and-Water-Dynamics","page":"Halfar-NS","title":"Couple Ice and Water Dynamics","text":"","category":"section"},{"location":"halmo/halmo/","page":"Halfar-NS","title":"Halfar-NS","text":"include(joinpath(Base.@__DIR__, \"..\", \"..\", \"docinfo.jl\"))\ninfo = DocInfo.Info()","category":"page"},{"location":"halmo/halmo/","page":"Halfar-NS","title":"Halfar-NS","text":"Let's use Decapodes to implement the incompressible Navier-Stokes as given by Mohamed et al.. We will run these dynamics on the sphere. We will couple this model with Halfar glacier dynamics on the sphere. For the initial conditions of the Halfar ice thickness, we will use an idealized polar ice cap.","category":"page"},{"location":"halmo/halmo/","page":"Halfar-NS","title":"Halfar-NS","text":"Note that the time scale at which ice creeps is much larger than the time scale at which the water in the ocean would flow. So we can either choose to model a very slow moving fluid around the ice (like a storm on a gas giant), or we can choose to model on a shorter timescale, on which the ice does not move very much.","category":"page"},{"location":"halmo/halmo/","page":"Halfar-NS","title":"Halfar-NS","text":"# AlgebraicJulia Dependencies\nusing Catlab\nusing CombinatorialSpaces\nusing Decapodes\nusing DiagrammaticEquations\n\n# External Dependencies\nusing CairoMakie\nusing ComponentArrays\nusing GeometryBasics: Point3\nusing JLD2\nusing LinearAlgebra\nusing MLStyle\nusing OrdinaryDiffEq\nPoint3D = Point3{Float64};\nnothing # hide","category":"page"},{"location":"halmo/halmo/#Specify-our-models","page":"Halfar-NS","title":"Specify our models","text":"","category":"section"},{"location":"halmo/halmo/","page":"Halfar-NS","title":"Halfar-NS","text":"Our first component is the Mohamed et al. formulation of the incompressible Navier-Stokes equations. We will call the flow here \"w\". This will be the flow after collisions with glaciers are considered.","category":"page"},{"location":"halmo/halmo/","page":"Halfar-NS","title":"Halfar-NS","text":"This is Equation 10 for N=2.","category":"page"},{"location":"halmo/halmo/","page":"Halfar-NS","title":"Halfar-NS","text":"eq10forN2 = @decapode begin\n (𝐮,w)::DualForm1\n (P, 𝑝ᵈ)::DualForm0\n μ::Constant\n\n 𝑝ᵈ == P + 0.5 * ι₁₁(w,w)\n\n ∂ₜ(𝐮) == μ * ∘(d, ⋆, d, ⋆)(w) + (-1)*⋆₁⁻¹(∧ᵈᵖ₁₀(w, ⋆(d(w)))) + d(𝑝ᵈ)\nend\nto_graphviz(eq10forN2)","category":"page"},{"location":"halmo/halmo/","page":"Halfar-NS","title":"Halfar-NS","text":"Halfar's equation and Glen's law are composed like so:","category":"page"},{"location":"halmo/halmo/","page":"Halfar-NS","title":"Halfar-NS","text":"halfar_eq2 = @decapode begin\n h::Form0\n Γ::Form1\n n::Constant\n\n ∂ₜ(h) == ∘(⋆, d, ⋆)(Γ * d(h) * avg₀₁(mag(♯(d(h)))^(n-1)) * avg₀₁(h^(n+2)))\nend\n\nglens_law = @decapode begin\n Γ::Form1\n (A,ρ,g,n)::Constant\n \n Γ == (2/(n+2))*A*(ρ*g)^n\nend\n\nice_dynamics_composition_diagram = @relation () begin\n dynamics(Γ,n)\n stress(Γ,n)\nend\n\nice_dynamics = apex(oapply(ice_dynamics_composition_diagram,\n [Open(halfar_eq2, [:Γ,:n]),\n Open(glens_law, [:Γ,:n])]))\n\nto_graphviz(ice_dynamics, verbose=false)","category":"page"},{"location":"halmo/halmo/","page":"Halfar-NS","title":"Halfar-NS","text":"We now have our dynamics that govern glaciers, and our dynamics that govern water. We need to specify the physics of what happens when glaciers and water interact. There are many options, and the choice you make depends on the time-scale and resolution of the dynamics that you are interested in.","category":"page"},{"location":"halmo/halmo/","page":"Halfar-NS","title":"Halfar-NS","text":"An interaction between glacier and water dynamics can look like the following, where flow_after is the flow of water after interaction with ice is considered.","category":"page"},{"location":"halmo/halmo/","page":"Halfar-NS","title":"Halfar-NS","text":"ice_water_composition_diagram = @relation () begin\n glacier_dynamics(ice_thickness)\n water_dynamics(flow, flow_after)\n\n interaction(ice_thickness, flow, flow_after)\nend\ndraw_composition(ice_water_composition_diagram)","category":"page"},{"location":"halmo/halmo/","page":"Halfar-NS","title":"Halfar-NS","text":"We will use the language of Decapodes to encode the dynamics that ice blocks water from flowing.","category":"page"},{"location":"halmo/halmo/","page":"Halfar-NS","title":"Halfar-NS","text":"We can detect the ice with a sigmoid function. Where there is ice, we want the flow to be 0, and where there is no ice, we will not impede the flow. We won't consider any further special boundary conditions between ice and water here. Since h is a scalar-like quantity, and flow is a vector-like quantity, we can relate them using the wedge product operator from the exterior calculus. We can state these dynamics using the language of Decapodes like so:","category":"page"},{"location":"halmo/halmo/","page":"Halfar-NS","title":"Halfar-NS","text":"blocking = @decapode begin\n h::Form0\n (𝐮,w)::DualForm1\n\n w == (1-σ(h)) ∧ᵖᵈ₀₁ 𝐮\nend\nto_graphviz(blocking)","category":"page"},{"location":"halmo/halmo/","page":"Halfar-NS","title":"Halfar-NS","text":"Here, σ is a sigmoid function that is 0 when d(h) is 0, and goes to 1 otherwise. We see that w is indeed defined as 𝐮, after interacting with the ice boundary is considered.","category":"page"},{"location":"halmo/halmo/","page":"Halfar-NS","title":"Halfar-NS","text":"We can apply our composition diagram to generate our physics:","category":"page"},{"location":"halmo/halmo/","page":"Halfar-NS","title":"Halfar-NS","text":"ice_water = apex(oapply(ice_water_composition_diagram,\n [Open(ice_dynamics, [:dynamics_h]),\n Open(eq10forN2, [:𝐮, :w]),\n Open(blocking, [:h, :𝐮, :w])]))\n\nto_graphviz(ice_dynamics, verbose=false)","category":"page"},{"location":"halmo/halmo/","page":"Halfar-NS","title":"Halfar-NS","text":"We can now generate our simulation:","category":"page"},{"location":"halmo/halmo/","page":"Halfar-NS","title":"Halfar-NS","text":"sim = eval(gensim(ice_water))","category":"page"},{"location":"halmo/halmo/#Meshes-and-Initial-Conditions","page":"Halfar-NS","title":"Meshes and Initial Conditions","text":"","category":"section"},{"location":"halmo/halmo/","page":"Halfar-NS","title":"Halfar-NS","text":"Since we want to demonstrate these physics on the Earth, we will use one of our icosphere discretizations with the appropriate radius.","category":"page"},{"location":"halmo/halmo/","page":"Halfar-NS","title":"Halfar-NS","text":"rₑ = 6378e3 # [km]\ns = loadmesh(Icosphere(5, rₑ))\nsd = EmbeddedDeltaDualComplex2D{Bool, Float64, Point3D}(s)\nsubdivide_duals!(sd, Barycenter())\nwireframe(sd)","category":"page"},{"location":"halmo/halmo/","page":"Halfar-NS","title":"Halfar-NS","text":"Let's demonstrate how to add operators by providing the definition of a sigmoid function:","category":"page"},{"location":"halmo/halmo/","page":"Halfar-NS","title":"Halfar-NS","text":"sigmoid(x) = (2 ./ (1 .+ exp.(-x*1e2)) .- 1)\nfunction generate(sd, my_symbol; hodge=GeometricHodge())\n op = @match my_symbol begin\n # This is a new function.\n :σ => sigmoid\n :mag => x -> norm.(x)\n # Remaining operations (such as our differential operators) are built-in.\n _ => default_dec_matrix_generate(sd, my_symbol, hodge)\n end\n return op\nend;","category":"page"},{"location":"halmo/halmo/","page":"Halfar-NS","title":"Halfar-NS","text":"Let's combine our mesh with our physics to instantiate our simulation:","category":"page"},{"location":"halmo/halmo/","page":"Halfar-NS","title":"Halfar-NS","text":"fₘ = sim(sd, generate);","category":"page"},{"location":"halmo/halmo/","page":"Halfar-NS","title":"Halfar-NS","text":"We can now supply initial conditions:","category":"page"},{"location":"halmo/halmo/","page":"Halfar-NS","title":"Halfar-NS","text":"ice_thickness = map(sd[:point]) do (_,_,z)\n z < 0.8*rₑ ? 0 : 1\nend\n\nflow = dec_dual_derivative(0,sd) *\n map(sd[sd[:tri_center], :dual_point]) do (_,_,z)\n (rₑ-abs(z))/rₑ\n end\n\n# There is no water \"under\" the ice:\nflow = dec_wedge_product_pd(Tuple{0,1},sd)(1 .- sigmoid(ice_thickness), flow)\n\nu₀ = ComponentArray(\n ice_thickness = ice_thickness,\n flow = flow,\n water_dynamics_P = zeros(ntriangles(sd)))\n\nconstants_and_parameters = (\n glacier_dynamics_n = 3,\n glacier_dynamics_stress_A = fill(1e-16, ne(sd)),\n glacier_dynamics_stress_ρ = 910,\n glacier_dynamics_stress_g = 9.8101,\n water_dynamics_μ = 0.01);","category":"page"},{"location":"halmo/halmo/#Execute-the-Simulation","page":"Halfar-NS","title":"Execute the Simulation","text":"","category":"section"},{"location":"halmo/halmo/","page":"Halfar-NS","title":"Halfar-NS","text":"We specified our physics, our mesh, and our initial conditions. We have everything we need to execute the simulation.","category":"page"},{"location":"halmo/halmo/","page":"Halfar-NS","title":"Halfar-NS","text":"tₑ = 100\n\n# Julia will pre-compile the generated simulation the first time it is run.\n@info(\"Precompiling Solver\")\nprob = ODEProblem(fₘ, u₀, (0, 1e-4), constants_and_parameters)\nsoln = solve(prob, Vern7())\nsoln.retcode != :Unstable || error(\"Solver was not stable\")\n\n@info(\"Solving\")\nprob = ODEProblem(fₘ, u₀, (0, tₑ), constants_and_parameters)\nsoln = solve(prob, Vern7())\n@show soln.retcode\n@info(\"Done\")","category":"page"},{"location":"halmo/halmo/#Results","page":"Halfar-NS","title":"Results","text":"","category":"section"},{"location":"halmo/halmo/","page":"Halfar-NS","title":"Halfar-NS","text":"Let's look at the dynamics of the ice:","category":"page"},{"location":"halmo/halmo/","page":"Halfar-NS","title":"Halfar-NS","text":"begin\n frames = 200\n fig = Figure()\n ax = LScene(fig[1,1], scenekw=(lights=[],))\n msh = CairoMakie.mesh!(ax, s, color=soln(0).ice_thickness, colormap=:jet, colorrange=extrema(soln(0).ice_thickness))\n\n Colorbar(fig[1,2], msh)\n record(fig, \"halmo_ice.gif\", range(0.0, tₑ; length=frames); framerate = 20) do t\n msh.color = soln(t).ice_thickness\n end\nend","category":"page"},{"location":"halmo/halmo/","page":"Halfar-NS","title":"Halfar-NS","text":"(Image: HalfarMohamedIce)","category":"page"},{"location":"halmo/halmo/","page":"Halfar-NS","title":"Halfar-NS","text":"DocInfo.get_report(info) # hide","category":"page"},{"location":"ascii/#ASCII-and-Vector-Calculus-Operators","page":"ASCII Operators","title":"ASCII and Vector Calculus Operators","text":"","category":"section"},{"location":"ascii/","page":"ASCII Operators","title":"ASCII Operators","text":"include(joinpath(Base.@__DIR__, \"..\", \"docinfo.jl\"))\ninfo = DocInfo.Info()","category":"page"},{"location":"ascii/","page":"ASCII Operators","title":"ASCII Operators","text":"Some users may have trouble entering unicode characters like ⋆ or ∂ in their development environment. So, we offer the following ASCII equivalents. Further, some users may like to use vector calculus symbols instead of exterior calculus symbols where possible. We offer support for such symbols as well.","category":"page"},{"location":"ascii/#ASCII-Equivalents","page":"ASCII Operators","title":"ASCII Equivalents","text":"","category":"section"},{"location":"ascii/","page":"ASCII Operators","title":"ASCII Operators","text":"Unicode ASCII Meaning\n∂ₜ dt derivative w.r.t. time\n⋆ star Hodge star, generalizing transpose\nΔ lapl laplacian\n∧ wedge wedge product, generalizing the cross product\n⋆⁻¹ star_inv Hodge star, generalizing transpose\n∘(⋆,d,⋆) div divergence, a.k.a. ∇⋅\navg₀₁ avg_01 average values stored on endpoints of edges","category":"page"},{"location":"ascii/#Vector-Calculus-Equivalents","page":"ASCII Operators","title":"Vector Calculus Equivalents","text":"","category":"section"},{"location":"ascii/","page":"ASCII Operators","title":"ASCII Operators","text":"Vec DEC How to enter\ngrad d grad\ndiv ∘(⋆,d,⋆) div\ncurl ∘(d,⋆) curl\n∇ d \\nabla\n∇ᵈ ∘(⋆,d,⋆) \\nabla \\ \\^d \\\n∇x ∘(d,⋆) \\nabla \\ x\nadv(X,Y) ∘(⋆,d,⋆)(X∧Y) adv","category":"page"},{"location":"ascii/","page":"ASCII Operators","title":"ASCII Operators","text":"DocInfo.get_report(info) # hide","category":"page"},{"location":"#Decapodes.jl","page":"Decapodes.jl","title":"Decapodes.jl","text":"","category":"section"},{"location":"","page":"Decapodes.jl","title":"Decapodes.jl","text":"Decapodes.jl is a framework for developing, composing, and simulating physical systems.","category":"page"},{"location":"","page":"Decapodes.jl","title":"Decapodes.jl","text":"Decapodes.jl is the synthesis of Applied Category Theory (ACT) techniques for formalizing and composing physics equations, and Discrete Exterior Calculus (DEC) techniques for formalizing differential operators. CombinatorialSpaces.jl hosts tools for discretizing space and defining DEC operators on simplicial complexes, and DiagrammaticEquations.jl hosts tooling for representing the equations as formal ACT diagrams. This repository combines these two packages, compiling diagrams down to runnable simulation code.","category":"page"},{"location":"","page":"Decapodes.jl","title":"Decapodes.jl","text":"By combining the power of ACT and the DEC, we seek to improve the scientific computing workflow. Decapodes simulations are hierarchically composable, generalize over any type of manifold, and are performant and accurate with a declarative domain specific language (DSL) that is human-readable.","category":"page"},{"location":"#Getting-started","page":"Decapodes.jl","title":"Getting started","text":"","category":"section"},{"location":"","page":"Decapodes.jl","title":"Decapodes.jl","text":"Walkthroughs creating, composing, and solving Decapodes are available in the side-bar of this documentation page. Further example scripts are available in the examples folder of the Decapodes.jl GitHub repo, and will be added to this documentation site soon.","category":"page"},{"location":"","page":"Decapodes.jl","title":"Decapodes.jl","text":"note: Under Active Development\nThis library is currently under active development, and so is not yet at a point where a constant API/behavior can be assumed. That being said, if this project looks interesting/relevant please contact us and let us know!","category":"page"}] }