From 033fd7ce4eabf11ea524bf7f0a4089f541dfc687 Mon Sep 17 00:00:00 2001 From: Chris Mills Date: Thu, 1 May 2025 10:21:59 +0100 Subject: [PATCH 1/4] Complete design for developers module --- .../basic_design_theory/design-icon.png | Bin 0 -> 2494 bytes .../basic_design_theory/index.md | 636 ++++++++++++++++++ .../basic_design_theory/jungle-coast.jpg | Bin 0 -> 88464 bytes .../basic_design_theory/lightbulb-icon.png | Bin 0 -> 2391 bytes .../basic_design_theory/watery-view.jpg | Bin 0 -> 39046 bytes .../design_briefs/index.md | 49 ++ .../core/design_for_developers/index.md | 63 +- .../user-centered_design/index.md | 57 ++ files/sidebars/learnsidebar.yaml | 5 + 9 files changed, 756 insertions(+), 54 deletions(-) create mode 100644 files/en-us/learn_web_development/core/design_for_developers/basic_design_theory/design-icon.png create mode 100644 files/en-us/learn_web_development/core/design_for_developers/basic_design_theory/index.md create mode 100644 files/en-us/learn_web_development/core/design_for_developers/basic_design_theory/jungle-coast.jpg create mode 100644 files/en-us/learn_web_development/core/design_for_developers/basic_design_theory/lightbulb-icon.png create mode 100644 files/en-us/learn_web_development/core/design_for_developers/basic_design_theory/watery-view.jpg create mode 100644 files/en-us/learn_web_development/core/design_for_developers/design_briefs/index.md create mode 100644 files/en-us/learn_web_development/core/design_for_developers/user-centered_design/index.md diff --git a/files/en-us/learn_web_development/core/design_for_developers/basic_design_theory/design-icon.png b/files/en-us/learn_web_development/core/design_for_developers/basic_design_theory/design-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..b9bf24419b2de07eef6c3e66aa64ab6e3b2ecb8a GIT binary patch literal 2494 zcmdUx`#;l*1IDq;ZA%(4m*$pR7ZPQ$4TnOmp^HnSixHDbO#9g8nw3Iv2&c(8nL>q5 zmqWWCm!uV?6m5j*G?#5;W47b_XMCU6>v`V4zJGkE!GQ;%nueN6N=i^)AFspfq^vhf z9kjlfcF(AF)Cc>Ad9U;TB0IP~`Rk(lQV$1)DygkWmzOmAbw;-gwr%9}ObNua`#{;mcGN^>U^A zCd%^3?>ZcV#6o9$?Qr~@)9qz)tD~SpT}7+mZ|v7up|kp`;?2fR&B!CeF7k1K0{^M# zWgL;vFAs~PBn*MY2=H2Sy9imi2d!3Yo}~Fj{~NeTxu6C)T9_!lWZ(7M2bGx>c*^kE z>>pnK*hCTE6nY2ZCb0-M%`LVQObPzB!qz<3{RXbi^kyV@`ckU4B{%gR)xlC0oZsaK z?F>`jTas0!7!Yl1OoyhT|hvhoVv+BdAhB`0)9yI&%#a29o z2FZ11`7e$S86?%3-q_}|sds+v=*Zh+IR5sbzwDMhY0u?Peu|pQ!&7B#FNSqRV@;h8 z_2zC!rGb%Dto4TIe7s?_D`D+uRbpyM5t$@dcu!}zE4JtJAeN$!&%Z=joThe4EFB^T zQNbNyMBxi-M2W~yb<5Ll9T~?r*nAQOPl`cOg30;NlvxxQ>St1n5D448$T+K>e zC%g*&Ef-N01pc)(G>P(}rJsLgp{?st@?%w`s~xk8qL1EdLE^gzgQA0W<$RjA?;G`6 z73m3=p*5ovL(!B_5*FIT)+MJcXg83jz?x7JjJ!#x1x<=N1eJtHl5=3<){AWv5wAcN zqLo-kQ}({k&r}#?URnqhCzj!AO6G}c+Qz_2KCC$Ft%%Q9(w0^?8-hLKpb`zquzQIz z#*8-2pt7Oxl)4}`edJja)m8RQL$cTyS~-7i`NXQw&g8sLmM{7M zdP1y0n_uS8AhU>DC`~HoIImVZ^6mj?DY9m~cLzN@pgZQ+SqhM`?hbFjzew z#=N{(=I0GW9OpZjGK!Z>EQQdNyheN+-V9zUnk5E=G{~2sv@f0FBKy?_qrRG4F6o5x z^&D-c!1k~H7|lVqL#G9N9AeoGO#9LkJ^JVC-S3jFoj*tlv)zxe3f^hfAVjX(mSE#q zBi45=d|g0lm(7LOr@Ap}^+JXzI7cN_?lEf(ja3)W@`L&ZGSg|kQOa;du1fm#KLXq? zANtdHiB3LVq}^9_yUe-9?4|=}QuS+%N5Wb|H}>FIO;@ejRY*aeP1K`~J;|O_Q^mw-|KU=DCDzgWlGrG>!9QbxgHdrkUJn>#d;f_>C4G(R!*vxK}>;Ah5T?(%w0y>7JDw+R_XY z{+`s{-gz&o@o`>8WG}9~g0&I!w7)!!Is?OJUO!T~1+k=ZvM2~Y`t0ND1j={Xhl#YD z%NYmm@>=uSTs$9h_$66B5CRfQt)|axFZQVz9ULFoQQWtb{_M>be`8heKUseO1(N+s zj6s=xt||v3bCkI-6grqQo75dsgnGh(l^>T{Nj>b+h|ep-=_va2GffiFqeoo13!#0N5@(&;{44W=6&KvHIx0 zZvMlqy#GFVC?8`%y35{i|MfK#Nf_C6F!(lcO^^r(F06j8LP|D*CiL6AzjIA{-#&H7 zKB_&x4+euxxJGodL`S>m^n&|8Dqin$DdSvw*nBe + + + Prerequisites: + + Fundamental HTML and CSS basics. + + + + Learning outcomes: + +
    +
  • UI design fundamentals.
  • +
+ + + + + +## What is design, in brief? + +If you read five different design books, you'll probably read five different definitions of **design**. There are many different aspects of design, including visual, usability and user experience, inclusivity/accessibility, communication, branding, and a lot more. We won't be able to cover anything close to the full spectrum of design knowledge in these three articles (we wouldn't if we had written thirty articles), but that's not the goal here. + +The point of these articles is to give you a very basic introduction to design thinking, and impart some basic knowledge that you can use to make your web development output more effective. It is a primer of sorts, and you should find it helpful, even if you don't think of yourself as a designer at all. It might capture your interest and lead you down a path to finding out more about design — our main [See also section](/en-US/docs/Learn_web_development/Core/Design_for_developers#see_also) has plenty of nice resources for you to move on to! + +Anyway, at its core, web design improves the experience of using websites. It makes sites more pleasent to look at, easier to read, more intuitive, and more effective at allowing users to do what they want to do (whether their goal is chatting to their friends, buying a birthday present, paying their taxes, etc.). + +There are a whole host of different types of design work that go into creating a high-end professional website, the main ones being: + +- Brand design and design systems work, which makes sure that the look and feel of a company's websites is consistent and provides templates, icons, and other resources to help enforce that look and feel across new websites and features. +- User experience design, which involves designing a website's workflow/experience so that the target audience's needs are met most effectively. This usually involves user research and creating wireframes/prototypes to communicate how a feature shouild work. +- Visual design, which involves designing the actual graphics for a website UI, taking a wireframe or prototype and producing a design from which a front-end developers can write the code for the final feature. + +In this series of articles, we will mainly concentrate on visual design basics, and the techniques we can use to make websites look better. There's a lot of process and organization work involved is design, but we won't worry about that for now. + +## Typography + +Typography refers to the arrangement of text to create a pleasent and effective reading experience. This includes selecting the right font for the job, size and weight for the different pieces of text, line lengths, etc. In this section, we'll focus on a few typography fundamentals. + +The mechanics of web typography — how to implement it using CSS — was covered in our [Fundamentals text and font styling](/en-US/docs/Learn_web_development/Core/Text_styling/Fundamentals) module. Refer back to that if you need to go over the basic code again. + +### Choosing a font + +Your choice of fonts has a major effect on the look and feel and pesonality of your website, so you need to choose something suitable: + +- If you are creating a publication such as a online newspaper or encyclopedia, you should choose something that looks suitably serious and professional. +- If you are creating a children's website, you might want to use fonts that look a bit more fun and engaging. +- If you are creating an alternative music website, "grungy" or distressed fonts might be more suitable. + +Also, as a general rule you should only use one, two, or maybe three fonts per website. Using lots of fonts will make your site look like a cluttered mess, and also cause it to take longer to download. + +Let's look at an example that demonstrates the difference between such options: + +```html hidden live-sample___font-choice +

Amazing design choices

+

An exciting tagline to get you interested!

+ + +

Subheading

+ +

+ Lorem ipsum dolor sit amet consectetur adipiscing elit. Quisque faucibus ex + sapien vitae pellentesque sem placerat. In id cursus mi pretium tellus duis + convallis. Tempus leo eu aenean sed diam urna tempor. Pulvinar vivamus + fringilla lacus nec metus bibendum egestas. +

+ +

+ Iaculis massa nisl malesuada lacinia integer nunc posuere. Ut hendrerit semper + vel class aptent taciti sociosqu. Ad litora torquent per conubia nostra + inceptos himenaeos. +

+ +

Another subheading

+ +

+ Lorem ipsum dolor sit amet consectetur adipiscing elit. Quisque faucibus ex + sapien vitae pellentesque sem placerat. In id cursus mi pretium tellus duis + convallis. Tempus leo eu aenean sed diam urna tempor. Pulvinar vivamus + fringilla lacus nec metus bibendum egestas. +

+ +

+ Iaculis massa nisl malesuada lacinia integer nunc posuere. Ut hendrerit semper + vel class aptent taciti sociosqu. Ad litora torquent per conubia nostra + inceptos himenaeos. +

+ +
+ + +
+``` + +```css hidden live-sample___font-choice +@import url("https://fonts.googleapis.com/css2?family=DynaPuff:wght@400..700&family=Fuzzy+Bubbles:wght@400;700&family=Newsreader:ital,opsz,wght@0,6..72,200..800;1,6..72,200..800&family=Rubik+Glitch&family=Syne+Mono&display=swap"); + +* { + box-sizing: border-box; +} + +h1 { + margin-bottom: 0; +} + +ul { + display: flex; + justify-content: space-around; + padding-left: 0; +} + +li { + list-style-type: none; +} + +form { + position: fixed; + right: 15px; + bottom: 5px; + background-color: white; + border: 1px solid rgb(0 0 0 / 0.4); + padding: 10px; +} + +.pro { + font-family: "Newsreader", serif; +} + +.fun { + font-family: "Fuzzy Bubbles", sans-serif; +} + +.fun h1, +.fun h2 { + font-family: "DynaPuff", system-ui; +} + +.grunge { + font-family: "Syne Mono", monospace; +} + +.grunge h1, +.grunge h2 { + font-family: "Rubik Glitch", system-ui; +} +``` + +```js hidden live-sample___font-choice +const selectElem = document.querySelector("select"); +selectElem.addEventListener("change", () => { + document.body.className = selectElem.value; +}); +``` + +{{EmbedLiveSample("font-choice", "100%", "400px")}} + +Select the different options available in the {{htmlelement("select")}} element and note the difference in personality the different fonts give the text. What do they make you think of? + +```html hidden live-sample___starter-files live-sample___font-size-weight live-sample___text-width live-sample___text-spacing + + + + + Design starter file + + + +

Amazing design choices

+

An exciting tagline to get you interested!

+ + +

Subheading

+ +

+ Lorem ipsum dolor sit amet consectetur adipiscing elit. Quisque faucibus + ex sapien vitae pellentesque sem placerat. In id cursus mi pretium tellus + duis convallis. Tempus leo eu aenean sed diam urna tempor. Pulvinar + vivamus fringilla lacus nec metus bibendum egestas. +

+ +

+ Iaculis massa nisl malesuada lacinia integer nunc posuere. Ut hendrerit + semper vel class aptent taciti sociosqu. Ad litora torquent per conubia + nostra inceptos himenaeos. +

+ +

Another subheading

+ +

+ Lorem ipsum dolor sit amet consectetur adipiscing elit. Quisque faucibus + ex sapien vitae pellentesque sem placerat. In id cursus mi pretium tellus + duis convallis. Tempus leo eu aenean sed diam urna tempor. Pulvinar + vivamus fringilla lacus nec metus bibendum egestas. +

+ +

+ Iaculis massa nisl malesuada lacinia integer nunc posuere. Ut hendrerit + semper vel class aptent taciti sociosqu. Ad litora torquent per conubia + nostra inceptos himenaeos. +

+ + +``` + +```css hidden live-sample___starter-files live-sample___font-size-weight live-sample___text-width live-sample___text-spacing live-sample___image-example live-sample___whitespace-example live-sample___color-example +* { + box-sizing: border-box; +} + +html { + font-family: sans-serif; +} + +h1 { + margin-bottom: 0; +} + +ul { + display: flex; + justify-content: space-around; + padding-left: 0; +} + +li { + list-style-type: none; +} + +form { + position: fixed; + right: 15px; + bottom: 5px; + background-color: white; + border: 1px solid rgb(0 0 0 / 0.4); + padding: 10px; +} + +h1, +h2 { + font-family: serif; +} +``` + +> [!CALLOUT] +> +> **Try it out** +> +> Now we'd like you to have a go at creating your own sample site to work through the design articles with! We'll also get you to choose some fonts and apply them to it. +> +> 1. Create a new folder in the same place as your other website projects called `design-work`. Inside it, create an `index.html` file and a `style.css` file. +> 2. Open the following live demo in the MDN Play editor by clicking the "Play" button in the top-right. +> {{EmbedLiveSample("starter-files", "100%", "300px")}} +> 3. Copy all of the HTML into your `index.html` file, and all of the CSS into your `style.css` file. +> 4. Go to [Google Fonts](https://fonts.google.com/) and choose two fonts to use on your sample site, one for the general text font, and one for your headings. Think about the kind of style you want your site to have, and pick fonts that reflect this style and go together. +> 5. When you've chosen your two fonts, go to the [Selection](https://fonts.google.com/selection) page and click on the "Get embed code" button. It will give two different ways of embedding the Google fonts in your code — {{htmlelement("link")}} elements to put inside your HTML head, or an {{cssxref("@import")}} statement to put at the top of your CSS file (ignore the `` tags). Use whichever one you'd prefer. +> 6. Using the {{cssxref("font-family")}} declarations provided by Google Fonts, apply your text font to the `` element (`html { font-family: ... }`), and apply your heading font to your `

` and `

` elements (`h1, h2 { font-family: ... }`). +> 7. Save your code, open your HTML in a browser, and have a look at the results. + +### Font size, style, and weight + +With fonts chosen, the next thing to worry about is the {{cssxref("font-size")}} (how big the text is rendered), {{cssxref("font-style")}} (whether the text is italic or oblique), and {{cssxref("font-weight")}} (how heavy or "bold" the font is). Making good choices here helps improve the visual hierarchy of the page, drawing the user's attention to the main heading first, then the subheadings, then finally to the text they want to read. You might also want to make the navigation items stand out a bit, and increasing `font-size` is just one way to do this. + +Without a good visual hierarchy in place, the page looks like one big unit of content, where nothing stands out, and it is hard for the user to decide what to look at first. + +Taking into account what we've said above, the following CSS snippet makes the headings really bold and the paragraph text lighter (less bold) than normal. We've also made the tagline italic, and adjusted the font sizes so that the main heading is really big and an obvious initial focal point for the page, while the second-level headings are a bit bigger than normal text, and the navigation items are just slightly bigger. + +```css live-sample___font-size-weight live-sample___text-width live-sample___text-spacing live-sample___image-example live-sample___whitespace-example live-sample___color-example +h1 { + font-size: 3rem; + font-weight: 800; +} + +h2 { + font-size: 1.5rem; + font-weight: 800; +} + +.tagline { + font-style: italic; +} + +p { + font-weight: lighter; +} + +li { + font-size: 1.2rem; +} +``` + +This is the end result — note how there is more of an obvious visual hierarchy now. + +{{EmbedLiveSample("font-size-weight", "100%", "300px")}} + +> [!CALLOUT] +> +> **Try it out** +> +> It's your turn. Try adding the previous CSS to your example to see the difference it makes. You might want to adjust some of the values we provided to fit better with your choice of fonts. + +### Line lengths + +Another issue to tackle is that of line length — it is much harder to read long lines of text than short lines. The recommended line length for optimal reading is around 60–80 characters, depending on what articles you read on the subject. This is why newspapers and websites commonly split text content into multiple columns. In our case, we just have one simple line of text, so we'll just limit the width of our single column: + +```css live-sample___text-width live-sample___text-spacing live-sample___image-example live-sample___whitespace-example live-sample___color-example +body { + max-width: 550px; + margin: 0 auto; +} +``` + +We've used {{cssxref("max-width")}} rather than {{cssxref("width")}} here, which has the advantage that the text will be limited to this width on wider screens, but will span `100%` of the width of narrow screens. We've also used a {{cssxref("margin")}} value of `0 auto` to make the `` site in the center of the screen. + +Adding the previous rule produces the following effect: + +{{EmbedLiveSample("text-width", "100%", "300px")}} + +> [!CALLOUT] +> +> **Try it out** +> +> Try adding the above rule to your own example, adjusting the width if you need to. Be careful not too make the width too narrow, otherwise your top-level heading will break across two lines, which is bad for readability. + +### Line height + +Another way to improve the readability of your body text is to add spacing between the lines (known as {{glossary("leading")}} in traditional print typography). In CSS, adding this spacing is achieved using the {{cssxref("line-height")}} property. + +Try adding this rule to your CSS now: + +```css live-sample___text-spacing live-sample___image-example live-sample___whitespace-example live-sample___color-example +p { + line-height: 1.5; +} +``` + +Note the difference it makes in the readability of the text: + +{{EmbedLiveSample("text-spacing", "100%", "300px")}} + +## Use of images + +If the web was just text, it would be very boring. Images are used everywhere on the web. Some images are content — they are part of the content the user is consuming. Other images are decorative — they can make the design look more fun or more informative (for example, icons), enhance brand recognition (with a recognizable company logo), or add texture (for example, background gradients or noise). + +Too many images can make a site look cluttered and also make a website heavy to download, but just the right amount can greatly enhance a page's look and feel. + +Let's add a couple of content images, a logo, and an icon to our site. + +1. First, find a couple of content images that you want to add to your site, plus a logo and an icon (sites like [The Noun Project](https://thenounproject.com/) and [iconmonstr](https://iconmonstr.com/) are good places to find logos/icons). When you've found them, save them inside your `design-work` folder. +2. Next, add the content images to your HTML using {{htmlelement("img")}} elements, for example: + + ```html + a description of the image + ``` + + Add each one between a different pair of `

` elements. Make sure to include a description of your images in the `alt` attribute, so the content images are accessible to people using [assistive technology](/en-US/docs/Learn_web_development/Core/Accessibility/Tooling). + +3. Add the following rule to the bottom of your CSS, to force the `` elements to fit inside the ``: + + ```css live-sample___image-example live-sample___whitespace-example live-sample___color-example + img { + max-width: 100%; + } + ``` + +4. Add the following rule to your CSS, to add the logo as a background image on your `

` element: + + ```css live-sample___image-example live-sample___whitespace-example live-sample___color-example + h1 { + background: url("design-icon.png") no-repeat left 9px; + background-size: 32px; + padding-left: 44px; + } + ``` + +5. Add the following rule to your CSS, to add the icon as a background image on your `

` elements: + + ```css live-sample___image-example live-sample___whitespace-example live-sample___color-example + h2 { + background: url("lightbulb-icon.png") no-repeat left top; + background-size: 24px; + padding-left: 32px; + } + ``` + +After following these steps, your page should render something like this: + +```html hidden live-sample___image-example live-sample___whitespace-example live-sample___color-example + + + + + Design starter file + + + +

Amazing design choices

+

An exciting tagline to get you interested!

+ + +

Subheading

+ +

+ Lorem ipsum dolor sit amet consectetur adipiscing elit. Quisque faucibus + ex sapien vitae pellentesque sem placerat. In id cursus mi pretium tellus + duis convallis. Tempus leo eu aenean sed diam urna tempor. Pulvinar + vivamus fringilla lacus nec metus bibendum egestas. +

+ + a view from a jungle to a coastal headland, with the ocean beyond + +

+ Iaculis massa nisl malesuada lacinia integer nunc posuere. Ut hendrerit + semper vel class aptent taciti sociosqu. Ad litora torquent per conubia + nostra inceptos himenaeos. +

+ +

Another subheading

+ +

+ Lorem ipsum dolor sit amet consectetur adipiscing elit. Quisque faucibus + ex sapien vitae pellentesque sem placerat. In id cursus mi pretium tellus + duis convallis. Tempus leo eu aenean sed diam urna tempor. Pulvinar + vivamus fringilla lacus nec metus bibendum egestas. +

+ + a view of a beach and some mountains across the sea + +

+ Iaculis massa nisl malesuada lacinia integer nunc posuere. Ut hendrerit + semper vel class aptent taciti sociosqu. Ad litora torquent per conubia + nostra inceptos himenaeos. +

+ + +``` + +{{EmbedLiveSample("image-example", "100%", "300px")}} + +> [!NOTE] +> Image credits: +> +> - [Design icon](https://thenounproject.com/icon/design-136378/) created by [Mon Aguilar](https://thenounproject.com/creator/themon/) and published on [The Noun Project](https://thenounproject.com/) under a [CC BY-3.0 Attribution License](https://creativecommons.org/licenses/by/3.0/). +> - [Lightbulb icon](https://thenounproject.com/icon/lightbulb-7518269/) created by [Asa Kharisma Dini](https://thenounproject.com/creator/diniasa528/) and published on [The Noun Project](https://thenounproject.com/) under a [CC BY-3.0 Attribution License](https://creativecommons.org/licenses/by/3.0/). + +## Use of whitespace + +Spacing out content makes it easier to read and more visually pleasing. It isn't something you think about when you browser the web, until you come across a website that doesn't employ good use of whitespace for content spacing. Such websites look cluttered and messy. + +To get an idea of how important whitespace is for a website, try adding the following rule to your example website, which should get rid of most of the whitespace: + +```css +* { + padding: 0 !important; + margin: 0 !important; +} +``` + +Remove it again before you move on. + +> [!NOTE] +> As an extra exercise, you could try applying this rule to your favourite news or entertainment site using your [browser developer tools](/en-US/docs/Learn_web_development/Howto/Tools_and_setup/What_are_browser_developer_tools), to see how it looks! + +Sensible use of whitespace is also good for separating out different groups of content. For example, the `

` and the tagline are both parts of the page header, but they don't seem visually associated, while the navigation menu is a bit too close to the surrounding content. + +Let's improve the layout by adding some whitespace. Add the following rules to bring the `

` and tagline close together, and add a decent amount of space above and below the navigation menu, and increase the space above the `

