From f0a2ed4e3beca620e011150bc24bcbc46fe64cc5 Mon Sep 17 00:00:00 2001 From: MACHIN Date: Wed, 18 Sep 2024 11:55:57 +0100 Subject: [PATCH] adding updated cluster guidance for consistency with SQL warehouse guidance --- ADA/databricks_fundamentals.qmd | 47 ---- ADA/databricks_rstudio_personal_cluster.qmd | 228 +++++++++++++++----- ADA/databricks_rstudio_sql_warehouse.qmd | 4 + images/databricks-cluster-id.png | Bin 0 -> 37340 bytes 4 files changed, 183 insertions(+), 96 deletions(-) create mode 100644 images/databricks-cluster-id.png diff --git a/ADA/databricks_fundamentals.qmd b/ADA/databricks_fundamentals.qmd index 6e3e0ca..aa634f9 100644 --- a/ADA/databricks_fundamentals.qmd +++ b/ADA/databricks_fundamentals.qmd @@ -200,51 +200,4 @@ All compute options can be used both within the Databricks platform and be conne - [Setup Databricks SQL Warehouse with RStudio](/ADA/databricks_rstudio_sql_warehouse.html) - [Setup Databricks Personal Compute cluster with RStudio](/ADA/databricks_rstudio_personal_cluster.html) ---- - -### Creating a personal compute resource - ------------------------------------------------------------------------- - -1. To create your own personal compute resource click the 'Create with DfE Personal Compute' button on the compute page\ - -![](/images/ada-compute-personal.png) - -2. You'll then be presented with a screen to configure the cluster. There are 2 options here under the performance section which you will want to pay attention to; Databricks runtime version, and Node type\ - \ - **Databricks runtime version** - This is the version of the Databricks software that will be present on your compute resource. Generally it is recommended you go with the latest LTS (long term support) version. At the time of writing this is '15.4 LTS'\ - \ - **Node type** - This option determines how powerful your cluster is and there are 2 options available by default:\ - - - Standard 14GB 4-Core Nodes\ - - Large 28GB 8-Core Nodes\ - \ - If you require a larger personal cluster this can be requested by the ADA team.\ - \ - ![](/images/ada-compute-personal-create.png) - -3. Click the 'Create compute' button at the bottom of the page. This will create your personal cluster and begin starting it up. This usually takes around 5 minutes\ - \ - ![](/images/ada-compute-personal-create-button.png) - -4. Once the cluster is up and running the icon under the 'State' header on the 'Compute' page will appear as a green tick\ - \ - ![](/images/ada-compute-ready.png) - -::: callout-note -## Clusters will shut down after being idle for an hour - -Use of compute resources are charged by the hour, and so personal clusters have been set to shut down after being unused for an hour in order to prevent unnecessary cost to the Department. -::: - -::: callout-important -## Packages and libraries - -As mentioned above compute resources have no storage of their own. This means that if you install libraries or packages onto a cluster they will only remain installed until the cluster is stopped. Once re-started those libraries will need to be installed again. - -An alternative to this is to specify packages/libraries to be installed on the cluster at start up. To do this click the name of your cluster from the 'Compute' page, then go to the 'Libraries' tab and click the 'Install new' button. - -Certain packages are installed by default on personal cluster and do not need to be installed manually. The specific packages installed are based on the Databricks Runtime (DBR) version your cluster is set up with. A comprehensive list of packages included in each DBR is available in the [Databricks documentation](https://learn.microsoft.com/en-us/azure/databricks/release-notes/runtime/). -::: - Once you have a compute resource you can begin using Databricks. You can do this either through connecting to Databricks through RStudio, or you can begin coding in the Databricks platforms using scripts, or [Notebooks](/ADA/databricks_notebooks.html). diff --git a/ADA/databricks_rstudio_personal_cluster.qmd b/ADA/databricks_rstudio_personal_cluster.qmd index 64b5c14..c22f4bd 100644 --- a/ADA/databricks_rstudio_personal_cluster.qmd +++ b/ADA/databricks_rstudio_personal_cluster.qmd @@ -4,10 +4,21 @@

-The following instructions set up an ODBC connection between your laptop and your DataBricks cluster, which can then be used in R/RStudio to query data using an ODBC based package or `sparklyr`. Personal clusters are able to run SQL, R, python and scala. They can be used within the DataBricks environment, or through R studio and can be set up yourself if you don't have access to a SQL warehouse or shared cluster. +The following instructions set up an ODBC connection between your laptop and your Databricks cluster, which can then be used in RStudio to query data using an ODBC based package or `sparklyr`. Personal clusters are able to run SQL, R, Python and Scala. They can be used within the Databricks environment, or through RStudio and can be set up yourself if you don't have access to a SQL warehouse or shared cluster.

