From 66909072b94b211cacd51d7290fd60918df975cc Mon Sep 17 00:00:00 2001 From: Jorge Orpinel Date: Wed, 15 Jul 2020 16:27:02 -0500 Subject: [PATCH 01/39] guide: What is DVC? -> into UG index --- content/docs/sidebar.json | 6 +--- content/docs/user-guide/index.md | 22 ++++++++++--- .../{collaboration-issues.md => questions.md} | 32 ++++++------------- 3 files changed, 29 insertions(+), 31 deletions(-) rename content/docs/user-guide/what-is-dvc/{collaboration-issues.md => questions.md} (62%) diff --git a/content/docs/sidebar.json b/content/docs/sidebar.json index 7535efb2b0..61a15fe6da 100644 --- a/content/docs/sidebar.json +++ b/content/docs/sidebar.json @@ -86,11 +86,7 @@ "slug": "what-is-dvc", "label": "What is DVC?", "source": "what-is-dvc/index.md", - "children": [ - "collaboration-issues", - "core-features", - "related-technologies" - ] + "children": ["questions", "core-features", "related-technologies"] }, { "label": "DVC Files and Directories", diff --git a/content/docs/user-guide/index.md b/content/docs/user-guide/index.md index e51926f40b..601df7f0ef 100644 --- a/content/docs/user-guide/index.md +++ b/content/docs/user-guide/index.md @@ -2,11 +2,25 @@ Our guides describe the main DVC concepts and features comprehensively, explaining when and how to use them, as well as connections between them. These -guides don't focus on specific scenarios, but have a general scope – like a user -manual. Their topics range from more technical foundations, impacting more parts -of DVC, to more advanced and specific things you can do. We also include a few -guides related to contributing to +guides don't focus on specific scenarios, but have a general scope – like a +_user manual_. Their topics range from more technical foundations, impacting +more parts of DVC, to more advanced and specific things you can do. We also +include a few guides related to contributing to [this open-source project](https://github.com/iterative/dvc). Please choose from the navigation sidebar to the left, or click the `Next` button below ↘ + +## What is DVC? + +Even with all the success we've seen today in machine learning (ML), +specifically deep learning and its applications in business, the data science +community still lacks good practices for organizing their projects and +effectively collaborating across their varied ML projects. This is a critical +challenge: we need to evolve towards ML algorithms and methods no longer being +tribal knowledge and making them easy to implement, reuse, and manage. + +To make progress, many areas of the ML experimentation process need to be +formalized. Common questions need to be answered in an unified, principled way. + +See also these [Common DVC Questions](/doc/user-guide/what-is-dvc/questions)). diff --git a/content/docs/user-guide/what-is-dvc/collaboration-issues.md b/content/docs/user-guide/what-is-dvc/questions.md similarity index 62% rename from content/docs/user-guide/what-is-dvc/collaboration-issues.md rename to content/docs/user-guide/what-is-dvc/questions.md index bac66a65dc..abdd4b7bf8 100644 --- a/content/docs/user-guide/what-is-dvc/collaboration-issues.md +++ b/content/docs/user-guide/what-is-dvc/questions.md @@ -1,24 +1,17 @@ -# Collaboration Issues in Data Science +# Common DVC Questions -Even with all the success we've seen today in machine learning (ML), -specifically deep learning and its applications in business, the data science -community still lacks good practices for organizing their projects and -effectively collaborating across their varied ML projects. This is a critical -challenge: we need to evolve towards ML algorithms and methods no longer being -tribal knowledge and making them easy to implement, reuse, and manage. - -To make progress, many areas of the ML experimentation process need to be -formalized. Common questions need to be answered in an unified, principled way. - -## Questions +Some of these questions are easy to answer individually. Data scientists, +engineers, or managers may already knows or can easily find answers to some of +them. However, the variety of answers and approaches makes data science +collaboration a nightmare. **A systematic approach is required.** -### Source code and data versioning +## Source code and data versioning - How do you avoid discrepancies between [revisions](https://git-scm.com/docs/revisions) of source code and versions of data files, when the data cannot fit into a traditional repository? -### Experiment time log +## Experiment time log - How do you track which of your [hyperparameter]() @@ -26,7 +19,7 @@ formalized. Common questions need to be answered in an unified, principled way. [metric](/doc/command-reference/metrics)? How do you monitor the degree of each change? -### Navigating through experiments +## Navigating through experiments - How do you recover a model from last week without wasting time waiting for the model to retrain? @@ -34,20 +27,15 @@ formalized. Common questions need to be answered in an unified, principled way. - How do you quickly switch between a large dataset and a small subset without modifying source code? -### Reproducibility +## Reproducibility - How do you run a model's evaluation process again without retraining the model and preprocessing a raw dataset? -### Managing and sharing large data files +## Managing and sharing large data files - How do you share models trained in a GPU environment with colleagues who don't have access to a GPU? - How do you share the entire 147 GB of your ML project, with all of its data sources, intermediate data files, and models? - -Some of these questions are easy to answer individually. Data scientists, -engineers, or managers may already knows or can easily find answers to some of -them. However, the variety of answers and approaches makes data science -collaboration a nightmare. **A systematic approach is required.** From ce72b11e6d7bae8004b7c890ab2d21d838d6975a Mon Sep 17 00:00:00 2001 From: Jorge Orpinel Date: Wed, 15 Jul 2020 17:23:53 -0500 Subject: [PATCH 02/39] how-to: create section with questions from WID / Collab Issues per https://github.com/iterative/dvc.org/issues/72#issuecomment-659042420 --- .../questions.md => how-to/best-practices.md} | 10 +++++----- content/docs/sidebar.json | 12 +++++++++++- content/docs/user-guide/index.md | 15 ++++++--------- 3 files changed, 22 insertions(+), 15 deletions(-) rename content/docs/{user-guide/what-is-dvc/questions.md => how-to/best-practices.md} (79%) diff --git a/content/docs/user-guide/what-is-dvc/questions.md b/content/docs/how-to/best-practices.md similarity index 79% rename from content/docs/user-guide/what-is-dvc/questions.md rename to content/docs/how-to/best-practices.md index abdd4b7bf8..3e3db19581 100644 --- a/content/docs/user-guide/what-is-dvc/questions.md +++ b/content/docs/how-to/best-practices.md @@ -1,9 +1,9 @@ -# Common DVC Questions +# Best Practices -Some of these questions are easy to answer individually. Data scientists, -engineers, or managers may already knows or can easily find answers to some of -them. However, the variety of answers and approaches makes data science -collaboration a nightmare. **A systematic approach is required.** +Data scientists, engineers, or managers may already know or can easily find +answers to some of these questions. However, the variety of answers and +approaches makes data science collaboration a nightmare. **A systematic approach +is required.** ## Source code and data versioning diff --git a/content/docs/sidebar.json b/content/docs/sidebar.json index 61a15fe6da..6cb5121359 100644 --- a/content/docs/sidebar.json +++ b/content/docs/sidebar.json @@ -86,7 +86,7 @@ "slug": "what-is-dvc", "label": "What is DVC?", "source": "what-is-dvc/index.md", - "children": ["questions", "core-features", "related-technologies"] + "children": ["core-features", "related-technologies"] }, { "label": "DVC Files and Directories", @@ -140,6 +140,16 @@ } ] }, + { + "slug": "how-to", + "source": false, + "children": [ + { + "slug": "best-practices", + "source": "how-to/best-practices.md" + } + ] + }, { "slug": "command-reference", "source": "command-reference/index.md", diff --git a/content/docs/user-guide/index.md b/content/docs/user-guide/index.md index 601df7f0ef..a7a2f38a84 100644 --- a/content/docs/user-guide/index.md +++ b/content/docs/user-guide/index.md @@ -8,19 +8,16 @@ more parts of DVC, to more advanced and specific things you can do. We also include a few guides related to contributing to [this open-source project](https://github.com/iterative/dvc). -Please choose from the navigation sidebar to the left, or click the `Next` -button below ↘ - ## What is DVC? Even with all the success we've seen today in machine learning (ML), specifically deep learning and its applications in business, the data science community still lacks good practices for organizing their projects and -effectively collaborating across their varied ML projects. This is a critical -challenge: we need to evolve towards ML algorithms and methods no longer being -tribal knowledge and making them easy to implement, reuse, and manage. +collaborating effectively. This is a critical challenge: we need to evolve +towards ML algorithms and methods no longer being tribal knowledge and making +them easy to implement, reuse, and manage. -To make progress, many areas of the ML experimentation process need to be -formalized. Common questions need to be answered in an unified, principled way. +--- -See also these [Common DVC Questions](/doc/user-guide/what-is-dvc/questions)). +Please choose from the navigation sidebar to the left, or click the `Next` +button below ↘ From 3f0b0f0c7fa0342380065de5f55ceb9467eda7a2 Mon Sep 17 00:00:00 2001 From: Jorge Orpinel Date: Mon, 20 Jul 2020 12:29:43 -0500 Subject: [PATCH 03/39] how-to: make subsection of the user-guide, and move update-tracked-files into How To per https://github.com/iterative/dvc.org/pull/1581#pullrequestreview-449429314 --- content/docs/sidebar.json | 22 +++++++++---------- .../{ => user-guide}/how-to/best-practices.md | 0 .../update-tracked-files.md} | 0 3 files changed, 11 insertions(+), 11 deletions(-) rename content/docs/{ => user-guide}/how-to/best-practices.md (100%) rename content/docs/user-guide/{updating-tracked-files.md => how-to/update-tracked-files.md} (100%) diff --git a/content/docs/sidebar.json b/content/docs/sidebar.json index 6cb5121359..e743252942 100644 --- a/content/docs/sidebar.json +++ b/content/docs/sidebar.json @@ -98,7 +98,17 @@ "katacoda": "https://katacoda.com/dvc/courses/examples/dvcignore" } }, - "updating-tracked-files", + { + "slug": "how-to", + "source": false, + "children": [ + { + "slug": "best-practices", + "source": "how-to/best-practices.md" + }, + "update-tracked-files" + ] + }, "setup-google-drive-remote", "large-dataset-optimization", "external-dependencies", @@ -140,16 +150,6 @@ } ] }, - { - "slug": "how-to", - "source": false, - "children": [ - { - "slug": "best-practices", - "source": "how-to/best-practices.md" - } - ] - }, { "slug": "command-reference", "source": "command-reference/index.md", diff --git a/content/docs/how-to/best-practices.md b/content/docs/user-guide/how-to/best-practices.md similarity index 100% rename from content/docs/how-to/best-practices.md rename to content/docs/user-guide/how-to/best-practices.md diff --git a/content/docs/user-guide/updating-tracked-files.md b/content/docs/user-guide/how-to/update-tracked-files.md similarity index 100% rename from content/docs/user-guide/updating-tracked-files.md rename to content/docs/user-guide/how-to/update-tracked-files.md From 5a5901b12ce5ac079647cba5e49e5eb95fc36624 Mon Sep 17 00:00:00 2001 From: Jorge Orpinel Date: Mon, 20 Jul 2020 12:31:32 -0500 Subject: [PATCH 04/39] guide: hide Best Practices how to for now per https://github.com/iterative/dvc.org/pull/1581#discussion_r457574848 --- content/docs/sidebar.json | 4 ---- 1 file changed, 4 deletions(-) diff --git a/content/docs/sidebar.json b/content/docs/sidebar.json index e743252942..5bb32d9853 100644 --- a/content/docs/sidebar.json +++ b/content/docs/sidebar.json @@ -102,10 +102,6 @@ "slug": "how-to", "source": false, "children": [ - { - "slug": "best-practices", - "source": "how-to/best-practices.md" - }, "update-tracked-files" ] }, From a94d9f85406b1743331e10f54de012f0245653ae Mon Sep 17 00:00:00 2001 From: Jorge Orpinel Date: Mon, 20 Jul 2020 13:01:44 -0500 Subject: [PATCH 05/39] guide: rename how to and best practices title --- content/docs/sidebar.json | 1 + content/docs/user-guide/how-to/best-practices.md | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/content/docs/sidebar.json b/content/docs/sidebar.json index 5bb32d9853..573478b0e7 100644 --- a/content/docs/sidebar.json +++ b/content/docs/sidebar.json @@ -99,6 +99,7 @@ } }, { + "label": "How To ...", "slug": "how-to", "source": false, "children": [ diff --git a/content/docs/user-guide/how-to/best-practices.md b/content/docs/user-guide/how-to/best-practices.md index 3e3db19581..45c7baf501 100644 --- a/content/docs/user-guide/how-to/best-practices.md +++ b/content/docs/user-guide/how-to/best-practices.md @@ -1,4 +1,4 @@ -# Best Practices +# Best Practices for DVC Projects Data scientists, engineers, or managers may already know or can easily find answers to some of these questions. However, the variety of answers and From 92ae25413cd81fafeadd1ca03c03ce0a67c113e0 Mon Sep 17 00:00:00 2001 From: Jorge Orpinel Date: Mon, 20 Jul 2020 13:02:14 -0500 Subject: [PATCH 06/39] guide: What->Why in index to avoid redundancy with What section --- content/docs/user-guide/index.md | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/content/docs/user-guide/index.md b/content/docs/user-guide/index.md index a7a2f38a84..fb620295c8 100644 --- a/content/docs/user-guide/index.md +++ b/content/docs/user-guide/index.md @@ -8,7 +8,7 @@ more parts of DVC, to more advanced and specific things you can do. We also include a few guides related to contributing to [this open-source project](https://github.com/iterative/dvc). -## What is DVC? +## Why DVC? Even with all the success we've seen today in machine learning (ML), specifically deep learning and its applications in business, the data science @@ -17,6 +17,14 @@ collaborating effectively. This is a critical challenge: we need to evolve towards ML algorithms and methods no longer being tribal knowledge and making them easy to implement, reuse, and manage. +Today the data science community is still lacking good practices for organizing +their projects and effectively collaborating. ML algorithms and methods are no +longer simple tribal knowledge but are still difficult to implement, manage and +reuse. + +> One of the biggest challenges in reusing, and hence the managing of ML +> projects, is its reproducibility. + --- Please choose from the navigation sidebar to the left, or click the `Next` From d7762e64efbdcf42f152ad0e7833af1e6e51c9a0 Mon Sep 17 00:00:00 2001 From: Jorge Orpinel Date: Mon, 20 Jul 2020 13:02:53 -0500 Subject: [PATCH 07/39] guide: concepts->principles in What is DVC? per https://github.com/iterative/dvc.org/issues/550#issuecomment-544106096 --- content/docs/user-guide/what-is-dvc/index.md | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/content/docs/user-guide/what-is-dvc/index.md b/content/docs/user-guide/what-is-dvc/index.md index 6755f75520..35757ccbba 100644 --- a/content/docs/user-guide/what-is-dvc/index.md +++ b/content/docs/user-guide/what-is-dvc/index.md @@ -1,13 +1,5 @@ # What Is DVC? -Today the data science community is still lacking good practices for organizing -their projects and effectively collaborating. ML algorithms and methods are no -longer simple tribal knowledge but are still difficult to implement, manage and -reuse. - -> One of the biggest challenges in reusing, and hence the managing of ML -> projects, is its reproducibility. - Data Version Control, or DVC, is a new type of experiment management software built on top of Git. DVC reduces the gap between existing tools and data science needs, allowing users to take advantage of experiment management while reusing @@ -20,7 +12,7 @@ use 3rd-party services. Data science experiment sharing and collaboration can be done through regular Git features (commit messages, merges, pull requests, etc) the same way it works for software engineers. -DVC uses a few core concepts: +DVC uses a few core principles: - **Experiment**: Equivalent to a [Git revision](https://git-scm.com/docs/revisions). Each experiment (extract From 82554fe6925fe2b13c902a69b9c0a020de869ca4 Mon Sep 17 00:00:00 2001 From: Jorge Orpinel Date: Mon, 20 Jul 2020 13:19:56 -0500 Subject: [PATCH 08/39] guide: move troubleshooting inside How To --- content/docs/sidebar.json | 7 +++++-- content/docs/user-guide/{ => how-to}/troubleshooting.md | 5 +++-- redirects-list.json | 4 +++- 3 files changed, 11 insertions(+), 5 deletions(-) rename content/docs/user-guide/{ => how-to}/troubleshooting.md (90%) diff --git a/content/docs/sidebar.json b/content/docs/sidebar.json index 573478b0e7..07e1885147 100644 --- a/content/docs/sidebar.json +++ b/content/docs/sidebar.json @@ -103,7 +103,11 @@ "slug": "how-to", "source": false, "children": [ - "update-tracked-files" + "update-tracked-files", + { + "label": "Troubleshoot Common Issues", + "slug": "troubleshooting" + } ] }, "setup-google-drive-remote", @@ -136,7 +140,6 @@ "label": "Running DVC on Windows", "slug": "running-dvc-on-windows" }, - "troubleshooting", { "label": "Anonymized Usage Analytics", "slug": "analytics" diff --git a/content/docs/user-guide/troubleshooting.md b/content/docs/user-guide/how-to/troubleshooting.md similarity index 90% rename from content/docs/user-guide/troubleshooting.md rename to content/docs/user-guide/how-to/troubleshooting.md index 7eafdac592..408856433a 100644 --- a/content/docs/user-guide/troubleshooting.md +++ b/content/docs/user-guide/how-to/troubleshooting.md @@ -1,6 +1,7 @@ -# Troubleshooting +# Troubleshooting Common DVC Issues -Here we provide help for some of the problems that DVC user might stumble upon. +Here we provide help for some of the problems that DVC user might stumble upon, +based on frequent support questions (FAQ). +fzb|^8kdT#od%}{QqrR5DF-sbP*a7o^CLG zTo}r`vJaS~@49c#x3xUgE*d$$(z2>13o!bB!a-MaX2r!QPhFZDjAF`{(E3=Lu0 zk52#rNEZmFFc`m>nwy6d9{OWRY~r)q6AMuDIPEEJSdz&b-${N(mLtmLL3#5lBA^Qa zflrQgbFQkBBmUUaDIrq@J5~7Yll#swHpUUX?Wz8VHuIM-u4+C1gm<>l53VD;Dnt}% zG?$n3XPl)JK(75AnmJfg3%3O>l>Y3@qILwhLx=&ozh|^~PZBQh@sjgtUkvh(wSj=b zgC-lP7%xooLVs^&J4}MmiiFtn(*eAP*v<9gos6WWt!K3ge*~V#qaAOZ!ukDZ)NW z3ZF$vpYp8wh^?D%qI!63NB+=Hs=ocMP;tl2#kCO@@?f1}x3`7Q>sj^6P2JDxJrcFB z7Ds&7PLLJin8}Oa0O`fzc@!hlio@8WYC$SE*ZPlP7CU%gp-6%jwK0#viuj9gz zwh>MzB`0ImXnr?lN>O0`5T#>bpPQElNjZ~vE3zv&k=y*kcl-|bD*^HEQrXK-A7b72 z{j=syQyH0f0f`O;rpa#TdPjn11rDOQ;pqWr`2y`mUs<_ML)uykrLy>OF+0fl8dD{x zU4e{~56R~iqRqb&F|(|tpAMmJt%sT%si5!b`g)RUq<;D{S=11(qKfN)0L7npnFZ9T zT?q8)4cXI3KiwirS7_Gb=3xKeR1&U!{czrUP_^KC$t>3;YWZoOSfZPUp0_4!L-6vc zQSQdd94X#hik}ips?YZ2J9K#naiPPgcmu@!FKX^=Q3LH{DKu z1z9gj?15fiL1_G==?d?d*UkFVr$`(pFlpHq?xp$t3fe5TBO3b(xsqXZ2C}{EECB>D zz888ZQ@)@?yr!1*x%$Mf~4X_8s>R_2{3)LaM2S=0&si4BC7Cmw|qO-k{2`5Mx&0a`~B?@=4>0tt+hw zUAH544mf7W|Ej)3TXsqF0buk`Xvniw1R70I4+LG*iaFWtQDj~8E9RevBWQZ&{ zci7B2RJ-EZG8WTLys*4-R*x7k9g*a;Opx z5}Sae95p=0cA$1+4^TL+aczfjh%m{d>bjbyRp|Z8*?@rYBaC5P+#YLmh#+-?3YS-` zP9EMMy+W0+R}GZ$*oKe){DuMRdY5FZ<=L>)fVN*)LO(9LqLp0U5uui3wk$*Y!v{_% z;|%eAReT(p6z|@=GdJ#WgGN22Z^yMza7C<( zCk%3bq$ZXoxEwjvShKqxShO8+YbLbw=~tR@A5Y^w-sNcB%S3V%?)SEQ7!O5XJ_NZN z(D+K8V{ZJG1%l|MYz_okGN|aG`YBTRLqkL4Vj?2RK>Z6?fQ$_MD~8_pbjeO%NWj;A z*Fum|eR?4c4VU&Y4f-+k+7NPRBgA#(`Anb7<4TkbX?OA;E4t8B74fhoZ)8yW7Tl6E zT#nXE_2?15>7F%JqdQwQ6MfQPQ7FhWmqAsNBO+{5KJF{sYuK2mjS=8bHrDZke#Q%^ zB%thIU{b~mdi^)v@&$poFw1AhzxPotS;ur!*XT@#)n9(a9pRcW7HZ%B*|@OfdP+8f zO+6-ylqC9tp(34?3J>#jgH&1=U@gY{PG&1A45oCR5B>rg;L+;b&GseC3Kf|&CQ z0N>LRG#^$J7oWMheE#3lOC1JxR= z_6gFC!MTXSuny=lu5^^3diuNEUR!hD@OUpf+b*V4r9XNhg6gt6WL-s>M0lQ8S)W~= zuFEz;71E|rZ>?RQXHkUr&Sxsd z>-{q!jb_r_4E*N_WrCL|=J3~vP`%NBZ^@dQUckfZ$x9az&vEY)9#C;vLUS$Z(V63J85Vs#vMCPVtmoyu!3D=q*!A>r2Q-Dwc)oC?X1v zipUuv4}r4&GGaNZGyn9o&lAvgHgB2UHQzvX94dsO&!!J+Kx@KtefZnN zr(ozkI1aTFeTQIIKNCvw+{`>1FU3o2$E?2Jc=b!Rq77lZ>_&2lM%&z)u-*lOeU~i* zRWT#iD1w5pOma%XnG`#_u;g|nYs2z%d3cbgbZddOK~*-9)G_ns42dqvPi9c=I%}ca zlk8rGsUAm$McYn=mi%cbAU1baY1zeKCR@U*3-GWA%788Tqmsc)n$k3EL>FXuE$ljq zfW0cS*J`jQ!NtW7?kJMF3l%(T1B8Ew(HX=AXKp<(Kx+F-UnB(F|7dsG)tG919p=%! z!g=}=Gg?|YS~wKl(aG6N^YYLg2FPhRhPJ-5$ljJHJZj=937>{c`WMb}w(%Ggno9S6 z{<1G2A(2lyMf`*GTvk>#qG$PsTc!^c-;b9gWssg{YlQB$;qS6Yv(>%b>w3Y=5b)i# z<$_ZBeT*q*^*`t0BcVHktAgRcfSs{GbZ4o*CQy>cxL?m%AY(v2dAF3OppAlykkC2p zdE$8OUQqkWb0mA7eXztneuRF@urT1=Pucc`sTubRsnIClid5r<&a%FD-(^0v5iWCG zKWQ**2RujWdM6=*gNcg~$WM-m2O&wvL-c{>WoKt+W%uz zS)`86&L2fTQ%aF2+^)Wd-TW`AZfAq&ic}sdd*cF652%_nvEV5ukC_fo8PC>HkPMNm z6yu_jT4!A=4Rm~4R!T=M6(F-2u$0~`Lc@X^ZH7SL(4JLV5#&|!db^EI&uV{AQ$sXt z(d!rK3EtYrmuQSUq}m&34n%0y_>LmBw+j^a0|T(me_5 zOQ(1^%0*V#7Uu2z8_H@lWkcmrCc|8NL~*YMW=AZK=iU5Pg)fg}*jA6qwCOO~`02=J ztO*;#_futCYfHqUp<8}@8!tj3_PTzJGou8pnS}-OD%FlqA5GcvrX!BVz;CM06M&NA zVz%vx`9Q-p>M&5^ssiqBfe{)EuPK0G=W^)lU~#M`hN&xB`F=L);2W589oE))7t*o{ zn#n^H?~2_MSN2KScb3KCT;~4oAivahyQXYTg&>CTLY< z)#utanVF0h4f%epk(aj=LQ8%4T(jCt^5|yNgKgcIHlhHHE?;5qamlO?y50|yK80`x zo5R!cUKHU^PD_vkWk{RUazlw<pXQf|Z<(`_CIvyBeWl^AyUOEO?ps$sW1GIIpi?L4Gq1K= z?*XKA6Oyz6c5i5-y@771-QC>}k@!mgok$;6(BmR!ys@(Z7Na2%P`ta( zyTC@`Y$f07(C_8@%ovWASLY_E#Zzlk>rV^o zanTa{vrwzDd5f6!*OhUmjOy$Z^;g&BnrU(<&G?+{Pg=5{zn%yQoGsO=H9aL_==7Jf zp{oc(h?zvwJ}wm3wuAa-%X~W!^7f4AT(+W%GuK!d^IHV0DB}jP%dGT%qa>2pAy9oz zcnl#2l&QtW3g9zuv@Xn6ykZ+^?oi&b=jV>Tmr7AeRZq@f`Pv?d84O8IC0;}O&A6~^ zabb$bwbk!vrl&3|91k8s)`bBfqyH?|YR1@m$9#d9dI46*lOWRL#eMLkiRN|JY_htk zH{b1*zy%uYp-w~*)|ku!mw*>&D@Kxx#qVPSJ@~Dj?)4i5?_{$ZzPLvY3$gt2alRYx z2t;bMhvAMlIB&Hz-7bwvW=rQ<999|}OmNZG`C`oK$-3D~T^8Tckl|YFPNbxA#7w60 z#?nt3OF0dv@Y+o8p&Eakmn<}UV{BsL{j+BnsJ9tHn46h7U!>fnNY%BXBuH;#u|zJ0 zjr=59y)-s4U$wmp%ZgQeoG=Papw_`^@SFEg^;gm13HUEt`^CyCf^E!4elz!4U-@CR z;w*Hc~b}*zd0++8GRcRfi8hgks=*5d3fN+ zY27GRVyy7a7%>c!riz4tKneqLOz8YE409PXvt4Oc;11|e+6BwHqPLg*HU^J(mw+xf z$bNBaG(&cTsG{xZ4uzVWDZ~D-c6Q>^68T`n-hTwM&(qUH-yOOvC6rmq#%LLS zfb=h_urh5JGp@aw$L*x~CRo5cVc&UiQKN>c^mSWtYkOM~I_I5gWNqZP{YzGDQCy#` zt*ypMlZ8c&*RNk6j_7e93s*2E%Zoi-46uKtG*KBVGUkuR?6E9nc?8!hg%tMvBdYZQ z!Bu6r@0>-`YHi+aIOGo8?-%PJMYN0Ox~46Pp}?VF8C*PtO?FaWP(y{ML-LWj>b?yFVb{h$DyJYp3t7(h6$JzUct& z>8--+u`Qfx&cM%UGkW%2Ro7}(E#P${t$L?+^QPT&i{V0x!tIhzbZ1eU7EX=LO6LRC zjSysMbO@RR2-JXU7YcQhpAmE*a#?no9i(krnw&)bg!sw1JyV*?6u+zz|2tMLOW&5= zqSd!?8f_*sqz(~n!y9pF>6WLveKRzQKCGxe3YQKsJ{q^2CalaT>VP5`#7vtiUnh)` zi}xW<;gjkxjm>Lo6k=}(2D(w-2)OS{nn!Mvb%|&@CitpGA~XC4H6T#Lc)k~BYquG# zad0Q5AH76J#~GKX^%$WuT1hzxJvc%tQ-Yf8-(!=A?@RRE;(`krR#m22;A-)J8)Jvd zx9-f?cTxGY zW-Aj*Q@x2O0%W*_^avqBvtw>8DhUz~S|NWoI>YE{J%<(Z4Xv8I{U(fSYS<1uAp$VY zDp59jkdwk9hnLIIQXIGxU0Qm0JVzAhe*s2^;eJ}{-{ZTA-rF;0NbTxl*)e=pt+Sj5 z+KPbt$^@hdWKr(EO6H?@8%3W?L7cH=mG$hz6ncJcYV(wVT$&OY(Vtz6-g z9}eOhLOhv4cVg)x4oHOfIo<}`#b)=BV`{>KAr-|+RX`(NSU!&&8z^Ce0mobl z1gd|Ph%Y}tcnu2+i^JteQ$YcF{zD%MKUq#>k}nlWQc@By1{W1|^6Qry|KVJ#F69sl zUEQC+RPh?jkKW$AwE>#uGV_)YMbvW zAW>T1=x+=dsA|&7w2SHt2fZX=sgW;1Z^H*4B2$cJ0~{xh;RCV5YFI_%pnHWoM6E-T5$ z3lenOyIodmY^d*l)6%sVJ`p7f&-cfz)!U|m*WV|X1NRRf{c5-Z-P6|a?FOK*Gdi3fVM~EoJb5%%3A8s43hF1uy+@cQt8q@C_2_uZJhb0p-ZzcDcp5lbg+LD{r`$ z(;8j%@6$`!i614{_%F)%_`rjv8=^ZL4rt9&``VwXDpeKrtrm}_xQ0=Kam{D$ zNkX`O&(H8OkTewo|4Y6(LewM=?aAN8t~eL9j4o(Q&Z#(*Ukk0FCICw)rSt?Vqb~rX+Q_&0i6vMs1f?>v@!{UzH6*)^vkg< zCFBNIVWkauNlJMi6Q!b8c|mIEeSyF`nr}cz;cuOmuU(MOntm8uzHvi<$0!iOOfw>|B zDLpImZ%j^a(~m2e>K0$Wg2dk2J()m|T~VaL8>hfkOA@p^WR50OK2JGgn3Oo59Dv!q zxef~dV@hKsC zW)c9a6V~km{j-N4Uh7Nx8eeyN)_+|watU%Yqx_&8 zS!va6z(BYkQl0L9Ut{T#6#sCi7}G#7sF)a|9vj2)jyA58l<~}wG^fDs<`pPHkUM}e zT`e%r?7xav}H$#rRADt}DHa2*oYdv-xYHh?f4XeZf*$~_X}@_vL->P`HK z@cN&jkP_(*$&BWYcAQ0p(OlcQw3S)#E#2?(EKS=SSIynOK72$=81Bawe&9NxveJ>>rluAEetf%-uNajZHA38DKHY{iqa30C+U87j6(V zE`;5!j)o*lMQ@qa^3pM?%=>J?yjSxf@*e%!Nyj>j&Y)ty zxNlNEQM#96@85GK#ssEci_02fJRMhg!i|`Zoc<|rnK)eWsEk$_$1K(*8<>OEMg+$C z?=L_=_m1pehuljo9p`x=&&%wr`H;Ppcv(KW7m*;Tu|Lkg&TVXdD8WLwi*tamTNH!(qv{0SboCv9C2_OASbcgW zBaBPojZA20*F^TobU-xl$ViDVfq$tc)30zcI-s4B)12q=aeHsXr3kj1eGwS0H7qE5 zOhw)IaK@{3*{?DCxOkm$zg+VAlEdmeREK6@P|l$kl))_3)O4}3S>Dsz+qZWqvUs6O$YybW`RNo0XkB!6Ys!xvh3UJl@vvSF;$=)qX?mWo=hPt z(B-$|&rfP^MV4N9I7}%){&&P-5a~iPYjkJ5oEh~Gc><>Y zOd{wls5(YhIhiAcpx}=_3t|R_xNLy<_3a`8IR;AiWa_`XZNE^vv5UvXzBg$g()^C> zO4U(qWM%wZrbDft~P(%XMd~y%=dE1jH4d4abi$QtXd|Mxowk4Jpl5WGHPO*1Pc;-e(#a zOH4drC^@UX@YYkoN@BtdyVuLj&JPb_kiPWm1^PCLk`2Qkpwq@ey*`(DDz%;}TV0##a}CRaBwOSUZSs-2sTAS6iU zOc;b9Z{Pugy>YW4e?4F+MEF!~q4e`9IBT(9M!UDyg#?Gu#m>e}&3!8!LihO?rk*I}K0v z!A zo=jAF8Aa@XpSaC>$Vm;KR}~)p)6I}tJUT6}3{b~>dF5Z9C^A0mnTeVLnG4(gb$=cX zbXuBhu_PhMK-(Ap21v4gdNP0#5F`7Rm(#T1SyUNZfBR|6rmw;V1W!@Kwxz8~Xl;fv z;>7#>^8^S95CdDAk>CMJlD&QF{voY@Br+;q*y)OenR}Z zz#t)lUr`CY7$5gK_q#8nuI&J_{FL^Ynbz`BxpaWX&lAI=o#18iM@gs&b!AYbz!pS0vva!57k$ywFudCj`EDzsb(aE9b8CWLWY=C6 z!(r@d!FS*yO@HH8J_05%>jZr&z0P0_f46O#>F{jq`4Z+Dm=iSMf7`z#7VH-|g>gki za|E0S30+?##l?MZiS4FC<9{8$M2HE7FZfS;d&Brzk;!_wQa`ScU?vfhAM&|)6+B~a zxuR0}j}Xd?Plzch-g!^mVuUr;&c=D40R+i=Mm7HbX~_YBXoiwwRbh^=H+@ITF)UM3 z5I{GTv8mNO7oJT+e)bWT{{>|+q(MY`BetTXWPy7~`=>N(lw#rn@``RSUs4}HyEV33 zyI)?R>gJ@joE5&{hpSblY>~0NYg<*)A9U&8*+JD2YuLQ8nFf1H5@WV1s5D8crRKIZ zK;m|;f^NK#m`hjx4+21-ZV+tQ`&;}|W&ET3n;NonD8XW5oC^bPy8`qnVT&~p9y|-_&7TydWdKQtchui{T3w55mvxqKy!*{}a09))o&oUS$ zbURoAeMaOJGc;x$4|116sMY!*BbYGGHLsTR(pNJ z5?b0?jUGpD?+kMT^aNt)W|(ResCSDfB#R|P20xJ@Kt=I|sI}Qz(R&Jb;8*+$nO~MO z6@g$MDoM6aVvWdmUQr<8A>!?r=ahXGn;A+MkfR0hybvm*T*~H5Nm8h&sIaiGRYV9I zLBya8aX_n#X!Wbuv|I@7`48t$uko1ooM=6sb5zR9pJsAw9(QCHfeXNR*wUYmM6K%` zqhxc3k8V0fwY_$V(%{HkOgAsPC|{FD>W}fd9xLhGoov4H`w^4vvGNemtFz*;Kz6n) z2)qAuOPJ9o+Uhz;X05i3%s!K236-~HlE>V3p+nL0!5iPGSi8V;)g8aZ`tcKPAokO- zi-z`s_ImC*l&B6n=GKbm;n6-T6%Hq?<{NWHfQoM~+|AO}5oi@6v;~Gz zWpKNr!I1}NkDe~jdp|v-rly|S6Tm_U5CL_KlpkL?wIUv@W}msMHV?rsK|=wc$+%hQ z32$nB2m~if@m$-?8D8}`NvPnxAF1kXv)^80&+(v5Uib*!x`vPGA@fm%#UCuqbH;1m z*6XUUErKB~jHJy|Z{^LRjGTezFlqW;|CZf)8?Q)RM#YLt8JRWGigVz(PTT!KMfze+ z>-jCbm1aw&l&8=i&GJ830K|ziGhV%P)XwkRgP9T|i~PfR^%9VQaPq^6I0%4A;zIn2 zPzn<3S9hQC7#RmWdyCf-!d@aB!*_J%AIayjBCY^#xm@k5@%7O%U(_7L&QwgT#Vn~a z_IRTi*~tNCZ;KK6$Y7$5_T0P$w^zQ?^rxi3t?&iW&}LQ^?<>|vlumO&`0KNV03py`17tqgPNK7>h((9(d_79TQ+i>+D>ZU=ie-ojn+z>Z1jjCLG6u(7`xK z-Qn6}#w`d6LxC+Zx9Y+xXOH_!NEb~-yJ?Tim$3D}*7qc!#~GL!?d|=1x}LMe9g}z3 zKRz-wH8q^VI;m~dKdxD0pA0<~_PqVPT77S$rIMOKA#ApfMYm(tIUhB+>$v=!W|DhI zJZ*Rr0k3l!;N83w%W!rb1jpZS-S&L9aHMb{BRSg+&g*qL{`y#P<#`G>VN8@q`(Zre zpoCp^bx>v4?WhS~>0F4gvZi>0m)9OLZ8zGSWnfS20N(R5LWApxb>;DKMm$LtE~C|U z5*<$^P1ks|&-02C|CF9nI7_P#>|c2KdtugM+xZ+;zKhmfvkv0EaqN&1AnTcg)0Rj) zAhjQ)!Q8d4kKlI8+*j;9izu7SyRpW>EkGb(0WiiDIxKkt#%7$HS{ur8uF_W%dB-x$ z6%oV!m275a=FfNy>+f}1-;o7JiVz6Mq6OQY4`zA1zL;}nO@y2=oK=f@h>~xij~?)7 zE((C&WsK;wUc$qB9hloJLU$*i8MmC}xL0T~CUiJ*Urju<-QzkF#pG{V%g}Q@+@=)e zx#+k@nR60~iygE*U#y=GzR6XrIN}gaXXTf;8H&%@=Y5Ja=WH+@Uh<51#I_{kpAh_A z;QE_^fFkU$%`_git?Y2F^twAY)ILOkQd_N(=$mfSFl(0-yrr>g_Bek!=X|=R)>xs# zc*)m&cmddaNFp|Pdz-oBb${p>?ZLpp!@roCo-Xsb3TQE62d>=YPYE*a#_`>5yN=pZ z3pv%LT5Y^9g?~C@PP*%c*WsB#+&3J{^DL>J9A?;#sc2(W_8pJ#ek6PLc(yuzV`@LM z@1%1(H(e|SXdjAJ?ZBQN7g^0lX$B*;wz4{9v>(S?cvuSTv_+Br#V^0PLt=K{@bxlx z@4B>6PCbKQy3|6@FX1x$h})SvY;io6YU3e3u2ZJ&BUcA^Ps&Zg^Ew>;dfB%?r1}Fw zghlc+T$l|SdW@YMxHk`Ap@EqLd%L@sI5>_RY2tl^go$&n2deL#6K^r zHCYildf9xdvk#z2mYfT-N^BylqxSpTmWvL)qn?x{3D2jjupW$mZ`AB#h4gKYqg zPD~RZzlh7N1Iv-#iA0uN_o9PI(Lb zVI4fjtq*c_+{x}q$5R$b6I5I84DwTcD9dp+T|>H@+>+?_aq%(FRYIpEPrasL&o5Tt zg<`nD{r&1f5g?cXhDMGL;;UOW5NfBD%WnA%?&aI6Q3NZ=<(4G3NteS~itZM(?KcdC zbupXMj6Xi^@L0|<^U&n}qm_Ow9>6C1F3g&{C*LU|L#v7I;3w2%oAzsWq?7Nxo0sp~ z7rMzK@4nfncy#ydA4q~cC!32~5Pii3{1;+6&{WUp_5tC^7nmT}f-2mK>6b8O>HgB9 zb9{Q~+|cLd(JWb^pv)hoFv6%25uSi*_BZqS`%4b=TPOJGW>*P8vQ7)f1JCT~akCT0 zr{KA=K?kT1F2VHk6SdP+4(q2*SvL zbzGvgEVX1*Oj4TKX1NXR;9(mNJFzI*P=4$pFf{eG3BE!x69&IQK|~9J zH&-z<(LpFvE|}eM!fN@D5}hqQJhq9pL%D4>Y^H$zbb)>8xB;!i#~eYYxFj7bD4n|x z4NYth)!tk&n|KTCRSLW&xfZj5#2RAH45^CEw?&Shcz6?Yfy*o@i)OQII9LUf(rutm z2;`$SKDikWqdsHFtjk%${Tb1PzS_=HxZe(!-zz{cU@Be?fIhEmr?L{~V`zgei!@VP3Tx|hw^PXcKV^z~5P0=xs5^vj0pQ5x$3^|cW zIUnNuvf)Bx#j1$%fmD1-RF7fR^fuysZn9qKL#++7RJR8(bmIrUSNHsklv7DuwNfyo zVTl5U_bb0%xNWWzX)RT1@~ee)Pk7JJQXWKfuje17_icuSg``CFd<4cXh10LazPc}` zEz$>~&x1(AY3CxKT$@tnUbUsta&VN_Zn(gEng~w9Z6j%!I_=T>VT;>1B1H!532Kb^ z|3#Jn7c)a$p>}m(-=t9J$)#{~+L38yn%=P;x;=I)DYF{Nwc*P*n|t0=yWDnX_O#t* zov74*EPGo$n|AQD8KDJNAQHo1rboJ{no@UNA=}8@Q$xubNaZ>>?wrC!uZ=-mh|@uJ z12acdoylRd`o-bvAj6j;E=col91Ajz&DR@tDbr|lZBsJ$Mb?Wx+$4hYoO;zrS3FlI zwicqXUaty5h4+h2=A1%WoKJVds^_gJ!hMJ)NX*J?YuINAlTp>63a=ls`WoVL5k zHloFedRoHY+WJ2s79T+mRDEg-ZOg`3Vj32*C(aQ{pvDh{RCSV{sGaj{qbO&KRtx34 zT!=I<+}`d3M@%Bpt^(taLo2D=%Y=j8t8$$9CTm;B(sQqc(@nEi*Jb^2g)PJwt!}(6 zLeS9@ze?YsaC;81=bv2~VPj$dWlpzR6~Jc0m00ia`$6!v`Re!cil2o`N7 z_p7iaM)dm7hd7_)%)<6PDNG%?+E7$4_f9hRp2CeV!MGfuq(pU86dHZ{8$n z;BWpy_3|(N=QAnW{_(;;FQcoEU>0`Ox&x0SBmw$fD98%f;f(;IGzB)gfCoX71qTiF zFC+sDwUHET_pd)%Xk=40FK!*J)Y6)qGiL=aFSGHzg1@D~B?Ra|e5{pC123oa@1@tY z9$O)6Q=gb5doyLdybO5>X}-42uRZJ2(YJ73!#6M%6wdTNSvI=h3^iLzaAx)AJGE7H zo0I5|KfLkFh0+`X)T=T_mbos3QZITXM28-3rxk<#gQ@BQ#}virth zb*{SYXtlsOJT6)H)R2M@Kb9nYcvyz1rtJBqQ`EfIKSp<0)Zzal?+<8IbL_b+Awd~3 z3Y5xFpSKFR%SMX&OsVe~{Yjo}9rmZj=hYWGiNdIeZ+hTZY6GY|ys;1IguTcPe6saY z0)GHi^@xwvrHNmq3{cZG($_OGLbAW*a)#zvxR$!~M&K86qkBgCS$SIjaIz|%l~eJ) z2q<_K`8*o43x^KXMGoqk(N(BV0I(u}S9|Z9LaX61oZMh@z%C72YPHvVli_uD8KL8F z42zDwY1BswuNt`WL+83p)^gr%gQ`1G{sO5v zyWWj@UcXByOI=Tc)%$aQpmJD57%Lu&1zy3$z6(duc+CGa0~k3a7?oaNARnT?gfpC)43tRlYhg+hdS^p;0N zg6jSq6%cdz2J(8J-{aquEft1%$UUuZS4;%5To$J*$t})}19|OZIrpsWQ#H5v5ZTlk zK=iZXHy(q-b2T2yfpcG}e`fLAnr*vZSa#8@9qI&M`QIZB{9Yy2uBmopi;oZ;-0#X> zeA=pzTp24S8KQ5rik=_4qWOXJecHsZqWZ>E@-htvorgpRd0A97#Q0on$XVp3Outl> zGd!|LU25g9-=Tc-A*vdWzma+2D82IP@^+aa&uRZ?QV~RB6Z0#FAcg$=`8YoCI`X^MVVw5(xcS7>dhPIG)!`mu6C;JZq0fG9by);F98VYHb!R%3w)fwWEtGxkTn$)j2+L z^-1-`ZTou1S32LqW|Gr?#1q0=-F7R-M?I7xhG)9E7>jd23f9B0Xw5iR_8%g(`ItVw zHMWErHKljoTx0Z}Kf>AgGMIhE*jGr-GMc)#%1vkrQ{lrG3E}Y!kF;UY_v$~G64E_f zJ4=1b2suNQ9G8-W#T66Agv_qQ^%TchGI;j5!cc(0Qjv1qam~|s|1CqE$$bbQ^ewhO z94l8$YS%U{v?2T-dw&^KSGKeb!wDg12*HCBoL~tW+#$HT26uPZSb*T}?(XgccXtR7 z+}&XV?@IUS?woY@eSUu98{^5~$J%@B%(d2>HEUK~byd|-T=ba%`ljWT!zVpyr}qce zdoIDtVJEVn{`o3<&aT(z4TUp<7s44mQ}6?D6%*v#JxNjMPViMJ-gYdOz)|9zeueZZ zH@)|`tgC*{UnTZ)@ax^F8M?ZAX0pD9mDJS04Dn`1N?P?3@RJU~>M$#aooEsg{MmPC z)etaHxO7|~CD!zJQHIdAfh zR9%xfT2~o9N#cKONSah?2qX*0l?%amDxy^gk1cJ;t64a+i@=&JZ6Gq0yZIXaEq%b2 zfvoFn>7k&>S~?AKgzi|LI6`6q9ZOmR;Gf0&83@|$rGkUpqg#ISiK|i76IO~*$wKPF5g4=j5cmx zm-S8kSQfJ$*0_y~wSLaVkO;;?_H$YcYp<^i0G_Xlm6j>;--pakaK?||>9%QE)A3M; zX_OZBGtGc6T8C<#jV&ZL9#BKWrcJ_|Z%E@p;<) zf33|=w#$zi9KC^h!*>A;SezH$BXrUdG;g3$Pd>8Qo_Lb$QjgVt2#sO7&B!`AD{Ux- zsEMq*BjMJ1<%a`6C4@cbBtL`lzj*fi0bl146@X*CN*dLylcbo)yx5Ic>=L;q-;da; zhTUwYD^zDawf=*{Qnqer+i(6L95Cv!?4O(E?-zbt5IMFTXjdasI~Tg7V;`Tvnr#St z3f=Qxpmvqr4hKoi_Gf%ZyWSXiE8GZfDY)i);tzxa2!8~|KaLB`{p&0|fj}aXqNCMW zYqkN{Vv8c)jsC8>GbrfST5ON&~R*- zQtTT#n$baCQG1-K$?}E}Vn5{J_|4bHfn)!6po;BJF4-^Fok*UW37*V&EcCNmuk6FW zddVWsNi~u3Es{*dCvtHtB>9tUdiuXXhm1%9cCPTlGw!oL*?0eC(EWe|kYK_NbQdDG zOs;GrEnpXfXTx|8A~unci12#vyjz0x@B0x^OY2JfLPdUGw;$v!WIwpoUkCcrU3dby z8pdssY_}|Gw)OI=QC-80R0Ba+c#8I0n8TQz&kl&dDY0f52b|G?nF2>ym+{xvi~ z3apYdj={@I^}I@ZW<&(lB$ectAd(xsd_DLH${79K;B^l#pn%Yy(YdfcYIFSS@`ss1 zmep!j7~vfJRFdJJw_=xkkuLyPuTh6nrZW>*x&3NDLxn;7d^LV4;mv3nc1WNgk<@NeN~ zsPp}#sM}Dn(S_S(KE4|#MEpO6hw*9g!a>L$6!&!&iRIZAzWd?g+9ViJqY~U_v4ryG zW$AvN)8n&HnH8w!l8X)Kvx*5qxiRl9UxA1+RJ!!MKiR1NIKw9rPZAxv8lfT;ABH&# zO#x~NvL7UTwdI$IDFe&^el&o{{@YWAK@eg8pHE2($i}Lo!_ORwUuWn)^F;Wgun>#_ z>L1m;{_(kfeEF*N$1gP(d943=x&PYAo_;@Ku7pa`Z{+7IT3ZuUa+`JZwJ&{qC`JE8CR zv*dnRBP?+#CNi729YuJrlOp%rP=e4kkj0g7&28WGb~UU z7&DSw?rNT|66OBj@g9i81uy2-;uTpK@8ROq#G>m`7t{QRR|z;_K0OOXQ=XZ;0XO#K zvk(VSbV((}3KObV>K`V>i%fJokCC-h&YXhTdJv~H49$;388H1=ln&?>RyvxzQ zbliOAYPqY{Y<>S>Un-D8X6CeiI1=>+aD~t6U6^(+taf0V&w7=Od;RIn7!4M%R9z_b z*QtuARHUS~bG!jlXJ27v8zy&qZ`NU9tpjgv6V}uTTaL2st z($N*^j1m8g;`T$w1q5H}Sm3iw>`qM5g7-Jv z>&+G=xf~)TatGDeuZGJXU9<;=Gq(h-TZ$nqnqB*J5SQZP&9Q{B*v_|@U*7Klfbf3h zt?o_i5&PXq;xzbs5I^mV9iWbmo0o43 z6Xw`Bua7e|Th=mXN?&qvZR{UbE&;*#y$&0{poShQhb}-A{!5bqaTApvag(%N zY#Lixph4~fGwnWTKl|R@>Fii3*!6lxT^;mU()FUGL}QQ3{Vu=U6z%+WxdsP_24Bn_ zx$3$JtSDtmgFWo7Czjnq-Xg?(L05TLom*UwIPI}mq93k;Xui9AXmG#Y#ZP3reHOzP zeuQWInzD~Ah3Q58-hlfD%ZfQR8H5F#VQBZ8TL5Ns0aH5Aq@Yj;A>_X-IRE1A96Lz7 zbf#TEjQT-s!TN;j{v1QI;UYzxvT5z}i%6h_W0Bj%H$2A2Ev_o7i*~x-YCQvQ=ov?H ze5d#lynvW;bcl~5)Nb|#YkKLf(uGO=Jdk!#@WE$oJt&-5MKm1?c6_K?a@nbG_qiT! zGx{yc<7y2`%$piyy{s-CKDm?_9&9^nJa?nV>kuLf{5;Kz@Ko3HXN7J6`3}OkAhX8- z zr{ZA^G1+`yj!0JAS029qv_j?z$Ha68E9^w>rT7z$n_$Ex`wbb!TnCSDdJiWi?w2Wv z1j2?RC8w)Nmw508P6DL(M_?Tv2ORTR@Z549b@mK%NnCT0Gt>~)KFiYe=90=zc6sY2 zcq;XF>VykK!%S&bl+lj7JZ%=fVaSL@XBtK

)$9KYyqb+>CySf%&=$v|Z@VYFDym zg5Rny!x)h}Y^HgeY%C)}kLiB5!FJf7f0G5r^SdMLxs8(MbnxhSJ#_?jD^y{;?^A89 z($;W#df=k$&~j#|PHBcr@<=+KbcL_sGGaK&b^ATp_+j?NxvFoU0AD{75tj`B-oGzZ zQ+7M?SDhXsjY)mn892u{#=cU=PCSK<+Lc{)nRfB)O%SLoY1MsdW~ma9%H!VH_jF^Y zHndmc)y`fm?O~=5RVawWBd0`7UEn^-4s;Q6fL|*EIxA zcE}%o1OZQ%6;rapT{vRVEx-rPPr=~5{EYu_viJzTDeSN(W85#kx2tffTAtxD)wnsr zpWg=QcdyYNWQx~jjX;{omv7D1mtTIq-A7DSG$ZSB!fbsQSzsmD;r*KNJ}%$Zs|m%U5MSm(m8jp`389l5llhvWsJ1N)fu>%>*25qmQC zfdVgnn;C9Y7_j^0Fhohgdf=KnFTY$EsvI{GDq0!Z{@24pbB6=_nG!p@0~Pf~;2#P< zuK+hMZ2n1``Cz&3oksN$yF8;JoE6>;xQqfndd0nA{X-n!cCsF4VLq{p-me_3I^e(U%1D%xX$4N9Yd4M)z1&UO|s|&6_p4Gj=U>Ns`wL1i$*a9;gs+<4a`w zokxiYw2Dd{Y}Q~-1+;2VWYStM$u7;y+(d+0Dzf9-f)R+eaM>AhICrfk&rsoySOemqs1L~?@|D5N#s9cgnZ;M5RstXS9|N8*Tq%}5;>FInJYS- zNM7shZ)bLq%0WLhRAx-)ATiuI6{V-Q)dqt)8=?5Gy|S zmnWyLr!u76uv7I4BJ@lj0+m^_UL-1tKfDRgeB>N1akG?84Np#vKk%N~Lmf@wOncwO zug7TnWP@*X#Fog5R-{2NHCz{*llCc5l6_q;?-SsSiL165$^?`ye|e#1`7r<@;qSJ7 z7GRR|!zF=7`O&?c<@^2A`@S+U?o$QV=XgD@!ZW>BkI=8p3Ar?)ki>IwMa4ZZS-lDu zm90e!*xebe;k8=J$S|%NJMKx#NybuGO}JEZbi0YAhnvVU#9K%2KogC}lG2we=jn)V zA@)4Y9G-U#H%XpuMZ&c1G#+>DrPGyCiZxkupqK&^DJauK>oiP_jUzvfS6k9Nsw!d} zzC~q99uClV?($hEkr|{p^rNJZt%!s#gu=!oXM$ADsq}*QZ6|r`LrPHNOU?Anf6MEg zvg^Q>r=`p%x^JI+Z%w zyVer8n&Qn9ur!6x<4^ajZ=?+?wM?%XWE!Fv=nZ#dLS!9xP>2QSF%tA&7>ae19r8wv zYV@NSvE}sOyHFf))IRdCBT{YOU&S%m=4PGqqWnI86-a6C6dagBFWFd#WP92&eBg)i z#-oNFD^@v3=c+5-IA+I7il}}B<3t31Ix86Pf!5d`&t%O_vD0GAfOxDFdKnoKw%51& z*`ZE!HiqtSe3s|jTHA!2!7!EOPFYSKE?uE8B3nsZ?(hE8M?#Mw1!3LEjFu{&H?}Y%zc*l z)z+&O0g6v>ba019?!E^Zv_h&j0YN-02idNQ)UgTf7Z-Pu!opmUZR=C9V4^6f~f$Rg$Upu0Pryts)M6)z&# zSWh(Fo!Lh*vhmj-qaS9t*5R4m;VPBOgQ{lJlT^Csy5`!Im-ms<%G6h+Pt-K~CCKhr z{8?0KQX6B9FLu85ewzMnyMS$-s(Yl7_EUk5A0Dp<7IH75`$WNtS>#Lv#UnKKTf(;* z0W*Fqw68HXNZ&Jx1wVeZyE>H&9+R$#3QsXFc!b1Omb0v29mY;X7HfqLq^CE3T7U<7!|^6^pru z?g%%=Go!H2rODZ_v7f1#-Y_1bYw`%PoT!eUHZ!y6!8J3c+1X*T$rx7&ERj zFrQQC!=H6mQ6^SdwL_5Yk|RFo8j+vF&BI)Z*cT(J`eDx66{7w5gpR=J@QUtfC5zic z@)Y0iR(o#`ByuYmNc1eCNQ%`4-_JFOFgCWET>{KYD8TjHU&7ax6EYjm7D$DbevWBk zpW=drnsSR|Vj9{&2gL|lyEFO<{;cLGNp#Ok7K=chp%~^apd9mc=F8uJF=J8SO^jXk zHtLVPjHHFM$7K>l@RLggmG|N++*Hu7N|)X6iia*0)2p&5qDBQS5lG2Y;Rjap-QLZ$ z*uG>tl|+%9eJ`A8mO6ERrAOB5K*qAsGukEexjn-G!74f{$oY3C7R>X#UQtR$rBn1a zIhqSS8@VvgRB?6FMl<1UefsE%ueCzXcM##(g&&Tny!I#tp9il?vn#e3f_du$ zT4s28KxsE3yx<85`5xPj^PQ+|Q}2g}YZ;Qn)vLw({Nk+qw%}l*E=mf$;=9JlG94c~ z_$X=;tJX}njd8^pL<<&kO0$tsR(*?l98|n!b8Ddh^o*#1_N?Czsda7-SEM@W-e={q ze9E$Z11s&uT>Mu#5+*MfH{OYKaby|%gD4T z&+wr;kT55?-^4qYIMYyP$_X~1W*gIxxepeYlKv%l_5@;A^hsjzuFKIz-RbUS{@e^7 zXHNyUhD^8nA#P{23L0&QRzT96l4E{R(7l7O&^=54o~=KeY^$hL)l)?qNe-vPQ{37Ev(M5kvLM%#B&&nM!Bnc8M;=?aLnJ@fDrUcF zm}1+|M0{IbGl0${;c7X0!ePm>>!G-yZ#K~G%O7~xpPP$-fZ)jy%F|bUUj6 z?(4MQ?Cln#LSzK%k2W1HPE;k*?UGMj#lKYSoU}3HG;`T#p|}<9(*@F}oUTEeF^TUj zf4ppQ%5yrKa~Zzz-Tbb^bf$#=Qg6t@3~Pf`KkzY^c53AN=jIZek9sXHIR}3QieeR&{W%iJqR~ zJ~1;v{Z-PldpBC`+CVMQ#T>s*j5u;8g~M(^XDI6ubuy64Oq=mCHL}+IW=y8p$7(Ek zZQ%q>H&$}#)bSv3H*CIEZwfi*HvW>sY3~ADtoWfi0Zrtdt+_IbCc=~}<5n32#V^E- z@ax{lV*ubkx!X&MfpvA9Vr==!`jdSQal?rdXg;>d0vVbPUx-9Qpm5#MfTZP)n4Mh} z*`@KhQFu8N?AihwXH7pj975_x?KC3v)gkq(1j$H@qAhg zEc_Bf^C@Zv+;{rkul^A8R66dp`^A+4QJy-_&{SU8emzS*4V)cT_aV58MHn8#5$i0rpx9MyGC$)?p%fUpCmRurAx zU=FyL8P(aHa_}_gHM`l*z&vqD2L>L&Pkv9<`~wdLw8ts*Q^=!!{Hyn&iaeik42gV2 zAtd_-jh^`oVrSR{gxt-qg@Q(!WY%Qw-!^3345?+5#fu2Wi` zil(O3MB2Mbil$N)aH~R5jt{%IiHaPu>Womrx^Pckbx$~8hkV1p<&Q~lDdmjXIaj>! zG!dy%=ZBV{Kj3}C*y}-DfR2v2V1D|t*5QqsY^i=UwjwQM0cnjdlWi}w&v>_Gv94SRf3WWYJbNXK=m6(ln*1Y)V9!>}uuVWaMCMY9q zFD^{9E(~%qndo8bw$0NFS5G!asCT3J<`(>*SL?6R*R^$W`5vu5>u$1wrUE7w-y;+{P9R2wUkwSp^Kz2_oJrJkZhsviV|GW1kBr zC)?{?7aA^;hJB!y0QpTz!?%TtD1?1P7HVrVMo_`HB)Pz$QKY@K=<$tC$j%l8-M!D) zOsjT3Xu`YQ>m<(=E0>a3zRY7YcN&3akBN=ZUUv-CUHnvB`UaUq@J&29lB zzG6WY9PrmN!&S-juW=BNzk`AsWR`pNw92H!LzUjbV>XmfqSlAH&E&8O_ej`V7L5r} zmxYlDAISU(eQe{f)D7DU=m8&1mr*S3NnBUJwoG`FSV1%`4+|IRc~Pyl+Cp{YJmQ{I zp;Vh(kKXRxfeZ4UKzkm|aI_h9Z#UnvSg>2Z7301p1~lc=kc(!2(QIAHMbO2?H9SVI zuK;}Tp7cnC<9nXw{VoBc60%8w{VyaBQs-7)ULL$b1q`VzK~vSfzM`DzlqjSTDq@_#03 zHQFGsupV{BR#?POzt1r=+c2$qU}B@TG`Kk?`Y+V)Q%GBBss`OzTzyMfOknjNe#-d! z0Vwj(!%asd9!+mCZ}u#eg-;y-76=3mM%-yRU2(rsppK3c-@6qTSRvu|=|7H>#U)AD zYdQ{7gq>|1hg3h$9JAPJK63{7i>Gz!LkW1x?k-K{-^@O4V{C72L-s$8RSVx*#4k5a zWm}k6B|Mv9KY2l1FKw3?IRFJmlb+F4=WW4E_Kw)=2WRM!oVG@Nb_XTNn(P zTfAYc=v_bKvByoomd&B0Q!e_-eDjW9Y+`Bt955Xv?9q!zMIko)>+769=H@rnjh^{0 zN4h-Jhca35*LGJhP(}S7-mw1iBpcI0qfxCNXlZ-9bIqHi# z!H!m2OuTw09#2~GRrKAFWo7mn#256dV(E0$#HN@S(&rEJjI{=z3z(wJfE@x61x~6y z^_ey@PXmic*ca<<8JbAgq^*LO-CJ(>ERF^%Y_*k8498*4P_Q%@;I;H znr_z*;E%pX;pZFB_byI9PQ=%xoO$oF4aVp ziwo;eBupKM_U8#FUR+Sd;?SCd&h=lR$l!;tYr^Yi>vl=Yhu|B%KMHKy;S>NAS_ zjp7q)dlOml5|dDbMy8#C&)RXmL4~9I{+L9lUT?ZYmj!UmrlpH4^$yAww^DH%Zs|xl z7q@v6bbZrX+(V6uf#O=q0`I({;@^qyx*6YmEvJ+?WWCzot0kWAWO0~@wBQWad&PwH zyY}<^M$FB0{eE@u81dV^zGl5BT(80R^u zHxRfbA78?q!?vaQl~ntrD?Q(drg=G?bhB<_>#I3B?vih7A|qp6S+1&d%A_K?93%gT zxiCGL2UA<3F;p1F{hpVsgtPf-6~5#&T*zbZNEOcvpJ;lzYX{~5w1R7Un1Z1wyfU0M z`|e}U0$0&d(zB#`U$8SG?V%{kI^?qeYW-ahVGTyB3_|MDhtoH|V3K)=PlJ;lpJ#KH zm5oy&rHOm9(Sj)2<$1M{G4XH)5)81))ooq--9=g0drx_cq$!$3y6E)JOY;(_7!Qwl zHJTA#z6=$X5Ps8xRJhuegj+=3*F*)%-jGCU;i)$RAYhsS%GXh?-2aMITNl%AF4oPp(aB`*I?DUC4~5x_Eo&gOHI)s%qp0x=P! zjHb`m(*B^3%D`0FQnXsBY&{rVURzO0RF}x6q$YaXA1FJBs1L83!rO9wzXe>Nr=OM{ zRz8JWbp`B3WE!Kf!J~_bi8o1t`3Sen#1X;--cdZsM_quWur-u2Itv=+c=*;6PWCvn zG*mdc;xA_59jiGzw#S9iJBHyDd2Xr@A1Uyd-66Sd)CpKqb_=PCbk)hn(8BQVx=T@L z*Dzm=Jg@%C#rn8J01>de zy0a3FV%!i)iAhKdFSX+HwSvn}2n7v_T6%YhHZOPrSW1WMwjbzwM#?;l73W+_nV=5*oP+X>Bk^N0hLQHzhv#?aiGmH@X ze9?tx`m69pxO4o{e(?>{UIJQ6`b%RFjGi4)DAYLXnQE+%z^`@y$)vy+b6s617sTiI$T z*>2d2U3%I_P_E+a&s?#>ehG_D#slOb04OTA|MM)ACzPtxc4l%Ep&w3d$jO0H6#EDs zE**&gAGpYjDBpcpfK?VJy)t^2A!{bvF$uYonz?GxdY;^R0mtR<9Mi2Ru#ubM`K`*| zqF5w`j>hvaD#sUUOZ-$0>a4GVgSnL~*Yfk@QgKL1Nk|raS0@=A8QQqNUr1~gMSjYl z*3oCq%4txn#_Aqk3ISqXWyhR^L<}$oYTnV@zWESg%+BTQ zCMlA${t2vrxuL$5Vl@rXFxsd03`?PM#esotG_w=WLBmyw@(fm|1Zc{aNxesApe{2t z4vsmeZ;4mXALdRa)UHX9xFATMHPPi<(ZT2iOjUS8BRbWgx2_0L@qiSkITLF4S9-ih!K=EX&5<0H#TMd7VaqDU)}x2YXr}4KWgj`})b!|5 z3IVq$^t=L96d}(8evwk}qTIOL<4IzwsF;X^6PPrOXX*thiLiD#79rTu&nN> z(pmS!=YrVdEjhyF?K0_ie6s+2b^WsZ96gGK%U2VJHGdPo8K0kV^rw~*c zYTzOH>=%-lM*`5blz#~S2^IbyOfP~Fn5L6^+tZky>y!&yc=RwmWaiXX1LLWKiDypI zdX3J%!ROU7uElHah*}91@Krk_6a#qKBA0FQa+OvW6=dd4mXWO|`^`a{k&U$Xv(AZ= zWqK8PuP||2Pi8?SDL4wGdSZNp1(J*;Loc>fO(Ua3k|FY63a?}8D6@a=^InD@d6EjH z`=>nqe!)nVmcO~zbNZM35=g?RIjyg;>)rDe8-jcYO9qsq9U0IJRe1W{b*Lw2saHCPVCRrhu^NH z0mIXej^`&tggoi1mziQc@j)!!%_L6MWwxZR+_Bd{>nUtb)?pt7SKV!~yFHpN^B6^1 zvyQz(aTVk#fX=a7omFeSDyci$k3`pbY&<*Vdvt<+j$ucxnlw>={8iL+nPV%}j05oV z_=>!~Q9k1Y<#TEU^BqOoFUBz9-)XAx7G!%izMAtCaZr)b`K}Vk1fN^VMOJs~bEgq= zfMHX-9!_K!UH&lyOVr(Dh@ywgjZ8Jxy>|qMKBA?)wbL%H;Y`%DAlzu@sJLj5M1{ZC zv}W_WI@6?M{aEuKwE!ktg5#1Dy^uMdIr%`${EgoT5N==mwW+xAUMX?b1h;7L9JZ&p zeVV#0-Jt_r@j19#*L)x8ru|^u+ukt+RrG+9{BI5z87+oZ9)n12|t8oo!v!>~`Ua7lfXJ4F^wXRWl=_B|sxW$8_-f&0C zvR$Td%CSv|YcAI+zPYu?)JYvfCoxj?oIsoAqW% zq@A;U*cHl_xFE^k|#R>_jCy5p08bU`4{{3om1VI5B43&EfkCbPL#5$qB^HK1eN`{BbX49 zQw4_g+ODd?6Up?G7x@O?yBH|jbJh@d66uV?vWdyrSx;P?KbG)5uMT}&T$a)d<(l+h zno>M$JvcGBdJGlExKekO?&)J?Ve!d1@z`f=eL=SVy*)|m8iYo?47%{-I_1zfIp~3T zn&e{cHe?*TcHZaP_Ci8!2;|V(5G{Hp6sf-SzR)H46ZUq%q|bQMWAoM~5bfHh65lT# z5=q#(`{H^63zMr5^E73$UpXO+D=bQs*iH1-V3|7StC(gHsU#$cE7Ym?Gn&8ADft1D zfgS3vVb*3&{G!(afvm1xQ5dL9fLF*QMuE5rEFpZ&sTvxHm{7(8ZF;X z9*2c)wagq|gu5Pvay5|nrDX5n0RC1q-&`h)Va!f(N2JGu%snQ?A8ZwPg zI9Ha#jv950*~^Dj$M9e0jt8K}!>+e#6KvXkR*)DluQ9iARld#ajYe5<>|&u#qqzvs zC4r~Ay0(rdrPbB4W+jxCk&=@ZFD3S8(+D@H4Wg5@%;j{azvqnD2cuLcTf*5TiL}mg zEOoVsjE?1ak8SQGhf*IbH`&)?U6L?9TyY^ovKD<5&*FA_D{eAd(Z3Iix>}T%@^YpY z0B*RT89%L|(q!=!Ct%s;r)nY;#-vZ~C5b&^VWVm=R0tR^JU+~f*Q?##qA8g$d3&+W z(?c_zaI)J;Enuw=bqMP7jfwTrFcwr+j)dn&-Z4a(v!!bQ;Ps0@bV5(Zh^c_!OoH^T z(mR1jQ-uYITaxwD7av<8RsK36e%~qFBrt}@nJR^yLGOiMNl`f16M45~Q>uGF0sWX7UK+U`Ss942mp12}CrJMERP^(U0`Vx<+(kR+<(Z zSK0e}n%XD;3_^tR5wLT-lFqcDvqrvXxP78+`V8i6iF!9hYoW&*LN}NAdG@4IPWX(= zZXpx!uh;Jg{g?#T*w0=xo$M!9*M9;)H-0nGP>s7~x07^J3Z05%L*xFl*;jg?t5Zam zHEfaEA~9H^fLev&e*Ri5PbzBh_~__eOeuY-xL>%*+?+ppdUCeZD%o(l3J74Ah`A+0N%E!a;1$zFvAO1G8az9EG z7dS1yGx^2n`uj&8AccVcli~Y!|8qf&0m?Z);}N$0PaU*>eVgA!DD53!{E)w(hWg(N zD*gkX+XQtK{m*wo6$C`jC%xU?>L@HU)6 zU^IXbCXfDUFg_t|5bN64`G3=XA0SRNThWXdMC+#B(kDZxBrK{YZz7mz08sg0a#|c0 z?E1PgAsH-Pmz|+hxd}>cyN~TD8G%pnTbh*x&Bl__SqC=G6PFx}vB^;aqW;v+39NI< zx&<$uzmkIfp?EvgyRrWH)&v8P+N;PHiNnLzwL!SOestBEnKvDYM#hBCEd&{MYo>1H}g z2GSqOdRYYJHIGbgF4qZIo2RF;C>COS%YG3#YA&bdH%p1ksdsds{vP_PR!Z|DUi;xg zPgC+2@R}c7rw#z3f`V*g#Ks{DM;G19__*ncT1pE>NKjnm#wh?;!XDM(T@*x7wlx3* zvT72Kv`B!{RsKiI^WuzJ6hB1tXoAoJ&dUDOh z+i$ZUPEQlk87ZSyDe;>Rm$bjR`(uJ+ui&6_ zOn@Fci30CRUN6TiLt;Ws#sFr||MeIIo-+Df5|8v{4Ip8A1lB1|y#r+h?ULz9E#nZO8|vO*2e=`a^@1lk)9fREc-=f?Xsa)mGlEe$ZH#EglR6a`HL~$^~CZL3*C2G6uZH)%g>G{>9wQqxU?W&Z&fA z-az@_w#L{B!?FPB1}1RFtG>gUt?4d+J-8l7DPL*V34P)wPSe}};;~-w6_M0%e-uPo zd4}tAJzs+5Xl;gS62Q8hUvj4UsebgIP6BXY{h2#(e&Z&#ervObmUsBAr(fQO*f)ED zOexu_kD+F{_y*N3oTHD$Cdo*+CY3&b-U~P3S&@Tq>kmbRA_JNOk`9PU!NQ!XP<2b& z{Lnr(&pbB%+35AqhW#*?aJJ^~+((G=()k8-ZX&tF;dp?bczmELa~jWPae8OnRcdjt z{!&jAtGosX5!*ofh)YEiaE6y|w1;N7ZNrWC2Q~Lwi53Q6 zaM#$NvHvAPTX)@fZY@JOOa2#o3jP?%e)7CeJd2P=Cns^n zOGsO1POuNb8T0)rDhWd-u{r~YaG{u0-z{Zi=n6dnTbY0ekX&8J=Zycc2Y%VGPdxWu zIj-J>FBfZL(z_wi!RRJ(CpKJyTgc3tH!-G^HQ4g`J}p87ecfTR*bSXMf3r>h`>;Q{ z8tA4&;{N-v*C%T|37;KqIFfOTt_6At!ptCQVo2>{x{K}#Yu~i3j1}b#dsX|acp*_= zL*g}EmX2FoOv{FT_igWiz=X^~8I4&AQuvqQpT6p4^1Ki_RA198IsDe!Ha1N-F-DlV zCb@VCWJ4?fA?&m=!+sQVbG0aB^{QgUbRYrXtqA@bQks+biP~)H7nBRpS_wy-f;cU= z{R3Qs1GH4+?DJJhD>C{}sB3wRg^}d|VXE7EyRNjSq_OoJKyI-(pRNeN?VvKhUESAO zOy}uJK%$%Q3g&g| z;&!>7PgRdXw?0q6rnKe-n3-7emFX}NUd}x4zl1%{+>kHVe=eHp0b_rG*cOgXdRx>B z3GuP^v|Q+`%@Kh!GN(|Fdx*qG5sCKz^F*~j%g3hP)2zTm)Ujk8hKp=M%OqU-^+NMu zu)&eUqFcv#=4#7JbywS!OOuH^W~|v9K^|PAP@KIkSZnXEg2R2-ZBQ#3_V?`#!G*CK zZ)IgyYgqq3$?LM?oij~zIJ&eKuO)(8lgK1 zwysMw)p}#sMk|gzf3pmcdhQs8x>@J8%Bq9VlFxKG)JO}WG5x}YBSk<|#|TgPTdgRH zkOHyi;byy;V(6mf7TNa|N=s|N;CM;BYoag5UnNX)Y{Q8#=C7y1hutdbuy}p89N0(E zj{6;%RG{Y~j~R%~eJ1pw!~KG~4&mvZj?;o)ZYe$ZWc4m4vf`>u3Ptc9wiZO_XVhH8E2U4xz@z`v z#^S%!B(ODYpSW&3EL49f(y2kg3V7KhTALhZ;{m$bphWx@4zx<(A?KDYZrj^5Z8=xB ze!G9wYRx{HfA%a^GvZEk2xv-orB-y{4F!&gVz*iAx{P!fS9W}R$oUwwS!R1BE?k2$ zKIgd4(-Hm%=ojeYjsViJbrn=w9ejtU248YTzsYBCsfL&1Y2M#M-LsGL-IDEM zvlNXD4aM+BuXh_((7OemCqzl6>^lJ=5J@$=c}?G3(ftfaozp;>^Nmx%G7~FWHnh-X z$NR0EKz03nBonqb&uxg_K;A5&-ug3`E!Ly2)${}4rLuAyj6qjS%!r134b2pC#rKSC z75EO*f3~TCBQ*YrvN*ZcFv`f+Au_xrryEaqy8y{*b8Bd~VD6Tieb9pNf(}Z{$=*&- zla6v=-fZbe^D~rIG8=JSjQG}r-NM?oo=3c|is;dO=oJTpC}YlJ36)pu0NVov39S|& ze2giKVf7P_x%G$Svi0~gotSV6bTVMyr7kqSawF-(IxkLtQ?||Sb~fhJ+dygZ#ozaJ z2D$FK7#}=F5K+y?&x*CQBsIcFVO<*JGjD?t&aY?S?vQ(EBlfjqlQj8;1viSs$P-X} zK4dQ3x3k5~^>O+N9Mm71{s=~cA~qnnwkBQ;id<@U7&9$>$u<4p><+MZAvoWkEcdF^ zUmiD`i{oGf8!P8{hi84-fbfKhoxy&?I?{}hD(cSTT$@L@O|qOg?lS#AG(*on4p6)K zxLSCLbSN}%mhXjR`7!|pHtMr7Ul7HNN{yGYRTucGAV59mRFTjz_H>zO@XubP{|$$o zdUz0gk0@_RiTXVL4ZPjUV%8fl9BoRL8-p-Pt;AjBU+5160bMyE#=$IbhDH**6CT!R zaacLG=%amyqKM5x4|YkHb#nyJ=;w!HMRb&OZ6$ll7F>d5gk*A*n%dlZyYl_fmKD{0 z{*t!t7!^n3fgBhq@RLeoK&n+94Gqmpg^glyqr&8KAWB)QwIHwG^+ue|PKpM7T0m}_ z4#dpTQsxXd&X~|`TUDao7eQCYehTCG{ZKN8v^DHJO=CE^=+GRqi_pKkrRr$#0F>H# z#Avt3Qqp1+ToJ|Qxnt?YgQPyN+65Uc7e%W(c9J~_lS0A*b)?dAwHZ~N&tM3VAwA%S zU5`H(LzmMl5rvoe<3tZZfwN$A+t^|Ja%dfy3uZ07)b~5;oZ7-^QOkMbQ${6z{=}61 zR%>o4F}0Ir4t1Kk?EGr_+%@8pFb-X+6Uu_EOk|q(cl{42=TNt_WL}gM=i-gbT6(%Jen{qmVp9H4 z@q7XU#_75MPTz}g5FiQsY;*p6-TCU3sZ-!sSaE@3W&gs%J}J=Eq(kZ*jWzj7H>HK1 z_3F`6Ae6xWfwHJEb$hDr85*4^e6&8N3w zrV@czO~=P4iKX$I^TG%2M+&iM&mo5Dw~9b&BxWf1s`Hv@1o`Bey%8mZH5$iMePgb4 zdP8#?cjo1Rcq)^*s)+e0pJo z{Y_=0g=JQrM5Zy5>f^St?6^{u|CBDa7vU02+kgaAnfL_j6u?u}Pvql?NsPFr?n}Rd z)2~Qoo3y)pr8t(#G{XKY5nL00W={w|RV+@lCr?3S?+nayKyoOnBH@)k>oTYa_n(1m z)Q@Qj0t1bSLI#57IGF35P${x(T#ekzfdo_n+Ax6j86#H79md=}7>toc z>k;%GvF2f^Q9yodQEd0)FeOMuZX=Z298S_92zMbfCGWs{l3ee8@M&;7CrMsx6tfpH zJGcc5IkCS`@isf{RdsS01a*KIf$SZVZhuu?X!_0rc@Za>7w?-bU2T?q>{AxLnmA-q z-n}TQwOUJ>o=FJKzIb+Q7TGrrInp0%ziyY%a0=xdrY;u-B>QM7FsC#->{gzFIV5>N z!-4h3f|F&m!c4F%^Ad(r72l$O^b)!SVRbSS;AOB1fK*fE&xzK=6fqcg>10}onws)$ zbn@9SXZ{7>Cp8M@Z3*t{I}%P@4ic9|Zy^DTLi~N5QtXvyYWyGuaD?K#j!EcFI#-l5 zEX^h{BQk$D-n5U&7kZ$0GVdL2aGklKra-=)BuTqK)O7rE^{Sf6{3~rgxoi|!&J7Ez zXJ0+l`X>2l-XENJh><%Wg}W64i^f-UmBOv^;fM$R{f zGXo5Dw*1dZqSU$Xa$J&Sa`HpB0q2U``So6}H~6-o;(0*~!9i|~aWQ1&KVuL885+lP zLucN#u~Mm@nZ-!lJc$fdh#MjRNfOeYo4>H3{PF1uHn~;2n4HWw?d3Eb4034+5 z1OaX@;&Vcj$qwphiE=q=F851vfU5wp0n7o_-jG%`T-vrL#UD?Pu;ol(3J?G(Cud_iTQ{ROEFt;_c2b zFGUVeQ{YXC%(gxnZ zPSWB-OAs=Em1=+Z*`h2bc^gFE@ENZSdk7xdDlXoG&IfHOrk+@3gHBfW`v>{x5|{T? z@eS_>{xIIQ@2Iu0d8-kRBQggZJK9c8YMpd6UcN83kX`6?bl=rl)QDPgB<=3%eG&(5 zeeVolfnYPm+U!94$+hd9&i{X?udI*Y9NbLWwWe59+EN7o*ImFtp#>Ue{B@so#IL%L z*e4iV>HLd6RK2H2OShQj1AEaif<{mHSS5{ntOH>>rff=q)HgIVrO4ksS$SUbmM*2` z>V?f0)q3|)ijCXp@UM)PuRT(f5}vX9rNH9cGku_BrGbd&sPHr91!rdflmG(oU_M_q z{~_*z7pYDk)#EIswR-@UK>PhqE>f@Wxb#2oZ` z2*&PNIH`P#eCq9Guv1SMNI^3T-qZTH`%|XymYs1^s6Rn2&^zsBFbi;Z?@BeZy+;Mq zse?9jNcA7QK9tFiwL%l#QH$v*e{^vWzZf<@$@+{83yEthr=I9{(c82buhd5ZjK4lg zUCJ%VN(o1i*#!d!g)wJSwaxwjUqp27v$}IrwUU3|OhtmZa$zHoE7S&CDU+4c*kk+4 zz_wL3pq9$xa^~R%9l+40*HcokA588yHlqo2j z%k@Zy2f{%gcWji^G031)#cxu{|N0%y-y10in;azp;GUy(-8U*lS#g=JS00U()no_? z0@2I=D31JXO=WR@0A6>_;v@3joi7ZVq2HSVPTl1=GF}?+%DEBjQSAuzJ2&b2UUG37 za91qVl=EusiBr5Za7tL1DJ+znvT+;Qx3i_7ZMtuqhz?=qqny{%=aglCrIn;sfh9a$Ox6@>iht_XGsyD=br{&}s{c!Sy|@gl1Ow z2{`eqD0u%o6uvpCK%le&-01aBd49`Q%(x$Cr_^YNy{l{oJl9_P|} z5*9TbpDqDlaRT!NOfQ3Tw!tSbjNQ$|>JO~Us*MjzGDG&IGq z5D+S|#u-1aS^M5RkSUs+Z53KaIfVG<{+^8a{^LkV<4C zjlIC7#ri%+I_ytA04>k50-*laIDYm-z-^Dr5Pkt0Z(>}qe{T5hs}f`Qshxb%Tk8s|HXnX$EIul9Jxx@9W#Hry%bWaJ)d>o)R&67TYR0Rn=hyso zE)q2A+s@mAvOHjU)W1NPuq!Ihyta$&djB>VNmjGP9j6BF3r@xaqd)R$$-W1dbMPe_ zpI5hH@GY_r#*R;LLT&vodl{GPuMCq_s=))ixGk)pmMxoXjGk zMyi0FZI1yjCiGj_!8=owt+=)Q@V9tc?5&ByAz|=6FrHop~&(1Mp+fuUjPX ziT)G+2yBK!ipn8h;lUM$i^q`cQ6pY;X0^pddd@YJ4DIainMPCUW#d1@yR6{Yi|KoH zedT^^Q1+)SFMD4&9(7WJrF#R=LecUZ$c?urf2zCIC_`OX{~Y`bZJ@!;38m(Brl+sT zCFi+a9lcUvjm6zmt^zPf$H8B;@!gBs7cMs6swBH@;5{~j&@0LQ>q2E0T`1}3Dj?5l zdehYKuu0;w{&cv+4I1Hx`^=#h2{I`G#HEWygtd-*`lwo`2Y5~vtk;jZjRWpNfq!~r z;RyEWy8lfl7fxx8^(eD!bAzeplWr%N6Riuo9mp&I3;*-Bg@r9qf5(pU{hY1>IYko( zi_=+}TP_0DW0bYU&OMzs+wnb+B6f zyCfy|!*QUuUaqk8v`Dp=8K~njh^yZ;1R5W-VZR@tbW6_zr^?dbwJ3>knTMsEG1qNw z0y#C|?z-lBv{$8UE5$jb7<1=h7JUpLx+(!VM-4)nG;B$!q>F;ZrSf1l3#-Bt3%MrB zn5C!{l}@K)rNFC$r~7Mcf9=`>&$6=x`myW?rd*OnKn%}rx}e(28Z}*>EGAO2{DOBm z0T7~^88@c4q;<<=WR3y8kNcWEqXiidG7EqEFufuz2qsiTj1uy#SO&qvA2yWm7O8AtavHlRUlW^4===DZW zLQ3A>n-CyegyE=*pKmL-zc(D82%#3r`q_*UuHRaXem?oB=017^pRup#yDFZk^GF2T z82FJ^EzXM3m~>|Civqsgr`ri>3cn#n`eXjJ1#NaO_Er8f8D|wI`z8H7&K!{51i83= z1j?;hw#8p310CikPYEeibi9F#Ekg8LLKb_vQO`x^Fm6Xd(o%dk-ZxGkO>DAwQPy$P z@>sx)4dmyj2L5aZxY8?MV+E#D_C?*i-tvE1771BqQiKISUdNPf$pZbyAG5;ViX^HI ztERm^H+*99jDkvN6_S!5-$-2Ex2JgTUomjx7pA;rdxr#dS)KLTIzAtb9HH)%71C0Xd6iEiPKtR*`AW#^I zOETpHE?|~*O#?JwOI}6d9BjJMA(U@wQT03ysh09bKk%;o8lDMAW$rm?efRV42`!R?9|0v!N}&tIUmw+8yv<%*YDl139_CMz4yGB~xvoAkWnYr9&YH7O z6X9G)6d7qDkhGE4$`j70roct+utC2Y`5Gj%mk4WRARzm!B5Qf94FI!vfzj(57ry*0 zleEV}$BIoTFoweJj`sI^mpx~-Qcdu!`cw{BhXg;Aa~t8=ZHqkbLJNA3WUoqY9n`Ia zLa@Lf1LIGE44O;Sl0z1EdrP*eYHT@Yd8nY_hpG(E+CZRh_aA+u5`xmQH}ShC@~31Z z$KCl^$BlYL+8*jmRb0~oHDNCk^BoaeYk3_%yUXr2c|(gkZPhEzrB9 zDVUqj?Yl_x>G!+&_$DKF%s&7bu4315y7l2_-a1HWWvM+$52)5gFf@RoN~IQj?M|U2 z@O%KF`@y#ecQ}xMw58sxcpRHm?S}`<&)NdA?}>(#XD$ZE&kH4XT&&`SApxMExJCRr5t1cU^_++2Cxp18#xeg(1WcIp zapwIkzPwT|WyWz9XY*b{=PQm#LDli0Y{Myb-P+^bn_sDc)8#3%-3>_It>VpG zBwh}WodjNjrYXW)t4u~j<3+bCL#zp)5ZwYbgLZ>?z+@Dy>*)v<-UJI?y~yT{5~2-iTI$MfqW&@W<@>A3Z0-OdXF^ktCEVMR9=%vmCl%tBTQF2P z7Q=Fkn-C%Jr!l}g?}f4$<{B(E7e_c#ac+5lO|zVRr@q3eyO!q`^$FnK@_LY4%P*Ba zTVpze!*scTlRV>x^>2~qASN8Gq;4f|)jA^vs=y1XH?=My82@Zo;ZAB{icFCFoJbqv z{gg^TJdg}0a|?>8Vqheg9Mk8_@u|~xd%i=KE5sJkSk>ZbLxcLRkAU?3H7K>%DRWYOf9VUq zXwp$fPvzrkgOE=ZzeC8>X^<~V87mnROEo5gCcRp_jSLlvH)mzeR%urKWIdmcviEb`*lf)GKG$dl=V z_0{T2LS@n?Sj=lsM2q7XAXbVgE1uO5DX5IP0*FofClKSrN`I}qcC~7ELq0))(id%p z(e5Ndy)eA7L_x)zfcbE#hFQ+0qI~h)`{SQ{liLImrt^GNCThC%`XVtBY}CaAsD?yg zLlOxudySv+0pIEX&}NDPh;5Asd!T-M^hRvN344BJv%@1B(YI%En{NKRld`beAogR6 zej@v*d$bO3CreNyb{V<0Ogbj(q0dv-3g8N8)(0MZSM}d-WBHnQE<^afXpG0~)Oe@5F2lwydC1A8$$k z-~&5QS~+`otoSCX!dvFKQ6_fs{7G<$DpoLXKZ zKl}Tj^XI2i7O(mQxCELlli%W5YJeU_-R5>AQKlG(@CGUD?QN}qo~WvOSgFfrnHB4U zkhbZ1JR6TXRy?`1VUqoQKd0VY6_x>kgsJl&z?^Df`BsVk`Tf=5EBQHL>$)$!`W-^yL z6n{OSfg!G8;Kqf5?etmA1-(A$25NXMtRiuYUhssUb z^Q8?(+LT^6`{PkaQz-j<-#6D6N&nHok_W``6wsT`ihCyi5yG0$3OtIaiV|!o-!U`t(iG&EJkxSdourp*nXYwg$?8+}30PW2 zjt2!5XuXGOD0mpvCZw?#h~mq!Gccr7cb%eoK0L+)O|)A4$x0KjhFR0gvG;!;U>V5? zMDr+xC?`M`(8+Tu`kMs+p%ey7(6dPC(H)Fij&Q5ChI5%>BKQ%*JF)I#O(D)sYULp2 zv!{!oHjO@HJZ{AUd3~x{18p~jOW*=Aj{~L7!N<};96!P8QU4-&nG;XKJTtcyBAAk@ zbQ7wyi%Untm#2me1a(**ZK{b@0Le#88PA36`FX48>yE^4MSuT?b0%j)7`$HITu=mp zCY6`vW)(Ms2sZwy1p(K~W}#jh&({2w(~jsxO1{cvEijF6P=(U&wvZ&zCOV0YBD_FE zg9b39-Qq8#MnVs}A$K2YKR7!v<-|iTma0<~lK5m*M@SJLEnq%WH&lbHJDY_U4z5Ni zk&273>=V^OsWDYdBn{*!1As%=Ara8j$Z==gAW7BoTTUW{ zD)HFe5d6FKGMOR_a3Ml>c4w&ayIMkW&uZa5|8FwEmoL-^=ONre&NJtL1F!J(J@dYw zVL3G}Jsd}q)Apfdz=tU6cwLkWF9#b66&LpSNz8ylGbEvbz>+bc7Onj8ofA|1`1wT! z_YgSfkag2v4vK4&;M#Ke1H%5ZF1Og>azMw|6n%LLe)(V1^<>Du9xk!3IR$p#^<1UT zzBSaF+IjqcS$3L+>2V)MUo}Hg&#z7>g(l9ba`DD0{6b5X_6I18_Z1yaD4w( znuGjLdkPSYrng_FcFn3}=+SRbb|L>i=HP$5=nww_1U#w@qGaj|#>5d-zn5Vx*AYG) z)?EECKxlfg(x=7tLRR`;-E9e{g~g`{r3;V`?|-8!IrFvL_e-fJj00h1O#B-t=o2y+ z)(K*n2uM!2^u9BzZk#k&YhGFPE;8=kvH8(|NALk>z5l(!DiDYoj@b^kHpzN_llb3- z`*#^FtdB_AdWWg)@GZPnZ085vrQN$4O&?ij@;6zJ+8%p2-skW;ARzKjYpuZ!bp92V zUGJbM6vw(7WVDR^Spb+$lGUb%^{-G@V5AJTDad_BkoBe8U1K*aE*tJ1n`Y$B^=WpQH z*^5J!#*Gd|1D9y{&DB=@fIv;$md-^5h>uz5wzBGyoZ)^sGd68B(fqLfJf4F7Eig9D z#8)aVUag-|+U|7%(ypmYPC?)!_hxZYd{pCgArwPaCnNo*TWL!;{v;C%O0Qp_=0 zzuv5K2iR_X2^U1)&B|O)K366P{uI_^|A9uFM96yF9>Fv)C7jtkG$8?3dkmoT06U!i zqoE7I&`ZDLnV6Ef>2dLQue8Dda%@74;M)4Rw2n@ljOzlBj~aG#v)k}=S#+|r64Ko9 z3Z9u@V=zCoJfHCBT4Bi~kg9b*WB*H8P3>nxp`J)aR`mOdgYR1eKrZ5*Bkbv-C%d}R z)G-hlZ0p&~rs5*?PHAKd6w? zwuIhI<*%eLe|`$#E`v-@L_FiokhUwg5qSC~c7A1+#cj7o-D&zLmy62{`K0av=8wg0TY_h!$+DYGz zulI(fxP28p#_8Xl_B&SkP*wSPbv)eiV040u$q(TKL1@MM_->`754SjMC=|e!a>$ky%`H5#?$-UBRaNtl~WGSQ| zDjk7EtsVXq!kt-;o^tFtc&6c&QFAw5wU=?z<`;sT7^UZaXFMUH)b*~B5?c^aN)Yy< z`ELK`pa9OzWo>^ZnJ5TIPa|{aE4O<-Kl%EC#=5WmatEmWzFWix^o1xZD(J}70S*d4 zuED7HL;80t6GpQ8H&X048FLo`2yjT)3ZBJeSwm9wJ6{zdwogoF8~~BlVP{9|oQDj% z14D48pDetLT!zbjn$skmeS|yBvbQrJ^80D@l}o7;&|KGYFN4lDs4LNX;ZW2D5 zCwwwrsi2x!6!)8fykn59c~5t3`AMt&BiFVR{_QKNlascK`xMQXY!Hb7Ior63Ui!l1 zF!lKwfD%kX3RkuP3Boz*x9qRx0XfCeC{;<3mK?2R;TG}hRu+MoLd_Wkr(!R{LK!*0aIqw-Vk)fAno!Fed`1ctbrkMM?km#nXp)$JfPM z2!KwPTC`BjY03P!mK$SJtsEE!~Da4^S9V08}hn&`a>bi_%R#paGq6GTF9EvH8 zidL`m2f1rbf%=vI6NbLWEQ9#fFWLNF_gsF6J%Z99Ws;>m63hz7^J3Zg3TA#M2JSTeMZMG~#<{djO z{;QH{d7W*04TSfyEO>EHyytvV`Dr%$G#SuTjVE2y`$n2!*u)iNX#!D3X`O5ByN^8X zsI{zF9Xm2BF4$H_`51-4>q?(K--U3JKCmf>y?Zb6UhwSBeo*PRVE~}*LG_JB|FHFu zdI$N@V(vy_=p@rt%kkT$6AIEnZZufVedS~G0}*;TqcZv1<ct`r7i7VmR z8DdFsPL0 zPvbOJBw2wBseX4#hS%sYbfA>2p#zD=a0#>|DNcn_2u+z7pmwF-#t??W*?5jgN(<&C+MU)#mIDV(6l^Izx2K(aVfql=+0{>N=>S>1 z3R;S+Y1o8{!DIDG+*djQctyH=8UX^3LvLL;Hp{X)X`x|DXDj5q6S@1MT(VQCkl28b zy^#}cTld{fbdcJdVMkU&JetMdcV~FTt>JD+pd9(HT=h-bXRvr{Ag1?$JkA7U7*7%O zM`#?4?;`sJEQ@6k?manf{IE@uU;~DwT>pMW|6z)X(Vjh4(mo{O#=H-RO#q)hKj)cEmKzgS`-7T7KR@O{ zG8{HiSm~t+B)FX%|56@~d>-e8q8vZsu6(iOi~ntZ+})-lsdDU6L#0Y?8J74V|;;cLHXCA{$4?bUB3cfc3C12ub)PUeT!Mx+u-mm3XzeZ$55;xInd2I8(j<+iRz5}A2`HDu3X@8dYwG6~4Tn>wt2x>ZC3q!n~u_i2q}b~L!VpB!fB`SA;Oa_nUCI&XvO zy6<<=pF%32GTKC!8V%*NO;&fIBP*;44tY7$gS*389R}D~NTHI?5nl^`4@7_+b?EM( zvg3>tD#_5O@;60$8zCk)jysB;*xkTB=p9(mj1#_|39&h8GZ&rw(siT87jbbm}%z4KR@X)+ZHW`_9 zUk^Jo?&n#&!1LPN34c66yEFV;y6u1E7IZ-fGRtm4<9AIUzdPfJHLuDR^nI{>31%C# z8VJY5){31CCe?^tK@=qJ(2aZIy^EaLUHd-3l-Q;)u8A1=mdUdvfN*Pux&>Uh;z94B zY%(X0HxO@7+?n1=tG55^WV%MLRQ**b0>TU6lK%S}J}!L>OT%qn>`SHT*{4>yNb){j zhjm#2@GlVOl8^5jlhF^S&Hq}%LCKGMuA4bihG`<$S5CpAMi*XX#fUdR=|_`2{#e#x zMcLE%lfa~5*G@sM%*@m9CgPQ3CTgB4DOjFtQ8%-(j0^i+Oa%J4`H6~L-|&jrq`Be- zkF`V?^%*PkUe#3tL;ptTn9siLqL(ClcE1!h3ZK)Jc4dS=ZTals`rL4whqnoGM5-tS z8|nU9ydO@;En9gky*~4r>t~k~nYI z+9WErYsIaC;XN;Re68%elR?EPL0cUaKO)LGcM~LUI8#pf@d_IkET})gHIS}~^xV+L zhrjf&8#EDU!2Ywa3PQ-$OHT4bR$g5LF2utWh{!w@kQjGUCR@XNh52e~KouyU5cyfj zyEJ!eaNyhbhJ#Kgoby%TP3_;`J6+K}kv+HXpbHT$@zkR<;Djccu zdN$EBxl6S3JWlA-*ifA(w_zCM8&R;MnBJ0k>Gtt%nipHK3CJNgkaiG{Y*Wynk>XMik|6{%bjm5(I|)$trC9blje6q zm<6qMK@V;iTLJo}kE3!kB-Al6mwB6sd{ag3`3%mo7qg+a((LAs7b;>}n%e70EM<5O z5A@XI-}5sP-BcXG`oUdycczM2MXAq^Rgu7C*%1FoOeaA9)w>tXfZUM2qpEg z?yJGCuU1eV=nAC^IyI85sE{~V3zoZ7SmUUMdr>nkXG4A7&Tx8}xQ(1c9$?AIMTbZSixrU{RWJeg5`<@-1< zc9r5aS%mv%u`tp4f9|sRKFYbip);#LQfq5T)@N|u&i5b2vGs_Sxy(jm_c`Ands0qQ zO@6XHU|X)*KD-Q~-PXl}NuvJF{X$1(X#YH5GH(tkeN&M)oiEa*RXHxj^*w5u$_w)-zGu3Zc>mfksB zc{u7s39TbD4}DdWb<)s{Hi8aGvKY(*iYDEx?iwMG1$KAZr>R-Q0*$N^!&8lu z8NJdnj<`jRrV|0xv~EU34|C5`IZ09}M#9kgfprQIj0UrTLw1=S3tD){Rp#j{Cjz2B zH+BxejVs*FXKz7-q_p1}==u$(a}AguF_v)E3QtGic}*5F-ZvVJhK6%b0pouXepy;g z7>XDTFiE<`oJJ_gK3URZq#Q`t z_lNjrmzFdCemEM>sxQeN6^R{_wUY5L^qhEfhB@r{uJ-l7N|*!NJ=Rgc;pTNPkM~?y zLi+x)n*OcF2Vw;FJj&7n*vD^%SzVkB631(s|lO=^w?Nq+y z^gH6WL{!JOdm+t8Wv|;h;=E8Tdh8#sK`0J_7FhKY%A?3~1<;4OHX>1q9;G{`x>!TvBd729LnTn;k% z8JSM#U(?5eQ~9cb<^mzxBNwZX2=TkA`Gdr8lQAmp5lPl6V+b_OcPb5U$K;6ZTskAt z-xKlm4X|P5uJ_BgP>MIRl+#$zd~_1yIoqNPPNSow>5lgC8!Ux(s-Bn98ZIX1c}{`T z%m^;7-~OVL`Ml${2U$^< z(`!obiQs$2OU=w@P^LSP&gpFv`_iA2ljw2WXys?yy(%IyIG3U~I;+R>7 zpff(dwlk?D2BkFq&G1j{d)t>!gTw>_6%P+Xk@OBF0R9y~=zRN(dRRll43lkIT5f@^GF( zcbfyiaJM|nrzNYAbP!h2w`sq`&fE35%BuU&(q`VvL=AsYv+CVoDTxAtz9+`6;Dvi3 zN|%XAV?0sHuTyL=VL6u`E~x>vWZR z@51A_7CiJN6pN*ldIh?Deyf1tgJz$s@HNr2&;&dcPhilcM(Ibr{M0vX9M|!4_5$iB z_UAMX-(m4?UvBES~3$ONlzqGNio>SjbCYMzUwPx19%T5^2$;@|=3* zv<6uvRUr*2(Ic)jI*I)YT;Gz@7(~gY5$r^SkiPhhP@_TEdSI`PX==TnM`19GYvl_xZ}dGzF64ET)`Qr zVJO?+vyq|szx5PBjGx=y6D;mJV(XH}x2xd>?EIep(G>f|&RU+i6-Z+JQ+sBLt`6=G z+UtP~lxGZ-sz51qi|M#_9N0IEJfvQOqott)7~nyfKxG*h!q&-sY|!FrP-}P0=f?Xh zw zT`0NK+j8WoFjFv-_^_VWX|GULeAB3ESyu6g4b?SLzGU$KK)JR&U#VGYL z3aTbftJfW)@@o>-vG)vfDh;Tmp{mLpb(ga4P{ySUP^4wx|9Q+4k=A>o47b+aHwX&m*tJmdGB}wcCxfU1z<;F;C=NGBp?RzIpr&x7zxO7R3I*etL9KLTuue(duFz zQniCL21y~4``945Chun>U`H&Tq}b~6kjeMyC(J{AP9jHoq<$}sPMKHQ^r7;5s8YIF zCijMF>l^bIf^oQK1?T2(_&pkGPHqLvp>CBJA6Cf4yDbiMCvYBTgE3a4bB`(PVd1V2pGbK(%# zY6^%);g)=?bV-?@O&T)CmW5cv@Lvcy?1u>!NOEEXik5iq(O9l!mXCPuw z72bBfjFmxB!b)*LQs6rPVUmV)?%;-Q>^r9Zc9+KdFFyeMB>e5qLg!9o=^m6YAaFX> z=WtJhVjD~1kcW(7U9ezWxpxfULrmA5N2-*PPm_aaljk9g(**c43v^)waw`|IT4o`| zrvrMS7ub?|_=F+fyG3VFpci_D+%xEmU#3e(T6`97(&vS26J6@!$zg(o)^Yw}Fh z6d3BZtPjCGhJ9-nZk+TC{FHcEzDII^=ZX(P)yUfBoFvM>FHP2&=Kt{q!2HojDqxvW#VaPoqrO?PBz8&dx|y%W^-*P`x@ zFnldnV7JxN82HSctw$r1NmyGsi~dig_;DQ*KzY>ol zj_y+49t&P%VN+CX5@6ha5{*OJOX0eUewxS-%xIYNVgBS=nA|R|x^nqKI^xMxI`lBf4 zijnK9?gz7*rVwag_eO*M&J+gS=V!r0svz`}Sf*-W+n0#I%-j z!@EV2gupvFt^876f+t{w%NY#ZTcu7hNF9z57Am#*=oj^T)~)%Tm|QjZ4^-TPqXz8> z{3epdgy$FC!^FLci-*ILW-G2$cr>-QhBry~xS!jeBEn~mQ$3aU7VE@Gy8;R`eUs|_ zkGXxi!D`WRJO96rp^f2PBV$!5Ez5ijT`}SzLFF=h8{%pO5oCeR3rSh%fXFv~gmp!; zecb7~O`0FboA9wZJE(bUb6HHq*xX&ke=B{Yoe zCk~sggfbi18I;TR4U0Uykk5m&~etDYv2Io7U{0^9_@NWdDS~UckbO z3aM#l0%G?nt48E#s#g11n(Kgo*Po(ky92prs@l}F?m69a+OQH&G~lg#aYv$te40Zb zoP1+;-?B5s)Z`0Hm`q{1E+t{Yg%X3zTpAdVQVvq+)V>GAoX?QNm3;LKTum~?lWM>% zV#ctnt5&*zMKz^#!9~jM|N&E^(nBSZ}0pMS*bZhRI&pXyfmpc1W$6n#d*!@Uwg1S$pMG?nl zo!f)GK%J$DtP>cjjHKlzpNYGm?rA#V8})5SY5>9su12OhaG$G(Fd)GL_kTsmS#rF@ zw1c+l$aVU0yG2+4tIR69V~CE@rpx~5zoJI)yg!a>70EG>8-cQR>pG{=&_ImTDAwFvMPqEnIDkRG*{i=V{#wHnNn@;MQsbw12jJ>6c7w zo0*zHwWLFr9S0l&yBVDPgN)*(1M4d0e(c!V*1X$(SCLK}L9fRjg~Orf++c;Pivjhy zR3t5mID6B~}S5bYKXbRM3C|cdbC1UHxI&wc znBGXc_2LNUBGqby7x!U`g#6E=ESwCm1CGK10DpCft5fShV8t=NCM%nEmBI4cb8`D( zCxUeo^>XtuGS4d9zPOTRDd6!jul@dG;{>9NvZ0WVIO#V(9#5?WiYE>YJjeweKnJQm zNK@Eve>ok%P^kzvqHwVVkR2h7s~I2WUC0>NPAc= zi4m6Lm|i<*!SGW#yK&rm{Xb{?J27&E!YHy2mQzg=GbrdxVx{77Cd8acDygXa^CW{b&HiLA<7+KAvta9;T{JS^GP2v>pL4Bo4dTyW4@A z2PviS#B2RNyHH?G~}=y<~FU#|vHjJH^g zt9Hk7WhF1>%C5^4Ctp&4H>yAN7Px#SR|3nX8xJd;%dJG^VmAvQGH(nN zbgXTl?k#9~w6Y`E1lFH?uNQ8We6`O;b?o&z9lNGh=XUUYN~0(@V&M_6*!$Q}Hf;B6 znG|WCQi8{M$J&Xe^Gl+tge}c)JwF#ZALfR-+%i?4$B<=DBps!;Z3}m~Lz~KUsBK|i z_o+gVP)!vKYVOKPtf!RBr^<~C7mz0S6*uRYiY4t-MW#=P7Hed)#s(uEt5(j+&e!Va z3>t^Z6~Y>XF0RA~@XLiJt6bsKsOz(SvakM6$@hYMmBs(X8^Krz+LnE_aMhA;v)%Px zQ`x4bm(Of%dOH)h_qHUs?&uT=4uV||mrAnLSE`)ekv3cs-N7&g_S-!#M`v4frlfW% z7h}6T)rEbigJgp^2ASeLBULg_9rNx_B0R6w3v8fNFxm%mX_3OgV$NR?W?B<8ydGmu zN78w{I!}ox9~iyk_*IBeMS?z2M>1}!D6@}A(ONan{UJ<-#X`zc#M!2!Pt+UkOi~I= zE~;$?YoK~`Y;VshJqsOHPD0NT42b%dSmnO;8yL!@P#;%#IZ?HDaz_ZMGK?}~_l92< z{+N0i+@SVo%@_JqYnegi!#*&E&0D*nW&Q7`$DHDf4psI@2ruTwWGX5iHnWX*so*jA z(MaW3-f8?g7a*6OMEv6k>;*l{+WNsU7_j|dQUb`;(h6&X%Xutk+r0q~kLR)Hn0p`4 zu?cjy!kye{lr?kGdRKaf8BX)NEK0TGb0ce{Y_UR`=u>0j<`fz#_S;MD;Au?Nd$8)aWAF zROm&LS{ORHPsjwFZI|Z*;}G;7W~WATtvBMRyk@4X^KFo0QL3_sErw?gm+L1tdqA7W zTzo4Y7jg14q+@kanUV4&n!eAUwjm9@C!{EfdT?VCFJBlV@gMN=AKi-R(wizn| zb^5uUzC-+4d}cb_xUx*hBK277lyqINm?S6tkC^=C8{@*cdZpqJe1<|U(aq$R+z*`| zTvhH!wmK9&o{q~Dr!M;PFQcM3h=fo9OhdVw5y?fNTd&E9%2DW0^Q`> zyr<_=R1r}au%sc}z3aRuby69Glf$*PpFUvI;W%C+$!IJ7EXGtOTO$@ogwxod!*u59~Goz&fFH3RnXwD#6EL(!rr zgVC&}<7`2*5L3r^YRN!8^|30*&m?t9V8tkv^JXSr^H7J9-A&&6dVbdN6_ownX3P%%~n4qp@Rr|C>uY;Ms;(8cI$`cEXD8U{k9$)N<)Ur2T{T_3*X|8X0YmoeFea;fbUu`TFo2t1YU)8%jaqH=}UbTOzqs0e%b@jBf8Cj z=KFC~dM_e)rpNk^NQJu*85b$q{`teLB?Y)Yd#Ss?fXd9}odlPss9`&0o+N#l1r%3) zCYB5?^L}k3*w&gr#cL1gFGRC1#+k?5)fu&?R^>U$!01aGTYBB4ciNNCWinobRT#G# zHk8fhuwQzXR{B0ds43%5LmnrOR;z@pGEqCZNjg zDA|wB)cC%anLOK?^} zij*|c4T6YtgRt2k-7O_-kZus^?(W#s2KJkrbMJZQT+h4jAGp8x0Y3AyTx-s;<{aZ2 zV-+&JnlT^6L}90AXiuixWn3T<)NecxI+VOngmLwyh{l-U3&5i3&ZpGUL4*m(*8}%ov>Yrp3(1-_lAmS;n0SBWmkNd2v^`Z^lWa zuse?&B(OMp(@fVfDsh{y@eMGZu2WR2Y;m6u4eXM%2HHgfiU1AKjbk(E_o?7oyeTy} z2Ng;>8)ofvTwO053!-ZqkfIMV>M%dkqu@LiIUfNn!L(fU)zNQP4w7!57^l7r#c6c!{ z>dxBmHor{FlMtqxy2aKRj|hA#c*2|=jh@sQ3_Lf)LzPv_Yu7l)|40!FrVLC>mm=0B z-*0cEAN(Den34H1_+_+Ib<_4R8->)QwWp6}^>KHFCKoS%qS+&^UB7+r!BotLeJa;M zd$jRfqlCQSVNTlltNv>np_T)ZA71RGJ`e0jsIe}!oHl7?ovW;d-!b`{@SEm`>z-KN{0nuMK-%FRKmO?q+d;o^F*c!H7G-K z9kqhA`K8l7&SogDu6Im55tR7;a+93GRj=7ClDUFdUN*JpeI%jw zTq3?3xB9uvq2)&Pep_>4Mn1G^^Fv}^$MF;KuTM(8%y}I~V=YUPEWFTuzcbRx0ry5q*>*8lsF4Etek$JrN$I+SLMF z0P>D?-SF;PH52RB94I`f4IuH{1}sW z4h5rWR2$9yu_PsTTqk3o@ft-Hi)&ch(u?Fe@5damq-<86Tq3GpqN7|Rl6ptS3{T%C z33%#tMG5TD;ssn}M;S&$%2;jgI+#GO4J=V{{Y6Cpu%SY%dxE>CG_SARa+2`c@pqiy zVF0hhJ<_Xj{v|*s1{lxI28j~gv4z|0>2g~6PFzRE3D5b)`i)tKwt1NQ)eZ6UrX!74 zm1rX%DG?3S>iz14Q!YhE$BPI$H$xZ8Zwt5kGo_S^t(P8U3h|NvNIi+)odwcK^E5~X z5{1^OJ7?3`Af%6Ik_~^Z)6w)UaCz6Cg3jnus}Xs)M8WG%y^NK7Rw{|N2`lD5;Cb@bviqnyi3Z`RlJUhF2Tt zbZW1VlK<^c`uoN5XaOo>s`g>`FG}Uk=xuN*7w=JN5bDO``r`(uz3z*ggAeDn!n$a6ZBC|Y-sO4UdQ`^)4{@Mdm#5Y zxe#MCtH>*hbD=t0bYB&tBT(cyormad5cat#(jGv<*_`Jp!zsmVO8st4Z_K70Zs4F=OnBq4I|-Hu6yu#Yj9zDURf1WUO=&*Bc`de+IXTJ;#~aFi z4d;kLpgoHBUCME>PgMmsOvrQB=6tI^keeJ@vf9?Xeng5*W8yu+DP>fs#A^(o4^Tub z76tP~>)A3-5J5hTPt>fdou0qLp%7x!Wt%_Ug^Nt!@VRJzAE@pN>bWVaQRXzS_f9(Q z`Bc70w6(-*=A*;VEuouCN1$y*w z|B%Oi=h!l|y6f5mOnweC2_F}a^ zWg`}z(;RePwlMUHVFTU$8A=<>TOUNfi1*SnRwS_<^79;}GOb2@Od~kFEam_5hOr6H z_;ez`(!SFW#4W zqxfa};`-4?nRBzXpW3X~{A|rnSrhptKPB2v=<0PDIYx3B7Ifj1a(M{Zrgo*=s(<`O zH1KD-Lc1^-Lp4ut%ZAx~Z>3wKEb@th^3$)gm@bSqE*uu!Y-=s?0LYHXVBxPS#v55iLnw&lSLC1W)n}G4fVQ3#>l~n@-x7x1J;ZUdN zPWv*BJDqXM!~3`CK2ZeUUsdKIz_|D02CdtK_2HU30Mk2SY4D11wLh}|EjDJf-{)44 zE3a}v5tPh6{O%g3*`Rn&PoNP_KG`zHpfZ=$y%D`ZX|iL5mhxZaXTdLVdPf*>%N zat3nsMEuZXTquu zMVhx7A$j=FzoU(c1J>4o9wH5EZpFW2mb$$dz4tYpj}J%lc%xbRe5Hh1Z7~H(tk$Jj zXwCw|U@Pf3-_nnzk$dC`n3?o#n)>JxIIUZMy7;u}VgmCkqqVXhH*tS6OeTEl8tL&R zw(x=oiCPLrtgl5!F*Ckin|y1!97ALHTI!L_LK}PMs|$~joCyj2*h>s?j9&kNy`oA(`m;p8`u>u43DXNrG@pLK_!}CiUp?_ zbAEQ~pB>jT3&y@CoQUnm3}THb6T_CYvHbiv%4|lLQteR}Z)`s~6{qTI{S*?OQ0GFL zYrMMLlm~ilL^fA5IZ0Fz{`|}Xa}CkTA%0dE?+J9tgGQAs0IL{|4Xyu++V_ub^+nVD z5yyrK>+z?B7rVW&OhlcA4@Ih;YU?oZ>MR^u zK``OVtom<<$CYdMWnR!)XN^GG`2}@r)HvI4Yn+GW0smUeKjy&UKpAXnDAQM|sAF7= zYw`-Dhg~LTu|=Ml;`R3PygY$$N$|yL$|`s@_ubEyl=LFM$!joE_?{=-SjX--AU?0O zms%cqRxDlghOVTV=~aJ*>a0M&>%$Z770TjB-QN(KOb%~AB=^$X>8K9Tu_5FO7YU6k zT@;&X{?YK7pOmula?{LkAfMn!M~GpZeq~ZaIB{`)2CP8LPU+a4x*H92vqxi3ZT`CZ z|DG>=dVY-$TX&?g7j1~nQlOMSOA8PD{*iZ6pp`Y(CaNu5Lz(dlmxylI>-GX&7duP! zv&I<1O9gIY9+FGqq(C!&f=DT=LxoR{-(^q6;-l=PWx=BM^SqGn^0Y|p^p}y8?Xebr zJOP92pr&k(X{Tt5(3P&W8vkbW*ckrVg*kz2AnlaG$U<3QxhqUdhguCrP&geq!DSlh z&3QuxK_a_35uX^;LH7RLIkDstbLwJkq}s)pa|ay3H1%=EznS%3BlynF-yiEe`h!Fst~`%fKW?4hWvWZ1l#>*&K2iNG=Rq*R&o^4IKPZX^fiyv9l^ zdzsrs2i(~VCr9MKR7V_tmOh>%Kc~3;N$MKCy2KyvR=z%=jyR=rA``o^|Fb$xz8Mrc zFB-+fUi9OR&kp46!3e>BJOTK12e|gJPo{NIDiUPt1WJa(zG`TUypRWn`~0LK-A3>8 z7%R5;%#9Qm&wwBdaD}|`vHbPhx@DM#8=}aiZ?EgkW?jDb2$BgH?+3`wV*C-lrV%k@y}4?t(9+J2S@AJ1JQ@=@xRO3r%Ys*OE8^+v zUncU?+iNKK-_qFVBZX2?nX&Y;Z=755$Bu}rL{;q+U^?_0ye?3I!AO%Q&K%XzP0dsy z@M_ve`hIrDD$8r+t3%y#Ois)bq*bPeXU)>kDrt-IJRLT%2q)7^z2{uZo_qmStkc4V z>>3rODlXe)nPHm?VNaaFjA~C3-Yh{6;Hh9|UhWqM4NuK~y}9R?H^;Bf0B1#@=xCt= z2Wsx_R)TMj7PX*_KqkgNWdo!TIlZJr5v_r^A{Ox)mr~2_0;RQkJU{6e)z~7(?)Z4$ zC=|2qJv|yku}t7BH-OVlCN z2H0GN+RZ80Wg6%n+v>Caa(6Gjb6f+u>u*lyiG6Ay5#dOOJjnBC^-ve;sT-vaLc~}K zYLxeXu&u4|8T8L22GT!w;AYCHxUgW%DH-*R9uE<6K72`*?yyRlLkd1FqaAoJ0SU<9 z97GO&XFPY{W><1zx0FN(wQYb7+WG9D84zkDh8JeSSCzKKmG~+i(TdpUK7x2Zr^jvO z9Gmt$IGBj$+uAm(kNF_anUO}_9E9iP1_m2>(1azW=)Eepk>s6S3W&4BRw4==vc8B&(T3RWnpd`x{gVEs(> z<6qRK|33Ic`QMvWP~=4JL5MbX{5QtuH-Ca0MWSm#SiCC^Md7&n5=c02lx8|`Wv{=V?gv;Qs3%L` z%yzYG*>GG6%78wxwRift$81YrY+(dlfaY@vVxC=4AdQi}w3wav<6UVl9lsqVyX3I19C4v>DLb4PKXwA|@yh5Z3;QOh`Yilofh2Z6 zcCi{e;aiS|6c@@+=xZ*}WaZrUd09V{dWe8Lj(jB7Rc%&#%g2Y8Uvxwl%dhd4>SDc; z+8%;KYLk66QXIJ23b-sVo5#^viNR7|7JqCA3b(X7P*f`~OcryUS577Dt8`wHr54oq z5#J7nLoeVPl=VT{bqB8~co>z>Ue5uc<$}`fr4ts4M^7K1Vg_B$YD`<#ouvb7&6Mi2 zwm^2|!KJrYywAO%xzrh9gASTHM6wqF@5_2?m1a_%n;|-Tpe>~Cj$8HX!)Mq+oYg-; zGF#I_lZRKg_sEy(eHN2RWLEb*f{O_UEqpkK!?t?i%EE>0%L$b>hdYatC3gMcE)?f$ z7s(RHoN*58->6{jG+CpLU3;>q-q8UPm;$9l#0m;W!0hIcu|$%Bw8Ta2=!${Ukp@ul zIF5K$W<5I^^syHH{^%c&CsxdfBiED=a&A>S6>QZen!>&-R~QN*qQc6;iMpOY%TsEK zrr*ruF`{c>c@D8|dlcxebGasFyhDsbxz0rHP`tqwcmt4oF9?q}N)!$+oi68lZcTWa zlVqJ##C~mmAVV_pEJ&Zu#=se^0T=6_zF^$WjW1&QP+zulyc+Zw0YSzA5i#+}Pbh+^aNV5w&bP=@tF(RH733bFZ{FE$Xoq2gUtxO~w#(|Ai z^S>2h%x5x9(m%}vR6l-C_>lX4WwCx%%h7paj*Sx&hJZ62en}9EsZCcPV<{7)r|_zTZ( z4><-PQVV6%9{G%RW*VkvXBLgdmOpTFKYiwJfg@b%s7(lm@`r8)OLuh6Z*kO?XySKy zOb?FBOZ^rlyqQ}W8QbZ@xLzbTMRguRwf0APCra|QgBsm{XJsNHe_XVcZisM$DjLehDsRz1m=;{;g*(@7s9dLSyS_4%gud9> zU2j+4qtl3LqbO&f+qa3J*-JV(06qo4F4$c-%%+oE5b5Gu@Ut5uJ=*E?HXgK~Ie$k} z**>z*TPJ?g?7(kxGJ&8;&>o(eyGOeoLKk{L76sV>8%M9zTZBKycpGcs`)h$b={ zBC2i+eJ_r;AJr3^3^X+nGZJ&zB!`J{HE;d8m^p|g+iDiSjNUZjRj=t;`qE<5wQ_a) z>dN-b=jP_SQVn$YbuaGV{F2;LR(iQyV_YUuay8+8mPrOgi_V`JuRd^Q0QQ-?#)TLf zdtyWEYlr7^psbKP$@4Fb8atFIRA8^(m}9E<>C+L6=8iWm9IF7D-aucAy+c4DWbd>` z!ye11o*lQ_-bRlYBoEV5%k2ZS6jUn%jM}l?0DKH3%##P;HLS=QHkPh}^lrz!i8z3^ zo{H6dF44$%M#LBLx$NEPa<>W{Hdgwc;gjgzSvo6ttzB;8uo>ICHO$JPfWYB&wo+x;m=UHcbN1*;Nr$8~uy@0#L~M}R4-McfRr1(99glk9i;#+4 zg(C`lHToDD$hGlyz0;747+C~K_j-+S>Cf)3qR$`GnjY`k!9Ll1s>U1&A+OO?r1q!t zTwJ*{8|sJou98lr=e*Y;1k81f{Y{nNuGo0N%Bm({|DM>7$dT}HJ0LH!n{Y#0VaN4T ztKRiyTG_tZmf|X0USV^+fljrSH|XxK>rm@;k+ymg=%qFz;<;4(MjZ780)Y?HR5E4Q8t#}Lh2bgE1sAe=NJj)!11bLN+pKX{cHLh|D?qOKy!Mq3 z>fhZcyG0bbY8C4M=EUN8>)Ke!8khDhflS%Y;}r*R@v=C)+f~T4 zTF(72#VKXb&(Tsn(m79o*B)+!966e(vgpyR+Mf)%+j50kx359Z!u$=Lsrk?GF4p*E z3re-na7AP6DiU}G|44b1l$MT^lfCeuh6PS&U9v*MH$SJ zny7|s&9EgB2xtr>37V?YdWzq+04^hmH=Cw~kFeO0Qf0Rn1EO*$tnk|0=a`*C0)Nd? zYVdz>Xb5?nPRu`1ND;Nv$^Skz?b1#BlM*lpE@<|<>ARVAm(2kR?G$2en(ld5odx4E zx~L|lu~UfQyAb!~ZY@D5^2qxY5(RVJX}m7IN)Jq4aT*a^x@#!j%ukh`X21-g`gCnE zp@|>Ph@E#dFnHt~i6u{0!Zm&#n>LqxLu0#!8l|U-9_pUS8j%IVtDE6eV-?}Y-SOI) z!7h+EHXtHJap@^>%tne|A_8nlL7KY@qgeXNsi=X@xTn5>_h|ztTx%Q@_lL<{kR6c< ziUfWR=i$EtO4Wj_x$dUf)rKnv_NKL|X$s+AJ~fW`vzsgAe~(_gZiHS^jLhMmsU&IxwfvW*>cK60XrgU=L z=uAk|LfOT6t}3uW4w9gz+}I2{bX{aWbpi-veX=HK?EHInZb?t=*t4=%0RBa1-$Rod zoy6!zJm#sC$kXB1oQ_#scwgB)o$$V21EWIIZ?n4=9~;M1>BOg85el4)!0v0={~eh@ zZdrxe@$aH~H#v3D51KuwO8d26IW1?fnr<=W9LLd(GSO_wVjyUzj4bvh)f>oCIM_+d zTY9*_qBrpeq|->qQ0Z4XFj=zs^SFp5$DtS4^J(9HiREoJ#3G2SniV+mxgdY_TPf3Vm}+CZIh$6Xxt$$+l0CA^-}=e zuc8pgJve)~0lCAq&Bxg5paR=h+ctR1rfdPeKsH2xSu z1*zCts?{-fkg3K65F5Kfbp6&H@z5YCn@5fgw^3YwAdH8qmgIekj-9o*Y6C@)O`&iu z=a*%xqYcrTILdyfsH-{bq7DO({8kBts zV|wycZ+jHz4nACb*~6%@$Zr5X$g{J%P$H(p@)yt*oY_3T-xh6icl^Jexb3aA;O&cs zY;5(r8BfM*TTPW&3)r}?`G1WHy2U{6y-o&qcWF5~Y`E(euWZ9;U=QG=f<}Uz0$}yj z;Pw2i%w(|v$%iwzlPKs(?>U$OyAjRN(tW5m+VwjQ-l*7qt`A+a+#PJ#KPgGGLo<1g z?==j1Q5g8o-8}QcvJ_H%YlTdrP-S~_=a)eC@^Zdb#c^W+K9s~8=P0@grHvn8j#LtA zD&8lDX)8Qa(-_>(^}HB$@A4G?l=Ce6N4DNB#=AE;J)sHJEVjA>8HQLHI#|ZW?m%fq z1A7@k-U9U#KL@O&7Wb?H}LEs|19iY0U{X$6ei28j~ zceMuux24#^pur*TJ1a`pd7p{zz%L@Ru>?O-irY60%U{nG9Tz};%`or)Dm!CrMGL=oWS@}$q9)dneVT|(LP4aoJ2VH^O>0s zSWUPZ{Y=@+=>}3+>HrE&3yqpEYT@s%%wjusfqkx?*gD?ecEIxP?IG~ujr_4bgdOlk zus)C&wgTdPP#G$Zmio5JC+dFl=mk!)fhRm1v`6M>y$O=pNVeaWt^Z+-^1bp>Db0+D z%79w1P>m(l0t>giKmFF%opT_I;N~yVbeAA=OAjSPYG?l zRzf>clbo+@x3{pme^eV+xD^JF3E+WyWpPF>kLkCGzW@$dgHU zRF3glc^(vrNmXvr7Gne-WuUeIJ53b?ilccHXNi@*ZY1Tqi7cy#pF*y?KYb$8H$oS` zWk~jTm909ERoelf^7^69*}(71jQF%PDx$e&NuMn1>aw@dT;G2Y*~0JIaT;252F>L@ zZMRO@cC2Cb#KtSm@na*};DIyP8{fdWoVlm-r(od)~uzM9;4h{N?Rd;0=@92)Xqz*cd70;WyofMW zVGX=tf98^?F+x`@|5N_j&2P%me!ifmLDuPwb)4*y#s=S9#{KuP>#U z{b0JCXFYV}P}*yhlSo5*0Qx%h5VKC&Q5%qo67<_q?l9>uMB*hx{xn)55>9u4%_mak~@Fu@#|7pxOYBIu>4jI0#rfwfE} zof0}=^cIt%oGH`c$aT+cuEDEoCr8I9eS_BlY7v62R0vwBm+aDd;u`PePH^Uq9J*d+ zqI5~!0)Gw#Kjvvj*=S#PH^6cwk7#4|4^E{0*>!9M2~*{X@&m6*lgMkonYaFZC)!$~ zVXKb2$?8Ys7?|Jzx*t9CMlrS_EmT-QHgDPr4%(`aK*=bCLy`%g`7yeChOM_*1Msh%9zz7oA_e#8v&cpi@|XM)2OZj zwW)9DtZo9^5>7I~ceCZ0A+$35ZU@RbF}?jZO~KVy&ttojlBMS#xCkk-Xg<=f8R=75 z?21P1)o~~q;qkj}Igx*?$q=xdnx^5qpw@ro>OS$!TQ=h@vTx}6GVuY-W8>_u|Ew0` zyl8u5QU8L#?$gUnasy#XMKe#AI^bR7Vn&a+@Eh+_1eB5RxwU)*ilDJpb80EO<1Q7R z*o>qeN$7g#={e{{^A#xvcy>}Vn(@Q2#=YArqO<55$_0r~cW>b?-&S7I! zJ#+ab#;ks=+xR{-@6NoQwDs8zBeSZQl#dsq>Oc!T>$#WT395_LfVdl}saAUwv-wPK zlpE!Th{@UX@FZ4Td`l&YvOJv^(T!G*BLrlR1&IC$ zr2e3E^|rL+$o!cKIx{yS&~?o#LpU*z{~T@J&@qftw-MhGj3*$U5e2x~E*Ott9${Yy zyv}1`0|}R4nW`bUHx&j4{hUg+GUZIBYNQGsOHHOn;}IEcGS?7_HgR8bblB8d7I-+Q zdqKaPvT>Zyq`JpA+Zjxw&MimfQzd`|uJasJR8(Dw&Y3vfpEf?LQnQeH{O(M>w(~a( zGhXl7>e9Utw8bhgp=+>pWW*Uz$;Um{iC@^ILg1~Q!u^IVg^GA|VTUE7)y{GE-wh=<|_olqPSyL6*3#-`1`GpTU6TbEv9uiZJ5bm+2v zPZf%6CbdWUC8F;JGF=`6D;u!&&04<>7EG+QZqyr8r*tdfO)#*Nd?+-O+^Vr#7BK%M^=8+R4bfvm)Yu{?QIBpEDDQ5FZfE-;5rT* z3j>*31V4uQV>x{`y&zfL%O&`8vl%0VO#jIlBBwyDntfiw zsY5C;7vF+g6~6IrQP0QPN85GAmi#ilR}2k{+&Nr`Cgn80m7WjpPY5-2^pWM@^%_m< z$R%qn@3JGCE~rrPT0{{P&XMA6K|B6TEh?$YQRkW7;m2tJOB~Mx2g7d*+0y1duUjUw zu=Pxrr|u?we#gV_RFNeemcComAA9{q{-8uo(dKeN^Zs#`Z0aN39MB#Ow6DsQMU-{} zD_J4o;FO-I(kA7Rh%XLpPINV`=UAow`J1)=9ZhReG)~=eW7{t?dgZ+}!;dt@+5lhn z?0W8t18zuT0qB%tFqwv^Lq-vN1x;B4jZP&1l9mVS!}`6yk2UVzy@}TjnN;LeBF>w^^VF``|s1bOBVX zIokl)*;U}*YOqL zAJ$(+^$MZ+wUVy*{DZQZGRVsyG>j%c@dBnRIs}WaKJ;R;W(`dt6|@=b<&|1!quEQ_ zp86V%lu1n2!iHtI1P(KBJP-T@!+Y;Kw%sr>}_a-(o#E0SRmv4^$yhT{dh%-S)*1r0!qma$RKO%xP1a-^T~}+T`YMhyv{|UYw><26LbhY z8BjI>8&6Bp2s4DTTAmE0mZZVHc17{-qV5LJopOsbE|MITlYN`HrnL=qIIGbgd@e`n zut)e!HopO6dQmF#8+=iC?bJ#~g+4GyqI3HeunpX<`eC?dywabN*I0c%q+JJ^>YeZR zYCh12%p2<&itqQ!jMWzpJ#>h6Tf{Poz>QK#)`3Vkcp5yA8K$K%zH6dTVa^g>fjYDI z&15NdUnZ|3L5h4HuHw&&h3JbXl2>H_3mGK*`N}rK=?H0zA!gh3P2Fj~l8tdMhv?E1 zYTJ>nw9eV=YO!Fb<;Ih6%FB+KgM_}I66XS%x4G8f)3SmY$_)iJ*LbI-EA8qp|Qt*bdWwCQK+fv7~aIt{-9YF z{>%d;gdAzubKUO4eqpWV5%UWh>vfI=6E&>n~MdG!$R)6bBjPb zIpR9ucp5MXvhQ{Y*UTd(K)+12)RZg`3cZ`n*zQKz;Hy~*+bC5;yew5nc5_npEX8e7Ie7ns6J##Bye@R-(Q7@c86C8$kVqqz}{O)pPF#CgnFiY2zhQS~I884g<;UuXwm?mRD@D^`q|r-P4@ zYHW4}q9x>$GJ)s;SjQsV=}g(`+}lN;w)ay_-vMTFhB(*DepkEt!|$z6ic1`ZSAl^A z)U7qdp%~iuI9BURC7@{`Bf+gC^^-L=u3uyz$E=t@hx2vRn8Skob*n#7zQbyQ&|yC7 z`>p^6-EDG^_lgf%>M=VL8-OH-(;EO+?Yy zuRqd;%iMW-^b1x3fflB|Pu#q6b;ZU**vcy-JNfGg^Zxh(W(yudl#r*zZj&cA@64Zn@NL~lpMyd zu^Q!NupZ6ryjYl~2pZ|`729%yEkyO1+So1o2rC5V!LYrJ_}-lYrN#&MHwO4Uc-5T~ z229Cp{F&{=DoL?fC4e3qxY!=oM{EeTV;V>=MzV)D8r@Hg*nu=vh9unh1*8Bn+Tr%D z$mUo)1mzS_kGAdW-gmk@g{IA=hH^0KIrx{Gy|)-~-e{CEg1IZeiftTS4Eu3GXTive zdgeVS@%=XE{SC}_yuVZwUN1g81nt^dKp%!!r9g7dj!!!FlnXpAYiUJ$QE7&#*$0|y zKdpI~?0IUQ69RWj)AEmBukqbec_v|d6Xc##`>vGBmsLF|;EzLJR=yikuX_Km7G@0| z{JfGh<{Rl0*_~P3?NeL3Ut;scOx=^6sUIhx-$iHKWx;~3Mn~Jfe(8{2j2Wl-d@NAf zJUg&?v1nj%XX`ca#|$T>{vx{tW^1wc0l-FXvfL5ow!2f_ml_Tq9u)A3W`y6`C5jzU zj1BM9%kG?=tQS39PV%hbyB6{f@{vb76c0ySX0(7eWWFijf`b2OCXrpW9uLcLv#KfP zn}HU#v^F*?Hjr5o?D9POWwHK@`djJ>Ud`2cPAY`B|7DPq0#Mie|1Y%Tk5`DP556<= z>&*S@Z>*TW;6*9u_YY!#Keg(NU`+9xik{4`%lIcjH6wOuWctUY{&URh%Q31o3_-X5 z-}i%2^8}ck0*^_F|I3)X%P|3JzEA%Fuln~r0)Glv@cT(3|FGbHj==+C)OT~(X#bz{ z1GJ+lz%<1=XZ!ZQj48St!>EJT^5M^i{S`^mc?gVEVs6;M|7DCS81tq%x8d`jlmF}g z`aKYsuWCN^CjXj={yAsg11=3({|ll&C*;>x;D15%zaaYGPW11s@RvR5e>>6tj Date: Wed, 22 Jul 2020 21:56:35 -0500 Subject: [PATCH 21/39] guide: move troubleshooting back out of How To per https://github.com/iterative/dvc.org/pull/1581#pullrequestreview-453807932 --- content/docs/sidebar.json | 9 ++------- content/docs/user-guide/{how-to => }/troubleshooting.md | 0 redirects-list.json | 4 +--- 3 files changed, 3 insertions(+), 10 deletions(-) rename content/docs/user-guide/{how-to => }/troubleshooting.md (100%) diff --git a/content/docs/sidebar.json b/content/docs/sidebar.json index 2511bac0ac..38446bc8b3 100644 --- a/content/docs/sidebar.json +++ b/content/docs/sidebar.json @@ -102,13 +102,7 @@ "label": "How To ...", "slug": "how-to", "source": false, - "children": [ - "update-tracked-files", - { - "label": "Troubleshoot Common Issues", - "slug": "troubleshooting" - } - ] + "children": ["update-tracked-files"] }, "setup-google-drive-remote", "large-dataset-optimization", @@ -140,6 +134,7 @@ "label": "Running DVC on Windows", "slug": "running-dvc-on-windows" }, + "troubleshooting", "related-technologies", { "label": "Anonymized Usage Analytics", diff --git a/content/docs/user-guide/how-to/troubleshooting.md b/content/docs/user-guide/troubleshooting.md similarity index 100% rename from content/docs/user-guide/how-to/troubleshooting.md rename to content/docs/user-guide/troubleshooting.md diff --git a/redirects-list.json b/redirects-list.json index 36cf157c3b..13776b035c 100644 --- a/redirects-list.json +++ b/redirects-list.json @@ -13,9 +13,7 @@ "^https://blog\\.dvc\\.org(.*)?$ https://dvc.org/blog$1", "^https://www\\.dvc\\.org(.*)? https://dvc.org$1", "^https://man\\.dvc\\.org(.*)? https://dvc.org/doc/command-reference$1 303", - "^https://error\\.dvc\\.org/(.*)? https://dvc.org/doc/user-guide/how-to/troubleshooting#$1 303", - "^https://dvc.org/doc/user-guide/troubleshooting https://dvc.org/doc/user-guide/how-to/troubleshooting 303", - "^https://dvc.org/doc/user-guide/troubleshooting#(.*)? https://dvc.org/doc/user-guide/how-to/troubleshooting#$1 303", + "^https://error\\.dvc\\.org/(.*)? https://dvc.org/doc/user-guide/troubleshooting#$1 303", "^https://(code|data|remote)\\.dvc\\.org/(.+) https://s3-us-east-2.amazonaws.com/dvc-public/$1/$2 303", "^/((?:deb|rpm)/.+) https://s3-us-east-2.amazonaws.com/dvc-s3-repo/$1 303", From a556e6c2de921f12b4d05653db228a7ef9571cf7 Mon Sep 17 00:00:00 2001 From: Jorge Orpinel Date: Mon, 3 Aug 2020 22:04:59 -0500 Subject: [PATCH 22/39] cases: move Why DVC? to Use Cases index and shorten it's intro --- content/docs/use-cases/index.md | 22 +++++++++++++++------- content/docs/user-guide/index.md | 9 --------- 2 files changed, 15 insertions(+), 16 deletions(-) diff --git a/content/docs/use-cases/index.md b/content/docs/use-cases/index.md index 7640d75cb4..879a41f5d8 100644 --- a/content/docs/use-cases/index.md +++ b/content/docs/use-cases/index.md @@ -1,18 +1,26 @@ # Use Cases We provide short articles on common ML workflow or data management scenarios -that DVC can help with or improve. These include the motivating context (usually -extracted from real-life cases); And the approaches to solving them can combine -several features of DVC. Use cases are not written to be run end-to-end. For -more general, hands-on experience with DVC, we recommend following the -[Get Started](/doc/tutorials/get-started), and/or [Tutorials](/doc/tutorials) -first. +that DVC can help with or improve. These include a motivation (usually from +real-life cases), and approaches which combine several features of DVC. Use +cases are not written to be run end-to-end like tutorials. For more general, +hands-on experience with DVC, please see our +[Get Started](/doc/tutorials/get-started) instead. > We keep reviewing our docs and will include interesting scenarios that surface > in the community. Please, [contact us](/support) if you need help or have > suggestions! -## Basic uses +## Why DVC? + +Even with all the success we've seen today in machine learning (ML), especially +with deep learning and its applications in business, the data science community +still lacks good practices for organizing their projects and collaborating +effectively. This is a critical challenge: while ML algorithms and methods are +no longer tribal knowledge, they are still difficult to implement, reuse, and +manage. + +## Basic uses of DVC If you store and process data files or datasets to produce other data or machine learning models, and you want to diff --git a/content/docs/user-guide/index.md b/content/docs/user-guide/index.md index 4ceb4ade80..0c05c765c3 100644 --- a/content/docs/user-guide/index.md +++ b/content/docs/user-guide/index.md @@ -8,14 +8,5 @@ more parts of DVC, to more technical and advanced things you can do. We also include a few misc. guides, for example related to [contributing to DVC](/doc/user-guide/contributing/core) itself. -## Why DVC? - -Even with all the success we've seen today in machine learning (ML), especially -with deep learning and its applications in business, the data science community -still lacks good practices for organizing their projects and collaborating -effectively. This is a critical challenge: while ML algorithms and methods are -no longer tribal knowledge, they are still difficult to implement, reuse, and -manage. - Please choose from the navigation sidebar to the left, or click the `Next` button below ↘ From eb5fbf9911452a1b6a28eb41ccbb1077e529d7a9 Mon Sep 17 00:00:00 2001 From: Jorge Orpinel Date: Mon, 3 Aug 2020 23:03:03 -0500 Subject: [PATCH 23/39] guide: move Basic Principles from What is DVC? into Basic Concepts guide --- content/docs/user-guide/basic-concepts.md | 47 +++++++++++++++++++---- content/docs/user-guide/what-is-dvc.md | 38 ++++-------------- 2 files changed, 47 insertions(+), 38 deletions(-) diff --git a/content/docs/user-guide/basic-concepts.md b/content/docs/user-guide/basic-concepts.md index 55a7488b3f..01fe62e190 100644 --- a/content/docs/user-guide/basic-concepts.md +++ b/content/docs/user-guide/basic-concepts.md @@ -6,17 +6,21 @@ repository. ### Data Files -Large files (or directories) that are tracked and cached by DVC. Data files are -stored outside of the Git repository, on a local/shared hard drive, and/or -remote storage. `.dvc` files describing the data are put into Git as -placeholders, for DVC needs (to maintain pipelines and reproducibility). +Large files (or directories) that are tracked and cached by DVC. +Data files are stored outside of the Git repository, on a local/shared hard +drive, and/or remote storage. `.dvc` files describing the data are put into Git +as placeholders, for DVC needs (to maintain pipelines and reproducibility). -### Local Cache +> A.k.a. data artifacts and outputs -Directory with all data files on a local hard drive or in cloud storage, but not -in the Git repository. See `dvc cache dir`. +### DVC Cache -### Data Processing Stage +A DVC project's cache is an +[internal directory](/doc/user-guide/dvc-files-and-directories#structure-of-cache-directory) +used to store all data files outside of the Git repository. It's a local hard +drive or external location. See `dvc cache dir`. + +### Processing Stage An individual process that transforms a data input (dependency) into some result (usually a data output). DVC stages execute @@ -30,3 +34,30 @@ Multiple stages can be chained by their dependencies and outputs. Pipelines are defined in special `dvc.yaml` files. Refer to `dvc dag` for more information. See [Data Pipelines](/doc/start/data-pipelines) for a hands-on explanation. + +### Reproducibility + +Action to reproduce an experiment state. This regenerates output files (or +directories) based on a set of input files and source code. This action usually +changes experiment state. + +> This is one of the biggest challenges in reusing, and hence managing ML +> projects. + +## Advanced Concepts + +### Experiment + +An attempt at a data science task. Each one can be performed in a separate Git +branch or tag, and its states identified by different +[revisions](https://git-scm.com/docs/revisions). Examples: add a new data +source, extract new features, change model hyperparameters, etc. DVC doesn't +need to recompute the results after a successful merge that integrates an +experiment into the repository history. + +> See [Experiments](/doc/start/experiments) for a hands-on explanation. + +### Workflow + +Set of experiments and relationships among them. Corresponds to the entire +project and may contain several [data pipelines](#data-pipelines). diff --git a/content/docs/user-guide/what-is-dvc.md b/content/docs/user-guide/what-is-dvc.md index 231798a238..d5ec95dab9 100644 --- a/content/docs/user-guide/what-is-dvc.md +++ b/content/docs/user-guide/what-is-dvc.md @@ -14,36 +14,6 @@ software engineers. [`dvc`](/doc/command-reference) is a command line tool, similar to `git`. -## Core Principles - -- **Workflow**: Set of experiments and relationships among them. Corresponds to - the entire project and may contain several - [data pipelines](/doc/user-guide/basic-concepts#data-pipelines). - -- **Experiment**: An attempt at a data science task. Each one can be performed - in a separate Git branch or tag, and its states identified by different - [revisions](https://git-scm.com/docs/revisions). Examples: add a new data - source, extract new features, change model hyperparameters, etc. DVC doesn't - need to recompute the results after a successful merge that integrates an - experiment into the repository history. - - See [Experiments](/doc/start/experiments) for a hands-on explanation. - -- **Reproducibility**: Action to reproduce an experiment state. This regenerates - output files (or directories) based on a set of input files and source code. - This action usually changes experiment state. - - > This is one of the biggest challenges in reusing, and hence managing ML - > projects. - -- **Cloud storage**: Available addon to the core DVC features. Multiple - providers are supported (Amazon S3, Microsoft Azure Blob Storage, Google Cloud - Storage, etc.). This is how a data scientist transfers large data files or - shares a GPU-trained model with others. Implemented as - [remote storage](/doc/command-reference/remote). - - > This complement is separate from DVC itself, and never required. - ## Core Features - DVC works **on top of Git repositories** and has a similar command line @@ -69,3 +39,11 @@ software engineers. > Git servers, as well as SSH and cloud storage providers are supported, > however. + +- **Cloud storage**: Available addon to the core DVC features. Multiple + providers are supported (Amazon S3, Microsoft Azure Blob Storage, Google Cloud + Storage, etc.). This is how a data scientist transfers large data files or + shares a GPU-trained model with others. Implemented as + [remote storage](/doc/command-reference/remote). + + > This complement is separate from DVC itself, and never required. From c476f60d904e0c6b7a0d9a483414f3c0f77e0a66 Mon Sep 17 00:00:00 2001 From: Jorge Orpinel Date: Mon, 3 Aug 2020 23:32:42 -0500 Subject: [PATCH 24/39] guide: remove "User Manual" term from index per https://github.com/iterative/dvc.org/pull/1581#pullrequestreview-453808212 --- content/docs/user-guide/index.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/content/docs/user-guide/index.md b/content/docs/user-guide/index.md index 0c05c765c3..7703378188 100644 --- a/content/docs/user-guide/index.md +++ b/content/docs/user-guide/index.md @@ -2,10 +2,10 @@ Our guides describe the major concepts and features of DVC comprehensively, explaining when and how to use them, as well as relationship between these. We -don't focus on specific scenarios in this section, but rather on a general scope -– think _User Manual_. The topics here range from more foundational, impacting -more parts of DVC, to more technical and advanced things you can do. We also -include a few misc. guides, for example related to +don't focus on specific scenarios in this section, but rather on a general +scope. The topics here range from more foundational, impacting more parts of +DVC, to more technical and advanced things you can do. We also include a few +misc. guides, for example related to [contributing to DVC](/doc/user-guide/contributing/core) itself. Please choose from the navigation sidebar to the left, or click the `Next` From 3508a19f2773a0986c2f888c694ce3d3be620101 Mon Sep 17 00:00:00 2001 From: Jorge Orpinel Date: Mon, 3 Aug 2020 23:36:34 -0500 Subject: [PATCH 25/39] nav: remove ... from How To entry per https://github.com/iterative/dvc.org/pull/1581#pullrequestreview-453809220 --- content/docs/sidebar.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/docs/sidebar.json b/content/docs/sidebar.json index 38446bc8b3..e9709a5d03 100644 --- a/content/docs/sidebar.json +++ b/content/docs/sidebar.json @@ -99,7 +99,7 @@ } }, { - "label": "How To ...", + "label": "How To", "slug": "how-to", "source": false, "children": ["update-tracked-files"] From 2842e3a96a3a124628cd00ef755670c6d6a54992 Mon Sep 17 00:00:00 2001 From: Jorge Orpinel Date: Tue, 4 Aug 2020 00:22:50 -0500 Subject: [PATCH 26/39] tests: finis rolling back troubleshooting guide move --- src/utils/shared/redirects.test.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/utils/shared/redirects.test.js b/src/utils/shared/redirects.test.js index 42ec22f27d..4306968e9c 100644 --- a/src/utils/shared/redirects.test.js +++ b/src/utils/shared/redirects.test.js @@ -114,13 +114,13 @@ describe('getRedirects', () => { itRedirects( 'https://error.dvc.org/', - 'https://dvc.org/doc/user-guide/how-to/troubleshooting#', + 'https://dvc.org/doc/user-guide/troubleshooting#', 303 ) itRedirects( 'https://error.dvc.org/foo', - 'https://dvc.org/doc/user-guide/how-to/troubleshooting#foo', + 'https://dvc.org/doc/user-guide/troubleshooting#foo', 303 ) From 7411f53987c6a9ea9e6b69a1cc777003fcba8bd0 Mon Sep 17 00:00:00 2001 From: Jorge Orpinel Date: Sat, 8 Aug 2020 13:26:42 -0500 Subject: [PATCH 27/39] cases: fix a link to related techs guide --- .../versioning-data-and-model-files/index.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/content/docs/use-cases/versioning-data-and-model-files/index.md b/content/docs/use-cases/versioning-data-and-model-files/index.md index f0da5fc0a4..4ef8955a59 100644 --- a/content/docs/use-cases/versioning-data-and-model-files/index.md +++ b/content/docs/use-cases/versioning-data-and-model-files/index.md @@ -15,12 +15,12 @@ This allows easily saving and sharing data alongside code. ![](/img/model-versioning-diagram.png) In this basic scenario, DVC is a better replacement for Git-LFS (see -[Related Technologies](/doc/understanding-dvc/related-technologies)) and for -ad-hoc scripts on top of Amazon S3 (or any other cloud) used to manage ML -data artifacts like raw data, models, etc. Unlike Git-LFS, DVC -doesn't require installing a dedicated server; It can be used on-premises (e.g. -SSH, NAS) or with any major cloud storage provider (Amazon S3, Microsoft Azure -Blob Storage, Google Drive, Google Cloud Storage, etc). +[Related Technologies](/doc/user-guide/related-technologies)) and for ad-hoc +scripts on top of Amazon S3 (or any other cloud) used to manage ML data +artifacts like raw data, models, etc. Unlike Git-LFS, DVC doesn't require +installing a dedicated server; It can be used on-premises (e.g. SSH, NAS) or +with any major cloud storage provider (Amazon S3, Microsoft Azure Blob Storage, +Google Drive, Google Cloud Storage, etc). Let's say you already have a Git repository and put a bunch of images in the `images/` directory, and build a `model.pkl` ML model file using them. From 98ffea369c162111697cd80899c439adc661e922 Mon Sep 17 00:00:00 2001 From: Jorge Orpinel Date: Sat, 8 Aug 2020 19:27:47 -0500 Subject: [PATCH 28/39] guide: propper structure in related techs per https://github.com/iterative/dvc.org/pull/1581#pullrequestreview-453810351 --- content/docs/user-guide/related-technologies.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/content/docs/user-guide/related-technologies.md b/content/docs/user-guide/related-technologies.md index 134ea9b06d..2f789a7f64 100644 --- a/content/docs/user-guide/related-technologies.md +++ b/content/docs/user-guide/related-technologies.md @@ -4,7 +4,7 @@ DVC combines a number of existing ideas into a single tool, with the goal of bringing best practices from software engineering into the data science field (refer to [What is DVC?](/doc/user-guide/what-is-dvc) for more details). -### Git +## Git - DVC builds upon Git by introducing the concept of [data files](/doc/user-guide/basic-concepts#data-files) – large files that @@ -16,7 +16,7 @@ bringing best practices from software engineering into the data science field versioning-related features). This also applies to Git-LFS and Git-annex, below. -### Git-LFS (Large File Storage) +## Git-LFS (Large File Storage) - DVC does not require special servers like Git-LFS demands. Any cloud storage like S3, Google Cloud Storage, or even an SSH server can be used as a @@ -32,7 +32,7 @@ bringing best practices from software engineering into the data science field - Github (most common Git hosting service) has a limit of 2 GB per repository. -### Git-annex +## Git-annex - DVC can use reflinks\* or hardlinks (depending on the system) instead of symlinks to improve performance and the user experience. @@ -53,7 +53,7 @@ bringing best practices from software engineering into the data science field > means that editing a reflinked file is always safe as all the other links to > the file will reflect the changes. -### Git workflows/methodologies such as Gitflow +## Git workflows/methodologies such as Gitflow - DVC enables a new experimentation methodology that integrates easily with existing Git workflows. For example, a separate branch can be created for each @@ -63,7 +63,7 @@ bringing best practices from software engineering into the data science field - DVC innovates by giving users the ability to easily navigate through past experiments without recomputing them each time. -### Workflow management tools +## Workflow management systems Pipelines and dependency graphs ([DAG](https://en.wikipedia.org/wiki/Directed_acyclic_graph)) such as _Airflow_, @@ -81,7 +81,7 @@ _Luigi_, etc. - See also our sister project, [CML](https://cml.dev/), that helps fill some of these gaps. -### Experiment management software +## Experiment management software - DVC uses Git as the underlying layer for data, pipelines, an experiment versioning, instead of a custom web application. @@ -96,7 +96,7 @@ _Luigi_, etc. [internal files and directories](/doc/user-guide/dvc-files-and-directories) have a human-readable format and can be easily reused by external tools. -### Build automation tools +## Build automation tools [_Make_](https://www.gnu.org/software/make/) and others. From 95521e675f28fa75b50529c6d4fd4dbf6a25d32d Mon Sep 17 00:00:00 2001 From: Jorge Orpinel Date: Sat, 8 Aug 2020 22:12:15 -0500 Subject: [PATCH 29/39] guide: update remote storage core concept in what is dvc per https://github.com/iterative/dvc.org/pull/1581#pullrequestreview-462064903 and https://github.com/iterative/dvc.org/pull/1581#pullrequestreview-462065016 --- content/docs/user-guide/what-is-dvc.md | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/content/docs/user-guide/what-is-dvc.md b/content/docs/user-guide/what-is-dvc.md index d5ec95dab9..f59e571c16 100644 --- a/content/docs/user-guide/what-is-dvc.md +++ b/content/docs/user-guide/what-is-dvc.md @@ -21,13 +21,22 @@ software engineers. versioning capabilities. - **Large [data file](/doc/user-guide/basic-concepts#data-files) tracking** is - enabled, by creating special files that point to the original data (in the - cache). These can be easily versioned with Git. + enabled, by creating special files that point to the original data (stored in + the cache). These can be easily versioned with Git. - DVC makes data science projects **reproducible** by creating lightweight [pipelines](/doc/user-guide/basic-concepts#data-pipelines), using implicit dependency graphs. +- **Remote storage**: DVC separates the project's code and pipeline + configuration (typically in a Git repo) from the data it needs and produces. + Multiple providers are supported to push and distribute the cached data + [remotely](/doc/command-reference/remote) (Amazon S3, Microsoft Azure Blob + Storage, Google Cloud Storage, etc.) This is how data scientists transfer + large data files or share a GPU-trained model with others. + + > Remote storage is complementary from the basic features, and never required. + - DVC is **platform agnostic**: It runs on all major operating systems (Linux, MacOS, and Windows), and works independently of the programming languages (Python, R, Julia, shell scripts, etc.) or ML libraries (Keras, Tensorflow, @@ -39,11 +48,3 @@ software engineers. > Git servers, as well as SSH and cloud storage providers are supported, > however. - -- **Cloud storage**: Available addon to the core DVC features. Multiple - providers are supported (Amazon S3, Microsoft Azure Blob Storage, Google Cloud - Storage, etc.). This is how a data scientist transfers large data files or - shares a GPU-trained model with others. Implemented as - [remote storage](/doc/command-reference/remote). - - > This complement is separate from DVC itself, and never required. From fbd7e962de87ae22ed4c34f39a0a527e50f5e866 Mon Sep 17 00:00:00 2001 From: Jorge Orpinel Date: Sat, 8 Aug 2020 22:21:55 -0500 Subject: [PATCH 30/39] guide: improve Core Features of What is DVC? per https://github.com/iterative/dvc.org/pull/1581#pullrequestreview-462065783 et al. --- content/docs/user-guide/what-is-dvc.md | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/content/docs/user-guide/what-is-dvc.md b/content/docs/user-guide/what-is-dvc.md index f59e571c16..0c4e40a551 100644 --- a/content/docs/user-guide/what-is-dvc.md +++ b/content/docs/user-guide/what-is-dvc.md @@ -20,13 +20,14 @@ software engineers. interface and flow as Git. DVC can also work stand-alone, but without versioning capabilities. -- **Large [data file](/doc/user-guide/basic-concepts#data-files) tracking** is - enabled, by creating special files that point to the original data (stored in - the cache). These can be easily versioned with Git. +- **Large [data file](/doc/user-guide/basic-concepts#data-files) versioning** is + enabled by creating special files that point to the original data or ML models + (stored in the cache or _remote storage_). These can be easily + versioned with Git. - DVC makes data science projects **reproducible** by creating lightweight - [pipelines](/doc/user-guide/basic-concepts#data-pipelines), using implicit - dependency graphs. + [pipelines](/doc/user-guide/basic-concepts#data-pipelines) using implicit + dependency graphs,and codifying the data and artifacts involved. - **Remote storage**: DVC separates the project's code and pipeline configuration (typically in a Git repo) from the data it needs and produces. @@ -42,9 +43,10 @@ software engineers. (Python, R, Julia, shell scripts, etc.) or ML libraries (Keras, Tensorflow, PyTorch, Scipy, etc.) used in the project. -- **Open-source** and **Self-serve**: DVC is - [free](https://github.com/iterative/dvc/blob/master/LICENSE) and doesn't - require any additional servers or services. +- **Free** and **Easy to use**: DVC is + [open-source](https://github.com/iterative/dvc/blob/master/LICENSE), quick to + [install](/doc/install), and doesn't require special infrastructure, nor does + it depend on APIS or external services. It's a stand-alone CLI tool. > Git servers, as well as SSH and cloud storage providers are supported, > however. From 86fbf43496eb434ae07f1e552b7f099d332f17a9 Mon Sep 17 00:00:00 2001 From: Jorge Orpinel Date: Sun, 9 Aug 2020 16:21:38 -0500 Subject: [PATCH 31/39] guide: simplify data versioning core feature per https://github.com/iterative/dvc.org/pull/1581#pullrequestreview-462066234 --- content/docs/user-guide/what-is-dvc.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/content/docs/user-guide/what-is-dvc.md b/content/docs/user-guide/what-is-dvc.md index 0c4e40a551..7e46a0dde8 100644 --- a/content/docs/user-guide/what-is-dvc.md +++ b/content/docs/user-guide/what-is-dvc.md @@ -21,9 +21,9 @@ software engineers. versioning capabilities. - **Large [data file](/doc/user-guide/basic-concepts#data-files) versioning** is - enabled by creating special files that point to the original data or ML models - (stored in the cache or _remote storage_). These can be easily - versioned with Git. + enabled by replacing the data with small metafiles (easy to manage with Git). + These placeholders point to the original data files, directories, ML models, + etc. which can now be stored outside the project (e.g. in cloud storage). - DVC makes data science projects **reproducible** by creating lightweight [pipelines](/doc/user-guide/basic-concepts#data-pipelines) using implicit From de43edd1d86978624278450dfe2353164e6d50a8 Mon Sep 17 00:00:00 2001 From: Jorge Orpinel Date: Sun, 9 Aug 2020 18:37:57 -0500 Subject: [PATCH 32/39] guide: update What is DVC? intro --- content/docs/user-guide/what-is-dvc.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/content/docs/user-guide/what-is-dvc.md b/content/docs/user-guide/what-is-dvc.md index 7e46a0dde8..202b0ed5bf 100644 --- a/content/docs/user-guide/what-is-dvc.md +++ b/content/docs/user-guide/what-is-dvc.md @@ -4,12 +4,12 @@ experiment management software, that builds upon [Git](https://git-scm.com/) (although it can work stand-alone). DVC reduces the gap between established engineering tool sets and data science needs, allowing users to take advantage -of [new features](#core-features) while reusing existing skills and intuition. +of new [features](#core-features) while reusing existing skills and intuition. ![](/img/reproducibility.png) _DVC codifies data and ML experiments_ -Data science experiment sharing and collaboration can be done through regular -Git flows (commits, branching, pull requests, etc.), the same way it works for +Data science experiment sharing and collaboration can be done through a regular +Git flow (commits, branching, pull requests, etc.), the same way it works for software engineers. [`dvc`](/doc/command-reference) is a command line tool, similar to `git`. From bebd6657ee5605c01b998b45f71d179c7002670b Mon Sep 17 00:00:00 2001 From: Jorge Orpinel Date: Sun, 9 Aug 2020 18:39:14 -0500 Subject: [PATCH 33/39] guide: simplify Core Features in What is DVC? per https://github.com/iterative/dvc.org/pull/1581#pullrequestreview-462066234 and https://github.com/iterative/dvc.org/pull/1581#commitcomment-41318288 --- .../versioning-data-and-model-files/index.md | 4 +-- content/docs/user-guide/what-is-dvc.md | 28 +++++++++---------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/content/docs/use-cases/versioning-data-and-model-files/index.md b/content/docs/use-cases/versioning-data-and-model-files/index.md index 4ef8955a59..328e94e8cc 100644 --- a/content/docs/use-cases/versioning-data-and-model-files/index.md +++ b/content/docs/use-cases/versioning-data-and-model-files/index.md @@ -18,8 +18,8 @@ In this basic scenario, DVC is a better replacement for Git-LFS (see [Related Technologies](/doc/user-guide/related-technologies)) and for ad-hoc scripts on top of Amazon S3 (or any other cloud) used to manage ML data artifacts like raw data, models, etc. Unlike Git-LFS, DVC doesn't require -installing a dedicated server; It can be used on-premises (e.g. SSH, NAS) or -with any major cloud storage provider (Amazon S3, Microsoft Azure Blob Storage, +installing a dedicated server; It can be used on-premise (e.g. SSH, NAS) or with +any major cloud storage provider (Amazon S3, Microsoft Azure Blob Storage, Google Drive, Google Cloud Storage, etc). Let's say you already have a Git repository and put a bunch of images in the diff --git a/content/docs/user-guide/what-is-dvc.md b/content/docs/user-guide/what-is-dvc.md index 202b0ed5bf..c30d441b60 100644 --- a/content/docs/user-guide/what-is-dvc.md +++ b/content/docs/user-guide/what-is-dvc.md @@ -20,30 +20,30 @@ software engineers. interface and flow as Git. DVC can also work stand-alone, but without versioning capabilities. -- **Large [data file](/doc/user-guide/basic-concepts#data-files) versioning** is - enabled by replacing the data with small metafiles (easy to manage with Git). - These placeholders point to the original data files, directories, ML models, - etc. which can now be stored outside the project (e.g. in cloud storage). +- **Data versioning** is enabled by replacing + [large files](/doc/user-guide/basic-concepts#data-files), dataset directories, + ML models, etc. with small + [metafiles](/doc/user-guide/dvc-files-and-directories) (easy to handle with + Git). These placeholders point to the original data, which is decoupled from + source code management. + +- **Data storage**: On-premise or cloud storage can be used to store the + project's data separate from its code base. This is how data scientists can + transfer large datasets or share a GPU-trained model with others. + + > Note that [remote storage](/doc/command-reference/remote) is complementary + > from the basic features, and never required by DVC. - DVC makes data science projects **reproducible** by creating lightweight [pipelines](/doc/user-guide/basic-concepts#data-pipelines) using implicit dependency graphs,and codifying the data and artifacts involved. -- **Remote storage**: DVC separates the project's code and pipeline - configuration (typically in a Git repo) from the data it needs and produces. - Multiple providers are supported to push and distribute the cached data - [remotely](/doc/command-reference/remote) (Amazon S3, Microsoft Azure Blob - Storage, Google Cloud Storage, etc.) This is how data scientists transfer - large data files or share a GPU-trained model with others. - - > Remote storage is complementary from the basic features, and never required. - - DVC is **platform agnostic**: It runs on all major operating systems (Linux, MacOS, and Windows), and works independently of the programming languages (Python, R, Julia, shell scripts, etc.) or ML libraries (Keras, Tensorflow, PyTorch, Scipy, etc.) used in the project. -- **Free** and **Easy to use**: DVC is +- **Free** and **easy to use**: DVC is [open-source](https://github.com/iterative/dvc/blob/master/LICENSE), quick to [install](/doc/install), and doesn't require special infrastructure, nor does it depend on APIS or external services. It's a stand-alone CLI tool. From d8a71f83e0c9715d303550fdec50d0aa4ecc9a81 Mon Sep 17 00:00:00 2001 From: Jorge Orpinel Date: Sun, 9 Aug 2020 18:45:14 -0500 Subject: [PATCH 34/39] guide: features before concepts (index) --- content/docs/user-guide/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/docs/user-guide/index.md b/content/docs/user-guide/index.md index 7703378188..06e4116738 100644 --- a/content/docs/user-guide/index.md +++ b/content/docs/user-guide/index.md @@ -1,6 +1,6 @@ # User Guide -Our guides describe the major concepts and features of DVC comprehensively, +Our guides describe the major features and concepts of DVC comprehensively, explaining when and how to use them, as well as relationship between these. We don't focus on specific scenarios in this section, but rather on a general scope. The topics here range from more foundational, impacting more parts of From 722cbb3b77aeb2d81da3af30b14808bfebca7461 Mon Sep 17 00:00:00 2001 From: Jorge Orpinel Date: Sun, 9 Aug 2020 18:47:29 -0500 Subject: [PATCH 35/39] guide: review term "features" in basic concepts --- content/docs/user-guide/basic-concepts.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/docs/user-guide/basic-concepts.md b/content/docs/user-guide/basic-concepts.md index 01fe62e190..3dc80494f7 100644 --- a/content/docs/user-guide/basic-concepts.md +++ b/content/docs/user-guide/basic-concepts.md @@ -51,7 +51,7 @@ changes experiment state. An attempt at a data science task. Each one can be performed in a separate Git branch or tag, and its states identified by different [revisions](https://git-scm.com/docs/revisions). Examples: add a new data -source, extract new features, change model hyperparameters, etc. DVC doesn't +source, extract data features, change model hyperparameters, etc. DVC doesn't need to recompute the results after a successful merge that integrates an experiment into the repository history. From e6d5f785caebc2d5ee6ce70527554a955f66c942 Mon Sep 17 00:00:00 2001 From: Jorge Orpinel Date: Sun, 9 Aug 2020 22:17:27 -0500 Subject: [PATCH 36/39] guide: undo starting How To subsection per https://github.com/iterative/dvc.org/pull/1581#pullrequestreview-462046904 --- content/docs/sidebar.json | 7 +-- .../docs/user-guide/how-to/best-practices.md | 43 ------------------- ...ked-files.md => updating-tracked-files.md} | 0 3 files changed, 1 insertion(+), 49 deletions(-) delete mode 100644 content/docs/user-guide/how-to/best-practices.md rename content/docs/user-guide/{how-to/update-tracked-files.md => updating-tracked-files.md} (100%) diff --git a/content/docs/sidebar.json b/content/docs/sidebar.json index 73889f434c..6b544fa8b2 100644 --- a/content/docs/sidebar.json +++ b/content/docs/sidebar.json @@ -98,12 +98,7 @@ "katacoda": "https://katacoda.com/dvc/courses/examples/dvcignore" } }, - { - "label": "How To", - "slug": "how-to", - "source": false, - "children": ["update-tracked-files"] - }, + "updating-tracked-files", "setup-google-drive-remote", "large-dataset-optimization", "external-dependencies", diff --git a/content/docs/user-guide/how-to/best-practices.md b/content/docs/user-guide/how-to/best-practices.md deleted file mode 100644 index 019ebca8ce..0000000000 --- a/content/docs/user-guide/how-to/best-practices.md +++ /dev/null @@ -1,43 +0,0 @@ -# Best Practices for DVC Projects - -Data scientists, engineers, or managers may already know or can easily find -answers to some of these questions. However, the variety of answers and -approaches makes data science collaboration a nightmare. **A systematic approach -is required.** - -## Questions on... - -### Source code and data versioning - -- How do you avoid discrepancies between - [revisions](https://git-scm.com/docs/revisions) of source code and versions of - data files, when the data cannot fit into a traditional repository? - -### Experiment time log - -- How do you track which of your - [hyperparameter]() - changes contributed the most to producing or improving your target - [metric](/doc/command-reference/metrics)? How do you monitor the degree of - each change? - -### Navigating through experiments - -- How do you recover a model from last week without wasting time waiting for the - model to retrain? - -- How do you quickly switch between a large dataset and a small subset without - modifying source code? - -### Reproducibility - -- How do you run a model's evaluation process again without retraining the model - and preprocessing a raw dataset? - -### Managing and sharing large data files - -- How do you share models trained in a GPU environment with colleagues who don't - have access to a GPU? - -- How do you share the entire 147 GB of your ML project, with all of its data - sources, intermediate data files, and models? diff --git a/content/docs/user-guide/how-to/update-tracked-files.md b/content/docs/user-guide/updating-tracked-files.md similarity index 100% rename from content/docs/user-guide/how-to/update-tracked-files.md rename to content/docs/user-guide/updating-tracked-files.md From ca9203a5f3c0851963835194dc38b281f2c458ec Mon Sep 17 00:00:00 2001 From: Jorge Orpinel Date: Sun, 9 Aug 2020 22:37:25 -0500 Subject: [PATCH 37/39] guide: undo changes to troubleshooting per https://github.com/iterative/dvc.org/pull/1581#pullrequestreview-463917582 --- content/docs/user-guide/troubleshooting.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/content/docs/user-guide/troubleshooting.md b/content/docs/user-guide/troubleshooting.md index 408856433a..7eafdac592 100644 --- a/content/docs/user-guide/troubleshooting.md +++ b/content/docs/user-guide/troubleshooting.md @@ -1,7 +1,6 @@ -# Troubleshooting Common DVC Issues +# Troubleshooting -Here we provide help for some of the problems that DVC user might stumble upon, -based on frequent support questions (FAQ). +Here we provide help for some of the problems that DVC user might stumble upon.