` and reduce the space below it, so that there is a more obvious separation between each document subsection. + +```css live-sample___whitespace-example live-sample___color-example +.tagline { + margin-top: 0; +} + +ul { + margin: 44px 0; +} + +h2 { + margin: 44px 0 8px; +} +``` + +Your updated site should now look like this: + +{{EmbedLiveSample("whitespace-example", "100%", "300px")}} + +## Using color + +Effective use of color can make a big difference on websites — enhancing look and feel and brand recognition, and helping important content items to stand out (again, contributing to visual hierarchy). + +There are a lot of articles out there on color theory, and we don't have space to provide a full treatment here; you can find a useful exploration of the most important color theory at [Color Theory 101: A Complete Color Guide](https://www.colorsexplained.com/color-theory/). See also [Using color wisely](/en-US/docs/Web/CSS/CSS_colors/Using_color_wisely). + +Essentially, you should: + +1. Choose a **base color** — the main color that is most important to your design. +2. Choose other colors that work well with this base color. There is a science to this — the other colors will sit at specific points around a [**color wheel**](https://www.colorsexplained.com/color-theory/#Color-Wheel-Theory), relative to the base color, depending on the [**color harmony**](https://www.colorsexplained.com/color-theory/#Color-Harmony) model you decide to use. +3. Use color sparingly, to highlight important parts of the content, or to enhance your visuals. Don't go to extremes with your paintbrush, otherwise you will end up with a site that looks garish, where nothing standards out because everything is colorful. This affects your visual hierarchy and makes the site harder to use. +4. Make sure that none of the colors you use result in your content having bad [contrast](/en-US/docs/Web/Accessibility/Guides/Understanding_WCAG/Perceivable/Color_contrast), which causes it to be harder to read, or completely inaccesible in the worst cases. + +Let's make a few color adjustments to our design. + +1. First of all, choose a couple of complementary colors. + - If you have a base color in mind that you want to use, go to [Adobe Color](https://color.adobe.com/create/color-wheel), choose "Complementary" from the "Color Harmony" dropdown, then edit the first color swatch to equal your base color using its "Change Color" button. The other colors will change to equal colors that complement your base color. + - If you don't have a base color in mind and just want to choose a couple of colors from a given palette, go to [coolors.co](https://coolors.co/) and use the palette generator to create a palette you like. +2. Copy the hex values for two complementary colors and save them somewhere safe. +3. Use the WebAIM [Color Contrast Checker](https://webaim.org/resources/contrastchecker/) to check whether your color choices have good contrast with white. For each color: + + 1. Keep the background color as white (`FFFFFF`). + 2. Enter your color's hex code in the foreground color input field. + 3. Click or tab out of the field to run the test. + 4. Look at the results. If any of your colors fail the "WCAG AA" test for "Normal Text", then you should choose a different color. + +4. Provided your colors are OK, go to your CSS file and add the following rule to give your headings a highlight color, substituting `` for the hex code of your first chosen color: + + ```css + h1, + h2 { + color: #; + } + ``` + +5. Now we'll sort out the navigation items, once and for all. First, add the following rules, substituting `` for the hex code of your first chosen color and `` for the hex code of your second chosen color. Here we are giving the links a block of background color and removing their default underline so they look more like buttons, then setting the text to `white` so it is still readable. We also set {{cssxref(":hover")}}/{{cssxref(":focus")}} styles so that the links change color when hovered or tabbed to. + + ```css + a { + color: white; + background-color: #; + padding: 10px; + display: block; + text-align: center; + text-decoration: none; + } + + a:hover, + a:focus { + background-color: #; + } + ``` + +6. The last step we'll take is to make all the navigation items the same width and evenly spaced. Add the following rules to the bottom of your CSS. Your CSS already uses [flexbox](/en-US/docs/Web/CSS/CSS_flexible_box_layout) to make the list items sit in a row; the {{cssxref("flex")}} property value of `1` makes them all take up the same amount of space, and the {{cssxref("gap")}} property puts a gap of `10px` in between each list item. + + ```css + li { + flex: 1; + } + + ul { + gap: 10px; + } + ``` + +Once you've saved your CSS and loaded the updated result in a browser, it should look something like this: + +```css hidden live-sample___color-example +h1, +h2 { + color: #9b5094; +} + +a { + color: white; + background-color: #6a605c; + padding: 10px; + display: block; + text-align: center; + text-decoration: none; +} + +a:hover, +a:focus { + background-color: #9b5094; +} + +li { + flex: 1; +} + +ul { + gap: 10px; +} +``` + +{{EmbedLiveSample("color-example", "100%", "300px")}} + +## Other concepts to explore + +This article is long enough already, and there are other design concepts to explore! Some of these are implicitly covered in previous sections, and others have been covered elsewhere in the course, so we will provide a summary of these below. The aim here is to get you thinking about these concepts and how you might apply them to future website work. + +- **Position**: You should position items in sensible places on the page so that they are easy to find, and effective. For example, a navigation menu should be near the top of the page, whereas a [Call to action]() such as a "Buy now!" button would be better placed at the bottom of the article or advert it is associated with. +- **Scale**: Consider the size of the different items on your page relative to one another, and adjust the sizes so that everything fits well together. In our example in this article, we made sure that the icons were not too big so that they overwhelmed the headings they are associated with, and we adjusted the heading size to make them stand out and improve the page's visual hierarchy. +- **Alignment**: In this article's example, one of the main reasons the design "works" is that all of the elements of the design — headings, navigation, paragraphs, images — are aligned to the edges of the vertical column, resulting in a layout that feels cohesive and neat. This is easy to achieve in a single column layout; in more complex layouts, there will be multiple columns and rows to align content to. Aligning to columns and rows is the basis of **grid design**, which you looked at in [CSS Grid Layout](/en-US/docs/Learn_web_development/Core/CSS_layout/Grids). When placing items on a grid, you should always think about setting their margins, padding, etc. consistently so that their content appears aligned. Otherwise the design will look messy and unprofessional. +- **Visual hierarchy**: We've mentioned this a few times above, so this point acts as a summary. Essentially, you should use position, alignment, scale, color, etc., to highlight the most important items you want to draw the user's eye to and create a hierarchy of importance as the user moves across and down the page. + +## Summary + +We've covered a lot in this article; you should now have a few design tools in your toolbelt to inform how you place and style items on a webpage, making everything look better in the process. You can always refer back to this article later on if you need to review anything. + +## See also + +- [Applying color to HTML elements using CSS](/en-US/docs/Web/CSS/CSS_colors/Applying_color) +- [Fundamentals text and font styling](/en-US/docs/Learn_web_development/Core/Text_styling/Fundamentals) + +{{PreviousMenuNext("Learn_web_development/Core/Design_for_developers", "Learn_web_development/Core/Design_for_developers/User-centered_design", "Learn_web_development/Core/Design_for_developers")}} diff --git a/files/en-us/learn_web_development/core/design_for_developers/basic_design_theory/jungle-coast.jpg b/files/en-us/learn_web_development/core/design_for_developers/basic_design_theory/jungle-coast.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4fee19107d07fabf70a1490befa38c631cc27764 GIT binary patch literal 88464 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 z z7JwRQ(gjln14dMNgF7%-itu-rG1|I7t)?nij29hn(Mcq++H9frw73y=Gn5fsrwc-% zo-1P+w`c=^9@(Uk);AE!-PagdS4#$l$Pysc+V$=v4Iv31mxXZhY{gMgF$(I91VP?e z1{Mi88-gsYCI0Y8%orY6qkzg7YH#_k0v~CvxR)oTTi%D4QLrlI&=DtJIQvSCj6%-Q z#-d4fYnahGFvR!JM;K&7AuNj)%yB~RkdYdSOtdSR0WvlT3Iv8}2qUo8&XMZC(Gp0l z(P;-Fq+0--23UBp#>J$D6ShM`KV$ZeL!ogt#RAHi?IUjYP`K?#)inl2-sQw=8hy>( zfa(;?cDXC5%fS>^7zOq+GD(sK%LykjtLzP*8nS^Z?H-~3g6b8Zatuit~jVsz% z%_}%Dy273lzQ>VK-KLfqBZu&2W|H87fryRbDK}|~SXmXyWuk^<7#ep7Vq>YgXlCGO z+lAKER^s9)Q9xMsmS_d2L{;U89zJ|*(_N{FQBw*O&Y&b?Xx>=YDH0XAgtO*2@mOSH z8GDu&U`Q0GH5)ip(U_fj)-Z8O+BSY|ZN&R^A+Pyw0ldHwY)Q>=yhT;eqXM14r&~@F zdV?TFFDCPIMR0=+JY83jYW^883GS)xZdxc(Sywjl24v{3C!f5IGi=J7aodZ+Ssgc6 z{{TO6A6gO8!pEsyYS!0Rl{V`gvnslBf>tJ3{b>da2^$VWscG%k?q?$Ena&mk)JYwQ*l(5^|UCf+_qJ0wLD8s0K4|y-l(P41@n_We!Yb0{R>S!2B z(@AhyqhV6tt02JZ1cnHbEVgC3Jg7$W*J&}0!WCz^aMJ10qMP|-1vLvN6sS9kyqG&U z?bSgVE(G_&7>ePlE33Mr!I(ute~!Sj$TKosBdv$YaM|Aqw4}m*CkHY-SLsv$qqLCzMS0bQpDfbdriKuI=!pv&xylm4fl5D|s+q4{0&aW6o z&H(Fy><3aSCsH#_D>OnpoqayN39PIwl_BXE^aZfCmyZKCT%s3P)NVywUuD#xaTTTf zcjiQH%JC@UisO+c<*66TOX+nso+}%YW`U(()-b$`1arwhibA%BhY}wQ@f(@v+sksS zcWLKMw2_388>>$dh0-Ecgx2v~@XK)$T_=d!LA%cS8N5ar<<=QjZxNa&$(A!AhU#Lj zyE_4WBryV~kjrt+5gdbzMY}|Mb#`c(CkL_ufn-ZuB8?f7rH!g^iTZW_VQczE6E#4b23{($ekKvDqZq!Sjna#kUuL~U)`OH2~r=V4hLG#zdVOiIMz*cnaAj16NVM~MAZ zGO6h)HM}yuslF5$V$%meA&1l(7Ukt+5=%=GN4$ah%^pG7l`7sA3RQ?K5m1a{V6nO1 zRtK|h#3~KIV8AfM(@nCK9R=%LL{$-mLP@w}g<3eBb=oyzM6tYsa&R6rmt>pc!+Go&?|E*Djix^X<;V>m?rGyZt7KtNX@of1NU^M z3o|r*7{Fge3nGaO&Jd@w%FEUq5N482hp8~fB;nM^1aZd3Ace-(@uZTVxR@f}z_wF1 zvu-&zfx&HoJxgO1lopD5mWYQch~s$RXJO3|HFpKMO$!OT(G%@JV1rqT9s1p2^h<|YDx@7OnFzgQ6C@6q|Gl57|YTqx8>fi zZR1voF(*)CRdqp`AmnRvq{g27OKZ7ax03-2aLRUu{osyRUHhcJdAQ?n6(b@@9iYrY zOJ#hYB-Y%Vd{moB z7ZRpPzC?mm&?6=Muxll_U8lIbit}l~59$jify8lU zMUhd1*9ev_XyoE}b1LxUiA0;Ag_S}CcxOUn)na>a#@wSS7A*%BJN!ECD^WALApN491@z|-43z0lbPB1Bw?VU44fIW`K0dxgo+Zm zRE0s>*E1k)<@BYOPVc6MB>;6=iC3(1A!JL$l2aPC4A#L}U#AorN0=MbZ$w+0lD)G& zAZS7mC1-30t4Q2HBNBmIh@60Xw9|DNCOaX*+w2?5?B(ADr;b4}XHd~xK-Ubd)D9Gn zJsL8q11l%At*ZjM@5mdfoK}djFgs;6XZnGuq|aRl5Rhb#DVBr8p4cMK2O|zR8796^5BMK<`8C@=GI%r^%)Js zYL0ECSeW@{5wbX|Rkyd3k+qUQ!s1r)&8;FEn64(7G+`uYr_wk&NTx{>yD!IwT+%Fy zY)FKdCxzv@+qrG#@Z&4Qo>)O|dExg^%FJPOMO5To{>~(~wK5rTD>6GXY8In;7cp^~ z2n-`kZEGh4s>oY0l=8kVd34?ZRSrd@$jK(CYf@Nkx**q zW;%y3&G=UBh6HsCz}7PfVyGxYSxX8LN4U|lvnGyk+gI-O7nP1CcU|ghV{Im{_>kSb zsV@tKaMrU2l4x2wD~w=NNSZv7wI2C0%;q>P#P=}3%od`VB-Y62T1VW<7-5Ci6}TL0 zyf^YmZmTbHnB-_UokG2ora0IP=ETI7^WCuQS@~iy$TLty=4RD&00|)6K1DcGm7(^j zK+Gc7@#J*4h^&8B;ybb3ik@KbZb8JMiRjpCZ6>_+R|-?}2Qy5!5RKH6B=H!U7_g=8 z9^U6D)h)%emVZO{}fgxj!X=kKS|QlYcT z&Tdq!P#Os`?gFqDu=7H8XGDhL*|8eS8GjHF{{Rya#kUYKMHWwFaz^NPVhdPF5^_5( zt!F&a-AYwe>EkL|4RxfQQR9MFDlVah-NJ#=CXE1#2Z5Oip$%6p9MZ)S!gAgm{$H11jU0!MZcN9vjK>|e@b5U-0JrbU z1|x(iHgJCrH$RA%(2J0PZWKMmnkCdr@bdYIBveolB9b`THej^Vjx6LD`26S!33(PD zE)iUMu!NTfj}_Jk-rQzdx3lwBsV3?>GHg6ZV8E*8=z5yhOK;k7m{t>r!4T*+JCo!%m@wQW-AxZJC^`zF+9V+AkxL z-rGwqaJ$s2tci(K)wEN{r9Qe?M6B{Y9<9W2OSCd@kzPET%uezCqtj0NtirV<960#$X|qt4p(+C=VR zGF7B36gSfmjFk@htDGy9t%*Hq!HkZO&c}>JClj+KQq8#RomAx|SBH0YV#}_QGW!|I z#U-+nRv{&5;s@1-czh;VK9`vDS;;Wyp@qq~O#0Tvm3CP|%E6;t88Gq`YaPlQz&9lC z(iwN3Bn{;TNs$?uYFlvLxmf0II!F*haOOqce9JQ*YJr(ybJS7Q5?m8YgVgk= zk`$3+b>11{;C3&yT1M|Gc2tq@FC(3kNQ|o^vtruiOiwE+lN7+PL7H|8CWp15MbjTs zEUS$egF_1IG<_>vGU$SgoOb=kp*`erinpJM%IE<(Br_tja^vbFaU3p27#jC%FaX;} z8W-ucNYU~FNh=|Z6Cn&~%JDSIhuUeSjpQpHph6=_gAxtQv)!EnuniJPWL8oFT5!b5 zw(*lQT=|g-nCU!6(vr>X#+MPmgG6N2(`_eg0nTCv3Kmzp^-FKLhE;o&cq5n@xaDMY zi_!Bj#9kO&yiu6)6l6y67}M=xJQ6g*c&17a+{a*|Y4=ySbx!F3s~IHBO1a02T{_(B z835Y9nMPa!)|XRpy0Ah-aok;VGpbdZJlC?pc>HmAoE9tLkL4qM_Pm z$1IC+22Vj|mg3Nbx7)M}~J zmwaM%acP9O4mRYFi1UtETH7fZ0STa`Tc}a8CI)2okle(@>968x~`B@VTV+bx;oJ8Dd ztnl%$Qoz$3M!2Eesu!h4a4syaLXT1j;Y&6Snv2V~vpGyPLvw%?aG+ZlZeo=2?Jcpe zk`QIgvR$aOjZA!%<5zJ36eF!!<5!i5X|j<`s8CRD0N8CAE|D;evX-$k-3ASiu6)9% z*i@1{v0AiyVmKtcCCfI=8yk(JeFHkRwCEHHc*vG$#?1p;tU-*OQfN5ZK>ZTkLxQ1= zPYjd5nzl@{gn;cHBZr7GNyy7sHjX96#brgdAOsEry{AMpp_F#1V;X&2i<7eQ7)|5L?&2V zT*qvr^E^^A+P&--uwf-jbz-Y;9GiHIP}#yVP|bI5%i+-5sKd-Wv?&}Cxm$ZNcnF$q zD11WJYY36{EHC^mlH~C=Vut2eo;diS)J?X=F&t>Fmhw-?Ra(Y5B^p}G6C3d)JW;G- zVR;plcDC16!+LnkG8ZQXNRk$|F5ng8GUcQk77@pHmw0to&`qnzn7B*0oeEFAMwhc% zw0+^#jiSO{JjF8!7{c0>xj?6)C`^9+~7|S&b%3V-*Fu%N(qA6v$BE`@#s7Xh0)q@OG#?yZf9;IY`-;lCNa+ zl=Na^{#RBtG#bYtZ>G{Ul!E;g5Waf`AwvR}>R!nbd9X<};sI0z8P?JsLmEuTi7pZW z0+uy0aY@otkeh%J(f|TUXUN2)p_NiW7ZQ49kt2nEDtS}0QUY6`m0xD5NVN-%nvJfl zG{vzTF+I8?v*m4whrf>%aUw{mAWSAOVPq#d1Yk2JCYy}}V6!SeE}XI)!EjQ1L~~Zn zhj{iXFCYpIvM8v4LhmYUI+(tIS_oqpTG=9+IOWJP$kEE0uB=8wM%<-1&C719%ETwF;W8W7Fd%en1~{ZlRJ88vc)iaR*m92 z+`D$i&=-;@)!Q{Pvtu-1vh2FHuc#bi90ui5y9BV*F}&noPAMhVzm%fDvgV@OX8@+D6ey{7!i#+EalH zs@6$`3cgtKq=fn>lwHr5UuZ3D$+|~BeUz1UW#F8io5~N*QwB$mZ zvMQ*^kVLbxeUpA68YCQdAQ6mBCB%6C-XanQ%V*|WeBX#7V$$GEQwRWl@e_ob3$i?GZN1?me{-P zTwIe%v5uCHi-M`1ITh`R(lwoAfnc}@fHC6YhnQly;h1jcs=1Jkjf-i7J?fy-O9}5{ zDG62$k(eKm0=7j>ENZ4Mrj5?*7Cm954|l||ZMvvgy=F|xVRvAq;+7eAxg5;mJ8&hQ zD6^DP1pYKuc_c4)Xu^HaF@jH9V>7;kp>pX9xXo0n{Nh6j-NZ^n7oblZ!6pdif zO5sl(EMZ{bn1!dD6#QjcvyaVNn7MdrHA_gmylJd9vT{CBGr=?uXX55a{Ux>!acg%I z?+qJUSB^__Bx-DIrBrKR>MO-gIS{dqSo&02 zyWB6ji#b*fW!33n2O}Y>(3iN1G$akcfDCuTZ_8_QG}+ozD+>anD#kWa#@Xl> zmnS;B8!Mqbkt!$Q^+sdoLLxF%x-FgJ2JdL$lH%iI7z6Okmap~lgt22rO?DwmQrXEn zfsjlW@u*J(n-MTjV83=`3%@7^s&vHtU~CYzYA5FH^&D zC$BUS3bnRD;xVLzv4+*}ZskD6B(;zDe1b^>%`9?U-NNv2v~x#$^Dl?3vNSHtCW>B` z7To?Q*prOeh#-vKGOx;Px> zR+oJ1d;HDv=))?$YBMaiI4$YRYNU#|xIr?-2w3GYPYllYP{oC~jo<|nj9kyOMPtJo zhgDd`%xlidB?_?>4{vwDBYI%Ol5!zY5|b~ZH*wmUXM8I+ZyK$?M)e78vU8M}#@Xwe z$rkQ4i3;v-Oc6%VnOMtujSP;;oQwD+_3mn2W9C%^#QROOheo|@!(Gt zt?ZFc8E6u63FuCq9t4owMeJ>?@Jv@SaWC@kb?L=gELoEg>fW)EMNk5vd82P?AE{|e zliI9H-WWX~2vr@%K-N1*qKaJ>88ilVa9-|hi2>>fWG)s+ zgHX2Z5ed8Rqc0-cLP#lZD#T97wagJ1{J%qVs85Mks?^el1yTb2*NI> zky0q&3B7uevMjps@$YdcP#hAwyo-WmMi|*#RFUXFE!dDTiwf*2<4|8$>BJrLp(pp^E~!ys+FS>y7zMl!%ku>hR1%wiHUJ;YZIN+pz#M+ur>WqVH$;^br0 z4-}3v^37#$Ja#@rA-uATMI^IE_jm)c?P7sQQ?*MMmxeawK-M77Y?kZv_*I+uwa+cg znS$CV?(f^n#*x7(LpvlZB%yBZqnFnpppNS9DX#crk_ko1K&tzQtx*VY`)<+Ue>KPqZ7A+SptskRx zF}U&7B<#1IF1D6$JY#o}l70)KM?C%);q$<6w!ybcSp;mQ^@*8vSWqQh#jJ40CZr_r zXsYF=ieqjq*(!43}+|YdmM6w?new$)Oonb)T^zOrjlXeP?mP$&|D{UWu@5ZT5)~yH zm3DY=sK%|w1%=6Bnnz2W(C-whC#a!i6>o10*1;S$@>=QQQK*wN*APz|+_bG4`dbEv zp1eBZce@d>BwkBrDwhT*qPANI;^m%5_zk=h-?H>%yMp)3vRk$zfgi)-4?4;z?#;lr z^`d(6kuBZ4QXWc6{{Z1)KqC(?hq#0NFD4iV@Ua;1`J5W?V20@>dD~klV@tR2>%bju zrknjeFD-=o+C_5((3UkBS=2{z%8Cf^?+}*K+0CNDU&H)o#jj=6N-DXO-j?GL%PrXR zeyj;KNpLP*5SZdy%eAwC;EC}(F9(;7E2nbadfGYO+70-8He~Y`QfeutcC;`iS)xbP z4Dq6`I@_s$w<1C1Os&FMO@+f7c^5@BBp1SDnn)5sDc*8|Ae0#;;#HkZbdjYFho0Ii zX#}x|<$3~X8b}Zx8)(cdSaukrit_Q=<@nUzLh)iQ)8Y!ZFl?woWngwD+ngjYT-pO| zAxUK0NZV|!t-v;DWqdWmEPfj-Q%1=jg<-i-P#ReLsCls)CEbj-R(#OK5>%PY=$z1gflbx2)wcg=DJu99=9o&m6I<}W<|)t$@IC9 zuvs9IG`5s9d1jl2#whKOgJB7@7@a_GC+6jO2_lDwp_!pFI=6=SN-MvbW#aKWn52u2 z+8q|w1%FaqxUO%emenE=go40enU#e~Srw8Tvc(eIYIMzi)ToUYYm6CA6sTk=MlCi!$&mnICxj>P3lb!1k` zN~;}%%Fb#T;*#l5TPiHW%s{e%fpV-691RgQ*_J?!ByATcdS6@s z$>A2mVy45xo6e+?j!14GVHvpH2)Box(T;n>Z*LTmNe*2yviI_F+3X{jY|Na?D?<2W zid(5=mr|-^jtLQ^k@Sj1b>VgrI<~SKK2Bif*heoS!Z1SwhcR_G8(tEz=gRpfv+$Q` zKxyWIy0c6XBbHZ%7B*cOE@KZp#iG4QW~L2{g{|%`M6sh8ACALFFQK}8@!z<*Xd-jP z5=UaBq-SI1rV=8*6QB@;&VKHk5Cz*?!ysjBxMp1%L)wS0ThywvDUL~VxE{amY=Z-@h zWuDq;qq~oi1@#sOveM@69hN{IF>n`+m~gmOo!H&V#&p{yCcL$KS#)lcBPTs7=1xaW zHU(z6;b!8_OtJZWF{x3DXrtexM2*ZO8lDM6Tn`i~?;IZSqlS`iC>8M4Jgl*eUFo)2 zPOT(PB$g?nmP7`loPjIwhmu=quV>7R%J-~2(crI1+AhS zXs=5URvY?)+SMLb2|Hs-OVKQla|B9-IAoGx8|^1F5WA^fC|WyTFxxOo$A`#Trgl*9#{)?W zxfkXiWNf zWPx5lQ8^Uq97h(@KvmBKHwhepq<4|W@H+&7JA78rq$#AQPYnKw7yCM5 zuY68xXWd_Odwu3*f?Q>q5+hkU1+;@V@k4TRP2mvR#mRvzR>iOon*RV$o!&Ust*4UK zbeb{)>Hh%SQBWD-@qY~|a{}AKB8Qd~;^EtoY}i0$;dz=^u3@y}XJ>}~Le{pkBX?d~ z!*gwGG*P5-c*Ms1!F2A$yrZFJVzp#8laGEin>Mh*=^2(wnaW1e$t;F=10skdDH2*; z8)^G-i3t|4&k)4dSBr7rkdx8vZypt!5@;=@h@Cjf((z4g#`hDv`f%AZ1O}jXDt2I$ zZlQanD|^yIgRV<}f2?@@hH)PI8Y;l9SC{^dPe`^Q&*?bX-zIciVo zUZeK6tAF~6hx)G(uM+;-N&Pj|S^Ljd{{YoZP5m{kNBu|P?@`zL z@mGU?TNO|J;;sJxussjLs}JjNzG?f>{C-)YpKMwMz{-J4qw#ice0C0+?`ktr!D5@Xn@9X}W@~*!U z(udVGcwhBmt$(!1QU3r}eNum0B`@@Xt-lIdgZf6J_#&733z~=eRIdyAWvkEYJR+|@ zvBOXOI@RCyI-C1ll}G)iYG3I*9=uQb*lWT4?<&vz+VNlN?yJN900Q!%`mZYI{{Ruo zR)5n;QU3sMyQn`AYEO#3{*JD+O0np%BBAR!_Qy!_Z8y5)kk0L$6g2cehXJ# z%|r18cxT|jULpOi;-C9XL++Jl{k`gc>gB5+#*Vx<>1y$Rz)HRP;imeZGq0{CMlay`-i7sVM&daZ11bwyysG z6>4w9r2gFq)^9e@AC06-7`0RsXA0|W^K0R#d8 z1Oos800I#qF%m&hVFMy@5Hf+06GBpQZLIj4l<`W1wgc`2< zn}&=rWa2S?1lC~Z020}y5hZM4by`nm!ERSol)JO`mAFIIHCq6+Ud!BI`6FIN8ZB)L zS|8~h09(0izmOkw`+G*qqVQT%v%z>R00C&c)@=cG?9&qcvgN6PK3$z*X^ZC{uVvMK z*9FydT~|fWuAQ6yuAQ3|*YtGk>)EpF+1K=Ly7u&47f;gCT3p&#?3;78wo%oc`eoZ=x*%Hd&j>+a5w!T^B{SXGPPuVcB)nSw6(O@)nKa0<$7Mt4uPsYT2t**R!v0?Sd3$C3Fa{;<|Qe z3#Vq?yLN5c(DwCP4$W5moe=ET^z>ajKZ@RqVnW$S>PX7y5YQy7qUzQO>_LI z_n_Ej$otp9XGx;AhMFQ{5EN$nrrXuUN*LF4ZkZwET*q`Kg6s~0?<~Ai=x0x&jEwH0 z3|0?BePEgdOGZQPj@DVntxuw0G$Jqd_^ZQdvS`9u(ok&S0Q3QFjfO$zZT6Q<37LvB?I-bs}K-D;~%GK3fJ9l5lv!dv> z{T)`gQHqvScJ*CXUd_+w=(;2OWp(V+^>ys)+tF^`&XL)vh1G1d9iHW}?bxoXa<+xg zE};PcMi9g(b}QBNxQOzyi6M-`J_wv{mc}U206iO`fpFc3QG$1FL!?Sh#Rz!nE z?2MOKKnZc;7ykfD_c3Gu3SuM^@$AiemO@a;{7SB{w3WGCSMu!Z+qZ7Rw`H$prES~M zbnNNb(tlTes9(#sr|9ed0MOjWXGPPu#4XQe?kmT$qSF%5bPK2H*R|2zZ5EOBs+t?` zblWtGDXRuyPb}NSWKo=LC%o^P$BnU+^hcG02P1SpWd)~jerx{#wK;gKSX%s02j++h z?o|2z0BZFaZh(*@yp6X;ga=7Zsf?2ktxWRss%NX}{gE+Svo!oC5k_5ww3B>KSb%~eure+gGAQNzcxo}6gJHoK?;^Bf`!(f zzDPJw3R^`u<6RJWd4qJ}hncCsKm_vb`Kq&=45yA>7_GNXvA!Kjb7~IBhG12(*Gi$A z1rQa3sI$P+W1cBz6lk9(GwVbX&LlU>u8-O4La2t6&1*Wj)4=0h5%Cqy2j|4 zf};!_7KlNq$f7T*;ep<$F5NlO=C!d4QANTxIZB^YU&Rj}C70$)V=GKctyYVtVc88R zh|OjLY_*o4WRQEU$xL#l#I?AkJHs?J3RXZc~-Ko zb*+0huV;$tx-HjPU&U|Pw_(^VfD5YVw~pOMZmVZP{!95Ty`RZ%+qqp=Sz9j!trqK` zLvGFLx-Ej=^ljPGv_FtdKedmUk3HC2PA@o{Ha^MYHqd4^HO<(kFfMtv0GCk|E$v2BgFDAm-2YfFLmQ09oqM=)c3QCCS#hQJp(EHeU%oW%+f zhK^eVXdZp9qS3Eb!rJ+vK-@uk#5{YD%(iN#@DQXB7PniXeQK3|@bK=b1hzjlP9WMa z?A(`l!{jaEKQvn5T3LT3pj)i~r=Mq4usxawRcqU%E~`b+bv0W`+KYE~YJWxSww14M zR64KY+3;OEG=-*Xs_WUh_bo$Lmtb91!Dzbnbp0KFM_$d!@Ld;A(WTH|$sPMNgkm&Q z#^wrn19e-_5f@Vv5g}6+j_4EJ0|=l~2$0uOa+zL+T z7EHWkRiuf5vV0Nf;KAKS69*!J%++2(kl4~!c+SS&C~|}>MV;qm5~e&eLDXcE1IDWk z8d(#FJWx*grhw2uJ$z?%6H|VgqK}YT%GW;6;!GF?F*v*D^;W|!qc;$>?`=Li>mNjh10iS zhKoYFFD3g{=d)wmqVg-JX6vVCMXP%}{{T+%wkt(un|si^nAn|q^-d6QTA8LmEe2!e zjNx-k7kKQ9!1j%o4W;gR9L#U-Iip$O*W8~Cadij-?oc>YxyBNjNybdc*T_O~4iR3c z3K2{?c&NG-Y!fHK%K&*ZYS{rrhm?%9M#VVDYfTptaQjXxgz4ZgS?=Fu#H)jBOw~AI zF=4VM(YN42l1=a3bU^C9UwwsYTGjpHDFH|*)z z&@C{8Z!2g{9gjH{n zuXq?96Yfnoc#%rxt{N6VBUIvE_W?{YD2pS~I-(^qBr}R6X-t){%}>=C**>lYp}7U1 zC<=oVP3a1I#odD*?98R+5Ixr(qWcR<3M&(RDW}1yfAg{Z^4g1WQqDJUkK(#Pw5NCkuuf zT@!2@gilmR0J!Cps1h)U-gWpXoe|IEwKNi)BLu{*A3TevKG&~bveddjQ-sZ7MCsJ4 z+RJ6B(PDz=xctc$2{Y>*LduwGjVe7u@sN%M(QUW_wU%0hef{s%^r&Ibg?AdfHNLww|%XXEZZ`pZv zZhJOe7e%e5Zsnh6N_KSp8p`UoL)?aQ35Jay6vzY<3%E!evA5)*>e^7M(A7*zl3YvX zKQ&SR0NMshfjHuQ$O@C6VTes1hoS;VA5}q&6B_-LPjvgy+f*q^K~rSfP@+x~6xAG~ zJr!E+99WEz%63c~g9-COoW{QDqlzb%DPy9v2AZRNQ0Nxjnw7U_PR_l%_GIaTopMSU zs9QzvI*#jhsK)@nkb=s)NXFQo)b%toUde!OADPFP6%z5Xh!5hGW zQ$+(sY4$};8tQC@_+mWxFfDBP(1F0yYi#lwr`WyP=1c11bNlhf|3KnMu} zDz8%%R~=P=uveuJwo5!k8q5e?VGZbwt|y}X!G6OlcAnn7z9{S2v0E*~tdP!Dj#~w~ z(pKel?EXEw6}ar*x1uo+CU;vkO@pF3qpA2OPE=nM@hWoBaPlphbWUuvmf-~o6Re|| zFcXCGpK^+fXwjf$yegT^6}lM|?&J#WxMHIf0njFQOGKcvkAgIt;|tHWYbX;Yer-8+ehIGO00 z(}t7oPwu$qpVbU34*j$8OuMZ;jP=`CrI0osG=1HGB4l*zX^9!0(_|}_T~`#z<&U3& zX#Eb%DnYdU)ah)LLTK)_HoVyc?-en!8TMQmge{p_Vd9p@l8Sm)xcpRR8nt*TAeiuCP-`G@@?OfQezr5{E34pG6BX*>3MC8K%(a(1We3Vxd~B%cg4urcs(3 zsEuY-qeY4i!3T=W9*cB8p7DNlGXPTLDZfG;kDzE}YCK2RlFJcHzG-na`h*!kO!_jGU%!_L%T5Jk2A*`uUM|v~z zL)@l>n!<6S6L(~!;sT&TB0v>KChD!tWH^9g2Kwc?5r+#&lj4IgL!CptJ_(1wrx762 zs)^>js{yLnYC_mqO-L6ZP!c;fLcoIq>V+9O?uo^AntcjnhSG%ogQ~YLWa1NBc&iZO zRvonpO7)&8E7@|W+028)IOY?&{1ia^7v!yLCL)H}NyLT{4cku7+c8=~?L672wNo*G>hfQ5lFK*?sY z0fH?kID{w(7bP^Gx<05*85zN^iXGPnNFh%vbA(-)%|-Q1FfUgjR*>2zTxxy@HZamr z0x`0b-ZxHnt_Xvq z<#%zJ{PJ8(Lkms*=u#X>pA_+h)r#fiDXk89!fFqNQTHRv3`7jmzuPZwBn*alieqtL zZQc8mS|pwwdhUg>HUem^Aa)G2TMMCDlxZ2Ru(KqnttCXl0;Lvuxdp_as4%0R7VcYi zly@s+`nr)Qo_27K9}uIwf*!U~v+B008vIc{X`|eY2`x9?Q^if{7K9H3eTJ2oT^CQP z(iY-7JUf4sc5GJbqUgFVi*S#!w_3vJwx7^D)k510k-Jd5A0V6If4ZAS$o}b-F-;a_ zZ$$QtLGObr{{R>PhHm4ZR9(}_ScaNUVQB&aY4R#@L}rZQ#hM_rW6EGeR-tk-jz8J87j z1McXEAnFu>{E%&r<<&6lNT+7~y;jJY&THY|wflA-6i6;FY-M!OR{|L7YMN@oKoP2O z!rw+oMxo}&npO%HWKbuHk(OwSyFjRISh+(#?E)yq;)?uHAmVd(vY-xQp%LEU)cuj+ z;%Us2ve&Tau1QByfT1B-9V&$36U^_jiZ(LUJl8IWRN-(SpR#p0Qfw2iHdzt^&@ceH zg|lUK!WOD7VOV6pVv7=os-nQGzzL=Zu_*h3C~K10G>|}b9rR7k=$pdP#eY8CmROhY zEB^q-yt_1oq;?gxR`*&0wE;HrYD((?Y-My?6}x3@-pH_558WEj{1Jj%WZjf{+hwve ziTtACo=KW?)d{3#GU|;SCW+Al9wUUJ_#+NkLTSQCt*=yfQA{Non)cu=l6g*qeG#Qo zOp?(xUdx*hvG>*p+-wu3LuyuP?jzg~tjBmQtg6y+V-Dz1qiap&H#Roo<#miR(=>9( z39iD)%w&2XVAHdPV3C+aVvs&)JQ74YixG%y80dk5H(Qi+?C8CbNmI>;8U+yhQ*`km z;N-J}(Nj_$KB&nKblc#VK%Dka0RI3TjG$%(wz4@y%8QoAy-%(U_C~&pyc{~Ih>4;+ zv!pGPsZy&BapwHpIAR5%&BT6vP&k8~^zlaL2+d?8wq_H1pje!}-fLC+P194=-kZq0XwWt#7W2meUVwx zRpw|@gqC|Uv~ap*Cspu7Kn{1mWr8GTLIlljh_aACX+oJoj`Uf6#khslZb(vj94LAw z?zJYJg>1KkX|gUY+~kFV{{V`Mxnkx0+Jz=@8U)=UsOYy_E!OA^&RWX#j8z*ESxli0 z6izsndC!8ygfxUWT#j>Vr4vYNK~HqdK?ih50m0_0gxLo=e`=(FDktKd+{Np3Lp(G= zppIDtBUy^}%u8bEG`@W%5Y>=m7}Ypum`xQeADgW~?x-g4rW*(wc1%$+w5lX}cMDY< zc%IQ#R;Q`}!?h8gf_cOoa@qnPwEU2`7a>eMVGufXTFvXGsl(c#Q4y!;(REuRlfW^z zMEc;R{z&IHSF5Hzh#XDP+x0*}Yye}*tA^}cCc3*qHpyz>M}c3o&tzF$*#NPbEzLJM z(RxW_O2Qb-M%shAXzBn}18>W#5<)5@N{gu(WTsQS$X5~-krCpXr@3{jlZ3hMAmAFN ziw{`pgz~&o^JFSnu(s$?3mKyQx*?^}$<;&Ry;(Oxv`pl2w1cw5Ue=FQIib#Ln|t&hZ1el$h*BaAAwx* za>|Og4>$C?!USTazGy`OzIEFrJhQ}~k8b5`zn5jhV4O-Q!&eW@kQr8Yg~BlL!|w41 zv@)8j;lYf9n4)AkoL06-GmtCWXSHZ{V6Rd6IWghH@eefo)ro7TJ1K`3OcZSg-n+vk zXFoE25WBdA>GoCwAcHY*o%?}^_o6`r6&E7tbHb^1P!@_g$?P8OdolqH3iXK0rsX~5 z5u-xl9(TH)OIG}rZ6ncC|3i)#1zRencf^jhsSi* z`s|Th#*5ew10R}gNRcp%#DU7Ex&k>TP#x1wS#?GDp_DG#QyBrAJAX-yE&l)?H!1in zNVr@xEda%HaouEr=IVgSL;_H3KyRN^>_N^q8T=4!aM}m=l0K`bNLF)eW%RPYRd7Ky z+oIw?U;?!wiex!8Oqjpnl1(FK!bb$avK^gCWDagE8>v zfN_kELa@u4&|4FjpMoNzh9e)-s7_>Z5+sF+No&iD+`R8G&K+=$hGV-|CGU)i!|Ytj5IcK5D$A-}+h1l1ec`?E3|VsE%Xd zlF%(a>s?Uo*dd{}U=%ro7FEAtLp8*xW6yZPXAAs<>JWA*nx{?!mruIy1o|S8@3!5fftH&w4%NGj&81(*&AT2I3&N)S_ZZH-t@@s@5PP zBB_F0Sbf{CL;%uJ%%6G}hm}^;<lM0ff88$^knB zBvl&X-8Ac3sfN2%78HavS=99TSgw z-BA)5!#G^;vX~UaW3AA37e+(JHNkQJ04YE29TScdh}(2MY?k&yfzo+*RzzW}8qEk; zrS2ZC+n~W93cL3O#Al;$H-el4UExBVlb-|f7WJZgWIS1i*-gWOq9r-z8XetUwkt1L z@f&;=AOoV}XR5_lkSUn^AVFcGVS*<0s^Uop(iZpzqAMuSG&)aaQo43&*{*AKqB#U& z932=}4Z;W+-Ely62MB}xEM3?D5gOiXB{%;7U^0I!nn)$EQ;7^N5rpXlIO2jV@47y; zz$-x1(=8^Lqrp5$b49#to=YC^?NgpcGTVrh(POx!wN0VID%0{!X#q@%S`h$Y$vM}G z>ZITUC7XR>en?~~*=Dp09?x>qF5Q-kdMyGvQ4;~P61Q+NbXy~3??BTLC&4fiFEN^9 zq%fM3^k4flXsRc@?S4^4A|vDCj7BO`DkfenB^nc%gwrw!{P0A;GXVkW(5i?u4p=cT z5U)$3VCoY@S}dlcCB4=%D0596?jSzqi=qcK5l)HJB^HrdQF~e;P<^h8hSKLa$2rL` z&;VWVT5$(6&qbI45n_N24jHFbrs^fTQ8r{)cqy?KD$arKSpaIJj7@D2&Tg>cCk){m zphu&^KOr^*N9UTFz=|v!vGGi3lM@{ggR(h_CpQe1$r`R1fb1Hk92|d1TG~T@AsH^i zRgKOtd({5W=W9&`b6cZBQ~(nGUnJ3l5lQTdjLJGI3c}$q^UpEg!(~B!!%7tc86z~# z3yuR=ihS4DEmMniIc z`KD77Ow~Af4ObJJ5Nv(~YTj7!_@e=ay#61SN4i@@N(;g=THO=)WyQtB)@jjqjE%k* zQEP_Mp9x%UDB-xY8EDK8dT_-dxi2N6{m6c1r@NDCCWy^t4_KlB!+G&VuzzUPKr=7_vT^4OcAo?p4a1l8vl^h< zGdR&)7L8CPu@XF!O>q1cTP*U8lngEoQOg%TKJ+R=>t4*^vl=L$&DVPjXuX~#1kI&z z@lQ<2q+i(p!#mWhC#X|DT{uuS{@s%eGMfOOp+;5q(ip6=sr;+>Z2&T-9TJZ=zd zS}FBk1mPvihA{y^UGxghCox0iMnUtCuI000wQLv%&5 zXGDE#;wtx|^ntNrAY{0Xvj>TU7(}(cvXROzO~rmCMiIjfsod|zp=LWGFPCAmF)bXUPbEi!M|>?Jq^@XbbU;)nI$RT^&kxp`*KH6-T-G8n z@P{{0G+tBH8y8ZE!wX%f**dWIRuH?J%P5K$n|96gLuG1!VS2lxVm@kbztIU}_-5ad zxRq$(_gqF_1tORtvsC-J-l^Gh08U?Y-XCri%-VtT#JsXVJbX+rtv%~1Uk$U`AJXo|S5^+6n znjy}h>AG!Su^1d{FNO>r~Mvhzp!TN~#r^v(wVtdfIZ-MDFLYIJ@d2cvG+4<^+xm<(pTuP%c zN~U!1S{oEQq#6&pd5~YCglZr0PHm?oBNW^&6yw4K%u=6afS*PyC2-!-S}taj?vw-o z=TL!9BnSrxwx3@W7oC3sYhxYA*+0~G56KA=c2ef+iNb6W*^LQPFL*xzWYzy?y(oTNK?&ESM4aW zqe1sV2cw9_e=}Z`5t*^qG~VP{=Cms297D_nzoDOqF^BYWS#1_Kcb11H4XM-J(L3u&&2`E(dzV3 zL3zy{_7fC^?A(F*1!66tWYt?(Rz`X9?UeFyx*@ z>S}>|B57rUUdQBqiezvw)cufcLrE3NGEQ)qMBxg0?QaBiu~d^O;l$!KkTf~ONV&OKf4K;l;IwybY7darq-he#(Q(Pkv&WZ5W zUbze8R}928@VJhbJP!dyz~*5UVQJ+)7AdU2=EPYN9}}oVhm$w_l*h~XY!KqoZ@LGU zEb5Dl$gkl=v&}`B^{t=58WBB$AOIu#M_$pCtgB*+bcj8Uni@(vTo1~wP|!baaqw1e zHBaDNO4gutOdyOuPOAtV&;;hF@Z#E!+IPB<4m2QUo8DsuV3bBNCNTskU_=run*1Xo zWK6+Kd2cOxLKuZA@3Lu;C%RK=94i;5i8R{jQ$iTNw%a{#8H!04z&Mm?xHelWBzK;gC`(J?4|H%h6L2 z?&^%dKBw)Ue~QB3G211?1i8E`2-D3NlQ*I?0(JZ=6`Qh<14Wb$ShArwifgL11vPtT#-j4h`i87{zLh7J#o*lVl<*ZI)rkR)|=G2$6=C(Kt(q zGg=}40J2p^8_hTIT7+Ermb*uPRJj{>EEJ5Mk5Sir8dM>ZK`n% z%ITh(4uH7)rUGH2&R}&XZID;nRB|dqg-}gJDc%x&I3@sB#L`+Ud_j#c+zoMKF zM|N{uHhLoB*c!?>U<;W|YmDI(>Vrtu9CJ+(Q!~0OEjW&Os1l~`br%u6@FP2}DCP|& zXMGkTSPn&TfZ^hGOG0(rTg(QNk^(5AfzN=rU^GFHcKNA*MapY=F#@DB{i9sKF>_>j z@V=oln7`TcqKL%ioNab#rv(a!IoM*s3u3yYAJQ`dC0=1dib`;pnLau#6o@i`kbG>3 zfke__vas@vP(0Z}Fyc6Fk>XL7v;@}zMY)gJH1fQOx*gC{3^~5hnE4<;b%7^RgpdKU z6ePBgoFTe{oD|~PUk6V$5J<>Ch+H#W1dAT3pn`SZWXI6B_e>{=Etw03!Ox`o?wsxx z5ORmaCvgO_EG-@fG;(!>CJysQyaZ~~NV>vg0X0OHh&2+`!@M6AgvMlAl8Gd|=xC!5 z%3|*56^qV)QnELRMTOGrw_Wb_r4tjmMzAlaDAx`cgSvKmrrElz7-}?yNaaGr3TBQ( z`6__snl9}}bf8Nci@nthvgHQvT@x`7x((Gp~vgFfT|f;mxO<>;RlxCy2p z7!N;X#^gDIp5oR+v0Eh9MXX3h4kn*+;_qOaXg%%rPj~>9`JvteAe;ddlT_N};1t0U z3=Pn9R8)Cc5qY{XEoHjwfrBoS{UF(OU^+f)6-@pF>dw_e**T*mWzG5UTFnms00h~4 zYs}jG3V5kEZ0LyBAa1*?n*o~c{saN$PH#L}zAAlVB{mG@eA7#?^3ltRd3cd+kJWKY zL2!?alio`wGl$%Xv8*8CL$}Rv_%5qkgh;XtF&?UCDWnpcJ_x~c+GNMcaG2H?m@YeY zlu16D9buzHY}Ys!M(CRBR0=mG96+M&2b2D zIJ>+2m5VVLP7qxu7PLf%nZC;lSo+k7kAkS2R$F#ATa*oxfRgG)swBmNu#_y&>Joq) zqoNZt5#hRXh7rLOwSDRk6c&@RpBP5&K>q-bh-hQkC^QF8$H4})3{|FdM}%C^S&K{S zl4&#umf19tI>K=^ZKwN8W3Jon?m)}`0E#SgnX=*n{kksp8NEB-75g=e{1f;@VvNm1 z^ihs_l=kJ5p+CDOYj4e$4VQUChln|%gP24iR}-0Dj58iQBs(+*DLLCOl8BoCKedcD zBP{xU1lQ9el4efk{?O)ia?9k83>+FKRM!6hXiV=0=ny{SL@`aU-ag7I(Wli?(|B1H z`_ObktynTC*l*IxC9y?g13$p9L5poEvmg)3A!1HlI;heu)5Qvdd?GBQP)YHesEDp| za$F-(Q6HKhNip|POf|4Xw*+pTXERKpF_mL`t=sCIN3aPxgA4aJf06$VC zO_yPrSb!jFnNkVFqOOVv_%7>6pi&xr9Sd@w%c$ihLtH;HPHdJ3NuQxo8YWvoZw%AV z`)#ylRVjz^ss;eu&qT(?1MPj2jN+3)(#gl0l$OSyHQgf(O)t7FB5mTH)60g@e>6Fq z$pZn+-4HZm#$Q6XK!Vr0pz07O3!QPgIPu`9lVt(8UoFIMB`{AAWZlNe{DPEfb4#R} zp8-sl6NiV0U2ba-nZy`eJJWI{7q^rhOhOK<COn5g=BT=$c?c&Sc44GC_8R zQyV@ARjoWo&)?G}m}0{`HWNedphKDNo6gDYb6Q;Bn?T8_+^1rDI70b=tX$g4i5QMb zDv1QZiY_26bDd=135<~SK(f$XcYyIuH!y42VBzYZ;@KhzJrEEEh#+nj>F&YOe(8q~ z6An&TggVu~$R_vc-Ku!5+l9p9XY7P(;^RT0XA}eQTw{lZKW={Dy&fjCI=GQ>%3u$= znGYH1;;X@>h`+*$4lqPO{GxM2QhB53i-9xh@9sswUL(UaCJDFZONGH4IPxHsoltej z-n3q*nu*M5MZ^Le;Xec?ob@Y->b$`znuz5UvQ7C4|np&3J@!6AtRJjAEnkI{VVS!aK!)@rOv3f7#o zdYmDxyv}6?PYr_Y>bYYN=IZi5=4{zE2*JzLQDVYa?sxgcR|wM$aRZ!;)1N>ywnL&9 zmBcem5w|uHo*}@vxMCZdE*ts{`Ydk^-M2stM|~4VmqZ$0&e2%Oag0uhpXA~=& znZp+=jsb2PI7Er^gz?V8YSWc6cl4$X3+)INsG z$WDp%WDUM6DLD+*BK!>&)=+V)tVYSaJRy^MsV^Xths8XHhmTl{(QLfTW`t1Z^+d)Z zE%+86{c}&iq0ZuwY#GMzxQ+yaaRoG1XkVhxCbkTTWdkH)n!uu9#_o8kxy6}@ zl+lU&Of~4yrb>C6cv49^pXq3XLjb;{l;-+I;x}nl?H1o;Lg=zFnl&J`SUK6|fDGgj zZGNiKg(Y{F8Is^E9hvbEi{R2Sx+X?3h#E(l!-RwHLAaXGf83iwEs_VTvUAIyi@S+8 z)fp$qf$DC0ssILCF6ByZHXWv*Xn_aA?NrQ7ZpPE@MURot!eePc;pUq>-w&eYWJUR^ zy>G9DQEBFVrauaqY~1pXbyF%%8_oU*IMXh^^y7u?J@9`5cOh)-s_1p1$^3>LX6={s znq+RWr4R+AgYQ6!jKU6ykyTnQ`4~)(vf<3{qKdfWQ@Na7awRnX0FDQD=&+d)7)++? zYRp1)jHe7ccp?KyEz3mAjXn`)R2|EYL}@W{ zJ2-qgG?>KVdnFMuxJ9(2#@$L8f$l~JEdeIwdO>Wd2tbqWO>C3ri5!Qjj5M%=u5OE=+!9HIH)dOD?_jhJw59t`h9yywRwoIwb zMB**E`2=GK6zU_%aXZYlWpbP8sw|!>CM%FrSQx7v)YjYLk09UjQ<^{zbl}_#Q%kXB zIwrZNJ5Ec9R=Y1H245!;gEF=`Qb(V~V+Wd?*&yj_vZwT$<2jzaRWOZ2D8lJCX#2_# zXe%FNKp;C*+UZV<19P|Jr;EpQ{LzA19aBhF8bxbUvJl=F^+bGE z3}C~Gk*aItjfbrZ|SuJU2`*SrLh+eREA z2e|g%=!^N9_V-RhbzmX@JrFeFScAIa4pPxagPLf}Q=%fSY2QTpHN)0#=1YjoE+kB& za8y$ZIfl|~x2zQ5=T(J>)8|U@!s239rP`H(lt0DV@=aWVn@* zJnOFM(k&`0i!ZXDG$}>x4Ajsjk{b~|D47Aeb{Y<=5No8(Mlf4Gr(>;IU{s-e`bW?1(yz(_2P^@2*LW#}DE_IoS%} zB0QmD{{Sf_o&gizysjIuQpAv*G~xQEVVWWX+F_=tox)rGN0c~xgo7he6V4Jnns>S) z;lv@effirxf8{qf?3nq0@?aY#UDH5d)p|2%r}LYH&q)S9xoI`Glv#$%{(;MIFwxgHsx_4#qW31$ubz+HH{AF zQNv!JluwfOL9!ePYm7=`UNLXe#R-tilvSX2j;Lw|7N-+SgSvwdY0*3gfpPsOk|-(o z5#_~>q-~;zZ=|+_>nWAlI&*62;i`{yZ94o&1Bek${yJqxgx?}O1OfnHGmfhpgyrKH$%A< zs^bdCtYuUk1iX_1H%{UX7;|sYJogBY-ifwx9oa*@438DX9Dqd%;lN{_DDCN|n)JW! zxWl@1PxTE6IU?KSD`Dh=8?g@C=&INvl2#fwi2D)qMh~UT@6`d^0x^Aj6WY;;$(h^1 zIfacNE*xQ?=A5J_@(?4TUL=h- zSeix_&1WTsaf^73RY?|~6yXFoVqVi5e-tIKZqzI^Ly15%i>*++)D@59eyhH_m6M>knq7UA@ErifdjV<^*|bL*nE28uWv&dSVe!l@%MvM?0Hn)zsrfqjq> z83c7(o7DmUXcUWhebbH(EhI3)6litGSPW{oW_XxJBhfsQ{!VP@oL$T8b=fzDJPt_T zB{VZ-h-aMUn(8?F)N@LB=lG_XFIERpWDXe?vS`I0H39f+P_+#QihKs`ug!4yo{!HY z8-ch*U?c4}J)vCU{Gxks*Ut|ttG#C_mW0Lpbx?rlO9 z#CMzQo(s8p{ga#z7l{2ukpS|xYoZ!ZLI;-(Afw(5&+|k8JAQo=TgzO|r>b_MWCX%Y z6B3&wM)gi~J=6IJG>i?k=!PSLU_mH4q*#4wpfcB(`O0GmHPT@?U=4GAY1EOL%!Df+ zRC%PxA7zJ`gwEGa5?(TG>{cT~rIp@I1GJ)!M~eN*F2lq&%AN`i2`86LzKD0EO?r4I zxYgsC121E~3C2Jt%pt@j;xId;XLZCpt>L<2`FoS(82%}(#PTRwQ$`R*nUo*^!g0u_ z(F%Gt)Pf~X`3ogtykW#?^hXP5yN_^;CJg{iBawt+pR}pv z4kDdlIpNHA6YQ}DxE7x%Sc96@@XQl4RL2Z5JXaE;MHdv=r#a0wTgPEB2O<{?;`Dm? zsuLz+wDLgA5q*F_wb)CJA*Ab?o_-suLFp(z2Poz62FS7l+fWbDaUB(PDS0Y_yf_An z4ktEsUWAbFaEZD-?@3PtIamwe4+|?9`J)2{JZ>qoB!eDh6W(ezToFcfJ&;SBatYDi z7E?99W9b6@QQ~1DfHgX5{E)pWfvmd!07UYjiYm*KUS;~APZ9Gd zu#+Iz$GKx5gQ)u=1UAQX*I`j|Q7r>Qr;-Bzfm)io zpp@3b0n!K`B>}Akz1YKsXLmO zc;$X`hg2LuFMT9*6i*?q;jz8u;-zy=Jmh+VMc;QdK|cFtq~LHSvMWU9IB>}pKhkwS z{wuu0HEetn*&dKq3D;1CVj@OmO&;fEp-st;gW#O$aBMPGN5n8x1}SggLleGw%z$156MzB32N|bOJ!iifJWH(=v5|Tyq#( z=Ou8C41U|FTvJ>~<$ym5Z+T?W5i!FPM(&>X7886Tmh13Nt3WkRB+;`#gjVVff0d$( zoX62Oyy*O?O%T=qXfg*?!*Jz<4PO-lPK()}db2?i3ef6}C14Hd_!ksQ+;Y*Q#-(lf zWl@hT!f@+F>b>Uw0A%9mEvI&Y6aM$3hfh@FNw7beqsm9K;+oo)Cb(C@Fc&v=s^NFZ zF~bg9!sf;`(=S<`-BY@NaphjCRrS6;{8`Pfwi9mM0a`jqFn(nx4h7x_7PV0@t4SU)< znu-22>QJjCqKG#QMNYm8hy{!m;hI8g&kvHim5yD7kY4EWvIeYwtt0D29+kz7xj!tC zfgoa(`D4RrhywssHcUI3yZuuxF;~Gf$&na(gxD$VuSJQ3(kVV-6|w8OYp65< z$oG8Czyi@zzcY%`N0SYIpGPnX>6lb zv^omnw-E>85W8A2LGYAD99hQy00l>Zo4htf&IgCYw#ToUZbw!-e-~ecgd7&fG zT%7?n36C?wXpjI+Y_vIoi-Z0)0y%7s5sE7v7Yu?-RM#}lDKijUu|dV%Gg6tvekL^c z0I^MnJ{wmIS`MxWKRBN4nxHJJv!mizijU3-fKXuJs#6TRhV_nJpMVkD|m}cw>}E ztbLam&c!>^&Jb&x95Da`ORg6e3kdHtxDicu-3DQ324`=wWS0?6zZ6>lXO#+wi**1e znXX&xo9j*J3Ug#)YI zXxTGz-fpNEc#(Ue*Z`A$h`h{DkE)~+d+av)AixN4yeE|Ehl4^t0^$-myeh)MWbRHJJy$Uq7_1ZOG`2z$$DEyU;rOuih=$*vH&%=lKAnAsf0GLc^ zcNN9m`O{Q5Wwy-OKmnxR@~QG1z`ZC??}$?Gg8u+a_31+Nj`*oq!v6qPf8?=zm!Wc& ztPTGFkY8Y@hx1?Q{{Ze5Aft$=p!}9K=+~ql75%JyMTtwkYZu5bO7DSQj3^%fusi-m zNLX9&SiVcr5BQag{{X}#z-0NG>z0R0!F`K(1_V*dd3UX1)z7om6jSNe`G z#H=UapnuI{;Vdrruk@T>g7n|@E7BDqVt4$Pr}-~T-+*7|U+KT@7B~DCqF?FQztWG0 zQs4L~9~F;_{{R5L{THI+{8yxJz$^~<6;FbZ@?Ycs0Gj0ZuT0e==Dj!7OMWU(#d;6> z9?VYotYiK~OMWU>qjHkJ)j4wi0LZ9bfGiGPk&Dqk;=jnMv9taqf242ym-==uK-E7r z{-ge-Rbcs*gnU#L=vcim_$c`=MCBY`isW94jqnQ+#{U5LFGA0WUW|MK^nr7K#ZM3Z zDo_6a*uLx1e2-)^=D+{M04ERu0RRF50s;d80RaI40RaF35da}EK~Z6GfsvuH!O`## z;UMw<+5iXv0RRC%5KDoau|0I~+{i+ULCkyw&U7G16T9cUDybDAE9ZnWS_})@QPQBE zJ~5raXv-EK8^-=odeamfozl%D!%7z_DlRIC?c)1l@&p8cc>J+q&eR(*_=Uv0IG}_7 z0KtA{R0%8rbsl(XV09_4=&K6EmW&BSoRgPDelWa(Zkw>^z6ui>#TW{qbbIvjV?oA> zLztyc9i9i3AWh`aHM0luMRT0q5v0VfbB-OqaZ@w z)g6doDA4>Lb8F^&OejRo4vHmf8q5MxP1Pj?TG)k4GgLD;HFRniVFNU~Y@Yc?0$W8@ zGez~!Rv5RrVgV<7k`0@~%_lJ``gtj5QyN`GM26qSY~ShHKC%YExi1{n@k)L~b7E20 zD$E{TJ%O49Q))94YL)T8!P+TO>Hh$6AT3 z^Zd(lNRQyLxrPhmeyXNz6O8`=LEqk11TNc8QcuenH#OOO7F;ff_DppegHT(W(n+-Z z8!@rS@~i|bUgQ19q-f|{gLO{|q0|hxqI-iG921KljB?s|3Sd)~v>>J#SGp;GUT{6V z?#4+fvV#=UQ!Od)9S%+);Ts<@*WATZ!$J%Lr+2y-Ap#b-n656!Rn1i{g+7={tl)~6 zDWYnC#0YC(+otGq?2Oe;SGFyDjKS%~@N#F)UI zk%6^Omkl-^a8uvpGWMPtfI0cZHlXW4kh9N>0zZ^yMbgKi;9;=%xm6?IOf7NxX9kZi zH~q%t`fZN$a(E}22xJN?;4oBQh8Gaoh|`Vh6L9q|B1hfFSZ7PmDuOaG9UoZ10DU{g zY9E{zLU;^q0(FWU8QH>ZhgE2y@PpyT01=|F@P@Hlo4OgIr7wpj5!!>~8Xx8-LlSaB z^$Y3tVtVWZ>(383Wwj;*PqPa7t1-AwMT}4}WX%z?#xyl6&Qu%O8lfG#JiE#e8ZPLX z@j>Gi#hbq0mlZ4W6%$PL&LM}7d;~>(;J_Vt6x|IK-bqKLfv5-JCPPkHLuk-KPu>eX z<-tv7y)vipf0wNsPOzOta2Hl{&IZ{5#sOCO7ZL2k9<;uuAC7h;-XQcedi z2nN9tg)QwNkxI}ghE~ej{r%({T%aiaV`M^jgZRjU4zxMKMOMvz0JuV=^I#rQE;Fzf z$v+yymt}<}C~b!+fCmf6=Bqt6n3B<(ykfw5Ik7;&TBW;yU?jZi{$?dM_c{Gx0~1=4 z7v~O#9Z(!SYvX2f(Y{9rN?&>NbW4qZe4bdSM)n>LCRHM65ZsEtw7`X~*FpKfPaCA< z`63+8z~XigtwkrJJHimC2j5sm!fLz35|nkOb{oouT>5F%mKYmw^BMaw8y5I35$O2Z z59q>(Tn8HfS}*qTfXKHdIkNmBu@zwU8Rw6qH@*XIj7ac2@XKC2kN_{3z=qRa3y7j0 zwfKXU4RenS9*yeYpRtf6q$s`U)xot9mURni{N~WO3SvqZ zrtI47z{{SWxPXzEIcityxwxK!j(+Or3@+hsRYl?J+(h0h# zPn_hofn5O3Bxh#yi%*z_1Ze_$Q)Erx4JcDqyDI8we{x0j46kQ8Sv8LFugM0gId1c-Uk7!*0-_`(W+EN)5Ap!S%Y$ZxH~b*hy0lj2dpgaKhp zC@KnLV1(Y^SQR=0LJ#Mhg(@(Y&p)FWiAbaONF1UUXoCCi_k_);D%!tPaxn(H3yG(< z2x|@rrGWdu+p+Ekz^Y;}2(( zKqd*y+zwBO;N!fgk3vVqGEe}L-m_*l?WgsQuKMbXX>Me~jk#(-3M*V~$O4pQN%fTq5fo#-sy74(LAezd>*OF2b|pCDbhg*Vmt?R<28l=RVMnvo1Y5DTS_ID z#JDY=tYy&jX5MY&acF!Eb&Ep#1%e?@PyXW*PrH8=#4E%YJ0DS%Vm(arkG4$P1Jds) z1#gT|Y~CA?`Sh#=9vjCMNzU9w4PJ&8#eN(?+I&nlRqbKevHJj1iT$ z4hWSGSx)pF%<1CBRw%lBpyf!*algrf-0_k!qjvS4%)HuW>H*;fI1=ij7>2eT1_^c@ zaBmg~e1;MSri=tA42%@^Y;Xs?CLME}2D)pIaZ)wo38450VX!5zm_Od^QoZ)w^kB6J zmcYRSLJupw{dSfTC_tCDGCOidbxNWBOAi6w@AgLQVO5Azxg(tiS4_M3 z!*by^8ctIdZ(gGb;ouX&*d#2ml|Bn=s+UG8!S{I@(M>kaMt z90JepFrCxkF zlCCHc`E&Wwh7NpNz~o(?5Mmqu0A?hYdHd`yGv&(wE=~fs35A0}zjtPrc`25%7VxFp7+Fk}L^Gr_#5!>g`yDa`0%Pj&3^ zJyq^*!^}(--3hfNMVjdOn00Ox!UHv7L^Xnblt8!i#%M!e66#lM26v8~z(ZQWU zSX|Eo%i#5o^MwIrceGE2%tZ(RG-&~8E*KE6u<0X$h!pPd5czqG039?Ta+9UF4Pqrn zxwablcfC0d1#l{JXR00?3JG)(#H2h{jsV&{RmyY)lsL}N7)Pq@hotmOHH2{m!GoZZ z444iN7yFU5D)8ix9T_(uycKXw(LIcXbUc$CkvvT~Y*X2Z+8e8bXF!&&4#(9w&8-iF z$}|bRu4|%oxVSbtJz@giw|FH?c#NThxzT}j2Z~vtd<}30q4XvUx%S;>X!;WcQ0vYr zNft~F>#ip_Y*1@wH>Um}qYLt`s{ydTNOD?*G~Bw;N?=VQy}U9+c<>hI6;4{P8YcSj zM=0%PjhNvkPr`Ht4Xyd0GQ|%j%o%9!7=m`eoP}Ilj!y}Y0(Pz=V(>2F*2MXB{$P9mwU7}M=C~E7eCikzU$h+F2=Zk@J{2j)iWB9*vY)4dRK70(D~_RI?fqwPliFbh z9|?25EZIwY{wQJY?@Dz;S=f4PIimlMeB-(&%XppZGAf z0c5#aTDva*D;(M~?P8=t&~>(oUUARHz;fhR;WI%~u~X`8*=p#}{_ehc`kcc&i1w<(5aFse>6$SE1h_^%ck0vR}3{nr;I16fc$3KDW z))%X`D`-y1#v>HIaY?>yZy~^V;gP8i2Q1g0n=uGO@c#g~H*3zY7m?<+d`uB-c~9ms zM-|aHCWU+~Qr~nzn{?9?Sil+s-kfe=1ibm$;#(72c{o7uGqm@CaQ5lI7+ex_LHora zmtb>_9PtZ}3I0GDh6e>o?Z4&+bKSx8FQCVG9`JJbkMLo{0Q8O@5SVEccEO2K3GV}cj^T6=?injv z(>3)cn>Ztt>~Ux;{w_qr@P7=p0&k2ng1k!O7z^9Ofcs1_N9N-&ht4K~JX;J`cAt0* zxI9BIKkT;v#NOg)Ryydf%T{xuZ18PQxOLqY=>jf&H9FBUQ4kK)s zrwt}e)+)db^lFkXEULhhx0qJ6#M%qF@cTJcNa)hTH4%hzgnSlXI=~fUTI6SFF@dmf zKI6rlVfF2=!QE|jw@)2ghnH;P7eBQ zL^Ok0X)ChhDw$riE|S^r5Df$`8MD{E_&C97C^Ski_~|z?&PNEK6JR0=;NX z<9W~$3Y0#{i8X(D7dG2^=N7L8Q1Q@O_`?chElwBN&lp2Zpj3j_HL!5EDvB=GUks_^ z9~5Sxg4Y{xXg(AO64)z)f<8<$$!(w?nVaXN;4pfD+UFuxXXqW_mS{Hr00CspEUt&p zpu=vgkQkm6m^AXX&6$2t7!)iyimn>)8{&u7A=SN9Ux}3I9~djeJseWLK$v{4JTu`i zh!@SxI{f=#+Oi|eQ8kYy1TMGE5&r;Q01}?Z_a-2?8%zxmdJp=?QPuJpMgz_Z)7*`~ zZ|640Ri9WKAHEyIj}4AB*1sq}85d3F6~K+Z2N~n5#JIVyP=MzRK*TKc?uIIB9WI%( zABf;p6FKlb?SWsSWNTh`Oh|7e(N_Um?BT2e?fB)St7Zw^Fyk1}9Vv+leTS4NZq{NK zW_BhWRjd_QULeV`uLvd_gyyA!oiDd|;VAi24qII;VQCK?%mN4TV5$kWk$&HkS>i92HxZ_~M(r+wbcuA7Hiqe_;8G%mkP}X>%o@040{uA z3XeG5lGD_5%M3t3&@BFrxx%$SH3tHg;arNld|@&EAgn+C0B{$q>J(a2@JFkFr~vK@ zJ45d%^a~#rsV)~ZMvt`cUM5cMAudGWVc=IkD|S@L(o~h#0w)Ff>fkr1}2<^8rXu)vUbb;m3qMw&GQqak|6Z z9~@-J%Mf$6xb;GG0Am{pRv|PaLN{Z5^f>>-eTvkQK0ds`Hs~XAvf{^Dyojd5Lpg?=;MUu^#d9MPqJaKXQz>i z6%g+UqR$c;QVm{Q5&{~aNLGZXEF$`Js7b-9HFLGi*hY5x|zm#g#OV z2HcSfybv5Lz4{=|-=QZdTs)9ms8M}5!Nn9coH!g?nsjlXi0LR{O8#c^N3io(9Z3EW z#4WY;{Fw2RK`kfA;NqcV>bEGjxnDV05CK9)mQ*JjfifXkK;0vu(Wc`NtDxd|cQs6# zoA}ad6GC5{Urs?hIuB2r;?j(Ynj^B~jZk{82N%ycICft6{bFSoB@JuhlP+I(;aWUH z64sRK!ufRF-ZS*Z;Mxl`Fg}yG(iBpc9no1r<0m`}_Lxcm)Y|twcY-0XDnHW{VI2|K zBZ~OeHuJJtcS*L5W1E09t?33lOa9ynM_y}moGg>B@=Bp%>;m7*PUV`^u{9gmbipx0==pjb|I=Q^H>Bq zX4~+K0Uls1$dC~}ba>E{H6c>$FB?8X%M>^Y5=;(6w!e*Kb_01bublq?h6srs7e4oe zfa7!@5xmwA;m~+WoLt#kOhIk3~A!s71mM#e6SI+S~w|yG0j`c)5cd06YqZZD^b*Km(f z^#1^^bg0)un;`jaV_6{jW!SOcIS%_QxxSUv7{j~bOi`q8{{X)^TduSN0c}@T0=J+b zW#q1AA~AaG$IVONzpdgGPf zriao$Sq%%oO+IsbolTs$Tl*Xl^#wNcoaXcDQ{V`>?ngHfG})~(@?ix*paZyZUF1tg z(@9MP33*&T`aznvL&1U!CJI9q>J=i;j3cWC4l)74@E9)R5)h`j#CL>yZdW$X$)n>W z8<%f^F)_ebB<{&>4$2sjU6X&D)x%AtFcvVDO~?+qLle0u_?^FDiSVqwC*t*owg#b= zF{67m@rPFy1Y(^^C%mETAT&erLi|gPCtm$)o<7GJfX9S7Zw&#!$fO6g@_Iggv0L<4 z5CmR`Ls-xbgwCqU^IQv^5=0Lr@cH$EQI(uaH}>&xnG5oqnIgM%3}%@S@O0mTI0&hR z+g$Y5(jG1nhPXgnS|EtU!~$=|j5QF%QH9XO6<-sN&OYE3RsE#RL_npb8kn`B1yk?$ zanZ^hj;(`W#kZEDsPL8_9ALU@YQKN1bh1Hz{TMX`V;>*G=K&u4e1YlKZGe=)i(XkU ztNn9!+iEIki2MO_U)!N}={kJt48Q>xgXH7!j(YXP%?WMJdE1AY3CiD2M1T3?CmCK` z0bHbUk3Z^jeI1CVE>*h58MO~gDML{yGeRfTGVWiDQjXDvC85JFSpaKLBWXF%OPqq0 z;zQ5-j`jNBWQ6Dne3`eP77G2VGO~nZ=k>-hV!Qz{J0Fu9HtDJXgVMQ%VX6kS4kEDD z?ko&hF2Hj0M-|)tW$Fg0%KA&iy- z(fS14^b^2pmHKuoGh$%|gyF%7yQ|Ag9a=fY2w( zn3^D+*Y5eGZpV)39>hdKypm5~_Ih48uH2j8gjqg_*JFA?TCxEVa zb-4_gJZ>FfXph`~lM2e8s;3!Wn1O@6;R)aE8k_9Q< zxj7P5ng-qj<%rgSYo%*)q{1O&(Ag2}V6j@M(!Tnx@#0OJU`e4^)VP6eAPpDtUFSD9 zGfzSI$NnuD9lgIf15xD!a4u>(8}ZGOxJAe*pk15-n6Mxrt&Y@TE^F!mIS|V$i5?v< zguh=n)SXeU{{U2cBXZz((I5`|v%l5UH)ztj$KLKtAq5*A3gI)rjTI;c#If?`{{UfH z2Vz62PJ!-V33jC6m+3{-7plL;1`PwXCOzg1hDq4;8M&hA%^(o4D~mf0Y;Ys$ZH~uh z96Q8fcLb&%0Hqc7M8R3{CZ;2_L^zn;m6uYFk{5Zh&J*DrRJiUeQZ0{%6dlv&22j%t zTe+b;@`uh5d=dQ(&Fb~FhA#ZbVP#O<0c=?8I1B?^gb7MUXTv5I>PaBX2K_Th$uuz!)2psUhX z5OQL`Ui9dntV>Cq=2i%F8^P7PO>w{iYFmMGBZfFmqV<6&LEfCc1oS0^qxX@{=}mIq z*>ZwG$0Le3xTaI>iJPE+&<1iqQ-S{gnK96~YiK!OezMMy!lx9Q-N4DHzL=O@M0o=- zVbqRu$l;q@6k>5qb^&}C7a?7S6zyA~tU5BP2^nL^)^Sf2A1iyf3`czeIsn<*fwd@z zg`+0KEV!dUfm9br%ovpozChCs5OxnbsF-RspyUsu6xduS^dkHaav+Q=o>Xz8VI`R! zu~3%HonRbBiQSDq8lSu)6&iCczZrO1EU6K20=b0SM*Q%2=NI7gnq$*wBH4Pl9t+xQ zc-K^zt9$4dZ5|1P0V=}#LUtxxQMu9U6EGhzAI3`okZPIu1jPXNgbm~N9Y=#x=4dcQ zduMJ*Fqs5(bqCNmW5Zh5DCd%T=8Q;E(#SmUSH~=~XGzM} zz7g7R;8Mt0VbmE}iFaS~0yqa!$yzw%x8;L&g4oRFd{J`XTkcW;j-Wb6f&D}U8 ziSvmB&D>$j7@Dhv*8C=k=Fx1 zX@+&(wO0+pX-q?3qkkAfp+pzPjx{Z!z`N%tr?s1L76`1(4Q;JU;qmJVG%At@9Fb(B z&Nqg^*0g&OmlA6o*A#2-#xu6d7Y~r!!-ZXzX&&!-%NlcNhTKy`$OofA++WMH2}U(Y z5TICb(R4BTMb^_!3&043e=RtY+#@y{<->XztaM=KYw?3!kvKjO+3tozirbWflyx&s zy-~t$aX)xoda$~|l)KK0G*QITr4$$KVS;TY!e&E5wFos?czlTwqAWi@{ zM#9uXjIxccX`hT|-1U?Jzc?tjZK00QJD>Foe=PHgQ%Ks|KNuYCdK$8NNn$u^L$5d~X*_?%Y9&L$%ug8I=wU6skj)BHiMxwy^g@1d3!~ab{{T4l27R)J zNF<8QN zC5sin!n#KKnYMgmOh+lKzeO=Jb-fB+A5-x$A!6%belbsFEu$D|X!vLk0bi@Py0Jfg1_&y{{KOO!4H^s-NJz^af|lwhSHC|qfkG#>=rxmz@X z17Wyhs5A5o-VeBAG5E_&gJrxAS@~gdT|>o_E28)sV0!$9I{~h($(2Ob`%`~-5eNSO z;0&cq<*)EDV+krAS7!l_8b;Cw# zgUW?#k?FyAe}-s3I98QSPUB=@0L86UuV)Cd!)obbM-K=4R=RNpVtI-*Q4Sgn$-9uC z2hI$Sh>}^rw_Fi5cfs%@sQbmS$rQg~!Db90Oj3GE@$ONd4sxW#A$?qb?Fv5!cvJ(Y zBft$@UP2dD{3XPK!iv_@Djsa-+g`A&3BMG;_z8@oVZ5mN!eTlI67oEp7^xdV^^`OY z4Q=17NR_u>+A%DK1Iu${QXnLpvr2!InNk-h&7n`;0}?ihZ6LwIVrO-f*U-l!3=j-o zs#QlMm8}XV$*eM;7&*UO&8rzjB$&eS7(iH=%h;oFVGz%M?+4 z;XVk1g6$WB0AC}he1R92-YMu z+wjZ?RV$>9O(pDz`V%1o{{Sg)g`#f}5FvcOvj76V_PSyOM?x8`Ab_I*AD!Mmq#Si==a zYyB9mQ7D>22n`O*KV}Fv`l{{Ohzdr~O$af*+r}#p55Xh&xJW?Ah4sLgyiE@Xcn?`F zh(hx&LIYrs3%qq-P{3Ua(KB6>wI2aL%m=u6kd-yTg(?>rw9xvy#Gs|;QBil7Wv$o~ zPxo2O+5k=cc$mUQS#jYeY1#)nH@tTijou6(i zv_#}`b2`Ii$g6O`!q(+UCMWyYdK#GGh%Z!lF@Ro0FwjTJhFu63My3u$R|xH`c+-XZ zesRGo;vQTDOd=OrCbjNixU-Pj=yV-j;Rtk-Mh)Mc((JsC!DYM1a2{K$7c3;n{u_+Rr`bW7p96$Ejl ze>gkhT{Vy;Rd%e)Q&m_8&LxBpf&OLb0Wh2&p=R-Y8I3Xc$#6?E-0b@>$aF1^bTn;$ zSx{CZ48OaNx#tH2orMZdGZVIG(*fU-9xzzu0iPqBWrj_qoZK3BV5IiA!OjxQx#(Gr z_te+L)p}eY*ab_`_zaB0BB0~&?7%c6gQ;hUy5Z3F@F)iY4+Tq{r2)MXL@y<1b247m zf`GbYAw-iav?X|Qs)rn5fS4wB$tD!|`oK-s4K}sVL?2Te8?#!x5131Z=FsL2{z8?( zGdAHC?G9r_{bNB+0rG22B?@rrSDuQ82!oN3&cQF@+4L(k?v7C9{ z6uiz{TE`GU5l7L)z;KCZF2lgeH`Wv_CQJ>=bf@qf+n^Km3FwLPg6J}& zqzh4?dBwVt`CI-aSREB}Kp7@IhWA++v#5~1@XQ4a+F+Ln2G#QAbYU&8aNxmITy?Uo zdkiMEGC58E0A1uXAjC$QKFfEWS=;I0%3X%E7);4p#fKoIyyEhFNfz%K`s}grclDEc zAvO=Wh@!=TP-g+r)kTn*d1w-2=b7s?I{7EbW-Q;xllD2Pq{~75;^bys8L%_ z%3u_&-z?gg)zNa%ZT7P556r*Z6aN6yz-qVfWt#j;`d^olaf2^q?jZFZNPE#%Y$zF3c@-e%nX*& zK$!=XThJl_`^k8?)*ihkZ@d%eQCqK3!k4&$C2rX5f=cbfV;Iq|H1 zm3uiR@gYMgi@$AX!0b_>)mA%);F`rM7sfshWW zf2Ll(wS@*@MiN3p0+r~dh$QAG{kcZ3LT_KjOw^;%v!ms`=7jf@`~%J=v=+vJ@;AWi z2u(W(YGIdyh6eutkPGE;Fks?9sQYgVrXAE)Pn-CT+yy>Tn#Zo7)}7%4n2+<07SoNz z29d;!2#U^!Mj!W>z~98Q!_>;MfzgsPLveO2h69|A6A&!6);@YR;g!!#l1eo)00n3h zlCj5TBoou)!-m+#JIdR0oSrRba7OfUi-sl-W$tAIl+bUMTSTJ3$JvQ0KmkwB!-?mI1>kn%YtBG}*zDkemxR0wub;^> zfDTjGJ$K#{9T$jetN|WXSOz836iz|zOMn8NgF!p+VMPMO)(Tx{51a^%9y!8DX&Tr5 zW~xsO8y+V3TtzjZEWaKhrcOyD#00puzCpxG*KFu9@+F1Vy@=wFh!J4WuUmWL4$H9I z2x{XFXy_928$pH$@&Ro%qf<5en2Xqx89`_yP{tLS6=E{;j#T{vPu3<#Jc(57&9E9c z1L(sgq=%r64JjsvxN_Dh+KC_UBP9xmxBxw}SJfJ4C~@+ivf^G)YC{Ra_+8@gQ^JUS zVM%wUu;!rml7_QO1b-O}`XMpidK?`mk&pnkcAO@BRlhhA6M`^w;Ty5M4$0*-V{Rrb zDUT106_s#@P@l{I(=x>jNc=>(6L0em)+Oe37XJXu)qsC)S3r10e*urjgSf}E$ZG_E zZ!;{Kv#2q;oa*uo(b$H);+&Ea*rxdE92f@iX~lxWhb&?2LXDEUUD9z}D66$KuMb$I z9H=6lnAok!a9+JRdfgCv4r*j=Ew-n^$%Iht<-n%Og5xOP7B*|1ZL_i#W|~w4uNUSl)NG;)?V2u((Bnt(iTWeD+}VRzibMfmhBIA;+;>qP_*QH*yQ( zYK7up8;6)+O6cPqbov{@uu;wy1=NR!!-`)6PwdLI*a{z$4NxghRL&QnX|2I2XDW7{ zYmP5kN~@0r$OFyE(CXrY(mC;O8{9Pl_$@~s)ElPutqf+c4GzLBh-o>^cyO$JLxs&? z4bmd-EAdo=Kume0Cr`=TxIu(>hn0VP;aR-Y1xH^M!f$3I!$}NcTq>x^d(I%ZTieVb zO?pK)nCnW5=r9py92i);R^&W#Dup3FCc4YidR(a?oGr7ZjK4&y7P+wT}Ez0)E-=!KvoJO zhI8ZT%J41_xVPY%n#jTY5ivcV9S>j3fE2>E=n|XZ!?SjD0Lecih3kk$M0R=TbEZL9 zj}I7;@?;Rbh+-xjY9M{$rX=$e%OgR-PM@z`#}CW1)8YNcSJV*H;{A(^;`6BFe4pke za5)zaK+B9MfRr62f0&T9Qx9;}0gvNhs|HXC@>8_42Gt|YJ@#t-R?(JiuU#duG&FZUGS z&B)8~F3>U5iS)Su6may%h<_kr4ps8t_R!|V6k?x4<0@f65;_By;_78mf#8Am&SnIG z4#%bjhKxlf`}?nr8EME;QD%qD#+i6B7OiLxB;E}Mh1*{sc41nt`HT(8xOz?&FXI3} zdm+F^KtnBdYP;FImkljR>V#{_ZdptfC^U?=*CI!5JebGp7A}(KPLs}zEvXsmSgtsM ztJvNSwqt`w&MlZ`>WjjlbZp9niP%k2T4wT67fey$6P#$x6OUy-EA+B+tc#<1hKRH@_bO>!h=*kd;HUjLu{{R^`zI!DZDcE3EO*H!h z1a+*Yj-q=Ga7~;!kG2Zb6<0tbc=BN|D9~?9=lqu`lHps(?6H6c5NETjn#J1jmWB0#lJTThpPh;S0C5L_Gfpn6&=gNt@D2KQ zaj)JhxqE(znrk;fH<;fh<{#sDPMZhTTY)yGjt3eTj_6N>mnpjED&Wcz{F}-xHRBs% z)Ndy$us438=LqFlVm>>LABBPhq_3PqlUXN?S}okeX%|clWuI?PkDv1-+A8}Fc>QCv zinReu8O{xzY-A=2N05gpFp;}l^oFt(8i`=|G0B~2d!&>3g;aA~7n&IE?CgOTM42Hj zg24zH3J=dQ#IWhBr1qD1RrUo>jB8_iM#d`)JSfEwPlpKY@E7)uvv#-Jyaih+OS4+Q zx_gV8nNA9Ru#fpMf{+2a;XE9d{xgNR;W+x30D{*VEncD-tztMmV1f^oaU(#suLB9x za6YN{j6^iLk)JpWN3)T-%BekoaU&KQG!vP3li6&5pnlk~(>#OZJR0S|LY>rTZ1~Sk z$N?80cvv+7pdT)wg?k|#R*fD%jKO<@aex)6A5%0_W{dMOnzewo@w{UNAsXPmLjLji zjyT;G3_^VdF4uNI+JN%myGGY0iYQY4cZ;an^^;>@!rjH|`;-!=R#B-w3}V*Gt^tdh zGH68ij*?jv<41(Y=;nZbQvf}>$2`}a2;Z|5fK~BxTutJorb4HRh`))4fZtnOpuSsm zj+7!+>!x&u1U~Hv!vOfZC_GKT7gvLmH~)1-3h@oXaLFGc0xPb90LLI zv-snw1Hd?$Z>^7_3gr$%n6@2QVeW__B|ff2Bo&(9bjtOuv3NPvG1_-c9eXaa^bAXf zm*m61O?IOj4EfkXU^wmKzy=IV3H1*LHs_=S18yj$$hs}yW<}?co#YY_q($+MJ>6Hn zURhM*h5;H5VDC}QKrHJKI}=wq9S@Cm$U6@2JtF@xtj z{{X|I95;_f?pEo1h@Xw&#uMOisOE@;C+{|nd`h0m1~XCxs6J0Q29)z92sJk3!50DB z(OxpeEbnemnN8NXLwshm&@+-}0FdI$&6+{$!HK^@hY(ldEZP8l+ylL5W$^xR>6?nH zzXAkltAKMA7aiEOKN_%sLv!i~3I9zgoY zg!uXm0|$UQ%6NOAMjw#ToRmjr99r1XklFG#8stQQt4Mrnp18*-IZzy_`Zu}OQ|q)~ zGzd`m+Ig>T#pI zQb)kCF{T!zEc4q&{EjuTSh|6C;qA@C4r1qPRwU`lh8k^(AE$7~!=w)bQU3sr%$UT&prCX!)XyKa+Hh}(a zHau*0n4m-*C-Fn`ihy#tUgg3ns@A(-`++1PwtfM(1u0EY)cf8u2`s|6gbZ?a5?$+f zWjITzhyb8*3;;te%oM=Ii+Z3rdKF|dhDU|gh9>TlH`p&{U(7V20JR5RKRK%*Sks2I zmyt&3u5&8b#{fYep77A}+rWY2lTRY+h#eqB4H zZF7-TVax0+qz|;S9c#bH{8i9)e{prdu0Me5I z9;)kDj@`z?vk)2hDqVOri?|%6ux~uPVOfMmA3qL!J*KFm^(DdRU^6-hPK>I@I>047 zTs@N15mj{VE*2}n$V#BJs+*wLJc$~OUd%{4T4;XxRi!+?X_qekSYE6kGE%6LzF7xeBTt$ymY4lx#*?W<2OiX`hWbZ~RKy#I%Rf~$8O{<_00r)zb4o+OOS^Rmo(O*|Nj52tBU+X| z-QsU!k6Q|ME4H}{V zK6u9to?sHfHLsb9$|xL{h-ngPOysDOE&3zidBoQN#R(70>yr%~`%o9wZ_z>&mtpAG z;HYPGBKNK_0atXtvm%>FnKwrS_M#;!v)nelxVqwdjac%PR(Qq|lPKvV_KA$_`5ICn z_(BugF^gH`(o{Uho0@neRS$vF4Ckr>^5$#j9*AOAsSI?**KGV2`Lkk$x|PTNe;eQqXKES z?n5NHqW|0N_=$2bJop_Svwm^vVdj>D3U-a@y-Y;_FX(+Q4)t&3pOmJymgDS87?Jj zyb7{G9uEPAH3P8NqlJVv1$cQK?=2#gx)WoU@yZt{$_)bspMT?$S-ynM&n6M}^1m`) z`Gn_MtzI7)#Z$0788XgP(gN{tYR-)q76^a}znS3(4q>|&rBmja3T~de!@VvQ%^*!Q zoL4RsV!2BsWNT3(AiXl1ng*ytWBI%1HN-S`W{0x?V8LxF1+P0Ymu2yLi@n^nhU~3J zqnwaIS&mPEcT6o>h-h!lHbyys{{V7m1Yx(qy*X5N)urm2u2L2Vp=6$CIM^gqWG4sA zgPrazIxJ9w<6KPEuYzzc6t%jh7{jW%7e&OajtC`reB6$f(m>=8ieb7UZT6^I#WKT) z)kD&@)WdgdwgT&tIm@UlMO5f{N;wATj9?m7`oDQx5MEHc9ETTsxQO)7K^@}z>)~+U zHpuwKXz>W-LnR?za=zHmyc;qipoL8Uw<;kAbFy>QF&R~;{Y6=K;z`o3;MH%dlFl1*%839fi_ z2Y*y9CNkc)lpLGKLCeM^wk^RoN~def41EI+tjY?V_!9vMg(XVe`K=x>&CNw3I27Lp zc+x;Cmc15VCBz{DfQ?pNg)sV92udQ<;rK2p6&pgy0~NG~dfpJTa$a8d_4MClhe9UE}8-Zc$&Dk#jBAJEi7JHNv$VO6yP7)ohE(2;^MllKIgC%?2LWdr?$D7xkOICjICpik5 zCviD34ceeD!+{2A%SILp8(uh>9(LivCZ*@Bh2oy9pDgAlURZm-7zhpD5+CK`ArA@y zj`-V(*(pK&I4$$T;|1dfoXbFmOhwWIIk%iM8;-iO1#-a%kr+%?q9g%PNz=6E{)HJvW0(7ws zPnCEGB_KZwdxs zeR(Ltsb~%j1cKt^+{<8aT#~s2u}MHAht6sucAV33cI3R&61+HY5QV8s)6WrKR~eHu zmC?l35e;xaHIIu;(-0wr(c9h@wzHiNd&4pWU3_ih(}7r0<+4p?>lo}rzo=z{wvYz^ zb{I0z1O*cx6Cy6vn6co2Dr&Xe#e2aRzkKC|HCInRsfb9F<=fFYO{w{IFEi3P=)xo-$gV)op$B6(G=%>*NS{k_Z|wx)KUTe z0C3Y^&dBYe59q@&e>HuFme(0h?qDrZriT|4TqJq$KN+wprZF&_fWlj;gc7mu(3u(t ziQ4?VcDb}UBFhW&jxR;NjW$@-aXD3yWLjWOh6QG#*}RwcxjF%MVyoAc8zkSn42Q4oVsZa;F>I+K&}X| zw@)Tb)coU)g|#SxuX!e(nO@(UU3D@op2Gl29y(v%BAP%vRRy!za^*^`c@gO7$*~|& zM<+kwj4@~gw0&gF6bn@*rY=&S0s?qu>DAF@5D4{jp77Rcj|eV<7lJqej?gYhM5~eE z#Mlkg3}FM6vJ6~V9$L?C9YQ?=;~JI3ff?%SI;0$R15L z;ZOKyDX9=fKAv296>lc^Kh|N$1uoB@;V_*P+J*2bnpk7}=`;0&H;6Ytc{gwr?Tn_V zRG+uPyL3Vq>eFY#EC+cbA0`NODQ7Cn{5G^Ah@SE|DqZQ^213ucggdA1R~rHBv9X#2PD~g7bGeDZTdN<1lllCKav{zXjylQ3eZH~&^vIUTa9($X53iI zkNiF}Tzu^azj)C>dSvXJ&yyqoEFmZ71kyv|7zX-cI5`zxa50F8Fi<}1xg`VMDm3$3 zm;t!)^vE3 zskr-@wqOcz^N&=g88K!#0eTKLd>15G*+Zja=Q(jm&j&vVaCa#k_yWkUdC4HX9oZ3e ztRAaYsAM{1KMpAzdBf38O;3=V=;e@$vYPyusy9&7iiL@zye;6MXi*0WkQj3Dx8TWb zl4(*Szbi!Zj#dDLLsX;Z<9P0}$JpLih@w$;%~o`v13xXq8r0RznuXXBVkGPqDcy2K zfy=MUmpg#uBp5C!Jclk3+GT@?e5zm?Hj+BVgpieL!0ZRfn;{UCtK~dmHCQ1d!^8Q( zHGJrDA~_^tepqR>Q_#So-QUQ0F!CZcjAy28NK7iGn4i2^LwDBB7LbQRz&=wAdtfcv zSvfWbD1ekCV5pey!w}tID|io*%+|O<6Qa}OTxCFvMvfG-mfT2`LsWacUAXEi9g=jy93=8IP|{hAj&*#*qvF4M)%XX@>7qMOCgk#>gAC z;b48{ugcX^sMlu>Zzw?|MRaZF9S=oNFR<{yqDBCcqA!eau!J4*7t{U38pIU|NRRG& z#)F#~c~E8>nu^jBuW6PF4eLVzsjKlbSI`&@`F=66vszyx92ilUMM2k?=F5OVP?|;S znwYPb5~KG?F7Yt#D=$vG-Cl5lGO%6Zm%lhInC6`)pLAtbnyrJTG!!#%kMztO?r2-``qVbm~WG#G;uJeO$ z@{LAb&CtV`l428N9cY-ibTWffUIUlbJ@q4R*#@o3HK9>VQ52M-f5?5}G79V~XY=m^ ztlPNq`*K>VJ8}$27TLQTaNzmWwHGh8)L1b9xU>rLGzWlgU9Ll_1qazO;3AL1?<=6f zN*Br24!^mm;SSsQE(%o`!T`6W(KbQECDIC~RQyvCWKtbW(o+{`>u_ifjpXdA1ypPA zfIJ3PuSVqXIVnzE^J&d&4o%Jvb1_YwLTXM!HTiIB-%WsGWloVA=)+6U>!H8E6R$ zR(CljNEqyuWS|FxtO(bI1#aR^{n zU~Bv*%a;w6w+qpN3p9(7(fi6B*AHbp8Lv`=POs|R7d;|HEwZe5#Il@#1HWwXcZ@0y z_rq+ch%`)IS+-Fy>zZ&L3{m4dcYjQ^#?E{of>8#wVR6K0PB*dha1B=Z4df_uO5)Ht zNQ2LAu#Z$WDv7ht$%`|^T!&-MCHMNK44>n;+aw-BF0((YwPClLZwN)5$5u34BKW zp~tL#6%)xO>G6lK@KWi%6R%5&CVUYHwm5Q}*HCoMEBA+lfsKv}I1pMGmXdIO@eA!& zWAcVTE{jDVEGND>$SVH;Dwv%Rd6as|fegG0Bl+GsV3JLEo_>DtrB%L4-4m<^2~?m2 z;>m^UEnj38A=GRX9mTWEJQ)MkFceki{KU465~T2QIX~Ly{@)_tlZ-|UOSEP0=HkIO z0iA|`SF4tEv8LC|l5fszPY}ptJ9)u@K<`l9oMnTzWd8uSMh~Kic@)&v2a!9fX+6Iw zab{Oow-Z3-`_#tV6m}uN9_M)GC~?P|pemkEdBs0_F-G}NTk!bE5FA;GB_*F4Vx`_v zFiulIyk?=~fnO&JMnIVSQP8DrJwtaCV$vWP?d|@$+z$(9CE&vV>kaz*VB(8b6?*|A zTCAhu3&)q|AEm9B8^O!4@s}==y<(z`z-~W0-~_lTD>JM*2=1W*sU8$N>dTHNyOIfwbP~+wAc7^ReHA_2 zL#qI&x&+%7#wEK-<>&>v8+GF@sU!ve0HWENAB@B2dWpM)4+>c`L7PJ1*a$;@dF#9+ zhuPYCFk4QOpC>EWSiKouE-bcrKC&_vi+-V-X5qq*WS>1uGA)V)KvNhU(a2s{a^S)B z6R4b=6mSg$ufu}|1uALI3niPvy$*Bn!YB-Zh^qpw56sP>aR?tL(4KRR8c`zg1ow%m z6Dkg#%nX@FK$g&f`7FY~F@;9Mk0y+>7MiBDr_qoIG%P&7@5eYZ+9?qNK>gdiDumTE z^A@ecq^yF*jX!v%F5;eQJ@>qo0NX6sU%lc^d36&BeEx&MoL5_7F4$f)cZ^-AQ-osQ zGGSs8jL~A>JH}G=`-5K2ykl|2(HzeCM=rKpHj8BeS9{aPgPgVkwgZiLKxVUcMvB;a zJZhbyV7b<;b=RL`BZ$_HJl4>uh8dI4K||P+8~rB(Jg?F6<3brLPDjq%YQTp`pe!kD zDJ{h?a)@|wdE~{>>4NQM^p>#t$^eB2v8lCWbh)hDcEGg5(R7G!1mlUD!P`SD3g>O2 zGnPzc4-u<5Z-ASxiHa=VD(Uj0>3P6yuJ8;}ydY-@K)joAP|m1Fd#B9jAKIzHiv7G` zD1oe~^ISm`gHn$g=fmP-w-wNQZ=H3JiBZGGx%G}>LDof~ml71qPF)X>Hs?SgpQ39P zK8Yb|z19^lwXAL7eEx67BJ7CX9Uda|FhC-Rr7PdVBlFP>W1@1TOVPnz0s_Q|;dJ2g zX^J-|4;+RUY=G;(B5k=RYAB@MgX0sqZbaWCXM>5ugw1wa3B+>_2(7$O!9TtL||+$ZmyTY)57 zM!}V2+kv@a%cM)EE`k>b1gNM8h7jevVjcX!Sg!{M1SV<rBuVl*P!cMx8dp~TKw z)(IHEP{{m)jzd5d7?Mjsym|SpywPHK3qf&o%$-fIMs0V2rYZs&qi_S!Qcp4Ug^-BP zAfF`4f?N=qHDRoo4wYm+yU3#miFS42112=JkR;dUN1ZMGE@l;Ky+iOz*-+L%0C<`tvwYQ5; zri6T$U68bp$@nLqL634g0kOz(5h6teiM<;AnZ%m*B8L3|h;^`?n3BsKoZ(urBmVLq z?~@930Ja))Sv2B7MHMxXh1gq!0VJ>|{WF#v!-yE4^j6`2{`78J{ zMuDJ#LD6P-2z0L06T~$0gj@)a0^d5*nzY&gk=FK0e_76J(#{(CK52$@`c>a>=;MCN zP$X8hpEz_;vca4~pTqC^0vNBX6+4 zY^Eqgu*3ky*U31MM`qu1D4%eodmIFl1~I#W=q1<}85e7WOi2jdxW^_NrIBTy$BDqLH(gz?Nu_Bg0d8j?dH}JRa~TQaQ+hFLZ_%sz4m3GVM2jG{7c@ zKK5<{Kqf2-!E$^XDd!GSbxB@ffCIpmK1cp#olsk|lN~_37JHrM+@nIQVjOeMA@pOk zUVnhVCu*=ZE9QB@SctR9vPmGr(8?!92)l-A-A%#a6fVK#z~bpC_&3KjYII{|DVZ2P zaX&0PT6Zdt>*U4)*fn6;hZ#_j`#t8TB}(60%P@mw5CIJfLuPCsZqbS-BAEcv2L>Dk zVq*shU75Lf^vjz>mt+aaU^r^Z8gS@5rS~C+PX%OO4S;a+jKSW>TynHIfq~^jp@Toc zLkg5;o6~;&7P4|3#;c+5C!#o%!1JYmPuGA44%28*RGYpDD}>9Z z3_$tK`UDxkKTkXT>3y$a-!OuhQD3Qn?E9Jwn zxxZ$}w3;Cu4%5E^uQpY29Zu(yJ&fG2#f?RCe#G^*LqXg?2EXNUCk9%p5I8Yy$@n0zA9)#V38k%j z9Ui&L7x_r&MxEm}1-jAEe>tQt5qoHvImTr$>OL`PP9U>u$DAbTQuJO|mKVT zgLx@Nw|Eueq=ss|s<$3iGZ@;SG#YNmi?25UWCECQrA|0=a6yVRBfCeiC+8PBqVV*2 zvo{WAl^dtze{Le;HMC-LELZRQX}mQS#g>pyaz6jrEX#L`OtlAde4D zEL2S@{CGdicNTG0RCOSE2jbyyc4eVBsTG^b#nuWnuh-TTV#JAq{_6*#j9NgfWE>bk zJRAf)ZyF2cbBEccezFo(2xE%hoV!tkX$}vQyayj;0^$DvfdC6mU*-r@t3+e2gpuRp z1Az6yuExD&M}~okB>ZugFdTCL`R+fQPq-sOqz9c_3x(vBT(eqkz@zBs{MCRv1miq^u|8nlUNU8KeLKp_6*IYIVsM=MTlJ(s}vsZur(}bG?c_v0*c{ zStY|c00f4G4$hA_(Ig@g*vtmBiU-*P4G7*wY8#Y|jH)2L;gpa;JAue$JV1|gR}Rz& zmi8pdh#Yvq9!~PmHGyibLjVGR?j+|p23)9y5V)wjmo|Z*La|t=aUtuC5XF((RTxrk z4?(G#3~5%)pKRNGSqyAHGk6nh4#9gqeCF$Hl#vbk_}h`j5ecw^SA{<=CaA2-uX2n3 z04Y&$ivcbb5of6meR2Hb{gJg31n^n#bA>!m;!ZT%M}HWx*CiGpkA+-d?A0qlD*5JC z8GCDs{hp2Hf%3{8-R$SL&hg)uI?-RiKMp=1;#o&&bA_?IqJh-!<8tALF{hM$zvpF~%UsDiQ-4SZvo5j{jBoqR`5|0$Z zkUs!u7Hf|=q-X%zPzMlith;VxQ0#P$qxvpDYG`aPl+>L}HyN7h0hIZK{WxYPWC{H} z<(meH2>$@3+3y-#@@;MjRVf2}JaF=3iyVkVl=CoJoR+5m9xtXDZfYS=?uiF1@t`Yi zUxM6z0)@Q+&o}@Gy#%q(7*SEeg$g&lVumU*#NVD4Wza@3M-hy9i1UGAI2;FNr@CM) z>L@mu$Gex2#$`OblwEANyE%wN{{R^&i3=e#bYsG9jwng$_J|(_F%{eb6$O=Unarr{ z=`@o~%@5$vo_^`e>o#DKJx7S&o^XMwIhrNJuoVRa0Z%J|GCh!0MvP-goCO5qh;-DX zjxH)k1y-uX^V#u-5N#5k8S%%Ab>LuZ!1^$rS1UzOL$w^7!EA~>YCmQqIpAC>Bsv8I z-dSNQqykTt3iOR@4^3kILwvORDFBRm}Vj%fj*Z%KX)POvf?(R73nm+-)b z3xo~r`#U_DC1nu=MScc?@smT+DM55m^T^2rW1B5wm-d(+Ro4JT*`p2?HxBHns09{s zQzppbVdV!1-TT1(Luo!*=B&U zi~2xy!HE-rHjUSp&Iv>fc4=wA9VZ5}nuM!HbwjPS^N9`_iLCo91Lr!(tI%m?ayiwW z!RxIgZZn`GMF~;d#IOoMpeR0=)5@d*ogjLe>mPK((uZ%1U9AsBu!@FlB^f>A6Ie09 z=HWwL9?fl&!$AijQ1Tdwws0G3{u$nc+JOsV8#OL!Np2FM+t;%igrP{9F1s#0{CpIM z7<7KzsU%X^j?-VPsz6(6(}ykqD#TvQGCs1@i~J#k*RbZKJPv|m7NY)e9^)WJ6$z%k zlioXp#uG@bO^z-DWRjm#t>t9M6ylHeWf!TpP_qr}X_P4?=fHexJRsJCPG11H=sxH} zKN-I5LIi7{hO?o;nOFvlD32_9G3t49NDw9e0Px^raFj?Q^zf@aT)YAlYX~}4y%;1! zYj8TJ#Kv_sltLQcEwRWwPA&vR?IrtbE$5+|s^2N&#wnWJNOh-Nt|tQ3&AU|lH-L=@ zIaRLjU3tKm!VPRo9UP;k;xA>`3Td4|a>fw3McH3M{$mK-wuB?m*~*x@I4xnDR_{r_ zSph4wKyskyP#fa}Y=+3hdhE*@TqPhvaX1WDBi4M;YTzXNHSAc88w=K)K(A)w(5HEPK zVOzVMo}NxKQIw&LCs>ng$OFO?<&ASwY>VdTe|RI{(8bU%8XtIvU<%s?q4t>t9J_4~ zPs1n0vJe2FT7a9^jC%~SO6*)~8+L8t2ensh3_XBO2-A26cmy)T*lWEg9ph4@5Xy7! zS9tx171S21iQ__9&5G4vV>H|r&GYPog&q>{k`I^ToFQyU!~#}PtS>Z#VAYq&smn6Y zo*{1lr!r>8?`>EQpcl zXD2+@(mpCd_knST*Cz&`E(`|zRazZU>DC4fBH%yCYiANgD;mW8!8`{t_{2w$zziP4 zaKXI^%#=zmKNB=Nja3Cg8lNv4#*y$OMn)mQ#K~eobDB_i;IqzcHji;SCK_BN!O{dn zTW2k@;Rjd(06qw{ZE;*M5eRwVs?}8j5%RDX?NA8lvzBbkrYjn!lDSb^D$?A9Zc37( zR7ew)<8DJ^(NQW6B1blD286wxWn;8+SzcP9giMV^pW@)@o7RVAgo1m;;(A2KYKX(` z;L3gpeXicKQl(t$Z^P#lf*4`cIQA;zb7&C(eEvMS5xg4?MBAsv7>B1~#;=HHC;=^B zUln}#dCeSz8&MnlLlxCxyaGe_tkfHzf$aG}T1+vYd9);ogmqivEF@b(ZJ_`a#TD3C zBVpt>jEa?vAtep9jJ)DEphj2DrQ!US0|W_dawP(}ujmRT>2-7y4H}>~XK*#Va0;h# zZqL0&$DC zz^Y0*B6uN<1u7|_LL8`m2{FPBxm)K;qKS>r6(eF2LDJyH9UT^TJWKZwv|Hy2qWukA9~Y^q7$QzoXX(4mj&Ux3}~e2*?_hk^%ke z6pWArwnA%|`Z>XQg3Qrk9ngc$B$jJR1yS7`v$TRF0xBxtvOJndd7lX7E;6MMN91n3 zuh|P~Ja;v4+1^+v9LoOyFaTgm!qhd{w$E6OwAx7k_6`x` zXu3;4@l?oAsYq)KFHX$gB^|*`h$=#e#2!E@k;m3?s6hQfS7sLrZE?$($2%!kSY{?DHFVQ>k_`wX4 zv9Lm^#K4i|hM2lY;HxMdt$#(C%Q-(gPr;9z(aWeHjkm_QYlRw!kEy#{3`r1lSulzQ zVW0@MH9(k5xvmHlJX}tTLXD(w>+CT0y-QWsfOh)DP_@q1D+o?o6^S0_-Xg3uaC;uy zeJ<3GxbS0Z?$##Fni#$vZFnWK)mJEuMyi{=)1O?1Z&>nq0OGV080=CQb{_XKdIJg% zgTax#GKEqC-N_dYAMaj7VwpMX8U>BX2(^g|sWQzcf& zO{uU)QVs7naGsNDd&V#d3VkpZh*FjR08^I+v=j?jve0ih^@~|35}`Rdj5wM&#U@$v z4{tf76)lH;CFb*o)0(`7_`rxOpitc`27IOv(j5f^H~?e8bZD|k5!VTVf+44{DHw?J zoAytZmLf!;uI1JfNLw-SEVFnfc33M=`Y`Lbe%Y+fub+ZH7!oMGI!NZ{!Y?RrUjSq6 zb>MO$)EdYp0YvHHjj}MZDjCe!r!}*47WMk0@by1g9PelwvJN94HKkA5c?pnpQMU{{ zpEy=TN%m~UU}=0sG1WEDG>13T!?GZ)GwZU#z$C0|eC2TYT4O+IZG%QHDT<;xOXoM9 z1r-E+60-x~Cd;#K?(toLHZ>r=19Q&sJwrt%hOys!U_+{TOb-S+4K~~6p631U5+DeV zbm8&O)=&L((Ah-U=Ou9pGi{UPD}r$lIy$3=4ni^BLc^O}07YU8{{Z4=x`imLN4?m^ z98ebC)!#T6u#m-*>tBZaP@#p^wgEht<~I1>!Kx-wYEiWy4*`nM#Twerq-3Tg$|4EQ zlzwm|fEF51q07(f5RI$*K)Tg;lja|w1o?4rK3xa55x{~`<6hxkcb)B z3Cn?CT@+Th?lt+%IqOXJBfSiQ%f=>E)_Md8h% z;y6QQ1xF+>%gWiWzi-Yf0ja1|OTDmIjV(usX3F})ofm3kws7MN8L0?JmGqwQYB@3( z#=RKUT#<<)L`*I>$|q!%O@+o-VKt(Q%M3lLP#q)6jW>p5$@hfm6Y-AAS1G#*Y2V%s zFKC&m;FQmJL_%v+sC+4l@zG9H+sZ7MQu;~MO}=od;4X_aPX-@Ib3`w~K<~F83^Z9{ zKhqlz0>#-#cGKexcujtn{0WOtoVo=klBL^iCKp=83aE;hRX+4$8A+8|FA7+W}!F z;pJ`P9yqR1syi#DXi2U1m$0fWGDhQ9j+~tJs z7Q^-N(~nycB|GiqXKck8NP%iJ=9nQlRr_1%ni8n;ICGMbL}5ea9XA}oMF1!IMjO<0 z_PB3~jbNnaR-Tv^SF6E}$cbc^=;(H1W=IXD{{Rm@FxH4z@RGz_LK!I8DPVRNgN_Uv zMU{Ic)bicnt7?#*3OP}mP#7oHP5_?pdLHN5z?ujp$5X+*l#CF#+APe z%c9X%zDQuf^*2-7#Cy0tPojkd_qG`=0d|H@!Tm?kAV?AkCwF;1ca%5E>CH)2nn)RI>fA= zP}%W}F@jTgg(D&}Um0ofE~?VJgZMFxSEzvo%|)YsOj1w4gfQT);9YW-W{+e7*wr36 z0CA+0y%y_9y6Kg7gwC}iJr|6;dtm^yzXeqTMD+j(fYDX*`N9n`aM-f>Ex~LdI&zWX z5ga+CgDsWl{{R?WhPZAk%h&4^8Cy#mCAk_rsdaH{0#eH!M7 z#o)muqFwt2Z3P?#(*{vI6T_BD+JceM$<`uBS-W#IlbfR*lH$9uP4(y2I~AcMzYv9n z15BkCWxih+lSA3L;JA%C6qZF$M-Eb!!Ve@~BLWHQ(ddvwxL1786=*bICeKI~2Ze4K zFl^V$quPzagOX@A7qhE|Hl7?HhEb;;>HrekRokS^{EW(Mi#h8A;6{xt1;D+x3GJb5 zn;D^h1~^CFXI=spHxbd+0Qt9W6|)1gF3&EZt>AAOMFbmiX$Ft=nlu1%soBjP%S|9%a(Z#bwCX>OB%Whse_IjHMA1U^oenuOU!IzgO~1MJ@jTf#1`P4Rlzo!@|7di!2138PV3e znHx5+-7R(rEZ#k9#@4H}LEcNJXv9__O(Ts8>u*<#1szQY?eGksC3f(75{%Yq_ zhh#^{OsBCL7PzLCFw06KiA7B|55&NgQrN1j*H!V9Z}LUEK;st39k}fu zI!rAB!+K0Zse<;`*;xB9HV0RXXVMGr3BN^4f&T0<3M^HK&&>v%CJJ(jS71bZb7%Ju zW7d>lCoyNX<&1Paq%d@%N9PV+kYHTB)Lj@M)wA_0R%zom<)PaFE!5U-iNMHtJ`h#s z6{>`|Wq9EJ8FjNBL)VWK7PqT&<=lCzV~00ukshER!4wgH81^>N#M+jM_e z-avJTNA|BKD{0gKYafIOg$US^qBHfqb8z;VZK2;l1~8$rT5xCQMmPPUnpVFFtc*Vz z4q_&i9pF_nu}VYypEEasaWUAvcE0MeYt>RrECK^c94|G%k*q_p9ado>YRrJcoy&s)%|oNQJhu4C zHn#W(-w{kCnM`L&Lt5dgV@3KmTqNm&K7#-2tZ_o^%7FuJ)i=nRz#&1gMNVQG^7oZ`YTbjgyLhGt ze4bY*SdUIU5Y+i|EAi1}B2I+s#ko%=9!~)7Wbk|A7<@T>3%ZwA zBk;#((bYafk2pP@xK{D6PVp>miCTZ4y2(%P-;P< zkNN)MmcD4mr?z3^IL;|&5uPzw6k^O;m4v#4}(;tZMrOjLQ~q{RlD5N%g{ z0^;9g>(YN5jT^xz{{S^}XNM4pwkwoFjY-o&>l9LK>RAjf>N!S(;KGWGbq5SAaEU2E zGSG|h$9DxHnH0voK0M_~L$>&jK{uSdV1!DI$a%=h34MS+MDqi4QAVt1$8?;@8)3YZxxHc-i={`LX6hPo#9X`2AfrK3D+)_AK+ks zXyc-vjlYaS`|bP_fS=S8c$ z*Nx#5l2_=#_ZyAR7x94Pt83Ca^~NDuRrh4;!~1YrkGdN9R8JQ#zW}EWK@yh;At@dL zz;{XfvlyMFPWa-Krg8UbNfiB1PF&;&pwXADH!S0485T~zxQtW)itQTJFc4yLLi}1~ zB`Fh6r_bjSAP1mXDxm5HcH+Zo*cKd^6pAmkN#w9g{{TYEYzwru-%9y$b7B-9 z4WRLRhF*EeJ%9%CJhkH%O|*h2XNbVpW9^>Sn50uGHJ5E7W2mz`S44&RGe$X_J2f^s zz=O~*0BuqXa>h_aJQ5Y7yoOx6bRv&q15M~~S_gIBvcaa)rIYTF-dK5dZ5RaX36eh+ zF<0ccTmXDGu=reH72E)1bnh2s7X#$JO$w9Y{vshXgXD_*&LXSOWV2mQWzTc zJ3AYs5Ygu^<*i7fDV3&3uS7LmFXnB82A%>5UjZ>%n3WD;-VBOTqG&z!yadFbD&2cCWXaTl4EtM)x{z#9tPlGY}q!NHYsL| zsA|DY^7%8IgF)=*cpssVre}y7e1O*sbhCX9-}Yi^DIhdUubv^3;F3BI@PEv&ph;JU z_MZkoWSH_*f2Phc780SQ2B*n^2wwnr^G622KpI|C-@tsmS8vJMH2(lHL`Mw((V_G? z(2|m=X#+VY8tNcOVTG$Ca}Xb~a)UfKOMcAF5r85^C_X<~&0%#`P>OCZwXzl8XGwhR z$E46`r3hb}g4un2>`wyzcZH#e=BlZv%QEt%vhBe&4L)>XYNb4&tBJT#g4qkWe>F9Q z(Jj&y55Qy1t%+;_cqQH&<-{fzaV&}!5}P?3V#6RrYj63^Ju&NPo?4J~H+73riDvAL9-~pvLN71TXQ$?Fxl? z6nNe~!f77Fo)K|KWF8UZcLoWFV?=)AIQDDvaA~*T*};9M9b&f8s0wX-g)!dfH)K(5 z$-ko}hw7~=Cu58aY=lulg*-5)Su@Evi}r~AGnV}k`4OfuqBpZi^P)#J7x2h+8-2WD z$P{ibqpH6A7=ju*GwhkU*c1nLEKT7=9dvdJ_J<6ZCjxUDVu`5TZaFGIsiJn-Cd^!g z01UQ9wY9|7b?qFU7cFOmiNcoGG=-_gqWxFr0FN~rASX!G$9brgs3X3(Y|ck9lspz> zkSOK!9!O*nsT&j}hU9@RH{=aXES`6lob1;70gsUKn?{={&QWi^I%#QQz?#7Fs-#aS zedV9q0DxL^&o1?XMxYE*t03#^6Pyx9rnxDsmF>n$hpyc~YL7}{nQ(`fNbeU0iFfTj zl(P`%A6QUz13obtCEFaI@OaAVfCbPNoFjsDZji8WAU{k~5wPoWgRLLM>uT`RKWIyRPvd$$@&w24CBAr}_JaQ^@dbP9JuD$E6zRoM+C(SZ%! zd!Af(a(TR&BsQ|iL5Nb2_G0bq6XDX%I>Uizpi#f42*?c^%YF-ItUyV;a>&TnVfe)~ zM1qsa@|jVIb^^=KZN<~n3&>INFjXDtBv>xRzFbThNwO7JX>k^CosjTzr!Md$C4^2W z2gW&c&Jdq20_N)G({gXy!7yW895@;hYBbxtFBKxdR*`zk-5+83_`Aj;9-0Z~D3boM7nT*ik8j zE<_aSd^T^^Nx@|V*W{|cFco`80*D@Fv9R0{>5zX$7NH)(`2PS{1aP6$Kd@z^HdHKo z$t0I|jop53v4Eb-K~E>&%bgCc&SPW2G`U`BEupTyc*ToD&?8X2Zrd@*6{c9q0WHyf>$>TSjA$tNgC$+B_s+fvkyzt4t&Q(79 zHNpboEQx$o23%c zmVDOJ^Q4F~{X`yFSF@MN#zHm;nQmS!ZnsUjFR4ozKYIFxVu9!q6OnK70S&6u%_eaTjl zF~ivRv4zYKqQ#mJC5D-?&0v(JelsH>Ei*)+#WL2&prTUtr4%vxWr=s*_sjo(e|nDR zK91+Q?&rgG-q(HJ*L8Lzuk6$ti%C{<|F|%f0F&PLS9}^x_A_qA$%119peHArm~_m; zh8*;*g|DvGlEN~l#S*s?&b~IiKkSk9ru_{0LHl+{X0`YiNC7KEr#6?mOPhGt1O-^a*a0Bt6=zZ)>~NjwIf zu3(B`WLA2wzi^x#9#W}GhIK*LrZKnP*vLKqtR&-OnC&EL$;{mX-ajh1Nf0je(dp6~ z=NPAb8*9ARGRo1oUM1F9IQc9|J+4$^>+&*K;;Gj&6O&QE@=3%I;W1xd=QkEHFnyKM zvccAXS&P?tiNngO7Q)rQ>V>-4BV26-(Re)}v!lW`8r*+=rb?9$drPT~UHz5gW`C$X z=oXn^E@Z>_HYeAHv?YQ8nGVC$KZ*8USlbSOw^2pE) zT|2{AtNYhwPmX)YqPx-+YVnbil8&?Sge>x6>Mx*ix0C9oq#jMcJrTue#Ef(#9_=IC z(W4BVb`ATj9(Yl%CWb0Ii%7aH$3&syP^-r?MD`8WI6GdJthj!l9H!sT7r4clCNS_dwvt&NWp~T$;i@h0sY>lp-GZLe zSLT`4n~pT>;0OC8X6ofyt8ex=Q}M-ExnN)4CYEJzu9ev8S!J6ikGEZxQy_&&R!;)Y z^gVOu%TPYqNV?qfFW6b?S1-1vvi$^;&wmz7#oCW zsc9m|QhR{S;EKh1(6={PoF-F)uvSi}$wzd;G|j|5L|?9<_n+C!D^djaV!}lcJC4ok z5o@kv(uU@7nVTKB`RhisT$R@Z9$uwCO5WkBWz$*ysQ66i@uoj(W_~= z(}`^lxMVSxEh4!7yk@FLYG2a+MDcnTvrC%xFvN@2>hbK(^keDD!gW{kl~j^ym?Yhxzq z8A;DiB1aMsnJz**lSb9%uR$jQ?I%M3r!a@Pgg2)WZYN~ULg+u*{#Hzu z7OS?;VMc}W2zT@ao*xsjzGM|sE1~na(G-%rf8wa2&%Q6ePpM^4ICSN}Lg}sqlb?gT zmsOUS;&BH_-tvsf>>(F?dhdeOI`1~VcporgjG^Y*?W9zCUHhs;d5q1=#!Xx>s~G%` zcFH>olkCom-}pL^ApaSYl(4$Hsa4RI7>neJ{^)*C`p(b0C+EK`es>}z{HS6}eF!1R zUnq|xp_5xDPK7>WCPaR8GNzq1Yx-fdKs0Z_80)`kL~a) z;6|w7*>T?U&)NSRa4m?;#?09&RabHP^?bA4JRbF59_p&`h{Fbs#nYzb;pH1el_g16 zgN$^%<&G7y`NFU0n~FpPeVVVz)!{+GWYIdhg4~3o^4{hu{%F%ibRw7d?2LXQauqdj zzu1)3mLk_DT74cTif+ERDd(1EDYqyPpHl51cyI@|*$%C#q6;Q-M)RMmp$y#w$Hm@t z>;Y61zcoc;0PP9k4o@L`CjIms&n*|B{YRlgnc3IY*ZGw(3Hb6h}>GC9;)On2-|8 z8OiwSsJxvEg96++qC|G`a9=D@obicVHhQU$d z*sG?q)Ah=Qj{FnOm(vdo@o?{2Q%8D5Za=7a=aYY8og`whwsP9LBO6=+I#1;tl1m4Q z{}3)ve?#O)J$B-$uV#nz@Eij*f%p%;*ymNVUKa0lyhI>BNM;>YqaRGeuL~tzNHh>Z z7Gnh;X12;c#K#yMa5V17;l@}4m(SO2;*|EQh`Xm=exnBGc76!)B_D|~I98MzJ~hO) zJ9%jEi$0`IjTJGO)KNf*y>r*V6zg*zcbcs!-Iv={}FV%QgmUEZBL!NGqC_U&et0PfTN0)%C~C zj&pw1eKvyQFL=1>H;!N;PFp@uv8fs=Ia46r^17@X=^`(}y>(d{Z@D_^Tfmx8< z1C&4BaXGjL7+OvHU6cBD5Ad@4+pAsS)X!;G)8;q3SAOjQx>v(?@0b5gn|r(Sl~1FJ zO1S*^y9ZbZ+TMB2zplBUxCgM@1-$ybW7fR~Xy@($N>=s&OJAFTD_<9~26n=}y(*vk z6}AU3!fLNt{-wfNmZ24Fom>%ETv5dlE~ z0ZYJ4PXv%fB>ov+ZstWd|MqGD`*XYHb1h079%v%HCKtdq5vAYZQ)ErFXdEGPShMz9 zGxC}nT2yvoV;@>VBtRG3{6MEc1J5?}z-Hpkp>Nki-ngS_zIG&yD?~f-W=%BM4;lJz z=thA1s=JosOZF9H=un9l{UOkn8AXayHE4jp%XSNU|7l#9epD>MH?-uPG>(W21bcf; z(1LtLX*xp`hkGB{+ekE6r6Go$=KQrrMI zU2d42MF)~YR4}Yu)w8embv?jOA*U%i3fX_kQ6awP&f)n@(QQ1t`^J?EVb-%YHsQTu zHa5sG24^brh3xe0P-;1TDz6W;B+oDi$5TWWb1p3B7{kFP6FITrvGjGfe|xEOg@)th zw%UtWeLE6z>?2U7b6h5~r)Rz4+WY9iPADnBQge;2Kk&&`S0zdPjyER#-Zb-pZpesQ zp{=ljCMXuO9U$gNj*6@_%}JJa(+{|Nk7CV*s$-})mQuk)39cBJ;CrOu+OW#nQ?}v~ z$&Og6Et6AF)m-Uj1H}w0C>v%FQ-~&?X+1B8S?2gMtx{)WH_=HO=cpooy*OBp+B;(2 zCwRDX7ojTy3M)PJ5Dasu?u>G%Ma3bO;tx3HYg4E=G&ooEQE@zuK{AWWb7CP0WQG%; zD2#HnUW$dGYgx6hj}X3yhcTs?%8M|xRtV6k##rwG$PL~ka9zN-lD8DO!p>ueic(&-J%nWj333h=2kTRaL+Um!A;6^&dD5 z(dDf~62@JM)ogeHC`pYR&{Qq8E@E*z=O=pH4Z*iB@Ol-rsPrHPqL~SGdGKwKr61!C zX3MKkwdun`%qGU|4%TCZ^LPL`j=7h8rNZF$BgKi|lp0n*3$-p6^lY56EmdmCP5 zUCdg8{kDk?eKc0snMuqwP@(#Pvz(S2Y?D!?U>`;{Gc*W+>NG zTd^%pMh@16F{T@8VK6CNCe&OvK<5S7@r6jVEM0EaOODEo;_0C5otDJJe&oX0X9%+m z(QEjcLrH9RC)Ip5$cGYrCdr~t!Py&GciEFUF)nt zT%;x%*l-*fk)*R#MmO-J$eFOUjnSWAWh6|gs}I`*oM)?{Yx@B)uFi=d=kdY_*@JVa zb9ZicA5Sb{z148*?HXyYfla9*wd_}*)G}MMl2K@{q{I2lw8Fzo?|022if7zpTi?S*yJ=T$m}Rp7wt*Z9MN;m@sfy|`4pZKv2Drg+-3OH=dvG4gwI_-SpGj`=3}$K{~@y^ zLcy)eItXwl&+V`e?oTXT(dGB8QMt!SquQg-rg z@uu6xRG@m@W3m1?EwAOc>E+0pNO2KnO`w?5p$jEs-S%}HXH(0qby%|v?UkFzI`>`N zflmZp(1tTq0`-Ey1WmhRep+uCe9tbRkO?r?ds=zr6V{KCS9#+#bM5RLdt5tz~oS0(B37sT=T9kp{J&(0NzA2%8GkKztyW01jhjkW!Bc`3>j5&I4h3E#!Ik>5Y%C3rfJi0HaNAX=q*5*sxYP$8L% z0Ch9bsTr#yQAHu>j}Y+t-ZrAB2SCW*Q#D3Pw9O{&AC53f3Fe`CzAOV(ucU3q2PfT#$PL-~@*8vAyOQ7EORwpfR9DneC4dz$dR zNFqAa&B28H%a*HS+ADqon&QkeJz@H1s6i{42hzLZb2V#K)>ye zFV=$l|NGxbAiBIxrsh#Cjwr5=GvBWsT4s?s_2ZBT2`(m^F%>>D6S;^cPLDnL9)|bZXyzbuoRL4EP(Ds&5i1!C{M1!DJ(GoM3Z{)nBQ=4kRa7gpGI)k|Tkn52EuW#%mRTkVGh_=)=;M z!c&w?*Fy?V>sl~bmMlHZ=H$&3N{fOuu0bk}*ctjh#VO#gkil6Qfs(X(JLRDIkBYu% ze=wTSX>=_VT5pY$S2&@J%LR(Hq*XO6t>qcoG!0-L1X64Zz$xW-Jz3b2@>=%0XAqDU|hl_t#!-qsk* z?{0?ONmp7%!AuyoC;ItO6I5`sqL_M}ueK^oL5n-HP}vmu_Vy&H_gdR< ux&aT4=XEXt6R??!tP7IE3S*stAbCk%Mm7aYo)87TD@efhk7M8NjsFKLyK#U3 literal 0 HcmV?d00001 diff --git a/files/en-us/learn_web_development/core/design_for_developers/basic_design_theory/lightbulb-icon.png b/files/en-us/learn_web_development/core/design_for_developers/basic_design_theory/lightbulb-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..de50f7d2fa88cdefa7f4004d48995d809189a97e GIT binary patch literal 2391 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 literal 0 HcmV?d00001 diff --git a/files/en-us/learn_web_development/core/design_for_developers/basic_design_theory/watery-view.jpg b/files/en-us/learn_web_development/core/design_for_developers/basic_design_theory/watery-view.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8d462f72e4b7137c7ab6dabf6014a5540d8b8538 GIT binary patch literal 39046 zcmeFZWl)?;*EV|N9$bP13-0dj1lQp1?(Xgcm*DORGPos3a2eb!xVv+B_WQiw_v_TD z^MChL⋙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�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 literal 0 HcmV?d00001 diff --git a/files/en-us/learn_web_development/core/design_for_developers/design_briefs/index.md b/files/en-us/learn_web_development/core/design_for_developers/design_briefs/index.md new file mode 100644 index 000000000000000..27ddfbb023d382f --- /dev/null +++ b/files/en-us/learn_web_development/core/design_for_developers/design_briefs/index.md @@ -0,0 +1,49 @@ +--- +title: Design briefs +slug: Learn_web_development/Core/Design_for_developers/Design_briefs +page-type: tutorial-chapter +sidebar: learnsidebar +--- + +{{PreviousMenuNext("Learn_web_development/Core/Design_for_developers/User-centered_design", "Learn_web_development/Core/Version_control", "Learn_web_development/Core/Design_for_developers")}} + +As a developer, understanding design language and communicating with designers can lead to much better end results. This article looks at the mechanisms product designers use to communicate with developers — such as **design briefs**, **wireframes**, and **prototypes** — and how to interpret the information they contain to implement a feature. + + + + + + + + + + + + +
Prerequisites: + Fundamental HTML and CSS basics. +
Learning outcomes: +
    +
  • Speaking design language, to communicate with designers.
  • +
  • Interpreting design brief requirements to produce an implementation.
  • +
  • Typical tools designers use to get their message across to developers.
  • +
+
+ +Learning outcomes: + +- Speaking design language, to communicate with designers. +- design briefs - which communicate details of a project or feature such as description, target audience, objectives, deadline, etc. +- wireframes, prototypes +- Interpreting design brief requirements to produce an implementation. +- Typical tools designers use to get their message across to developers (e.g., Figma). + +## Summary + +xx + +## See also + +- xx + +{{PreviousMenuNext("Learn_web_development/Core/Design_for_developers/User-centered_design", "Learn_web_development/Core/Version_control", "Learn_web_development/Core/Design_for_developers")}} diff --git a/files/en-us/learn_web_development/core/design_for_developers/index.md b/files/en-us/learn_web_development/core/design_for_developers/index.md index 337d9fb7efe5883..56bda9dfe4fd233 100644 --- a/files/en-us/learn_web_development/core/design_for_developers/index.md +++ b/files/en-us/learn_web_development/core/design_for_developers/index.md @@ -5,10 +5,7 @@ page-type: learn-module sidebar: learnsidebar --- -{{NextMenu("Learn_web_development/Core/Version_control", "Learn_web_development/Core")}} - -> [!NOTE] -> As you'll see below, this module is currently only a curriculum outline/syllabus. We are intending to convert this into a full course in the future, as time allows. +{{NextMenu("Learn_web_development/Core/Design_for_developers/Basic_design_theory", "Learn_web_development/Core")}} The idea of this module is to (re-)introduce developers to design thinking. They may not want to work as designers, but having some basic user experience and design theory is good for everyone involved in building websites, no matter what their role. At the very least, even the most technical, "non-designer" developer should understand design briefs, why things are designed as they are, and be able to get into the mindset of the user. And it'll help them make their portfolios look better. @@ -21,56 +18,14 @@ Before starting this module, you should be familiar with [HTML](/en-US/docs/Lear > [!NOTE] > If you are working on a computer/tablet/other device where you don't have the ability to create your own files, you could try out (most of) the code examples in an online coding program such as [JSBin](https://jsbin.com/) or [Glitch](https://glitch.com/). -## Lessons - -## Basic design theory - -Learning outcomes: - -- UI design fundamentals: - - Contrast. - - Typography. - - Visual Hierarchy. - - Scale. - - Alignment. - - Use of whitespace. -- Color theory. -- Use of images. - -Resources: - -- [Fundamental text and font styling](/en-US/docs/Learn_web_development/Core/Text_styling/Fundamentals) - -## User-centered design - -Learning outcomes: - -- Understand that everything we do is for the user. -- Intro to user research/testing, and user requirements. -- Design for accessibility — consider the target audience and what additional needs they may have. Design for those from the very start. -- Understand what design patterns are, and the common patterns used on the web, for example: - - Dark mode. - - Breadcrumbs. - - Cards. - - Deferred/Lazy registration. - - Infinite scroll. - - Modal dialogs. - - Progressive disclosure. - - Progress indication on forms/registration/setup. - - Shopping cart. - -Resources: - -- [Accessibility overview](/en-US/docs/Learn_web_development/Core/Accessibility) -- [Inclusive design principles](https://inclusivedesignprinciples.info/) - -## Design briefs - -Learning outcomes: +## Tutorials and challenges -- Speaking design language, to communicate with designers. -- Interpreting design brief requirements to produce an implementation. -- Typical tools designers use to get their message across to developers (e.g., Figma). +- [Basic design theory](/en-US/docs/Learn_web_development/Core/Design_for_developers/Basic_design_theory) + - : This article helps you make a start on the fundamental design theory that it's useful to know when design web interfaces. You don't have to be a master design to make a difference — with a little bit of knowledge, you can create a much improved user experience through careful use of fonts, color, whitespace, alignment, images, etc. +- [User-centered design](/en-US/docs/Learn_web_development/Core/Design_for_developers/User-centered_design) + - : The overarching theory of **User-centered design** (UCD) is that everything we do as designers (and developers!) is for the user — understanding their needs, solving their problems, making their experience on the web better. This article provides an introduction to UCD, the kind of research you can do to better understand your user's needs, how UCD intersects with accessibility, and the common design patterns you'll encounter on the web. +- [Design briefs](/en-US/docs/Learn_web_development/Core/Design_for_developers/Design_briefs) + - : As a developer, understanding design language and communicating with designers can lead to much better end results. This article looks at the mechanisms product designers use to communicate with developers — such as **design briefs**, **wireframes**, and **prototypes** — and how to interpret the information they contain to implement a feature. ## See also @@ -83,4 +38,4 @@ Learning outcomes: - [Visual design rules you can safely follow every time](https://anthonyhobday.com/sideprojects/saferules/), Anthony Hobday - [16 little UI design rules that make a big impact](https://www.adhamdannaway.com/blog/ui-design/ui-design-tips), Adham Dannaway -{{NextMenu("Learn_web_development/Core/Version_control", "Learn_web_development/Core")}} +{{NextMenu("Learn_web_development/Core/Design_for_developers/Basic_design_theory", "Learn_web_development/Core")}} diff --git a/files/en-us/learn_web_development/core/design_for_developers/user-centered_design/index.md b/files/en-us/learn_web_development/core/design_for_developers/user-centered_design/index.md new file mode 100644 index 000000000000000..dfdad3a9fc756c1 --- /dev/null +++ b/files/en-us/learn_web_development/core/design_for_developers/user-centered_design/index.md @@ -0,0 +1,57 @@ +--- +title: User-centered design +slug: Learn_web_development/Core/Design_for_developers/User-centered_design +page-type: tutorial-chapter +sidebar: learnsidebar +--- + +{{PreviousMenuNext("Learn_web_development/Core/Design_for_developers/Basic_design_theory", "Learn_web_development/Core/Design_for_developers/Design_briefs", "Learn_web_development/Core/Design_for_developers")}} + +The overarching theory of **User-centered design** (UCD) is that everything we do as designers (and developers!) is for the user — understanding their needs, solving their problems, making their experience on the web better. This article provides an introduction to UCD, the kind of research you can do to better understand your user's needs, how UCD intersects with accessibility, and the common design patterns you'll encounter on the web. + + + + + + + + + + + + +
Prerequisites: + Fundamental HTML and CSS basics. +
Learning outcomes: +
    +
  • Understand that everything we do is for the user.
  • +
  • Intro to user research/testing, and user requirements.
  • +
  • Design for accessibility/inclusive design.
  • +
  • Design patterns, and the common patterns used on the web.
  • +
+
+ +- Understand that everything we do is for the user. +- Intro to user research/testing, and user requirements. +- Design for accessibility — consider the target audience and what additional needs they may have. Design for those from the very start. +- Understand what design patterns are, and the common patterns used on the web, for example: + - Dark mode. + - Breadcrumbs. + - Cards. + - Deferred/Lazy registration. + - Infinite scroll. + - Modal dialogs. + - Progressive disclosure. + - Progress indication on forms/registration/setup. + - Shopping cart. + +## Summary + +xx + +## See also + +- [Accessibility overview](/en-US/docs/Learn_web_development/Core/Accessibility) +- [Inclusive design principles](https://inclusivedesignprinciples.info/) + +{{PreviousMenuNext("Learn_web_development/Core/Design_for_developers/Basic_design_theory", "Learn_web_development/Core/Design_for_developers/Design_briefs", "Learn_web_development/Core/Design_for_developers")}} diff --git a/files/sidebars/learnsidebar.yaml b/files/sidebars/learnsidebar.yaml index e26cb311bc13884..2ae20605016770d 100644 --- a/files/sidebars/learnsidebar.yaml +++ b/files/sidebars/learnsidebar.yaml @@ -179,6 +179,11 @@ sidebar: details: closed - link: /Learn_web_development/Core/Design_for_developers title: Design_for_developers + details: closed + children: + - /Learn_web_development/Core/Design_for_developers/Basic_design_theory + - /Learn_web_development/Core/Design_for_developers/User-centered_design + - /Learn_web_development/Core/Design_for_developers/Design_briefs - link: /Learn_web_development/Core/Version_control title: Version_control - type: section From 10087f6cbc813e41a7298228638bac97897ebb18 Mon Sep 17 00:00:00 2001 From: Chris Mills Date: Fri, 2 May 2025 10:30:12 +0100 Subject: [PATCH 2/4] write first draft of UCD article --- .../user-centered_design/index.md | 145 +++++++++++++++--- 1 file changed, 126 insertions(+), 19 deletions(-) diff --git a/files/en-us/learn_web_development/core/design_for_developers/user-centered_design/index.md b/files/en-us/learn_web_development/core/design_for_developers/user-centered_design/index.md index dfdad3a9fc756c1..0d84f89825c1406 100644 --- a/files/en-us/learn_web_development/core/design_for_developers/user-centered_design/index.md +++ b/files/en-us/learn_web_development/core/design_for_developers/user-centered_design/index.md @@ -22,36 +22,143 @@ The overarching theory of **User-centered design** (UCD) is that everything we d
  • Understand that everything we do is for the user.
  • +
  • Design patterns, and the common patterns used on the web.
  • Intro to user research/testing, and user requirements.
  • Design for accessibility/inclusive design.
  • -
  • Design patterns, and the common patterns used on the web.
-- Understand that everything we do is for the user. -- Intro to user research/testing, and user requirements. -- Design for accessibility — consider the target audience and what additional needs they may have. Design for those from the very start. -- Understand what design patterns are, and the common patterns used on the web, for example: - - Dark mode. - - Breadcrumbs. - - Cards. - - Deferred/Lazy registration. - - Infinite scroll. - - Modal dialogs. - - Progressive disclosure. - - Progress indication on forms/registration/setup. - - Shopping cart. +## Everything is for the user -## Summary +This can't be stated strongly enough. When creating a new website, or adding a new feature to an existing website, your primary concern should be making the user's experience on your site the best it can be. You should consider what your feature is meant to enable users to do (the **user requirements**), and allow them to do it as efficiently as possible. + +You might also have company goals to achieve when implementing a new feature, such as getting users to buy extended warranty along with a product purchase, or getting users to buy more units to take advantage of a bulk-buy discount, or more newsletter signups. However, these goals must be balanced with providing a good user experience. + +### Common UI design patterns + +**UI design patterns** (not to be confused with software architecture design patterns) describe design features used to solve common design problems on the web. Such features become popular because they work — they provide effective solutions to design problems, and a good user experiences. + +Think about the number of times you see the following UI patterns as you navigate around the web: + +- Dark mode/light mode style switchers (like the one on MDN). +- A "card" metaphor for representing multiple similar content items. +- Continuous or "infinite" scrolling pages of content. +- "Breadcrumb" links to show your position in a complex site structure and help you retrace your steps (also used on MDN). +- "Percentage complete" indicators on long forms. +- Loading spinners or download progress bars to provide the feeling of progress when you are waiting for something to complete. + +We'd recommend that you think about common design patterns, and use them on your sites where appropriate. Because they are common patterns, users will recognize them from other sites that use the same patterns. In turn, this helps to make your site more intuitive and easier to use. + +[ui-patterns.com](https://ui-patterns.com/patterns/) has a detailed list of UI design patterns along with problem and solution explanations and lots of examples. + +### Dark patterns + +Some websites use dishonest design practices to trick users into doing things they didn't mean to do — known as **dark patterns** or **deceptive patterns**. Common dark patterns include: + +- Having the "Yes! Please sign me up!" button checked by default and using confusing wording to make it sound like the meaning is inverted. +- Showing fake product reviews or activity to make a user think a product is more successful or better quality than it actually is. +- Misleading users into buying something by making the "no thanks" button really small comparsed to the "yes please" button, or by using language to guilt or scare them into buying it such as "no, I don't want to insurance my purchase against damage". + +You will have seen examples of this, so you will already know how annoying these patterns are, even if you didn't think about them explicitly before now. If you use dark patterns, you will erode your users' trust for your site, and it will hurt you in the long run. In addition, some dark patterns are illegal in some parts of the world, because they break privacy laws. + +You can find a lot more information about dark patterns at [Deceptive Patterns](www.deceptive.design). + +## User research + +To pinpoint exactly what the user requirements for a feature are, web development teams conduct user research. You can guess what your users need, but it is much more effective to design features based on evidence from real user feedback. This can be collected in several different ways: + +- Unsolicited comments via email, feedback forms, blog post comments, social media, etc. +- User feedback surveys. +- Simple sentiment indicators, for example a "did you find this useful?" or "did you enjoy your visit today?" banner with a choice of "smiley face"/"sad face" or "thumbs up"/"thumbs down" buttons to press to indicate how the user felt about this. +- A/B testing, which is a type of automated testing where some pages of a site have one variation of a feature loaded on it, and some pages have another variation, and user engagement on the two variations is measured and compared. An example might be to show one newsletter signup form to most users, and a variant newsletter signup form to a small group of users, and see which design results in the most successful signups. +- Targeted user research/testing, in which users are invited to a dedicated session and asked to try using a feature so their behavior can be observed. + +### Ongoing data collection + +Mechanisms such as feedback forms and sentiment indicators are more useful when you've already got a website up and running. You can leave them running and periodically analyse the data to find out whether your website features are performing well. + +Feedback forms can be as simple or as complex as you like, but you want to aim for "as simple as possible", that is, probably not much more [complicated than this](/en-US/docs/Learn_web_development/Extensions/Forms/Your_first_form#summary). There is a much lower chance of people bothering to fill out a really long feedback form. Other things to be in mind are: -xx +- Only collect the data you need. Asking lots of random questions will make people less likely to fill out the form, and possibly erode trust in your product, especially if you are asking for personal data that can be used to identify users (this becomes a [privacy issue](/en-US/docs/Web/Privacy)). You should prefer anonymous feedback if possible. +- If you do want to contact users to ask for more information about their feedback, include this as an optional field. +- Make it clear to users how their data will be used, and how they can delete it if they don't want you to have it anymore. This is good practice and engenders trust, but it is also the law in some parts of the world. See [Collect data ethically](/en-US/docs/Web/Privacy#collect_data_ethically) for more information. +- Try to encourage more specific feedback. If you just provide an "Enter your feedback" text field, you could get anything, and it will take longer to make sense of all the submissions. You are more likely to get something specific if you include a drop-down menu asking what aspect or feature the feedback is about, or limit the responses to specific choices (plus an "other" field if the user has something different to report). -## See also +Sentiment indicators need to be used in combination with other research features — on their own, they don't provide very precise data. However, they are useful for providing an overall performance indicator, especially when comparing the change in sentiment before and after a new feature is released. If you launch a redesigned registration form and find that the number of people clicking the "thumbs down" button per month doubles, then you've probably done something wrong, and need to revisit it! + +Also, bear in mind that users are far more likely to submit feedback if they are unhappy than if they are happy — no news is often good news. Because of this, don't be too worried if you receive more negative feedback than position feedback. Concentrate more on the change in rate of negative feedback as you make changes to your site. + +### A/B testing + +A/B testing is also useful when you've already got a website up and running, but it is not something that you want running all the time, for all users. If too many users started to notice that you've got different versions of features running, it may erode trust. Instead, you should only show the different version you are trying to test to a small number of users, and see if it changes the metric you are trying to test, for example number of newsletter signups. + +A/B testing is usually handled by dedicated libraries such as [GrowthBook](https://www.growthbook.io/). + +### User surveys + +For more involved data collection, creating a survey can be a great idea. There are several apps allowing you to create surveys, such as [Google Forms](https://docs.google.com/forms) and [Survey Monkey](https://www.surveymonkey.com/). You can make a survey available at a particular URL, then link to it from your site or send it to people as required. + +Surveys have many of the same best practices as feedback forms (see [Ongoing data collection](/en-US/docs/Learn_web_development/Core/Design_for_developers/User-centered_design#ongoing_data_collection)), especially around privacy, but with some additional considerations: + +- Surveys are generally much longer than feedback forms, and therefore will have a lower submission rate. This is not necessarily a problem, as their purposes are different. Whereas a feedback form may be active for a long period of time, and collect general feedback in an ongoing fashion, surveys will generally be active for a shorter time, for a particular campaign, with the aim of collecting data about a very specific feature or product. +- For example, you might want to solicit feedback on your latest product's performance, or ask your users what they'd want to see if you were to create a new feature aimed at solving a particular use case. +- The longer a survey is, the more people who start filling it out will drop off before the end. If you are getting really low completion rates, you might want to consider offering respondants an incentive such as a gift voucher or free product minutes. +- It is even more important to encourage more specific feedback when creating a survey, as you'll end up with a lot more meaningless feedback and waste a lot more of your user's time if you get it wrong. However, surveys are longer than feedback forms, and there is a lot more scope to use creative question structures, for example: + - Range sliders or 1–5 numeric scores to indicate how much you agree or disagree with a statement, or like or dislike a feature. + - Questions that are selectively displayed depending on the answer to previous questions. + - File uploads. + - Other input types like rating stars, times, or dates. + +### User testing + +User testing sessions provide the most comprehensive and useful feedback, but they come at the highest cost. Such sessions involve a dedicated UX designer or user researcher, who will follow a process something like this: + +1. Collect requirements for the user testing — for example, what feature are you trying to get feedback on, or what hypothesis are you trying to prove? +2. Find participants to take part in the user testing. This might involve: + 1. An invitation to participate, on newsletters, social media, etc. + 2. Talking to specific community members you think might want to help. + 3. A survey to determine suitability + 4. Offering a reward for taking part. +3. Write a script to follow when conducting the research. A typical script will involve: + 1. Sets of directions for the users to follow, for example "Search for runing shoes and add a pair to your shopping basket. Now buy the running shoes." + 2. A request for the user to talk through what they are doing as they are doing it, including voicing any questions they have, or anything they find confusing or frustrating. + 3. Questions to ask the user at key points, for example "What would you expect the next step to be?" or "How could this process be made easier?" +4. Set up video calls or in-person sessions to meet with the participants and run through the script with them, observing their behavior and commentary to see how they use your site. It is normal to record the session. Some research sessions also use software such as [eye trackers](https://www.uxstudioteam.com/ux-blog/eye-tracking-in-ux-research) to more precisely track the user journey around the site. +5. Analyse the research, and write it up into key findings to share with other members of the team. This often includes key quotes and video clips to strengthen the key points being made. + +## Design for accessibility + +Another major topic related to UCD is [accessibility](/en-US/docs/Learn_web_development/Core/Accessibility), which we already covered previously. The practice of designing for accessibility is also known as **inclusive design**. We are not going to cover accessibility/ID in detail here, but rather summarize where the topics overlap, and give you some points to consider as you start to design new web features. + +- Make sure you are familiar with the [different types of disability](/en-US/docs/Learn_web_development/Core/Accessibility/What_is_accessibility#what_kinds_of_disability_are_we_looking_at) people have, and think generally about how you can [implement accessibility into your project](/en-US/docs/Learn_web_development/Core/Accessibility/What_is_accessibility#implementing_accessibility_into_your_project). +- At the start of a project, think about the features you will implement, and which ones will have specific accessibility issues you'll need to overcome. For example, all controls need [meaningful labels](/en-US/docs/Learn_web_development/Core/Accessibility/HTML#use_meaningful_text_labels) and [multimedia](/en-US/docs/Learn_web_development/Core/Accessibility/Multimedia) needs text alternatives such as transcripts and subtitles. +- Unsemantic controls and widgets will need help from [WAI-ARIA](/en-US/docs/Learn_web_development/Core/Accessibility/WAI-ARIA_basics) to be understandable (for example by people who use [screen readers](/en-US/docs/Learn_web_development/Core/Accessibility/Tooling#screen_readers)) and usable (for example by keyboard-only users). +- Make sure you get the content fundamentals right, such as [semantic HTML structure](/en-US/docs/Learn_web_development/Core/Accessibility/HTML#good_semantics), [image alt text](/en-US/docs/Learn_web_development/Core/Accessibility/HTML#text_alternatives), [making links look like links](/en-US/docs/Learn_web_development/Core/Accessibility/CSS_and_JavaScript#links), and making your designs have good [color contrast](/en-US/docs/Web/Accessibility/Guides/Understanding_WCAG/Perceivable/Color_contrast). +- Make sure your designs work well on [mobile](/en-US/docs/Learn_web_development/Core/Accessibility/Mobile) devices as well as desktops and laptops. +- Design your experiences to be as clear and intuitive as possible. This sounds obvious, and is the underlying theme for this entire module, but clear design designs particularly help people with disability to use web features. + +[Inclusive design principles](https://inclusivedesignprinciples.info/) provides a useful set of principles to follow when designing for accessibility. + +## How to get started + +When you are first starting out with web development, you might think the above tools and processes are overkill, and you would be right. You don't need to have a deep understanding of UCD at this point, and probably not at all, unless you decide you want to consider a career as a desiger or user researcher. The point is really just to make you aware of UCD processes, and get you to think about user requirements and UX whenever you start building something on the web. + +At this point, it is worth adding some user research steps into your projects, even if they are personal ones that you are doing just for fun: + +1. At the start of a project, write a project brief. This can just be a single page for now, but it should describe the project, the main features it will have, the main use cases/functionality it has, and who its target audience are. +2. Write a rough implementation plan describing how you will design and implement your project. Include a rough design (we cover [design briefs](/en-US/docs/Learn_web_development/Core/Design_for_developers/Design_briefs) in more detail next), a list of technology features you will use to implement it, and a list of accessibility requirements to make your proposed featureset inclusive. +3. Create a rough prototype of the new site or feature, or at least something that gives an idea of how the main functionality will work, if the project is on the large side. +4. Write a user research script to use when conducting user testing on your prototype. +5. Find a couple of colleagues or friends to run through the script with, and do some user testing. +6. In addition, or instead of the user testing, you could put your prototype online, write a survey, and invite online contacts to test it and provide feedback via the survey. +7. Write up the feedback you get. Try to include three key insights that will help you improve your implementation. +8. Improve your prototype using the user research, and start moving towards a complete implementation. + +## Summary -- [Accessibility overview](/en-US/docs/Learn_web_development/Core/Accessibility) -- [Inclusive design principles](https://inclusivedesignprinciples.info/) +This page has provided a summary of common user-centered design practices. By this point, you won't be a UCD expert, but you should have an idea of what it involves, why it is important, and what UCD techniques you can use to improve your work even at this stage. {{PreviousMenuNext("Learn_web_development/Core/Design_for_developers/Basic_design_theory", "Learn_web_development/Core/Design_for_developers/Design_briefs", "Learn_web_development/Core/Design_for_developers")}} From 8d8d62b2e9ab3a79f55dd44ce510f0074d5e11c1 Mon Sep 17 00:00:00 2001 From: Chris Mills Date: Fri, 2 May 2025 12:18:34 +0100 Subject: [PATCH 3/4] Start writing third design article --- .../design_briefs/index.md | 49 -------------- .../core/design_for_developers/index.md | 4 +- .../interface_designs/index.md | 66 +++++++++++++++++++ .../user-centered_design/index.md | 6 +- files/sidebars/learnsidebar.yaml | 2 +- 5 files changed, 72 insertions(+), 55 deletions(-) delete mode 100644 files/en-us/learn_web_development/core/design_for_developers/design_briefs/index.md create mode 100644 files/en-us/learn_web_development/core/design_for_developers/interface_designs/index.md diff --git a/files/en-us/learn_web_development/core/design_for_developers/design_briefs/index.md b/files/en-us/learn_web_development/core/design_for_developers/design_briefs/index.md deleted file mode 100644 index 27ddfbb023d382f..000000000000000 --- a/files/en-us/learn_web_development/core/design_for_developers/design_briefs/index.md +++ /dev/null @@ -1,49 +0,0 @@ ---- -title: Design briefs -slug: Learn_web_development/Core/Design_for_developers/Design_briefs -page-type: tutorial-chapter -sidebar: learnsidebar ---- - -{{PreviousMenuNext("Learn_web_development/Core/Design_for_developers/User-centered_design", "Learn_web_development/Core/Version_control", "Learn_web_development/Core/Design_for_developers")}} - -As a developer, understanding design language and communicating with designers can lead to much better end results. This article looks at the mechanisms product designers use to communicate with developers — such as **design briefs**, **wireframes**, and **prototypes** — and how to interpret the information they contain to implement a feature. - - - - - - - - - - - - -
Prerequisites: - Fundamental HTML and CSS basics. -
Learning outcomes: -
    -
  • Speaking design language, to communicate with designers.
  • -
  • Interpreting design brief requirements to produce an implementation.
  • -
  • Typical tools designers use to get their message across to developers.
  • -
-
- -Learning outcomes: - -- Speaking design language, to communicate with designers. -- design briefs - which communicate details of a project or feature such as description, target audience, objectives, deadline, etc. -- wireframes, prototypes -- Interpreting design brief requirements to produce an implementation. -- Typical tools designers use to get their message across to developers (e.g., Figma). - -## Summary - -xx - -## See also - -- xx - -{{PreviousMenuNext("Learn_web_development/Core/Design_for_developers/User-centered_design", "Learn_web_development/Core/Version_control", "Learn_web_development/Core/Design_for_developers")}} diff --git a/files/en-us/learn_web_development/core/design_for_developers/index.md b/files/en-us/learn_web_development/core/design_for_developers/index.md index 56bda9dfe4fd233..66aa39cec5538a3 100644 --- a/files/en-us/learn_web_development/core/design_for_developers/index.md +++ b/files/en-us/learn_web_development/core/design_for_developers/index.md @@ -24,8 +24,8 @@ Before starting this module, you should be familiar with [HTML](/en-US/docs/Lear - : This article helps you make a start on the fundamental design theory that it's useful to know when design web interfaces. You don't have to be a master design to make a difference — with a little bit of knowledge, you can create a much improved user experience through careful use of fonts, color, whitespace, alignment, images, etc. - [User-centered design](/en-US/docs/Learn_web_development/Core/Design_for_developers/User-centered_design) - : The overarching theory of **User-centered design** (UCD) is that everything we do as designers (and developers!) is for the user — understanding their needs, solving their problems, making their experience on the web better. This article provides an introduction to UCD, the kind of research you can do to better understand your user's needs, how UCD intersects with accessibility, and the common design patterns you'll encounter on the web. -- [Design briefs](/en-US/docs/Learn_web_development/Core/Design_for_developers/Design_briefs) - - : As a developer, understanding design language and communicating with designers can lead to much better end results. This article looks at the mechanisms product designers use to communicate with developers — such as **design briefs**, **wireframes**, and **prototypes** — and how to interpret the information they contain to implement a feature. +- [Interface designs](/en-US/docs/Learn_web_development/Core/Design_for_developers/Interface_designs) + - : As a developer, understanding design language and how to communicate with designers can lead to much better end results. This article looks at the interface designs product designers use to communicate with developers and how to interpret the information they contain to implement a feature. ## See also diff --git a/files/en-us/learn_web_development/core/design_for_developers/interface_designs/index.md b/files/en-us/learn_web_development/core/design_for_developers/interface_designs/index.md new file mode 100644 index 000000000000000..09fa50c74a3d018 --- /dev/null +++ b/files/en-us/learn_web_development/core/design_for_developers/interface_designs/index.md @@ -0,0 +1,66 @@ +--- +title: Interface designs +slug: Learn_web_development/Core/Design_for_developers/Interface_designs +page-type: tutorial-chapter +sidebar: learnsidebar +--- + +{{PreviousMenuNext("Learn_web_development/Core/Design_for_developers/User-centered_design", "Learn_web_development/Core/Version_control", "Learn_web_development/Core/Design_for_developers")}} + +As a developer, understanding design language and how to communicate with designers can lead to much better end results. This article looks at the interface designs product designers use to communicate with developers and how to interpret the information they contain to implement a feature. + + + + + + + + + + + + +
Prerequisites: + Fundamental HTML and CSS basics. +
Learning outcomes: +
    +
  • Speaking design language, to communicate with designers.
  • +
  • Interpreting designs to produce an implementation.
  • +
  • Typical tools designers use to get their message across to developers.
  • +
+
+ +## Speaking design language + +We have covered many different design-related terms throughout this module. At this point, you should already be starting to get more comfortable with speaking design language. When designers start talking about scale, alignment, typography, color palettes, contrast, line height (or leading), visual hierarchy, etc., you should now know what they mean. + +As a developer, this is important when you are trying to interpret the information designers give you to create an implementation from. + +## What does an interface design contain? + +Designers tend to work from **design briefs**. These are documents that communicate the details of a project or feature such as overall description, target audience, objectives, deadlines, use cases (or problems the design needs to solve), and expected design deliverables. They will also work from wireframes created by UX designers, which provide high-level ideas of how the interfaces are meant to behave. + +The UI design that a designer will produce for you to implement a feature from will contain a lot of information, including the following: + +- Colors used in the design. +- Sizes of all the different containers included in the design. +- Fonts used in the design. +- Images and other assets included in the design. +- Specifications of other included elements, such as background gradients. +- Details of any interactive UI elements, for example how the interface changes when a button is pressed, or where a link navigates to. + +Often, a UI design will include multiple screens that provide a journey through the feature or app, showing each stage of the functionality. + +As more design decisions are made, and the design starts to solidify, UI designers will often also create interactive prototypes that allow you to interact with controls and get an idea of how the final product will act. + +## Design tools + +Designers use a variety of tools to create UI designs and prototypes, such as [Sketch](https://www.sketch.com/), [Figma](https://www.figma.com/), and [Canva](https://www.canva.com/). + +[EDITORIAL: I'm not really sure what to say here] + +## Summary + +This brief article has given you an idea of what deliverables UI designers create, and how to use those deliverables to start implementing web features. + +{{PreviousMenuNext("Learn_web_development/Core/Design_for_developers/User-centered_design", "Learn_web_development/Core/Version_control", "Learn_web_development/Core/Design_for_developers")}} diff --git a/files/en-us/learn_web_development/core/design_for_developers/user-centered_design/index.md b/files/en-us/learn_web_development/core/design_for_developers/user-centered_design/index.md index 0d84f89825c1406..646e56ad5978c0c 100644 --- a/files/en-us/learn_web_development/core/design_for_developers/user-centered_design/index.md +++ b/files/en-us/learn_web_development/core/design_for_developers/user-centered_design/index.md @@ -5,7 +5,7 @@ page-type: tutorial-chapter sidebar: learnsidebar --- -{{PreviousMenuNext("Learn_web_development/Core/Design_for_developers/Basic_design_theory", "Learn_web_development/Core/Design_for_developers/Design_briefs", "Learn_web_development/Core/Design_for_developers")}} +{{PreviousMenuNext("Learn_web_development/Core/Design_for_developers/Basic_design_theory", "Learn_web_development/Core/Design_for_developers/Interface_designs", "Learn_web_development/Core/Design_for_developers")}} The overarching theory of **User-centered design** (UCD) is that everything we do as designers (and developers!) is for the user — understanding their needs, solving their problems, making their experience on the web better. This article provides an introduction to UCD, the kind of research you can do to better understand your user's needs, how UCD intersects with accessibility, and the common design patterns you'll encounter on the web. @@ -149,7 +149,7 @@ When you are first starting out with web development, you might think the above At this point, it is worth adding some user research steps into your projects, even if they are personal ones that you are doing just for fun: 1. At the start of a project, write a project brief. This can just be a single page for now, but it should describe the project, the main features it will have, the main use cases/functionality it has, and who its target audience are. -2. Write a rough implementation plan describing how you will design and implement your project. Include a rough design (we cover [design briefs](/en-US/docs/Learn_web_development/Core/Design_for_developers/Design_briefs) in more detail next), a list of technology features you will use to implement it, and a list of accessibility requirements to make your proposed featureset inclusive. +2. Write a rough implementation plan describing how you will design and implement your project. Include a rough design (we cover [interface designs](/en-US/docs/Learn_web_development/Core/Design_for_developers/Interface_designs) in more detail next), a list of technology features you will use to implement it, and a list of accessibility requirements to make your proposed featureset inclusive. 3. Create a rough prototype of the new site or feature, or at least something that gives an idea of how the main functionality will work, if the project is on the large side. 4. Write a user research script to use when conducting user testing on your prototype. 5. Find a couple of colleagues or friends to run through the script with, and do some user testing. @@ -161,4 +161,4 @@ At this point, it is worth adding some user research steps into your projects, e This page has provided a summary of common user-centered design practices. By this point, you won't be a UCD expert, but you should have an idea of what it involves, why it is important, and what UCD techniques you can use to improve your work even at this stage. -{{PreviousMenuNext("Learn_web_development/Core/Design_for_developers/Basic_design_theory", "Learn_web_development/Core/Design_for_developers/Design_briefs", "Learn_web_development/Core/Design_for_developers")}} +{{PreviousMenuNext("Learn_web_development/Core/Design_for_developers/Basic_design_theory", "Learn_web_development/Core/Design_for_developers/Interface_designs", "Learn_web_development/Core/Design_for_developers")}} diff --git a/files/sidebars/learnsidebar.yaml b/files/sidebars/learnsidebar.yaml index 2ae20605016770d..1a85ae257dbd09a 100644 --- a/files/sidebars/learnsidebar.yaml +++ b/files/sidebars/learnsidebar.yaml @@ -183,7 +183,7 @@ sidebar: children: - /Learn_web_development/Core/Design_for_developers/Basic_design_theory - /Learn_web_development/Core/Design_for_developers/User-centered_design - - /Learn_web_development/Core/Design_for_developers/Design_briefs + - /Learn_web_development/Core/Design_for_developers/Interface_designs - link: /Learn_web_development/Core/Version_control title: Version_control - type: section From 69593c4efa7d35a09cbd4739c5fe366975a880e6 Mon Sep 17 00:00:00 2001 From: Chris Mills Date: Tue, 30 Sep 2025 16:49:47 +0100 Subject: [PATCH 4/4] Update files/en-us/learn_web_development/core/design_for_developers/basic_design_theory/index.md Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .../core/design_for_developers/basic_design_theory/index.md | 1 - 1 file changed, 1 deletion(-) diff --git a/files/en-us/learn_web_development/core/design_for_developers/basic_design_theory/index.md b/files/en-us/learn_web_development/core/design_for_developers/basic_design_theory/index.md index 347db73c0702fa1..86047915577f1e9 100644 --- a/files/en-us/learn_web_development/core/design_for_developers/basic_design_theory/index.md +++ b/files/en-us/learn_web_development/core/design_for_developers/basic_design_theory/index.md @@ -537,7 +537,6 @@ Let's make a few color adjustments to our design. - If you don't have a base color in mind and just want to choose a couple of colors from a given palette, go to [coolors.co](https://coolors.co/) and use the palette generator to create a palette you like. 2. Copy the hex values for two complementary colors and save them somewhere safe. 3. Use the WebAIM [Color Contrast Checker](https://webaim.org/resources/contrastchecker/) to check whether your color choices have good contrast with white. For each color: - 1. Keep the background color as white (`FFFFFF`). 2. Enter your color's hex code in the foreground color input field. 3. Click or tab out of the field to run the test.