From cc1e1d8ffc0477c9f795d3e9e166e103573c2cfb Mon Sep 17 00:00:00 2001 From: Mathew May Date: Thu, 28 Feb 2019 12:02:50 +0800 Subject: [PATCH] MDL-64506 theme_clean: Remove Clean from core --- theme/clean/README.txt | 106 ------------- theme/clean/classes/core_renderer.php | 167 --------------------- theme/clean/classes/privacy/provider.php | 46 ------ theme/clean/config.php | 47 ------ theme/clean/lang/en/theme_clean.php | 70 --------- theme/clean/layout/columns1.php | 90 ----------- theme/clean/layout/columns2.php | 92 ------------ theme/clean/layout/columns3.php | 105 ------------- theme/clean/layout/embedded.php | 43 ------ theme/clean/layout/maintenance.php | 63 -------- theme/clean/layout/secure.php | 83 ----------- theme/clean/lib.php | 181 ----------------------- theme/clean/pix/favicon.ico | Bin 1150 -> 0 bytes theme/clean/pix/screenshot.jpg | Bin 44435 -> 0 bytes theme/clean/settings.php | 84 ----------- theme/clean/style/custom.css | 41 ----- theme/clean/version.php | 38 ----- 17 files changed, 1256 deletions(-) delete mode 100644 theme/clean/README.txt delete mode 100644 theme/clean/classes/core_renderer.php delete mode 100644 theme/clean/classes/privacy/provider.php delete mode 100644 theme/clean/config.php delete mode 100644 theme/clean/lang/en/theme_clean.php delete mode 100644 theme/clean/layout/columns1.php delete mode 100644 theme/clean/layout/columns2.php delete mode 100644 theme/clean/layout/columns3.php delete mode 100644 theme/clean/layout/embedded.php delete mode 100644 theme/clean/layout/maintenance.php delete mode 100644 theme/clean/layout/secure.php delete mode 100644 theme/clean/lib.php delete mode 100644 theme/clean/pix/favicon.ico delete mode 100644 theme/clean/pix/screenshot.jpg delete mode 100644 theme/clean/settings.php delete mode 100644 theme/clean/style/custom.css delete mode 100644 theme/clean/version.php diff --git a/theme/clean/README.txt b/theme/clean/README.txt deleted file mode 100644 index e2085789489..00000000000 --- a/theme/clean/README.txt +++ /dev/null @@ -1,106 +0,0 @@ - -/* How to copy and customise this theme. -----------------------------------------*/ - -This document describes how to copy and customise the Clean (bootstrapbase) theme so that -you can build on this to create a theme of your own. It assumes you have some -understanding of how themes work within Moodle 2.5, as well as a basic understanding -of HTML and CSS. - -Getting started ---------------- - -From your Moodle theme directory right click on clean and then copy and paste back -into your Moodle theme directory. You should now have a folder called Copy of clean. -If you right click this folder you are given the option to Rename it. So rename this -folder to your chosen theme name, using only lower case letters, and if needed, -underscores. For the purpose of this tutorial we will call the theme 'cleantheme'. - -On opening 'cleantheme' your you will find several files and sub-directories which have -files within them. - -These are: - -config.php - Where all the theme configurations are made. - (Contains some elements that require renaming). -lib.php - Where all the functions for the themes settings are found. - (Contains some elements that require renaming). -settings.php - Where all the setting for this theme are created. - (Contains some elements that require renaming). -version.php - Where the version number and plugin component information is kept. - (Contains some elements that require renaming). -/lang/ - This directory contains all language sub-directories for other languages - if and when you want to add them. -/lang/en/ - This sub-directory contains your language files, in this case English. -/lang/en/theme_clean.php - This file contains all the language strings for your theme. - (Contains some elements that require renaming as well as the filename itself). -/layout/ - This directory contains all the layout files for this theme. -/layout/columns1.php - Layout file for a one column layout (content only). - (Contains some elements that require renaming). -/layout/columns2.php - Layout file for a two column layout (side-pre and content). - (Contains some elements that require renaming). -/layout/columns3.php - Layout file for a three column layout (side-pre, content and side-post) and the front page. - (Contains some elements that require renaming). -/layout/embedded.php - Embedded layout file for embeded pages, like iframe/object embeded in moodleform. - (Contains some elements that require renaming). -/layout/maintenance.php - Maintenance layout file which does not have any blocks, links, or API calls that would lead to database or cache interaction. - (Contains some elements that require renaming). -/layout/secure.php - Secure layout file for safebrowser and securewindow. - (Contains some elements that require renaming). -/style/ - This directory contains all the CSS files for this theme. -/style/custom.css - This is where all the settings CSS is generated. -/pix/ - This directory contains a screen shot of this theme as well as a favicon - and any images used in the theme. - -Renaming elements ------------------ - -The problem when copying a theme is that you need to rename all those instances -where the old theme name occurs, in this case clean. So using the above list as -a guide, search through and change all the instances of the theme name -'clean' to 'cleantheme'. This includes the filename of the lang/en/theme_clean.php. -You need to change this to 'theme_cleantheme.php'. - -Installing your theme ---------------------- - -Once all the changes to the name have been made, you can safely install the theme. -If you are already logged in just refreshing the browser should trigger your Moodle -site to begin the install 'Plugins Check'. - -If not then navigate to Administration > Notifications. - -Once your theme is successfully installed you can select it and begin to modify -it using the custom settings page found by navigating to... -Administration > Site Administration > Appearance > Themes >> -and then click on (Cleantheme) or whatever you renamed your theme to, -from the list of theme names that appear at this point in the side block. - -Customisation using custom theme settings ------------------------------------------ - -The settings page for the Clean theme can be located by navigating to: - -Administration > Site Administration > Appearance > Themes > Clean - -Moodle documentation --------------------- - -Further information can be found on Moodle Docs: http://docs.moodle.org/dev/Clean_theme diff --git a/theme/clean/classes/core_renderer.php b/theme/clean/classes/core_renderer.php deleted file mode 100644 index b60d915724d..00000000000 --- a/theme/clean/classes/core_renderer.php +++ /dev/null @@ -1,167 +0,0 @@ -. - -require_once($CFG->dirroot . '/theme/bootstrapbase/renderers.php'); - -/** - * Clean core renderers. - * - * @package theme_clean - * @copyright 2015 Frédéric Massart - FMCorz.net - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - */ -class theme_clean_core_renderer extends theme_bootstrapbase_core_renderer { - - /** - * Either returns the parent version of the header bar, or a version with the logo replacing the header. - * - * @since Moodle 2.9 - * @param array $headerinfo An array of header information, dependant on what type of header is being displayed. The following - * array example is user specific. - * heading => Override the page heading. - * user => User object. - * usercontext => user context. - * @param int $headinglevel What level the 'h' tag will be. - * @return string HTML for the header bar. - */ - public function context_header($headerinfo = null, $headinglevel = 1) { - - if ($this->should_render_logo($headinglevel)) { - return html_writer::tag('div', '', array('class' => 'logo')); - } - return parent::context_header($headerinfo, $headinglevel); - } - - /** - * Determines if we should render the logo. - * - * @param int $headinglevel What level the 'h' tag will be. - * @return bool Should the logo be rendered. - */ - protected function should_render_logo($headinglevel = 1) { - global $PAGE; - - // Only render the logo if we're on the front page or login page - // and the theme has a logo. - $logo = $this->get_logo_url(); - if ($headinglevel == 1 && !empty($logo)) { - if ($PAGE->pagelayout == 'frontpage' || $PAGE->pagelayout == 'login') { - return true; - } - } - - return false; - } - - /** - * Returns the navigation bar home reference. - * - * The small logo is only rendered on pages where the logo is not displayed. - * - * @param bool $returnlink Whether to wrap the icon and the site name in links or not - * @return string The site name, the small logo or both depending on the theme settings. - */ - public function navbar_home($returnlink = true) { - global $CFG; - - $imageurl = $this->get_compact_logo_url(null, 35); - if ($this->should_render_logo() || empty($imageurl)) { - // If there is no small logo we always show the site name. - return $this->get_home_ref($returnlink); - } - $image = html_writer::img($imageurl, get_string('sitelogo', 'theme_' . $this->page->theme->name), - array('class' => 'small-logo')); - - if ($returnlink) { - $logocontainer = html_writer::link(new moodle_url('/'), $image, - array('class' => 'small-logo-container', 'title' => get_string('home'))); - } else { - $logocontainer = html_writer::tag('span', $image, array('class' => 'small-logo-container')); - } - - // Sitename setting defaults to true. - if (!isset($this->page->theme->settings->sitename) || !empty($this->page->theme->settings->sitename)) { - return $logocontainer . $this->get_home_ref($returnlink); - } - - return $logocontainer; - } - - /** - * Returns a reference to the site home. - * - * It can be either a link or a span. - * - * @param bool $returnlink - * @return string - */ - protected function get_home_ref($returnlink = true) { - global $CFG, $SITE; - - $sitename = format_string($SITE->shortname, true, array('context' => context_course::instance(SITEID))); - - if ($returnlink) { - return html_writer::link(new moodle_url('/'), $sitename, array('class' => 'brand', 'title' => get_string('home'))); - } - - return html_writer::tag('span', $sitename, array('class' => 'brand')); - } - - /** - * Return the theme logo URL, else the site's logo URL, if any. - * - * Note that maximum sizes are not applied to the theme logo. - * - * @param int $maxwidth The maximum width, or null when the maximum width does not matter. - * @param int $maxheight The maximum height, or null when the maximum height does not matter. - * @return moodle_url|false - */ - public function get_logo_url($maxwidth = null, $maxheight = 100) { - global $CFG; - - if (!empty($this->page->theme->settings->logo)) { - $url = $this->page->theme->setting_file_url('logo', 'logo'); - // Get a URL suitable for moodle_url. - $relativebaseurl = preg_replace('|^https?://|i', '//', $CFG->wwwroot); - $url = str_replace($relativebaseurl, '', $url); - return new moodle_url($url); - } - return parent::get_logo_url($maxwidth, $maxheight); - } - - /** - * Return the theme's compact logo URL, else the site's compact logo URL, if any. - * - * Note that maximum sizes are not applied to the theme logo. - * - * @param int $maxwidth The maximum width, or null when the maximum width does not matter. - * @param int $maxheight The maximum height, or null when the maximum height does not matter. - * @return moodle_url|false - */ - public function get_compact_logo_url($maxwidth = 100, $maxheight = 100) { - global $CFG; - - if (!empty($this->page->theme->settings->smalllogo)) { - $url = $this->page->theme->setting_file_url('smalllogo', 'smalllogo'); - // Get a URL suitable for moodle_url. - $relativebaseurl = preg_replace('|^https?://|i', '//', $CFG->wwwroot); - $url = str_replace($relativebaseurl, '', $url); - return new moodle_url($url); - } - return parent::get_compact_logo_url($maxwidth, $maxheight); - } - -} diff --git a/theme/clean/classes/privacy/provider.php b/theme/clean/classes/privacy/provider.php deleted file mode 100644 index bcc17b84e94..00000000000 --- a/theme/clean/classes/privacy/provider.php +++ /dev/null @@ -1,46 +0,0 @@ -. - -/** - * Privacy Subsystem implementation for theme_clean. - * - * @package theme_clean - * @copyright 2018 Andrew Nicols - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - */ - -namespace theme_clean\privacy; - -defined('MOODLE_INTERNAL') || die(); - -/** - * The clean theme does not store any data. - * - * @copyright 2018 Andrew Nicols - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - */ -class provider implements \core_privacy\local\metadata\null_provider { - - /** - * Get the language string identifier with the component's language - * file to explain why this plugin stores no data. - * - * @return string - */ - public static function get_reason() : string { - return 'privacy:metadata'; - } -} diff --git a/theme/clean/config.php b/theme/clean/config.php deleted file mode 100644 index b3a1831b4d8..00000000000 --- a/theme/clean/config.php +++ /dev/null @@ -1,47 +0,0 @@ -. - -/** - * Moodle's Clean theme, an example of how to make a Bootstrap theme - * - * DO NOT MODIFY THIS THEME! - * COPY IT FIRST, THEN RENAME THE COPY AND MODIFY IT INSTEAD. - * - * For full information about creating Moodle themes, see: - * http://docs.moodle.org/dev/Themes_2.0 - * - * @package theme_clean - * @copyright 2013 Moodle, moodle.org - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - */ - -$THEME->name = 'clean'; - -///////////////////////////////// -// The only thing you need to change in this file when copying it to -// create a new theme is the name above. You also need to change the name -// in version.php and lang/en/theme_clean.php as well. -////////////////////////////////// -// -$THEME->doctype = 'html5'; -$THEME->parents = array('bootstrapbase'); -$THEME->sheets = array('custom'); -$THEME->yuicssmodules = array(); -$THEME->enable_dock = true; -$THEME->editor_sheets = array(); - -$THEME->rendererfactory = 'theme_overridden_renderer_factory'; -$THEME->csspostprocess = 'theme_clean_process_css'; diff --git a/theme/clean/lang/en/theme_clean.php b/theme/clean/lang/en/theme_clean.php deleted file mode 100644 index 251fadd5c0f..00000000000 --- a/theme/clean/lang/en/theme_clean.php +++ /dev/null @@ -1,70 +0,0 @@ -. - -/** - * Strings for component 'theme_clean', language 'en' - * - * @package theme_clean - * @copyright 2013 Moodle, moodle.org - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - */ - -$string['choosereadme'] = '
-
-