+::: callout-note + +Please note: This guidance should be followed if you wish to run R scripts from RStudio against data held against tables in Databricks, or if you wish to work with a file held in a Databricks volume. You can read more about volumes on our [Databricks fundamentals page](ADA/databricks_fundamentals.html#volumes). If you only need to run SQL scripts against Databricks data then we would suggest setting up a [SQL warehouse compute connection](/ADA/databricks_rstudio_sql_warehouse.html) instead. +::: + + +You can use data from Databricks with R code in two different ways: + +- In scripts or notebooks via the Databricks environment +- In RStudio via an ODBC connection + ------------------------------------------------------------------------ # Pre-requisites @@ -16,95 +27,214 @@ The following instructions set up an ODBC connection between your laptop and you You must have: -- Access to Databricks -- Access to a personal cluster on DataBricks +- Access to Databricks and the data you'll be working with +- Access to a personal cluster on Databricks - R and RStudio downloaded ------------------------------------------------------------------------ -# Downloading an ODBC driver +## Compute resources + +When your data is moved to Databricks, it will be stored in the Unity Catalog and you will need to use a compute resource to access it from other software such as RStudio. + +A compute resource allows you to run your code using cloud computing power instead of using your laptop's processing power. This means that using compute resources can allow your code to run faster than it would if you ran it locally, as it is like using the processing resources of multiple computers at once. On this page, we will be referring to the use of personal clusters as the compute resource to run your code. + +------------------------------------------------------------------------ + +### Personal clusters + +--- + +A personal cluster is a compute resource that supports the use of multiple code languages (R, SQL, Scala and Python). You can create your own personal cluster within the Databricks interface. + +When you set up your personal cluster, you will be asked to select a runtime for that cluster. Different runtimes allow you to use different features and package versions. Certain packages are installed by default on personal cluster and do not need to be installed manually. The specific packages installed are based on the Databricks Runtime (DBR) version your cluster is set up with. A comprehensive list of packages included in each DBR is available in the [Databricks documentation](https://learn.microsoft.com/en-us/azure/databricks/release-notes/runtime/). + +Compute resources, including personal clusters, have no storage of their own. This means that if you install libraries or packages onto a cluster they will only remain installed until the cluster is stopped. Once re-started those libraries will need to be installed again. + +An alternative to this is to specify packages/libraries to be installed on the cluster at start up. To do this click the name of your cluster from the 'Compute' page, then go to the 'Libraries' tab and click the 'Install new' button. + +::: callout-note +## Clusters will shut down after being idle for an hour + +Use of compute resources are charged by the hour, and so personal clusters have been set to shut down after being unused for an hour in order to prevent unnecessary cost to the Department. +::: + +--- + +## Process + +There are four steps to complete before your connection can be established. These are: + +- Creating a personal compute resource (if you do not already have one) +- Installing an ODBC driver on your laptop to enable a connection between your laptop and Databricks +- Modifying your .Renviron file to establish a connection between RStudio and Databricks +- Adding connection code to your existing scripts in RStudio + +--- + +### Creating a personal compute resource + +------------------------------------------------------------------------ + +1. To create your own personal compute resource click the 'Create with DfE Personal Compute' button on the compute page\ + +![](/images/ada-compute-personal.png) + +2. You'll then be presented with a screen to configure the cluster. There are 2 options here under the performance section which you will want to pay attention to; Databricks runtime version, and Node type\ + \ + **Databricks runtime version** - This is the version of the Databricks software that will be present on your compute resource. Generally it is recommended you go with the latest LTS (long term support) version. At the time of writing this is '15.4 LTS'\ + \ + **Node type** - This option determines how powerful your cluster is and there are 2 options available by default:\ + + - Standard 14GB 4-Core Nodes\ + - Large 28GB 8-Core Nodes\ + \ + If you require a larger personal cluster this can be requested by the ADA team.\ + \ + ![](/images/ada-compute-personal-create.png) + +3. Click the 'Create compute' button at the bottom of the page. This will create your personal cluster and begin starting it up. This usually takes around 5 minutes\ + \ + ![](/images/ada-compute-personal-create-button.png) + +4. Once the cluster is up and running the icon under the 'State' header on the 'Compute' page will appear as a green tick\ + \ + ![](/images/ada-compute-ready.png) + + +------------------------------------------------------------------------ + +## Setting up the ODBC driver ------------------------------------------------------------------------ -1. Install the 'Simba Spark ODBC' driver from the software centre. +::: callout-important +If you have previously set up an ODBC connection, or followed the [set up Databricks SQL Warehouse with RStudio](/ADA/databricks_rstudio_sql_warehouse.html) guidance, then you can skip this step. +::: - i) Open the Software Centre via the start menu. +- Open the Software Centre via the start menu - ii) In the 'Applications' tab, click 'Simba Spark ODBC Driver 64-bit'. ![](../images/databricks-software-centre.png) +- In the 'Applications' tab, click `Simba Spark ODBC Driver 64-bit` - iii) Click install. +::: {align="center"} +![](../images/databricks-software-centre.png) +::: -2. Get connection details for the cluster from Databricks. To set up the connection you will need a few details from your cluster within DataBricks. +- Click install - i) Login to [Databricks](https://adb-6882499576863257.17.azuredatabricks.net/?o=6882499576863257) - ii) Click on the 'Compute' tab in the sidebar. ![](../images/databricks-compute.png) +------------------------------------------------------------------------ - iii) Click on the name of the cluster you want to connect to, and click the 'Advanced options' at the bottom of the cluster page. +### Establishing an RStudio connection using environment variables - iv) Click the 'JDBC/ODBC' tab under 'Advanced options' +------------------------------------------------------------------------ - v) Make a note of the 'Server hostname', 'Port', and 'HTTP Path'. +The `ODBC` package in RStudio allows you to connect to Databricks by creating and modifying three environment variables in your .Renviron file. -3. Get a personal access token from Databricks for authentication. +::: callout-note +If you have previously established a connection between a SQL Warehouse and RStudio, then some of these variables will already be in your .Renviron file. +::: - i) In Databricks, click on your email address in the top right corner, then click 'User settings'. +To set the environment variables, call `usethis::edit_r_environ()`. You will then need to enter the following information: - ii) Go to the 'Developer' tab in the side bar. Next to 'Access tokens', click the 'Manage' button. ![](../images/databricks-access-tokens.png) +``` +DATABRICKS_HOST= +DATABRICKS_CLUSTER_PATH= +DATABRICKS_TOKEN= - iii) Click the 'Generate new token' button. +``` - iv) Name the token, then click 'Generate'. *Note that access tokens will only last as long as the value for the 'Lifetime (days)' field. After this period the token will expire, and you will need to create a new one to re-authenticate.* +Once you have entered the details, save and close your .Renviron file and restart R (Session > Restart R). - v) Make a note of the 'Databricks access token' it has given you. **It is important to copy this somewhere as you will not be able to see it through Databricks again.** +::: callout-note +Everyone in your team that wishes to connect to the data in Databricks and run your code must set up their .Renviron file individually, otherwise their connection will fail. +::: -4. Setup ODBC connection from your laptop. We now have all the information we need to setup a connection between our laptop and DataBricks. +The sections below describe where to find the information needed for each of the environment variables. - i) In the start menu, search 'ODBC' and open 'ODBC Data Sources (64-bit)'. +------------------------------------------------------------------------ - ii) On the 'User DSN' tab click the 'Add...' button. +#### Databricks host - iii) In the 'Create New Data Source' window, select 'Simba Spark ODBC Driver' and click 'Finish'. +------------------------------------------------------------------------ - iv) In the 'Simba Spark ODBC Driver DSN Setup' window, +The Databricks host is the instance of Databricks that you want to connect to. It's the URL that you see in your browser bar when you're on the Databricks site and should end in "azuredatabricks.net" (ignore anything after this section of the URL). - a. Enter a 'Data Source Name' and 'Description'. Choose a short and sensible data source name and note it down as this is what you will use to connect to Databricks through RStudio. *As you can set up more than one cluster on Databricks, use the description to make clear which cluster this connection is for. The description shown below describes that this connection is using an 8 core cluster on Databricks Runtime Environment 13.* - b. Set the remaning options to the settings below. - - Enter the 'Server Hostname' for your cluster in the 'Host(s):' field (you noted this down in step 2). - - In the Port section, remove the default number and use the Port number you noted in step 2. - - Set the Authentication Mechanism to 'User Name and Password'. - - Enter the word 'token' into the 'User Name:' field, then enter your 'Databricks access token' in the 'Password:' field. - - Change the Thrift Transport option to HTTP. - - Click the 'HTTP Options...' button and enter the 'HTTP Path' of your Databricks cluster, then click 'Okay'. - - Click the 'SSL Options...' button and tick the 'Enable SSL' box, then click the 'OK' button. - - ![](../images/odbc-driver-settings.png) - c. Click the 'Test' button to verify the connection has worked. You should see the following message. *If you get an error here, repeat steps 5.e.i -- 5.e.ix again and ensure all the values are correct.* +--- - ![](../images/databricks-test-connection.png) +#### Databricks cluster path - d. Click the 'OK' button to exit the 'Test Results' window, then the 'OK' button in the 'Simba Spark ODBC Driver DSN Setup' window. +--- + +In Databricks, go to Compute in the left hand menu, and click on the name of your personal cluster: + +![](../images/databricks-cluster-id.png) +::: + + +On the Configuration tab, scroll to the bottom of the page and click Advanced Options > JDBC/ODBC > HTTP Path, and copy the text after the last forward slash. This is your cluster path. -5. Connect through RStudio. Watch the below video and view the [ADA_RStudio_connect GitHub repo](https://github.com/dfe-analytical-services/ADA_RStudio_connect) for methods on connecting to Databricks and querying data from RStudio. ------------------------------------------------------------------------ -# Pulling data into R studio from Databricks +#### Databricks token ------------------------------------------------------------------------ -Once you have set up an ODBC connection as detailed above, you can then use that connection to pull data directly from Databricks into R Studio. Charlotte recorded a video demonstrating two possible methods of how to do this. The recording is embedded below: +The Databricks token is a personal access token. + +A personal access token is is a security measure that acts as an identifier to let Databricks know who is accessing information from the SQL warehouse. Access tokens are usually set for a limited amount of time, so they will need renewing periodically. + +- In Databricks, click on your email address in the top right corner, then click 'User settings' + +- Go to the 'Developer' tab in the side bar. Next to 'Access tokens', click the 'Manage' button ::: {align="center"} - +::: callout-note +Note that access tokens will only last as long as the value for the 'Lifetime (days)' field. After this period the token will expire, and you will need to create a new one to re-authenticate. Access tokens also expire if they are unused after 90 days. For this reason, we recommend setting the Lifetime value to be 90 days or less. ::: -A template of all of the code used in the above video can be found in the [ADA_RStudio_connect GitHub repo](https://github.com/dfe-analytical-services/ADA_RStudio_connect). +- Make a note of the 'Databricks access token' it has given you + +::: callout-warning +It is very important that you immediately copy the access token that you are given, as you will not be able to see it through Databricks again. If you lose this access token before pasting it into RStudio then you must generate a new access token to replace it. +::: + + +------------------------------------------------------------------------ + +### Pulling data into RStudio from Databricks + +------------------------------------------------------------------------ + +Now that you have enabled ODBC connections on your laptop, and enabled a connection between Databricks and RStudio, you can add code to your existing scripts to pull data into RStudio for analysis. If you have connected to databases before, this code will look quite familiar to you. + +To access the data, we will make use of the `sparklyr` package. You will also need to have the `dbplyr` package installed. + +Include the following code in your R Script: + +``` r + +library(tidyverse) +library(sparklyr) +library(dbplyr) + +sc <- spark_connect( + cluster_id = Sys.getenv("DATABRICKS_CLUSTER_PATH"), + method = "databricks_connect" +) -Key takeaways from the video and example code: +tbl( + sc, + I("catalog_10_gold.information_schema.catalogs") +) |> + head() -- The main change here compared to connecting to SQL databases is the connection method. The installation and setup of the ODBC driver are all done pre-code, and the only part of the code that will need updating is your connection (usually your con variable). -- If your existing code was pulling in tables from SQL via the `RODBC` package or the `dbplyr` package, then this code should in theory run with minimal edits needed. -- If you were writing tables back into SQL from R, this is where your code may need the most edits. -- If your code is stored in a repo where multiple analysts contribute to and run the code, in order for the code to run for everyone you will all need to individually install the ODBC driver and **give it the same name** so that when the `con` variable is called, the name used in the code matches everyone's individual driver and runs for everyone. If this is the case, please **add a note about this to your repo's readme file** to help your future colleagues. +``` \ No newline at end of file diff --git a/ADA/databricks_rstudio_sql_warehouse.qmd b/ADA/databricks_rstudio_sql_warehouse.qmd index b7da6d5..c329ee6 100644 --- a/ADA/databricks_rstudio_sql_warehouse.qmd +++ b/ADA/databricks_rstudio_sql_warehouse.qmd @@ -77,6 +77,10 @@ An ODBC driver is required for the `ODBC` package in R to work - you must instal --- +::: callout-important +If you have previously set up an ODBC connection, or followed the [set up Databricks personal compute cluster with RStudio](/ADA/databricks_rstudio_personal_cluster.html) guidance, then you can skip this step. +::: + - Open the Software Centre via the start menu - In the 'Applications' tab, click `Simba Spark ODBC Driver 64-bit` diff --git a/images/databricks-cluster-id.png b/images/databricks-cluster-id.png new file mode 100644 index 0000000000000000000000000000000000000000..7b40ce79a816246444aee3a865be23ca5187c3bc GIT binary patch literal 37340 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Ð~)S zE-toh=b@@zeY+?YdfRm!r7d6RRu1BCiNxgtHr;43nU{@x_nT)h&gQG8D)c1dcl(hN z^<%o5r8q~QJ*h%eVfu=TGPlU}+^=Kg4&M5~@nS+OW4#|Enz6%^oy2>)l2YROXznwj zlJ$Xs!^@8AX2FX3v3*K5N8bv_zqJRrtB1R3Hsm{I3T$gd_j8J@6nH&SoxJ%#3`Pb> z9_2Q%Pg?Cck9xI-0Az4>J^I17mODttq0Vv?sq|#D<+FxS^p1n~BE69)GZhN+V&ZqJDd@gQc`ks1icG5+!&L>#?Qq-a`t>SrvDTTN?^X{<@Eos{%Yd!x&;sJY z%ixI44c*6!%FNF^a=1r8W5-owMX3!e)k*Eaewl0Z%rrc1XQfUc_=mnxiaBdBl4pAO zQrqbc@Vz&-x*I-KVta8goNo>4?q1$-o`{g~u{nz*gAH|IE1>y`S95!6{E{bja4`dNo0W6d>PLsbzSQ<> z__hy!5&I~^NiV*7=P`jdR=n)MdHLhcjYJObSAg4=HEm5+D;F3G4~yl%4!Lk-wgk| z-%A_egWPDF_vg$ux&c&+J>|B5m2_E?5y3jU2?JQQoBkrN(T#sVCZ*ZxKIKl z1!PNDKBF}5zga%=z`ITY+P&bf1rPHGD@@@WDwpfr>BW~g_aoAEu`MX)qZj=*O@>GX zDv;>rGj=ul&c-Ak9z}(#QkCI;@67j@-hyE4QGH)4JtfCXXcj6WhEtJ@65Vj;D(r}Q za8D6~I%aq!urN~HB=@qEe7RbxlBZm%FazEQBFiHCyAnS^8QJ#ehUZ7#vMzKhzl)n& zP85X=WbfcHNxKc1Jx%|9p7+>}Mwt0Fh{ZDvCcL4}}IRQ%_LGHOPI&B46aoDdVO-1?oUDk2o7Qv~-)FPLRvNd>nJy{djwu z*@oW!u0;kIIc=9`JY=v+xVQH;*64_8QA;V+X=dl?VuYp9l_tAd6>6aku1z|lvUK}? z4?%Kupybe*(#tR46cKPDRoBS?EWXo|z8`l{VoZ5wxoOSlD_;NvJXXPRRo&-=T?)W( zCW-H&Y6ZweEYR=X+eo>2C;ILMd%gQ}lg5_s10nU0#PVCr^p2Y*Amasm$KX~qewLft zWwmLb5_q`^XV&K}`iQ;Va(9Ep+CL@makI{zFXASTN%huhAS`my&MS#Qoxsa0P1 z5B;J_YjzA!mW^ld6S=Vncyh?&@+H~gt#ynXH`l9UqiL*18={$YQ2=n(ETKn>3B8W{ zyq=GgW8e5%sUU9{Vr009bJne28$BU_BS?o$kZK;WQN>Y>J}?!wzTLfJF~&|zo8xN$K~!r@Y$}S-${OyD|XGE)X}l)Ga^@P zbwE(T$~9%){^mTY{1`DvdQ$h0ZDsO-?(`W5d33DY*+iD1joUX_$-X>~zVKYG z-)r|#8PBAL*YmpCIkus}^9jAF<2%R-{wf7a~PKrL+F%WZS z(nWCfp#kcQo**jsUi<@s`1atr@xc6c8e;hMLmplNWI*4&oJcB|Z7JU?qeJDl+G;;^ zOyH}4@7)wfoKBWQ*OAG|5)jVG#?A1mdEC-~JQYXHIu?mH89kWGfsb0%30^P^VteSW zbwO(2I zB7C!5MM*WL1UgX?@fR2bb-%E*`Ra(Hd%JG+nyk2mLeDDp@N;{9Q5j7rnREd#THwj2 z&=RBPs;9X^@U3sZgOaaHj1~ClB_%vgV~87ti0HET5oeD0dm)QlqulA|PXi_DC?3Rh zo|6j*3~*D|3CdR$aBuM<^rM@-w`k#Lg-5yd-Fso}*jT0CZ8d6%7*xHX1Z57vOX>~n zm%NePlv*p2Qf{sqHvk)TC*@#meq5++{ zM(lzO$~HctNF7TbZ23d9JZps68VwA@sxkZhEcyBmoj@uD@gqOZO1agt!lA8^QWgd8 zn#hIDHxZ)IDS>yrr$-Ei=;3T}qxH(Xw8^jD^Dj+ca5q+ZN5H*c1cTDC;a>Z&RJfE^ zHmt<1oanOlTX5KN)PV#j4!%{no|-gzNSDTGB~&;d`4#kVf%vrLm!9TLB1!>%TGct! zPl}r<&0u7?pS_`QF(vUW%5=IqI4EQIgA*);wT6#b_b|`GCib!ECn-xLuRQyUZnknF zWUMXME%4_fHV}r{iZUG$lvEcnZ8B1WYKEwTer76`_;a|j#3hLyP`6a-L`bsk8{P2T zLS~tmzcUm!G7Uc3STSwGy%Kw)E+6kSdx^cUr#Zl z$x2H?dmikEW+m;O2#fxLfYK3T!p%!r|K?4~!n8eyIzw?I;sb}4rsdY1b{UA$arZ&) zNK60{L1jVx>;#&!4j-A$t`ECsb{2hDT?s~+xrR3U=)quPLeHGlg9UOqqi?ns6MVpz zr9%GPwzTpYv3v~-{ItqYOPJ4XC1$v8)r-zo6ZfaFqR7Nx@it!qfi(20?mUV6&1dg< zA-?rl{97pBusVR=qN5Ds)fU$$@Lf-b$~A&^uuyOl>73N=4}00!lNE~ybkEl+^}L*0 zC5)TiSs3en@|`0FdNVMu8MwqcFL772)=}FOM_3}^s8@2HlHK=otAwfI_sv>;t3R># zhIOO*1@EMr4~o~p;@!lTBjK+#&`Sq?l|1UyBipl}GdF1)YdCo>VKkbpL*y5||LsK7N^CKnc-Y8;|S!xI(7_n@Has10b9TIcU+bFdHgGtvmBu zkLlg?!ijy~BG_wU<|45Pyid&VupXxkAorptdE8d?)FpcxV~0IX)a8G1bjqBU`Y?(f zTQ<20Ge+NU8lF;Phu%vxMB~vV%Xq0Ej zO4xiC5EhSk(2BqK%@=$x=6olUv6zOvmL*@7k{`-Myh! z+%&$#8~jFqmMDa}iC|QQ^=_3qJX{b+8HO$>iGXkuvFDjfzh$UJUyGhB0THhr$>~E$ zLYyZPn6!)%o-A&m+&yuwm4AH?r1pJ4=TN^(T%&0O1j^Pjy4qcbd^_|sFIbC;ptSln zz7*_acFOFr%|(|z`w0eNOgi6_G5+qAOUBCfgZ%!fz4YN;k}KKB-sx0$jgY5*I^EG! zQ5A?4g2?aGMg1c&%R!#>1j3)NkPPmUgi!!D(eJ@3;Jq`Bj>+gri~G`#srObuHahV| z!>Kjd-~P)5y$(tydl^Zrka67BVCSV&>g;nc!5LI)5hymY6LfY^$Xqg!`A}^OmSs&t zVraLkAeVLTfx|UL{qeJau*0dI8d#gXDi=bd$RQk5o$Nwc$=>+s=O)5WGt=aW7<$ga zXF*{%OxBa-KM~WZ&X-|5^?w#WA=KRJoj2x6cY??fm$eu_>WiZ{qHgfVL#*0(^(l0; zK7iHG>f>>5z8V6U?s>x`l}#Ih0~I6$etnO!O_eBet#UzK+lqh-1U?gKFnwd7kX<O`-emwVFO zilx!Ubb<_t=iZ(C76FNlE$unT=tLF%v7au|6mtud$O|t6O%+<~nl^>7G3Q1qV;Uzq zT~rP;)vJ!rNy~Kmj7vIFS^J}87Z`T%Zg#IUCEGJPz+xfTT-xvefaglr>h-n%NdBok z&>evUDRA@rFhKV`Vgcxw9F#GbhgCbqiX4vwzV*0*;*QDDhZjADjC1$(aZIWAYX>Lc zQ?GJOt7L}MVxBtDB_Z+#6x>~rg4d5?0-ltx-tmq1ZjbmOQadl>%*>8?fW5h8R9pdr zeJgGu;Y5lumwrCvGRM!K&#dH}wKD_i+-^XiPA%&yHUZwqGIB~OF>Qp-O}DMzCAZTY z#ERUpA2x15P*mG`8yGP3>b73=RlEqr!;_K2{g)Lv;f^12JHPT1Y6a}G__kY`d+x;J zEAhBjZovKqZU4R>x=bdA42ePlg3Re8;E1fngZ$G4D#|{w9ox_QZ!nkb0~0%1-m>#? zfqn+}a|-=@tO~ZHSgFl>YAad^B!t`ask=pGVl&tadG^#5=A+T#_|F4_E;M zEgDLUwn70^zK_r;L^8mnj1%|X0jz=t<)tgrS&g3=v(+wAXD!t|QJwOWMw?$pF>5xG zAeSTHnP?fSRhjW*GE*O1)HC`u07F!Dz~sc`0^b&-Jub>OupHi-=Lf1XRTRwN5pgx9 zjw7fIX-n1;fa?{Mh1pq1XPEPq^V0M%lEAwcj38h~zb}}LlozVQ zL9e1I9wh|9da}cwm_fJgyL8v~b3u5Z614nvX9_iA&U^h;YX(^qzUbEchqIEm@0t5# zY;FqA7SpLd3$iRC5DkS3a%6ftdt?*_yVjQiD8Zbma}2-4H-{yChZr|wngXX^#1U?W z-%Le&-fw=1j^#~1+bUQdSs0NPB;7Y`7v<=~q+xc2+Z?}l7uKj7%#UkRt+(Kr-OU~& zFXr=DKG+RD)GQb@bjvwkrt{PtN-l?3qG7WrY|Kr%A&38_%gIs-!SvzfT3{r2V<70?L zd&Q0+-mX~cv1kX+Yg`BGNG4UC#I$IeP~SU)!@0IK83upma|UB z&nF~FA)SE_wwNBW9Q?9_qhPQ7k89iyP~sEIQBJ0nNi5%0gtGw8%SBSTBCM-MQ^ga! z2c;*ZhwMxtW8dGfE$OfNr5>N?P#>w`#q=Bb5)g|*LNPCXR%Hh66tkdptM1hVLJkCYLI5gp%)YG&B9+Fxr-T z*0!?*=+j1r{J7P6ita7F*e#@<&C7=VwmqWKI+Jj0gv?MK-yxkR^Xn>)29ym-xPX2P z97hh>e#Le=hekXGnjbRRDS*%AJ{a{CD-T;?;dmmPweNm~6R_8$)sy#tYBiTkqAKSn zULbGPW2u1+0dUj~(OWxqLi7!~)++kqnC#hVC`q2v6p?51>9#-~sbJM?O=a6(%ex~u z>Hl^4+idT=8HlVa8vTD zF`b9o1H$`O@1-2MvKvrcm1er%ZYX?A3or6nW4Z212JOZ>)5A^L0QpYv^YgQh@=C}t;x ztm+J?otJ~(6o{t9w33fkOpXvhE}8hMQkf;FNmqi5Pqp&twb7?0n-vVrS+=)--{7^Y zU?5Im5IC{loai> z^}N}1UZX`U9LFv#JHRL8k_Suo6|48wRb_GG%CRfM3=i9E;D#?XG}$ET-Y3Pfv(EZ{ zL5*3M^rcc8$IH0z(6o!w5R^N%lCT=j*MYjkZT6siYof8G9A|yw8ZtD$4zfx*!Nm@H zVKWM7BZ>#yjO0ll}<`MMg zoWgSxuH?s=eT~=Zi;t1~;}hO^s#fg12I_F5%WvRWdQxEAXeNoN0vzF1j%k3Q(kWR3 zr+a8K?@s7MHT^)%{kOCq6@hx?Fm3Gg;c*4pOrB4e4-rJifdZBYna}HK*RP~eIjw|v z!U(9R4Q;v}t2*@a^vDn?N`N$$%FZ@{?0puSTY+L1c9Cv5k5FNPkjjmNJZgAWHB=68 zC{S8>1(9vw=-}X+|T&xpre&MO+?w)U!>bU%=VrWm*8myXNdPZWvy zB_^O@v4+hP!6|}qbeGMPEt7K4T!B@xN;GoWoOnI2%8rx?0jo?J*;vG zcc$@vZiG*ebhu48UOqq9>U!zuuG2uL#gX8iD2VK)>j}kJZ63WQnL66DsUk06K>83e zj7oOlV}JtCjNFF$9nLK~s9YraVn12)AW2IymI?+)@5H=sXhla*u0|`bx{A=^4Fp?Q zju{M6W4s&^=v3-mOEr4Y?=G#8DDa@Bza&o-@g8qo`E>1gaE850;KBT^X!dK%T6c59 z#U!7i^zyeoz)3FeD(*8o@s)qTi{|IhpzOwW_+k^UL}^b|6R+r45QVS(LqE>TUI&~& z>MICYkJ(hNs#aXW%-mxCh|6K?rV5B(K~=ot2Ht5~-z3ONlWv|j!EC&Cz+mpQ`@oe7uj+9|&>(ysrUORfTM9o%RFZ=FgFW4Rv`J8zv=N zzdy!aC1zRYT-1}>zzQd6E@|zMF)$#4sQ9;Rzf$SdsG!)nng?$WhObER`=SQ>A>#K$ zYr83|_rimFIg4!dT04k%i1^lAZk@9rB<{BxZR{fdDCdW~!wC)F;rR?NFD;rhvC7@@ zQTh&IE9Rtcp!)-di?;FP_jw%ba<=>0L5ZGZqAMa(wVo>ew5~sjO(=J7nyV)%w6!GBWx4^ z4Z?ouW3#%F{SM1)J?n9)TqBA}MR)zfhXWe<@IL|FLw<%^rE0B4^#c6UO7-r{9k#k) z_e7%R)Hnv#AJNd5HQ9UP-p)U!dLtv}SHb;-e6b7ThkPzWxY~qIkv{^5($p@L{5Hy0 z$p6hU7DTF#LTYn%C$juxcJO>k^696`y0l{5zBh9NlyOGnYxH_JvS{D85qNmZl8Weh zoQ2(ShD)^*FCwuk zNIsD~=^^o6a^eYSrwcyEu&X@B4r6{z*({AR<`W1E7J1%G{bpzU>t7@npX@Vp#zrjU zPPPZbg~lyMuNqR{GMSNSr{RSzuU6%00MT98>uU|%Xs5dIX5p8{rzyO5z17f1L<1WT zF6f_kl}fk5!>L>UCO=!MgrmF6wxERivrBMQKFeREz|(xDF+QbydFL$Liu09u@3l)y z%F=|0XpCu4RU7@u4~RAMtR5JihUD;yj__@^dtAA|kWqaY7jFz0STzFUZEpu@9RiNW z;2VfY{#!~_D;CF&VP8-zntp+~HC)F760YLLe#?YIw0nlClKgdF*lnP}|E z%cy%&i$rDtmV?h*<}&_2D`qP47XX(C)2yawS+Xopm!Hkf z91gU6HvM=V?0(z}zlm^PFEkdxr`19<+j$!A2Z=uzUlZzhRZ>7boPHACD`=m-EKBp4s0A@eyxN4QBS8@ZGJeZ{ER17}9`;5^P=EM7sUVuDG3eD8*u8p184+^4Sd7 z8yn~=p`3wZSY8*CpK+^mU3-t4j($8(D5iB7k_Hm~Yo&~ufVqdb?Hs`&yYY5=O0G|; zRkWK`F;$5OcFzxz=x+{AL($#sAX3$j;GWK6Tf)JOO`?ogR{x@wFz7&{DRDXck$rVD z-?k2Yz=GkhLLRM56+yf8M6RHOf<0BhxnTEo3m2Q63KIP(UjEm3>k4P#o8JH6P&69# z{1%kkYC)5AIz``6Q{-w^scR0IZ zKM`=&Nk5;jhB#WN&KpJB75mRSC^O*seHa|6Zr2SW0Ik>QjKDZKniqw8ej5Hu;h`v$ zP{1w#Qs(G>?Z-(=rblRCDRR&l9bqGt3g_gI$qLte4oE7xfMZy!oq&oTR=RuecvZU; zxDgNJVZYc-BN_g@e^0<)R{5u;o|Kfv+>!0V;ii!jL?DqTjR)myv7(cnYT=Q+kZ<`1 zaSVcb&5QMQ|2N6~^IN2azNy1`%ez z7pDF0kV!o5dUGfOu>Z4ZDfYw}`^Qc~ZE-nmu~?U@`X?6!rw!-LA15cXwK9wd^VQx} z7@98>;(`QpLPB&y4D%#{04(e%7h10nZ8cm4Ah29*+iBg+u|wLcFMkry1-3zrNYu>9 zXIC$=?&{c0K~viorQTyC@B;egWLi!d%=Lu7QijJ-*J4I#_}?=LLM#SCU^OP^%j)$$ z6P*_NkX)`Rg)uYZ%xX;bBw#qp{JiMkmr>`BN|0ZHo-Kfq|RblCQ745J(9*9%S<*aS~j)GbZpKKJmGe0s=!Ix zbXpzg>S7Awngfme0Men4M2b_EOxqpjs`&gqa_Jz}5~ca4$Cj`r{qdpXoQk?{hvqld z``^_N5f3JP*aqF0(T)qY8cZP}T`Y>{K0TsaF^WarfFy%#Lzt_LT!n~C*Mv3Y;IF!S zC4DxDQ)tyJB83`|NanWnHc9C47jO`E0jE!!4H)0z6oy3k&X?uqaH&p147XC|u=BhS zNqcHb>o}kuY_$EkLkl*UtUsst@}r-pA`OHT9dD)Uxx`VfFJ8`z*A2|I;BPFeVmQ|6bbte}>o26JjC&zcCknJiul}``(jPzT zx`#H`?F@%Yd#L5kf!DP4Oj8M{USYMUr_4SDylrFxnhLVJiNWp~@GY)$CT}<2Ku=CrkwJ|x^sTN%4<_VVfWIs? zk$YBDfCnul*Ic9MrIMQYdI`+YQ1JFcFw-d*b>z*}_Z4Gl_~%k2Ynl}C%ZRF}reJcK z#knuRE!tfBl+Ccg=L1YC<|dJ_!v%jgDXJB4A|xV-?OqJQEIv0BPP>g@+e)2u-_c_o z?*^n=2TDn8^Gi6AN>&0}8Y8 zA7>8@gk^rzI-T4YhovBoGMH}T#}`wwH@Tu;{@j_SQb%t-W+OiLH{rW#*tiZ zi3d|8)u;0kPw-wmAV{oY;$WphTTFhS;`~MZSi}7>;(n?Rj?1Uw^YY^1slIYUIlFiD zTLpcQoGn@NpDr)Z{zC=AO*`C*e@J-+AXG!eZv7atcsZ=c0&<@#J>7EoJ>tgX@ZfEn zh;hE2x{7)^FOQB@^}jEmAeSw4uam}%kHvZNuc?sFM{kHTg{UR$~C z(V^!q`vA=Tf~Bp(GL0JKc%_l_W0+qDE%aPt1^2STR3Z55@v8Ho%#zR{@nR~51?GGy z-MT{;m}gH{sG$@Qp;>X!+^$MmdgN`M8wxR*M|fJE5E*Mw*0ujRw|-VLAW%fiCOIdg zMjiEBs7UK;MvPas`ajKU|2`Ipl`}RDrWnx>=fza_dZ~Upr0oXWpv${`rt1IIjeS(d)5?Ywxpvz$IcF;Dh%6t949nFmPW(a+K*xIOl>gM!g7Z5_mNC4j}SrWmOZGTT3XpNwA)!`URCzV0jH_HAJ0d(v*7K_ z;EJSWHIS#4Bso69)_S&c@AXH$?a#n~|HHxbt#(-K$yX1EQzR>Mp%+^{Tz|47!r^wf zJP#I2C_w{3r#T}cad#QdM$eB@!eKOib^Gw`-6g0So*kdZ;HSF2@mEv9%GYh>m&R+J z2yWlN8vGdJes#d2hZEcH*JJbZIqbJXYy1|AkY5axlh^Ck-rQE~h8;Dcjc=KW{#MTXo4DPC_bLz-genqqc4n125y){ET; z5qG6yU75#x21NLDFzx+6YEIT)9)C7{C!VcI-^lP3?Xeoup%bB`BRKjXLeI`#&mDO` zP;t>-2EeP(8-R7OQZtqPOYlV#2Quc%3IBqNR!;&D4YQ#dfQ>;P7{2&zf~oR+<)ZVh z2K9H`n6~rBvsE-@h2oDy9_vMO2ip%=>kez-NXO6yCrVORxj71xV441F1Ac= zD$0ufzT$XN?aVf3>!nW!N3;Dql=AkEPY8c_Wjotkzi29>B~jZ%2nWMb_aLo(4kR=) zRXU0%eurLaKp#QUl?bzjbb3X`WY7T1bp@Y_76OTn2-!bdfEDwE_7v}bfc!)L3K~jr zRqO(KVkqks%uairFIxoAY3d@O)qTvS)9tnFQyf3M$^AH7{>I$-v!F6t;eVQt`2pmh zyZf6b0Flv>|L3v(A5**jehn5&z60KDLshCDt z1n6JxPBih))?&MFS9;8;y7aMMK*E;8K6J?_revVi3dv8CmTEQ$@}`r{KR#v?1Mz;l zeFClbU4fL*u=;rGbyBN8EO3X38wgjt0e`MW^e12Y_3p4I0~BZ^CB4`h0Odgu2crZa zWzxvVxbC?Y3iI`el7r{Gw^Kpw@V~C4R7z0)iPsvx!{bI~ZJDCx;ehu}jIR3wmy-5B zyt<$%lG^`Jn-i(O$MCT0Nu+X&U281(9?Nx*EbD@O8!EH?tK3spPz4ke8x{c1~6l9v|J^g znq3{o3<-hc^69|}mCsTHjG%#}l|+**H9(!SlqfzHWP{EYArY$LecT7|m=QJ-C-8Ig zf9dH^6!j88GLEierw+VS*pc&Z;lMkB5Y46O1CXDOyHG<`+-APilE>0yu?#KZ$=fr% z3jYqdI!%}jC}^n2+x{^IJ(*GzmtCM(C)LpJACZ|k)hy*k2P~xjmKmwR;SO2t@(A;7 z;yo-UMeA=Y0QwA?peU?VZ3*`L_M~|B$i3Z38{X&M=3xV|w_KLD|92E#^O?DJ`LK2x z$(3XyAPMll(cDO~61D>mMx$B-=7dH@AN|KJK;x?38pQF8F``M;#G}_-9o8wqSNE9f zL#5Y|#`5dYM}j|jN6XLNUo-PSl9w#id6c+% zkxxI2CWNT+9`QDL|mRjgo@5fJ%--B-#eQl2;QOQbfCh^3KX zi-IC_u^~=B+A3#t6fGM>DY@6jT8eFjYtR`-n;XS7naAX*3wA@=d6^a+KLgh1QvR~( zU6olQd9T8Ez%2w0C20|Y#JR*G#cwa)cxA3O)sMa;UAuhl zG}0%PU8Bo^H*+R(L{9Enq?pg`9(F6Zkj^!fO2jLGq-Xln?y%Li%7VKue-_gENSM_{ zhoprtzX+&^lmhK)_DaNBuLse7jAwn`P^~GjG04^gd5~;3C51iF2K&1YwpWO&NNvI4 zqy-SXu`*X_N#Llznzf^pm)m4$H^7er)PA^m*l^FxI>~a{7ktvViSg)1{A5*e^=bD( zZDsPg7bp7UQU?A~H_d zSLzfom$lu$+O@XI7)s(gn#+>`x8*Q&heUUBabDEg0mXJ?{Ks5S_<{ZqJOzc?0n?E& zJj@a_Cu7x7@Z{0jS#4_Oad=l9+QukXj9R2`|AQw>kkMyCyZlee3cV_$lr~4G5e3zF zC@hX22b&vEK@QT2AD2M66XXg%!$*p_sTOIf82uDgP}%j;T-}@LC)m4A@@wW#Q&ujH z^2mcyN+a%%TU+u2*J<6pi|txt7&KgMhQasr*TX?_p&|atNiLFy}nE!C?`d*#DeoK{ zqK=(9l?GBo$jGa(4p`Maxj!!0(&;c^>Gm6=<_K0<{pH>CkOeW>6N>VQVjROV(O8D% zhlCtVw{frgG@y~@@(HP^G_o+xfSmIIoZOKxcl0uTmcXOMErO+qp`INsdlOLbMuxjJXow^E*MCuR-sz547U9Lf5bg*b~ftyiE=ZN3jll z2@@e)Ut}GH9toWYwc3u6DE(3|k@>5Aa~mgs0?kA=+E!~Uy3Rb`CZ2w;?IWw{7;LNl z5_%ET`0*U_QXpY?036J$&1I|_ZQlwCgX>cd+N(>Xq9)8ZFewZ_(@GWIWxT97!_U5=JQNZutxI%zM4!l$q`ve@ARX(i};s{N252p+Wi++q z@&y`~Owi06!ll|DWg)o|@Pv%KulKKHFB`4Kb^VdM3gx@C8z~<86up8NG*J|3PHrV@ zUS>H|f+g0rY$7`3x@dWVZx|&g&KW5Cs+Wedh{3xM6=K8Vfb{F9En5nmrGLSWz<}`i z&9P5f2Q!8?=F(R0eP_QDdtVs;URvFupZ#ppo?-w8A(y8n=WI2Ob>{4s?lIg0g$
#@X(IyH$$%R=9~# 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 DSRq+e literal 0 HcmV?d00001