Clean

-

-
-
-

About

-

Clean is a modified Moodle bootstrap theme which inherits styles and renderers from its parent theme.

-

Parents

-

This theme is based upon the Bootstrap theme, which was created for Moodle 2.5, with the help of:
-Stuart Lamour, Mark Aberdour, Paul Hibbitts, Mary Evans.

-

Theme Credits

-

Authors: Bas Brands, David Scotson, Mary Evans
-Contact: bas@sonsbeekmedia.nl
-Website: www.basbrands.nl -

-

Report a bug:

-

http://tracker.moodle.org

-

More information

-

How to copy and customise this theme.

-
'; - -$string['configtitle'] = 'Clean'; - -$string['customcss'] = 'Custom CSS'; -$string['customcssdesc'] = 'Whatever CSS rules you add to this textarea will be reflected in every page, making for easier customization of this theme.'; - -$string['footnote'] = 'Footnote'; -$string['footnotedesc'] = 'Whatever you add to this textarea will be displayed in the footer throughout your Moodle site.'; - -$string['invert'] = 'Invert navbar'; -$string['invertdesc'] = 'Swaps text and background for the navbar at the top of the page between black and white.'; - -$string['logo'] = 'Logo'; -$string['logodesc'] = 'The logo is only displayed in the header of the front page and login page.
If the height of your logo is more than 75px add div.logo {height: 100px;} to the Custom CSS box below, amending accordingly if the height is other than 100px. If a logo is not added here, the logo in Appearance > Logos will be used.'; - -$string['pluginname'] = 'Clean'; -$string['privacy:metadata'] = 'The Clean theme does not store any personal data about any user.'; -$string['region-side-post'] = 'Right'; -$string['region-side-pre'] = 'Left'; - -$string['sitelogo'] = 'Site logo'; -$string['sitename'] = 'Display site name along with small logo'; -$string['sitenamedesc'] = 'If there is no small logo, the site name is always displayed in the navigation bar. If a small logo is set, it may be displayed with or without the site name.'; -$string['smalllogo'] = 'Small logo'; -$string['smalllogodesc'] = 'The small logo is displayed in the navigation bar. If there is a header logo for the front page and login page, the small logo is not displayed on these pages. If a logo is not added here, the compact logo in Appearance > Logos will be used.'; diff --git a/theme/clean/layout/columns1.php b/theme/clean/layout/columns1.php deleted file mode 100644 index afa8cc1c2ce..00000000000 --- a/theme/clean/layout/columns1.php +++ /dev/null @@ -1,90 +0,0 @@ -. - -/** - * The one column layout. - * - * @package theme_clean - * @copyright 2013 Moodle, moodle.org - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - */ - -// Get the HTML for the settings bits. -$html = theme_clean_get_html_for_settings($OUTPUT, $PAGE); - -echo $OUTPUT->doctype() ?> -htmlattributes(); ?>> - - <?php echo $OUTPUT->page_title(); ?> - - standard_head_html() ?> - - - -body_attributes(); ?>> - -standard_top_of_body_html() ?> - - - -
- - full_header(); ?> - -
-
- course_content_header(); - echo $OUTPUT->main_content(); - echo $OUTPUT->activity_navigation(); - echo $OUTPUT->course_content_footer(); - ?> -
-
- standard_after_main_region_html() ?> - -
- - - footnote; - echo $OUTPUT->login_info(); - echo $OUTPUT->home_link(); - echo $OUTPUT->standard_footer_html(); - ?> -
- - standard_end_of_body_html() ?> - -
- - diff --git a/theme/clean/layout/columns2.php b/theme/clean/layout/columns2.php deleted file mode 100644 index e233a73ee82..00000000000 --- a/theme/clean/layout/columns2.php +++ /dev/null @@ -1,92 +0,0 @@ -. - -/** - * The two column layout. - * - * @package theme_clean - * @copyright 2013 Moodle, moodle.org - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - */ - -// Get the HTML for the settings bits. -$html = theme_clean_get_html_for_settings($OUTPUT, $PAGE); - -$regionmain = 'span9 pull-right'; -$sidepre = 'span3 desktop-first-column'; - -echo $OUTPUT->doctype() ?> -htmlattributes(); ?>> - - <?php echo $OUTPUT->page_title(); ?> - - standard_head_html() ?> - - - -body_attributes('two-column'); ?>> - -standard_top_of_body_html() ?> - - - -
- full_header(); ?> -
-
- course_content_header(); - echo $OUTPUT->main_content(); - echo $OUTPUT->course_content_footer(); - ?> -
- blocks('side-pre', $sidepre); - ?> -
- standard_after_main_region_html() ?> - -
- - - footnote; - echo $OUTPUT->login_info(); - echo $OUTPUT->home_link(); - echo $OUTPUT->standard_footer_html(); - ?> -
- - standard_end_of_body_html() ?> - -
- - diff --git a/theme/clean/layout/columns3.php b/theme/clean/layout/columns3.php deleted file mode 100644 index a126137f667..00000000000 --- a/theme/clean/layout/columns3.php +++ /dev/null @@ -1,105 +0,0 @@ -. - -/** - * Moodle's Clean theme, an example of how to make a Bootstrap theme - * - * DO NOT MODIFY THIS THEME! - * COPY IT FIRST, THEN RENAME THE COPY AND MODIFY IT INSTEAD. - * - * For full information about creating Moodle themes, see: - * http://docs.moodle.org/dev/Themes_2.0 - * - * @package theme_clean - * @copyright 2013 Moodle, moodle.org - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - */ - -// Get the HTML for the settings bits. -$html = theme_clean_get_html_for_settings($OUTPUT, $PAGE); - -$regionmainbox = 'span9 desktop-first-column'; -$regionmain = 'span8 pull-right'; -$sidepre = 'span4 desktop-first-column'; -$sidepost = 'span3 pull-right'; - -echo $OUTPUT->doctype() ?> -htmlattributes(); ?>> - - <?php echo $OUTPUT->page_title(); ?> - - standard_head_html() ?> - - - -body_attributes(); ?>> - -standard_top_of_body_html() ?> - - - -
- full_header(); ?> -
-
-
-
- course_content_header(); - echo $OUTPUT->main_content(); - echo $OUTPUT->activity_navigation(); - echo $OUTPUT->course_content_footer(); - ?> -
- blocks('side-pre', $sidepre); ?> -
-
- blocks('side-post', $sidepost); ?> -
- standard_after_main_region_html() ?> - -
- - - footnote; - echo $OUTPUT->login_info(); - echo $OUTPUT->home_link(); - echo $OUTPUT->standard_footer_html(); - ?> -
- - standard_end_of_body_html() ?> - -
- - diff --git a/theme/clean/layout/embedded.php b/theme/clean/layout/embedded.php deleted file mode 100644 index c589990e4d8..00000000000 --- a/theme/clean/layout/embedded.php +++ /dev/null @@ -1,43 +0,0 @@ -. - -/** - * The embedded layout. - * - * @package theme_clean - * @copyright 2013 Moodle, moodle.org - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - */ - -echo $OUTPUT->doctype() ?> -htmlattributes(); ?>> - - <?php echo $OUTPUT->page_title(); ?> - - standard_head_html() ?> - - - -body_attributes(); ?>> -standard_top_of_body_html() ?> -
-
- main_content(); ?> -
-
-standard_end_of_body_html() ?> - - \ No newline at end of file diff --git a/theme/clean/layout/maintenance.php b/theme/clean/layout/maintenance.php deleted file mode 100644 index 502702204bf..00000000000 --- a/theme/clean/layout/maintenance.php +++ /dev/null @@ -1,63 +0,0 @@ -. - -/** - * The maintenance layout. - * - * @package theme_clean - * @copyright 2013 Moodle, moodle.org - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - */ - -// Get the HTML for the settings bits. -$html = theme_clean_get_html_for_settings($OUTPUT, $PAGE); - -echo $OUTPUT->doctype() ?> -htmlattributes(); ?>> - - <?php echo $OUTPUT->page_title(); ?> - - standard_head_html() ?> - - - -body_attributes(); ?>> - -standard_top_of_body_html() ?> - -
- - - -
-
- main_content(); ?> -
-
- -
- standard_footer_html(); - ?> -
- - standard_end_of_body_html() ?> - -
- - diff --git a/theme/clean/layout/secure.php b/theme/clean/layout/secure.php deleted file mode 100644 index 199ada9e3cf..00000000000 --- a/theme/clean/layout/secure.php +++ /dev/null @@ -1,83 +0,0 @@ -. - -/** - * The secure layout. - * - * @package theme_clean - * @copyright 2013 Moodle, moodle.org - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - */ - -// Get the HTML for the settings bits. -$html = theme_clean_get_html_for_settings($OUTPUT, $PAGE); - -$regionmainbox = 'span9 desktop-first-column'; -$regionmain = 'span8 pull-right'; -$sidepre = 'span4 desktop-first-column'; -$sidepost = 'span3 pull-right'; - -echo $OUTPUT->doctype() ?> -htmlattributes(); ?>> - - <?php echo $OUTPUT->page_title(); ?> - - standard_head_html() ?> - - - -body_attributes(); ?>> - -standard_top_of_body_html() ?> - - - -
- - - -
-
-
-
- main_content(); ?> -
- blocks('side-pre', $sidepre); ?> -
-
- blocks('side-post', $sidepost); ?> -
- - standard_end_of_body_html() ?> - -
- - diff --git a/theme/clean/lib.php b/theme/clean/lib.php deleted file mode 100644 index f7a5202c7e6..00000000000 --- a/theme/clean/lib.php +++ /dev/null @@ -1,181 +0,0 @@ -. - -/** - * Moodle's Clean theme, an example of how to make a Bootstrap theme - * - * DO NOT MODIFY THIS THEME! - * COPY IT FIRST, THEN RENAME THE COPY AND MODIFY IT INSTEAD. - * - * For full information about creating Moodle themes, see: - * http://docs.moodle.org/dev/Themes_2.0 - * - * @package theme_clean - * @copyright 2013 Moodle, moodle.org - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - */ - -/** - * Parses CSS before it is cached. - * - * This function can make alterations and replace patterns within the CSS. - * - * @param string $css The CSS - * @param theme_config $theme The theme config object. - * @return string The parsed CSS The parsed CSS. - */ -function theme_clean_process_css($css, $theme) { - global $OUTPUT; - - // Set the background image for the logo. - $logo = $OUTPUT->get_logo_url(null, 75); - $css = theme_clean_set_logo($css, $logo); - - // Set custom CSS. - if (!empty($theme->settings->customcss)) { - $customcss = $theme->settings->customcss; - } else { - $customcss = null; - } - $css = theme_clean_set_customcss($css, $customcss); - - return $css; -} - -/** - * Adds the logo to CSS. - * - * @param string $css The CSS. - * @param string $logo The URL of the logo. - * @return string The parsed CSS - */ -function theme_clean_set_logo($css, $logo) { - $tag = '[[setting:logo]]'; - $replacement = $logo; - if (is_null($replacement)) { - $replacement = ''; - } - - $css = str_replace($tag, $replacement, $css); - - return $css; -} - -/** - * Serves any files associated with the theme settings. - * - * @param stdClass $course - * @param stdClass $cm - * @param context $context - * @param string $filearea - * @param array $args - * @param bool $forcedownload - * @param array $options - * @return bool - */ -function theme_clean_pluginfile($course, $cm, $context, $filearea, $args, $forcedownload, array $options = array()) { - if ($context->contextlevel == CONTEXT_SYSTEM and ($filearea === 'logo' || $filearea === 'smalllogo')) { - $theme = theme_config::load('clean'); - // By default, theme files must be cache-able by both browsers and proxies. - if (!array_key_exists('cacheability', $options)) { - $options['cacheability'] = 'public'; - } - return $theme->setting_file_serve($filearea, $args, $forcedownload, $options); - } else { - send_file_not_found(); - } -} - -/** - * Adds any custom CSS to the CSS before it is cached. - * - * @param string $css The original CSS. - * @param string $customcss The custom CSS to add. - * @return string The CSS which now contains our custom CSS. - */ -function theme_clean_set_customcss($css, $customcss) { - $tag = '[[setting:customcss]]'; - $replacement = $customcss; - if (is_null($replacement)) { - $replacement = ''; - } - - $css = str_replace($tag, $replacement, $css); - - return $css; -} - -/** - * Returns an object containing HTML for the areas affected by settings. - * - * Do not add Clean specific logic in here, child themes should be able to - * rely on that function just by declaring settings with similar names. - * - * @param renderer_base $output Pass in $OUTPUT. - * @param moodle_page $page Pass in $PAGE. - * @return stdClass An object with the following properties: - * - navbarclass A CSS class to use on the navbar. By default ''. - * - heading HTML to use for the heading. A logo if one is selected or the default heading. - * - footnote HTML to use as a footnote. By default ''. - */ -function theme_clean_get_html_for_settings(renderer_base $output, moodle_page $page) { - global $CFG; - $return = new stdClass; - - $return->navbarclass = ''; - if (!empty($page->theme->settings->invert)) { - $return->navbarclass .= ' navbar-inverse'; - } - - // Only display the logo on the front page and login page, if one is defined. - if (!empty($page->theme->settings->logo) && - ($page->pagelayout == 'frontpage' || $page->pagelayout == 'login')) { - $return->heading = html_writer::tag('div', '', array('class' => 'logo')); - } else { - $return->heading = $output->page_heading(); - } - - $return->footnote = ''; - if (!empty($page->theme->settings->footnote)) { - $return->footnote = '
'.format_text($page->theme->settings->footnote).'
'; - } - - return $return; -} - -/** - * All theme functions should start with theme_clean_ - * @deprecated since 2.5.1 - */ -function clean_process_css() { - throw new coding_exception('Please call theme_'.__FUNCTION__.' instead of '.__FUNCTION__); -} - -/** - * All theme functions should start with theme_clean_ - * @deprecated since 2.5.1 - */ -function clean_set_logo() { - throw new coding_exception('Please call theme_'.__FUNCTION__.' instead of '.__FUNCTION__); -} - -/** - * All theme functions should start with theme_clean_ - * @deprecated since 2.5.1 - */ -function clean_set_customcss() { - throw new coding_exception('Please call theme_'.__FUNCTION__.' instead of '.__FUNCTION__); -} diff --git a/theme/clean/pix/favicon.ico b/theme/clean/pix/favicon.ico deleted file mode 100644 index eea02482c3702d68518faecf6021610628fc1b62..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1150 zcmZQzU<5(|0R|wcz>vYhz#zuJz@P!dKp~(AL>x#lFaYI*xFHzKA4G&k&1VMn>d%rI zwV%y(8owCW_kLwpuK&WI*Zx&OyZx($Ue{M`t4ZIOI}iL~G@1NOU8nz>h4JL?IxsIl z_2&Wge*@~j0@N?7+yK_!2h{%)sDB?&KQB-}tLfx#Yk>N{1N9$Cnf8?_dFod-tvaCn zHJ?j>`u_vM4%K5*#!2DJYx16+Ui*OS(h;qHg)2ik7~#QJ(w zpBR8)P@-A;;lEzPyGKslZxy90--Gne0K32Y>uH^*^_p`pwZ{#&>;#3E!?k_3umTy&+fD zvt4geZ-;zhTLj7ze%3jbHFrxBc^9olamF_I!P%*Z1w2PT#lx z`V+o=v7YfgbHe<6(v>aqYO?ZcFGR(pe)aYa`0wc8{NL2X{J(~}=6@|iyUUi1H;avW zzpvHr`Fcmc@7q0~{rfGZeoG8r_JgCOrk|mmxwH`f|DS;YgdYM82Vq4ttN`T0Km#KK!vlE+hCe_I(+2=Z CziV^= diff --git a/theme/clean/pix/screenshot.jpg b/theme/clean/pix/screenshot.jpg deleted file mode 100644 index f421215198f9b21cb70deef7a69cff40ce58ae38..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 44435 zcmeFYWl)?=w>CPs1qcKUZovr@^xX<7k zAOpc+2=MW|@80|DUFSPLPSvUN>+8E}YPGJu`(C|j_0`whFWj#I9s^Z1Q~?+m7y$K$ z2XK!BC;_lA|4IM+Vm%~mT8u zU;tnM9;Wp$-Tz8Bc-XiYSooL(57iov0skn*#KOiQd?@WNYJN=OJm~ufTF0dnRy<~V zp_Koo)^lp(9sziS_3#R0SY!Zsz^(d`p-Y{2iHKFnHJ;N1hq; z`|bv@?`1GzI%hf{*`n$o#=SlUoDX@cXy&rcT^O}z6-bd(C!wRjHgl>+hZzu_KTD|H zCsj6Qtz-%bnq-mIgV8ewwM9wvdwq)CXz?nM;xDXk@-Z*v4i?H-6gCJ~qpSUO4_FW@ z=bU)GQ%`59S(RF%&B}kW@Ux_w-n+R+nC^MM^@kMKG@>sll%FD^fIxM6uKDFI*o!v{ z0&@=HQ393gj+YSEBI&Qd_XbCYdZ6eimOoHoe;rRRqZ9n--rFCpNRxcW0^xpUJOUb zI!Qha>Xj`sCr9?@fizz;->H$24`kk%70bMrfCEW2ww2QuW>-xhkC&P{XcLAb9r|a6 zVI}nUfCCy-@;zW+G;1gG+V&>0_``2E_`x#$zAKTNAtE_b@8=W;+aqG6XJwGMt>pFb zL7$aHKwf@DBhxVvB5vikpGnZKALM$Epc5Pps=6g?4r7Aqc$CHBQ^@hiCc(qp#$BE2 zX)4dJyckw3{4$U7+D5OF*~6@%FcNpXpJQJg#r5B%Q0tkJ$%B+L$#={{HWplj@tLa= z;EOtfet+tAB-kjW4w}A~aaMMWj!_$kwEd*66vuV3`RV(_{_6?I%v5Y!=^o$;#?{R` zhZl4ho^{5J1RI>_`!z{#>a&W30pm_4Qt3@BK*`MsFj7Ho3%#o6gP$Do99#%oun1lf zs9ysFc_E+M$BqmccFi4-*qN9!b5KVWqtAO}E+Bw%G*h}s%t&Y>;i-LivMWf@Z|xdmCF{u_Nw}W(93j2Z&y~Ww z!F^DEseZbNJzPb{6+772L%;v1;7?_^cj{o#^yB5?cVbA0OYP$ckm87~zaL!+bfG^; z_~q4`BV4rGg$LG3(Gk7^94u7AERPQQdI(PKs-^!`j)HqOH{bttbryL=ZlD!lduk@j( znF~X2ZMg6t3O2T9!p`m{ouiK(CkWUSd5xSe7n#=1+x1~6C2nbZlOmc+S)WkBu(TFR zIzqX0emBmLe{=bcU+hInr6PG^tR2+jZtET(cpW_h+1pNUVPxx-aNpFyPKA75C@jGk z$m6D*B`T)6@?_;(-j?a5e(F)W%72bbKr(H@~g^_=r6|L-B=sEK!xbPC^ zmeY;Rk{0B6%BlqE%%VM42@b+Cw;uQUQ49~;u&A{rLKgrhUALWGwhlkNYZrQ~o?Xk% zHYa@6X+{Fg!g5wlbYx;c85%1&YRvD2dOG-;B&HHFx9Ur^XcR1HKSebUxZz0f+ykzI zQ<%(s4i753TsDv;C~=q2M?0yTQ3juFN;sB3s&GI^GikByD2II*zG!MXbU=pZu49uw zYeOv<;U9C1?*UD74RrFl{1?)#ReG+v??S0S#k7jURJr6ZtP?Ie-+REWJmH?MHZw^# z@xH#R6t;Ikk03#8N}hw8yN;i$i+nO#?VGMCmQQ3!MH=2ur=Wf8;t(GG8jdFFkFiDln*8;AdI zW$&NO;)HCc=9)3ezBBvKXrn1Ur+1{OI<{d5|qw1>d) z*mhpg3@nUeyR^Qgp;moG(GaTW6&vDTv2Ec}61&y6lwTyx4P5eWPY7cVQ2^D2;4_B? zDNq)c7tOi{z}hPAwLkuAQ#!@fJ#RHn-1O*_wL4BqxfnWnxCwVdg8}Hj zJQe9vBPV~YBE>M@$9%?@P;6AQj9LO~+6C0G-7d;7iOc*HpK>xF@>F)J8&wC*6fFy7 zxHq-)N#I*3{y40nMau*v{#;J<6#rEA+og_CD>I2KJ&B=3Tav@UfrAJwQxX?EJQ8s1 z`h}$gDj;MUbe2*-9nZn*!3G6EJzqZfA=ocXn`xIL&37@j?T}2IdR|W@9Wg3T2`~d^ zoG^~hst7$~E7R-9d`m3Gi&!wVjUUdtKq1bsWD}mCfE{2>zf;Q^a8v2Ml08k{5POs9 zYHC#w2xW~YOKj#OAl@oDWPa^s2AoHzQvPVOfvdT>Dkc8Rr(^+$O)Q41&m{)T%LK>b&v_iq898xoz7D&pWEd3lTgu!6 z$Tm#y%p6{Z{F(9XQ)BT@NdH2mXHdrtx_r$v%o*R<#_4##-{O*Y9r$U2-3$p)7hv&N z#24V>mSLpVz}n2=RSTa)$>VA_DtWDfT*{;CMNI5jY{P1wB;XD76lT5G7|5;ITb8!H z5iOd;()$_e0-lF6oC!`x2k@3EnrQ$d$P17Pgp6Nh9(x!~Mx;>69qP_uw!}t?@FTBF z|9l&&ucLkx5YQ%bTbP%N1xYnZjn()A*O_`aC?y z{5|!HauJA8Y41Itur+X$!+~H0rfyIMY>ZEe2B7~yoy1Ferix~@J9|t5zm}E7%&<3) zb@&WBGFDEX@~0kjyVfkk_%5*UXnwZogauK+c$rg}uHu|JvQ=!L=}un)np!jcSxqyc zh%nC=3F~-6Uy7w`egzv@#3e<#fN%IvkY~zHPDG(&%z`Ob;)H}q&Mdx*#7I?&Ec$@s z>7rIEDgJUj#PdsBENbwZ?&vohJP<84gJ>5`4gw;u87&dvpvIDplj|HKozc;HYfzoc zURO+pL)prq^kzeMR_n-zY`Awv>%=)4oZA%jNN59$W@m9gp+KP#1Y@A^#CY>!#)!IH z^L(=fVJjJWXMXLZcop`w_bA4M;<3^*3Zf3FgwzatGByjzp%kpMs zz`XDt5RmeZi?+bipK!T+?9SwL7=LNZh`D`^3Yxsz|Mvab05c@y5B2k^e<}>Vn{{?n zwaPCWTv2?_WtPDiIY8VL+|K-Gz2O~>AQwI^C3+4`OgNk@*lMbF|q!$x9)#6 z&|UjK!~dVfd9bYiUo3~kwVCW^#J?<)#}8{8h_N?n(AtE=TC7ss4~+XVn{8H$bOWaa zKCzNw6cFslGXc+#{mKmr7WJ4qM_P3ufMpm`ech=7q?^H?0^fch9nvK8lB!t{4; zH$hclqrD0hG$X4&)$4r^D3;~;EH`-9)!zPd&-Bea12Q45M*}oT217Zwck~eIud&a4 zwA;T2)Ia;OXJ^QAu&i4ulHEGTT&{5->s6e28KQaU>?^g|%S+lxO8lD9D8=JD&~x52 zFpfMh>v0gi$kL10*!hpGkon5Wvzt=W0iAtfjVd30D5*}d6MpPLxzb}!0WIrpgiDna zjU}7opGs0JSDk~2g_SAs7)!0zZSRZdNbeYUj>FAGMu%9hJuB}ux8pKW^$;!5twGC% zy(u|muy}|#)%r4EmULo&b{Dg+8nw^d#;fYcHLw4sxy`=WS1~g3>xy_i{JVdIT9F#k zOl#jF{NoJ1EMIylt7zFF_)?&T-*I`xmz4rktVV;tXPcKX-Zd{g|DfqTP__JeZ`Y*q zsri>DGem_mrmQb*`wyRACQ#W(tnqLy6o%z`B$s6E#-KN6P!3)fIeRl60iGhf^Xglx z>^-*ixIeqYD<65B>gG|flNwlNi0Qy? zfD0X&BG2n*y6mNAhn!}dP0gx@!nzAI9sVs8V5V}T5M*Uo?~#cPdoyv zwAD@VJXAHb-aC~-7mqkft1~8RAl(4wdGm?m8@CPy4GkL}dl^LP^p6HQpAWsUIdK7C zJ|S^vkr-Q#M;fZtP}R8b=0vW)Bzs9aQt;k zZaofmvg@5(qfG)L0|U+WMuWVY)v}rlHjIneAZe0ZV=H=!pl`ZSv@lES$nN*X?HA9u zZe}Wlc2P`8XLM!<9ck;cn}zbXKwLHq1&`gk!R3-Wn$k9|%(DHjy=90Px4rItfEe`k;5 zvl|-1ZOrc-?j!=`X#{|2rV+F-#+KnbQ4J~6tCfl zNLj`d(hIK14&xH4HY<)5;imT3^gGAIos8iQgI(^l)z9uuqhGCzO z+^5NNSYH^v(-*TzY<@G%{wBpy`6wp&a_Xo37yipEuzMH>2T*@t5Yy=t52$e<5Oxu` z?*~DDn3F^YJd58a9_p_kTNB=VvSe1Iw_n&?ZJ4V#LH=Bug}NLG(Vn@zO*@#0D{)lqSG>xLq?-j6%t!Sa0zL?7241c8)Jo?g!`W z)$cHy7x{R~eGd0XSnv_VoJ2lHfkEn;%8x>YEB^9MzlCTK8P56n@n{W3kQ&M4KO5Xp>Xl}SHsv)Q3E|=E@Y+gfGDr-6+4Fj zDpQ23ur{`U1@e(TMB=R|Vv4peAU0e*49$>Zpk{6IgP|KA8=iZ&FM`FfK zmz2P*$3^Zw|E2kXYx>~+8<@kWCeL(n#hk1>iB67zkQsr2*RqGzwp2|D*T?OptbpsF zM3?Y6ZS8WAXRY^uCw0a3!xiSE8ilJNDV@JBO_#D{6byo3yx3S{t6zY@`$lF#hWWD> zjjcmHd>b#f<}#;qYR*Q=gU{~)0-~`*m(5#IX{3Zk*LXVaNzIRT9jjFpe(W?ncXBQL zkaRcR+GV2lPTWJ#$gR=8T5E_2>Kxx79eodYL;P-Fp~=jh_-@RlY;?|k}R`dG(^_B92A>-@Ap+9*z`;b&PI&Q$($O*$)!tzh$ZCN4`MWo z?O8N{dJ@>=UOBR(1wIrg^C_ZdWi1iCBV$?daxa~&SO%wUNGdfhOI7Y} zb6or+-umgbCgw|(79nPDmNf7&$QPJ)L5_6ld!8T#gv~r+VK}l4@vISY zalWW$@YNczrswRLr>t{KAjFw$-P?}E2Fgm&!ymqpo=rbrddf7%!{#j1{wCBzDdZ-c z#63N-VvTnhvpUW-6>fxYUO>>+Gv)Bg;HDY4U;$U&!X(0{Hn|@a7Fse0@{1T^hgOv1 z#mLUJ9#;e)R%?H|*$1Msv!B48b}TpWX}iS?E~DGOPOL zh9wv@jmHxEX30NibnqPR_IGfSY4aX%()L${?yte&YT!*B;o+6+jdV-@a$EEH_@V_T z`V4k3idA3qg%ENbe&1Vk@ju1sCGH% zTrRk(#T2b3dK0v7K>R|K_=s2092Eksm!MLtfkLy;U;|y*#k=6;sy8jK+(zyJF5kRX zU(t-Ia;Y;G68`Z%tn)GIdgB`9)a!K9?L&DF0GqBa9a_y??g(y`5=eg?nbH#I9 z?F+^)Gc^KL4w*@*F|{S(}s&2C0Al@)%ZL6Qkcvt>&Q#|M9f0x_=|(UHqA}EL!^}j_hw= zOlBL;(S6hB%Q(_qvST@@2b-q3q*D^UG9`K)tf3%5AbEaW{4Big{5j&y;_p7|iwr-+ z(@TD2FigANq);)g`J|xC&B21DJNu9;Yjc8w1`97E`F32OE?&63;eh)@UTe?XW9hjd zvd}s}vF2oO)Yr&SnAH)lk};EE02uen|6QhDpw8P;{d`)pcgl3~Ajv(? zoXtE_kR8|Ts9NJC4>#CgN0MfD7lL}zBHK8pU!&&mLj*T*P9VyDtZ~uhq65^H%nf!Z zX-2p+1z zeDt-u?_xQv#%97$r}UpP+B&vYXL;{RkDlF?TAqWX4r-{pxxbM9{xEG$Suxh-rRR97 z5|H>dxX(TK9^m&Pyqh-{hhwe&F97&bK^+i454AoMuc21=epX)VsGg?%$~zKfD=DtC zaM%>C(YUy3q2Vdb!5seRT7#3ZJ;(9#GUu5G^rq!=!ICNpK2bJ=# zLce8S4Vs*Z$%<)Mw-A**>pX$NB8=h3=b!QZ;QXZkl*8v%$<+7 zbMicjn!22yWwkDH)S89sh_y%hzP7Fpi+`RwfCOE-yCGj!QeK-~>?4AD$4G!tgtTdQ;Rb zUl4y6eZZXYzl}ilU-nm~sz3M2pUMlddX%n;y#3tD@7CmvScng9o!5LTD>htg#{u-v zQP&Dh$7{M)#v{kaa^+EbIHi%q$rd*BN4F@on(-shS3CL5SLrRjGTXfFo>EiEsf{@X z2gi8KiN>V=U0G?Rx$A}b58HXSHXe(VKwj?~SZfiu#pu9be_4fF`US`ga*}HQFDNv-yEIXF41^(%tLj+0z~ZIoI)pj2-;GVz9#{Dz;5&g?oSlSdKBv zIQRCyZz+wjfX&^nvAIR)?B9{oBqayM=y0inGG}AWWD#T)YmcAVv&v(T;8SRFsG%UH z4*u{C`4^#4IiWv##M(maceKy~zoi04o*dbxt-K%9fjd z*@3~omBz3`m+xdg-86`F!o79X&S4$W)TSMtX8hvs-d_Ban8I?_NSL1>EiAlzEd0KO zv8YulenJ~-1{smkZl0dz+H8N&rbb*MrVJ|{mD_J^&ea9|_fMp4==;uIeB3P###`L+1+7_B ze-|L;eoysMXv9lvjWCm=kMf zc!`NUBg*tde$8{&?vXssJ`uK%WQGcTinYdUm2&$XG%b+jBx(NA@v_{9_+-=Gcho)U zLmO>`H3`L`fGzW`Bj{r&K)wG(l5sY7M`yFYjkucG`*A_!Jpdi(4O*GOR{}ZBqviq& zj3L@B2k12Nr49N+irPuli4;Z(bslDG_aRQZ{m7aDEvdZn!`3O4Q}EtiMl=tLBd#;G z7g@{*J`Dl%OCj$trUuO*{onmd7;YRe^d9iLZ8{KsTHG2s#Ci_fI-ATRALdJv#{Uy+ zKADZfvxEp0E1yV!Vft721wqjYFSHJp*}Ok_HbYuJ2YTt5O|x2Ne=cK=WaH+>ffr(a zGYg;(RWUm&7`F%(T#eS^tKXL&()4axR4ZNT>KbD#>cfGz`pvwWe1oM!e&z z*~S3GV!G=dOFp2jC_I?umY2o&3a{RWh^H+?`DVv^$3g3CU2(f^bbf!u&>k7>+~9z} z<2g2Q?K1HZnVQNZ8e0SAl@*&Z3Dr695ef1x5j@#RfSV{g5F8&Xyk^r~gS zPD{D`$yiVL1E<3M5fKO;yxYe<-KgME&b6HPg$A7Mz{Xkk7?X00g0uvr@|g$8=6uH4-K7f}$n|z%thka@>V_s8TTKW0CT@{l-#&(uw z^FfoD0GV|CJ%HZd&QkqA*z+8?699Ltgm z&o&299V*8Bvnm2~+PWmRvQH{O-G>ItP5qf}!Z}7&wfnCKL!U5cw{MJXXlRyMrf?1y z9*1ZHwGLwOQ7l&opP{IP)6&>fSH3hVr1{v!lB)2eEXE?79HC5nxUck; z@e{X!%67Sc9&5wCBhu3}NZ#y3z}%UCrAoU(+#mBHAw61m;l@`6Lr%?w*~mY|WH}&N zfA$d1d%)Nhv!V-%Nl;!y1a0bS?Sy3L6|1hT!00;pbn-rcNz`O)k$*g)_;(^bx4sE) zMEK)^eSh65q@`xPqF>We{eY#dgGa|C$d{Xq0Q7DxL>=2xj*{Uo?sgUmWSeJ-Yk;ft)?Jnshe3`HKBv*C1$J@7DAx?KF!nuJK( z*7;F2EAFjF4k2+H<7FxJkCIMh=Cemqd0=H+k%&OkhUlXDLo;n(1v+xH%?gL94Awnh zFRiKbV@vyMCZUJmX(vxq<>K0A<`4PuY$3wPEn7~@203-GPXvgPMe~Mgle+eI{ z|FtGkGZy^$yz1}ipp&F+HmPm^ihh(Xec)N_a*ceL5t_FHeB zoz^|9I*jW8S0zlydXxUfL_;GY#)^c4Mb2Hb6q_NE`D0t`@tyk;HCykqfhXT-9(At2 z-5NQt8c0=APX1F#C@$ukeBzlGyRcVnnvkj&^N77jDmoqW$!jrUAfutek`*1gbDFLxm#jq#u-2F@D!W>}6Wm_D*Pjyi z)2M0N;|*Bw)|}ire%(CFYsxgAnr;=+1J5bgpp#+?@bEagor!)9lu*LI!iLdzNYB=p`{NlE(=8MMkDL9&*-*0=hEAr9)*Pu5u z&m8BU^^h&-e;NtmN=}wbok#^HE6{nSNaT{srQ&h-`JNM%1;lHt`Y=RbfoG+Dn!Np4 zoT)#uMLA5euH*?C-^LX>Gs>DRIQ(h_G^rmTH1#dDpp^s#D{m%V7*97Y9F;WRHWV9r zr3gqF>Zq=Q^H=Rr_u2QWHibq3D6#Xb`IkD3B|{93d{h! z1s>Cykj_flS@3X%D88`foAmU#cL)(6hc%gQB zTiA!Y?!tX)y_d~H5K?4@QrSxoMYv?$r%ws)!IqaV9i&DK9g*P5Y9Xgi6~{%%^va>= zW{i2`^;aYbk-+}t?n2$8eLb3+DuJ zH0KQAN{ZbKj|WNFBt5+Sw>}hFxb=DsH8^-a0Jj!`ajH1iQ3DZQop-sM>cg@UbTO(W znVAq6SA={yRvCwR2Z__IuJZwbnj=X9n_|wCif>HCYMZ0I*G(+0E>Z z)E^wAkDGzoapM?`WDEi-j%K~oRJp&4W-O6EKTK*YhLfG56~qd^h(1sS<9T%;-y8(+ zKDojhawSOCs-dBnwHnI@P#rIG$0;wvre$z)eaaArZpj5Ohy5{d+>Mu=oIr9dQRSyB z@iY1Q7o&L=yxRQze?f2*@bZ&3%aDa)a;b!DW2m{#u7(6cXT=fdW@Mzf1ZgC;_VG*QCPWd| zHm)<&u!IYM%%9iVs9SpwU^T*zQ+>1k6rN^%Y(uO*Z{bkh#d+|l$8d)>hI6RlD3r}6 zmOOF-s;V)7e>R-_!GUwb>GkxVqF$@namB}*<#=z5+w8HhvIsH34?tA~wZNCWzQ(VI zRaOW?q1eAc+IEJlT~e1v##a-x!56ywZubC+dw^-+qI_xBUxQmGP*N2inVax$fikr( z5r4&~LKaSG*>Pu*azKP3`d2pYPEm*(-4S1i{yd8X?yp(cxo>rH>qcXq|2Th&zu)^G z8zIP!-`{3d@3`;kFKa&-e7Gt`&n2vaDo88pp7IY}&eXF+JdGoQ62|0G_5Zeh1XnHz zA;-9ygS75ZmY#c(r_C%>EbmLoDeVQ_+ux=n@!leH#WF6m=;`5pU1ycccG|02xetb@QDOJ zPD^+(jKL-s4G2{enW0yeZ#eG;U{oc^k4??0)B^-ehPg>f^dL8~N`Og2*j%3YSKt=gcEv8FX)CgAIT8rP`dONW0gP4$QDH(A@IrY!=h0GK z0bTteKmUbVZnB{sF3?0OUySi)U;sBaqjy3;&F6U%xsot<5~qKPL`MNI-cXO1UjG&! zpiVQpEMpPOlzxW{tPEquWZu`Y@uTigY^8=BFU=!sKo zkqhQh5Nc>JlYJVefkKaQ)DL;3UmO#xVfueB&G^@MV>z0mcH>o0uAagIIykJH+P;MI zVDqOv&I|pfwYF2h`K!ekU!dFf*W4mE$byCB*3nFd)Qb}bz|aS2884-5mTi(_8 znvgf4z$}dxS5s(-8U8?o+saeM1d)*N@{1Qk=A%`Uz6309Ev}bSo1NEX_!$MN+F#HI ze*lSEWKT32urTbb)z2tDQ-aqXe5r?}^8^tPnUaH(55YV^4VgnIu?J+h^~R;6v@y^S({y8tK(seUor25FVmm4K1cJc zm(I#Oppj@}d*VD5n{sA5Ke-0V=ee?!-wNN@O9t^z3piYnrt8CZmR22#$ESSQXon*|j3~F^wnaS$lmU;jNHIBx_YM!n^uB*WvQ%rIR$JGvN|TGHSqvD+!5~+@+Ld9CiF` z@A~8EGDDk_P_OC+NA*)p3~41RxlG^V_!QvWY?I>d2J(DQp>U(Y*e+DF>O?Pi{E3f9 zm7PwwW_T5R&iWZ;hcUYuf}F8k#N?IXTW~`-$5aLHyCwIe0m%v`hf@14pBNYe&s+x7 zC%zb+xl*}IO|{WX&@yUO$RonZ&Y}U*gO6Bz&ucFv4Y!Ee>kn~UEk^PGYU8nTP|HlT zj$>{@HcEvhvv^F$iWI_tfMOc#=)<{yC#pW={W}@+rWT9A4XuT6eF3tBo4|qm5WRJ! zHC22#_@d0mE2lO7i3ooReeSVnQl+s#!d_**gWT7}26m0PTO+Glr6$X&$>+y>`_1rP z*XVtVEsA=|#h^dr8xsWTOFXLEGdf-S+G^99&&p=w_7)QYa-B(9hy|y%`=#IqLC>7+ zrz~8G^~3YDD3h~)c>xNI%dNbn3mQ@4FVw#8MSP97ZSHfVALK_YY6{c301X^GSmc7r zOlJs&2=yh0M&CD0jK$X#q0kCBnGQR@FUms&s@L-g$&oKWp6r}hvP<`XE=hTE2OS-Y zfOl$jM_W9gj8{$@-&zlM{Hc}qwcR#Eq8n7J5=+5H^$h(JQ@b2i`WX)7A5kc;Ferwm z9oNefm_(oRt?)(2!OTIV_PJ{5Ol$D=>p67yIgFvc#)ePbmMpe*CgjRJ{Q0e*&ge%8 zwi&2e@f+_?unE_yRaSetCth32eYZoHnLiU}N_;vP5=#G80OgWuM^IU6ZXU_)&D zm=se-z2cPiYRoI)FH}lByxT+pWa4<6cMK(^XTKSkz@$Kb{XyT7jzqy;*QcdbqD%g6 zu$)PAyIFL3K~r0Q{glo^E8M#+&HFE}z1E1~yPt9pn|3pO3krmINgn(2kwF<}iy4Hg zZ_R#xVx6c@oukC$?>Y|Y+-LhkQbCJbtzn;kw-5G|x#7@Jxr^HbBtaO%FXXBn7)yWb zdoQc^UW=tqy9zyF((P^<3|3C&uWgC1POx!SiXp(@kIfz?G!}I^SV=xZmI+xa?K4K! zIa1~Ewa~4QJwExWPs2gT#y!~Y?te9xkq8;nS#}w$D6+(5yK@g=m^Sq$M)Ir$p5Hf>#TRifG6xl|lIp zw1Jw+k935rMM6&6?WqeSVltY8K58H}>prYV60RuHMt~;)iW)>B%`& zX~hqF0Tev$>GSmhwjW+>>V$Ny$i&jz+e)7s+~M;%Gz>ra?qTmTF3!REGdmJX0&ZNg zGRpwo8#k=Vc>4Y;smhdTDfP(6%8`yi{*oh?h6WS*voA1d>0GwXqF|zfZ7))*ZFukE zV~xZ1pu;1%?N&ls2s{r60yVJPzNF-eO^VGJYCoGUZjJUC-VUCmk`8MdZ8jAk9ST9l zX@*g@^|a;-H#T`yA7_j#(-n_>up0(8ja{8Y9=810Og<+n&FFWHn+b^cHQISw()y~R zDsiVj7UKEjnUZEiGBY1@!Vfnd5b(1kjwn&V;jMML=br7n_PHeSYTCqJTJfRrJ75+) z(57|+VqiWK-gZX!yds6HMVXS`xMeJKk|zx}pgtvcuo03~ujJk1TqeU27CxXbkOISI zrywDDxGJS9Zk3%{=IXUac)c`%qk2BEF47AT02;_HrQ-#YVk73dgw*on36;5uvp%fI zUl=TiI&_WSen5AgmEmba#ZN=`=Z@oY0 zM|bHvrklT*WZ;&H-eKBvd5Fw8!-_Fi-n_rkX!4`XDxrES&2tWti7f$KLqvpDiM=MMT|1c76v_d5yv(UB?k;VC4ju(gHt+;RSB^=$ZTd$lyq`^tU>GT5wUD{M@!aV$I9 z_eX!(z_ufk^3QpdT6uvi7r2!{+gRu9dR76_xAfhu&kflW{MRmcMf{e}Bjd$nPO{p( z=Dsz9^fYR}m;zkh`dW-VC9%FL_(gjh;awvA+d5Uqi?(~fc$VDImSe?^)cmlqvzJT| zTiLDFenk1NorbOhZMo5m^I5w*<>|*X1~1@)ksIk4yPwiOxa;ha7XqM-$3OaBpPg1L zn^oJpP)`SErp>y~P%}9BCAyoba&{pjeSGk33DP(sF0L>6Rctk0(i!Zl)zbX3RNZu( z7u{rdK8-)4Got;&SjgF__g(TXDb6OhB_|IJ=gdxXhc{<|Y4i_j&6QTGA{fF-Gr-&4 z6_SY(zA5AJ=>^EZ96`~?XSH4#!?42ErL>H1n2nhSF_-aAn(`4{`Ufj1dvMEg_}rCv zW)?-8Xw3V@ZB>#`5KQF2=>dpzSrUZ3=A~r^qf9Ptyor=)F4_!f{;c=9@D0Q>6gEz4 z7g}*Cf*x23Gyr#A)+Ph(#@MMm_6Gaf-d26^*7_F9MouE-bTu25>X@%A$rN1Li%Df;!{=9;2p@8VmI7UvuvgytbbBUmqpqLs0ozUavmJ(9--rJ90hI^n$J-78g+3#Z*^typUFC=YaR^PGNe9Yf|g zT4sKf_8dAco_Xw?HQmbE1A8`_ZfCWVCIYSJA01LP1m`A(s2b)MK>cN2zcxI^c2_a# z5V!}>ExP^@k=^mCeS>5caGu}dk~lUkltH?bDyR4#uWHDk=-$zT=~?C={AG`DJJz{4 zBIc+{5|=!L35_D?dE~zmVg;u2($W~q1T6I!nfI49=cG54jU#*iG{ojF*YDL&je$&M zzEyp61CD1Yfgr@)0kwx5Cp4cdMEx*R=i((P^iQGWUz#cVBQ zGYw`$aa%3)g6mHHsFYmy6qo*YOw|F#;Y;Gf#ZC@#{oadx<+IMe4V!klJbja4UfFN{ zO|apW`;UWb^?ynKafH<)++>>;9W|gf?BKX5c*{TQ_#Dm`H8Ir)7S>o=Q!tTk!uphD zO*tRl!>8#mOGa00kohDE?VY9JHPt{&9Nex`rzNhgllB^}VcWo!Hn&2cXxvOHPczi7 zfPI<~`DxyTNpvk-NbH44Y=hjDB1F@**DU#MH*;e!3w>H%0t@&lfv?E)BK$byQP%`V8t!-HSP! z7r0IPR!b1zA0FAR9a_G$O$`k5IiAwt6|zgnaCWlq4z_BOY|tR5yp=Nh{zEM!q!l*x zyNNkXFR4bDY`~dZo-4ni5ZiU@aS$;TBMNBryt&~`1!#S)ZL~F|s((HM;INS0`l8Pa~YMtp2597VVyR_wb%pjxK z9K?}X$Gm^zR0GGk@yoo*^%?#r2+cMufi!?Yv@?4yr@O_)5*_~XmN7lO^&+|}@35lJ z16k)jFZ8e%+`i?9v%TX5c_!N>?y#}Hwu|o44xn4`_vDZvYNsinAB_e%vVK9zf z^7o@5CmO~J9yu>4W2$Z}^$)+u7^N_Ij(>Bj6GMQT@JbK@oAkqP1EI zbvG#`dr(aSfj(VIzv>GJPo9F=#UXFpRFTMVx>6x#y$B4mFg}6((cfeJjAB)UPuSaq zR%uULK3K2YC(*%S1J^>1{y9DOLM{NIA!#lf_S=xz0rS=%%Ei%D&Nh23>V)BJ=%lwhfO_-DRoI1cU;8MeTr(`CL==M(e z5|K?VqmNUnBREW??vK&^xJvkY5X309FvNcoZ&1K)+T3<8vm|zHmN<_*8cMNcJdv85 zA^}bNtV#=h<%cm^crhEh(NPo8F(gEyC;bVrr@G#WKAwwI9uy6A2m(b-YSvu!*yKIIw z=t`|r@kW{}2_H4-&73U7O9{qLG}!d|UZjaF{~&k&CM>+V=$f3pnY|PJ_@9ypuI;}s zB*0(i(r5I+XcMCbdyh*74M-(cIA3DIlM~UFr^mq=2UM-;WetA~N?mI+8y!pCpDM!m zilo&cAGs9$3NiX6t_iO{(A}{VTv@MQ%CY#S8HxNJ)|aeLh4b&qv1Twx8y(8p74g-f z95YZqJceOXDKNfLWp?aM=*z3QPAR78wQjZ;ryIzdbq3mmg0POoPXn2k}K~R<9Y7#+^=H!JHU|lxsiGs4tU8gzY_BdOz9z$LTfcW#YonM8E%&q%qa8@o@|dTO32Y>tr(}>dF6>~o>$d6K;|Xdzp+E=4mEgW#@4hr`uD~_ zA1Rjcm6@InUM$z=q%DStfs=7ioF8))nG_V~o%FBnWIf=!4NB<}vH z`(kg+DCdapm2RZRWewF>=wAdPFGoJVtr9m9ePaH#L|yR!1YJ?Dx@xYRQQyw}B}Aym zIawqd=V%>>thY=@KM|n_aV)2F=K(N8$`s`ikg<{xvpat=^;t#AozzVpwYNJxC;<8? zTXc`>F{mcbtDM(1E+1E>#KgY2+i~I}#i_Sr$E!swt8n|3-L0Z`!A@(pPv@PRaPDX4 zk@Lv5xo_SK;NJ(=1K|ki7!8+{XZ-h6#h-GdcYmDX{(A9K2(wys zOmauGZfco5we_5)7x_8K|LogO*~)KUIV_YisIE;d*f41&O6+=_&RvJVZ!g|?T$OgP zdh2$KZcrfjDGd!b$OmOf82iD^Q^BGiB3B;uGFZMo`V1CS$3*h$@;350e`|4{RFWOn z^K|x<+?|jdu#A2gb-gXI$*SX4s4>uxctCKL`!%)y`E)J4f5#H+yLVxwpOxHG1aODL zdv6@_hg;)iE&w0(-1-vt=_vMVrcNKQiJ%VsTG>d@^p@a=|k zUw>AmR*0MhqG0mtVeX^w)8UWr)j228e(hf@vslQe8w=_2FcKMSz7q1d^ zr~f6Hv2`9ju|Bap=`H77F`?zG5sum}Bm-eO;k-qPQeRQQnzv-PmA#)W)R_5Aw&kcU zZI7pwuH^9!eHhYlN?n0dAmPCS&tky|5sf|2QqxjXa*pc8*MuYK ziUa^n%B$kHa-k((r2gdDAnAshEkty3B=@E>Y>dXi!T4;;AEq3{ec^fC{(cyO3BBBtui7KE;84loHzKxuK#WV_{%mNKq-WS_T)a*1SUj-5O5$ ziy(qtfiI~eR&gNPNXAu=nT#7jf=%%R1BjeugS`*zgHe~IBHv?bblqBM&N1SzH{(tX z-#m1jOj6h&L;8L2-<8Jf96>I^uA7m`T3t#_{SS-pTW*P8+g~{fiuBd18vGzl98uwd z=1Zgq+oa1*U%}d2r}c+x1#C9X>ph zELpBZ52H3(IZF(ptq=n@u{GFg{-PrCbDo4bqddD$^nVdRT6N>pApY;~%>j$X88*YL zmgnc2_)D20DoO1Cr3#KkVb0qtKuhnn%C=iWzlP?h8eebI0&W#3?W?x0q~zjAkVg5& z3ES&ip%!@2qWu-!kgO8d4D4{LvP;`fPFw+w2P=djM4=i<>5MT1P7R;h*!lliO@nLC zz5m`zwx<7D5oZ0@9+Z*X4Ceg2HG8C4cc?M2Ra$h9^JWA@rwzuTF^svgm)VL0@wp4i zK!ZxNFFy$F1i7rwyCvIJbU)jBR+j002CtEyh(`;dKi4ej@Zez6=K_VUNV_jP13Dz72-f02eZUUHULXu8Cbd)jZA00MWc)ol~ae zmpphZaHg@;-Tiv98Lj=4ihxK0!5GfWrZV3ScB1b+}BN>l8QA#fg4@DXyZ*#jg6=P}SH*b|6@h7F=nH zc~{#PQY$j>INk2C7MJ|UNB#5h?}>tTR!D>6Ig{1g4xGn5DZC{VW!T)jqkYC45Cm3O z-zf+H@1k0VTlMm|ETOSt#SdeKR6I(Fc`|Z|g#Zt80SN-0otk3Lp~VBM&Nx|tFSE64l5!ywNcYK<1HZkf&lBPt)`)(^inECxjGH}a+nQy zCQ0(MyH$^V=B|ugVM+vAODlr}{li{B;al1nQFEMeEqh3-?$M#hFL@e7N%;pY&J|w_ zESNGbjUF^j(0s?$oe^OtWNcjBgmvS%I-B&oDks_C`DXq0n(t2InW$N#zTxYgw#Pop zv$K}Myy&m_V2G?N>vBj;H%l<+xA*tNTGG#t(>I>`1U+qq9Uv3brvlPha6aF+f6%iH z?%2N$%;8X;_w_fpy}=HK#t3>3b&^H%qN3zHNpBweR z4#U432!Bh$|8>I>lp%DAtJ+%2hTA2@MAan2cqFBf}^F3CTv5ikEj9 z69gm`bRStgVbWF)WE3M|;*W{-qAAD76%|LlrseOZ)klB*h)58T-q+s+S#?y5MtQyA zqS6fdd^5`-IgnRTVbFlnSwlOPe7sXJDn6$fI$5MUtKZJlWV6-Dw!ZkrGAFpy6judg z?cRZG+rBO$Rd1c>B>Ax>M>=5VfqQg_TXE>z6wkQLa zTiuQrD*G}9_n`rNqVBVrIq_-fE6d>`vFOzl-q74;cjzYPZ{1X`s%w%8KAgIv9qtjb z7zs}44()nU!qdg3+7qhB%vaC+nk;i2>yT`6dT1@XT4eV4W96^Qe7enO33HapNt>>ZbB>_<#N~`*D4Hl z1gg##EIR5&0(Tzh!6pwg!|!`e@CycOh}Jg|*}!5Qn^}~?OwvLl1tu^9WFy!Yif&iJ zJDf<62x~>#isvEgTjxB{X?8}9v)1xBRbxv%cgzV-G{ix^$YG7277@L24sNt6?$Iqo-r8!LN*3_i@DpcOEYaa{ zbifdf8~K9(CR)ZCnojj~(2|i`GsK7F=d!~!%Y@xbYPI*8rYzISn|+)3Kl~J5jAvj! zs(+7hGdAPz+~mL2TAbInmz?1vp=;727tN2YT;LG;q z<-Kir4G|Jj`_7ivbd!~{ncSchO1+)xwqYg7)dR;yop4$S)~Mw?g&)B?z}?i81WXwE z4w}sMjjAT$Ewj?>=1Si@6WMBu(mO=cD;;v9qOjSil@AGMu3a4s9grWeu8E0>z~{PR z?j}cuc*i)B#(uUluvN>bX8x&dpND6lr>hR!^V1WN)Nx}X@-I5tP~Q+Ij!IV3kj&{| zvn#HKu2r5@>lR$*J!<>sFu2_gAeP(?BYcHg#Qf;n^8@odNSrezeW+yYpRJXE{vHi9M<_I?4|8gG2;-pJelI!)(Sk973Vpzrm#5^BMvpfN4i&BCQo z-6Uvq&2}t5YY(b`Qh$s-)w+cnv|E+>HyqIT|1@F#Z!V^P zmaH54%v90yFmei)0C#D8)Nf4T>)q@}_sF!6wB^Wqa+Q4XZ6n9GZUxhvLPZ=>e@Xb$ zMb{g|&qka~*68a)HUq;nV9690aAb{w9_*oQFb@WBGV$M{QYsp^PN)HST-yB&hZ#eF0ni3{qc!5!{+1$-b6y z+xP=%Fv+WE84vs}8bbai1N z!_v<=qh9lgU;DHW&?&}}-;#4Lz*Zq;NIuJH)ruptCzZlm4laf;_jZ)TOCKH~q(;FR zz!LYxq&@e{H8fP8Bs_dvM8^I6_v{kq{6j>2!Q)uNQI92<(5g5GctBi5z_)z3Hd7z| zqj=Ty{JozhWEvnoqSsdoGMx$i`d)wxMeAQZ7tn5Ts8^ zMyXGBTs!oN(|qt*2x-7vuZiB#%Ym`d-;ig#2Lefa@TEYx{Dl3I!q(OEUpG9K+YOJk z*S48aNAgSDx1TTSYx#=pxoYl-4<~D zOHa;xUmFI1Ep{Iuisrcq#+ZGlVcj7IH+sssT>o`?ro9E9QxnmcFtwI{ z(XOv*cdS!tAN?f$qP4E~AmQYPZmIp?M3cj5@u~K1m(>iLM`?n|Q^X&>fJN$9-3+SO zYcRz)BzknVGS=p!PjkVt?clWdUEThj^8T11==5ax9}Se}O{kqSS!g$@z=tf%OXL{d zr^d6rPsaGrUW&=IwZ{@IvyLHnvyhw!U+gK1Tl(eQG18gnB{li$+ocr#!Y9+p*OC2q zXXC@D*&A4I1Q#Yf&A*9I)n0$W@znxpgP^YAbF;q3YxG_WTKb9VJA2Z2&@Zn6zlwn` z6I#5MMVulc(a49!2P)}PaK!jwtfBdQK|LW4k<#)uWqRtQ;8elE{$$OO>%#F{kxAkw zJkhA0ltw0?nh4jHE$WT&*8xH@7n(GaorO7lbe!9kgx;!q^G+?-pA&ZkN-`uP(N((i z!KWwmye(0x+>j+YnZ`o$Wt1i)JvABMg~%S&u|EEaOmX{U#$_Mlh`aL%WersgS7%Jw zB|qbqUNCSEcuKTTx>ncSB7$wZXg#meQYN=je~A8}Nl1Bm@bNDKzGM{x&j7MgEW6(w zG9q57UP{+N6}3eCl9L(Qmb9`lyk(E$)UPMU&kQ(wvC$^u6IZi^mP3@Lr*-*VdI|%5 ze<}b~iLb~vEsiUD$r!9DEPEKLv&L6Oh-LbpEj5*3+S>58PuDw)gx+Iu=f~bBi&pas z<1DJCD4#v9H^VL7eIs=>dpZ4YFtjQ5!` z8uW0UMAz``$NgU;0sh_P{WCeBOe4hm|0PHh-XN#2X*Riu@|tuP%nGINa7qG>)(+*@9Ux$9SMQ-$-(w4J?;~xPu*=(J63OM7im0QO z*mm1k-cJmU)znx_V**By!+}=U(#2G&kT}lJIL=S z+QDPd=hC;Rb0ps`c-r+DrnjfY-UVAYKFA1L;*XjvjUr!rBlt0sZND*4_lcDJ%lN3Q zcv0g_K@Vr=?WozON{pf+)tN{!2?prNCOJZjBkuF{FIB^))c3z?DVIO*Enfd(5DVZe z16V%q$#~hMVH|A(x9=6{*KzG?;+?~Egf)htRtbP4*!A34^ttuqUDUiGt*IG}C& z1rs;a$_@;`AV<{nNOHIDP>^`#Ruj+iR(lHtc>lZ^glTut=&7O2`#GJbLoGs#y zFUD!bF6Z*ibB<|jL*W>ZLg{q1G!n6+5q93pjzTLHMO%7*lo)jvkLKXk00FiR?(2EX zo()_^QP6F&jbW#rr&Dc@uI&=Qq`EdA++qtA)ZMg^B2MC+Ft}1`}5T= zGrP6;KvCTDqkC)yoBZuk^JvmX42SWDDddEoPSv!X1k#6|$}R)5M4ip@yzkc?Ee~Cz z))+qoVZmn0us z^I9%OiZ1!8xjyVQdMc&Q@avI)Gt48mR)WJ@>4ge+8sJnc?)wX)i|ZNY*|oZ5V>5rF zuah&4!yfxO{$~bFKnQi~JEui$gz)9*I-pFFcVEs#qNe7zb^YPdXtqUVRoMgb%7}UV zeIwrKy6UQM^k>AJ3T=!2cDMFfB(f$TV$D>uB|tB&Wo0p@PYU;Nk{9jD*svu_6a@s8p|O)8J)bX&LuS)890mw6mW?iK-BbvjC@Hcpeoo6z>}9 zZNCA%49qV&`q0z&?b+0;sPYtf8<1i_h0Y|j6dDnACD2>w#ILb(Blj4#0LqBSuy7OF zH`ARiuk?;&n_c*{Th#Tb>viu}ST&Wg79$Y7;gyEt(s}$}Ey!KUQbg)?v$F21U3%^`6{dkvzGT8+32S zrRmS_5gFMLUz!K64y`wB3R^!m4@bKt(_C2I1LJ+H zgM06R;ShdUJsa|I8o?hU0g`p@r80|sij+0d&Biza{jr>X~ zQpo*RM`LP}IW-Xj#MopBSNq%jjTH4y3~rxV#B}e4rsv`-P&2hD77KLY#}CaLWC$`z5y~Te5?6sMQwI*Bq_iZ*q9}L6#PM0BJjm zlz+@;@?2ZS!e0dHzjH-7@>n@gJ@u3j5!qjURNqzskW$aXi&+5=aex({4|>QUZ# zOjEiA3;vIZJO8$H<@~Fv{;g|MQ_L-y)Nc^YDLuQJ`qC&S26M`3Nx;u@jeNfzR9b*O}w358fHr>d;n^alwk7r17hZ%4>$#9 zE`EboYQ$?Kip!%pp(B&{7_fnk1DZhfHggl7yry&c(+1ZCq|EV>bArRLY{~YJC&0UF>vl>VIufWSt8__Q#Cj5(j&mR0% zWJhQ_&)ww)MNE8LGb!PHSCPW@W{LlJo`gV;@@==gM|ND|Oz_<+$6*Nvm5(!D5})Uj$qV!yj{c=bB9(?Xk}~)zTwx@`all6g;J==`atKOqfo} zr#^r^A9V3n&vH@^sdB4`O&j2n)<32oRFfZru3b#v(UXy4Wz|Ujp~LjB*u<0)vdUsI zG&M)%0FFLrR+4M4OFsw@VJh3ndR`Wwck^k$7*MA&gF{(i z`V+L9w+gR1zwAiT48J)y5#2!PXf;yun^WLKUg#N9_YYH|3)0API(5$rLb?H<&Ib^L zXbD7u6@0j}nIahR zHZb(8EV{`jJL%_`V$kbk>PV3441Zme6q;JbYg_5%I(J@hd*!1BN>ua(e|eLdt0F+u z-nKqG0qAdr<{aMsI`m^|XYPI4?$U2C`X7{+xyaMc`Za2^#Cik)08=Pd=u`xj3>trk=t|p+ry`H<-V!`_d?zOdd1fIgc2tE>4mlm-lu<`WC#T`v~&pcO? zYY9rJ5;a2$e9wW*r8oLUK$d!?!E+^xnxUm(dI>!{qXYjMauIrL`B!t~V6m z508=+gs$A8X=E6NUyUdH^j=Y^3yl!sxz{&u&L-@VG5v#=`1f`W4CtyCBgILC+rNZr zhN~aV7U(E_X=_+UnX)?0+*`lp-A8Tl`R z*WYTmB*H@4OmjNGE>VnGoDUqLiiCSbrE&0cc? z%dF_G@wQJ?##eL%;o5ID&j>WU3Ys*gW9~9-s%`2}Bz1arEJe9pq~55m{h*mM9gQtl z(d#&%X-vLPgmyQ^mQGIxjkGc=s-r=$ zt1fhZQJJf?>Vw4bjWlDnL}W8r-GjF_E&C{!mDtf|0yGRn%592cg&thW`we=-m!Y!k z9~vsJ?|EiF*>kjfWA)7q-dZ;+!H1u0@gUTF9XJd&{S4G1$W7RKJI9sLy5h049(((4 ze=L-@ZAv`+I74-5giw&;8_5}RU z_TZ9U=U4z%E=wZt=X(q(pwNkgUmIzO!dC8Ay_h1x*?RAu+o}dU&u*4l-kMJqxBj3j zg(;}Z;6y{mXAN}L1&~4AL<9x{Q_@udvPt>*Me4Ely*o2D22(j(esU$1gI-|xyK^IO z=Plq3?Hzs#=6LDyo52yc)y8xjrDMGJ-inI8FGH+op>SE(;=(tnNz*fSQQ<=Q@8jg- z4HMp_t@+P)ifi{w4%qLPiK!d;H4o;^)4I|4!l;(oiG3t)k{`A~&ngcTpB;qcP3|)y)pHJFLiep_h`_#5m}M{A)RIhU-LzL>(3YW{6lE? zE=g!znZOOJzs!I|J#=nylT}R&Cl8;s}U4vXSc+Xc`;RHC0YqstPngJI=SUKJ5rqel+u8Ees`Kk0j z0Bn;tEZKwkbyADpw;qn>_3(G%G++0AXm}gdAwNd_`i*?(gAn&KA3%^v4iQFVrDoDO zqdXojvI?Iqkvj)nUDG(A7q`G&AB`whHYU@vD4l>hmhVlMTQgXUrC$&r&IM%CPm=pX z%k(NtzPc@^PmbhSu@EpYEiRq#0}1$fX$4)mN>O?yISiQ3Uz-=B&C-7dUgcA5%sb3L za;Mz_8`s)>NmDCq0^Ca7=5ivh_n1p}KQv1t;d6HpE-~nFf(`svX(4 z4pU!>n5}{G$%-@B*Ka*(hYHQ*Xudc!6esBkK48XP>oITCi4aVAN9P?QOLVa|O;|3|IU+@kOQ8y`(2a$Wx zhxr0ZslfC`I|}~EC5-W07#8W<^^20fnyDn}5*Z=qs6pJx6;*{pja$cEkI2GZHtk*< z={kf#p+ZoPfdHa)SK%4u)aP%u4O*7>4ym%&3=zRss7cH+gaz|}-CqbAHuDY0>G>OsyG_dB;XbW8B+~=}fhF4gLOvC`EL!-%b@Gn9?V&m&g9c!O5cRs}kCnL5y4ldq6NZ_icVKbv;d)UC@QV*=OO>x20}Y?c$%H=o+KO zf7-DAuiA`3+^?gx&Zk>O-sH98oi|q2M}OyY4vmXT9L2>=TRMxD#*O(iiW=TwUHv95 za)$0LGt^dLWu?@H!~hL=_NI8~?^K-69A1?*_K(c?m~`f-N3W)D(wc5LL&%%}r>b=- z9|^pU;u4OS(@a){Z__3`!B| z7d`hBU{%j;t7)|y%a3UASeBS>o~^MSiao#y8P8^Y$xC~+@c`irdws};G;37ceL*|C zB@M|L-6R4C=@NJb=1G|GDn;0QlJjv8{Aw9kw>{JE4-Io9%Z#y1OF3i zF}+e)Fj(|@^!_s3=cirAq4`Hq2^ZKM(>~KIe_;`in{!6WGR?66@(YhpePjfx2*W9S zX307Q?QcG>)L!DXDG;COcmMK9_wA)k_U4lFeQVxyi62;O*NNEB(B6m`Csm=MLbKRn zGwj8na?sG~@|-va?`wbA^_b(Ym$jQk&f+V`cdxPo!Y)oajSz7una3UI?@=|pdRmIz zru9n*9)4{#xU#u+u%iW!u}^iw(WUot{D-tB%c9aGD_io&>~fvkmUth7$a2`nGmGSa*hm&Rr@ zp*_-%O$wp0=3D4;fGQ#feZ-s5PSz{9B|wtw3`etr;v2KhFtfz=^gzv|l|~ z1i1<`(3=YXFH1pPtrOxg(FFhQ4%qBFa=CXTn!=OQ8Dj9`xMgX)Ok_rWL9K?`4kVC_ zeWPi11GQ3fFWxOTv{$e8YZO1Q_RX4>fX}4+JUiHJ|A{M-BQmwrQ-(A%MpKuB={^1> z&~SbPvo{LV2L7nFasAR8%GwvH6Yk=y9{GqvY`VnqCJ+#mRDPE)3RfIv7^czx(Z-14FW`y(6E>%j75W zI%icMA?Wky-c%#F4k6@NGD2=M>GmYY1Aj z9Xs^GlekFrHpKpzbbPTs?y!RhPi{%r?k^~b@vHhIWv5L;TQrOFhvo=IX^@%h;<6r4NZ!tA?0K!mr zIb3;O%SZ;S{|$DSESPsqs|BFDIjypqynSN!yX5KY%DJ)OcW+Hx#Ab{`* zT}nAC@%Un(RiLU(wPnZ_En`h@ODpqL3Allu(kLE*6G>TQ^0+g$L5E5kkUphsIJu+m zWUhnnq`a5s6X=m4b^#-57sU(#lNTW|@gOnMHK-GklSml|smc$DtvNkd;hkobUOs-8k>w?W-pyDbA+C`cKmPmVLB~>z zHi(>O^esGw$nb= zF!_C0Z;WWcCSR6?{&KNMrYo7F%B_CDuvX%*Eb_(ght%cfAS^+yPW&u~;;br6yyHb` z+E6)#T!T)p@$~4l&#Va&)h8P|4AxHO{hgPdJA76>z7+`dH$C5)jlq`OJUp4Z12RfY z)8{P{JCe85_MLV1J!Z2kdX`niI<>j50-l~Btjt%OeIs_|hBtErpE%%7Bse%9&yDx( z5!qbreN3Y04)XQU6TRF%UmGZNk<%QK4w-ySpnx)M6u2y-OLSzaqDBi+ZvlcrjLDea zxcugPdedf_|9hqU{GaWq(VZ7IAsQc=0zbYAwnGnwnJ$F`P&O1G?UfXF&xc}WitvPk zYHfNq92%CZmfUg(!M3E`$Q>!{GV95)wS}+Ss@ihg&o&O-w-6@Y{1EX+G}n7RO+#0W zzU)?75O&eD6`1)5?@_36Oby<#Wu#|IjZ6qrXxVl-jeCUQf+X2n3lEHJAfZcR6U{0H-crj9ixVa+)<;$}^sq7~f>eOQq++3s)EGJ)6@b z2#B5cd=I2eiVe zOg75IPH+plusy#^_Ln?ZL4G)d(r3MpxA(RGx~GSEO|A&DNc!U1oJ}>d12FP&z_kmZjhc5~ovdM0BaXi7PLsgo}J$T_fd}H)d{d?}4I8A`y#Z z847bWFSWD=(C72X%XfqO`L|`F*;l6{$|>n^8lK=JbfFd zV{}i|68@oI7tL=Qz8_S>YktuaTE%^KICs+O)9cd?gqDc8Gi30Bg3ERJ>oTB4DDgmT zfFM&^{zH$arnI>SzopL2sw=bF_~N}e2b&$8?WoHkTPW!K<6m*fgUp+=Y#h?^?HQut zfkvheoUDhGO2RHXcVA@h6Y5x#VfC*kz_`ZI;byjikzOUpb zg|7LJsPZJ)tPdAL>J=7YCq-eS3lsHj2vc_`biXtVDaD>9 zVUOz<$2IC>;MdwbXXGDwW^djqsQIX^ni1i#k`?RZ8e(!hOozhLh2ZvDQvgddZS zh@O~-RaM9n4)m$c6GXNwKZn^yGGP-<*(O7Ue8M;J60&r+a;p3&oi zwH@^(LWJ+UWIp&EC}2EfjTzE*bk$5C9ulI}PCCo=;Jca76y|72vR16?EM%@e9FMlX zpsjB`ygT<@Sha1ra0Q_0fhpGsxNECn$d^#+iV6wL`img864HBbPqZJI5ty*-5r$6D>kW6)~;m-I4(g9L*-9aUMb@eNNK z4?HIWU$CHNsSkxpDy47nEkyu$z=6EHB}+OmriU~#F`ShTI9nEQ+vsZotfbwJ0 zpQPHGn2xG{ugZ-6+aOQ5*;XRe{7hlW9t3lSXnLSj1||25rv4&u(qYDba-GA7ss)5B zAXCc526Vp8PCn(wUUALu&M^&J4zr_Zr9HFLa=kl{N2&Y2lJmrsymjTDA1(PV@s+B4H3;TtdNGfS6Mmw+u- z=j_k2(fE@3twd|QEPgltGB%oKe^x}xD3cd#`wmN|Wy0N$KNsKj+F`^YT`-IEiatTdnVGb)uZAJ=LN?V_J z*{wRlPQHfIcQ8e0<`GI5PdpQFuZP6*ROskE0PW$K6LH$QTqvrmdpCbe>HUN8`ksll zkhM~QcMR4I5UqIr2w6_M;SG<;FQ9>)DD}h$px~;Cz|>vxX7ArE)e@r+mi%tT@?F^~Go&{2k z*lyk?=5k(zAw#;`p6-;l)~w^rYb#!Dnx3!5w6rWC4yMP0fiz*$QPY+>g0NV@(f9p= z%#4v5tUbn_N7LT>u*MIDU)~ul$=K$h$O^0 znDDyTFLH6rpPj_!i3pdl?bb)HU#`K0;!Kx_d7_6HLDK5&h52s(_?%Q?c;oW@RY zcj_2T6;|jSMJP>;Jz`pW^El`1HSV*@D)?*653y zdiVbSGer1vRt#E1;Fp!k7=MRUsWielLF%^()9s{sn~T+gc-xlMB1_h`hTHGj*zO{^h9G89kV&ftMCE{L z^UJvO(mv!ccSlvZYq5a@ zp5E;`=q)#T>9abT-0c39VS}KNBju>Db7Uo#q%pCVSbplzLNiOGW!Of zldu%dn&yeUtY1R*BjT6FHSN~L(Q+v$bmdkgvn_Y%#YJtNUA5~qm$3g_BZPX$I0EO2 zztg0v<#Coaw4?24#}iOVoUn`CSvYPe?P(p0TAD=k_iI=V1VYRSA;eQM1TQwm6`dK& zd^q{as-CFMX53%zPWFhEr4xO|NBfPI>~>hwDYO~~(*KDvR+23nNf4qlf5iX2F8ySa z5_fkfA*)}we5a#Vp9J9W1I2})94D~EZ)cB2&(KhLwD#j+O#oS)bQU)6Qq>$$9HO}C z+lf#|B!Dn1w^C-eX{eLK-U7RG(`=q* zSr*oecltvpO)QE-gsX>mJSxZSRew)WT4MkyHrK)QQRgd$wTkEPN=(uYecA2c?cWnS zgSRKxJyCb^zjz(sv(rer?i$vT``i_G@C7$aGmltR+ z?gG{y(gf%w>y9&pW(>ujlR1QZq`x^7&y3F}CUSh|GE#z^p^Q8?a(whS%vY%R1Ww{O z-W@68UJhWrcp65dqgG4rh<*itlrse>bM#YnzG425&||SL@ZZFO4do!vDEU#Dk}W9o z;fvp#Jzd@~ajh3V(4obaqB|=mGVq(J&qSs3I&))4k*_;BChnmVtouT*cQ1DoDQX{^an;JV|7W_8M$ zpbEL0lk@*#$NfL@(f>)5Oa6DCd@KL(lLq|PQ?z08#B^l61~`f+3XR=>xa? zE{kgYB``6MCdR3g*J|5`PmMWkpWajT<07qhY-gqt5vCn5=JeB=?yzfmTUxWkrtWn* zNefiW{V1C+Z$a2K$q2uJu9oG9!OyvA`t2tz0jIEDM8dyiZ((=8)zQi2kXKCP5!DJ+ zRm5_Z&sPlyAPE2bBaQr6z>s)n_ZGq&QHUZd1(b$FnvC5#baHZC?2xY74+RaqH*yHdxY0 zF;MF&1cjv{1ykSB6%373Rxw>W+UL*7b85$w07$P*vp(B zz59s^R>|yWkaCBQDk0dGS(%*1rzi$SSHTy?Cs6IsDyT!o!Oof=Wd`DbC|CS!l)-iYH?%xoTe_LX~$O+7(r3NeGi!Xv-D9kw3Nqhg8Q3v#P_&`3; z6-5KUx3rniT!U}P9+8WDxusAXXJ;eQH=MYjXci!U`{rY;eucG+SG__&R(dBpDD#Di z=AfpSFDQPjWnF)y6_0A0{9bzQ^fJwIda=r?TtAN7$H^=A;PD$kO!JY&A`OgzB7?b2 zS7SkK5t8?IL%uq&eeiKW7Vf4~M;T`}NSiSu12RE_hfSbG+TMa6diw7aYxpOgoa--@ zemVc8y2HP@RfGOC2~2*yy0(4d^-!RV`}^AME@q=Xdyi)PO#+^9yM)@9vQ;B6hSP&( zH0hYV&jqpgdXfU?8&FHzR`p@n4JM>8PR~R|3ymQYk1DUE4@=n4h=^g`Ow7f1V9zM(&IRH!6?m_ArtNSLS<3wu|AoO3YKu>7gx)lrEsbA z@2ZWQ*FB_g5pV3r*P0b4X%pFuH4_s63}hn7%gFSX7akACKQj)?YCCF}x^7IOk(ijf zxt?E0)p(#|1Z&O9TT?P4vaU(xw|joqf6{%kITX6Q%csKCFsG?iN@4?^{z9uRczY%h zHCwkor9C~Gb~ZBR5EtKT;+42v;vuXWAHOHzISrUNbba&jrniM<;Li;Q(m5k^sh7%2 zzj!t|B{S~n=$*2n(9L04eKeL%7bXF^DA^01(Lg&NF``bIPX(&nDf&D~#D@FQD~`>E`v*#jTY+6kpKBT%R|AOMBKS>#c6gBv#MXawUU%Atc_8EF=Fz;*8w#o zyD+KZyjvKB&5-s2!Tl0cnO^xio5%<$&13UC2gPjd_fx53ZB(i3`^YoC6PDd%zIEWo zH(jJ^82O`tpDvi@P`k-y>*&}f_II!Zm>g&KfQ6F+6A4VuP2L==YyE;ShO(sSAhJ1Q zuAq)H*-l>K!3$VD%9mctT>8HYO^AB-7SOZ7wk zkSHiV2Zs1C$}%y+o{78d z!|dPDO2BcwQn>$!M^me;VCW|51d%ZSduYa3y>?ZsAFPn>_tGc2OYKv}26}TE*OCA$ zhE{2=NKHZz*1-L{iqykTT6W)i;I=&tEi9~mFQxjf9k<4h4(~XAupa}ql?=WD75=gy zgw*TO!qoKyId7!(lM$(F689<_bdCttZhQ9Z+p@+nc%saX_G9Y_yvF1JnH0nG&W9b3!Yd5CcD6s*t9APnlYziAEEu*xx{iQ=shw5~LS%Af*p#jt@Q57xtc%r_GSiiPQcR5GYGx^70 zrVX+ht84%9Jmr7hKmigH`)}PLP5Nie@zg(`R^6KROWLl!s~1u1n`%J1@UKs<*vdM{ z6HC`_13_q*lK_M{Il1Xo@Wrz`JjRV5+_I&1MoXMKP-krhgRm^E8;`_GnSf=Zw!BZs z9;NT3X}x|m5W?EzZwAP$rMIhAc>lYLdza2F8rAqxz6rQ8AJC~pA|y|a9h#?~6jNGG z{0ulA##pcjg(aHj>sKrL4P%0OwME<@1dqm5n;~2VqPUnM@WqSGVUwb5_f?F3M5FRY zr)=MxaWByIjR9xyX(DZ3#n&ObR-1n$EE z$@kAG>;#%o#P6D3EVg)P+hNmkq#tHkJsl!lCj(8y>WhH86FJ^lBjF`S{!wBzAEx#9 z>!+F(K{ZQPu36NG-qb~{a$O4qAnTU*B0s@f-{})wQ`20rbaQGc+o!d%iZctop6x={ zK04~3I-l%czH8>+vpI<_dlZGI_d#U}w4!e33y81f%;ugT?!1$5i}&kPIcf);K03?M z$kVkY#d8B2PZE3|8oYRz_^x^=;oh~5?T5Z96FCTi!iuOt{YYRckIjvo7TedR_nDeA zW!VzJ>SW}C&H`e_JTz~PjjZ^#L((3Bo0=+28d9oE)RQXEt4Iuzs-SGd+jGU*G5t)Iz~_K9Tsu3C8zoU`F(Y74gKI6GxT} zdDvJP@h~9vxG2E$BsT$;?xxi(@CNa#fr*kS!CSHGJ-&1I!PBBrhSHKzv5jx8tN<0z zG?z4s!CTgg&+E1qLb5P_xiAlR5tI8Mf^WePL*!sOxrC@i{ysO(LP#R^fq^RN064L< zi8|=6kf!0!XqikQM!0}rsYp4>n^t{b#M(}k2nzk&W@Om(#&u5M&5f8*{o0Oa^clEI8ctPwfh;`m@iP6pv;VK%=AYX?^Z5FfXLa+}GDOi1O{`YXB!A?7SO4$I zKP2o|^cRWI${DubzD6N7e@JYfob_qem};-{3m~jC_lpeq(BkA6;5nH3nAgeam$aql zj)6QMYVh$N63+mnTt>z!pt%(7E(g}5BuU>=HXyAJ8(KPFQym3<6N}hQ{zD>%4Ikc1 zKq+L_N^(GHAY3$vNE?W6o9N(j%HV(sF`{`M_|4V9tNC)`rv4+KA=>XcA`(uM_(JIs zQ1Hug(IFGrX(#p%NsaWc)%=5&->qYZiPNl=jSbH5O>|@FfUb>I?)bi7?v(;r-h8>A zGf(v|qn3G0X&2gc6A>-LQm^gZ1e9tihvbwBP^5Ji|Fv&k+Gw0F(*$6L)`kWi-9GN; z=qABuucbG*&hvtkecxd7Q%lK5Ej&$LR^AT+<8{-6=dNr+ad>GpqyIY03T+9QZLK1f zXHSv_t?_&9C~vSK6ZGW(Wt2|Q^0Xo4P$c3M)pPtYB9{o6{`(6zk?3JdW?gc|F6Q;2 zt_XQKd}W-kE;4tZ$34-$<~Rt!LRj>1XKd?&Pn#<8M?fUQS=db6_uWkg-4?exbr-0 zb5&-1Kr=_kd}HGykaPkneC=PDkNQAM$6#g688K_gxUkltMBR zk~0gK|HCIm)A3(r(4cEYqSh@H(UIUc$ptN(F0EeTF2>g<1ILl)WQ8R1V{2o3)nch7 zb@(TJP4oLd_=j@|`yZWWG|YF{bfJ~HDn&rv^zRfY?uxYEWVw<$Em#gNV9~Ag8*7R> zBbHydTQ{2yb`oCF?@@nn{bVbbYb0M19`5H@ym@fmU6bM`A)8a*bnW0?S601i76RVutJmYs>a5f@Ag{c#P(PG`O*57&76Ybc`)+=_$rZ^uYJyKU=K(+C91}ISYSjL38(rB=xfg~X8A&E z{u$+)YV@%KsHP)kWR>Zk5Ny`f!%EtcliaQ5CV|Y9Dc_31mWY1zP0PKR+rrlyyfHf> zzRn{>y3YA>j4-xWvt!KVrQ`5zv_9q_eN$Jdbe;RTPMWQdxD!_YLE!t0Ad%>66>Ds& zDsnY=V=mg4)DCZ3lPeTRd|2MiQ{2gyKjL}cp$H<6Q`DW8QpZb=)vnk-{YNuJsJcV5`w|_d#C(?aRO~_N}eI5*&Na%-2ThIN1o>Z7mefEmhe+`J>y@ z`weV<(=7J~5M!d{&X{tR>Di*ZA+Vl)q~x>tWVB!uHM7^xznXPhad}={yJ>V>#5)dS zmpPjFijeSp3t67u91fI2DZLyuw87FIiY?{NG@B`?Ea@5jeLe>*^^|zt;__ z2QRwyVSKrBS~#!q0>EOk1S1uyx0IoGwqJNbI=j0sY(U2a-L_K8M3PVxxU{HZ>AiBp zTJDZH{#)rO*OLnRBE!-LW__ujEPazrTgN?5$s#wO^|!`>eGqBU<%(URWJmPi>}$mV z`3exzQVItVGLY{D*yma@NFE?OLvqFa3tFUqsRdk?iCB+WiglJ%@twa@t8Ln3QeEvhm?d z_b5_2@``BG*C8YcZ^c119ELah?GW+A#qXvOvys_32SqN>`a# zpjkgKx$Z(fSfOT)hMLwtBUg~KQ24~cV5TI~4d1q>&jTr{+a2qkV2V@4f%J^Y`9w)= zT1e`AsMI)rfvnBVWe!G^KmU~Z%@J4Wl4rYf47}jcSW4o&6Wpo}j|O$)be%^D2Eolv z3bP!M)W$H~Wzv{XN8Xcr<7X*YiJIT|++>_?bYpW}1)5&R80u6-&36q*^6N^s6~#Q- z?U&~D`Mq2AH17c%D&jTm(xu<<)(Ziw1b<0Z34K7Bjj=pkKdecv8sz9VjS^WtFw`B~ z>_dy?U+&b-2Z>JQS%xvKV5>}Bdj`R-^sq(6c^~Cy$MpQz0x=_xvAcRWK-9wl7S+3gxG% z9>0BK<3UbyS!}6}i>AncZZaaOtAdKw1Zc%KN-t@sxH#TE4a!~2Z&Y*5q6s(BeFc!5 z4?yewN>U7BEWg6YxVa%P5IlILi{r%!(FJ_fu}xqp)TCPi-4HI5F50}G0U>JL_dc1Z z98em1criU%Hn)mh-y(SA^Xr@knPyYD#lFOGfVqVcMDC0C;9&BV4U5d@2345w`;)A6 zt~a@=Jeu>AL0djh>MzWU?pz_DxJ1O&Dxe0-6)JKuqKIx)4^PWa9MkUGD*hrIm*F(~ zi`PeN*R$x=8+4JlA0XKIkD1)%-3?Huv61C{ak270?_@SHG>!e z5}ONeY5*b#u0)}R8<~m7I*yOy_qV`-D7_5Q0NPoI zjBsN!c$#_WbwKB%wDxcA1nC(xWb{-Rc$GP zo1tnlIVZCmJXjCNrqX0DR%K^B`J;G#4S)G*-pw$xsMo<;>C5IFw)b@!oa(-A7N2rg zID8)__uaXONKrW0J)mLyJi}eID4@gGI8{Hn-m(D8Wck$cK9Abt`gr&g98HFSxtN`?=T!K702cvGT`=>(-$`{ho8Ikaf6uqCN_WP zBKX3U&D5s7yxMV#W3hJ9`Z;gtAPe)<^kbO=jUu^W@9yZBGvuzT#Eb8u)MWHpTGG=a zZuAEZ?sT^qrLSd``DjAGh4n4``|zf<$FCtya*ULG4@7cP-m!9hob&3`^jips>K&*- zX0nCXHQsiQiiHHr@$&pKH>CVSf-_jI;1BS&?7)qf)uLw$wYBnTjozj1LX698p;Q52 zpBt^bK_sNSRYU$`%(cTOQPXd1Q*rEGObcHPKcw^_V>dEzBK_fr>imf*E^6TWcnJns zk)>xNFKO182V|+Rda2*>Yeu{vS{{A|ijF#!r8R>!U(J!7Ovv5KlNE~ZRsJt9`p%F~ z)EZ0_7beqDt0ryzvKW00CaR5haNoqfl$iww?v;SZV}x}6)n1^OuGUc!3kh=%|t(e7vLukxcWNW1r7w zCZFVLP3=DQn{#f=!hU#m_dTKws|$D{C`k6DFLFWbY^JgEF@e$3*=Cwn65Mym0?)DH2)0C12cuSy-qZ+oSC{f1FWVi(A!#X_-&*h8`$Lgz&u?SKJ@sq z<~-AFhimcfRTfy~>^W*VlYFw`qeydfbZhRu59SOYdafjX-FIUU*JV510%OJm0Q&X% z;`pZkWm%rA8MkOH^}G3anQwA3w#ab88K|nlnEIU1d>l2QSXs%*VL?{j=3CHj(kzc@ z9GUxWOl^nUcny?{ygce9@)s?S7@aFLBmSyh)`|j*tp;^B!)6 zBLTnxd6Sj6E;9m<*+q&)v#v_>0+6MVFB@7K_uj3sy}d+X=`%c_5)&8r%F)%QliEdi$ZL<3 zGe~I+@R#BjQ4L1PJPbG;PGwH{_>Fr`W${MHM*ep4!5DBs9<^Q96 z@xo!OFUs|H4HsB%hBhx?TjJ^LKcG5kR?`y=C`OBv0Ght7?{jq)3?^4K#G1Bf4Td2@5sLz> zX5gH!?-w_M`V%_v`zOQmMm$gQduRLl*%>64t!c*VV. - -/** - * Moodle's Clean theme, an example of how to make a Bootstrap theme - * - * DO NOT MODIFY THIS THEME! - * COPY IT FIRST, THEN RENAME THE COPY AND MODIFY IT INSTEAD. - * - * For full information about creating Moodle themes, see: - * http://docs.moodle.org/dev/Themes_2.0 - * - * @package theme_clean - * @copyright 2013 Moodle, moodle.org - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - */ - -defined('MOODLE_INTERNAL') || die; - -if ($ADMIN->fulltree) { - - // Invert Navbar to dark background. - $name = 'theme_clean/invert'; - $title = get_string('invert', 'theme_clean'); - $description = get_string('invertdesc', 'theme_clean'); - $setting = new admin_setting_configcheckbox($name, $title, $description, 0); - $setting->set_updatedcallback('theme_reset_all_caches'); - $settings->add($setting); - - // Logo file setting. - $name = 'theme_clean/logo'; - $title = get_string('logo','theme_clean'); - $description = get_string('logodesc', 'theme_clean'); - $setting = new admin_setting_configstoredfile($name, $title, $description, 'logo'); - $setting->set_updatedcallback('theme_reset_all_caches'); - $settings->add($setting); - - // Small logo file setting. - $name = 'theme_clean/smalllogo'; - $title = get_string('smalllogo', 'theme_clean'); - $description = get_string('smalllogodesc', 'theme_clean'); - $setting = new admin_setting_configstoredfile($name, $title, $description, 'smalllogo'); - $setting->set_updatedcallback('theme_reset_all_caches'); - $settings->add($setting); - - // Show site name along with small logo. - $name = 'theme_clean/sitename'; - $title = get_string('sitename', 'theme_clean'); - $description = get_string('sitenamedesc', 'theme_clean'); - $setting = new admin_setting_configcheckbox($name, $title, $description, 1); - $setting->set_updatedcallback('theme_reset_all_caches'); - $settings->add($setting); - - // Custom CSS file. - $name = 'theme_clean/customcss'; - $title = get_string('customcss', 'theme_clean'); - $description = get_string('customcssdesc', 'theme_clean'); - $default = ''; - $setting = new admin_setting_configtextarea($name, $title, $description, $default); - $setting->set_updatedcallback('theme_reset_all_caches'); - $settings->add($setting); - - // Footnote setting. - $name = 'theme_clean/footnote'; - $title = get_string('footnote', 'theme_clean'); - $description = get_string('footnotedesc', 'theme_clean'); - $default = ''; - $setting = new admin_setting_confightmleditor($name, $title, $description, $default); - $setting->set_updatedcallback('theme_reset_all_caches'); - $settings->add($setting); -} diff --git a/theme/clean/style/custom.css b/theme/clean/style/custom.css deleted file mode 100644 index 22be8bd3351..00000000000 --- a/theme/clean/style/custom.css +++ /dev/null @@ -1,41 +0,0 @@ -/* Custom CSS --------------------------*/ -div.logo { - background: url([[setting:logo]]) 0 0 no-repeat; - background-size: contain; - display: block; - float: left; - height: 75px; - margin: 0; - padding: 0; - width: 100%; -} - -img.small-logo { - float: left; - height: 35px; - margin: 3px 10px 3px 0; -} - -@media (max-width: 767px) { - img.small-logo { - margin: 3px; - } -} - -@media (max-width: 480px) { - .navbar img.small-logo { - max-width: 150px; - } - /* Applying accesshide styles */ - .navbar .small-logo-container + .brand { - position: absolute; - left: -10000px; - font-size: 1em; - font-weight: normal; - } -} - -/* Custom CSS Settings --------------------------*/ -[[setting:customcss]] diff --git a/theme/clean/version.php b/theme/clean/version.php deleted file mode 100644 index 8fae3878895..00000000000 --- a/theme/clean/version.php +++ /dev/null @@ -1,38 +0,0 @@ -. - -/** - * Moodle's Clean theme, an example of how to make a Bootstrap theme - * - * DO NOT MODIFY THIS THEME! - * COPY IT FIRST, THEN RENAME THE COPY AND MODIFY IT INSTEAD. - * - * For full information about creating Moodle themes, see: - * http://docs.moodle.org/dev/Themes_2.0 - * - * @package theme_clean - * @copyright 2013 Moodle, moodle.org - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - */ - -defined('MOODLE_INTERNAL') || die; - -$plugin->version = 2018120300; -$plugin->requires = 2018112800; -$plugin->component = 'theme_clean'; -$plugin->dependencies = array( - 'theme_bootstrapbase' => 2018112800, -);