From f77da9ab1157f98543be0e56b949491f4df9bfc0 Mon Sep 17 00:00:00 2001 From: Parveen Date: Mon, 27 Mar 2023 16:06:55 +0530 Subject: [PATCH] initial commit --- CODE_OF_CONDUCT.md | 46 + LICENSE | 339 + README.md | 1 + assets/css/admin-icon.css | 9 + .../css/admin-partials/_add-edit-sermon.scss | 11 + assets/css/admin-partials/_all-sermons.scss | 17 + assets/css/admin-partials/_import-export.scss | 115 + assets/css/admin-partials/_settings.scss | 108 + assets/css/admin.min.css | 2 + assets/css/admin.min.css.map | 7 + assets/css/admin.scss | 19 + assets/css/partials/_archive.scss | 150 + assets/css/partials/_player.scss | 8 + assets/css/partials/_shortcodes.scss | 90 + assets/css/partials/_single.scss | 160 + assets/css/partials/_sorting.scss | 52 + assets/css/sermon.min.css | 1 + assets/css/sermon.min.css.map | 1 + assets/css/sermon.scss | 10 + assets/css/theme-specific/Avada.css | 11 + assets/css/theme-specific/Divi.css | 3 + assets/css/theme-specific/astra.css | 13 + assets/css/theme-specific/betheme.css | 3 + assets/css/theme-specific/dunamis.css | 3 + assets/css/theme-specific/genesis.css | 11 + assets/css/theme-specific/oceanwp.css | 11 + assets/css/theme-specific/salient.css | 12 + assets/css/theme-specific/twentrythirteen.css | 13 + assets/css/theme-specific/twentyfifteen.css | 16 + assets/css/theme-specific/twentyfourteen.css | 23 + assets/css/theme-specific/twentynineteen.css | 3 + assets/css/theme-specific/twentyseventeen.css | 7 + assets/css/theme-specific/wpfc-eternity.css | 7 + assets/css/theme-specific/wpfc-freedom.css | 7 + assets/css/theme-specific/wpfc-morgan.css | 3 + assets/css/theme-specific/wpfc-multiply.css | 7 + assets/css/theme-specific/wpfc-newhope.css | 7 + assets/fonts/Sermon-Manager.eot | Bin 0 -> 1320 bytes assets/fonts/Sermon-Manager.svg | 14 + assets/fonts/Sermon-Manager.ttf | Bin 0 -> 1156 bytes assets/fonts/Sermon-Manager.woff | Bin 0 -> 1232 bytes assets/images/export-sm.jpg | Bin 0 -> 46511 bytes assets/images/import-sb.jpg | Bin 0 -> 26634 bytes assets/images/import-se.jpg | Bin 0 -> 13762 bytes assets/images/import-sm.jpg | Bin 0 -> 50121 bytes assets/js/admin/import-export.js | 16 + assets/js/admin/import-export.min.js | 1 + assets/js/admin/settings.js | 72 + assets/js/admin/settings.min.js | 1 + assets/js/admin/settings/conditionals.js | 260 + assets/js/admin/settings/conditionals.min.js | 1 + assets/js/admin/settings/podcast.js | 29 + assets/js/admin/settings/podcast.min.js | 1 + assets/js/admin/settings/verse.js | 42 + assets/js/admin/settings/verse.min.js | 1 + assets/js/plyr.js | 29 + assets/js/plyr.min.js | 1 + assets/vendor/css/plyr.min.css | 1 + assets/vendor/js/facebook-video.js | 14 + assets/vendor/js/plyr.polyfilled.js | 15650 ++++++++++++++++ assets/vendor/js/plyr.polyfilled.js.map | 1 + assets/vendor/js/plyr.polyfilled.min.js | 4 + assets/vendor/js/plyr.polyfilled.min.js.map | 1 + assets/vendor/js/verse.js | 11 + bin/install-wp-tests.sh | 152 + changelog.txt | 809 + composer.json | 12 + composer.lock | 1703 ++ includes/admin/class-sm-admin-assets.php | 54 + .../admin/class-sm-admin-import-export.php | 25 + includes/admin/class-sm-admin-menus.php | 90 + includes/admin/class-sm-admin-post-types.php | 335 + includes/admin/class-sm-admin-settings.php | 886 + includes/admin/class-sm-admin.php | 58 + includes/admin/export/class-sm-export-sm.php | 556 + includes/admin/import/class-sm-import-sb.php | 572 + includes/admin/import/class-sm-import-se.php | 465 + includes/admin/import/class-sm-import-sm.php | 1303 ++ .../settings/class-sm-settings-debug.php | 189 + .../settings/class-sm-settings-display.php | 160 + .../settings/class-sm-settings-general.php | 127 + .../admin/settings/class-sm-settings-page.php | 135 + .../settings/class-sm-settings-podcast.php | 263 + .../settings/class-sm-settings-verse.php | 149 + includes/admin/sm-admin-functions.php | 181 + includes/admin/sm-cmb-functions.php | 218 + .../admin/views/html-admin-import-export.php | 199 + includes/admin/views/html-admin-settings.php | 128 + includes/class-sm-api.php | 167 + includes/class-sm-autoloader.php | 103 + includes/class-sm-background-updater.php | 99 + includes/class-sm-dates-wp.php | 378 + includes/class-sm-dates.php | 141 + includes/class-sm-install.php | 286 + includes/class-sm-post-types.php | 376 + includes/class-sm-roles.php | 56 + includes/class-sm-shortcodes.php | 1261 ++ includes/class-sm-widget-recent-sermons.php | 230 + includes/sm-core-functions.php | 926 + includes/sm-deprecated-functions.php | 502 + includes/sm-formatting-functions.php | 47 + includes/sm-podcast-functions.php | 49 + includes/sm-template-functions.php | 820 + includes/sm-update-functions.php | 475 + includes/vendor/CMB2/bootstrap.php | 79 + includes/vendor/CMB2/css/cmb2-display-rtl.css | 41 + .../vendor/CMB2/css/cmb2-display-rtl.min.css | 1 + includes/vendor/CMB2/css/cmb2-display.css | 41 + includes/vendor/CMB2/css/cmb2-display.css.map | 10 + includes/vendor/CMB2/css/cmb2-display.min.css | 1 + includes/vendor/CMB2/css/cmb2-front-rtl.css | 1536 ++ .../vendor/CMB2/css/cmb2-front-rtl.min.css | 1 + includes/vendor/CMB2/css/cmb2-front.css | 1536 ++ includes/vendor/CMB2/css/cmb2-front.css.map | 19 + includes/vendor/CMB2/css/cmb2-front.min.css | 1 + includes/vendor/CMB2/css/cmb2-rtl.css | 1830 ++ includes/vendor/CMB2/css/cmb2-rtl.min.css | 1 + includes/vendor/CMB2/css/cmb2.css | 1830 ++ includes/vendor/CMB2/css/cmb2.css.map | 17 + includes/vendor/CMB2/css/cmb2.min.css | 1 + includes/vendor/CMB2/css/index.php | 2 + .../vendor/CMB2/css/sass/cmb2-display.scss | 4 + includes/vendor/CMB2/css/sass/cmb2-front.scss | 5 + includes/vendor/CMB2/css/sass/cmb2.scss | 11 + includes/vendor/CMB2/css/sass/index.php | 2 + .../css/sass/partials/_collapsible_ui.scss | 55 + .../CMB2/css/sass/partials/_display.scss | 34 + .../vendor/CMB2/css/sass/partials/_front.scss | 38 + .../CMB2/css/sass/partials/_jquery_ui.scss | 467 + .../CMB2/css/sass/partials/_main_wrap.scss | 438 + .../vendor/CMB2/css/sass/partials/_misc.scss | 30 + .../CMB2/css/sass/partials/_mixins.scss | 40 + .../css/sass/partials/_post_metaboxes.scss | 116 + .../sass/partials/_sidebar_placements.scss | 164 + .../CMB2/css/sass/partials/_variables.scss | 22 + .../vendor/CMB2/css/sass/partials/index.php | 2 + includes/vendor/CMB2/images/ico-delete.png | Bin 0 -> 715 bytes includes/vendor/CMB2/images/index.php | 2 + .../images/ui-bg_flat_0_aaaaaa_40x100.png | Bin 0 -> 180 bytes .../images/ui-bg_flat_75_ffffff_40x100.png | Bin 0 -> 178 bytes .../images/ui-bg_glass_55_fbf9ee_1x400.png | Bin 0 -> 120 bytes .../images/ui-bg_glass_65_ffffff_1x400.png | Bin 0 -> 105 bytes .../images/ui-bg_glass_75_dadada_1x400.png | Bin 0 -> 111 bytes .../images/ui-bg_glass_75_e6e6e6_1x400.png | Bin 0 -> 110 bytes .../images/ui-bg_glass_95_fef1ec_1x400.png | Bin 0 -> 119 bytes .../ui-bg_highlight-soft_75_cccccc_1x100.png | Bin 0 -> 101 bytes .../CMB2/images/ui-icons_222222_256x240.png | Bin 0 -> 4369 bytes .../CMB2/images/ui-icons_2e83ff_256x240.png | Bin 0 -> 4369 bytes .../CMB2/images/ui-icons_454545_256x240.png | Bin 0 -> 4369 bytes .../CMB2/images/ui-icons_888888_256x240.png | Bin 0 -> 5355 bytes .../CMB2/images/ui-icons_cd0a0a_256x240.png | Bin 0 -> 4369 bytes includes/vendor/CMB2/includes/CMB2.php | 1441 ++ includes/vendor/CMB2/includes/CMB2_Ajax.php | 329 + includes/vendor/CMB2/includes/CMB2_Base.php | 538 + includes/vendor/CMB2/includes/CMB2_Boxes.php | 99 + includes/vendor/CMB2/includes/CMB2_Field.php | 1358 ++ .../CMB2/includes/CMB2_Field_Display.php | 479 + .../vendor/CMB2/includes/CMB2_Hookup_Base.php | 75 + includes/vendor/CMB2/includes/CMB2_JS.php | 181 + .../vendor/CMB2/includes/CMB2_Options.php | 225 + .../vendor/CMB2/includes/CMB2_Sanitize.php | 560 + .../CMB2/includes/CMB2_Show_Filters.php | 187 + includes/vendor/CMB2/includes/CMB2_Types.php | 686 + includes/vendor/CMB2/includes/CMB2_Utils.php | 538 + includes/vendor/CMB2/includes/CMB2_hookup.php | 720 + .../vendor/CMB2/includes/helper-functions.php | 437 + includes/vendor/CMB2/includes/index.php | 2 + .../CMB2/includes/rest-api/CMB2_REST.php | 773 + .../rest-api/CMB2_REST_Controller.php | 440 + .../rest-api/CMB2_REST_Controller_Boxes.php | 276 + .../rest-api/CMB2_REST_Controller_Fields.php | 508 + .../CMB2/includes/shim/WP_REST_Controller.php | 536 + .../CMB2/includes/types/CMB2_Type_Base.php | 163 + .../includes/types/CMB2_Type_Checkbox.php | 67 + .../includes/types/CMB2_Type_Colorpicker.php | 60 + .../CMB2/includes/types/CMB2_Type_File.php | 101 + .../includes/types/CMB2_Type_File_Base.php | 97 + .../includes/types/CMB2_Type_File_List.php | 85 + .../includes/types/CMB2_Type_Multi_Base.php | 123 + .../includes/types/CMB2_Type_Multicheck.php | 41 + .../CMB2/includes/types/CMB2_Type_Oembed.php | 41 + .../includes/types/CMB2_Type_Picker_Base.php | 60 + .../CMB2/includes/types/CMB2_Type_Radio.php | 54 + .../CMB2/includes/types/CMB2_Type_Select.php | 32 + .../types/CMB2_Type_Select_Timezone.php | 31 + .../types/CMB2_Type_Taxonomy_Base.php | 93 + .../types/CMB2_Type_Taxonomy_Multicheck.php | 57 + .../types/CMB2_Type_Taxonomy_Radio.php | 83 + .../types/CMB2_Type_Taxonomy_Select.php | 70 + .../CMB2/includes/types/CMB2_Type_Text.php | 67 + .../includes/types/CMB2_Type_Text_Date.php | 34 + .../CMB2_Type_Text_Datetime_Timestamp.php | 75 + ..._Type_Text_Datetime_Timestamp_Timezone.php | 63 + .../includes/types/CMB2_Type_Text_Time.php | 27 + .../includes/types/CMB2_Type_Textarea.php | 45 + .../types/CMB2_Type_Textarea_Code.php | 34 + .../CMB2/includes/types/CMB2_Type_Title.php | 49 + .../CMB2/includes/types/CMB2_Type_Wysiwyg.php | 101 + includes/vendor/CMB2/index.php | 2 + includes/vendor/CMB2/init.php | 192 + includes/vendor/CMB2/js/cmb2-wysiwyg.js | 331 + includes/vendor/CMB2/js/cmb2.js | 974 + includes/vendor/CMB2/js/cmb2.min.js | 1 + includes/vendor/CMB2/js/index.php | 2 + .../CMB2/js/jquery-ui-timepicker-addon.min.js | 5 + includes/vendor/CMB2/readme.txt | 861 + includes/vendor/entry-views.php | 150 + includes/vendor/taxonomy-images/blank.png | Bin 0 -> 86 bytes includes/vendor/taxonomy-images/controls.png | Bin 0 -> 1477 bytes includes/vendor/taxonomy-images/css/admin.css | 78 + .../vendor/taxonomy-images/css/controls.png | Bin 0 -> 1477 bytes includes/vendor/taxonomy-images/default.png | Bin 0 -> 835 bytes .../vendor/taxonomy-images/js/edit-tags.js | 32 + .../vendor/taxonomy-images/js/media-modal.js | 160 + .../taxonomy-images/js/media-upload-popup.js | 136 + .../languages/taxonomy-images.pot | 221 + .../vendor/taxonomy-images/public-filters.php | 573 + .../taxonomy-images/taxonomy-images.php | 1313 ++ includes/vendor/wp-async-request.php | 158 + includes/vendor/wp-background-process.php | 503 + .../sermon-manager-for-wordpress-de_DE.mo | Bin 0 -> 31893 bytes .../sermon-manager-for-wordpress-de_DE.po | 1925 ++ .../sermon-manager-for-wordpress-fr_FR.mo | Bin 0 -> 11708 bytes .../sermon-manager-for-wordpress-fr_FR.po | 1979 ++ .../sermon-manager-for-wordpress-nl_NL.mo | Bin 0 -> 30519 bytes .../sermon-manager-for-wordpress-nl_NL.po | 1903 ++ .../sermon-manager-for-wordpress-pl_PL.mo | Bin 0 -> 31207 bytes .../sermon-manager-for-wordpress-pl_PL.po | 1914 ++ languages/sermon-manager-for-wordpress.pot | 1835 ++ phpcs.xml.dist | 53 + phpunit.xml.dist | 15 + readme.txt | 299 + sermons.php | 963 + tests/bootstrap.php | 31 + tests/test-sample.php | 20 + views/archive-wpfc_sermon.php | 37 + views/partials/content-sermon-archive.php | 187 + views/partials/content-sermon-attachments.php | 84 + views/partials/content-sermon-filtering.php | 96 + views/partials/content-sermon-single.php | 172 + views/partials/content-sermon-wrapper-end.php | 324 + .../partials/content-sermon-wrapper-start.php | 794 + views/single-wpfc_sermon.php | 40 + views/taxonomy-wpfc_bible_book.php | 38 + views/taxonomy-wpfc_preacher.php | 38 + views/taxonomy-wpfc_sermon_series.php | 38 + views/taxonomy-wpfc_sermon_topics.php | 38 + views/taxonomy-wpfc_service_type.php | 38 + views/wpfc-podcast-feed.php | 388 + 249 files changed, 71600 insertions(+) create mode 100644 CODE_OF_CONDUCT.md create mode 100644 LICENSE create mode 100644 README.md create mode 100644 assets/css/admin-icon.css create mode 100644 assets/css/admin-partials/_add-edit-sermon.scss create mode 100644 assets/css/admin-partials/_all-sermons.scss create mode 100644 assets/css/admin-partials/_import-export.scss create mode 100644 assets/css/admin-partials/_settings.scss create mode 100644 assets/css/admin.min.css create mode 100644 assets/css/admin.min.css.map create mode 100644 assets/css/admin.scss create mode 100644 assets/css/partials/_archive.scss create mode 100644 assets/css/partials/_player.scss create mode 100644 assets/css/partials/_shortcodes.scss create mode 100644 assets/css/partials/_single.scss create mode 100644 assets/css/partials/_sorting.scss create mode 100644 assets/css/sermon.min.css create mode 100644 assets/css/sermon.min.css.map create mode 100644 assets/css/sermon.scss create mode 100644 assets/css/theme-specific/Avada.css create mode 100644 assets/css/theme-specific/Divi.css create mode 100644 assets/css/theme-specific/astra.css create mode 100644 assets/css/theme-specific/betheme.css create mode 100644 assets/css/theme-specific/dunamis.css create mode 100644 assets/css/theme-specific/genesis.css create mode 100644 assets/css/theme-specific/oceanwp.css create mode 100644 assets/css/theme-specific/salient.css create mode 100644 assets/css/theme-specific/twentrythirteen.css create mode 100644 assets/css/theme-specific/twentyfifteen.css create mode 100644 assets/css/theme-specific/twentyfourteen.css create mode 100644 assets/css/theme-specific/twentynineteen.css create mode 100644 assets/css/theme-specific/twentyseventeen.css create mode 100644 assets/css/theme-specific/wpfc-eternity.css create mode 100644 assets/css/theme-specific/wpfc-freedom.css create mode 100644 assets/css/theme-specific/wpfc-morgan.css create mode 100644 assets/css/theme-specific/wpfc-multiply.css create mode 100644 assets/css/theme-specific/wpfc-newhope.css create mode 100644 assets/fonts/Sermon-Manager.eot create mode 100644 assets/fonts/Sermon-Manager.svg create mode 100644 assets/fonts/Sermon-Manager.ttf create mode 100644 assets/fonts/Sermon-Manager.woff create mode 100644 assets/images/export-sm.jpg create mode 100644 assets/images/import-sb.jpg create mode 100644 assets/images/import-se.jpg create mode 100644 assets/images/import-sm.jpg create mode 100644 assets/js/admin/import-export.js create mode 100644 assets/js/admin/import-export.min.js create mode 100644 assets/js/admin/settings.js create mode 100644 assets/js/admin/settings.min.js create mode 100644 assets/js/admin/settings/conditionals.js create mode 100644 assets/js/admin/settings/conditionals.min.js create mode 100644 assets/js/admin/settings/podcast.js create mode 100644 assets/js/admin/settings/podcast.min.js create mode 100644 assets/js/admin/settings/verse.js create mode 100644 assets/js/admin/settings/verse.min.js create mode 100644 assets/js/plyr.js create mode 100644 assets/js/plyr.min.js create mode 100644 assets/vendor/css/plyr.min.css create mode 100644 assets/vendor/js/facebook-video.js create mode 100644 assets/vendor/js/plyr.polyfilled.js create mode 100644 assets/vendor/js/plyr.polyfilled.js.map create mode 100644 assets/vendor/js/plyr.polyfilled.min.js create mode 100644 assets/vendor/js/plyr.polyfilled.min.js.map create mode 100644 assets/vendor/js/verse.js create mode 100644 bin/install-wp-tests.sh create mode 100644 changelog.txt create mode 100644 composer.json create mode 100644 composer.lock create mode 100644 includes/admin/class-sm-admin-assets.php create mode 100644 includes/admin/class-sm-admin-import-export.php create mode 100644 includes/admin/class-sm-admin-menus.php create mode 100644 includes/admin/class-sm-admin-post-types.php create mode 100644 includes/admin/class-sm-admin-settings.php create mode 100644 includes/admin/class-sm-admin.php create mode 100644 includes/admin/export/class-sm-export-sm.php create mode 100644 includes/admin/import/class-sm-import-sb.php create mode 100644 includes/admin/import/class-sm-import-se.php create mode 100644 includes/admin/import/class-sm-import-sm.php create mode 100644 includes/admin/settings/class-sm-settings-debug.php create mode 100644 includes/admin/settings/class-sm-settings-display.php create mode 100644 includes/admin/settings/class-sm-settings-general.php create mode 100644 includes/admin/settings/class-sm-settings-page.php create mode 100644 includes/admin/settings/class-sm-settings-podcast.php create mode 100644 includes/admin/settings/class-sm-settings-verse.php create mode 100644 includes/admin/sm-admin-functions.php create mode 100644 includes/admin/sm-cmb-functions.php create mode 100644 includes/admin/views/html-admin-import-export.php create mode 100644 includes/admin/views/html-admin-settings.php create mode 100644 includes/class-sm-api.php create mode 100644 includes/class-sm-autoloader.php create mode 100644 includes/class-sm-background-updater.php create mode 100644 includes/class-sm-dates-wp.php create mode 100644 includes/class-sm-dates.php create mode 100644 includes/class-sm-install.php create mode 100644 includes/class-sm-post-types.php create mode 100644 includes/class-sm-roles.php create mode 100644 includes/class-sm-shortcodes.php create mode 100644 includes/class-sm-widget-recent-sermons.php create mode 100644 includes/sm-core-functions.php create mode 100644 includes/sm-deprecated-functions.php create mode 100644 includes/sm-formatting-functions.php create mode 100644 includes/sm-podcast-functions.php create mode 100644 includes/sm-template-functions.php create mode 100644 includes/sm-update-functions.php create mode 100644 includes/vendor/CMB2/bootstrap.php create mode 100644 includes/vendor/CMB2/css/cmb2-display-rtl.css create mode 100644 includes/vendor/CMB2/css/cmb2-display-rtl.min.css create mode 100644 includes/vendor/CMB2/css/cmb2-display.css create mode 100644 includes/vendor/CMB2/css/cmb2-display.css.map create mode 100644 includes/vendor/CMB2/css/cmb2-display.min.css create mode 100644 includes/vendor/CMB2/css/cmb2-front-rtl.css create mode 100644 includes/vendor/CMB2/css/cmb2-front-rtl.min.css create mode 100644 includes/vendor/CMB2/css/cmb2-front.css create mode 100644 includes/vendor/CMB2/css/cmb2-front.css.map create mode 100644 includes/vendor/CMB2/css/cmb2-front.min.css create mode 100644 includes/vendor/CMB2/css/cmb2-rtl.css create mode 100644 includes/vendor/CMB2/css/cmb2-rtl.min.css create mode 100644 includes/vendor/CMB2/css/cmb2.css create mode 100644 includes/vendor/CMB2/css/cmb2.css.map create mode 100644 includes/vendor/CMB2/css/cmb2.min.css create mode 100644 includes/vendor/CMB2/css/index.php create mode 100644 includes/vendor/CMB2/css/sass/cmb2-display.scss create mode 100644 includes/vendor/CMB2/css/sass/cmb2-front.scss create mode 100644 includes/vendor/CMB2/css/sass/cmb2.scss create mode 100644 includes/vendor/CMB2/css/sass/index.php create mode 100644 includes/vendor/CMB2/css/sass/partials/_collapsible_ui.scss create mode 100644 includes/vendor/CMB2/css/sass/partials/_display.scss create mode 100644 includes/vendor/CMB2/css/sass/partials/_front.scss create mode 100644 includes/vendor/CMB2/css/sass/partials/_jquery_ui.scss create mode 100644 includes/vendor/CMB2/css/sass/partials/_main_wrap.scss create mode 100644 includes/vendor/CMB2/css/sass/partials/_misc.scss create mode 100644 includes/vendor/CMB2/css/sass/partials/_mixins.scss create mode 100644 includes/vendor/CMB2/css/sass/partials/_post_metaboxes.scss create mode 100644 includes/vendor/CMB2/css/sass/partials/_sidebar_placements.scss create mode 100644 includes/vendor/CMB2/css/sass/partials/_variables.scss create mode 100644 includes/vendor/CMB2/css/sass/partials/index.php create mode 100644 includes/vendor/CMB2/images/ico-delete.png create mode 100644 includes/vendor/CMB2/images/index.php create mode 100644 includes/vendor/CMB2/images/ui-bg_flat_0_aaaaaa_40x100.png create mode 100644 includes/vendor/CMB2/images/ui-bg_flat_75_ffffff_40x100.png create mode 100644 includes/vendor/CMB2/images/ui-bg_glass_55_fbf9ee_1x400.png create mode 100644 includes/vendor/CMB2/images/ui-bg_glass_65_ffffff_1x400.png create mode 100644 includes/vendor/CMB2/images/ui-bg_glass_75_dadada_1x400.png create mode 100644 includes/vendor/CMB2/images/ui-bg_glass_75_e6e6e6_1x400.png create mode 100644 includes/vendor/CMB2/images/ui-bg_glass_95_fef1ec_1x400.png create mode 100644 includes/vendor/CMB2/images/ui-bg_highlight-soft_75_cccccc_1x100.png create mode 100644 includes/vendor/CMB2/images/ui-icons_222222_256x240.png create mode 100644 includes/vendor/CMB2/images/ui-icons_2e83ff_256x240.png create mode 100644 includes/vendor/CMB2/images/ui-icons_454545_256x240.png create mode 100644 includes/vendor/CMB2/images/ui-icons_888888_256x240.png create mode 100644 includes/vendor/CMB2/images/ui-icons_cd0a0a_256x240.png create mode 100644 includes/vendor/CMB2/includes/CMB2.php create mode 100644 includes/vendor/CMB2/includes/CMB2_Ajax.php create mode 100644 includes/vendor/CMB2/includes/CMB2_Base.php create mode 100644 includes/vendor/CMB2/includes/CMB2_Boxes.php create mode 100644 includes/vendor/CMB2/includes/CMB2_Field.php create mode 100644 includes/vendor/CMB2/includes/CMB2_Field_Display.php create mode 100644 includes/vendor/CMB2/includes/CMB2_Hookup_Base.php create mode 100644 includes/vendor/CMB2/includes/CMB2_JS.php create mode 100644 includes/vendor/CMB2/includes/CMB2_Options.php create mode 100644 includes/vendor/CMB2/includes/CMB2_Sanitize.php create mode 100644 includes/vendor/CMB2/includes/CMB2_Show_Filters.php create mode 100644 includes/vendor/CMB2/includes/CMB2_Types.php create mode 100644 includes/vendor/CMB2/includes/CMB2_Utils.php create mode 100644 includes/vendor/CMB2/includes/CMB2_hookup.php create mode 100644 includes/vendor/CMB2/includes/helper-functions.php create mode 100644 includes/vendor/CMB2/includes/index.php create mode 100644 includes/vendor/CMB2/includes/rest-api/CMB2_REST.php create mode 100644 includes/vendor/CMB2/includes/rest-api/CMB2_REST_Controller.php create mode 100644 includes/vendor/CMB2/includes/rest-api/CMB2_REST_Controller_Boxes.php create mode 100644 includes/vendor/CMB2/includes/rest-api/CMB2_REST_Controller_Fields.php create mode 100644 includes/vendor/CMB2/includes/shim/WP_REST_Controller.php create mode 100644 includes/vendor/CMB2/includes/types/CMB2_Type_Base.php create mode 100644 includes/vendor/CMB2/includes/types/CMB2_Type_Checkbox.php create mode 100644 includes/vendor/CMB2/includes/types/CMB2_Type_Colorpicker.php create mode 100644 includes/vendor/CMB2/includes/types/CMB2_Type_File.php create mode 100644 includes/vendor/CMB2/includes/types/CMB2_Type_File_Base.php create mode 100644 includes/vendor/CMB2/includes/types/CMB2_Type_File_List.php create mode 100644 includes/vendor/CMB2/includes/types/CMB2_Type_Multi_Base.php create mode 100644 includes/vendor/CMB2/includes/types/CMB2_Type_Multicheck.php create mode 100644 includes/vendor/CMB2/includes/types/CMB2_Type_Oembed.php create mode 100644 includes/vendor/CMB2/includes/types/CMB2_Type_Picker_Base.php create mode 100644 includes/vendor/CMB2/includes/types/CMB2_Type_Radio.php create mode 100644 includes/vendor/CMB2/includes/types/CMB2_Type_Select.php create mode 100644 includes/vendor/CMB2/includes/types/CMB2_Type_Select_Timezone.php create mode 100644 includes/vendor/CMB2/includes/types/CMB2_Type_Taxonomy_Base.php create mode 100644 includes/vendor/CMB2/includes/types/CMB2_Type_Taxonomy_Multicheck.php create mode 100644 includes/vendor/CMB2/includes/types/CMB2_Type_Taxonomy_Radio.php create mode 100644 includes/vendor/CMB2/includes/types/CMB2_Type_Taxonomy_Select.php create mode 100644 includes/vendor/CMB2/includes/types/CMB2_Type_Text.php create mode 100644 includes/vendor/CMB2/includes/types/CMB2_Type_Text_Date.php create mode 100644 includes/vendor/CMB2/includes/types/CMB2_Type_Text_Datetime_Timestamp.php create mode 100644 includes/vendor/CMB2/includes/types/CMB2_Type_Text_Datetime_Timestamp_Timezone.php create mode 100644 includes/vendor/CMB2/includes/types/CMB2_Type_Text_Time.php create mode 100644 includes/vendor/CMB2/includes/types/CMB2_Type_Textarea.php create mode 100644 includes/vendor/CMB2/includes/types/CMB2_Type_Textarea_Code.php create mode 100644 includes/vendor/CMB2/includes/types/CMB2_Type_Title.php create mode 100644 includes/vendor/CMB2/includes/types/CMB2_Type_Wysiwyg.php create mode 100644 includes/vendor/CMB2/index.php create mode 100644 includes/vendor/CMB2/init.php create mode 100644 includes/vendor/CMB2/js/cmb2-wysiwyg.js create mode 100644 includes/vendor/CMB2/js/cmb2.js create mode 100644 includes/vendor/CMB2/js/cmb2.min.js create mode 100644 includes/vendor/CMB2/js/index.php create mode 100644 includes/vendor/CMB2/js/jquery-ui-timepicker-addon.min.js create mode 100644 includes/vendor/CMB2/readme.txt create mode 100644 includes/vendor/entry-views.php create mode 100644 includes/vendor/taxonomy-images/blank.png create mode 100644 includes/vendor/taxonomy-images/controls.png create mode 100644 includes/vendor/taxonomy-images/css/admin.css create mode 100644 includes/vendor/taxonomy-images/css/controls.png create mode 100644 includes/vendor/taxonomy-images/default.png create mode 100644 includes/vendor/taxonomy-images/js/edit-tags.js create mode 100644 includes/vendor/taxonomy-images/js/media-modal.js create mode 100644 includes/vendor/taxonomy-images/js/media-upload-popup.js create mode 100644 includes/vendor/taxonomy-images/languages/taxonomy-images.pot create mode 100644 includes/vendor/taxonomy-images/public-filters.php create mode 100644 includes/vendor/taxonomy-images/taxonomy-images.php create mode 100644 includes/vendor/wp-async-request.php create mode 100644 includes/vendor/wp-background-process.php create mode 100644 languages/sermon-manager-for-wordpress-de_DE.mo create mode 100644 languages/sermon-manager-for-wordpress-de_DE.po create mode 100644 languages/sermon-manager-for-wordpress-fr_FR.mo create mode 100644 languages/sermon-manager-for-wordpress-fr_FR.po create mode 100644 languages/sermon-manager-for-wordpress-nl_NL.mo create mode 100644 languages/sermon-manager-for-wordpress-nl_NL.po create mode 100644 languages/sermon-manager-for-wordpress-pl_PL.mo create mode 100644 languages/sermon-manager-for-wordpress-pl_PL.po create mode 100644 languages/sermon-manager-for-wordpress.pot create mode 100644 phpcs.xml.dist create mode 100644 phpunit.xml.dist create mode 100644 readme.txt create mode 100644 sermons.php create mode 100644 tests/bootstrap.php create mode 100644 tests/test-sample.php create mode 100644 views/archive-wpfc_sermon.php create mode 100644 views/partials/content-sermon-archive.php create mode 100644 views/partials/content-sermon-attachments.php create mode 100644 views/partials/content-sermon-filtering.php create mode 100644 views/partials/content-sermon-single.php create mode 100644 views/partials/content-sermon-wrapper-end.php create mode 100644 views/partials/content-sermon-wrapper-start.php create mode 100644 views/single-wpfc_sermon.php create mode 100644 views/taxonomy-wpfc_bible_book.php create mode 100644 views/taxonomy-wpfc_preacher.php create mode 100644 views/taxonomy-wpfc_sermon_series.php create mode 100644 views/taxonomy-wpfc_sermon_topics.php create mode 100644 views/taxonomy-wpfc_service_type.php create mode 100644 views/wpfc-podcast-feed.php diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..71f32cf --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,46 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at hello@wpforchurch.com. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version] + +[homepage]: http://contributor-covenant.org +[version]: http://contributor-covenant.org/version/1/4/ diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..d159169 --- /dev/null +++ b/LICENSE @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. diff --git a/README.md b/README.md new file mode 100644 index 0000000..65ab8a5 --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +link readme.txt \ No newline at end of file diff --git a/assets/css/admin-icon.css b/assets/css/admin-icon.css new file mode 100644 index 0000000..0dda6df --- /dev/null +++ b/assets/css/admin-icon.css @@ -0,0 +1,9 @@ +.dashicons-sermon-manager:before { + font-family: "SermonManager", serif; + content: "\e900"; +} + +@font-face { + font-family: SermonManager; + src: url(../fonts/Sermon-Manager.ttf); +} \ No newline at end of file diff --git a/assets/css/admin-partials/_add-edit-sermon.scss b/assets/css/admin-partials/_add-edit-sermon.scss new file mode 100644 index 0000000..aceb4da --- /dev/null +++ b/assets/css/admin-partials/_add-edit-sermon.scss @@ -0,0 +1,11 @@ +#sermon_video_link { + width: 25em; +} + +#sermon_date { + width: 125px; + + &::placeholder{ + color: #ccc; + } +} \ No newline at end of file diff --git a/assets/css/admin-partials/_all-sermons.scss b/assets/css/admin-partials/_all-sermons.scss new file mode 100644 index 0000000..88ac674 --- /dev/null +++ b/assets/css/admin-partials/_all-sermons.scss @@ -0,0 +1,17 @@ +.fixed { + .column-title { + width: 40%; + } + + .column-preacher, .column-preached { + width: 10%; + } + + .column-series, .column-topics { + width: 15%; + } + + .column-views { + width: 7%; + } +} \ No newline at end of file diff --git a/assets/css/admin-partials/_import-export.scss b/assets/css/admin-partials/_import-export.scss new file mode 100644 index 0000000..975580c --- /dev/null +++ b/assets/css/admin-partials/_import-export.scss @@ -0,0 +1,115 @@ +.wp-list-table { + overflow: hidden; + height: 100%; +} + +.plugin-card { + position: relative; + + > h2 { + position: absolute; + left: 50%; + top: 50%; + transform: translate(-50%, -50%); + z-index: 1; + color: #4a4a4a !important; + margin: 0; + font-size: 1.7rem; + font-weight: 100; + letter-spacing: 2px; + font-family: 'Roboto', sans-serif; + text-transform: uppercase; + opacity: 0; + transition: opacity .2s; + cursor: default; + width: 100%; + text-align: center; + } + + &.not-available { + &:before { + content: ""; + background: repeating-linear-gradient(45deg, rgba(0, 0, 0, 0.05), rgba(0, 0, 0, 0.05) 10px, rgba(0, 0, 0, 0.1) 10px, rgba(0, 0, 0, 0.1) 20px); + width: 100%; + height: 100%; + position: absolute; + left: 0; + top: 0; + z-index: 1; + } + + &:hover { + > h2 { + opacity: 1; + } + + .plugin-card-top { + -webkit-filter: blur(1px); + filter: blur(1px); + } + } + + * { + color: #ccc; + } + + .plugin-icon { + filter: opacity(0.2); + } + } + + .plugin-card-top { + padding: 0; + + &:hover .import-note { + display: block; + } + + .import-note { + display: none; + color: rgba(0, 0, 0, 0.5); + } + + .name { + margin-top: 20px; + } + + .desc, .name { + margin-left: 185px; + } + + .action-links { + top: 0; + } + + .plugin-icon { + font-size: 5rem; + color: #656565; + left: 0; + top: 0; + height: 168px; + width: 168px; + margin: -20px 20px 0 0; + + &.dashicons { + margin-top: 1rem; + } + } + + .wp-upload-form { + display: none; + } + + .import-sniper { + line-height: 1; + vertical-align: middle; + width: 13px; + position: relative; + top: -1px; + display: none; + img { + max-width: 100%; + } + } + } +} \ No newline at end of file diff --git a/assets/css/admin-partials/_settings.scss b/assets/css/admin-partials/_settings.scss new file mode 100644 index 0000000..cef1e14 --- /dev/null +++ b/assets/css/admin-partials/_settings.scss @@ -0,0 +1,108 @@ +.wp-heading-inline { + margin-bottom: 5px; +} + +.settings-main { + display: flex; + margin-top: 5px; +} + +.settings-content { + width: 100%; + + //noinspection SpellCheckingInspection + #mainform { + border: 1px solid #e8e8e8; + } + + span.description { + display: block; + margin-top: 5px; + } + + input[type=text], input[type=email] { + width: 100%; + max-width: 400px; + } + + .sm-nav-tab-wrapper { + background: white; + padding: 0; + border-bottom: 1px solid #e8e8e8; + + .nav-tab { + float: none; + border: none; + margin: 0; + padding: 20px 20px; + display: inline-block; + background: none; + font-weight: normal; + color: #666; + font-size: 13px; + + &:hover, &:active, &:focus { + border-bottom: 2px solid #ccc; + outline: none; + box-shadow: none; + } + } + + .nav-tab-active, .nav-tab-active:focus, .nav-tab-active:focus:active, .nav-tab-active:hover { + border-bottom: 2px solid #4abcf0; + } + } + + .image-picker-form-container { + display: flex; + + > input { + flex: 1 1 100px; + min-width: 30px; + } + + > a { + flex: 0 0 auto; + } + } + + .inside { + padding: .2rem 1rem .01rem 1rem; + background: white; + } +} + +.settings-side { + width: 30%; + max-width: 300px; + margin-left: 1rem; + + .sm-box { + h3 { + margin-left: .8rem; + } + + .description { + text-align: center; + font-size: 0.85em; + padding: 0.4rem 0 0 + } + + ol { + list-style-type: circle; + } + } +} + +// Style separator title setting field. +.forminp-separator_title { + padding: 0; + border-bottom: 1px solid #e3e3e3; +} + +// Style main title to look like others. +.forminp-title { + padding-bottom: 1em; + margin-bottom: 0; + border-bottom: 1px solid #e3e3e3; +} diff --git a/assets/css/admin.min.css b/assets/css/admin.min.css new file mode 100644 index 0000000..ff51f18 --- /dev/null +++ b/assets/css/admin.min.css @@ -0,0 +1,2 @@ +body.edit-php.post-type-wpfc_sermon .fixed .column-title{width:40%}body.edit-php.post-type-wpfc_sermon .fixed .column-preacher,body.edit-php.post-type-wpfc_sermon .fixed .column-preached{width:10%}body.edit-php.post-type-wpfc_sermon .fixed .column-series,body.edit-php.post-type-wpfc_sermon .fixed .column-topics{width:15%}body.edit-php.post-type-wpfc_sermon .fixed .column-views{width:7%}body.wpfc_sermon_page_sm-settings .wp-heading-inline{margin-bottom:5px}body.wpfc_sermon_page_sm-settings .settings-main{display:flex;margin-top:5px}body.wpfc_sermon_page_sm-settings .settings-content{width:100%}body.wpfc_sermon_page_sm-settings .settings-content #mainform{border:1px solid #e8e8e8}body.wpfc_sermon_page_sm-settings .settings-content span.description{display:block;margin-top:5px}body.wpfc_sermon_page_sm-settings .settings-content input[type=text],body.wpfc_sermon_page_sm-settings .settings-content input[type=email]{width:100%;max-width:400px}body.wpfc_sermon_page_sm-settings .settings-content .sm-nav-tab-wrapper{background:white;padding:0;border-bottom:1px solid #e8e8e8}body.wpfc_sermon_page_sm-settings .settings-content .sm-nav-tab-wrapper .nav-tab{float:none;border:none;margin:0;padding:20px 20px;display:inline-block;background:none;font-weight:normal;color:#666;font-size:13px}body.wpfc_sermon_page_sm-settings .settings-content .sm-nav-tab-wrapper .nav-tab:hover,body.wpfc_sermon_page_sm-settings .settings-content .sm-nav-tab-wrapper .nav-tab:active,body.wpfc_sermon_page_sm-settings .settings-content .sm-nav-tab-wrapper .nav-tab:focus{border-bottom:2px solid #ccc;outline:none;box-shadow:none}body.wpfc_sermon_page_sm-settings .settings-content .sm-nav-tab-wrapper .nav-tab-active,body.wpfc_sermon_page_sm-settings .settings-content .sm-nav-tab-wrapper .nav-tab-active:focus,body.wpfc_sermon_page_sm-settings .settings-content .sm-nav-tab-wrapper .nav-tab-active:focus:active,body.wpfc_sermon_page_sm-settings .settings-content .sm-nav-tab-wrapper .nav-tab-active:hover{border-bottom:2px solid #4abcf0}body.wpfc_sermon_page_sm-settings .settings-content .image-picker-form-container{display:flex}body.wpfc_sermon_page_sm-settings .settings-content .image-picker-form-container>input{flex:1 1 100px;min-width:30px}body.wpfc_sermon_page_sm-settings .settings-content .image-picker-form-container>a{flex:0 0 auto}body.wpfc_sermon_page_sm-settings .settings-content .inside{padding:.2rem 1rem .01rem 1rem;background:white}body.wpfc_sermon_page_sm-settings .settings-side{width:30%;max-width:300px;margin-left:1rem}body.wpfc_sermon_page_sm-settings .settings-side .sm-box h3{margin-left:.8rem}body.wpfc_sermon_page_sm-settings .settings-side .sm-box .description{text-align:center;font-size:0.85em;padding:0.4rem 0 0}body.wpfc_sermon_page_sm-settings .settings-side .sm-box ol{list-style-type:circle}body.wpfc_sermon_page_sm-settings .forminp-separator_title{padding:0;border-bottom:1px solid #e3e3e3}body.wpfc_sermon_page_sm-settings .forminp-title{padding-bottom:1em;margin-bottom:0;border-bottom:1px solid #e3e3e3}body.wpfc_sermon_page_sm-import-export .wp-list-table{overflow:hidden;height:100%}body.wpfc_sermon_page_sm-import-export .plugin-card{position:relative}body.wpfc_sermon_page_sm-import-export .plugin-card>h2{position:absolute;left:50%;top:50%;transform:translate(-50%, -50%);z-index:1;color:#4a4a4a !important;margin:0;font-size:1.7rem;font-weight:100;letter-spacing:2px;font-family:'Roboto', sans-serif;text-transform:uppercase;opacity:0;transition:opacity .2s;cursor:default;width:100%;text-align:center}body.wpfc_sermon_page_sm-import-export .plugin-card.not-available:before{content:"";background:repeating-linear-gradient(45deg, rgba(0,0,0,0.05), rgba(0,0,0,0.05) 10px, rgba(0,0,0,0.1) 10px, rgba(0,0,0,0.1) 20px);width:100%;height:100%;position:absolute;left:0;top:0;z-index:1}body.wpfc_sermon_page_sm-import-export .plugin-card.not-available:hover>h2{opacity:1}body.wpfc_sermon_page_sm-import-export .plugin-card.not-available:hover .plugin-card-top{-webkit-filter:blur(1px);filter:blur(1px)}body.wpfc_sermon_page_sm-import-export .plugin-card.not-available *{color:#ccc}body.wpfc_sermon_page_sm-import-export .plugin-card.not-available .plugin-icon{filter:opacity(0.2)}body.wpfc_sermon_page_sm-import-export .plugin-card .plugin-card-top{padding:0}body.wpfc_sermon_page_sm-import-export .plugin-card .plugin-card-top:hover .import-note{display:block}body.wpfc_sermon_page_sm-import-export .plugin-card .plugin-card-top .import-note{display:none;color:rgba(0,0,0,0.5)}body.wpfc_sermon_page_sm-import-export .plugin-card .plugin-card-top .name{margin-top:20px}body.wpfc_sermon_page_sm-import-export .plugin-card .plugin-card-top .desc,body.wpfc_sermon_page_sm-import-export .plugin-card .plugin-card-top .name{margin-left:185px}body.wpfc_sermon_page_sm-import-export .plugin-card .plugin-card-top .action-links{top:0}body.wpfc_sermon_page_sm-import-export .plugin-card .plugin-card-top .plugin-icon{font-size:5rem;color:#656565;left:0;top:0;height:168px;width:168px;margin:-20px 20px 0 0}body.wpfc_sermon_page_sm-import-export .plugin-card .plugin-card-top .plugin-icon.dashicons{margin-top:1rem}body.wpfc_sermon_page_sm-import-export .plugin-card .plugin-card-top .wp-upload-form{display:none}body.wpfc_sermon_page_sm-import-export .plugin-card .plugin-card-top .import-sniper{line-height:1;vertical-align:middle;width:13px;position:relative;top:-1px;display:none}body.wpfc_sermon_page_sm-import-export .plugin-card .plugin-card-top .import-sniper img{max-width:100%}body.post-php.post-type-wpfc_sermon #sermon_video_link{width:25em}body.post-php.post-type-wpfc_sermon #sermon_date{width:125px}body.post-php.post-type-wpfc_sermon #sermon_date::placeholder{color:#ccc} +/*# sourceMappingURL=admin.min.css.map */ diff --git a/assets/css/admin.min.css.map b/assets/css/admin.min.css.map new file mode 100644 index 0000000..396e4aa --- /dev/null +++ b/assets/css/admin.min.css.map @@ -0,0 +1,7 @@ +{ +"version": 3, +"mappings": "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", +"sources": ["admin-partials/_all-sermons.scss","admin-partials/_settings.scss","admin-partials/_import-export.scss","admin-partials/_add-edit-sermon.scss"], +"names": [], +"file": "admin.min.css" +} \ No newline at end of file diff --git a/assets/css/admin.scss b/assets/css/admin.scss new file mode 100644 index 0000000..37efba7 --- /dev/null +++ b/assets/css/admin.scss @@ -0,0 +1,19 @@ +// all sermons page +body.edit-php.post-type-wpfc_sermon { + @import 'admin-partials/all-sermons'; +} + +// settings page +body.wpfc_sermon_page_sm-settings { + @import 'admin-partials/settings'; +} + +// import export page +body.wpfc_sermon_page_sm-import-export { + @import 'admin-partials/import-export'; +} + +// add/edit sermon page +body.post-php.post-type-wpfc_sermon { + @import 'admin-partials/add-edit-sermon'; +} \ No newline at end of file diff --git a/assets/css/partials/_archive.scss b/assets/css/partials/_archive.scss new file mode 100644 index 0000000..bd092d9 --- /dev/null +++ b/assets/css/partials/_archive.scss @@ -0,0 +1,150 @@ +.wpfc-sermon { + + &-shortcode { + margin-bottom: 2rem; + } + + &-image { + height: auto; + position: relative; + } + + &-image-img { + width: 100%; + background-size: cover; + background-position: center; + } + + &-header { + display: grid; + align-items: center; + + &.aside-exists { + grid-template-columns: 70% 30%; + } + } + + &-header-aside { + text-align: center; + } + + &-title { + margin: 0; + padding: 0; + } + + &-meta-item { + font-size: 14px; + opacity: .87; + } + + &-meta-series { + margin: 0 0 8px 0; + } + + &-meta-date { + margin: 8px 0 0; + } + + &-description { + font-size: 14px; + margin: 8px 0 0; + + p { + margin: 0 0 12px 0; + + &:last-child { + margin: 0; + } + } + } + + &-audio { + margin-top: 24px; + } + + &-footer { + margin-top: 24px; + padding-top: 24px; + border-top: 1px solid #ddd; + + .wpfc-sermon-meta-item { + display: inline-block; + position: relative; + + &:not(:last-child):after { + content: '|'; + padding: 0 4px; + color: #ddd; + } + } + } + + &-meta-preacher { + img { + border-radius: 50%; + width: 35px; + height: 35px; + vertical-align: middle; + display: inline-block; + } + + > a { + text-decoration: none; + box-shadow: none; + border: 0; + display: inline-block; + } + } + + &-meta-prefix, + &-meta-text { + vertical-align: middle; + } + + > .wpfc-sermon-inner { + background: white; + border: 1px solid #ddd; + } + + &-main { + padding: 24px; + } + + &-att-audio, + &-att-notes, + &-bulletin { + width: auto; + height: auto; + padding: 4px; + border: 1px solid #efefef; + margin-bottom: 4px; + } +} + +@media (min-width: 801px) { + .wpfc-sermon { + &-inner { + display: flex; + flex-flow: row wrap; + } + + &-image { + flex: 0 30%; + } + + &-image-img { + height: 100%; + } + + &-main { + flex: 1; + } + } +} + +@media(max-width: 800px) { + .wpfc-sermon-image-img { + padding-top: 56.25%; + } +} \ No newline at end of file diff --git a/assets/css/partials/_player.scss b/assets/css/partials/_player.scss new file mode 100644 index 0000000..f48f4fa --- /dev/null +++ b/assets/css/partials/_player.scss @@ -0,0 +1,8 @@ +.wpfc-sermon-player { + vertical-align: middle; + width: 100% +} + +.plyr--audio.plyr { + border: 1px solid #dbe3e8; +} diff --git a/assets/css/partials/_shortcodes.scss b/assets/css/partials/_shortcodes.scss new file mode 100644 index 0000000..798f365 --- /dev/null +++ b/assets/css/partials/_shortcodes.scss @@ -0,0 +1,90 @@ +ul#wpfc_images_grid { + display: grid; + grid-template-columns: 50% 50%; + grid-gap: 1rem; + padding: 0; + + .wpfc_grid_image { + display: block; + + img { + margin-bottom: 15px; + } + } + + .wpfc_grid_title { + margin: 0; + } +} + +// Podcasts. +$itunes-color : #732BBE; +$android-color : #6AB344; +$overcast-color : #ff8800; + +.subscribe { + text-align: center; + margin: 0; + + li { + display: inline-block; + border: none; + width: 250px; + box-sizing: border-box; + margin-bottom: 1em; + + @media screen and (min-width: 400px) { + &:not(:last-child) { + margin-right: 1em; + } + } + + a { + display: block; + text-align: center; + color: white; + padding: 55px 20px 10px; + border-radius: 5px; + text-shadow: none; + text-decoration: none; + box-shadow: none; + transition: all .3s ease; + background-repeat: no-repeat; + background-position: center 10px; + background-size: 40px; + + &.itunes { + background-color: $itunes-color; + + &:focus, &:hover, &:active { + background-color: darken($itunes-color, 20%); + } + } + + &.android { + background-color: $android-color; + + &:focus, &:hover, &:active { + background-color: darken($android-color, 20%); + } + } + + &.overcast { + background-color: $overcast-color; + + &:focus, &:hover, &:active { + background-color: darken($overcast-color, 20%); + } + } + + &.itunes, + &.overcast { + background-image: url('data:image/svg+xml;utf8,'); + } + + &.android { + background-image: url('data:image/svg+xml;utf8,'); + } + } + } +} diff --git a/assets/css/partials/_single.scss b/assets/css/partials/_single.scss new file mode 100644 index 0000000..c49b9b0 --- /dev/null +++ b/assets/css/partials/_single.scss @@ -0,0 +1,160 @@ +.wpfc-sermon-single { + &-header { + text-align: center; + } + + &-meta { + margin: 8px -8px 0 -8px; + } + + &-meta-item { + display: inline-block; + margin: 0 8px; + font-size: 14px; + opacity: .87; + } + + &-meta-date { + margin-bottom: 8px; + } + + &-title { + margin: 0; + padding: 0; + } + + .wp-video { + margin: auto; + } + + //noinspection SpellCheckingInspection + .mejs-video { + margin: 0; + } + + // fix youtube video not being full-sized in player + mediaelementwrapper > iframe { + width: 100%; + margin-bottom: 0; + height: 100%; + } + + &-media { + text-align: center; + + > div { + margin: 24px 0; + } + } + + &-audio { + display: flex; + justify-content: center; + } + + &-audio-download { + display: flex; + align-items: center; + flex: none; + background: white; + padding: 0 1.25rem; + box-shadow: none; + text-decoration: none; + outline: none; + + .player-none & { + svg { + fill: rgb(93, 93, 93); + } + } + + .player-wordpress & { + background: #222; + margin-bottom: 1.75em; + + svg { + fill: rgb(255, 255, 255); + } + } + + //noinspection SpellCheckingInspection + .player-mediaelement & { + background: #222; + + &:hover { + background-color: rgba(51, 51, 51, 0.7); + } + + svg { + fill: rgb(255, 255, 255); + } + } + + .player-plyr & { + border: 1px solid #dbe3e8; + border-left: none; + transition: background .3s; + + &:hover { + background: #dbe3e8; + + svg { + fill: rgb(255, 255, 255); + } + } + } + } + + .player-plyr .plyr { + flex: 1; + } + + &-description { + margin-top: 24px; + + p:first-child { + margin-top: 0; + } + + p:last-child { + margin-bottom: 0; + } + } + + &-attachments { + background: #efefef; + border: 1px solid #ddd; + padding: 24px; + margin-top: 24px; + + #wpfc-attachments { + strong, a { + display: block; + } + + p { + margin: 0; + } + + .dashicons { + line-height: 28px; + } + } + } + + &-topics { + margin-top: 24px; + } + + &-navigation { + border-top: 1px solid #ddd; + margin-top: 2rem; + padding-top: 1rem; + display: grid; + grid-template-columns: 50% 50%; + + .next-sermon { + text-align: right; + } + } +} \ No newline at end of file diff --git a/assets/css/partials/_sorting.scss b/assets/css/partials/_sorting.scss new file mode 100644 index 0000000..ca49bf2 --- /dev/null +++ b/assets/css/partials/_sorting.scss @@ -0,0 +1,52 @@ +#wpfc_sermon_sorting { + padding: 0; + margin: 0 0 24px 0; + display: flex; + flex-wrap: wrap; + + &.no-spacing { + margin: 0; + padding: 0; + } + + > div { + margin: 0 8px 4px 0; + overflow: hidden; + flex-basis: auto; + flex-grow: 1; + min-width: 100px; + flex-shrink: 0; + max-width: 150px; + + select { + width: 100%; + } + } + + > div:last-child { + margin: 0 0 4px 0; + } + + form { + margin: 0; + } +} + +@media (max-width: 700px) { + .wpfc-sermon-container #wpfc_sermon_sorting { + > div { + width: 100%; + margin: 0 0 12px 0; + } + + > div:last-child { + margin: 0; + } + + select { + display: block; + width: 100%; + max-width: 100%; + } + } +} diff --git a/assets/css/sermon.min.css b/assets/css/sermon.min.css new file mode 100644 index 0000000..0c31368 --- /dev/null +++ b/assets/css/sermon.min.css @@ -0,0 +1 @@ +#wpfc_sermon_sorting{padding:0;margin:0 0 24px 0;display:flex;flex-wrap:wrap}#wpfc_sermon_sorting.no-spacing{margin:0;padding:0}#wpfc_sermon_sorting>div{margin:0 8px 4px 0;overflow:hidden;flex-basis:auto;flex-grow:1;min-width:100px;flex-shrink:0;max-width:150px}#wpfc_sermon_sorting>div select{width:100%}#wpfc_sermon_sorting>div:last-child{margin:0 0 4px 0}#wpfc_sermon_sorting form{margin:0}@media(max-width: 700px){.wpfc-sermon-container #wpfc_sermon_sorting>div{width:100%;margin:0 0 12px 0}.wpfc-sermon-container #wpfc_sermon_sorting>div:last-child{margin:0}.wpfc-sermon-container #wpfc_sermon_sorting select{display:block;width:100%;max-width:100%}}.wpfc-sermon-shortcode{margin-bottom:2rem}.wpfc-sermon-image{height:auto;position:relative}.wpfc-sermon-image-img{width:100%;background-size:cover;background-position:center}.wpfc-sermon-header{display:grid;align-items:center}.wpfc-sermon-header.aside-exists{grid-template-columns:70% 30%}.wpfc-sermon-header-aside{text-align:center}.wpfc-sermon-title{margin:0;padding:0}.wpfc-sermon-meta-item{font-size:14px;opacity:.87}.wpfc-sermon-meta-series{margin:0 0 8px 0}.wpfc-sermon-meta-date{margin:8px 0 0}.wpfc-sermon-description{font-size:14px;margin:8px 0 0}.wpfc-sermon-description p{margin:0 0 12px 0}.wpfc-sermon-description p:last-child{margin:0}.wpfc-sermon-audio{margin-top:24px}.wpfc-sermon-footer{margin-top:24px;padding-top:24px;border-top:1px solid #ddd}.wpfc-sermon-footer .wpfc-sermon-meta-item{display:inline-block;position:relative}.wpfc-sermon-footer .wpfc-sermon-meta-item:not(:last-child):after{content:"|";padding:0 4px;color:#ddd}.wpfc-sermon-meta-preacher img{border-radius:50%;width:35px;height:35px;vertical-align:middle;display:inline-block}.wpfc-sermon-meta-preacher>a{text-decoration:none;box-shadow:none;border:0;display:inline-block}.wpfc-sermon-meta-prefix,.wpfc-sermon-meta-text{vertical-align:middle}.wpfc-sermon>.wpfc-sermon-inner{background:#fff;border:1px solid #ddd}.wpfc-sermon-main{padding:24px}.wpfc-sermon-att-audio,.wpfc-sermon-att-notes,.wpfc-sermon-bulletin{width:auto;height:auto;padding:4px;border:1px solid #efefef;margin-bottom:4px}@media(min-width: 801px){.wpfc-sermon-inner{display:flex;flex-flow:row wrap}.wpfc-sermon-image{flex:0 30%}.wpfc-sermon-image-img{height:100%}.wpfc-sermon-main{flex:1}}@media(max-width: 800px){.wpfc-sermon-image-img{padding-top:56.25%}}.wpfc-sermon-single-header{text-align:center}.wpfc-sermon-single-meta{margin:8px -8px 0 -8px}.wpfc-sermon-single-meta-item{display:inline-block;margin:0 8px;font-size:14px;opacity:.87}.wpfc-sermon-single-meta-date{margin-bottom:8px}.wpfc-sermon-single-title{margin:0;padding:0}.wpfc-sermon-single .wp-video{margin:auto}.wpfc-sermon-single .mejs-video{margin:0}.wpfc-sermon-single mediaelementwrapper>iframe{width:100%;margin-bottom:0;height:100%}.wpfc-sermon-single-media{text-align:center}.wpfc-sermon-single-media>div{margin:24px 0}.wpfc-sermon-single-audio{display:flex;justify-content:center}.wpfc-sermon-single-audio-download{display:flex;align-items:center;flex:none;background:#fff;padding:0 1.25rem;box-shadow:none;text-decoration:none;outline:none}.player-none .wpfc-sermon-single-audio-download svg{fill:#5d5d5d}.player-wordpress .wpfc-sermon-single-audio-download{background:#222;margin-bottom:1.75em}.player-wordpress .wpfc-sermon-single-audio-download svg{fill:#fff}.player-mediaelement .wpfc-sermon-single-audio-download{background:#222}.player-mediaelement .wpfc-sermon-single-audio-download:hover{background-color:rgba(51,51,51,.7)}.player-mediaelement .wpfc-sermon-single-audio-download svg{fill:#fff}.player-plyr .wpfc-sermon-single-audio-download{border:1px solid #dbe3e8;border-left:none;transition:background .3s}.player-plyr .wpfc-sermon-single-audio-download:hover{background:#dbe3e8}.player-plyr .wpfc-sermon-single-audio-download:hover svg{fill:#fff}.wpfc-sermon-single .player-plyr .plyr{flex:1}.wpfc-sermon-single-description{margin-top:24px}.wpfc-sermon-single-description p:first-child{margin-top:0}.wpfc-sermon-single-description p:last-child{margin-bottom:0}.wpfc-sermon-single-attachments{background:#efefef;border:1px solid #ddd;padding:24px;margin-top:24px}.wpfc-sermon-single-attachments #wpfc-attachments strong,.wpfc-sermon-single-attachments #wpfc-attachments a{display:block}.wpfc-sermon-single-attachments #wpfc-attachments p{margin:0}.wpfc-sermon-single-attachments #wpfc-attachments .dashicons{line-height:28px}.wpfc-sermon-single-topics{margin-top:24px}.wpfc-sermon-single-navigation{border-top:1px solid #ddd;margin-top:2rem;padding-top:1rem;display:grid;grid-template-columns:50% 50%}.wpfc-sermon-single-navigation .next-sermon{text-align:right}ul#wpfc_images_grid{display:grid;grid-template-columns:50% 50%;grid-gap:1rem;padding:0}ul#wpfc_images_grid .wpfc_grid_image{display:block}ul#wpfc_images_grid .wpfc_grid_image img{margin-bottom:15px}ul#wpfc_images_grid .wpfc_grid_title{margin:0}.subscribe{text-align:center;margin:0}.subscribe li{display:inline-block;border:none;width:250px;box-sizing:border-box;margin-bottom:1em}@media screen and (min-width: 400px){.subscribe li:not(:last-child){margin-right:1em}}.subscribe li a{display:block;text-align:center;color:#fff;padding:55px 20px 10px;border-radius:5px;text-shadow:none;text-decoration:none;box-shadow:none;transition:all .3s ease;background-repeat:no-repeat;background-position:center 10px;background-size:40px}.subscribe li a.itunes{background-color:#732bbe}.subscribe li a.itunes:focus,.subscribe li a.itunes:hover,.subscribe li a.itunes:active{background-color:#41186b}.subscribe li a.android{background-color:#6ab344}.subscribe li a.android:focus,.subscribe li a.android:hover,.subscribe li a.android:active{background-color:#3e6928}.subscribe li a.overcast{background-color:#f80}.subscribe li a.overcast:focus,.subscribe li a.overcast:hover,.subscribe li a.overcast:active{background-color:#995200}.subscribe li a.itunes,.subscribe li a.overcast{background-image:url('data:image/svg+xml;utf8,')}.subscribe li a.android{background-image:url('data:image/svg+xml;utf8,')}.wpfc-sermon-player{vertical-align:middle;width:100%}.plyr--audio.plyr{border:1px solid #dbe3e8}/*# sourceMappingURL=sermon.min.css.map */ diff --git a/assets/css/sermon.min.css.map b/assets/css/sermon.min.css.map new file mode 100644 index 0000000..fdf8b72 --- /dev/null +++ b/assets/css/sermon.min.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["partials/_sorting.scss","partials/_archive.scss","partials/_single.scss","partials/_shortcodes.scss","partials/_player.scss"],"names":[],"mappings":"AAAA,qBACE,UACA,kBACA,aACA,eAEA,gCACE,SACA,UAGF,yBACE,mBACA,gBACA,gBACA,YACA,gBACA,cACA,gBAEA,gCACE,WAIJ,oCACE,iBAGF,0BACE,SAIJ,yBAEI,gDACE,WACA,kBAGF,2DACE,SAGF,mDACE,cACA,WACA,gBC9CJ,uBACE,mBAGF,mBACE,YACA,kBAGF,uBACE,WACA,sBACA,2BAGF,oBACE,aACA,mBAEA,iCACE,8BAIJ,0BACE,kBAGF,mBACE,SACA,UAGF,uBACE,eACA,YAGF,yBACE,iBAGF,uBACE,eAGF,yBACE,eACA,eAEA,2BACE,kBAEA,sCACE,SAKN,mBACE,gBAGF,oBACE,gBACA,iBACA,0BAEA,2CACE,qBACA,kBAEA,kEACE,YACA,cACA,WAMJ,+BACE,kBACA,WACA,YACA,sBACA,qBAGF,6BACE,qBACA,gBACA,SACA,qBAIJ,gDAEE,sBAGF,gCACE,gBACA,sBAGF,kBACE,aAGF,oEAGE,WACA,YACA,YACA,yBACA,kBAIJ,yBAEI,mBACE,aACA,mBAGF,mBACE,WAGF,uBACE,YAGF,kBACE,QAKN,yBACE,uBACE,oBClJF,2BACE,kBAGF,yBACE,uBAGF,8BACE,qBACA,aACA,eACA,YAGF,8BACE,kBAGF,0BACE,SACA,UAGF,8BACE,YAIF,gCACE,SAIF,+CACE,WACA,gBACA,YAGF,0BACE,kBAEA,8BACE,cAIJ,0BACE,aACA,uBAGF,mCACE,aACA,mBACA,UACA,gBACA,kBACA,gBACA,qBACA,aAGE,oDACE,aAIJ,qDACE,gBACA,qBAEA,yDACE,UAKJ,wDACE,gBAEA,8DACE,mCAGF,4DACE,UAIJ,gDACE,yBACA,iBACA,0BAEA,sDACE,mBAEA,0DACE,UAMR,uCACE,OAGF,gCACE,gBAEA,8CACE,aAGF,6CACE,gBAIJ,gCACE,mBACA,sBACA,aACA,gBAGE,6GACE,cAGF,oDACE,SAGF,6DACE,iBAKN,2BACE,gBAGF,+BACE,0BACA,gBACA,iBACA,aACA,8BAEA,4CACE,iBC5JN,oBACE,aACA,8BACA,cACA,UAEA,qCACE,cAEA,yCACE,mBAIJ,qCACE,SASJ,WACE,kBACA,SAEA,cACE,qBACA,YACA,YACA,sBACA,kBAEA,qCACE,+BACE,kBAIJ,gBACE,cACA,kBACA,WACA,uBACA,kBACA,iBACA,qBACA,gBACA,wBACA,4BACA,gCACA,qBAEA,uBACE,iBApCQ,QAsCR,wFACE,yBAIJ,wBACE,iBA3CS,QA6CT,2FACE,yBAIJ,yBACE,iBAlDU,KAoDV,8FACE,yBAIJ,gDAEE,8kDAGF,wBACE,+wCCrFR,oBACE,sBACA,WAGF,kBACE","file":"sermon.min.css"} \ No newline at end of file diff --git a/assets/css/sermon.scss b/assets/css/sermon.scss new file mode 100644 index 0000000..e69f0df --- /dev/null +++ b/assets/css/sermon.scss @@ -0,0 +1,10 @@ +// Sermon Sorting +@import 'partials/sorting'; +// Sermon Archive +@import 'partials/archive'; +// Sermon Single +@import 'partials/single'; +// Shortcode styling +@import "partials/shortcodes"; +// Video/audio player styling +@import "partials/player"; \ No newline at end of file diff --git a/assets/css/theme-specific/Avada.css b/assets/css/theme-specific/Avada.css new file mode 100644 index 0000000..d27d1c3 --- /dev/null +++ b/assets/css/theme-specific/Avada.css @@ -0,0 +1,11 @@ +.single .single-navigation, .single .fusion-meta-info, .single .fusion-sharing-box, .single .about-author { + display: none; +} + +.sm-filtering .avada-select-parent select { + min-width: auto; +} + +.smpro-items-container article { + margin-bottom: 30px; +} \ No newline at end of file diff --git a/assets/css/theme-specific/Divi.css b/assets/css/theme-specific/Divi.css new file mode 100644 index 0000000..fec873c --- /dev/null +++ b/assets/css/theme-specific/Divi.css @@ -0,0 +1,3 @@ +article.wpfc_sermon { + margin-bottom: 50px; +} diff --git a/assets/css/theme-specific/astra.css b/assets/css/theme-specific/astra.css new file mode 100644 index 0000000..a852a78 --- /dev/null +++ b/assets/css/theme-specific/astra.css @@ -0,0 +1,13 @@ +.ast-separate-container .ast-article-post { + padding: 0; + margin-bottom: 24px; +} + +.ast-separate-container .ast-article-post:last-child { + margin-bottom: 0; +} + +.smpro-items-container .ast-col-sm-12 { + padding-left: 0; + padding-right: 0; +} diff --git a/assets/css/theme-specific/betheme.css b/assets/css/theme-specific/betheme.css new file mode 100644 index 0000000..3dae06c --- /dev/null +++ b/assets/css/theme-specific/betheme.css @@ -0,0 +1,3 @@ +.wpfc-sermon-container article { + margin-bottom: 2rem; +} diff --git a/assets/css/theme-specific/dunamis.css b/assets/css/theme-specific/dunamis.css new file mode 100644 index 0000000..f5a09b6 --- /dev/null +++ b/assets/css/theme-specific/dunamis.css @@ -0,0 +1,3 @@ +article.wpfc-sermon { + margin-bottom: 1rem; +} diff --git a/assets/css/theme-specific/genesis.css b/assets/css/theme-specific/genesis.css new file mode 100644 index 0000000..c63e2fd --- /dev/null +++ b/assets/css/theme-specific/genesis.css @@ -0,0 +1,11 @@ +.wpfc_sermon-template-default.full-width-content .content { + width: calc(100% - 400px); + margin-left: 40px; +} + +@media only screen and (max-width: 1020px) { +.wpfc_sermon-template-default.full-width-content .content { + width: 100%; + margin-left: 0; +} +} \ No newline at end of file diff --git a/assets/css/theme-specific/oceanwp.css b/assets/css/theme-specific/oceanwp.css new file mode 100644 index 0000000..89b87e1 --- /dev/null +++ b/assets/css/theme-specific/oceanwp.css @@ -0,0 +1,11 @@ +#wpfc_sermon_sorting { + margin-bottom: 24px; +} + +.wpfc-sermon { + margin-bottom: 24px; +} + +.wpfc-sermon:last-child { + margin-bottom: 0; +} \ No newline at end of file diff --git a/assets/css/theme-specific/salient.css b/assets/css/theme-specific/salient.css new file mode 100644 index 0000000..e497fad --- /dev/null +++ b/assets/css/theme-specific/salient.css @@ -0,0 +1,12 @@ +.wpfc-sermon-meta-preacher img { + width: 35px !important; + height: 35px !important; +} + +.wpfc-sermon { + margin-bottom: 24px; +} + +.wpfc-sermon:last-child { + margin-bottom: 0; +} \ No newline at end of file diff --git a/assets/css/theme-specific/twentrythirteen.css b/assets/css/theme-specific/twentrythirteen.css new file mode 100644 index 0000000..bebb23c --- /dev/null +++ b/assets/css/theme-specific/twentrythirteen.css @@ -0,0 +1,13 @@ +.wpfc-twentythirteen { + margin: 0 auto; + max-width: 604px; + width: 100%; +} + +#wpfc_sermon_sorting { + margin: 40px 0 0 !important; +} + +.wpfc-sermon { + margin: 0; +} diff --git a/assets/css/theme-specific/twentyfifteen.css b/assets/css/theme-specific/twentyfifteen.css new file mode 100644 index 0000000..359f463 --- /dev/null +++ b/assets/css/theme-specific/twentyfifteen.css @@ -0,0 +1,16 @@ +.wpfc-twentyfifteen #wpfc_sermon_sorting { + margin-left: 8.3333%; + margin-right: 8.3333%; +} + +.wpfc-twentyfifteen .wpfc-sermon-single-image { + margin: 0; +} + +.wpfc-twentyfifteen .wpfc-sermon-single-main { + padding: 10%; +} + +.wpfc-twentyfifteen .hentry { + padding-top: 0; +} diff --git a/assets/css/theme-specific/twentyfourteen.css b/assets/css/theme-specific/twentyfourteen.css new file mode 100644 index 0000000..c92d151 --- /dev/null +++ b/assets/css/theme-specific/twentyfourteen.css @@ -0,0 +1,23 @@ +#wpfc_sermon_sorting { + margin: 0 auto 48px auto !important; +} + +#wpfc_sermon_sorting, +.wpfc-sermon, +.wpfc-sermon-single { + max-width: 474px !important; +} + +.wpfc-sermon, +.wpfc-sermon-single { + margin: 0 auto; +} + +.wpfc-sermon:last-child { + margin-bottom: 48px; +} + +/*noinspection SpellCheckingInspection*/ +.full-width .site-content .hentry.has-post-thumbnail:first-child { + margin-top: 0 !important; +} \ No newline at end of file diff --git a/assets/css/theme-specific/twentynineteen.css b/assets/css/theme-specific/twentynineteen.css new file mode 100644 index 0000000..298f712 --- /dev/null +++ b/assets/css/theme-specific/twentynineteen.css @@ -0,0 +1,3 @@ +.smpro-items { + margin: calc(3 * 1rem) calc(10% + 60px) calc(1rem / 2); +} \ No newline at end of file diff --git a/assets/css/theme-specific/twentyseventeen.css b/assets/css/theme-specific/twentyseventeen.css new file mode 100644 index 0000000..0a943a0 --- /dev/null +++ b/assets/css/theme-specific/twentyseventeen.css @@ -0,0 +1,7 @@ +.wpfc-twentyseventeen .archive .site-main > article { + padding: 0; +} + +.wpfc-sermon { + margin: 0; +} \ No newline at end of file diff --git a/assets/css/theme-specific/wpfc-eternity.css b/assets/css/theme-specific/wpfc-eternity.css new file mode 100644 index 0000000..9f91ef0 --- /dev/null +++ b/assets/css/theme-specific/wpfc-eternity.css @@ -0,0 +1,7 @@ +.wpfc-sermon-container .wpfc-sermon { + margin-bottom: 24px; +} + +.wpfc-sermon-container .wpfc-sermon:last-child { + margin-bottom: 0; +} \ No newline at end of file diff --git a/assets/css/theme-specific/wpfc-freedom.css b/assets/css/theme-specific/wpfc-freedom.css new file mode 100644 index 0000000..9f91ef0 --- /dev/null +++ b/assets/css/theme-specific/wpfc-freedom.css @@ -0,0 +1,7 @@ +.wpfc-sermon-container .wpfc-sermon { + margin-bottom: 24px; +} + +.wpfc-sermon-container .wpfc-sermon:last-child { + margin-bottom: 0; +} \ No newline at end of file diff --git a/assets/css/theme-specific/wpfc-morgan.css b/assets/css/theme-specific/wpfc-morgan.css new file mode 100644 index 0000000..ded4290 --- /dev/null +++ b/assets/css/theme-specific/wpfc-morgan.css @@ -0,0 +1,3 @@ +.player-wordpress .wpfc-sermon-single-audio-download { + margin-bottom: 0; +} \ No newline at end of file diff --git a/assets/css/theme-specific/wpfc-multiply.css b/assets/css/theme-specific/wpfc-multiply.css new file mode 100644 index 0000000..9f91ef0 --- /dev/null +++ b/assets/css/theme-specific/wpfc-multiply.css @@ -0,0 +1,7 @@ +.wpfc-sermon-container .wpfc-sermon { + margin-bottom: 24px; +} + +.wpfc-sermon-container .wpfc-sermon:last-child { + margin-bottom: 0; +} \ No newline at end of file diff --git a/assets/css/theme-specific/wpfc-newhope.css b/assets/css/theme-specific/wpfc-newhope.css new file mode 100644 index 0000000..9f91ef0 --- /dev/null +++ b/assets/css/theme-specific/wpfc-newhope.css @@ -0,0 +1,7 @@ +.wpfc-sermon-container .wpfc-sermon { + margin-bottom: 24px; +} + +.wpfc-sermon-container .wpfc-sermon:last-child { + margin-bottom: 0; +} \ No newline at end of file diff --git a/assets/fonts/Sermon-Manager.eot b/assets/fonts/Sermon-Manager.eot new file mode 100644 index 0000000000000000000000000000000000000000..e1f4226850d7e7efd85a30d569261743fc5320d1 GIT binary patch literal 1320 zcmaJ>OK1~O6g_VyY1&j$G5vs)GO@PSf@v}~NsC%)tEsIPrAoJUl8i|p$%G`8Rs>y$ zf*ZRM3W^)o)~yxc~tP z^(L?)Oy$~*dfm*m&A(n+I~)Ui$RY^?c|HaTOz>e2I?`A~4jM{SIx$bBgfer@90g$n z5wda*S5q`6Y{f&!2wlH9q_!P%4^ny0XCax_ie2+xo-nDK{8m~k7wM0Zo4z@nTfXz- ztJFfiME)_OYboE|&zpcWP9Dur@C?cy$j$i4Oun+@B_MynS9{J#Y8U`x(p&N)d2Oi( zFH~}Kex;!0_0^e{zvSOI$K#?=uCPy~_`G;WUAsFkvx_kWFhs*mXO4a2i8wy}haTM1N#B8ViTiu-e%%B1VNj z5b7Tj=R~Me^qz_YIy}9RfTu6u4@CUZnYgOPFRMb0=c^I7FC5)^P?g7Wawa>m^Gg!j z)zJZQuTQ?BPED!dxQMIOcd?0Bp!zB?bulwJ*;9QfM1tSy^t@JD_upVsf`eVe_Z{r! z;pDEhYMZFfIoOL~yv`<#ykQjTPx!oEDrb#?5)OtMAM1uy4aGSeiV( I_*?4nKU^xlng9R* literal 0 HcmV?d00001 diff --git a/assets/fonts/Sermon-Manager.svg b/assets/fonts/Sermon-Manager.svg new file mode 100644 index 0000000..f44ef6b --- /dev/null +++ b/assets/fonts/Sermon-Manager.svg @@ -0,0 +1,14 @@ + + + + Generated by IcoMoon + + + + + + + + + \ No newline at end of file diff --git a/assets/fonts/Sermon-Manager.ttf b/assets/fonts/Sermon-Manager.ttf new file mode 100644 index 0000000000000000000000000000000000000000..b40050ecc43efc8f8d18989878d567959dc43c6e GIT binary patch literal 1156 zcmaJ=OK1~O6g_V~O`A$8rXP?}5^HNM*d}9>w5X-FIv^MAp+8LS_||-B<>vPodE|NV1E&R5?K45y`)vx?fV|dR!<5X$r1LDcE#d-a znzMSD^E^koT){Yf5Ur4S2}Cx~+-f!%!wweBZ#@e4?d>ZdSkVwBQ5Tl$X;CdQJfcub3H-Cg5iLWHBS!AWsO#JWZQiA1z3(4U9~2BP6; zA}pQKHBG;$2~D>e2{jZ?Zrp9ilO?%OoZk8=iOt5ukhnb{U((WPEv^e)YrIWOr=pGL zne_R>%uHY7nGhMC)z|#0`X+p%M@sf{K{uNz5Zeje2 zkApahht4}y+87Bj<6((7?_-(xoR1aaJ3dy?4Su!m-WJB^eH_FXUKF#oW!q&Gk%bM5 z%SL&@tk#NlIT9a*G<7@RlrOC_Vqp(cecp#%ff11ojAT#w|< zvRO6iW-gLhiOgp0Icgh$?#`}rdY)~{t|9|<`W#~!tnfbT9$?Np05y7l(B8N55B>{+ CzOFw2 literal 0 HcmV?d00001 diff --git a/assets/fonts/Sermon-Manager.woff b/assets/fonts/Sermon-Manager.woff new file mode 100644 index 0000000000000000000000000000000000000000..d980a1597cfb428858838cafc85ffb4ccbaee399 GIT binary patch literal 1232 zcmaJ=O=uHQ5T3W2ZA>a@G5rB4Wn*ov1>0n8k`}epR<~9ug(|(;O|oVK$!!we5g5lr34y;2ijuxOOjoypy*ooO=bI=W=b&7uT+Udky@S z>z7YT$g!;)k#Y}yifiQR`%MQVIG%TyYj8+?w8Lm~b!40DKZLaI*L%){2N)`J)-_28jRF&8R(ol0w z3TtolIG!ZhB6Xv_L6a&JjCfO=Ty$YY7oZ-*IPQVvSv?e>F`Qw%l!8A-`WDr9>UD6q zD>18o?heQsA^^jPA*)SP@i~PkJuX`B_5VK?AgXVx4yNv)UOGx6DBID}cW59vno1|) zM#AXo9Ao1w8jBB1uoEoa#rlpUW1YdiWGvVpi^h^s<(O$0=2?RoW~r9cB8k-2&6+w< zRGq@q&Ub}v*Tx6g^?vo7F*9Q%OlBIjm+7f=toArFbK04n?yWsyEF<<2TRbbjh+b|x z`GZ<99Axw7nTLC)oRfpC@RGzTa7y9;@QTD5{4(NSC+;{DQ<`8l@+NtXJ|pmkN|6k4jLF+(o-wDR{1)7>?5-*;J+q5)eS0 z1PxQX>8+;Zf}LL}T4gk~G3W{v$)a-8Ow)6#dfs;JvQ@QndS*?Z&3bc~ZJ12ayNd34 flySvG7FBWPz-4F+c2+Df=P!U6@o^hJ$-npyRm!tQ literal 0 HcmV?d00001 diff --git a/assets/images/export-sm.jpg b/assets/images/export-sm.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b32f30c9e1b42f21bb7480e53af142c0a3918bd1 GIT binary patch literal 46511 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 Q8jG0WiI*1p=i0yj+53MPtN;K2 literal 0 HcmV?d00001 diff --git a/assets/images/import-sb.jpg b/assets/images/import-sb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..24f9cb1b8c62a19faf918c4844ddb10c70a64f5c GIT binary patch literal 26634 zcmeFYWmH^Gvo|_G&;$r1K!UqF0R~TS3GN=;T?W_S?hXNhGdK+HuEAvncXtbR`JeYZ z&$I5AyWVxa-cxJ!o|awJ-L?1bsjm9<%fib#s)D(*vpp{hi>(v0fw7&T3A2%%4U3zB zJqsH%D+_>M$j#os$jZc-)X>Dt!d8I%w55Zb)WTSRT%A*vRn}g_#N0yC!_h?9Lr%rW z!^()qm|RGZl;4fl&Borw#Myw<&Bof+iPuel{J(_rzUKd_W+5m2uUnk01jxVr(<`Zl ztOBWsoudgUCo>n55gP}Pl$(c{jgtq+{)Lg0ot2G?g_Vbe?F$nt8!sylFDo1Ae-rs@ zZ;r;Myh@_t|J~PXNr3#nCj|n5m_Z!Oc8+E&Y&<+XEUfG-?CeahcQ84*+d3P#G1)p% z{7ZtUiIb6|g}t+doh|7<5)BOPT$}~S$yr`|VEOMZ{>lD(Zi4?B!~g#NuLk~C1OKam z|JA_%YT$o0@c$zX{Kq;nv3)g(K(DsX%Q1ja!Q9T-&dJ=)o|J=`6#x{Ll6^x3_=n!l z5JfJ=0BYXs`=O>D-3j}=Kmk7iaR2uN{~tp5H~lv|JRIC>>udUV!~bpOWf|}WK>Bh5 z!1ym)3}D>(I##%sP5>4P8~_f00KfvkVZp&;!M*eX_FgLhNC>Z&e-k1SG72ghJi?pT zfdBx=|6Kk}aIe*`&4{S)0dNQi@NW@5K242$a0 z#{ZvB$9d3A++ZIO1DLF>T`EG$-2D5O6D`*iNV{ws+4wgO?G+#^NGV(K4RdM;Pq_u< z7o7!%stwsD^j*J|U$Q|{{J~TMhAQeAariQ_9Yi+*MD4zQ!y`mHDJ`Y@KkrP(%iO=F?b3Sau;g-^oV;jK-+UNB zN`>AKUk?_&LY4kT{c9Jgt_hlsILu)6M`up1YQTQtR4L zcjnO7ULJo|VKYH1!v>Y7CDT6qo}{ms&Xy^`DdRg-o-k(K7t~C9WRge_|9uL}2iMvL zw{13xVNA5LSP0LX>4Z?e?kRkS!IWVeH3Jlby>49(&}-Cv7xKvf@C2ikvQaJ){Dor6 zhqwcM^Gu^F>mh{-ZeE4orWhu^iIXD+0G)>74?5dhM1j0_Nw4|D%JILl#0zup+bl71H#WlAY#B|2#1L3;TOGQ#Q`dD*M{a^p z(d!8mzWiQgVPorD-&Ri3BXf3jIX~1kD=pO4jXyLx7o%G?vNyw|Htmu$8{({y)##7^ zQSzsUX0N~|mFT_(DRAg9x_H<}v1Uy9&n_=;Bi|h$F9Yu8dt#Jp8Sz;D>_E6^v&o<8 zY7u6M%WXMouMTdlkwz?!Z5V{ypgAZ=%&lU=r?LTWK6@Tn}Ug;Dk(t{el=)#lIfJ5gb-**FS*piC*^*nLwoZc zh5UD3c~NCSbWPIIuejXKGno5(Pyp~Xq43Ro+G)!jTT^eZP#IpRvYx+S(RM;dZ)+cU zZ}v+-0Q2Viat=8%S$!|FQe2ZHO-??pYjAwSTxaFLW)T_WyI zA7=aKY%6Aq?Qc`FbjLY!RNv=qMvnaOvorw4)~GfH`)nOJ|xZ0 z^{AI-8aG+Vn%?PU_PCHA$M>~w-IBGG=y-{IeBg-)1cT9m3m)Eo?`=b|Yog6h+JBd& z0Z0%&R?uMo?jqw#{?#sV-Wc$H*|lopp5z0g%^uGdfxid4(6qHkM1{Ql<|!!%NAYk~ zHMzE3keTs-`yDzC_L76Fj0^46Tis18;Y4JcVQrGq7MURx%)z_qru#nN^Hy2ZW3kj@ zZ2%tmKrx-(+O{h$?P^Y4GM;1!DDB!*%I18A)OY6^q4=jpd9Edrz8XG7iQi zmW;Memz;2;sP_V%m2q?*HaJDHQo@B2K81kPU+s>W4v90UD_r?eXB26b6Gk|_G!H+$ z^s!o!DpC^ozKHi4N6fO>B#nh=15^Eq%c(pxMigQ>hfb6_Y_)i-i62M85>Q`&Y93q@ z^jYepfZlL?3q7IIaZIM_XgYj5WdG9JumXTsSL1yFDch{)YuoiDGlQGtk9BO%J>EQ3 zSJg(uA@kPTkZwP!2|Ha%}5Ib5j;vTPD< zT{?z@VsewC&%NPGq*-#nsJoJygeDNpEnAmB2pm$rp-GVjHiDra%hRdHJ|o7M+Y9`N z2s%K2m~SurFQZTFKL(wFQ$O?01)~>maZ2Trr$SA}l%MeZy9iqnW(3NnJD&LE^|6Gz zP*}9zTnyB>;*<9~idl}qQ}amw2QiKLM~Qlq33&tYhBXbb<`3xNAqZFlWWABy?}Ig> za3|1{KU<*tEfHA!e)F3W0NB^|MGgnDrfV3&RkLTa0@eUVUlFPhLGR(Y{Cgx7o-{ft zKTeIw3=_zdIT1`h4nO~_`klMYJP{46pp#+H8RG~qxIO*VKNk8tK--@UrK~$`HXkHB5w1<-$HckliJu;mQ4 zHVM(v($S>CyqEqekWd9Re&i-PEZB8(if|9gEwRXXXA?JHdsHET=K^34fnwBsh52{@ zprxq$hYMHbmd)=En=*2q8_Ubk!OqCv19b#+1{@w583Gy%8(;xThOHxbd>)w=)A+)u zIu_{f8}v=2=;Dx!LD(OmV{{l~Kj`S+p!HK$6z8Q(!K@_=2nQ6AQ@N2-H8s1>9<|UF z-+T8GlW&HSp4nFuh7U&jpXZi0(=y%dU*1HTvD5p z%p({0s@eMOP$ieyDPxo6(#8p>N1AeUeRSE@7uH)MfJ(#ef5~^U2I79O5!;yFqDLij zrKCB=nP3=Nr$)cwMrH9x4PlX7kozMjGni5`0h>K8Vt*3#ARdlk*2 z_i+o(a#Dc6>d^0r9M09c8`;r)$s;Tc5-K;VDd(ddk=v!a293-7iPy4Q>rFigsq3z7 zMG5JW0#^BF-+hrsotb*=H8-=9U`wF7ORFX89iWqyA4Q3Z<#|fg|JgHz4>hv3%cb6a zbn6X)KVFc>Nzb>c=6b*M0e2Z>+LtgCnJxOem|%Oy2wLWJ3w3?ncae@>5;I8p(7!V* zC_l0abtfs`C9$k8xYk(_mhdjUu@X|3`Ls0QpvSSH*xfovbymKLI9mO7+T6YXVjxnr zGhZA|Yg1ED@FAbQ0FhX~MQRTlG_%mtI&FDpUA?L*Mv)IvO{ccM^;)SiCLI zoLf{M!E0xnjK4)sh9oU#o_zR0bn|o>V=So%ZCInR%M~h8uu1dVJ}|q)FznCKM{ zCz*H%Z_a*ace?dRV}I?S-De>&jcU#`i*VQvbIB6Mb3esMTCx)OOb{Hwt;kHJ$6qQ zb3=+qZtn?i?vKB7O^Yga1)Y|xi(-WZ70KMT4KD!EGXYRXy`}<;?TBAwxMOLt^ja&E zQA>}eU-gvH68YwXMjbB{UUiIWD%lZCI|M@)c5}p4*d8Go>xSO?YyGG+&Q?wDZbtsI zy9z{q0hm?xM94r+;r=NQxqP&VBn;NXo6GF%R)xfdh9*D4K%8wjl=@{8thmI8K zy-!8^^g1gq00*tonnaP1-jlqEYE>PlTK%yX05!NY3E#I(_x2q=9yn9>;6}4>i7(w^ z4wVLJ`j8sr*tFXqbG^?^xnk$YI2edtMj6b5J(Y&0pVmlv1@_H$GKGt`=k-!1E-WdH zE-g5#uWE~$&dr_Y?Yhx4{mjj5%D5aOAGG~9-BQY;B#k4BLGM^ATl+T>)~u6@gGX+@ z)@2VywfRb>)vKlP*(FA!yg7{h<0CS`P`R?r2YVTp8p96)pv8EKCgQEKbR{(9lf600?6BBqMV7o2_vU@+=Vn`FsjbqMityX+xGx3AgbuL0QP#4ft6EStlMAPTPhZHez=z^|Ucf zbk*$B*tqnUPgngW(eC|p{i%unf==cM*a=l%bEU@q`-ZO z?Y1LB*k=i=j~a&Al`%~ik(YKD;3cGEFdiry+K8AlplmspoDYkB(L|ut{Pzcr01S4 z9YX!)$zl#&cs3+Y#vZ)G1R2S2&HO=!SeV$I(^syrs)fll-kRT`8;lo6_ucLLLc-FH zRH&M)vQaOWgcjd5aTJ)+B_3SDGHFG=lqny!e4?(bS=yv=ICNf;b{dA815+N{E)#Rs zTKDy8oVNOI)u3>E(M8lSyNyFF+Ng<^9It{Rg9g3ypLOhhl(BkezluQ;5<&zcqLD4w!dtl{5o_*p5~-kk0U%*d z*FvRWfh~b{x^?|aW>)r=yxNb9NtFJh!ToFURgIW-9+%a~8saM^tBxJa#H_bh58vwS zP*QMM3l0C81!4Xc?KLV04~2T8oRWQ42l@5~Ak?=gQ(! zyrDlD&()7`&56Qm)N2a=%Q@Ha@^3$w!V0BxT$cT$&ZQhmbVk(14Ao{0WiFa6v7$-* z*e+4LT45F=sqT-uATS++jEvf{=jLJ=(&s=xNq1kfCPfSCHib7e@q{Emo&dW_RS(?*)FDAR^i@KzJ8Syo(}G}`P9w}ARA+y z#yL{o1ej4)^V2!Owmdgo+5-O@Vj;IKnDp|UlN}Ul&s4Slc0W+Qyj#mVuP~;%h(CEblKk5FEan_Z=mU;(Zw%UMqX?J^2eE=O|(0A-G3I{?$ zI13{GBd3K!yQxhRipA1_Z3Kts7V&L@vTNSg^|R5*GUgr1GZ#fM>fcM_PtCpqx@B8s zE%5y@H>pBBaSoM9fOfus=tk-n05)ed-*(aBdFLthigNP${Ip}@?e(d45oV6Ay`6?* zclEH%Cn^4(v|G9dDd$RE7vV`E(y2DUY?f^Q(e2P(FDwG1MmWb@>}DafVxpl?^gJx5O4c3>;Djhs!7%$b9ISio8BZb7yRvPj*0qr)-+2Sy^ja`j=2s@2S~D{`p-;}5fHgmzR{|GL0llEs+9siufJ^H+_c!6 zE~e1I+$V&;c@8;fApGiP)8FVWn<;Q^ZHAMxs&hD(M)=RhN?bX5+u){QxrU{9)n46O zlX+#J=>`I7x9Juxp$Vvb0>8F*U~QRQCW5O>+4j5TJ-MimMe1KAG=<+Mo?fmGB{dD^ zSu+cQOd%?UhTN@OG>xtGfyxjIxH*E`j2o~tgOjPMpQ_=48X3|@V=L6OsCO3bQ&1w& zhOLXnBlRM?pdd?uwg;64qsGVNtO)vfN0SiThNNa9vmtM^2&dqRTuHL8(Q9fS7^*r3$EA*w6vA6SXJqaVTw>?C>t^!B1fOd+nF`e?hyFSo)Be)Amh7h&ZTf| zX!Cl3;kJty9Kf|Eajfgz^F?x~HvZD;`I= z+}&83#N}sMQnPL=Z^H-90x|cw35McV!(@4gvDgPMu{#mFa!e6<3d~Tlsw(~0lut6& zg3Y0@MP4 z`IUZycJZA}Few3n768EypaBQ__!XdGue0pZfbX!IoV@g34r@NL2B?(MT%O090@8S& zkMZJS1O>7F1m7sL0q9$IvqHno8EF;@b7EsLN;zRY!=TB z*#n-gm@<^9m4`?_4kd4RQjr?+$h?h5(2P-q$okMInNVbqnZNT7emJ2pcM73t>xosH zIgcwf^SI!B9tXJDozmB-8CIzAx}|ibRA$QT`6MQ5$3?Ei%@^Mg7HB%cK9Fz)5(5X4Q-VZ&=(G zZty)LZ^BXhY1JP{gzIDf+(0ddi%GVLgh|9Tn5+p+Qew5=%KQGWfy#nN72&KPm9)^Z zTbcG0#5Y&@Q>`(ApY`N&C0`pCM>Kd29Fbeh&OMV5V-zA}ejB7_#i=e60JZ6i-N3F& z%I&=bxT`G%#8!8hP>I-EO7sr_Fadtw@V3OyJiCJ``lIDo%Ggt_ z+AJ+8<=ir+9K?uS*yYK5k?diZUtRcH*DbaVc%!b`p*I#;9MP7AeeB01nFcwN{pt0JO=|-$!=$t_{IB)AQKgIHFv`hVuS_^ji*Oh2>-Dv9{yhldC7t`Yp$u^BX zn|8rIv=@XCAOAc_*l~1hB%7x^T(?|!($?@HP4XJ}<65Xbk6GE=EGNhN5h%@II@CKA zS}e}l4<*K_n@Wqw%kT$9x;CzY;EH3ujW--W95o{|9wXE4qLrA}Tx%4U1hC#hL?dgZ zssuB%J+q({d70lF0(<7)I-aBOu4ns5d>`*y+o+C<*@E1jlvF`JLu)dui0X9Jh7BN0 zHF;}a`Ios5>)(~d)~Y!hUzjxO15LQHV-KVJn@m5Z_iX~1wDrEInOxQRKh_j z2YdZtBxPdt9#Jk}hyIZd#AN(#_HDgt{#teO64yvRn(1S6x&+PrwG@aGHYOw989<0! zv$P7dpA&v%T494rtpcPZd4ySb`x-)Vs!$nQO=de_Ln2(lPfkfQaLK$2HLo>xf@DDh zCNnga)V`1Lh^_;1G;`j&m~aI0(rGu<1Z;w;!7#+T5?q+1Qx+PX7Kw|b)<>l}T3%Nr z+^ocSLDIRQ1fR`TtS(En3_gVoAcT(K@HRG!m%+f=MV;Y= zty*i~$L5uCkhzcL(QTP_@M4M~<_WG=pwqSw=lJ+V14AGaJ83(dNO>`S`lkc>eafEd zL4$O7q+i~&+eEG~jq}Tlf}T*vhV;^Rybb*F%<_!b5pi~6=Oh{4>qkPIU1R(x>KxtF zE!!S_CNnT2g?z34Uwak5DglFbT-55=lPTH-i#Ch6EGZHVz|G;Bk(R|1GWPYLMyS$) zeci96*q`RQMaIpH`C&?9K>{b;Y-qOWTpgYpWGBXPc(!x+JAaw0sDA6{V0&BcUI4W3e| zP@%+O(#G(Em)hf(Lubzo-+_R=lY7WP z@gayh$1yl=4zB=se5`F_D~bHD-OXq0Ell7wt&+pNl5grHxLvjzlfb@iwfolfo{4M9 z*9jINX#*McBk|?=IbFuU#4d1?YVIt*GjDs(P(MJwDQ^$A;@Z`J3;*FZzHwmKJZ9S# zr9WPKXIyZa^}$cAw)8!J6n`7fFf#qIcZ^;wJ_+xF+ne-iw-BTDZm^TJhvVZweNG+D zr~aYE?2e3QSyN6K^=XoNQ2RqK)r|~$MY~^ z-vsg(z^Bsn4VdJHOh64U$xsEE?+&A0^$UPzVrS>a6BWs^WLs1_fhi;Ml}k=Fe!VC8 z?6Ci+>kEL>W~j4yx+hFkZuSvhu=G`KC6^w(>)8!`nQ=ADtp8?ARXD-UaBr``hF}tJGwM`j9VtV%iP31qXtfX zYdG`WS{biF!WO3uBAi_KM-80V7D9PU!_OyZio5agoHqrjz`yP)HUY$r8-J{X)igD@ zp?ARzFCxC)QO)HLmpAC{wq7eu@8A&@d94g*+HMB;Qbn`@TtfJSacQ{Ox}Zy;bm5Az z*92bQ3#-~_kC|$CBN1~|hJY<8s2-}h6Z$t%Pw<<&odG)(Uy^7Zb$h_+ij5YyDD-zy z6;WiM9F8a>F_=0VY52?7^IJdn{WwI4DQz?nqZfd=L>hr@&Om9ND={~6y`+)-dYc&3 z1rkeW(aRg;s%<4bbK zm)1+gMVDKc%=fCL75CX}6|QLu28X`lD^y`@DM3FKt$Bg2C_D!)gt`))o$7)UE^|DA z5hCC%j+giW(cs`Tm|!Xm*tb4!x-l}u$-)rmt;Sk{QMl+igx|1#+`nk$x{FAgu*G%R zF06~5#Pl_x^;|b?>j)Brb~F^B+Qawhjep{K<7dgHXi`(F>~Af02A-BMpt%==Wg3Lt zhz5PcP3+5`rd^R7z9rGG3o>+AxK&vDT08R%7nQXi6F`F}z%7Ci*8HKZ82W46g{?5$ z*&zdB=R|Q2ZMLmJzYqxqlYXdD=Z?}hKAN2EWS)Z&x@$C93Ar*$CPGfFji(>j$eJ6V zN5*)1*XDfrEDQX)Rk<=d^tPzV&REnC$-}-HQRRm$eu_DU!;hY5(rf(0NwRAzOH&C@jREnzupKAvWK>DO4lIB zzZ{SP&mz4cbld&w?_jsqRLgX0E|pbv0Ut)|Nb=CaBhqZ9$-uz?IZ@05S_aRTcMy)I z1d?M!o5o$!f0iM$BpIdYr$e@EbbTnOQs@NK^#a(3HSfmIR_=)7y#SOm9!VjtT|zmZ zQl8jZ&cngaOfLW^MVJ1A_6FXwVP9G2h1avKDdv>o^Gw77^zF|6sk$Z3EUXyDjrM5oT%lXAq}|x00vns=jBOyp4!0+IV41V;&2yPz-DMvfYRODs zZ=1NrT7H9e>U`+!s_ZxWLU1s8TdbIJ*w-Jv6|e^NO*3j;TU1%;IhZ?@*ygAG3Ch;KmS@_WYO4)MufzYVOU?0q&OPJivAd znE$1QfEuf#)mMZP=YCZGAMQ@*rdWR8aF_{5ki?g{1#J2CHpj*(v+D)i-E*PVf>Ws1 zdg=r}1ij)^z=y-s`l+jP&u?d1eSvp0)Fv;0_y){7wV1z2GNrFABx^ayb6$8g^LUgV zQerD3=0P8Zwc@V`hHWuZ#9^U~?o8H;1SjCXDr0l9nSYQC6sVG~q?%KG#t>>y{@TnR z&VyCz6Cr47*$`{)#MYi4Z0r=$-dXXk!Gz+rKU@%gB=&{lGx`Hc^mXnIV+27Cj<PZYGWJ^5V(Xw`U)f?4fv)x z{vpC3_4tijAr`;OC$GGtxZq?cX9U$*~^cQO(VW+bA;{qWrxc7yTMjR@~A^59+q%AvpTXJ~fDY zubf`n_4O8c;coPcm%R8db)G=ndEwh`+N#Hy#IzI2#p`U z3>UsX&w;>K0tFJB=Y?}&F{3itq0a&b;QU1WP9d)5eZ1=;Mb*P=G|0x{K+&D>S;P@G zmBGplRT(8yb}apm#SoND;?=cZ-+g(uEuS`_H!yFv zbuefTxZHMg)kERZ;7~-OqbGi;HdAwvZIXl-5I0gqQF2|eeW7R_Lchu6_CwJ76TYXx zF7%d}?jqMo+_DQcwP{I{^_1ZF0?<*Vo)=EO(&6R(oKQ`P-i+g(3z0mW{ed~JS)qxdwhOL?y+E)(^wJd_CGaGvhW!w>Kc7D>O*_C{gEucSKsczLr@2noiHMkE5Mmx|j zW@nYu`_k0i8--!_o@d$P&c&4Dr@9bUr&UpISu$7u2uY|agG1YwGnt+!3B4H0h<~rotWC69J*i4^afT z8$hM=$$lW~Ny6rM(im#`B_a)Zc5_iIBWsun-gZm53UJo$CTxUrwH7IsH z4Lhr99d60EJQnM%$I+=4C?<_053_s?SEtcrjX(|ZKk?N9JW*p_%b=o@UFzOvA=1( zm2aw_JpYJKK7Dxf4Y%ayY`)U2{2ns=4-#GMKfp)B z!Lk7yj;ya(BQ{^9REVfQGgxj8L|@kn6Ta8BNRmNoPI&4T}U>k-o)1O zkocsI77vN+J`R>1JfY2TpVhaD+#v6;?S~F(*VQ!+ia(F0vi2}s!Yxa`RonHcH(`poKL2j|u5bYA{nxcbLfGf~z;(y_ z!aKRffdJ~&K-!{_DR0%J=B9Y#rmnCHFZ*frV=c~0}WHk-lUXlE?|3viuM2%=0i5sl0U>$ZmZG%rF!%Q;3npI zc}Glfq$9g6r{lzhRnoP3a&Kd+j|L*CS0b`)&Jz!`C=1hPYai;(f!Wl=k0nglKgyH) zfy0tXnMSXp*2uAA@D|;hx{H1f&0w_ON78ijl_LIdZ-^h@ZQH&Q{%{JcJ-L!bZna`B z#beN&ipa2E9aHnf5TW8hOnBROe)tS3ai^bJVJZ5gT0in^0@4mg!N!3XJl3=^S68PV zRc2d~gq60U4H}tHrUp}eQEB9-Sf@_vii6ZDuI#$7K^zYBU^r31rTju~gQZ7ZbteZ1 zTn6Q}H7~Sy+HMfQrXt_?>Dj-xFUBFx~?$&W% zY@HiKblr!5oIW38bfc{TRExlg zUdEp_tM9c)4BqI3h}fi7fBt%uNU6@DqN=JkdeFQ`!l@IYymE^tFwQTNX)7gQ;vB@u z$@vlecV1NNRR5RyNOLPKWWZbm0GafoL4P;CizOAR2s2nlnp+7wd8Pp9Kkt%DVb8@E zr=sd&yK^1hG%{BFw~Zq+UW99Ze@Ecn&vI~;_ReOi^^#H|GCt=TR`I1JI2rSLrO`V# zm`RkdNc(p=NLk^u)8+ylik;PbyOf@He@Q~p^;ZAV=$4rw>E|<*9_O5JbdPa$0@qjK z{A6rI2^ETM*;7UIgp$B6ukV?kwJ&w9XFEc8*%LaZlj)8XF@IiWJPcDx@^HZNfiM_P z%TskDcbj$`+rE@VXv*IFwwA6#FC!T@rsdCMrA{J{Qal_KEY2-TiR%nGZfh%*K>d=X z#k6QudcNh=u`zq`>o<{j$e4k}T6Vd-l~0Csib5T62ga%O6cNBA4*-*jy5Ud zQRT{@6bv4drUjxqV4$LXfU(VkOP`}tKDi6EQ_Mnma%YB;`dDu0q&xWGJfq7w-}?+Z z3?FC`s1olR##Is>ll2@)k(qp#D@fF%GjhUo@<)cLF#xqYcmf;(?fSRNt5zI>4vnoAl-i^b@!1~I zW=^}qnEc&UcqMu^@m)eE@pPZ!CfK>1fkSnep)~%VlRPZ{fpz|fVQgj411=34_1h2E zHx=J_^FTgkJLlt0iSmw}#)&wmPV8W;=pt9YCBcH|u7hpG7v^&$zs$NvCLuRywM}}8 zdcVJ6mg~)WtY11!=a?$I+}j^8R%zL~`OK?)toch?s2XddCKdOK558kCA;$H+U9e3*AkofEk#Db#&j3i9_0Q$lh zGAb3dzS21S`7r+r;E}M0DE3V;%!$K^?7~Gt{y1*tp^(p_LEL*TRcS`Urf;}~6nH=Y zpgn@)%PReo)*j~v^2O0XIX-Aidgr+BCNHIR8_McRza3*T@ZQ5&tq)ooBt_u7-+oQ! zH1IiXO$dj8JJGDS*fYfx0=Gi`i}F@71_4igK4TT+aCWS~jCXgw_OYvIuX3Y4_Iy?N zx0MhE9(64@M=|q$yOFId3}PqpPA)2ugIpB%dEBBQFkAE|V-OBQic$M4j96;A_oyjK zxxs+)7#!5sQZbiWj@}%Gv|JX!Ut*AG%8&1aWsH%Z_UppwX9|TcD~iVXP`%o;?^G7q z07)`A3nD}(Sccl+#x0V+JCZ>0dy1sZDcAC8RtpKJeYU-rRkMU`_-}v1M#1r3=Zd6Y z0tACNdApSDU7x&m3hOW)?|8mZv(j-V)?Tgqrt9g^T4hn-DrPkKT@5ZQn^KDRb6z}u zQcD?+OHxm=3D-6)j?Z?Z^;%EO`v>FX69{1D%QN-VO&5)}*%NsCdrU=)vIAo;i=|u6 znM2EiD7X=Kmw@?1LLMu9%R6nS{J5}`^@xuJcv_s4gG%9B+iT-_5qD$9O4NCD`0DIM zYDVbh;(f}OVx#2rX(6jOX%35Ry4lGyO?WS`?@p{t*J0yb(>6?AyVYatZ1dY+$0)PG zKkaf^qj;bcwaBdR>x3{$h>Am0PksLhKTKW6_%SHCMvN{H!4ECv(fIUgH}Se%r1j>D zW`2Tj)4L#}BfebZ=PP?(Nypa!A5!8H2dq}jqswE-DydMp9adh)=S3iSHzNX~C1!}& zQ_}F3bSX^!?3_D4-NMAkRUx5=D1}%!Tdl76M@7aX`ifAM_~vn@gny~Ni1D~eOS?f> ztrrB~aYMcduWyBIoB2JeT5;^~4csvYIt_z_4wn5fik2UU$4(xbS5WsAm=pH@dC`c_ zw+T`v>Mmk#>^eK{1Tvl%iuLr1UYV7@{^jfxut_p=|su;`2*-`{06ZRr5M-Ca&gEfnJ<&)g6A3AbN(oHD! z)UYP(S5Jj0s;`JVU0!j=>TkW}b(ypFW?xM6j{`b4}>(7{zZz2Q>M zcdg8-zXMftS9rDWk~8Ws)(!Dv0_-h^^e4zKC93=GJmnpF30~*$Vy$ zPi)ve=I;)r1e{o*@Js0UIoetk9I_tjXx?2m zi+um&_b}K-Zx_?eD`u+=IN^e!(9Q0PIE=Td2eSO&I z$AX?%g1e}n@nF5y)^G?a!81+KcM(+O@u1|oSiYeuq5^}69^X$Hpz#{Q@v};+lu$z%4jRS}$2>k( zZ1TEPPDF$5yE=*c0#BE^MBAUk`@SXZv!dyX)w_sH9t3B#hn}?iAL(3I@iS|U_9#cG z{8dt#CXuPISl%ao0cbp^Ii3&d%_b}ud<>W^ByiLt_Wu)Op-BN@bFioojnq?%{?%Nt z#TinsgPeBp)Ui`3p;V_wkeI|~n|VPhT;^! z)b^qIq0yz--;syG+Y|~%`pJtMhzhl{aUwDgXfNGiZav@c(9hBcuCp(Cz!{>+?63^u z#6O7rKoH_dAVrgMdZJOoCGCsKC+48aim^dTOeVa!FYm9{urxBjVRhfM6koTJ{KJAGi~lDx z8^eO{d!dz&lzC#B8sZ@m$hOId3pu_@JL3a-!_w#K@g}yJ+B!6jV^=%6PLQOahs{m6;$g*B@G?y;@bfxS^h`2%xc{46K6I!9WrXi>zcWU zMMeL7(&53=gZc5zS!s|pe6nF|7}ho^>|y+wn=DKqEy7qphbkj$GaL&bK%1u89#Dof zo}X$*0wxPu(t*qq9NQ1RV+u3jSg|}$LD|{*{mI&UzU`70LKtlanT1DW-zPNa{I~!J zm7@Opdt9#@CN-r>oUtk!2;7nQb}QXiD8$;+jS=`xV0p3nnDoMPz|IpaeX4TOenMo) zw86co4ON@o{!I~lCn*Vd!|ckO1VA=Kp(&axw-yXMQb+c^>aaYykqZ2^K0IHw$K7ZM zJ>o@wUi+)!&8+a&QwWhO_o`^6J+zja;B40lI&X1TBJ>OQD<_G}9&!^WW`Q80O9gpE zMpMsEF%oAw+2OvVlbGNx(pdU82>qDV(!Me`6?J_L5UQftp2Yqvi@QUcyW`C=ZMlYv zw|2kDuCTV~Ua?X6mO<&j=^T?p(9$yPZCSjuaQsK%cojH0K3i0RBOk*yM9W<6yKb@Q zqjBgZbQ^%FS7ITJY!^ybLWvg{-N(TV1eIciHjN=E`+$egDB8PvG4-wV2Dv+|E$enkWqm~q(+?59 zTx7;5#~N&N7sbLNwyz0uqz_1_GqokQ`9BYMIrb@aEgV)q-$dM2SYQ0?ZvGas0Va;D zmXX_B65#U8^um>O)1TqA?7-yZF2)3=&}?b>Mz^_d^99$SC}=krD~@kvo6ip_5%6W* z%36$G20nis|CIcG(mb~;mgCA~DPM37Hwkhf$8-;(Ggv5VXSb9bc_1bz{C4DKuewq# zmiT&dJK|rcP)1$1iUVN(6~)JCjfq6L*<;~a=q^{1W95Ym$_qel5g}xL$it;{70V}x z{pK2czV#5`{%n`=*{v1mLID$!;qL6`JKAmZR{iaI9O<5|7J?M{$V{d(moq7HHX+bA zW+XqSn@#k|qTXD`I$A_er%hty1h0TGDzS_zt;e*1=pi||@j^$wa2R>MkZ&6tRi%2wQt?Ge*H%15SA=;jQwPLOjK$b(PBTlP=Wx_0r{@-i!FZ??+u-@ z24jNq8ZPpR1AK6-N(EhzR{AtJVZ5ZRWzB2afRi?p2`6G((~1(3e77?$B5!mNRUrh9 zN8f-{&KH3A?2PS_$;4=z`S^^4Jxhu+W? zz0n6_b>-uG3I)@!x)2PzNqWtPW5WZx@hIsO(B%@EBQ&UNy z1zOHw*3?41V?8;E_RZr67izk+n)s`v#Nm&YaDLz@+W*ted3H6`{p&iYJP0TVQbn3b z7f_^krPn}cQX(Z3DIs(SO+chdk=}b~p-4*tp$O7JIs`(MDqTQ&JN%!s$Jt|?vEQ8c z=L4))Yt8kW^Pbmz1*x!As9pTSkU{FQsRJv2AZ!HAmbu-NP*1GQ@D*_?UJK+rg106Yl-YdTA37!{&6s zG&5hWDqE^UKy@lxEW`TZ29QrW8OBFKeBk{h9aI^8IQzoRrAC!~T{bB=H`&6d>B1e8ym}K*2{63_E*N%&gg|nUYaNowrWc$_xohCK{ zCxW{p_owpgq_0dopvbMsCJZL73fy$38CTVSnL-@jPcG7{oFNkTJ@@3aPrJw*!{^Qu zHM}znFM5t_`LyQ6Va%KKdESw}+?7bL!$}1Nj`V-4z!0BY(b^pBYcMP%(iy^!CF_xE3wY7q9nMQ)rleH(TZ{L$ndY6wFZwp=W`QQZn)t7`==_ni zQ%aoc;symIF4*5lE5Jv?mybm+hP;no6c~h>H2izL@?XFopS_>%k@)3$WWQ&YF_U2W zXy&v2sIJJ-$nMp_qJb#?2GJf-!oSnTHEhK?Yg~Q~Xc2l5UO34f`+ ze`DGKzd9!DmUQZ3j$ALYpz2x*P5Vl4Kv#W0{-}W8y+ArZm(0 zJOMD_4BrR+?%T4D$G{#|=OyV&Qr%IlOauB;v!S=Hf#f%{>x^s|k?)>_xKlEk0opqS z?ey*G=_0EcZCbzG5~64?!_sA$!VH>=dZzFXU8u3rj*20gkhPmi?=4(uxyrtncQEd* z$KJ0WJGw7P&+&RibNyUO^FIqtZ#x^U^Y33=?0$^uB{X>?Il<`a8qvb4S1aChN5uOygB0_K^RGHqIXu<$Y2nv4;9R9dH9!OpeW%vmV-sR+GH9=q*Uh;)KNs${o#e z+?VE&<})0yjr61C6!-K;m$Bvk_#-F#wunOj4Bdm^+?w;^B)g&?a}d3!f^XppMSmI^jN?Aur}%$VYDJ zm1j>?tz7rHM_4aqv1(mqcG#-afbE$ur81`uGw=tDuu!!(oCqF91GZ#?b^5RH0&(hM*kmv^gblmRF z#y42e1aOh)=LvVWT7Xxx`@tgFo%k-ETxD&`nfq+(C;FsqXDusrt(n*n+qMM;QOC|K z5(dX`PsCnpQCp2Y>$hxzmQ`{Mk4p9Sm*~+u)s7w=*Q{6Jfy(2Kof34wURbbuyhqZK zm!|vKui8`_k&2T&yHLr$(&>!%g~>$&FGEi`)j0=cc$}kXq_{?Yby#EeEo)}I2ZXW> zrY#cxxrKvcBIG})0DK7a|APX9C{-Jlu$x>JC`lU*h)?t|p|lXe0a+MGSu1<l(0U7L@gviX6XC-iopKDVJXB0f(xS6g#bKYksgvFb%9*b5x zs+!t2PXD|7|Hau9*D?f!8=qoBa9^38(hUuyuuj}V-4^or&d9|IzNtfnrgdZj^;Poy zMp1M@g3@idWX}`Kr4hQxO7aXvi9rlcR5|1Bteoq;X1$dnB1ayjGfa-fHn z1=?W8Tbz9o@}Z}@z`m`NYk{a6K(pj6wpMc1Z5gXDUq|opJ%HDZXeG^IVHN#aPIpjJ zl*?W7eTWUo!d}H_oV2=D&GiplE|(6zV4V;3M^8d{)0Q{*Ao%XD6mq%o#7c?YQ_g{D zQdz|(CDR37(wl_II$|k8Jx!2pK07sPc+BQF!WF?~T@2;{#mo@&H*1!FTin@`b+!`WP9;o<_(%?-adsA?c0F@QXL*O5f28LFZbFjs1 z7~i|_^^6zpudLHUqJ8^uG&l^NJuSOKR7NH2xyAF5`jqR_Sv5^wYtJ=4L0!hHL6~|N z=}~XiX2wQ=T9l<`M{2;&7nkw5MkwUkby=*)@QV5{A1PA3z(uI>eO^&ZTUeAarN)Z> zC5_fX08Y~U2JqP-6?({`@2Rh_D@v$haSN#FGK}|Vu8s0PP_gR~YycmJCK}*BjhyK> z0Kq>ZHl=w+c41nke7R*mi3$MwIt;z`*6DT@lk+McB&hK1-E&+5m2=9lB#jFRL8Ysn z1*12Wyoco?5i?GZ(iqtL5Skvtp3*y|YQpUjB?Qb`?Pd7_7Wqm7 z*=xRppCIU$b4EJpcf|^DK<8S?U&~Tp_VB*8L!3qZTN4jBoBq~mwMI}-;B5JymCE*1 zG}^VKf9xyx=B^*j_varuUpy+ak{+D>Z#?`jI;UvK#NLQ%W?aM?!?Y1)>^A_u>eoed z{n26!@d8hxxy!-5uVQ{F&gf^mHxxUSDp)hC;WKFZmtR5I9u|FVEVWw|7BmY@cNqov zKK(Q4h2gV6NqH|aNOo{W)675~!qR3GtL9 zOIxl?jQ+~AnFntQr5+~~hDOknOaKr1*i~02& z%kcmWZ&`Jdh&9^S;9w42C110Rmbsq~No8u-(0t!U#}^4YBuM#bW=R}(<7sld0S=L; z{8-bkc9B(ZD7;KI^9E3-X0(OdhZpz+v86Hbu!#L3R4_&h#kSA%GD;|;%iYg&xIEAF zggeAAM#>6dD>-+XElJq|Z1}gBxpwN0_ST++X%Y=Gu}X+zHe?9hG`u4ip@yO|4)KWr z-;$MmG7!Zp{=X!+8)JjF@sy&*{kwaZH>z@SQ6GZ-c6G$tx90E&1D^dodu9Q6DNPT z)xn}2bE$~H1f9P%5V@kJV1JE~ z{OB$Jv|uH}i+a_ylf+Wpxl(&|Z~l1)qL}RBF99Uw}{ z9?TQaB~X@f;6xmZ31?5RE7j5S%iFZi&DsaxVI+N1LZ`=~oXTOk(Z{rInVRWcAWnuRym}1@%2|NpUc)VdF~(&4jWjW zw6|&a!}3D1l2+_m@; z6lsyDE1DL4ptO6zsM*>8jv-!F{Bbp>QJrCaUR(?luxj9V!k31~tMQG8#_*%GkR0)qo)Z4mA!;E-Yn>iaJE|dD zZV<6xQ4;z6#4UBLZj5kcq4eVc*SUByEy6;tPnNZlWJ&od<;P5fg<{@OpZ8TkvQN}L zW|Dkd#Rq=+;S+SvWvK9-{PPA$ z9oh`6cK1+k&(1Q;oZ(@WM-jEpJ)p+?zX`&U;R z-Mq+5a(Edi4>eR{zWLv^#3FkkkE0&gfTWcGVZ(gAdU-cVraG;=z%?1@^h-IA3+VrU)OBu#`u*N_=~Md} zk))=3j@;pvjI>+NF1=oHr4OlRuYl7$|EsC!=TRAPnMPk`C=ynMK=S5{jW83mn00f= z4k?|DWZEk=JBNaxZ-ITsopcaYwqc^^!9)Kob!(|M)OJJ&_Fg{*tf2?e*iiK+Eet>d z$Ptjn@9&sMY;TF~WyTknuT?bIavcf3xDwL-OSvn=iYqtxnEAT7+QCDbzw4S!J+R@@lUK} zg5ObE@D0Gg^Xdyp=IoLDmrleG$}NVgPu?%)!oOQ*nxM|Nlb^cl1A==GXMddA@B0ec zG#LhHKCz2Q-P`Bw%6SE4#T}*(xP@K;OBk?Tglt;lEi94a$Yig|JZsi^p7-k6HEM8` z`%*(9BC8AQ^*+Ok;z9tH{B~%E@e{Wb0YOt=(S$z}sfe9HquZRCPdaBag(u@{`X>5W zSj*U10JJA>){V7ykz(wZ;m`J$q;rX>9_JlYH-N_Stf=K{`#l)i$?9W3U@&3_330N_YC5{+yG8luO<|h#Y&d-4R80-0(<<4_Sx2qicotQ zFGefZBy{%54p;F6yJ};wZYx5|`6=H;)@}V^21tAZcox`Qt(1X6l`!?LGOz1+8}F3S z?3&dc#p<#i9J<1vL?w{DcWXqgH&iuHLq&A^$1VeC!>}#s%(I3RHcbJ{ksZhkr?QBT z-eu7i%aV}~tUrLGA~eCFMLm3o?RjW#;SOr%wTqz16vYe_*MD0*WwX5Rb|4->6zR7|-o--&_)1Bi@6A3e( z2W~W}I@T`;Y78U;-Bz-2+g6$kRk&WD=sc4j==8j6aal@Eyr}VRq0Na??_-NJNCeYm z=`ch5EPZ&lBgl!if&7gVB=EIM26PtbHsiuUAG=Kpnb_-a{ZQHI#`*SlqgGr)x~WoL z#jkRL&H_Kjgy5=ha|T!Z1S!{Rm;CmF8-Uuhgy47PQuL_%%Z8OYu_=|)34_>0$-E^T zb*axuB}p@fQjuAnv3;YUogB|=sKf;%15`{{&Du}0Osl0R!7glxB&b=h0 zcpn}*WbwIVV#o~Ltj#%Qwc?0Z!~|5cHH_SHA0|+B_^r*%jsWbWw#Odd&O>2JB0)rN z%N-0!Lreb>1oZAmuF=BVx`RB>DC9+F0CuPUTpIT50NEMVy;x_v`I9$b&b|-GzWwr2 z>$QPQ-7CrM;X+?@V05>2208V8wbqyK>q2B?7s?h&w0k%H+-X*kLf*EdcE7!b4V0mG z&Som=bKp5T$#wG-xp4G%-T(BJ{#n`wj&`zatPBMAC5LmtNN`wF6+6K09doci^66#Z2{4%eX+KxF&HOU< zWY+!g@t_Zp_(J*Q<30Ti5g_{My-%NdrQ}>g8*&4X*(1C9a4awem6~kyVSU<-AUBsO z1p&XXxSI&)FBKKFCM+%#jUn-rvL%oZP84U54bO>t}%D-8ppYvM9ZhHJ4@>e6>saYAB5oxMJZQL>6F33+Vkbg zQG>##flH|V(03jVYSr6(nUwo(O?d0&cTPZSOf$z8;Y)VK^rOY*CIRl;Z}_)fE>hj~ z(5rOE0#3*I%CcI%C2DG5dBhj*v;Fj6v1a276tT8lU&l|X16TdBJcrl~&SElZv=f756j z3TYPJKGkpJu@#5e-HLRkR8_gBaBOh7;o%XeME$tnt2OVXWVunY2-ELOIFnVzXYxa1 z3(Xz@Z4OAJr-KrHYQF7Wd?&p#o2e%Jg>!2!?F(jI*WM&M{RU8Y>whDq|4F?>h%o&mWULRX+e`|M20(8?U-C@C` zYF@ATfdMLc2E$)(4At@gH_p~xVl=p}BGV|c%d{!;e%_PHSzB70V|~3((`+{YxQ-`9Nb4k`SbD$qM32lM^7r-x^}uMBSYo~i z&)3fo7^Td;N_@rG!48I*puYdL2qfHC;=C)Sw~%?wV5lGNBM;~LFzah^J3f=t_naqw zlqYgGNRSuQP_`h+H!7d*JMXm$j<05^8AoiYK2I=&4mPxfZg;vo^5tP?UN?y8ZBSeq zZ2xn(0HnB`qMuZMF@J_PwcvgPgsQAAr2HH$XZ6D#Ny4l)8mL`==GvBA3($9TduS}Q zR4l}~N@cfDgy!4;jG1TkMTy23MaQ^E>o>XxLd^}<^$fOONYd9rT(XTMlcXl{sT7(j zuJp(zmX=c2groa7y6iXY5lF7WMN{dT4Y}$NQIqUu|`dm z5nYxKPk+I*DA`wN5t5NCl)c!@hYF1g#lK~M)`hU5MjwT+vRNVSs}QS!h~)lhFO4_# z5S#1N0|?oDAjoqo;X>TnEgCL@H%hzv8v1`|aFkz{g4CTAFvL=a%2 z$e5gi0F%RyXPr6sKAc%=9{#s`YOk&CuKK#Gx>j%P-d%MwakGH`*3RACS%izr(T&sG z%E`i-)6xmb7#ly+X1rU?;ayGYwSi93&Slfaf#p(ANTj^=RR^s$}{Holl&eGO) zUw*7z;J+UDuLu4QdEkF`N7jzFTO!Zfz0b`Kfc>qVle?3fos%;yh?5&2B&Dc& zj|uRTei@~Tn1ll=?rr>rpS*o46>u{R_yD-`&k65;=6Mgc<^02EV7Xl0yTi=3;Eap{9Mav#w(X(zW($dHrE6QbQ!u#k^u_kDQkJ#B1&)7J zl(q5((DdnAsct-WXlYl;o_;v%3^s*#eDWe{xxt4Z zuv{O^j0$P1oWO4ktPLzCi(?Fz+uB7sS>=v^ZUD|L`+*GJ`(r|xv+DXXX z*ptO66^KBr>FTl`wL|!s^qd#h%kODD?Mq_4yu#{Tf{+q|-=I63~dZA}Oa|7_OtujRGTkbB`XUOF1kO4(B z*ow9+PG1i)^l%s}We+X!VM@{xIOeS`=lBGT{%f)gK6{u@{Y?7)&WVX6~ z8ce7)h=_j0 zW<)QhM<1dZ%I4IX7H3^#WG5LR1}PD-rk#7+(rv6tmMAw$S;*$6DT#u&&C+#*59q#B z@7}NF0Sn2Ew7XpW9@;Av?LNuQh*9CE>D6IBN`)m~1u32PcYin}%(arA>6_T2Y{pOq z#(R}|t+7G)DJ8=-Jr9zhv#Ei_vCZI=I4WiY#2%w^6uL!KKF>^XrlOlNCvH|F#*~t*oVYOmGis~B<$YOJlg4pGD5To0xWCE0-82C%bH1~Ote>Lp zJbUETG+3%QOvQzUJ_*@-bQV6Twu$z5T<%?kqpkLv1%*V{f=RTKmOIZ4uOo)TexQ}@ zk9vkdX7%|K@bN~@?djiPA#jrb9`sQY;gnc%u|ofg{Jt)wsqt#RJO>k2{;)yMW{N?R z1}B}|k)_ej#xn*=EVOnSh2`F$`9oCW2CyY+8d$k7e|_YG-gjI^Vh4a%>0FnKs1wnL zM`8ZR@E&JT4d4wR0M>j1&~^}QJ#TINeoZhFcYe_>S($qSNMi{8ezeJ2J9Go+p-|6# z+LsO_%v|n3n&a1gvtD2-(4q;Ose5S2+DU5l|iqj8p_ zti+Vg=J8K^@)iCPY$_NTjCvN#hss_okx2$YLiGV3$B3O6pOCY+_DFYF)qCl09U&O1 zfXn^3 zb13+%a-Qm_68w=xbd@ z6^3VJ$y1+(^O#oR7V9UjZ7IEM+eA~{T$8NQq}=t={M5rtQ=aOEPK}lMuW9%UM*a9| zgjOGZ>%u+~q6lr#$z!8Yhfh>hmK7?wtR+G;<7-VkY-g1;BSx3PH7*bZ7!1a~t6arB ztZOXSa{bc>qc-s<y{`4CL|`l~^&M2)9xCj5^<2p(^cUAnUmxJ7+=S<)?Ah%x z&vVq^{H;b`*_5r15kwZtoNv}RSSS}}`a0{CLvc}BDFa64W$e0T`DDg|5xS`O9z#`M zEIP4yC(ELIVMs6kYX+|#$Cs&7KiHH=2U?v5Ra|dkYpj6#ajv}v_wvO3aGo_@g9jqv z=?9ITyg*_<o!<>$j}!DFA1&)t)EYjvFVcRgZBV-@S9Al&AViX` z5FPP!NH*;6ouWO7j@bNlF4cb@r&-MEZ`I`2yWE#x>!n$@{1oW1FprDcrCHZKFFvi_ zUFbCE|FNQW?3Zmu%9}%~}e(6h{KRz} z0&QZVG*PP7q7V%Q_80SL9?RyfNKJcfZM=D{>|&odt7~gUGcnjTPoA+*(#oz)bD&&{ zx_nt*c8QwW4N~+y@$v+gRspjE1)yGg8z@PTxCMP6Huq7e5i_8?$uxys zn-a)Ya7umL<+|z9sjq6nSufQ_5} zaQU&LJ*kW~sObSlZ4pm9idL9Jf5_w+UHmrnp6>^iv?kaS<6ssfsGL9UTX6&Mo4|Fg zY)8*Gqq);VG$iIKI=A?TSb59VH8>GA?L!1CuSNSskk1P)9`rBS-m8pKcE#G`@M`V1 zBCX@Wy)D1a+K3AB6!+}z;}tK#-VSi3sRo(-8eG97Unxi~LR=SLSXau*nLoz&xqW$8 zjmPB%puZ(59)uD>;3(p1_cO9oVVR@)u*K{_-dCPv(eL`Jic%4}l~Nrl_BBR{T92is z`DG#&jX+-0Qtep<=k|~^W!d%SF^p-ZA<@TU%Fo#1sT2xLtEpmpN3rWQ)25mj)g)V1 zEK1JlNnxYCv2ARng_gz;ZHiV=>@=o^xIDwM$}89@VKKR@t*d5EIBG^zPqCW2VQVu& z^4(YHr`>$UF8hPzFBJ;>Tnz^ZCFY9hIfsJo_#mlKn%QD!3aZL#e#e~rN>onWv?$xX zv7-~%c5jTjBJ>MySd(VM;+zk=M3W_qE1UG;Wk^Ii<8vt=sw1f4-Jv;VGb$fAvk+q_Un7BF~g`Zhv6eQ zmm)q>u-H85p`e$BWIA*uxqK^SKtpQL4+B`3&KFU$wEV67OO}nQf!EcZXc*_+8^EK2 z4r_j*oEgc^V+MjXv>Kky4yUBT3Yx*&GQUo`OR@2FKq}UIb*QuADm=+iH9><+>x{sr zVZ2UxzijQB#h#RRXpKa1dU_<|@DM)`ts)#`zv)NuaOTBv$=FQfxL+!|!k3*SqtSKq z5+c;){ONdd_w6`$Ki{VDBBfZUZgN9T`Rk7CILz$}za~vEw1ZZ}qA{Or?8~MiOWxyS z)5edr*=sc-hsQc5YN~98qPBOniydn%Qgr=XbEMOiWbbeQ&#Hw@l?*E6DxVTb?Ylwu zqTJ**4m`bDif8l7YgUWv>iX%YXDqyq4f0YRR#fXRnTwQcZ*o|euem+x1l7d$+Pw6;p7)V&!%U}C;j^ki>GeDXoQLS-Uzid3aw{SC8cS_w8 zl+GpizEd>$5}$v&&Et`Qf_CV33P}!AyMn6%(ar5AE`G-Ph!&MW5(C%hd+i!-sHeg( zrZLrJZAGw#1fM2#le4r!&j~^NlWc7RgclosG0G`%9iJ^+b&B(G*j)6MW3@ zlG)^Ws&)f8FoEArWz^@}XpnsIIt-*Mv~^8v+}tOg>q7lzO(pQzw~d3vh?i4)ejp(C zQqSxt*6|n^ZfL=a_I=)gZC+kwwwZQh3MVU?@*A2hQGq(i>xXV_o-{_awB4_IRioo( zVW6jGUjNpCR?)_aH6}xm1Hr?DHi}R%9|gYD{mA;7;g~1-9IBgYl%I!^k43oGvytU) z*i~~GY>|}~gUCXo%6UK}bsZgDxN({ZiQTvIqlc&0?UGq`X5*Mokhlep%UnCjLe^^* z5#cV$2<&RWr0nk3!btzJ8Xd;*;caDq=od(iK&v}Py}o~+f4mt3V{t`muQa81pkC4& zjGv&%dsu%+D45IO7^@Mb+iM8%nG&-YIw@4unb~4%iWo)x9=e=;!Vl!0cLQChU>w_Z zYP%|+3-h(}tWBr2)FIPYF`s!6(P;f0cH_hoS?FwF%@$AL;3cC<%nSu%kS7Z@%*^$b zedF)I_0pC=oe&e{uw%uTOG>6Eh3IDtws6~Y1EIj^?zyJtD-ZlVDvk+8U(MDC5}(L{ zEikk2l9OG=ug#Lc?C=zWlF3Q~3Vz3aN50PIdTiUw!8*er6)3f|i(4sY>~LK~#395X zgC2Zo`Jg?^P-D2eo6CA_vM=ISM=VoiUgq!1BWxP=ueCTB<95rgKD7x7=l>C4?i}*8 zFuiw{MN(aM@(akYgkWPbs;Tb@U3r(ChNUmC>btk8THRw*ka!Y-X6OeY6v;b90HGzGFFT}!m|qR6QhR@#`L)~SX>n1RtSDt`QS?khW5ebJ+xdNiaTTjk zOz)W+cutE;z-GGtw3HdF0SsQ)fXKSU|0rIQ1Hs>z4?4|X727sjnbmm*IcMq+;3&5*dX#8d`G|H{SJUwU}ycc#gfrbQB`4ZDNaYMgk% z#q*l6AU5}p^apK>DO<0nU!HNcm6ueNrj2@!B_>qryM*!}p|wj*AL%-B6?tjb%cw5g zSVBy$!uQLUlH4wlN3EX#Nox82Oy`j%ZcmUiIVDR39W9a*(5w9V1qX|XDgT1O&CRe^ ziO0e&mMGixK4NNqYq6vj(zi;ku~@4LdreLAvDufd;$Y}7+ScU|{AHv8o6#)eD5UJ> zx(z}c-A_DO#Anc-?~1CmJXN-ZXbuVVM)WASN~wf*fBH?H5o7e~tH`~bw7bGV^p(Qc zW{1VC?YRc6C*kyjmO<+wE)E%>m~ojJ#m0uDONDNDd->I8o)*u^X7ap2DPtzoJ?-o$ zzqHAGs(UgC*1*JRvEAcPe-C%G<~6u<=R0i7xr*6K$w!WFRnXF~~rphk!V*rtAH3qCj7P%j#SL z5nb2ooPvm+&ezIenhF<)55Dde;|9m;oRu%*bS+&$R52Ao1Xa!$8q#o)yb8HDam%6* z*3$eU`>u0;9X?W(RJun$tQF0JyDv(?^q@O5m!CJb`U#0G>*VBn`+?^9>&N$()07F2 zqWoB(g%hvHl!4#~gu?P(Uj_J=#C|by50;XU0 zY_C|f-j!D*)m#&qa&Dl})w*7X<28TC>7V2!8-;bld#sN)M{4GXJI{h@GkCswJxCI$ zjj(P()`yVVj3=L#QSC^CX^KH(4-IwcJ*((brp&mAd*GC+C{gzt08FAI%{eY}S>|JumWRtw=uymUW$1?lQ zA?ck!)En{RusPU%paz05QqD?7b_O$8PE0;!6VM^OxbV7}te&8}3iURUpcvg$$D|t$W|k6hG7Q@Y_KQmBvJ6K-X*L zXQd>u=J#ers#_p=B7ZnfD{mKlcN9MU^iI*b<3#DxAFvyMs>Q(;#pqLbJ@KYviS@Qk+{uJ8mo>R1!?o)f0LA&*DT62K zSzIY&{`$+n&i;dOUh$@Bo3tD+H_|q;p9H%S#NV&$2p*kkes9vSs%ue`mbnyl zmDly^%QiN->EV*+tJ;s$TrY}oC!T~Z6!fJntsw?8v!T43Wf}C0bsMR}SYj@b+@@Me zefdDb)>f7fvkgl$*R@#(z)_;G>&!!PlT21(lH;1R@yT%mCkOE_u`aJ7reB37YbYiF zk?vkzG;X`5YcnG91~ixTgj-iFQabUBp4-+Xc{WZFO9vp0r-mEedqEfKtrYX?p61)vfB(M;t$z*Q8we$5$Q}h_qG(D&s9XP_(8)Ie6N!GxJxT# zb`q55nC%@cfFJ3sKEgmMp3hBtK(rT>b4pqT*K6LaQWT2LhZ?A_kCaFto-yaMjzVBX zVhT8WQ+)P`VFcy^fk;+R6TJaIOwm_N6-3vG4R^UNGHSD2iG)K6^OZ`(;Um)-qL4(N zl5J)cHesJ9@yQZf-!2B9l|bd310KL_6-ru+{A06Yc*2o!kMj5?TD zlT84U_nn9^eo(szeDCXfOdU8?%VbogHgKBH`fmC}S>Q!qE@D5@G{diqXlIIr{FSw9VV;-#{Yq}Jcjw+dK9@UjQtc&Hy&@= z3$+Tg8(CRmiL2%^(h~D5wpUly{V`XQn>}Pd#asiI%`zuM64|$>h{hTFqWQY=KR3-Z z99OKS8ZRUyj#css@vQ1iw4sZa`hz$^bVGn~B+B;C4umf&%eB@Njcs!o%(Ct5$@~2| zI&_^WRRHoM*ku{*cT`#!o6Kr7JOpYotO+eaXIW^b3!qd@#MvC;!(|x)TDpcWIfVMJ zDSzZ|sX85JnP2=kRzB}+3vAND`L~GXT)QHTfCbAB3D+Gf#A1Z1)OAg{^y`@j5$xU`u}h zvjrqsQy_-J%@>!&vS7pU>iI@}xB!Fqe2Kj~Y1Le9j_Dkz$%#F6ziNpma4E6s3S4?U zYI1uJUe*(+U#ET&7Qi`AH5@3cUh==~&ir3yOZ;iIA+^tY2TB@iM?cLAvlVymNIq2v zNs&pSq|IS-!zNoibL6{XY+7giH9B#-tDpk$XJV}$z%OjegZ>|4tdJOhQu_sHPs?Ps8b zG7#l%mbl7XGxgg8K-HAglr-CDFQ|Y<^dPpc<+m&MzHKhN#*#>*$7glJ&*M2@awDJk z`3|Ve9r?bjm{Pl?42CAmWPR>FVy;+$v0|QDgpkg@XuB!@;TA+w|kM*Zftb!(io>t>uMbbgtkoFeixUr zYEO@0+O0eLF6|!&_iV}KHlRqw)W2FqgB9y%B*?kE_0kS$V7hy0S?}ZYS4MrXYFkQ= zrmlOZjQINPPT3-ZZGI`){gj{2%DO2tBGJ)D#685&*D?Be_JX2dwR6&MXEg_OgJUZ*j>;BXm_Bgt@P9> zG7Z<~HPUxgiBam8Mb(J!u9PivNaz(FTwr2r?>c738Yl~^SsJ}u%*?L<5*PO8z6syV z?>Q|iR7)|&X*^8t?=uzIzS4+;K>df8Lj3G{P;|P|*|Uc5S5su7&+uMf2tCV)iRkK) zbeW3*o8kAKM5(7}z0?Y$=Z}3F1c78^&IES4P;yaDn9zv8c8x>ux_F8n@4!7wk}QQe zO>D!lGVcdWDz=6U;&oQAwZnArjoOHcjvlo-)N?wS4&TdZ>s|rPUpGt>_)qnBMX9xVnVJqOm=vQAcZ+-4l%(}GG3V`C zJ0=D-MUZ#1Mw`&2-*+B|DeL8Q6*W|0&ty&Y%+w*wsUo1yFq+8yRf6ZRQb_kWYR%grpn)NQ4``G@QES%-#snACb z*T7(kK0es~Hu!1Rbn3L}4d6Gge6`|Uzkm^qcScvczb*iqLXU3%fiISOz&$zrSav;R z!rckWr23DML26fuD#DCY^qTn0Z_;sCr2VKN9yU~TB-~IiRm{xSTD+cn*0Q0Lw?uAF z(_v$19_||rQ4J5~=R8hnWYG?xN(W4CJ4rH5dk|n^hudGQBnd*j)#Gqs11KqbHQ@y@ ziH=Qf6NVxWojg7N@UNZghrOyFP4Er|*$mlN&S6zg(UP)HPokE>PF!TbPsfQgIa2Qy zYDX0i*w6ayPQ;|D4Z^iWz2g$=WIL{;nnmh*nx(rcjqz&Wa$&Y#Lp3o3NZeGoOCUx zH&VI@bZF6#ll{Jw$~q_i9^lru^Y$1aB&l_KUteG$MQ3{ACL>FE8FeQfCV*O9R3>3%U_-62ZL2nTo4rR-NPkru%YAmEF6P>R}|Y zd~%SUlSmFaImV{+o|*Q+rp}-QVI!i1MZ}tS)!vIQ7NLhffIDZ&E@%V9mM=6ab#90# zk5bqJ$UyjF?(m0<&)VeU#66R-(5jvqTXm_#uNTr1($pymwZa=RWtLB zrjAd06?yY;X3=h?X_smyXenb30!W<1BkDtM@spUDnFW%Q(-$E;pl3gchldA*XI|Gh zW=Yqcsr#-8iE5a5aY=>o zA7WDI_uR|##b8|2u}R!RqD68<^=W`X%K9F73zXYO49Yk29Qr*5)B_C;L+^g?n8%taTD6N|C4G-B%lA~MA2+mvlvk+OImM_lUmTw-v z%{TedZ7ZGm+lU2Q532fvsb(e6V4BDBUtJ8;U$>{vu0;}Ubuk>aAsf)2#5`@WD; zGSa-%v-D#SK137MjW^#EI(3=cPtgx+UILLD&U{KvWKtQaK2>|D$7C{#>MTs$Y9V2a zA-@eZYE`ZlG&ZcktytbsA&=d9{gd|%zNh8CA1yNox90~ka}|!6wvZ3T*&RZ#J&QSd zWI{-R#yxN}_^8gk?lR-mh6L#Ln!L*RWtiT%;6LWD00RHaZ~_2`^gd(DW~#DBk_WF; zx>QwEEo4 z$xn-#xu@U2nw2Y7@lg|F4DqAu>;!Lhow(jjFZIVgNmwX#itPe#m`9uS6mfpUbGIq-olrs0gE{r_%y~L@W78hiZQ{{-*rDor^j7{{TBJjcot` literal 0 HcmV?d00001 diff --git a/assets/images/import-sm.jpg b/assets/images/import-sm.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3c6441f189a0e57c53beb639df6b2decf053edde GIT binary patch literal 50121 zcmeFXWmH^2(=Iw#aDo%u26uPY8GL}??(QDkf;$A)0R{_h!69e}?(QzZgCsZacfWJa z{dxZ1uh!bDrFvIY*V?Q1(@*!`<-a?q>b9PquEHD~&K~S$mM-R2>=rIg9KL3*99-<2 z8~{-XUsp2=2P;o1b1NG=XEB zhRDkQx37OKF`ECLl#h=OyAKb$i@Oa6mynPU2PZcNH#ghA5o{iQ&YotzY|b9E|I31` zm4}79ovWvvi!;@KESj0SczKG^&~W_o!13QM{!{(ma})nxG5k;YKNSxKi=3a{>gVK`MxJfd2^gJbC;| z5}*IKm<_zy#!$W z7Zw9p_Wg?$?r$Fe2L%oQ2S5Pe0N`-o;Bnyo4gv1}soo*{bNR3Qe+2>Q9Wn|k93mP# z0R3Mt^8Z)&&kQ^QA`g+`o9>5s(m&-yx$TV<7yO<{b_I8JC(11y2eUpGL!s zfZL6bRys7LxB=}05Ym6mW9}X{v-pdMj*nkPQzx~&afg`RCo`+0iGf#8NLK5ku18cw zOY8j7zX1Q4{*NPMG&E#nq<>NWYvLeLbG<{xmBRaH*$oAs`#*Mxq_xZDuL(ZTy7$k_ z5%NGZJv`G&n|F8xWVFmv(;J(HfczF-VG+OR1ZCwuhR=Fulnm_tT?Jqu{F@36JPtqt zP%~xwH6gZq$E4+c&fc0$7^>+x!U2+Dc1H&mM_i+mY4!_U;+J@(ob!*gnjLwuvIlQz zUpjqVeR>Fr6(+H16hXIH+wjtB?YUU6nuoNN*ADrGO4+*Usv}XElHHLv6m-rskmr?K z5;{0Kwi_ZiS2HtT(1s>HCk8PaX!tOJtYRo^LAxQP^EYIGDJ&TnZBJ9|59FBddBDTg zRZOT2x-r>I@^Q+`x&ODj*WMFq4a^rk7$yW z-}|V&4c)!=%p4<&GD!3L@hh2V#I%NLQL@y?t8Jwu`I{@Bjat*)oil-&v$DV&!#dio z_czD=EX15lqWf|(f$kdAsr7GYr5Z)6iwE$_Q2r>`!#zcoTt(}wwE8;OQQlm^36&gG z$uYD_h|F;Jk)kPK?3b>(8_>u7;PJ6Csohxc6Q|Sn1;Zwe+LdUB#bfP9C;iW`wX7T% z{GnNy1WhDXH`ZpF9BkgAwfWXrG+HanRo>rzm@RL(3bvxHhERwYcG2K;v1aaaf!69& z+<#IN(%F1h7gWt*T{r4 zGqvGDid@Sou>7YST`+ys&q@Ni z;Y~Gn_437#(slS{V2J08UH514fvlN>R8BdtRKLL|z=(9JJIYDk{;MttO9HO4LdIox zRpXwC9~~ef8JZL=u|Uj#aH<-m*va7D+>?hjx%USY9HjMrt>n>KJ`f{i@u2dP)P84Dz6!Q~M(AZfJ>-GQ@)D zNgmd=I&7LIFdNK( zhhsR%vw_{eg>jL0!q_TY-;GphkWEDY1kaz6xTe-sNt2Dk^&=z;_E9S5qhrDcCSRwR zJDq`q8krh}prf20wK%oTb;pn0@@|}DPPU{J9SrASAUmyUqs6IwsZwE74YDGc(X+&m zMpbU{z-IH;wD7nV{w1U)^U=d_$LVyiA~;f*=2JbV7UU}vL;EFf9Stx2AEv&wII;o9 zece`Za4*9)FIsw8W-dm0=yULUtcoS@iPayRMm-Cxq5vG%wKKYbk2$usz%X?7u9cUS zTOqp3zkqL)UC(;K5$fBv~q z(`4^6?~!2TKbUfrD2{yPoLIA$SAo-MiI%l>nemv8E0 zYs>*(k@0kDku^iY_V;1H_wB)g1i$cJnhV6gqQY;Y7)HB=Ij4H5y#lhg>ih zeAT?(u168?H3B(v=&!Fn2B@8>bmkCQdR`NPI+Mb3`DN{_2?(RF(4}M1Du3xtth=Tf zIkm16(^h_BO zqelAg^uGLk7R|4!iJB#Q6We*H$RPzrr$u9GO_W)ywECRlF#w_UYyC2Dv?hN}b{-dR z;AOK>QGs$$$Nh3dIXEjXG9lz(a2Z}x@6OI1lR9d@V+4)`Wt%Jhh)#i)@|$`CNff|$ zw8QA#PYso!85AF#1`z)V!6CIQW^;YpghhBFZb^n|Wcr;b*#AhZWhC1!pSqW>DoRHV z-O-C|1`3(3>Kd}_V5L#2R^v}Q{6zKw@Mp;6dcqXIw8U_0a-NQuZ^0W{B1TDFspfdF zaN=eu06Ik*OK;%oY-?38mSXbZZdnJe7ww2P4eu0bOqaM7iqS6BIEW~Dsv0VDBFpZyb{_t=o}QtY?pdhJY|$*(S{xfAy@o$j?x&torM zBUh#ef;sWsG=dyiR1Lk#V(sQRJ(*nt4C<1?5U;bZ(hx}|JM#+LalzFs9LJ?X<|8i^ z!xp)fF_xrWU~G-?w_=AGN_+N)S!aJSdF7|XImVXfTD`|eqZQ369^>-GUK7otJ|@^mSI#*|QUXW~jRXsU1?PVO!R|(UzaK=2P8NvDDq;`i*c5MW z63rNplEnENFx#($m?&JPvM*5yr)~@#S81^~Tf1B#Rg+@OQ0=nZB^$O5Os&$X_{vH< zFJ^)j$$a4~73L!{c{j|)2YgP+!7!iEwN@Ir+j`(96y%Xq=a~T+p zzW{ofAVwVgIJIHbMIES+mU~&ueXfKb+jkx`@NfDAoEIJ6HM4QUkNrw$>IS2IqPI&b zo%-&+meJLlNN=VQw?^v1Gs@c{c}|y1+*dcgV#N<{`gLzjyG>4~T7FInyq%U#+rLn4 zg=GCjgRlrGy}R8M3u0zDcjxFv1TA6(6L>8KDc*w+KN)r=NECytoaslr?CCMiaYcjD zv#Vb4yBp>~T54l~n4cI0JM}|`S-f!lcNYa}ums8ZXt@qn7Rd#8xzZ?18 zM5U_`(v}L2&yAV*x(!AArf^3;@{^64zO1464+-ak4j18r`i&#)4#*jrHIFg%!}w7N zta)6g`=GODYlhi5i#qhcJ(crH+e%0^+Z(efspVvM%78a16hhkk4Ls<*0QMN)$2n_% zc?Givqf)H9^@|%o{ut~31?qCH5Y=OjZvu zUL=Xfn9!|14tOjni&*kIT?h%jpYrLeC|$d#HtWT=8Rq{J5u3IvvHIJdde8HTaf6bX zOP|c`EqooHdnr?#Dnp~tk3AxM15W0kJip-sdI+m$NRTgtv@5X8rF@huKuJOaBxF3} zLdL%aa=*Tg^p!!9B(ia$xSbjJ?X5tJpQW8vkYo0O5GlBl1{SHCd&Vz!ks)@eP=OQ2 zqJ-jiUwCYgNGDHD?Q90}&4M%`t6hvgnP^MeTRyhQ3?}V`o|R)=F{u@6GCbEZTliG# za;L_M_y|o{eRcfaMRsHVqQXpDhS(K#^#R3=QijBex&l|h(4AH}f78l)J~znbv0|k= zfTEjHr{gc6h7Lo`k$>tZ$XYweQ$c9VP=BLW0x=$&L}_MT@YyuH^5@2d&LqsLmlu|D zWgPtq1%^Bd2LAc8arXjw5QZgpvi-vL`3ne#&Cb3ziNiVVd(}HDC$InTnaFX5(iXDP z?MQZb>eqjdZ-=)kwDX{8F;!{A`7Qj4aH1>ZH}230Ac6NS;`>O^asC-Zuj{Q)sJls^ zb4&$q#u$Q2r+&u9inClJK)i2?w^WB!Dq`+7{LE%1k%vF}nAW5=Hswm0 z6AaPn{{`FG)lW58e{t(EWu#YIZOBNu{v~cD5(bC3Pw||1kvwAXNB-fQ_8z9P`R<2U zpXatoGv$2d-4^~DshCx(4`d7y3xe}Oz;qv3M;x~c;dyBxf8k4Lwn3P0f0(i^ql*3V zX2ro2aMp4wEi2aF2uw{b!tqs)Ihfx=&kK(zl-bfS3NybTxA$|}t`M-}50aU$4oUin zYJuQ(;U6Y6++K;>b7IoD&MO3r$10sDDDs03^taI1h}>lrv$aCL1qZe-V*Le3m*YwZ z(nZp@;1(@sz+2kYvY@idW|Kg0;ofKlt5MYvDlaNi6@aQcDRmCfwzRtyjfw|0WU3B1 z9*EeGjF{5)Q&(_Gs`PtjJxXj1^0#-Nh5M0tK8L|_hYuhOw~9Z;-@m+`E=>|F|wXit8+T) znMrwEhn^>Fugrsrh3UK~5ATWG{F`Q?CkNXu)mJ@7=bz0QVfyHwyKj$n%P%gP;|&tz zbD7au8|PH~>~02#egWygXK%)0-F$sBdmP!{Ls!x+j27fE7CEtni*ze<+cRQ41$3RT zn#V0_mF$@HrNG#JMC7zE$asK1rnj!8dpC5Eq4^JVe9_Yldj-Ym=Kk@KrS3sYAC{%k z>m&4#!z{!O0MRd&nX7E=Eg z;QK)Q}j^_+IDn6d-cxUbW~iC|K=$J2^OfRyH;E}e4Uef%fd z?<=3!+h^U!Gt=C8`KKH%ZSNwg64%${f4d{_E*-n#QE1EOW$sh2p3(~|XHmG~P@ktv zTNo6(PH9YPbDu3GZT1wr78E9&oh)Q%T!@;fX&roF1|T=Qimp1cQVbuhKOPgFe^8B(!KHKScEuvLtojo%zKvfS z&$PUA?YV~uU!0UbN8@H7;T-H!6dLKwji66-?Me~18bQt;txD=)ndMYl{P7bWg}VHk z8y|rKC7H`+Z@D$yB$;!+>?Zp&6!X><>41c=3+S%{0V>LCyZ$rSbxREy=OS0=V*3yD z$AgI$oga^iz7@p*6H*OLhE5xW;zNO|Npeugig~`Z@qDF9)TeeFCN>aGd{J9w=Bjce z%&KBM_3*tM*@N)c0zJA)w~S$h&Gk?D&ZZA6B(^27`3aF>j8888lWjkTydNT%nelB1 zvCG+?9K;m{xfj30BhTKXw%~`s`hJct!Gt9Gk+79qa&pRj9A3 z@j_+BziAq}Q*u#1-+Zj}L4pUXr`H`h6Ue9K9VKgema@^n zRy?VqquR1Pn+l${RtrF!o9TKvPnzQOQfg2^y%_qqpWrKg%lnO@FpeNh(2sxxPQ{B^ zZEmvSg1%i@p8#80P{(3mn>sU}65(ut7MhmL%E$AT6Ba@7Zcn7)h?3FM+}Pge z+K@WrNFP&v^GZsgPgAQe8sCKjJ~`kwGbtb+LER*ja%q~>s4b^-x(kC4oTKuROs;Kq zI*aD=x`sF$85@45rGn!vxl2=n{B=|~u9I4b@p$!`N;EQe?rxeykgzd*k9Tjo5-CrO>ZxfS zg7U9WMx`@XkWC*`pQ|9*{O0Q!>#Q<%=sg^d=2Fd=cM$u zBcMA*+=a;8wz_xB`oU2vm#Jjq5B&uc?{Q^a@jheQi}vjmna-^&|%Qq=`HqxPgvSgEvC`Vz-a(YoBRiq89 zS>4*@X~KmIV&&3b4G7#0Jthx=pFPdUvmxgV@^{Mh-(>8X>58?p?;T@YU%qH}a-kp$ z|9O9tVz?$!P%yQ5OjxD0+bH-rQkU-V!OLDPr*lPQH@8!vvD)n|OXsfKhvC!t#(w2x zODVbMJJu%wF`-=VH2E4ed&it~k;q5QBW-8_8&eS$iIDKr!%ai#h?)|qqi^1gdoLC5 zeXWOAx|-v?*KB)7XpQNQWYi8J@8kT%qx4oIU}2~|MDnQ}DkM=WJn58?IpXldOtv*q zX+*(MyDT@IS-O$V7%C-sZ4YeS7wuIixb|Kw4wpOp#>D#XRFJM^T zzK-c>@^|(qc)%n?rEfhaL2S7hq!j-#vgi4W*Oad!lOVze6xE=>7MYfp!BVILY+Dra zfOJB><(xO;x@4|uE4==8YozkzevQa~xF83qRg)$lWb{+?X25c$?g@o+%771W6Z7~g zV*aJpm`*4MBFR8^EXZ8RsJqJSjC-bgQt1EniVU^Tmgl2l*tt4(8!1DnQ|IbMlee z$O!a{OCjh5*7yo5`0vu=AHaVB9~&>4tDRJ*!5>`6lr4}e4PVCV2B<%IvYjB6dF1WY z=?DXfTGm|UXl+`fopmd9akjdBNV-3LG<7z-@@lI7I6S-d{)c;NKf1v~#7CW229xglLFVDJUU;F`_#w?Pv@g_B zzFKYdqIS>74pd_NvG#oabV2BMYJ6F_Q#T1r!=zB{XrFMyn%h7TPFKgszSGJp{AS?aC!DRBrQMT zH;e7s;D>jsNc4L4-*l3Ri;b_bpUvwaMGF^9m2N7-lH6o}QfT0>MbZ&(h)*hZG81aI z3mAmnieJUgC}ZPzwZFP~iB4Jskp1Kc#uh(l{jSmJle#geSM>Y-J)7rG3T?(QN5tq) zpXV(7u5fQ-hJ`BxuPU!R1ScDvZV=bkx?rphPYUF57uoOwujf3Cnovq?umZ9W8#P(D zGXdWpY&v3arokJlP0|?&5c+Mnd>kCT>QvDStTP2iOQY=8;1p(tp`%sK>x&Ypf64F^ zB~L#Yy%VL-Lw>NOkz`j&3O{-&E2?pS%n9VzVP~Miy;DG|m!t*WlOQ70rfhxDXYYsh zM3V+ZI*Uigq940&K@qzT+}W~}xb!p&On63sdknIY!bR*jwIupZPiJv5poK6m&i1z|(|c>0k;=i(Z(ksH*aoOwWg$X+Rtih;kx46= z&Db*KH)_V7N8))DPLi)TI)hTUAB>t0;12uK{sJH(;eP>f`G^k7?Uh)T9R#2|(e22> zx1pMpq8OVCQjN`68PvZ3cG}v+!aYCJpf^NTLb#@-XLZeqHU=`6HZ|=E5|pK{O>87sYWsv8Ae}LxRp>sIOpxw{R&$+?vB+ zX^-&Na!7F4+*wiBl2P8(v8vQX{so(8 znnCVOXq!=0q8O?^gEnD?=gXj8(2^Fhn{m7ynOV<_$1j87%j1X-$p7~8V86U8O*ND! z=9_9YIsVX(Ic-YjeEga#Vtq17R2ErUl|jAPOYF#a;R-xfo2g!gdjh)JBfEy$^DWm& zdKp}3LK>=8zZKOXAc^R*omFm$UP8%`EcI4}1U49Wx9j zg$FP=RyIFu&lJmYttis9PePS|?!c6^t-k|9rObOIeKg_l$_&|nKZ;)c3kX!HyL#~!6K`m%k*#kH znrX3uxKy#`#E%iMO|+AJW9AFscWAbc6pvOf*OZmFQB(Q>GUotNy~+r04w^0Cm`3%M zWR(eS-`yob)ZgR!qV?zo zYGczxF$~adzNhAL;r%ZCV_o-uhcqL<=6)xQ8V7? zvca0wxF-+J5G~Ltkq1M_LJw6#!C9|W0lu!&jYP?<=E>pjy=TT*ClDXu>Y;K z*f-^rN$_QQswdgQ=ZPGtdM0=Q&(JzVo5`S-I&CV+PJ*Jx-Nef4c+MJ?kZmO=4$V7NKeDFACt_Z62d z?sPp!czXCkKkgG9TN@2bsr0)W%udmbC3E#aV^pTL(u_`RK7#Sp0-- z#L*9BS$pjdLQp!eM-pt<3to}VY?o_v(Y;;RclkYTO=)H5wg5C?*4A;S_8Yt6wY-Ou z0eksWihB9?FH1xQDEXvYg2mSnJ?TPRFf9J)aJ!>OKo70Za5e;6TsA;Dn}V(al)+q( zjm0$XM7|1?!Qo(16}-jJN+XB{Z|G|TmCXqK-66`!4mG`HPv1YO_j%@=bE+o zf{1WMMQJPRY`|)C{)0Q1k*y`*DzCLLb)A?U{PeLS`C!^1QDncph&y#xUGXIxlu6&( zCsarHyX|ouktTT*mDK}9LU{8GH*wCYXU$H@i?D!68fS9&BYqExk{x8}NEq5)Rz|>> z3S|M_3roAfSId`)pG_}4)y`A?!HvF}mjApjt!xJlxd+F_jAFuEvveZn%c2$NV@rF^ zR6}-EA#O{mC{PdIK|{SY3m1FaNpzE$tY*-PTd;Md)+{qS?GJNd%eK@4H_M^qWGSjJ zy+BiJc?oi=u=PAv&5&sH_yJU{)mZU6Vwr0*`{zHOKgN(OYI4wuTX4`)E?Lbdt(Jur z#k|u(_K5%VY(d$yB!v_rbuRUa<%v^sOx3jZayKp85Td63eu`EKDUs>qxds@o*d)55wp#dKg$jP~t5Gt7Q zOM#QH#1MQ9AMl5SE4z`#5!F!N<@@u)@zulq)=y!}lB4zNa!VUHY6)waT6#7|`S{fN`Cb6!o|x`D(R z{AdRIM$`_+!sGn{hIrgwlwXfxs(jLbb2lc)SI#HH@)Jgq$wg8OI_`B?xGVd1Fwb&LcR%(LmRVk`Up&?XGnVp?gIC;s~F;SJxWmBN$uS10E>e_IHHqVhew~+qMpBZO= zjDyGGhMJM37b)PStW&C17~46?SlC?~$5s}n`rVO~$9Y~_ju$KK)-gI&Xla3VQ~KqA zp^u60U}vYkdn`>Wj+}#rvtI3n-~ioPA#Kn-^IGUEd8Key4VDs`o8iZlW4xr5x+Slc z0Sx8(l*N~f3Kz=vw-@Q2Do*Qtn6LOE59;Sf2aj>FINA846|)IkF=T1!C9K(#N?*fI z7FXkdX*VS6-UVF>VV$eF&r=+MS!uMzo*xntqI4*O?awy@9P+i)B#GE1$@)LAB=>$k znh{Osd2%44;`I)#>a_zd+j|=RxRUs65boKg;CiIa>J-^&ha(X7nxW*q*U6-HcGIC0 z)>_l4O|c!PBTeicPM9y}Ec*`o7|w-AWRK!xWAo9Z!GKAo>FeN+=J`9;xN4pp!S;L> zD5ijI%BA0X{vQDN-$&gp45N=Rt-etU0z|j|<26#ZiOk-jQJIbO(#D%aA4(mNPDV&Nq`a@FwPJKWn{F2#Hu2>*E7}C+VRdtQ!&?&)9Ca;I}v!b!U_;|H2i#($9j18(}*XyS# zwGe?_^3I>^4B+Sz_yos)j^yukqd?xNz}I#`WwP2`m4R!jzo1(218w_bF$G3Q9nL8s!rdzJ_ZJgnyU=(!9c?fOACwI5I#*V^%H$=OOF-FN@x0He>pj{*#3b~(z z*HPLZr8vs!UMECc@#5doZ_*&|nKtI@45rMzsT7E<7I{QGem7G#4mpaq@YrrdH5x)W zA6pdMhu7x#z=S?xlW*eo7zuf!pfHBU-H|vE@7x3hbCC)S+xeI&EtqGlCF)h{9*0s4 zYB{-ITb@i^G#b~`54ZZ#f({b9d%V$~i3;uY?(`38BT6dxQMz9iN4==@AHl%+1FRD( zlh5jJfmqpUU$Y=?Lu_bPv^i*g&5e;2$s<6^r*@4}P0!X?9Aqz*3v_I}{x?0e)zn&glJFUZe5xm06!Z7m>ma(ty!cybgR%h@> zi%IxZBHcz6RB7uk-z<|BIRor6r~zgMiDX|AT7wc`AN~TW^AU0QtP62PCB&oU`8v$( z&_W+NVX>fJW-XQOSa=ht>9`$ux1zMLL>B~RWSnb%5zHqqslMwW(W#dGb zq2hO_(xy%8@Wp@=dt?bGip34`0aPKv|W>iQCbp@zG-F9A_5yl%IzcW;0d$fUUZ2;DZ~s|tTu&jxmKMptI%np6%DX0KmIl) zH3O#FioZJBT*hDG3i>ejqoP3GGo`*Gt7XLA99(5vc3c)H@7A-+k(+wBa?bkND(T=JH=MM_z}unRNmKjRk;wR57uM&$F1uQI7=ZYcb{65 zPA};Ug7B7)KrC{hh|4L#UQ77%319Ns&wH}ZJV zf!Mi%HaC1x9`;KF!d@(8>tPwl!}Qu`wwXt)R*Tck+>v4ajKH)6248|Y!#B%@n`Rwa5&DB6iT-}JB!OXVvZcD8LCET^X_+WQCmW~ge zN4}|_x?Rh=Vo?ZZhZnMbn`t`BbX|hDc?jkFvxDX8%7mR+IYW(VP|Y7I4!VU*Pz>0D zSb)y^8L%P zx2r6p=n28&TKyMEAu-l$@90e>TlO#i7vtzzR6ZzDuLnC0vV>Nq}WUvZR5Xl+!KKhIot6 zuz9BaF-iE=f^T%a-SF8$ej)TMpp4pW{Mb0fj8V!v_05>(ABcK0FUibwMSs7@?)zHr zHd%bL;N(&F&{S`-_7_l+t;{-mIosI|Gsv6_;&H1=uX0l5abcEW8?}2+-L{wn)}$3)bhmr@Uv_y7;J?XPzUyaoDGb1PO^#>{~r zD`=p8sTij$dcR#(c=0m~g_cn9a-t9h{0qQ1rV7_oWw_#Rcq%)l>N0&zI-i!ZkU}(3 zFK>c8nh47tACjemZTmATq2EjYsH$Suzj`Hgg@<@zFSsP9g0@3I3?-5X41x&Lwp8`F zDa#huz@Q)hxR6Lzi?~DvO1kO?F9s>Zglgq398I6~^Ha>AFSBsb8d6?n9y9i zlYK`=tj|J^nDE0xpVYeD55S_*cu8?da-O?2cM^nBry`%4YCi9Ge^^2&sZO#BwCjxX z-l)_b8NVrmmA~9VLcm%g`w6ydz40TwEq<14r-lVfyjqafgrV#1KL5+CH6#Zig~l3x zU(DjgUC6pJ^&m2#1Se}j?DV+<`-pDSCU4!dHQq1;&tb<10iM9LYTP+$1V>4d4POv zG-IP)oR$@^u|5L%xiawTa~{(NgoAmz&QGNHHOcbJ8|Pz6aqkB?r>#@Y;aAt$T|b%m zHUzsd-E|8_&2qV(|?ne2CuY23M&I<;vRU3T{ii?|4@Fn zm1oM#)*My9MyIrWRS~GP+^H$fOGjIcq3Tn!Qo7r5(Fo%-jly<3DRT&vsR=^Q6NE4Y z1z5vZs?Z4Mc{#1-_UaT1KkpZpfAL1pA$73JqRs+q=fM>B#g7^E4{h3(8zp2-47+2R zdxO~oyv4uSVCOG}~fqe>1( zv=*QFKJ-4ak9M<6Q$h0sTV=XZfkJph=#~xkCrJ|9^q@C3s$ZU!Az(<4AS6UoN)!Yr zIGR&tVglw4-zW0$5BOdEWJ8=~nb$iClVtQQ(TasU3Hk%zbng*nO{A2skZvyIiFondCf(u&+-9>+5KqT`5OXXx@!!9Z@JSQ2k^rv9!o@^;PiJ3eqJeGgPP5 zD3~6}j7En0VLURhO~5RW{eePXUyarwi4<4txS#LiUjPW2bOY9Y^*v#7IC9WBK9N2E zIWv>FVHCT6Tw^qt*jJy`YKee-kH`ah37(W^vx*Jp(;wlZCf)g)4c-DaBIA4anC*e@IYRkEwd5rTmz{ zJvWfALkO?`A%jKGE+>NTaV0{Kr4aS!ncg{0`I-YN+$`47u|Pa%Pn3S#vt`8*Kn^l^ zv__G=);I|Wy5*b&**2TdZ`Qk4o`M`+Z2I)ATDc?FIuj&&`~$Akv3cYm zw|k5p7PXC9268zSyWh1Aa93`?R{{*k7#L@?;xmAW4n)Nw#+8x70XCinvC`6F zYo|TL@V#e(B)yMYoq?%+n9%m}!Vk1N1Gz~Dd`q3lf@R)sJ)J}JRd~vl3^hl17cBGi z>2v)vyk7bf0a<^S_NPsBCWTsRV{p^oZ@k{jO$YMaNU#~i<6-3YiPb)^85=dP`o9yp z7CUIYI9HjR>LPkA6CyupR8PCk5Il?6qX^GL8Ll~L^+1h?9wBwv?jTe16Vds&B*j~2 zD`c<1J}m>ge0S}1QFpqY{^ooJ&8Cz5`b@`VUpwCSr}T5hHEr8Sl96gH&aCb;*M?_QDDl0Tb69mX=*y|MSeXm%%QM(Z~RImrz5b<#i6O*`BJsizz69fr{a zc5q0tX=Gm|RN%L#4gC;J4cBtsJiRZ+L#_25z85QKrr7aoQ*1Tc)wD$LS2^X&hq}nR zdmUQ;y7bvPFvT!$3^Omz&p}J zjH+p;KR#c^vO69k{Dq;EW-0{1?6_l4eEq8GEARczl9k+=N7|RUOg%%_yylLMDZWcy z(%)6_ACLaXYcYY-Wji=`wNErxBO~3|>S4E~Vl0Blm$WBk-+m}tHbEU*#}CR(mN8RT zoCyg_5l4?*)Wjt^}taZo^L_rK#gmNb+mJ~n0@RzlQ_d6+5*BLKH zWTqmnvD%{sAUY%EZcruOCTuG=H~4|W6D}zXz-RqMcxOj8_xQV2FH2kzTnS7>?3lp) zwh7bF6dc>+vB4P3F*~SWNC2CVbT{g>q&0hjoGRBP8RcR4KROs& z26aa5wUY9)`k#NGG*aoDqp3D8aXnh&iOkZLs>P^$c0aYEs6P;_MnFVczXS1@KupI~ zpe`JdGxd^kySNDLqSASFS*op4w$-p(voO_t@HIzQt{<@1{F3W4FT_6!S@z^|lao&5 z76kZXTEFNq22sx>ed!ZxlYlvkbV0dHH<;SF$B+DTt&>8v>#RSkGk_tCqvo!|t%yap*ZL;QXOfn7eug_mce@Az8DYu`i&DIpV!Sy9Lw1m`PQCt4|i`SJh zB)>f^Vkj6Dk=+<)XNAZ1V6&ljV1j5BoFqKL5O_|q-TxO5q5E=K zVl=RLJzu%dth!Fh;CjLmb(;agVgKgetHDL=@zY>t-CNW@%*eJS18G)&IU+ovtl?%=5B?@H^`p6dc^|cKHbZ}ncEGx52YUTI4YDOminj75Yfa>zx z{B_RuTcH4rzO`|CTZ=sN_#jPHDJmB}7>y_fj-Qj~I zn#~IIqi39!-T*^BraH~DOmh1bFC1;4Y6d-lbmA}RrwI<7fr|&l>&LgBIOnno;8;0e(LL_6wY1(|Bui?%;U!4m5Aa`Sa`ojN@?3W&@xIeR=DRY3 zUm@#qT1_Y(HM0~Ys+OQ&)gd4x$zFP()Z@IE37wgcdVu|S8sEum#u z*nFbXvC+f|bm=yS@7`a|LXw%whsDBDgUl43{v9*HS83W@b~fBm1A}^v5V65fmOCT0 z-+g}p)?p|FnwE*{1WzoKBmXd-HX1m1KjsxhVy!3)RYhzb)^d09s2YaCinDGZh4c`H zE?t4-^}$)zzEnJYcRrHdi)*Nbs{m~uvO14~;_9h>PeQ}a8paqWQ~Ny&SK*-BYT3<1 zE8F!@ChUe@9-MsEkQWTMXdt7)!~_WfMy3^81Z)AtSt74+b)FxUhRRKG0y(D5%}291ym=kp zY61`B6ISYSu+}$PDE#O%Td}!9(8snx43$V!`3i$HCuh6y!KeoF5@GOr%SG?QNTpt4 zJKBk=Cu?mcwfM=IL_w*SVCff|2{jdiEAe_ca(=Q|Zm08aY?B(B%y}x?D>upS!3 z24}qpKii{h+X9esb`50s3=(3ddg+4y0>)m~Walppj=bpQfjs<8{4C?DkW9t~-8L8+ zxaWbiJ-0GFDSOeUE4HpoD}IUPRjqTPY}uC$qlIJP=bx+C6N<}@;#FRjx-*z)=1FV* zH-iqF+Nns!7=`k&oYVBui1>HWb7wWJj7Fm8k*(|jA;b?E8%m5}$UlB9SfD;24Ou+S zPn2{MZU=bsFBWw!aBp`3XI;*u4fRF+TMv!Al**5r%2nNChdMK)nIo*;iuO(vh(5Jn zA(kEaIFOPes@&-#1ga3ep(A`M*U1J=Ub6oM=oSPu&l>tTF}J8zX==9x_<^g&>V_)I zk6X>=cY6uN#JP9tvcL)SQ1z%-E4c-~OAb1FT{Q~Y;#j*fzR8-CGVE5GpK6>HV!`3^t+yuef#~B1YFgDN>&6qKFW)HU1I2RPr?Ee4L~;|ugKR_qZDluk59(F zQCS#lxj`!pt>DefU4NRu34xoc9@=(@>rVLy=2!AmPZlx+{Y}eCt=be3aCG zu4#hTsvE;vQY9fy0p;QhCs=!2nf@Vu;$bl0*2{faehtGz*v}fJe?Xv2w7WYKXV9KC{q&Yi zPi3IuIqI>eJ|*cz7xuZ?GwS2m&pw>fGlWa^eZg=;WoaUXQ6fP~6Rr5J;P&A{_YHQC zIUnTTvCRfLhgy<$`BXH1nH7o~W9s@6{?#NVBk*z7gbWTkGfE~O(i|4JNHM?fu7yj= zYA7%t%^P}!_#CE1U)AuK1A30cd8rRh`~txqtKxPWYeSwQQ~X19O!fbe^_Ed_bV1kX z5C{Ya8r%swXmI!7!QF%F;I0V??(WW@!DVm@?(RCc2Y0yhyzlp|yY9OGPj^>Woj!GX z*WPtP6vTl8{c1VsxKD!!u9IRP!0tEwlS;aR;`cgopwF0&qX?(Gc)Z{)3z^WcWW&B;oP5 zB&$5JJ+tKoDrllfk%W%TFb~*FWrJouOK{OU;bQg1?NSY=9^w4+5Sq#6g%QKdc#fUt z8dpd=@Slfi41+UJ?W%}_nZ>!T?J2EDem)K_y3Xe-j!&}|RNej^oyM^6 zsm*3ftG<@2xt0Q;mwaYL8hip4v~M-@@yt3_OHPoHaL#LL#8xMdiZ(03n4lw&MaVAL zpV239Tjkhmwbu9Mfh$J7XMLN7ni%NHkEl4=P>}312>BOgM(5P&$^fiNji|EiPlhRz zl;z-~84Eyp_VmSqo!r@$Rf=ucE-?xO_(K#KhiL{wKKR_Fr?vl55R3UKBa|z8^7<0S zNJ#Y4zDSN3+3lmya!qK&{+gkP`kn#O+1DQ05>zmMX3mB9B~R6Z583Ig}!sT{ish%A^Yw>~Uz7p*tOOT>JQ4)R)MoWv40N z!;93QpSG~o_50wH+KQ4o@Sl!+C2yC7?oCuE{_w4S$xQhrql!HthP~qYU>1x*BI020 zSCpVbS4K(kN3p@RHw4B7*5hngMt z0>hnwE_Z1BL+mHx!h=q6jGdvA$HwBND6@@AVACIm`8}hj>dVBSyd_R}&N*xuI8`@~20Wq~Wk+?MFQDf-%t5S<{Skh7`ON=DvnS%PVqN*6{@RP#9jqDQ8 z1V+O#YRe*%ZDE5F=`iEVA3B^m>s?Lo$<4$h&AaiMDWwU^aJC_AK~B0}4@%W-#Op>U)G>KT_kNs-g((SE-Tr3HC+d|%zG>y? zB4-*$@l^Oou_!CW9Z%P{>W$lAguKFMzJ6rtj^z+UM7-*H_j;oo0izt7$RkbsH26Z> zti^r36vmaLdO7E19Dpiz8~U+~iild=#y226u0&+zNx}2f!0Q<&rY;9%b*~OKQ4Foz zqVa+X9>dDj4zL~<9PGDcWjp2?4csX#rYj}A2H`s*{6L<)lyzdZc0`EfB+A|ilAKXG zK2P-NNeI!mHhcn&BqvrB#U9nRh?jj}-s*bSO|OFRPG+`1>J5;3pOr#~F=LLY3E3ZD zbZG?9y{xm^hgvO2ma~8Lj9hi?-yK0_qnyy2EsghjnXSXipS4_75&D9y#FBNLqB2{J zkB2=~O8D~_A6cQY(B~II6b3(hoN$3j;?Yl_$fa-Rkg~`DeK_aVc(*-g%ucjD25O@J_ET7(qG=~&HaEsi-STg#1RU6T4=3mn z!ITV~^%N`h**EVE0LFZYmu}$=_Dta`-y!jyQzmWdBIRWY`KgjYoej4R^_374pzpp_9<@Qu+Ws5h z!^nEmy_iyRES#XI5RUA`r|d3(xFSDU`f!#%W47%i2=W0wzDk5-u9&9PcKJ_JL&|FC zRCG>9v860ak~6`?UWSrl(|GGxRODCMKaOJ+bW8F1{Zv;W64L&E;v3qF9y60_Pogr* z)vTFNJ~1c%!h;p{K~{i=X+89+Dy$2)^VzKLsbfZ2&<0$jeK~)|*+n;Aa9%KCWCpQx zGhbx=rCC3aard0(%_lP5M-8lsu*VSDa@>@3ZXfnujiM;~FC`5l^&zvNoO3mjD>4^ewcpgP1O!A-1_*J>aN6jMv9A)J z(YVcnHCQr54;~od@WB6$_w&O?}R$ z%HE$`X_{kF3Bbb--+~Y)kLCxp`UYYV6nl6`TTx_9L*{9L16xj>zA#BMfgA@j+` ztr-_#NPVcX1$PvP&bUQY#QZAj;a9c!1~@(nuqz|&JUzpf?W>f9xgh_E-)`;J`(B33 zEZ~k(&%TNYhxT>#c42Je2gSd3)m*uhtH}r2wKu@j8(?Afb%|>C%Ew6FPc!D^IPWEF zt$lbAEqBE)WBDm4L$!OwRy@gC*Zm6br9s6eLFRYhm6OnGopi|@Es&)xzqqjD>R4qs zxuE214e@Lhx*ejQ^W>eg0%X4Yxqd7e%$jng%UVZgE&SzKg5FmkdilqMn9bsE-)L1( z)ybql*4pF(+GC&AXCLta*B=MPYs5K$+K5ea?T4hxQG?Q^lfc66Fy^3gg%(i;G?ub-I?=sU1RkJuyuR z^96Yu-GY1FF%>=Qr+DDJ>6Cxbj5rzDx$nQ= zUW6mgT&@O?nP->;N>|Z*UP35|<-ePJAY1F4Dt^f?za2svM)IZlrceG1#$QUF_O-ZA zLMDMwI1lLS;t>+wbaQt&<^7-At38?3?7nY5wv5<+o`*eP<7)hZ?hPOVBj>4|u-+I+ z?D%+yNCz0f%n%_UJ@@+`*ZpDaj|tuRUgazfCn%ZdQHa}+@|^0kc*HgfUKDC*_viLu_-Q&E%l2i75RurW3(|K+bE3n5vFLU#lwHB%7-~)VroMhHcD&zeftLZwOsPn{O)S_f(G_-Z-86j z9++*{!qO0zYma$`PP>?k!1eR#|F!qh*YrL{OVXY}Y1>lU=%_Jd@b=6<`oHND`}`f! zdi|fJqd&AF-T+t(=S}qFJ4^G}0cXqG|LZG1lk(faP6E>ZGtDU809hNM0gn;A9f|340;n1Md^iYL}bb!%@{QkPBD1Zqr@>g!LwsZG_YcmGk2>u_ z{>LL7|9K>4-v`S08XNOks{IBy8V?zK{r|sdxY31J`!p@euRC+DrA=z&@|woyVK_dh zAPhKg;K-vRbrqKOaCH0ISylQ{OCE`L=b!Refxna}dZFN{>5(30r%N2gTy_dmp8B7e zAZT+wIU)byKv&=^J+EAdko4CJGs!(b_L3K67*wM8P}$2v*NRf|n`0|eW&QRlye6m2 zv9j6-$b4g*gkF}{-$cv2)tNRaz_`932*BIw8hir;9XEHAI{VKKO)RJn zI1(2=(j9AbS{Zz~tiAj}{tSCPUWdgQQjdGNe=s$}`gMA{f7g>#sbc&{^$u~_O=K`W zc_5K;1p0Oiny@Afx`wqhs+ zp9KGp!W-Z((_dPM7aGxZGS^7iq#3bQC*PpS$ znO3FY^xm(d^BX}D6U}LE6fc1Yk4)hN355b9P(XWS@xPl+^dk9 ztZ6(;fvVgBL2ho_zB_QW%EQ}^jvCokKDtx|lX}F6I$kh|f8uX;o6HQG>sH7(>bDf` ztwG%f+wtYQV(NpDHvlyWv2i72|41!N&XpOmQn5}DI$uP5{ds95c`2pTZ>y6 zKble`T`LvGQIw)E`n84Rt0(1mFN=zE+h;@&^iQ~c#w*C*ZA=S1kV46s9^rb=DLG<| z0U`V3e@Zdp&#s9LA!Ffgu>1gz@E~u^vtN(aZx->+T;R)~88e9;tLx9A-lhw5OgFej z3g6wc_UKEqC26}84$#*m)oqTR1%ZNCw%8Pagf_21ubvOSU~}QYB(9&s>vU_aUIhP` ze%~B$B#fv^qLg=8*IR?uIZHxZ-n!=#1INXx^|%O1Vzekglz6=dWand9chYx{paIv< zM}XGl1M(sDl%ec-_+jVTayfp@jc%|8(rjD8f4LuT zC8{LPN>@p}6a@k6K&qJS)JI}b%=8CE^!Eb|yGUPEexR6L6g8$B0x_mfw`k(8DcQjX zAVthZ7QVRrW59+ zPq5{=;)%!mU_H6A1TFkII1B1|5_=!?PF0kKI`CbHQ;y0F(FbO;1{%KC*c1$X7jvqA zL$c!uCgH-{E@nwcIs1%`YVB*Z*vBZHw!c1i!cEn z4fxU2>%Nb_n`DGDP3jgz#80lt`-nm`k5Tzu}#}^9v~SyFJUVDU&JPV2QHwA zAv;)T^JH&n;7Zk23}^MJfr8}Rh4`}l&q)#9J%?nfIc@U{{y>?J)tEH9p3`KDHYRw_ znr+I3H8b<62X(x-8qQhi2g8-+t)&%rS^d_NfGn4Rsa~%hK_{v-&nJs|=jPA*l<95E zr5zs0xIcD;{w^JdTo%n1h?=mMy4f1c8cIU8)mAX4ca4iS)%7CfFX4yfY3NnN!$YOo zj2Z}72FIeqsz2)H{4-Y{r;AF!;AvtJ)Qn8|l3ng8<~E3+jolGtr#KCI5gtkRE9Rr3@iXNH&a{UO0mM3f<32*5(CleMjs&@j3$EpjmL_8MFD8(KN40Lvt%)_XJh zo8t0=7_x}dg5VxAk<6s-Aenyl%yO51W0=LL0C0y2i?b&nMD(%jrRDpwvK23CZYG~~ zKRQHS_#Oa2_tpwua3Sh$M!HQ<&5C+?tg>f6FW1vf1vQK+ntS7CuoON|XuQ7c7SxHG z?=RZUE?S4+)r3u5ykvc zx3!2+ZRNpj)l6V~gH>#73o_CVnn}RZw(LtF^d{!p)!7 zngt@`{Cw3UpscDino9d=CPPm4Hu^@5bqVI-+LIb7lm`>x#~_wo#nZlx$+hgn66oj--{ZbLrCx4gbeBQ_SQFDnJyic!^1t;e|_q< zVM|@{n2}b7-o60}`ntcLB58A_bQ*Sj!mybQyXFT=MQDY;2$#!d&}OOrq#>b}$U@t# zq2(BS!6)>pO;{i#TClb$JuWS%DD*J{C;dEeaY45YT9$Tt|6Svn%hTMh$(@oozamgt znu>&Juf4EgOlUI@Cs*m0!m0_hOvM%(#OR+O8TC#<@w!6O=%-bq%?B1P6dEZ>p=Ml^ zKq4^~$|89X8RY=h7)jly4$?$_a#C|*n54JNkPevGYda1}-_M3Q>)5 zI}eaJXq~cFM__VbR-|i^^XQ%$y5L`;J1LU8AIOw{w(P|w96s6WG7Y_E~YlLCx}FRiTOcLPObP zVyI^J3rFOotqk2Csh`~tKJLA)zsqX_Aj8q`mCJHEB{hPGY#t-BlmYNw&11}(* zC>;4Adhw;9Ae%B8$G; z834|CpEtN6x49P}lYH<`!k1@vrYs|--qoi}RJwK9#Xil*2B_E=loz792DHUiN2w-~ z801A@3Y2pWaVSP`I|5dp=-M$u+D?Po2#NI#9<2}YvYbbR);bi4WhQ~PY85(DIf}H^Qy&xNXURtpbh2W z8Y7eEMjxumwt_=G5m>^nGJHcSpp0TU3QiHc&>aIfVM{K*A3VKa{%d+~@WJ;!`QwRg zVN`Hj0~Odh?$lCe9L>~|w<%i|4Gk%1ocsOds>p{Ksl}6a+Lf|XKkn_~o>rRm6kOF- zym)(Sw^DVT*`1#9{Pbeme^v@!HOmY=I@Yp47;cyEnF;U1h6e6usQFOC=XgjCZw)mw ze?c|1iweLozYUwt#^+yZ`W5gMt`MZTRfaxra)XE^jE2tqQG=yCTQ-9{Q`l1c)^V7M zB`r3Z_DcpLXN0#|`b!(V^GQZ}jjaaxFK%;etrpoVNk0vuZ$S?-uC0hRx(@5w$VTg% zh|?ks)OiMbFIwa^m>4bNmi<}Xk;#0FRl32hZi>AohUt2&vh27Gz1yX}Q66{SvYmKzl75;yzk?Z3ut zYAp|?WVZ5fEwKfm7*T+!fs8b=R3b+DHcW||d!I&AgWl%7fp}aiMsUlLh_1;vj%h3u zQqg|`G?q{t(*1L>s){O;xp(C5$EJAqa-L}Wn&~+^S=^W)G@xfIi4$JcV(MYNG@v2! zWbMwFtrq`_AYEU8>3uqZJNRAu4s6%%&<&RUrW~ej^Ioh`H9X?7nY*Fz1}Ubr8`4m>_&NtwkM8yc zR^NZ8SohSiCb{ZM*s-rb8$~~^QnmkN>#k+&XtQ^UucQ>Au3jIZI(~VO-u-tznof6u zbujx0c=-I_%NuZCbnpgP^51&{l<5xn%QuePhl(s)ciKQYlh5<&5 zrktm^q#%=vOD$=+=sDo|suquw<1j0yWEhh0jUJXU@eKzFDoLbVzGCb{ZmP1;yJ{Tm zmc0g_2VTL+W!J^?MJpw}EO~O`%T61Vv&?kiv5gyO%&`Ac1guy$zFMgZ_a;mYQ)n`~ z?rrQAOatxUiFVw1eM22Yy$oT&iN{HJA&r?FS!8MQOC3FqxhEB{4s;@%s>2n4Q+PM`S( z?^uXh35V9THh3frNdNoPdX=lb!@&^a)ech4MsG<0UPpv0uJ@Hnhi=SosB(V+fsp$8v(E6jfIhe7#!$l22Nu04VM7B%8{xJL#3V{or z9;lo1thQCKYq0oy5{6aFyGraQxq64qccVm6pTjU}(PB`Z+vU0bWzh;@D=j$9JlO(& zMOr70t3rhP9A3?J|3_S!2t*1W)v>wUHZtMS)x9zWGZkxX#L8B85`gxu3oaL6ZoWHQ)>5{dGCw=G zKQDKA*WR1LH_pRCy(de%bL=K~rzzhWv^ijT_ioz_`>fS)FTwhyy1GFoOIm*JNZWcp zOLeDWpRhnoFG6=-^O#ZPs3X;Wgk2Ecm$wlE#mQL55ZWcm{Gr!&AHz$_L3sCFdc z5m7j8t35SJSch-mt=S%+FDF%+&Ro6!RTSRWe?}de=MqL2HtNLJN`p9H(4a@$O?#z3 z|Fp+tg10FfqLjWIX!PU88*xQ%TrqqfHyQjlMnf-(9#-lVL-4?CTtP1Eznl8CmGn0} z?iy~~da8#`Q;ukBtda@tZz{ux`{IrN=mS3pkt7iJ8O3&BO4aayV`35aiL6g!3U zlESLIV)}TT_o@=OZ=jnA)7gTXwj)$jSDkEV= z(0ROc8a2%{Z@erIb>fI%bV z;o0bXj#ctJamD@VeLy}eF@%WcCK<~7k}nz26pcZV_yJqtc4M>KJ1*u&x4$bnUu8(H zB6)`^m}{$cT-G*NK8^?`JziF5#aBv+k7zcYCn3b-d=5aMDh{{^oz4TThwY6ixOzqM z?0c2cF%D842pcKrHve88F0HM{mV-g5Clw4N(gDRslMS`<=;)(X5N)bayMju*=r;g` zl=p4FYasg=quPpng&Mrd#^tby0A+khsP>8Gi1vu*gZsj?d|(HUUIX>E z{>>Y}*E^G9no+fYYhMN@y!hQT9|GVY8Rs`|16e4_ZWL)yRVwMBCcuEC-MJ38F|AT< zr_XO*b^FMM{RpRDy(V_rB9BqN+>Sh=2yROE@iW>45YNnF2oI{$^EOXn(N1QRm_KcK+@hd-bH>t>F{exWiWyr*^OEHtR zASNklNIU(vvz;7&h}zFMjYh^;^_;f)fx9B^f}_uw*uLUdZ9B>TE<<~JdoKa2@{eb8c>6DzQVCKb1> zR?VE8%nEn@I(zCXAx|zYrrkX6S4C7_b%565m#ln792OG}ahC4D#2$Z!X=u%c8;H1! z(Zub2t&!tX5B(G>K>W~mlVTJ*AB*ok1x*^)H)JS;380sknXWDx$#Sg1lj(Rk#@Q}! zVxq+eX>NMNMVol`*^}2aajlN?fE>*S5`Gz`*Ie%?HAM%*~-hQjJ7 z!|3I2kTwEJZ^=?5}z*Ku*~l3!$LR^lWG;5seHRWNG9 z;S%-Zx;Z|zYy||JQj^tDs|~83lG<;3{RAGWct0*2LxBQZbs+IkGC5iMSg!Yz|iFe8E8yM^AUWA zf=qajX}g4@UNbq>CyDk*Z(>XAXV)JbakpsE;bp=#4fXtepCtMF=993r9%Ua@L{y0R zP;Hj~7?RHysI(;@mgJ!RB5%LiyQY1TJ1S)mhOW4GE>0}*Qp0t-Gb&WaLvhcb)?}HIl9^D`om)t z+<%{M?u9stm@hKOvU`T8R-Q1IfOJyA5o z!Tr(3VjD4Sa$2?K*}-Sc#I<1+Iu9xDotHA)Z?Ym_MR{s&DysE`_uhWS+F~n?W<19U}7R_ zuGnhT1F!NDY_cGuG2=U-ep#(tH}+(if)dy-2=cre$o1vIZj};Rb$1#6&ekJK02M=H zwT(($!13eh%0BJX>Z?$#t0WfI8*xwZY;cmY&prjp>zJ4oVXoBv`WY+OO^S_)o6V?v zT=L}{Vy*+@VbpJz7x$$z-GBVrB$AWNL2*^q$d1TPxE#(WEV@Jy z{-ejxxYhfG#x}Uqj%X^b8mQ`7-KkLRN(@>fmov@iS{$Xu$b9EFC)A>$=1fV^W^946 z6g4W2ay2q1xV|FZOFbGzO0jzTW0bxcgTh{(kSOsZOHD{YaoBbx<fv+02mjN~{ZorjMya{>->eypF~aAJ;<~d*$-k8k<~|v{Ujq`1X~qO;TVWjZ zxt9)+N7cfBm*j~fZh=>!e@0I=Z-6tcQa#vgZMlU}NH*94dV6L+qH3QMJh?ShaWFDe zo)(^e@+Wm?9;-|HTDH2P^DP6UkN13(fLSD^KA2eIoLGB@x9BDhS@g<16gMz_l~n68z>2~#zR-)rhKbhSnY*SO~czlyJ8E!rTv= z!aQl3+Apma4AgV`R{N-0$p@!H$UC(5rOiHuyc^ngfEq=znT*d9)Qg0-KEUR@5`FHG z>Qs^5%dKT)(Z#0R9XcILMsUU*xW{#iPDqRd@If2!j;KIyf{84UZVwl%GGtpz-vG>k zKm3nH{Ts-n@2FIPdLF+=_k-De5~MWiR(Cx5E0Sov^HyBWzzkbC?b*xJxiZqq8@dJ# z)QRsYg@mLjSB{HTCwam^!RmC|~fIRZDmxPDx*RdTwEa!-Pc+%-nWyg%=Mt zr9L1g89R#zD^}Jl>}<@@N}v_r_@I=*5@stWnw%^^IW)Zk3_~%WdneeaxBJTd143;Y zl2V_iF$L1`UcXB7do(6Y0>+lts+%W2aNy#4=MB z2KjKOVfMM-QorOXD%EP_yxx~t=A5fY^lop8DJ$~l#8P|aDm3eR1nspHPUlHQy{k`- z#^3GD4mrXlN`#Q8Md;c0)7;?W{Bc6Vp?2>&VIpxA`<>v7t!n^r6JpD$2R1fXq$`sr zFJ~xq1m9n(Tc{UNwWUc{4^oir%e~Kalm8WW5$FY|a9ARD{AvU4Xtc#Ej4%-6_UjMM z@vUITOku1aKq031Q5eKC2$rNOo-lN}{8dPkY92t2=OPvG3Ok3u2V+RQ4QZR#2(7j_ zkxa)mQUq)3c=+gMFX$w(_dchrRr23?+s%h9hWPb0gO8FRd9)C)Vv)!@4w6}MRU>~n zWp<||+p<|C8NZp94>-V_)&v3Kv{!A=eI%&~o(*T2$ zRQ(C0mX{~MA3gx(p>-}>v%7-vn?M4Jz%N`e_Iv|(xK!vMuG&>n4l^yopv$!H4^lx; zs93P57-BCL(=Ekq5G*^a$?bb>@Ry$5SgKuuUCvgCBbciAj|2V&4enp4TN7Z)L+Z*23g5TteZ zl24@dJdL6$z8cP0qlH|yQ=($Vm{D!Upsqb$b!D1RVJ7XQ4H8oHKX~{^U7L0pmN`%O zW2hIMa?_0{$6MRaRkWVpo2YInl^te%%OEO-7e!n3}2 z>cu#orscM>nvyAeKkhPa&ILkm?_9c?)dFsDFZ`}8MYZ}Ac|kP;zxn#N97W2_Gm&VC z30^=ICm`T_Moq(Jf@B}^6yP6-FJ9Y_H-BFe6Ghf8a6pB)%=$J}x4DLOWa{L1$&*CR z%KWJRTkX@{=A~;9d<6|WQf)KFfRW6?06GNs^z`*w2~hx-P%a9w)lonJS*uMbv@cLv zbksW|E`g%d5KL0@Vw@MR(keMfBI7xGl!ZF3z#S(aN7|QE+E3FqCME7HqYt5_+@@Uh zVDKP(u=31rH7KQcikF+j*xSlSntlg2ObgjrwEIHH+2_E~P-J_bEcPENee zkw5mj+2(|*z9lt|S>*>gHQjEmN>g0MAD`I#99K>WlPYPp;V}JX%ysKq-8Vp{Di+m{ z(|6xtwXBb^P~-9bBVA9fbv?De$(w5)1}AF+8o8_U#Y^Z~K&&|3p6ZhG`N7P-yO;Gqucy*EX z)_b>kOZ9NdAVIAeEdVqLJ0HnzyJnGe1|s-SB3BUdc&8Y64E}KNIG}6`+x(RBL;#+_PGWT+{jNAXI zIV%Ajmp}hndrHrSgNYH=73(`bbyGE%m9CV5|N6c-lKUKA#1B8>Vbm zS$6v~>Ih2LStpSCN6uEk!4VM)i69Cawd5+D;R+Rz26~jP)BNd5rJWX`Ra>JCa0Ha= zu>-Bn;=U8g>1ZgVfdu`%G<$hg4vcc))Hu`N7c!=&Cc~hCpkqKeqv;I}Ie+i(A_l)Q z8Z1=Or+uQwmXlt0<~CGP(l1U?OeZB_xi&bJ?!Pz$G|V`CMT$6xBlN32W{?sg%T6bS zZ?Hz7!iGD1hj*nRqhvY~KlSJgczvPhy(j_dgZOcLG@2L|5E2zD<{7w3t<2e`Sjv?X zRO3?*ROf@Sp9c)xnDPeHb2BgAe~sQ}vp%#gSu_Dh#Yy`tMWNxJRs)PEbDT3YjPyd~ zXe-lo_Rt_WF)nN0W#64qFYjbnr=3dv-dDwuj6CEoFhnNnY^@Box;BKZJcaQ|-Z;RMa)s|xmlRZIX|4?|M09Fb))Ae z+cOyeKOz;8{x;okI1lD7&;*OtE)|@$>lRa@RWn&>qOU8#P|+JM$q7$B|3tcPv-KKEK!bv|CKTj<(!SjkwXGab4yHSx4Kmw#;c8ScOvb?CQ6x$f_5&6do_KZ)i=on|D8C z2OLy|LSE%^PGu#A7`*^a59=s|0Wu>R4ky+*&F*gicP7H}`~`0BHvot&>l<%8y}HA& zoc@5iCugX0$+`Sa2yP_MT3pIIE?-zR1D%~S6>_Z(`vFtc+3{=B2_be8%AS6h(8TBn zf@gHFz1D>tyO+8KuAeb7PfI*9+?q9=Il5X(7-ABf&aG369LI@A!KrWh&`m@hS@hS4 z|C`<;%w1Gu(yb#dtV#wyhxwAnw2arXFy)A2%&cRrV+?T>R#tr6Q$-m{UNz^Y&}`t5 zC72pSy_%KyWXw+>cg| z<;=I0T2BwJ8_kAH;)u4qq4{Mcq1#t#`D$a;K|^88Mw`hGb|r3I(;H+!T$yHhR|$n1=c|LN=V=^wh{@ul+o!(s`!P;Sn0=hENQ7t#c^ z$JJzT(v6~z+p=V;tw=szmCOM7mRTmr-#3r5&#kkayT=* zl?r(^T<=a@DUetzvG78Ex9S9TT9ts+KA<1iu-`+c#BKk zbvsSdaz}ibQwhtmR^NaF&07Puh^4GS@9ikDUpDH6Fg(F7A9|PJR3_jwnJ@HkN8Ut` znfi>x`j4dMQ8+zWu=w^P_Zf`P0=f8aw#f)f5f4+ug?%TV(b#xGiFj&l#eIn`TDuc@ z3ULU!`M#`yPp`2yUQMs5;Xa|>KlC*@cO=b!x_H<|APnea71PInV5v&~4Ce7M-0Q!u zA=q&m6sDJMQ^z`2l;1IG*L7bf8by&#UhnbFW^`YiY7k%XSdM9!d#p=dE2zt+DR<*z z1}>=_CNpQ&j;g!4e}iZ>ol=I5QDcMYH*H@19_+rdg&h%UFZQR{i9pn=AE+HvWupYu zj3r_0W1yPx@s(0wpWbrAR?ocnrVQjRP7B+RK2GtMR9$8QYOr`5ML-J*fn0pv!c_>8 zqGU%!a_MnxdfQ*S7z8|#g+lcQdI$7hmo5w6^Ib;3<((bT>(`tjpox$b@7QapQ@`^h zVby*@=jB>6S-bBDjnf)U>nf^si%bV1J{b&m7hdh2mU|LUu3eWVEC0F#?+{&!#ir+s zo@m++LC!wHvbgy4-n>fZeloJfHN>iRb+EcK=#`jan@7( zQk-t=_LmBz(pY?tJbEoG$^)F?Iq}pLMxn5@oTA+4mXo_2{y-uoLunqZ4~O?cMJ2vC zGdpo@h^pL;cJh{K$VB`$9ZXL_$cD^D8_h0M#;G!@+KnbcttOQm^6pAq3H4afl2)Fa_Z zfuyTS2X$Bu`_dm^aGab+oc+xb4367G>hbQZE^=3@ud+OhW^TD%bw~m@QB8w+ zVFWpn!%KgEt=fjeq*{_GLlw*STrmFO=Fx`jGJO#%<-g>m_EIV=7|K)W{7h9h|7uuw zf(qXky>|PAeTxLhxoZiE%PHO^Q#wKteNeC?e<)&o!4+AK&)5-ZhnYI+?(yh7QB7s# zPv7_`E1e?O`cq33_gzFzFSH{UKsuftka*V3sXqnNn*8@1IM`LuEaW}JLa=KcbZ!xt zC!h%q6|LS17H%+TT(wafE|k-}twBav=5lh^s}K`z=srY&HfPx5dl@a3v~;9X0F6@0 z{7ls)@%jj{hlzl|i;(3auJwAyA}bn>d@zVXBcr`GJG6mvAWzSoDlTkCbQ5w%E085h zI>}FJjgzszUaaZ=3ULkBrBx8e(rpc>9j8oiGST#dFDWZTsDZ9i3jY){OiYfmfo;$ z@4T{fczgpq=Nv|1{J-O4F21jvUyYJK>gLok4;n5ye4I9yie8KBuvWX&Hl}eO3&c)p zI>L;v<>8Y1fTE=eH~C<;6a!_1@d_etVT29b7nlu#uulVA`tB-lSSWp?U|4>)ys zGj@lF4RH04vSjuK1(39shDc{TJbEQ}zm>FuPEAe_RHqA+o2rO1WkI`u(i!o>8GUC3 z1yG?SBXnayisZ@}6fbdD^4SxbP}uP^e|_3jC&>3?etY?RNv~L=7IsW3kWtcLBs@d$ zYZaTE7VY+DH4_Cvc3EV!3PI6vmwXJ^`4Ggp<$;RHnS4=1j#;0863d+k|1r7B^&BYm z7u0)J>DjPoOP%!Qm)CUU_UlmWN;z$O3-@Wp8H~hw(cml&_<%||xFr#nwRqJogP$Jd z)X$2R&cW<f4cvKHpcLw5tqPhD>wiP{=@vQ4#mwx)#=v_~Rra|2LFJ<@C>))wGl@*v}kqXFbOF8&k&I<2xKSgchEoYbF(Y}IC$Lu8Xm_NS6x#`vx z^~D|oFVj5*$OJ=c)eASNf?cxHr9Wkg`b)$opyTbKX9tV!lge<*v{yDfiwvzDOFN&5 zpeNrHSgOUosKz*MaME8t%;_A9-l6`<=R!_XEy?pQ5gvNQw9e(_Iqjc0-e}?5N&DIa)xac4% za>_iCOzbqk`w&K~cz!+uS^2#im38@zP;W!zqJIOMBQ75E?Y@(D#l71p=m(_Q%?_7ir3+avmpiLy*hd9yU_Mu{aTgrL`B@S8OxrEq-`YLf zT-oi2r)`yiCOecH?|5%3ZI})*83X|DbKR1l}>jI z&33aP3*#nqnMhjH00~BTk4;L$v8-Z-UY-X%)Yi3+qI?G=hf&2>5oRdZ%#J69<1jpY zG*B|e_Hb-HDY^EYvs9b88}WBk!azQHK~<9Vr=;oxBt>@y+by-X9DXwI+*Hy5a78%B?XI!YE;C zMHxjIR9_?&C^pKz5Uc=kuBQOn>N@^7W@BMHd`KpY5O3s~(s)wRueG)!!@g2$Npm>P!3AnaxrL;EP)o@xn zVQVdxq{ya8mkOG~QSmspTxm#4j)a16596xouzVVprb_vvY_+e<2WD^F6_qYCj8??j zcnPPYZ=~_r*gMpq*(*xPv?dk1>yzr=m3QSj&C4%MLDTU&1K z&f`jl8}f#*x;$mcdUJ>mOmRdqTnT3&0i1N!CHQV5RLF@DG0!AA=c+jctzf$uJ~2@= z(8_u^*Wj#l1$1STkQo~>*f)7njj{ zwL(T)E1ZhrwvCW%?Lnu+S;8-S<~36TY5XjBFs*H!zv3dLyOldW-(5+WEn3wn!3%yX zE{-a3E;tp%L|_bc)n$GmkFs~+ax^-8$5pweX(glR#Y`<785g-aD@(Sn9|AYEyH9~b zxUIKCQ5j_tz3MY^A5t6Qg*ZxvI`qc4>Z&@(Tujl($9NTMOI=c3`6tHq`j@A?9_svFe=f;&}*;U0|Isv%>{Xqk(v!6n6R z#*+BKP?4P|)=g_aMJ^he30@k~L&@jxRJ-DDf2dTL)vE?P zk?;1}=dOQFh@O_079$-93N5W=XXVFT?#*odO-zy2ka{Ty_G(I|#__6LJ{egno5sc) z4t@)t>h)1|dgV@{r72=W#}tyVa;CxHf>J(dNd3CrV_=Rp#xw%U%r$ies;WwoGkb|z zO(@`=r=T5io>)a@l(L$*P4-Hl?}(4^HFEKQXLiBE+g=FV^n@mOiZl#`HBLC(0|jkZ_) zEat$y#12H=GgU7RRmy)QSo@=MQrkeo6q|xP3!0S5M^vh~n1n`eHlw#sDDEsN4BJISF`WKk*$LQmfNKCIH>6`$&f7}84|4{BE( z8}u$=?-w4?`jH~{I&BRO#kwuqs@7?L3+kxRB)v}q7*;A&)Xay&>Qpp~k&;lS5@#El z+z|VTXWG?k zE(NV%wI0KnP2uhpD|#$ibFo5G#XuztmfjAYt1C*BPh9AZV=LvV5YHnf>1X_-Pa~RP zZLPWSA}W!n6y4mWCY2>%Os-Zf=IS*#u|fRjxd@YBM|NpWLKL)c2dM|PkE(1nQzWRM zE$IwIJCFw?y}B-Go*JYFnMKdI^Xg2GeX6-7xwQo-E0UEWE3UB~D_r`esNf+Z=6dLj z?{SgsO~nwe7A3K?Xf*f!w2`NHo3$?rn*uK0S1!BPD4Lo(Hq?^zFwq4s&!|ahH25)^ zQ2Xn1)1W6A03CEa{{Vc`uEXSnS<*GI_T4x&oA+ura@wg;cZ!KYO;LXH6^cDY#5(K+ zEgTzEC&Jm3nFuHRDC5_+O(Db{smzqra8=UCB%~*!?Hv46DYtwTZNqmfQm#GUyr~;z z+=r$;X+pduQsLE5R#zUECUdHGXo#$YsVuscsXa0@KYMMje7%a&OipPVXrUf)+iUxi z*}8i>f9*|=Q@Xr1Rp_?W0g7rQ3uXAzlJ!O-ZRadZVb%F=JdBX1Ql}P9O1kN%fEXQY zyOUIvaaB$rt_9Oy(&P{7Q0HoHzY^XcC&;qsJ7r0tsxwRcroS&43_nArp~6t=pi|J# zzg6l_buG8>pnj5o(7PVP!fZJ!Du&ZxrxQZDH6cVqZ1+2OKRWLm`P+lZ*Z zHMCLPVif5$Qm=TB^qB0oPKW_n;@DrpoMe-tW1L&&@rx7L*rAL$_?1uLEB;2~Elyv3 zS3LLT-1v38tMckr)k>~!8@{C~ObQ*eS3bX0sLyq7C`XM6LO}T31gT#F2Yd{jO{bR- ziGnacAkmf8^roItUgLKieM_J_8^b=tcwO)>Hlt`#DO7FOon(ElKIW*&W>wcyyrskQ zn{KOBeNISp#geduvV{hl3BVqvEnQ2ckED^ryz&|W;HW9)sGk`T0sjC+YyDPSliw7t z6{x$b7p39vSG7j9Db%y)mA=zWI{8d^?Krh54Ym@XJCD`dT{SgE1o~#cz+-bpXPGL- zYHGtdkPujM0O+rC!~Xz)s_w_^l^4bbiYk;VsoQFR?d3+>Mp+88?D&qvFUEQ3&!tJO zSA%N=EolujqA`=yQq|T*T3JZaA|}9}NT1LYSmqMe8YVmPx)*#vRCVG~{n?Ke`>j~q zdxqA9ZPKu)bhznZ5Y+5;J^?Ob(h?N4q-Pxlb$y3362YJ`)4%esHz0B+@0wjurK}<; znjZ^txy7q*)IBQ0{}!7a3O@?Joip9e40=cC)?R{edscsh-Y_vD%*53t7(a0dz0y{{Z%A?LUQEl5KL# zXYDZLWd8uZ6A*{x7Y+)EkW-TCy5|_ivg~ISug38YIIfqCjL>o(0cj9a(qVfx+%}RS z4AOc;WNp|^wo(hmjfq>mD1PHcVF^@nmA2ZO2b#F?0~k2t)c*i}oMtf;vJmDC58pMS zZsQQ7p}43%n6=j;9?)M1mkqqdLg}bRT#0OlA9+b=z=+^$yTr(pJ(nre-qwW>q5B@5}P3Z^g3bRO$$~=?*P1X@S=oVIc>h^1<@Y z5;|+saZ=HAzIetnr*O^7!?iUyoNP1>FKkV57SH0HFAp0h;s<)}`Zcw;H2bYEm2)!hmMQ>85hlcr z;o081b?`OeUgq%QwlOHzHGZpGt4@r|^V2!kU-Dd90+te|R<0luj2_thbLadD43W(g z=B-NjPy8hW<0t)GmUZ?TI%D7^IPbBwf)r& z-#_o2Hha0H+#zrX`ghRbJhVo%toG0Dtsg|Ume1eBfC!_37isSxKjd!^FteXnP((lExg}FzOZrvzrDnSBG4tkP3 z3Ys!w6)1m*k)0*YI*^`aMHHDkiKE;7>5jOrJN}C5h4;5tM0S!CmnSh1s`NaLhYmzO zdRre>`)L*PvNxMmQ zG?FYklI5hSlGnKdPHG45C5=Gd?dGR0&bcJXx~g?%8<`@HF>TUq*r7nXDtzd!C6zpc zebf$0Crn*|_GcCCnH`GunbK2H6Hw41XviH;saTc0;Wuk6Dmynt({$Xojd~0e`>czW z;C^*BocnF{evwCcVk=KLuFFzZusac_9_|)(j%tC}jZH+n5Vfpf>>1m=SLXNljNh1Z zXIoa}Nb+n*avfo%JMRonnH7~DC=PsRP+C$toDY^Y7`r0(4yd=@%c7*isagZgyx@%c zk8*STGTi@JTB;<7qM9QTh}3Z6x$H9VD*}xX5xh?MY7r7Po~Bx0gMuRs{~^-J6+h zMqHMn$Eeh)bk+1rZcgIzXz+O)uL?q!fzb5RvdbXhWQFANzKHP#RZa`zEoC!vHs*;v zqPr<}((UN?rMz_erKQvl z%{D=Eu|ArVC59k+Cgypc)Q-NX)Z8%x#VPj={A6FW4X{?pv$nI?vL?V{gD&QA zv^ProHHOh0xbc`MQCJMN067C1W(IlGq9;FvqcPrllT=hOQj>@<^pl=f(*3H5ZT+pa z_kO=cvG(H1sNHq>Ga#Qn0~CVAfuLvW*1>h_xa?l7tbxoq%>92_ECPGB+qV@0qfVC7Ek;5fOr^RTDj__Omht5kDN9-7gpy91+4&@s z6=UPc!OKvt!%a2=Abs6-XrliBvuoI;U-4gkQ+JDbZ5ftc!9bXbjUIzJl|-!H&Nk;Z z9eI_YISz)R0=*RI`fJe>?IhxXv@|a!QrkWJhjUMFdhxz39W@puB=fbepNy6_TX(y* z{^i+D+W0KkZK0yWq*%LqZQJpo$3rMEX|Y;g7SYEla5v^FKD~PDl9CYb$~c!i>Pb~^ z#cL;Zqk?wnX>7XMrn<7)lBWX=<-|7GIRt<* zKWus|He6n`Vf0;RUha1$j(0u%i=)F`=I}cc#ID*#Hz0m-sVhC&4X&RRyfF?6Z39Au zF34P$T#)G;+$C5C)6jPP`skMuP0iL*la8mb>_<`Sf#0r)09MmvyF@KBN@oiBg*~A-ioZ%sU!lU_LMCB)Bgb4TIh50P|!LczyH?h zvW>pg=qf;&iEV-bDL7Z+I^!SPt~Js1NoB(6j2CsTE~Gt`y|ilCZKoX!K6rxLqym+C zfKPFqG8|fZ$+;=WPwhUp8cG72bt?+TWpu~WzBK5Qh-RZ%&G1J4`o=!^&OaZ=Nza|E zkBA`6L5`!EbNK%JV?}QCIEQ-q5|XkAP$NG-?DXrUaz(_pQd@A5gy$WB^!-{EBwZdw zXi25SlnP&r%ZVcdEwrg8Jv#J1JrM{2Z4*Uz>>k(N%{;|^(4$R5;YoEy6DV}0T@D^X zQnZu!=^PF4QX{LWi#Xgztu*s|A#IH+i}r1aM2BZO##aIQD`Gp1$Q?uOE2`dEQR~Q@ z=?;i|)gWSZ1^iPuyml1`cSpjPiiFKv$|mE*x#_GDsPu}f4oCO_%1~Wk@lyEo>(fja z2n3OGuBq{CJXx-c$J$0}DO|fV;|8qb)F!s_i$|w2+J#E(dSYb~kJ4(B0ZA)zLX(^+ zT?U(yGJOn(VzP$64Q-s~lI}`HMDbH??0(e8+k37Q$~DIVkh)*=n9n54lBSf}r76&k zB~C1rV>s)kp7$^oUm`m-QHB=k>aROt1|sY0qUXzac51+{T$P*S@|ZVNx@zu9L@1Am z6={;DNXTw84XC<6iIvEZY@2HRNs32iYXl;dGT2+tJu#*||<7kk~-IxaI1#bs?#jz8X*ZEi|6 z_>}f#c#Yf&+m)Mde56!qQC9ltcCBhRC{5*Dn@ZM>t5`@0&!(DfF=hCg9D7xbHqg=r zhB=OpEbY&|7x;bfY2xE-yt=;dUQ~Cj3IpqvOt9^Ay3}b1WM|&%l9z!ekWV1eei7@Y z<)@1$#@9C5_orsYsip=db)G0X7Ea4i=!<%@PncS+RU3{`7M8f@ ziDj1n!kj7?>DX#cA4x4#!lNM*H18^9JSPl=%`PsLwar=& zv!=$rFWZi_z59hKK{quwQ$Ze$_A@JE5IM)G*IyowYY|n$AZ}%+) zvWg5K#=&DFK=1GPtD3oMY{zIvK_3fgYz~|`!xbsgw3$kc9a-^qLrW>6hGR(XZ54HJI>ADxvVCyYg;oB zGMjJ69HG=Ih;%rYstqgQd8q3HiU`JZ<^@9L)$usloLTsDR-1RXaznG`f{*+rMtWSp zw=Tl3!iP?`?MhTCO)5M(d?<06j~X;&Hp?us+5%A9O|}x0r66MfdTUNKbn!GW5E?lz zD)bc+yuHEBk=c?{LB3nY#e-;7rP3HxR=Q!nie)}O#_WlTXfdoi7I4X|Ot8j*bh=^LM!FPxmdJyJR*}ur?a0FG&~xG-Ywj{{V8Y z9}qsoox%XiIBtvKn|zBB9T=zk4dt~bGKHcm+j0CiCZx#`?~-4amN{E(_p z?T`Xfk<&Tp*B#DsbP@99WN$(^t5Sz-RG=S=xGI#<$@KVr28ig7ys!V)y$gDz+~g;c zi6@S7K*oBE0zl4x9dYcE=PZ|LH93y_(}5Z)(xf`VmfOi7rNk1F2=01d6P-K2*Je}` zDIH$K@>@HNaZy`CF0E3KkTJ<$8bI~>>4_p}b=qt_#W!H>Mrp)G@zk6^364UDAo5ah zpWl!)-H$WLA4D&H^`h?W)|yaRN(yt;A!n8W>D2VmTIZe8j7=SuOKW3zqD^ruOLQ>l z;yAcK<)4`+*Fny6G9VG!kYTvHQ}s!&vo*9j+lWw7Q`ICMzlY(YYr*hQ%L{bXD%qBo z0OUtsQKcdd?OP{;{e3!r;q%bF(wC6X&Q3qK=zf_x03l`a*lA-5NFyG<_~=;+1YZ3n zBdIA{4Xi8Bq!XW~e@z13%i6nhQ4Fr&4JJS>p0@4qR=41j*(F1}sq~%A-HJ*h%BgvE zI#smhRP{ZDg5*(ALHI4u9+VW{z;HRQ)>uo8r&AO!J91JG-TnWi_FUhAV3&cvF+?1#Z8Ds$hL zJxXz32vNt(d|f?qLDgx$70#U3Sx+2s#2CwHjoGb5VUI1+pSyxd1a{-wr(GFvXw+Fp zG>?){=IRi%Yw9hyTrg6ON>a*_j=5KSliZ$z_GwJ2F=owEb(k5iw@h+CRX2vV`ihK? zEh^3eIu7^%Oogc_a*{2L$$4u9N3h8Cgqi1mbLNqW>6sdK;b(EMpiX4w>oDXQ?^RMsKPz zqPTw7rIYJXfPF~7n9=Ku_0R3m9T9`tzyHv=J8@EBEg@>?I$)elau!r18G<1*##r+q>@1Ilj=bo z^p2CV>O&}<%{O&T)QuT_ba_p-@(&=ce0l@h=YoD(0sjEPx{}%#9IP$(@KQHrJVnE( z6jS9*Xtn2lr_N=Wr}kI;sc8E;DML7WLy2q|<9@=OeHF?zj`|3edSka-{_pnaAc0#9xsayPLGO?c`T@~d1YGqF1F1QV z&~Pnd;c^=XGd!gzqq zO{c^v>BkIDASjzf_EvaXx9`;MObxQP(R9X1ObM!r+li+roT>P1IE66Gll^q3kR7q4 zh~*41hrgpdu572j9;}hP2Hqf8sTV$m_TC7z>I(t5t)(bahd6DpIE-UCJu&zVb2zU_ z4ox{LyceOYB+f4Ml&n;};k7O2c`ac_k@Z$GduONW>8^HH@eK7{tt1U$0fNj4l&wzk zoL>$pDm}XP`JX~Qr%)s|$#!&+7c>LNBy5SYUCKh$+aPDC$?f~Tx{U6?t=Ss}c_QZ| zIDk}1>N3^wJ5kbTk~3X?WfulFF16LV|uI{*b^pIOU9=uAxsk<)XdAu<~)EKM+f52fj$ge{3-`+78Mg%4TbVd{GGvZaby)g zl`j}@s|Cb_;bf<|!RhJSQsFvXN1l$-9uSzCrDf^$a^o%qaZynmj!$2Qt_e}W>(i!n zCDFCb%qQvG=vocztH;OvzcS#mTy!($c_>*bJhSn(Q`GbvQabeLG1py=z|JV~h7xUZ zt2WL7iEPzHJ+5653z%z?nB^v|G9!rKQ2T=&Ks`zI83!M?Uc9H2O$%fO;Dz&l6r+6& zbd=HyIj$iQC%GK~Abz3S0Ovi1pHKqz%Z>+g*XRe-eg{N=Hbzu(4O*4+`%a!d@${6} zq3C*a@1S%+fB(_9FUlyvMM+y=cj&KPg9p$8HNj{Woxn-Z=7l%A5YiOvmeM+OEBKL| z^y+^^jVL_ZD_JyYLym^wBx_sSNvAgNnNe*$2pA(d9eNUa;Ath+^oUX;p(fS}FyG!R zsWj9&mS-VY<&)<3>%`;^*&V%f!<_f^V$61{2xy~>UQI_O46k1tONghus-KnumJ+`) zAP}76mI%fN&(}}IM^h!cQ?4}Z833ald&lzIanCZaNe7a+xzi(|9aZ>h#ykqPR^%OY z)2m>O!$8|2yGPniyGp#xQYBq#NLqd2lJ~&s3i{)(LX+F)slU1GLxUlmvba$nTS)U~ zk;B=4g1!$2-qc;W+_6rkJ8?4_roSzc%kQBo^G*jIDmlp@<2s|Mq^qKT1yc)6^|nPs zpALelhDt&XUXAk#_crTvX}2^u@5Pqe-f9rEsS8SypsW%>`JEG9G%J~&o$)%(7AgM# zfjuuFDoTgMI(>g-+q)IiRxY(uRox z0E6G@^ZIBLU`gbHiksJSA_^Lc+PJ*x(wvL~j1!UaBom+SjwcFWP=S9Pn)7>Bj#U|?Kf)&MJU@JK|{rw0eAC{xaO_b_; zaRnDQ6>E79gsCM;N&PH>ka}m-tI+)QS35~vt{CREqbn#6xGlXC%~)AHxs?tF;aFO_ z{ut}^)Of|*y4Z_cEO{u|F5sGn7T-6pR7Vn`Q^=L|cRhIEf%uJFMHu0}S}5`{yjkmY z^)j&HWEUP+UMHfJfyk(Z5uAl7U%yYew;5`oIxsFQNC_3akYQa`bodKt4}V2iDaR$} zfjGxO%zU*o3w!CR*!G%lROW~RYJo|?NmwAH=L4x9 z5jn=V2MLaYC9^g-y=5UTZxl_fwXM0lIVANjCp?Y{ic_Az9VEv)y0)@$t%zm?)HmEO z6SA`*0;HuR^Z-4_1n0M2!20TaJ{0LlxFsS=kjC+33V{2U;%<5K{JMgOQkBdHGBOFr zu1EeF>u~Ly;_FB{s-C+SWJ4==s6lu5fv!wb$walUs?SxE_m!NCbU4Y^V@-lnL;>Lo ziLKgqhZaSd_a-i-x^;<8sZL8!Qq-gO@RCXVd!1Ugk`{{qs3gYgUhX2`lg?jLog9pp z0na3qxOyD+IO;~75U^+zSK>8KH!nJ;Z)tbV?XWINU2>6Cl*7?wH0roKpob6~O1LZo zp1A0H>J@$)O884}B zWlI4F__~mJ4#!xHbt9-NA4w;q-95Q2CasLDq-|t;{rO(&r28tf@6Z@?kRfOX{O*~@ z>izm^H!fCI*~BMBhdO6D{6;>brk?`pE%;7aEt2RXpgH>W{kj|_7l2@Rw)-(8==+WJ4 zO>>NOk@EaM+ot672<}T|i-(G?&k%LBN3X;49N>WChaiBGMnX~7IPa|Q8*%fV;1=1i zkTukACo^>&r(Y4!*+N_$1{87#?c5(leNL#!aj*+Oij|R)NYA||9o!0Zd>36xNKRC; zM-WG1MtGi{x>I0#v$0M-MznBsQf{-plnPTXbC$?bMgR+J43v}81ojC%Jv8^5zQZLH zIgfc47g474@lQx^%xQ^8&%{!Ytg9Fp&#JIS4x4op@40AJwDlB`JP942cO=BrxBewr zY6aA*Bj%o2BPs)~0zvE7Rr2A}_8YFIj=GM*&K}g%T^D3ZvT~O|3kX-nK*?|rkOy!_ zeCipZcsdYQM@xt_3xWvHW|$h98!tPOk_wc1A5t@bdvwolo}{s^WtFE&$y!Lrq6Nuq zr4*hy8Q=g=Dg7d{4{bgHBH=dXk&y_Jp(VGPQ!7zYR+0}jbR4=2j^7%NpN`?d+|v>@ zyaj-26%vubR#gT)I{lmH6l$EE?Bam00#16>6!6BIxW5oOHRZ54qGJWnb+ zS8qwx0;N9rQdQJpL;!ny{{Tl;@x;i*ninZkT~ShhDDJOfZD!S+aFm4=XE`|HtYn=2 zAIDDstIO}0L`rdLB&kG`^XuQfjUiwtf(}l5XFi{=rh*AiMsY!5T*)CrvB~LzG1t>S zEhMK{O|8jvJ?wY!RTFA2NVd&#cw!W{+d@mO^bNSQj3+7?0nWJe{u#F0VUI6ud_yB( z>wW(J03A1FYg zG29N}I-y-m=-zV3shdrh+=h~{q0|BC`v=b&me&E`s$SAjkyssjk6dYY%{CkDSn~+a zPM==i>Hh#un{m0-IMHCS<`efo^vVAKZig5G$hb4PSq_uf_526>G?SuQ^c+@jMn*gO z{{W+=jkY5+PA8HbE?{&$4nNorV012wj%5KkY4R3SKmdN$`r) zjJ1~uJXAg<5rq-c;m9O`*!t;;dOPSdvgoR@i@1ins1B+cUmLq#edpSQ^W+4SgVZCU zu%v6IX#n<9;MoD7i zq^}DP0hEHF&x(qZ@SdO&0Qr-px{{Voz*CUoby4OCx2pc^FE09D;caBqu3P-tWkC(&J^%a&^`jjZ|#i%8L~`W3VJB6C*9*2;{H`7{>&Y z{uyH#>w)RpT{aNMMKG1WH#I|D`B>c_2rYHTv?!L}fGURI1y*R4xY3-Jj%j9VM0_ey z0F|SV1cC@1`u;fXTfKk5W6hCi(D5EGii!WcOd-xco=Srx0Pi6=Y9s zvcC}cg&b~=2iw_URVmA_Syg!HMN$SFL`R)Ml9>%Cs5;V1Y8-tsHQ3?1!r81$@I^aA zt<2lpR&|VSH*IjX8KZikAXPYZ6FS=U5~MMZ9vdSOaA9-M}HVC3}2O-pP{ZiE`s#Nhc~(kMinpeNKKX zdj1-5LnNHia$*#$kUL-iNe8Lzj;Yd#9*?D~}w7 zE7W)N)Tq&|oZ}?p zRIPDo;c}#_qjWCIMJpiIBgjHen%c6Ff(YxMk?cmF4!(-CwHmhbYx}F^fzv;SP(3?+ zG({R0;W;3Jety5W`hFTuatqIHx?ZR+WnB-U9W(v=X%;~S7F__Lo?(I9OtLkwvt7Pd^nVK zNQD{EklHdZpl}Gl<$z9pK%Y#0%o{*SB(3^|G#n2o6s%<>Cze1@RD_Saf^pb=G@=j% zHg%hEi6?@a1Svmzwgx(&B;&WQL8Jm&Zkz<$BAJ_x!)<6&jYkMpM;=)CxMfLKaez;! z`!ymtNj+?ujJt;{$?Z{+=#3_f>)g^(60C%UVDamZi?2RPN&Gb^(=uk|Yb#7Y6Ox)h zELOM?p^5)w}`tPl=J z{7$-R1~;QE$dVU5Q#+dWyb>&ami9k=|(P^2LW@)i>v(Uf5%JH)h9zw(B4 z#kx5fG*?EZIUYMbt5wJ`>eUF)rov(L2~qi(47B1LNnQ#^A;c1%nFjzIjV3o1NC?Q^ z!9M>0-dx~%w)ijq)#J+Kg6VnSc^`rkh*x+Ck>Pn>`jaP(5Do;MR#zJw|BcRTDVB@dLK?SEJj)y!>eFig}bRQv&8X`HO zN7w_JfWiDa5~H8nf!{$Sk7_DgUl1pu2d~%S>DNk45o2Ylp@k@YPJ#(TOnI~=AmvyY zKP-$4Cmx;u01XjNG~GOwG|*vH3BxI|hJ;FZ#K-n00NJh)^m)&c-&TzNcQ`GO1wW09wzU-yonW>Wld6|w3IC@$XUuk z7{XVad?0r1t~OY~$g5H#kOs&u6^&Yc)amx(P|edpktMdnX;YCG@$tY4P)X=@3Gv9o z`8%6-rj8LwFyap3zu(xUJ%R01*xQxZ@hTS*ZTXID4=d zxUV7|CY?2hSd1C^_?w@`;@F;G%ymf|HkA|g3|^KLxQSW4EU`jOXL4$thJ z9s^2beWk>lF6j^Zt?U7EIKJ1-i&ip=4<2uVvET*`U7w`m&g%ZXnI@4-pwk|f@_3>% zYD;BF>No`j6rRL)`kiHaNH2;wp3)YXMCUq-gmV}DYR~sVD5W-yNoRRRQSQ#A$ zPK5S8nxJtfRVJP{GeIP@D*T2dCU zP=J)5ivy7;Q6n9b)3@x?oE90T%fZuBZ9a;&TLlUkJc;!wNk$4u{pA@h_ zJ<2Zbov4?XkhC_E>E(pu?sei60PHYF@zlCm9LL!DDZ*M?e1QrATqu)7nDTo7=fK&= zT&u6hjzjh8?pk)t!EmhbY)hhe4L8r+l$3g#F2ZqcC~*kMDpycAf>fZcnNOhg*CAU> z=;sz&CKp>BMJ~5C_atPe*s9K3N*}N>}Ldj9~Lb;miaanUAP>ELzRNbK+MC|aJ*#c|G(93afS5G}Saj_XDuBmQdlf)zwkVkGK86fuGo#FClad$*Bn;$q&U5n5s2KDbT8fHZjg;Vz zO!V|WUY{Z~Xsn4OFqZiejF7C1=N&tbUij(q(WDXWL{22~I8HN@`~5vLqfM>oYwDby zfN|;2`gQqe6k$46i_1)gR-}SCk6wcZpwFVQ^zWwJ0U6|`(~=|^U0LSER4|Bna0I1D z!U*Vs0(mR1sr`E4v8e5Tz1EdL@csvXqA%R7PQQxb-~Qj z#bctrWwp9iIe5WC>DeF`xU!dM%T0x|@Ku$**Jk(Z=%m;!n3(YhUf<1m3xxgMZ3IMz^e#Q@ z3Aexfs@^#_Dl@R|J?yPD4b&7k#U&z~3up9ClA^vnao@LgGJBU+pyZtv8dy*yF z-K3COIawFxFazySR_DELyUuf!JEp%=ug-nNDd{ySZ%JB-Imz=BK*9CbQ3X9cEMh8V zHaN#7fCss9)pgaC@98Tge2>1aB>S{pthW}5{6!=a#q<;YG3D^5>HWG~o`LX1Mo6h) zAHp9M()Y9Sw{p%@DBw8URG|n8$pJtPBZaB zS3O>tPKMlHwBJHf(?qGIta5QmPjwFc5AD|*uZpQh*!@ zBn*uh5BZ>_2He<{;-9_^%_>7rw9*R6>aY|B6rNo(kVx%~A>3@&M0^10syTCUT9Dd8 z<)i#T(_o>rJo|tY z54aVMImg#JgzeB_F3w3EbFGj&`l@rS9V>Fu=lhB@N3|owm3FC5ZOW<{VALZvwv_9R q4=u-<4j~FB1F7lLrj-`ywsH}fk;Num_H7MC%y7iZi+%fh*Z'); + }); + //Open the uploader dialog + custom_uploader.open(); + }); +}); + +/** + * Hide or show fields on checkbox change + */ +jQuery('#enable_podcast_redirection').change(function () { + podcast_redirect(this.checked); +}); + +/** + * Hide or show the fields on document load + */ +jQuery(document).ready(function () { + var check = jQuery('#enable_podcast_redirection'); + if (check.length) { + podcast_redirect(check.is(':checked')); + } +}); + +/** + * Shows or hides podcast redirection fields + * + * @param {bool} show True to show, false to hide + */ +function podcast_redirect(show) { + if (typeof(show) !== 'boolean') + return; + + var el = [ + jQuery('#podcast_redirection_old_url'), + jQuery('#podcast_redirection_new_url') + ]; + + for (var i = 0; i < el.length; i++) { + var temp = el[i]; + + while (!temp.is("tr")) { + temp = temp.parent(); + } + + show ? temp.show() : temp.hide(); + } +} diff --git a/assets/js/admin/settings.min.js b/assets/js/admin/settings.min.js new file mode 100644 index 0000000..b7de8f6 --- /dev/null +++ b/assets/js/admin/settings.min.js @@ -0,0 +1 @@ +jQuery(document).ready(function($){var custom_uploader;$("#upload_default_image").click(function(e){e.preventDefault();if(custom_uploader){custom_uploader.open();return}custom_uploader=wp.media.frames.file_frame=wp.media({title:"Choose Image",button:{text:"Choose Image"},multiple:false});custom_uploader.on("select",function(){attachment=custom_uploader.state().get("selection").first().toJSON();$("#default_image").val(attachment.url);$("#default-image-thumb-load").html('
')});custom_uploader.open()})});jQuery("#enable_podcast_redirection").change(function(){podcast_redirect(this.checked)});jQuery(document).ready(function(){var check=jQuery("#enable_podcast_redirection");if(check.length){podcast_redirect(check.is(":checked"))}});function podcast_redirect(show){if(typeof show!=="boolean")return;var el=[jQuery("#podcast_redirection_old_url"),jQuery("#podcast_redirection_new_url")];for(var i=0;i' ).val( id ).text( item ) ); + } + ); + + if ( response.selected ) { + table_row.find( 'select' ).val( response.selected ).change(); + } else { + table_row.find( 'select' ).prop( "selectedIndex", 0 ); + } + + if ( Object.keys( response.options ).length === 0 ) { + table_row.addClass( 'hidden' ); + return; + } + break; + } + } + + if ( false === response ) { + table_row.addClass( 'hidden' ); + } + } + ).fail( + function () { + // Write error message if response is invalid. + switch ( element.prop( 'tabName' ) ) { + case 'SELECT': + element.append( jQuery( '
') !== '7'; + }); + + // IE <= 11 replaces $0 with the whole match, as if it was $& + // https://stackoverflow.com/questions/6024666/getting-ie-to-replace-a-regex-with-the-literal-string-0 + var REPLACE_KEEPS_$0 = (function () { + return 'a'.replace(/./, '$0') === '$0'; + })(); + + var REPLACE = wellKnownSymbol('replace'); + // Safari <= 13.0.3(?) substitutes nth capture where n>m with an empty string + var REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE = (function () { + if (/./[REPLACE]) { + return /./[REPLACE]('a', '$0') === ''; + } + return false; + })(); + + // Chrome 51 has a buggy "split" implementation when RegExp#exec !== nativeExec + // Weex JS has frozen built-in prototypes, so use try / catch wrapper + var SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = !fails(function () { + var re = /(?:)/; + var originalExec = re.exec; + re.exec = function () { return originalExec.apply(this, arguments); }; + var result = 'ab'.split(re); + return result.length !== 2 || result[0] !== 'a' || result[1] !== 'b'; + }); + + var fixRegexpWellKnownSymbolLogic = function (KEY, length, exec, sham) { + var SYMBOL = wellKnownSymbol(KEY); + + var DELEGATES_TO_SYMBOL = !fails(function () { + // String methods call symbol-named RegEp methods + var O = {}; + O[SYMBOL] = function () { return 7; }; + return ''[KEY](O) != 7; + }); + + var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL && !fails(function () { + // Symbol-named RegExp methods call .exec + var execCalled = false; + var re = /a/; + + if (KEY === 'split') { + // We can't use real regex here since it causes deoptimization + // and serious performance degradation in V8 + // https://github.com/zloirock/core-js/issues/306 + re = {}; + // RegExp[@@split] doesn't call the regex's exec method, but first creates + // a new one. We need to return the patched regex when creating the new one. + re.constructor = {}; + re.constructor[SPECIES$3] = function () { return re; }; + re.flags = ''; + re[SYMBOL] = /./[SYMBOL]; + } + + re.exec = function () { execCalled = true; return null; }; + + re[SYMBOL](''); + return !execCalled; + }); + + if ( + !DELEGATES_TO_SYMBOL || + !DELEGATES_TO_EXEC || + (KEY === 'replace' && !( + REPLACE_SUPPORTS_NAMED_GROUPS && + REPLACE_KEEPS_$0 && + !REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE + )) || + (KEY === 'split' && !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC) + ) { + var nativeRegExpMethod = /./[SYMBOL]; + var methods = exec(SYMBOL, ''[KEY], function (nativeMethod, regexp, str, arg2, forceStringMethod) { + if (regexp.exec === regexpExec) { + if (DELEGATES_TO_SYMBOL && !forceStringMethod) { + // The native String method already delegates to @@method (this + // polyfilled function), leasing to infinite recursion. + // We avoid it by directly calling the native @@method method. + return { done: true, value: nativeRegExpMethod.call(regexp, str, arg2) }; + } + return { done: true, value: nativeMethod.call(str, regexp, arg2) }; + } + return { done: false }; + }, { + REPLACE_KEEPS_$0: REPLACE_KEEPS_$0, + REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE: REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE + }); + var stringMethod = methods[0]; + var regexMethod = methods[1]; + + redefine(String.prototype, KEY, stringMethod); + redefine(RegExp.prototype, SYMBOL, length == 2 + // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue) + // 21.2.5.11 RegExp.prototype[@@split](string, limit) + ? function (string, arg) { return regexMethod.call(string, this, arg); } + // 21.2.5.6 RegExp.prototype[@@match](string) + // 21.2.5.9 RegExp.prototype[@@search](string) + : function (string) { return regexMethod.call(string, this); } + ); + } + + if (sham) createNonEnumerableProperty(RegExp.prototype[SYMBOL], 'sham', true); + }; + + var charAt$1 = stringMultibyte.charAt; + + // `AdvanceStringIndex` abstract operation + // https://tc39.github.io/ecma262/#sec-advancestringindex + var advanceStringIndex = function (S, index, unicode) { + return index + (unicode ? charAt$1(S, index).length : 1); + }; + + // `RegExpExec` abstract operation + // https://tc39.github.io/ecma262/#sec-regexpexec + var regexpExecAbstract = function (R, S) { + var exec = R.exec; + if (typeof exec === 'function') { + var result = exec.call(R, S); + if (typeof result !== 'object') { + throw TypeError('RegExp exec method returned something other than an Object or null'); + } + return result; + } + + if (classofRaw(R) !== 'RegExp') { + throw TypeError('RegExp#exec called on incompatible receiver'); + } + + return regexpExec.call(R, S); + }; + + var max$2 = Math.max; + var min$2 = Math.min; + var floor$1 = Math.floor; + var SUBSTITUTION_SYMBOLS = /\$([$&'`]|\d\d?|<[^>]*>)/g; + var SUBSTITUTION_SYMBOLS_NO_NAMED = /\$([$&'`]|\d\d?)/g; + + var maybeToString = function (it) { + return it === undefined ? it : String(it); + }; + + // @@replace logic + fixRegexpWellKnownSymbolLogic('replace', 2, function (REPLACE, nativeReplace, maybeCallNative, reason) { + var REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE = reason.REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE; + var REPLACE_KEEPS_$0 = reason.REPLACE_KEEPS_$0; + var UNSAFE_SUBSTITUTE = REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE ? '$' : '$0'; + + return [ + // `String.prototype.replace` method + // https://tc39.github.io/ecma262/#sec-string.prototype.replace + function replace(searchValue, replaceValue) { + var O = requireObjectCoercible(this); + var replacer = searchValue == undefined ? undefined : searchValue[REPLACE]; + return replacer !== undefined + ? replacer.call(searchValue, O, replaceValue) + : nativeReplace.call(String(O), searchValue, replaceValue); + }, + // `RegExp.prototype[@@replace]` method + // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@replace + function (regexp, replaceValue) { + if ( + (!REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE && REPLACE_KEEPS_$0) || + (typeof replaceValue === 'string' && replaceValue.indexOf(UNSAFE_SUBSTITUTE) === -1) + ) { + var res = maybeCallNative(nativeReplace, regexp, this, replaceValue); + if (res.done) return res.value; + } + + var rx = anObject(regexp); + var S = String(this); + + var functionalReplace = typeof replaceValue === 'function'; + if (!functionalReplace) replaceValue = String(replaceValue); + + var global = rx.global; + if (global) { + var fullUnicode = rx.unicode; + rx.lastIndex = 0; + } + var results = []; + while (true) { + var result = regexpExecAbstract(rx, S); + if (result === null) break; + + results.push(result); + if (!global) break; + + var matchStr = String(result[0]); + if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode); + } + + var accumulatedResult = ''; + var nextSourcePosition = 0; + for (var i = 0; i < results.length; i++) { + result = results[i]; + + var matched = String(result[0]); + var position = max$2(min$2(toInteger(result.index), S.length), 0); + var captures = []; + // NOTE: This is equivalent to + // captures = result.slice(1).map(maybeToString) + // but for some reason `nativeSlice.call(result, 1, result.length)` (called in + // the slice polyfill when slicing native arrays) "doesn't work" in safari 9 and + // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it. + for (var j = 1; j < result.length; j++) captures.push(maybeToString(result[j])); + var namedCaptures = result.groups; + if (functionalReplace) { + var replacerArgs = [matched].concat(captures, position, S); + if (namedCaptures !== undefined) replacerArgs.push(namedCaptures); + var replacement = String(replaceValue.apply(undefined, replacerArgs)); + } else { + replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue); + } + if (position >= nextSourcePosition) { + accumulatedResult += S.slice(nextSourcePosition, position) + replacement; + nextSourcePosition = position + matched.length; + } + } + return accumulatedResult + S.slice(nextSourcePosition); + } + ]; + + // https://tc39.github.io/ecma262/#sec-getsubstitution + function getSubstitution(matched, str, position, captures, namedCaptures, replacement) { + var tailPos = position + matched.length; + var m = captures.length; + var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED; + if (namedCaptures !== undefined) { + namedCaptures = toObject(namedCaptures); + symbols = SUBSTITUTION_SYMBOLS; + } + return nativeReplace.call(replacement, symbols, function (match, ch) { + var capture; + switch (ch.charAt(0)) { + case '$': return '$'; + case '&': return matched; + case '`': return str.slice(0, position); + case "'": return str.slice(tailPos); + case '<': + capture = namedCaptures[ch.slice(1, -1)]; + break; + default: // \d\d? + var n = +ch; + if (n === 0) return match; + if (n > m) { + var f = floor$1(n / 10); + if (f === 0) return match; + if (f <= m) return captures[f - 1] === undefined ? ch.charAt(1) : captures[f - 1] + ch.charAt(1); + return match; + } + capture = captures[n - 1]; + } + return capture === undefined ? '' : capture; + }); + } + }); + + // `SameValue` abstract operation + // https://tc39.github.io/ecma262/#sec-samevalue + var sameValue = Object.is || function is(x, y) { + // eslint-disable-next-line no-self-compare + return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y; + }; + + // @@search logic + fixRegexpWellKnownSymbolLogic('search', 1, function (SEARCH, nativeSearch, maybeCallNative) { + return [ + // `String.prototype.search` method + // https://tc39.github.io/ecma262/#sec-string.prototype.search + function search(regexp) { + var O = requireObjectCoercible(this); + var searcher = regexp == undefined ? undefined : regexp[SEARCH]; + return searcher !== undefined ? searcher.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O)); + }, + // `RegExp.prototype[@@search]` method + // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@search + function (regexp) { + var res = maybeCallNative(nativeSearch, regexp, this); + if (res.done) return res.value; + + var rx = anObject(regexp); + var S = String(this); + + var previousLastIndex = rx.lastIndex; + if (!sameValue(previousLastIndex, 0)) rx.lastIndex = 0; + var result = regexpExecAbstract(rx, S); + if (!sameValue(rx.lastIndex, previousLastIndex)) rx.lastIndex = previousLastIndex; + return result === null ? -1 : result.index; + } + ]; + }); + + var MATCH = wellKnownSymbol('match'); + + // `IsRegExp` abstract operation + // https://tc39.github.io/ecma262/#sec-isregexp + var isRegexp = function (it) { + var isRegExp; + return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : classofRaw(it) == 'RegExp'); + }; + + var SPECIES$4 = wellKnownSymbol('species'); + + // `SpeciesConstructor` abstract operation + // https://tc39.github.io/ecma262/#sec-speciesconstructor + var speciesConstructor = function (O, defaultConstructor) { + var C = anObject(O).constructor; + var S; + return C === undefined || (S = anObject(C)[SPECIES$4]) == undefined ? defaultConstructor : aFunction$1(S); + }; + + var arrayPush = [].push; + var min$3 = Math.min; + var MAX_UINT32 = 0xFFFFFFFF; + + // babel-minify transpiles RegExp('x', 'y') -> /x/y and it causes SyntaxError + var SUPPORTS_Y = !fails(function () { return !RegExp(MAX_UINT32, 'y'); }); + + // @@split logic + fixRegexpWellKnownSymbolLogic('split', 2, function (SPLIT, nativeSplit, maybeCallNative) { + var internalSplit; + if ( + 'abbc'.split(/(b)*/)[1] == 'c' || + 'test'.split(/(?:)/, -1).length != 4 || + 'ab'.split(/(?:ab)*/).length != 2 || + '.'.split(/(.?)(.?)/).length != 4 || + '.'.split(/()()/).length > 1 || + ''.split(/.?/).length + ) { + // based on es5-shim implementation, need to rework it + internalSplit = function (separator, limit) { + var string = String(requireObjectCoercible(this)); + var lim = limit === undefined ? MAX_UINT32 : limit >>> 0; + if (lim === 0) return []; + if (separator === undefined) return [string]; + // If `separator` is not a regex, use native split + if (!isRegexp(separator)) { + return nativeSplit.call(string, separator, lim); + } + var output = []; + var flags = (separator.ignoreCase ? 'i' : '') + + (separator.multiline ? 'm' : '') + + (separator.unicode ? 'u' : '') + + (separator.sticky ? 'y' : ''); + var lastLastIndex = 0; + // Make `global` and avoid `lastIndex` issues by working with a copy + var separatorCopy = new RegExp(separator.source, flags + 'g'); + var match, lastIndex, lastLength; + while (match = regexpExec.call(separatorCopy, string)) { + lastIndex = separatorCopy.lastIndex; + if (lastIndex > lastLastIndex) { + output.push(string.slice(lastLastIndex, match.index)); + if (match.length > 1 && match.index < string.length) arrayPush.apply(output, match.slice(1)); + lastLength = match[0].length; + lastLastIndex = lastIndex; + if (output.length >= lim) break; + } + if (separatorCopy.lastIndex === match.index) separatorCopy.lastIndex++; // Avoid an infinite loop + } + if (lastLastIndex === string.length) { + if (lastLength || !separatorCopy.test('')) output.push(''); + } else output.push(string.slice(lastLastIndex)); + return output.length > lim ? output.slice(0, lim) : output; + }; + // Chakra, V8 + } else if ('0'.split(undefined, 0).length) { + internalSplit = function (separator, limit) { + return separator === undefined && limit === 0 ? [] : nativeSplit.call(this, separator, limit); + }; + } else internalSplit = nativeSplit; + + return [ + // `String.prototype.split` method + // https://tc39.github.io/ecma262/#sec-string.prototype.split + function split(separator, limit) { + var O = requireObjectCoercible(this); + var splitter = separator == undefined ? undefined : separator[SPLIT]; + return splitter !== undefined + ? splitter.call(separator, O, limit) + : internalSplit.call(String(O), separator, limit); + }, + // `RegExp.prototype[@@split]` method + // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@split + // + // NOTE: This cannot be properly polyfilled in engines that don't support + // the 'y' flag. + function (regexp, limit) { + var res = maybeCallNative(internalSplit, regexp, this, limit, internalSplit !== nativeSplit); + if (res.done) return res.value; + + var rx = anObject(regexp); + var S = String(this); + var C = speciesConstructor(rx, RegExp); + + var unicodeMatching = rx.unicode; + var flags = (rx.ignoreCase ? 'i' : '') + + (rx.multiline ? 'm' : '') + + (rx.unicode ? 'u' : '') + + (SUPPORTS_Y ? 'y' : 'g'); + + // ^(? + rx + ) is needed, in combination with some S slicing, to + // simulate the 'y' flag. + var splitter = new C(SUPPORTS_Y ? rx : '^(?:' + rx.source + ')', flags); + var lim = limit === undefined ? MAX_UINT32 : limit >>> 0; + if (lim === 0) return []; + if (S.length === 0) return regexpExecAbstract(splitter, S) === null ? [S] : []; + var p = 0; + var q = 0; + var A = []; + while (q < S.length) { + splitter.lastIndex = SUPPORTS_Y ? q : 0; + var z = regexpExecAbstract(splitter, SUPPORTS_Y ? S : S.slice(q)); + var e; + if ( + z === null || + (e = min$3(toLength(splitter.lastIndex + (SUPPORTS_Y ? 0 : q)), S.length)) === p + ) { + q = advanceStringIndex(S, q, unicodeMatching); + } else { + A.push(S.slice(p, q)); + if (A.length === lim) return A; + for (var i = 1; i <= z.length - 1; i++) { + A.push(z[i]); + if (A.length === lim) return A; + } + q = p = e; + } + } + A.push(S.slice(p)); + return A; + } + ]; + }, !SUPPORTS_Y); + + // iterable DOM collections + // flag - `iterable` interface - 'entries', 'keys', 'values', 'forEach' methods + var domIterables = { + CSSRuleList: 0, + CSSStyleDeclaration: 0, + CSSValueList: 0, + ClientRectList: 0, + DOMRectList: 0, + DOMStringList: 0, + DOMTokenList: 1, + DataTransferItemList: 0, + FileList: 0, + HTMLAllCollection: 0, + HTMLCollection: 0, + HTMLFormElement: 0, + HTMLSelectElement: 0, + MediaList: 0, + MimeTypeArray: 0, + NamedNodeMap: 0, + NodeList: 1, + PaintRequestList: 0, + Plugin: 0, + PluginArray: 0, + SVGLengthList: 0, + SVGNumberList: 0, + SVGPathSegList: 0, + SVGPointList: 0, + SVGStringList: 0, + SVGTransformList: 0, + SourceBufferList: 0, + StyleSheetList: 0, + TextTrackCueList: 0, + TextTrackList: 0, + TouchList: 0 + }; + + for (var COLLECTION_NAME in domIterables) { + var Collection = global_1[COLLECTION_NAME]; + var CollectionPrototype = Collection && Collection.prototype; + // some Chrome versions have non-configurable methods on DOMTokenList + if (CollectionPrototype && CollectionPrototype.forEach !== arrayForEach) try { + createNonEnumerableProperty(CollectionPrototype, 'forEach', arrayForEach); + } catch (error) { + CollectionPrototype.forEach = arrayForEach; + } + } + + var ITERATOR$2 = wellKnownSymbol('iterator'); + var TO_STRING_TAG$3 = wellKnownSymbol('toStringTag'); + var ArrayValues = es_array_iterator.values; + + for (var COLLECTION_NAME$1 in domIterables) { + var Collection$1 = global_1[COLLECTION_NAME$1]; + var CollectionPrototype$1 = Collection$1 && Collection$1.prototype; + if (CollectionPrototype$1) { + // some Chrome versions have non-configurable methods on DOMTokenList + if (CollectionPrototype$1[ITERATOR$2] !== ArrayValues) try { + createNonEnumerableProperty(CollectionPrototype$1, ITERATOR$2, ArrayValues); + } catch (error) { + CollectionPrototype$1[ITERATOR$2] = ArrayValues; + } + if (!CollectionPrototype$1[TO_STRING_TAG$3]) { + createNonEnumerableProperty(CollectionPrototype$1, TO_STRING_TAG$3, COLLECTION_NAME$1); + } + if (domIterables[COLLECTION_NAME$1]) for (var METHOD_NAME in es_array_iterator) { + // some Chrome versions have non-configurable methods on DOMTokenList + if (CollectionPrototype$1[METHOD_NAME] !== es_array_iterator[METHOD_NAME]) try { + createNonEnumerableProperty(CollectionPrototype$1, METHOD_NAME, es_array_iterator[METHOD_NAME]); + } catch (error) { + CollectionPrototype$1[METHOD_NAME] = es_array_iterator[METHOD_NAME]; + } + } + } + } + + var ITERATOR$3 = wellKnownSymbol('iterator'); + + var nativeUrl = !fails(function () { + var url = new URL('b?a=1&b=2&c=3', 'http://a'); + var searchParams = url.searchParams; + var result = ''; + url.pathname = 'c%20d'; + searchParams.forEach(function (value, key) { + searchParams['delete']('b'); + result += key + value; + }); + return (isPure && !url.toJSON) + || !searchParams.sort + || url.href !== 'http://a/c%20d?a=1&c=3' + || searchParams.get('c') !== '3' + || String(new URLSearchParams('?a=1')) !== 'a=1' + || !searchParams[ITERATOR$3] + // throws in Edge + || new URL('https://a@b').username !== 'a' + || new URLSearchParams(new URLSearchParams('a=b')).get('a') !== 'b' + // not punycoded in Edge + || new URL('http://тест').host !== 'xn--e1aybc' + // not escaped in Chrome 62- + || new URL('http://a#б').hash !== '#%D0%B1' + // fails in Chrome 66- + || result !== 'a1c3' + // throws in Safari + || new URL('http://x', undefined).host !== 'x'; + }); + + var anInstance = function (it, Constructor, name) { + if (!(it instanceof Constructor)) { + throw TypeError('Incorrect ' + (name ? name + ' ' : '') + 'invocation'); + } return it; + }; + + var nativeAssign = Object.assign; + var defineProperty$4 = Object.defineProperty; + + // `Object.assign` method + // https://tc39.github.io/ecma262/#sec-object.assign + var objectAssign = !nativeAssign || fails(function () { + // should have correct order of operations (Edge bug) + if (descriptors && nativeAssign({ b: 1 }, nativeAssign(defineProperty$4({}, 'a', { + enumerable: true, + get: function () { + defineProperty$4(this, 'b', { + value: 3, + enumerable: false + }); + } + }), { b: 2 })).b !== 1) return true; + // should work with symbols and should have deterministic property order (V8 bug) + var A = {}; + var B = {}; + // eslint-disable-next-line no-undef + var symbol = Symbol(); + var alphabet = 'abcdefghijklmnopqrst'; + A[symbol] = 7; + alphabet.split('').forEach(function (chr) { B[chr] = chr; }); + return nativeAssign({}, A)[symbol] != 7 || objectKeys(nativeAssign({}, B)).join('') != alphabet; + }) ? function assign(target, source) { // eslint-disable-line no-unused-vars + var T = toObject(target); + var argumentsLength = arguments.length; + var index = 1; + var getOwnPropertySymbols = objectGetOwnPropertySymbols.f; + var propertyIsEnumerable = objectPropertyIsEnumerable.f; + while (argumentsLength > index) { + var S = indexedObject(arguments[index++]); + var keys = getOwnPropertySymbols ? objectKeys(S).concat(getOwnPropertySymbols(S)) : objectKeys(S); + var length = keys.length; + var j = 0; + var key; + while (length > j) { + key = keys[j++]; + if (!descriptors || propertyIsEnumerable.call(S, key)) T[key] = S[key]; + } + } return T; + } : nativeAssign; + + // call something on iterator step with safe closing on error + var callWithSafeIterationClosing = function (iterator, fn, value, ENTRIES) { + try { + return ENTRIES ? fn(anObject(value)[0], value[1]) : fn(value); + // 7.4.6 IteratorClose(iterator, completion) + } catch (error) { + var returnMethod = iterator['return']; + if (returnMethod !== undefined) anObject(returnMethod.call(iterator)); + throw error; + } + }; + + var ITERATOR$4 = wellKnownSymbol('iterator'); + var ArrayPrototype$1 = Array.prototype; + + // check on default Array iterator + var isArrayIteratorMethod = function (it) { + return it !== undefined && (iterators.Array === it || ArrayPrototype$1[ITERATOR$4] === it); + }; + + var ITERATOR$5 = wellKnownSymbol('iterator'); + + var getIteratorMethod = function (it) { + if (it != undefined) return it[ITERATOR$5] + || it['@@iterator'] + || iterators[classof(it)]; + }; + + // `Array.from` method implementation + // https://tc39.github.io/ecma262/#sec-array.from + var arrayFrom = function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) { + var O = toObject(arrayLike); + var C = typeof this == 'function' ? this : Array; + var argumentsLength = arguments.length; + var mapfn = argumentsLength > 1 ? arguments[1] : undefined; + var mapping = mapfn !== undefined; + var iteratorMethod = getIteratorMethod(O); + var index = 0; + var length, result, step, iterator, next, value; + if (mapping) mapfn = functionBindContext(mapfn, argumentsLength > 2 ? arguments[2] : undefined, 2); + // if the target is not iterable or it's an array with the default iterator - use a simple case + if (iteratorMethod != undefined && !(C == Array && isArrayIteratorMethod(iteratorMethod))) { + iterator = iteratorMethod.call(O); + next = iterator.next; + result = new C(); + for (;!(step = next.call(iterator)).done; index++) { + value = mapping ? callWithSafeIterationClosing(iterator, mapfn, [step.value, index], true) : step.value; + createProperty(result, index, value); + } + } else { + length = toLength(O.length); + result = new C(length); + for (;length > index; index++) { + value = mapping ? mapfn(O[index], index) : O[index]; + createProperty(result, index, value); + } + } + result.length = index; + return result; + }; + + // based on https://github.com/bestiejs/punycode.js/blob/master/punycode.js + var maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1 + var base = 36; + var tMin = 1; + var tMax = 26; + var skew = 38; + var damp = 700; + var initialBias = 72; + var initialN = 128; // 0x80 + var delimiter = '-'; // '\x2D' + var regexNonASCII = /[^\0-\u007E]/; // non-ASCII chars + var regexSeparators = /[.\u3002\uFF0E\uFF61]/g; // RFC 3490 separators + var OVERFLOW_ERROR = 'Overflow: input needs wider integers to process'; + var baseMinusTMin = base - tMin; + var floor$2 = Math.floor; + var stringFromCharCode = String.fromCharCode; + + /** + * Creates an array containing the numeric code points of each Unicode + * character in the string. While JavaScript uses UCS-2 internally, + * this function will convert a pair of surrogate halves (each of which + * UCS-2 exposes as separate characters) into a single code point, + * matching UTF-16. + */ + var ucs2decode = function (string) { + var output = []; + var counter = 0; + var length = string.length; + while (counter < length) { + var value = string.charCodeAt(counter++); + if (value >= 0xD800 && value <= 0xDBFF && counter < length) { + // It's a high surrogate, and there is a next character. + var extra = string.charCodeAt(counter++); + if ((extra & 0xFC00) == 0xDC00) { // Low surrogate. + output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000); + } else { + // It's an unmatched surrogate; only append this code unit, in case the + // next code unit is the high surrogate of a surrogate pair. + output.push(value); + counter--; + } + } else { + output.push(value); + } + } + return output; + }; + + /** + * Converts a digit/integer into a basic code point. + */ + var digitToBasic = function (digit) { + // 0..25 map to ASCII a..z or A..Z + // 26..35 map to ASCII 0..9 + return digit + 22 + 75 * (digit < 26); + }; + + /** + * Bias adaptation function as per section 3.4 of RFC 3492. + * https://tools.ietf.org/html/rfc3492#section-3.4 + */ + var adapt = function (delta, numPoints, firstTime) { + var k = 0; + delta = firstTime ? floor$2(delta / damp) : delta >> 1; + delta += floor$2(delta / numPoints); + for (; delta > baseMinusTMin * tMax >> 1; k += base) { + delta = floor$2(delta / baseMinusTMin); + } + return floor$2(k + (baseMinusTMin + 1) * delta / (delta + skew)); + }; + + /** + * Converts a string of Unicode symbols (e.g. a domain name label) to a + * Punycode string of ASCII-only symbols. + */ + // eslint-disable-next-line max-statements + var encode = function (input) { + var output = []; + + // Convert the input in UCS-2 to an array of Unicode code points. + input = ucs2decode(input); + + // Cache the length. + var inputLength = input.length; + + // Initialize the state. + var n = initialN; + var delta = 0; + var bias = initialBias; + var i, currentValue; + + // Handle the basic code points. + for (i = 0; i < input.length; i++) { + currentValue = input[i]; + if (currentValue < 0x80) { + output.push(stringFromCharCode(currentValue)); + } + } + + var basicLength = output.length; // number of basic code points. + var handledCPCount = basicLength; // number of code points that have been handled; + + // Finish the basic string with a delimiter unless it's empty. + if (basicLength) { + output.push(delimiter); + } + + // Main encoding loop: + while (handledCPCount < inputLength) { + // All non-basic code points < n have been handled already. Find the next larger one: + var m = maxInt; + for (i = 0; i < input.length; i++) { + currentValue = input[i]; + if (currentValue >= n && currentValue < m) { + m = currentValue; + } + } + + // Increase `delta` enough to advance the decoder's state to , but guard against overflow. + var handledCPCountPlusOne = handledCPCount + 1; + if (m - n > floor$2((maxInt - delta) / handledCPCountPlusOne)) { + throw RangeError(OVERFLOW_ERROR); + } + + delta += (m - n) * handledCPCountPlusOne; + n = m; + + for (i = 0; i < input.length; i++) { + currentValue = input[i]; + if (currentValue < n && ++delta > maxInt) { + throw RangeError(OVERFLOW_ERROR); + } + if (currentValue == n) { + // Represent delta as a generalized variable-length integer. + var q = delta; + for (var k = base; /* no condition */; k += base) { + var t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); + if (q < t) break; + var qMinusT = q - t; + var baseMinusT = base - t; + output.push(stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT))); + q = floor$2(qMinusT / baseMinusT); + } + + output.push(stringFromCharCode(digitToBasic(q))); + bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength); + delta = 0; + ++handledCPCount; + } + } + + ++delta; + ++n; + } + return output.join(''); + }; + + var stringPunycodeToAscii = function (input) { + var encoded = []; + var labels = input.toLowerCase().replace(regexSeparators, '\u002E').split('.'); + var i, label; + for (i = 0; i < labels.length; i++) { + label = labels[i]; + encoded.push(regexNonASCII.test(label) ? 'xn--' + encode(label) : label); + } + return encoded.join('.'); + }; + + var redefineAll = function (target, src, options) { + for (var key in src) redefine(target, key, src[key], options); + return target; + }; + + var getIterator = function (it) { + var iteratorMethod = getIteratorMethod(it); + if (typeof iteratorMethod != 'function') { + throw TypeError(String(it) + ' is not iterable'); + } return anObject(iteratorMethod.call(it)); + }; + + // TODO: in core-js@4, move /modules/ dependencies to public entries for better optimization by tools like `preset-env` + + + + + + + + + + + + + + + + + + + + + + var $fetch = getBuiltIn('fetch'); + var Headers = getBuiltIn('Headers'); + var ITERATOR$6 = wellKnownSymbol('iterator'); + var URL_SEARCH_PARAMS = 'URLSearchParams'; + var URL_SEARCH_PARAMS_ITERATOR = URL_SEARCH_PARAMS + 'Iterator'; + var setInternalState$3 = internalState.set; + var getInternalParamsState = internalState.getterFor(URL_SEARCH_PARAMS); + var getInternalIteratorState = internalState.getterFor(URL_SEARCH_PARAMS_ITERATOR); + + var plus = /\+/g; + var sequences = Array(4); + + var percentSequence = function (bytes) { + return sequences[bytes - 1] || (sequences[bytes - 1] = RegExp('((?:%[\\da-f]{2}){' + bytes + '})', 'gi')); + }; + + var percentDecode = function (sequence) { + try { + return decodeURIComponent(sequence); + } catch (error) { + return sequence; + } + }; + + var deserialize = function (it) { + var result = it.replace(plus, ' '); + var bytes = 4; + try { + return decodeURIComponent(result); + } catch (error) { + while (bytes) { + result = result.replace(percentSequence(bytes--), percentDecode); + } + return result; + } + }; + + var find = /[!'()~]|%20/g; + + var replace = { + '!': '%21', + "'": '%27', + '(': '%28', + ')': '%29', + '~': '%7E', + '%20': '+' + }; + + var replacer = function (match) { + return replace[match]; + }; + + var serialize = function (it) { + return encodeURIComponent(it).replace(find, replacer); + }; + + var parseSearchParams = function (result, query) { + if (query) { + var attributes = query.split('&'); + var index = 0; + var attribute, entry; + while (index < attributes.length) { + attribute = attributes[index++]; + if (attribute.length) { + entry = attribute.split('='); + result.push({ + key: deserialize(entry.shift()), + value: deserialize(entry.join('=')) + }); + } + } + } + }; + + var updateSearchParams = function (query) { + this.entries.length = 0; + parseSearchParams(this.entries, query); + }; + + var validateArgumentsLength = function (passed, required) { + if (passed < required) throw TypeError('Not enough arguments'); + }; + + var URLSearchParamsIterator = createIteratorConstructor(function Iterator(params, kind) { + setInternalState$3(this, { + type: URL_SEARCH_PARAMS_ITERATOR, + iterator: getIterator(getInternalParamsState(params).entries), + kind: kind + }); + }, 'Iterator', function next() { + var state = getInternalIteratorState(this); + var kind = state.kind; + var step = state.iterator.next(); + var entry = step.value; + if (!step.done) { + step.value = kind === 'keys' ? entry.key : kind === 'values' ? entry.value : [entry.key, entry.value]; + } return step; + }); + + // `URLSearchParams` constructor + // https://url.spec.whatwg.org/#interface-urlsearchparams + var URLSearchParamsConstructor = function URLSearchParams(/* init */) { + anInstance(this, URLSearchParamsConstructor, URL_SEARCH_PARAMS); + var init = arguments.length > 0 ? arguments[0] : undefined; + var that = this; + var entries = []; + var iteratorMethod, iterator, next, step, entryIterator, entryNext, first, second, key; + + setInternalState$3(that, { + type: URL_SEARCH_PARAMS, + entries: entries, + updateURL: function () { /* empty */ }, + updateSearchParams: updateSearchParams + }); + + if (init !== undefined) { + if (isObject(init)) { + iteratorMethod = getIteratorMethod(init); + if (typeof iteratorMethod === 'function') { + iterator = iteratorMethod.call(init); + next = iterator.next; + while (!(step = next.call(iterator)).done) { + entryIterator = getIterator(anObject(step.value)); + entryNext = entryIterator.next; + if ( + (first = entryNext.call(entryIterator)).done || + (second = entryNext.call(entryIterator)).done || + !entryNext.call(entryIterator).done + ) throw TypeError('Expected sequence with length 2'); + entries.push({ key: first.value + '', value: second.value + '' }); + } + } else for (key in init) if (has(init, key)) entries.push({ key: key, value: init[key] + '' }); + } else { + parseSearchParams(entries, typeof init === 'string' ? init.charAt(0) === '?' ? init.slice(1) : init : init + ''); + } + } + }; + + var URLSearchParamsPrototype = URLSearchParamsConstructor.prototype; + + redefineAll(URLSearchParamsPrototype, { + // `URLSearchParams.prototype.appent` method + // https://url.spec.whatwg.org/#dom-urlsearchparams-append + append: function append(name, value) { + validateArgumentsLength(arguments.length, 2); + var state = getInternalParamsState(this); + state.entries.push({ key: name + '', value: value + '' }); + state.updateURL(); + }, + // `URLSearchParams.prototype.delete` method + // https://url.spec.whatwg.org/#dom-urlsearchparams-delete + 'delete': function (name) { + validateArgumentsLength(arguments.length, 1); + var state = getInternalParamsState(this); + var entries = state.entries; + var key = name + ''; + var index = 0; + while (index < entries.length) { + if (entries[index].key === key) entries.splice(index, 1); + else index++; + } + state.updateURL(); + }, + // `URLSearchParams.prototype.get` method + // https://url.spec.whatwg.org/#dom-urlsearchparams-get + get: function get(name) { + validateArgumentsLength(arguments.length, 1); + var entries = getInternalParamsState(this).entries; + var key = name + ''; + var index = 0; + for (; index < entries.length; index++) { + if (entries[index].key === key) return entries[index].value; + } + return null; + }, + // `URLSearchParams.prototype.getAll` method + // https://url.spec.whatwg.org/#dom-urlsearchparams-getall + getAll: function getAll(name) { + validateArgumentsLength(arguments.length, 1); + var entries = getInternalParamsState(this).entries; + var key = name + ''; + var result = []; + var index = 0; + for (; index < entries.length; index++) { + if (entries[index].key === key) result.push(entries[index].value); + } + return result; + }, + // `URLSearchParams.prototype.has` method + // https://url.spec.whatwg.org/#dom-urlsearchparams-has + has: function has(name) { + validateArgumentsLength(arguments.length, 1); + var entries = getInternalParamsState(this).entries; + var key = name + ''; + var index = 0; + while (index < entries.length) { + if (entries[index++].key === key) return true; + } + return false; + }, + // `URLSearchParams.prototype.set` method + // https://url.spec.whatwg.org/#dom-urlsearchparams-set + set: function set(name, value) { + validateArgumentsLength(arguments.length, 1); + var state = getInternalParamsState(this); + var entries = state.entries; + var found = false; + var key = name + ''; + var val = value + ''; + var index = 0; + var entry; + for (; index < entries.length; index++) { + entry = entries[index]; + if (entry.key === key) { + if (found) entries.splice(index--, 1); + else { + found = true; + entry.value = val; + } + } + } + if (!found) entries.push({ key: key, value: val }); + state.updateURL(); + }, + // `URLSearchParams.prototype.sort` method + // https://url.spec.whatwg.org/#dom-urlsearchparams-sort + sort: function sort() { + var state = getInternalParamsState(this); + var entries = state.entries; + // Array#sort is not stable in some engines + var slice = entries.slice(); + var entry, entriesIndex, sliceIndex; + entries.length = 0; + for (sliceIndex = 0; sliceIndex < slice.length; sliceIndex++) { + entry = slice[sliceIndex]; + for (entriesIndex = 0; entriesIndex < sliceIndex; entriesIndex++) { + if (entries[entriesIndex].key > entry.key) { + entries.splice(entriesIndex, 0, entry); + break; + } + } + if (entriesIndex === sliceIndex) entries.push(entry); + } + state.updateURL(); + }, + // `URLSearchParams.prototype.forEach` method + forEach: function forEach(callback /* , thisArg */) { + var entries = getInternalParamsState(this).entries; + var boundFunction = functionBindContext(callback, arguments.length > 1 ? arguments[1] : undefined, 3); + var index = 0; + var entry; + while (index < entries.length) { + entry = entries[index++]; + boundFunction(entry.value, entry.key, this); + } + }, + // `URLSearchParams.prototype.keys` method + keys: function keys() { + return new URLSearchParamsIterator(this, 'keys'); + }, + // `URLSearchParams.prototype.values` method + values: function values() { + return new URLSearchParamsIterator(this, 'values'); + }, + // `URLSearchParams.prototype.entries` method + entries: function entries() { + return new URLSearchParamsIterator(this, 'entries'); + } + }, { enumerable: true }); + + // `URLSearchParams.prototype[@@iterator]` method + redefine(URLSearchParamsPrototype, ITERATOR$6, URLSearchParamsPrototype.entries); + + // `URLSearchParams.prototype.toString` method + // https://url.spec.whatwg.org/#urlsearchparams-stringification-behavior + redefine(URLSearchParamsPrototype, 'toString', function toString() { + var entries = getInternalParamsState(this).entries; + var result = []; + var index = 0; + var entry; + while (index < entries.length) { + entry = entries[index++]; + result.push(serialize(entry.key) + '=' + serialize(entry.value)); + } return result.join('&'); + }, { enumerable: true }); + + setToStringTag(URLSearchParamsConstructor, URL_SEARCH_PARAMS); + + _export({ global: true, forced: !nativeUrl }, { + URLSearchParams: URLSearchParamsConstructor + }); + + // Wrap `fetch` for correct work with polyfilled `URLSearchParams` + // https://github.com/zloirock/core-js/issues/674 + if (!nativeUrl && typeof $fetch == 'function' && typeof Headers == 'function') { + _export({ global: true, enumerable: true, forced: true }, { + fetch: function fetch(input /* , init */) { + var args = [input]; + var init, body, headers; + if (arguments.length > 1) { + init = arguments[1]; + if (isObject(init)) { + body = init.body; + if (classof(body) === URL_SEARCH_PARAMS) { + headers = init.headers ? new Headers(init.headers) : new Headers(); + if (!headers.has('content-type')) { + headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8'); + } + init = objectCreate(init, { + body: createPropertyDescriptor(0, String(body)), + headers: createPropertyDescriptor(0, headers) + }); + } + } + args.push(init); + } return $fetch.apply(this, args); + } + }); + } + + var web_urlSearchParams = { + URLSearchParams: URLSearchParamsConstructor, + getState: getInternalParamsState + }; + + // TODO: in core-js@4, move /modules/ dependencies to public entries for better optimization by tools like `preset-env` + + + + + + + + + + + + var codeAt = stringMultibyte.codeAt; + + + + + + var NativeURL = global_1.URL; + var URLSearchParams$1 = web_urlSearchParams.URLSearchParams; + var getInternalSearchParamsState = web_urlSearchParams.getState; + var setInternalState$4 = internalState.set; + var getInternalURLState = internalState.getterFor('URL'); + var floor$3 = Math.floor; + var pow = Math.pow; + + var INVALID_AUTHORITY = 'Invalid authority'; + var INVALID_SCHEME = 'Invalid scheme'; + var INVALID_HOST = 'Invalid host'; + var INVALID_PORT = 'Invalid port'; + + var ALPHA = /[A-Za-z]/; + var ALPHANUMERIC = /[\d+\-.A-Za-z]/; + var DIGIT = /\d/; + var HEX_START = /^(0x|0X)/; + var OCT = /^[0-7]+$/; + var DEC = /^\d+$/; + var HEX = /^[\dA-Fa-f]+$/; + // eslint-disable-next-line no-control-regex + var FORBIDDEN_HOST_CODE_POINT = /[\u0000\u0009\u000A\u000D #%/:?@[\\]]/; + // eslint-disable-next-line no-control-regex + var FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT = /[\u0000\u0009\u000A\u000D #/:?@[\\]]/; + // eslint-disable-next-line no-control-regex + var LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE = /^[\u0000-\u001F ]+|[\u0000-\u001F ]+$/g; + // eslint-disable-next-line no-control-regex + var TAB_AND_NEW_LINE = /[\u0009\u000A\u000D]/g; + var EOF; + + var parseHost = function (url, input) { + var result, codePoints, index; + if (input.charAt(0) == '[') { + if (input.charAt(input.length - 1) != ']') return INVALID_HOST; + result = parseIPv6(input.slice(1, -1)); + if (!result) return INVALID_HOST; + url.host = result; + // opaque host + } else if (!isSpecial(url)) { + if (FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT.test(input)) return INVALID_HOST; + result = ''; + codePoints = arrayFrom(input); + for (index = 0; index < codePoints.length; index++) { + result += percentEncode(codePoints[index], C0ControlPercentEncodeSet); + } + url.host = result; + } else { + input = stringPunycodeToAscii(input); + if (FORBIDDEN_HOST_CODE_POINT.test(input)) return INVALID_HOST; + result = parseIPv4(input); + if (result === null) return INVALID_HOST; + url.host = result; + } + }; + + var parseIPv4 = function (input) { + var parts = input.split('.'); + var partsLength, numbers, index, part, radix, number, ipv4; + if (parts.length && parts[parts.length - 1] == '') { + parts.pop(); + } + partsLength = parts.length; + if (partsLength > 4) return input; + numbers = []; + for (index = 0; index < partsLength; index++) { + part = parts[index]; + if (part == '') return input; + radix = 10; + if (part.length > 1 && part.charAt(0) == '0') { + radix = HEX_START.test(part) ? 16 : 8; + part = part.slice(radix == 8 ? 1 : 2); + } + if (part === '') { + number = 0; + } else { + if (!(radix == 10 ? DEC : radix == 8 ? OCT : HEX).test(part)) return input; + number = parseInt(part, radix); + } + numbers.push(number); + } + for (index = 0; index < partsLength; index++) { + number = numbers[index]; + if (index == partsLength - 1) { + if (number >= pow(256, 5 - partsLength)) return null; + } else if (number > 255) return null; + } + ipv4 = numbers.pop(); + for (index = 0; index < numbers.length; index++) { + ipv4 += numbers[index] * pow(256, 3 - index); + } + return ipv4; + }; + + // eslint-disable-next-line max-statements + var parseIPv6 = function (input) { + var address = [0, 0, 0, 0, 0, 0, 0, 0]; + var pieceIndex = 0; + var compress = null; + var pointer = 0; + var value, length, numbersSeen, ipv4Piece, number, swaps, swap; + + var char = function () { + return input.charAt(pointer); + }; + + if (char() == ':') { + if (input.charAt(1) != ':') return; + pointer += 2; + pieceIndex++; + compress = pieceIndex; + } + while (char()) { + if (pieceIndex == 8) return; + if (char() == ':') { + if (compress !== null) return; + pointer++; + pieceIndex++; + compress = pieceIndex; + continue; + } + value = length = 0; + while (length < 4 && HEX.test(char())) { + value = value * 16 + parseInt(char(), 16); + pointer++; + length++; + } + if (char() == '.') { + if (length == 0) return; + pointer -= length; + if (pieceIndex > 6) return; + numbersSeen = 0; + while (char()) { + ipv4Piece = null; + if (numbersSeen > 0) { + if (char() == '.' && numbersSeen < 4) pointer++; + else return; + } + if (!DIGIT.test(char())) return; + while (DIGIT.test(char())) { + number = parseInt(char(), 10); + if (ipv4Piece === null) ipv4Piece = number; + else if (ipv4Piece == 0) return; + else ipv4Piece = ipv4Piece * 10 + number; + if (ipv4Piece > 255) return; + pointer++; + } + address[pieceIndex] = address[pieceIndex] * 256 + ipv4Piece; + numbersSeen++; + if (numbersSeen == 2 || numbersSeen == 4) pieceIndex++; + } + if (numbersSeen != 4) return; + break; + } else if (char() == ':') { + pointer++; + if (!char()) return; + } else if (char()) return; + address[pieceIndex++] = value; + } + if (compress !== null) { + swaps = pieceIndex - compress; + pieceIndex = 7; + while (pieceIndex != 0 && swaps > 0) { + swap = address[pieceIndex]; + address[pieceIndex--] = address[compress + swaps - 1]; + address[compress + --swaps] = swap; + } + } else if (pieceIndex != 8) return; + return address; + }; + + var findLongestZeroSequence = function (ipv6) { + var maxIndex = null; + var maxLength = 1; + var currStart = null; + var currLength = 0; + var index = 0; + for (; index < 8; index++) { + if (ipv6[index] !== 0) { + if (currLength > maxLength) { + maxIndex = currStart; + maxLength = currLength; + } + currStart = null; + currLength = 0; + } else { + if (currStart === null) currStart = index; + ++currLength; + } + } + if (currLength > maxLength) { + maxIndex = currStart; + maxLength = currLength; + } + return maxIndex; + }; + + var serializeHost = function (host) { + var result, index, compress, ignore0; + // ipv4 + if (typeof host == 'number') { + result = []; + for (index = 0; index < 4; index++) { + result.unshift(host % 256); + host = floor$3(host / 256); + } return result.join('.'); + // ipv6 + } else if (typeof host == 'object') { + result = ''; + compress = findLongestZeroSequence(host); + for (index = 0; index < 8; index++) { + if (ignore0 && host[index] === 0) continue; + if (ignore0) ignore0 = false; + if (compress === index) { + result += index ? ':' : '::'; + ignore0 = true; + } else { + result += host[index].toString(16); + if (index < 7) result += ':'; + } + } + return '[' + result + ']'; + } return host; + }; + + var C0ControlPercentEncodeSet = {}; + var fragmentPercentEncodeSet = objectAssign({}, C0ControlPercentEncodeSet, { + ' ': 1, '"': 1, '<': 1, '>': 1, '`': 1 + }); + var pathPercentEncodeSet = objectAssign({}, fragmentPercentEncodeSet, { + '#': 1, '?': 1, '{': 1, '}': 1 + }); + var userinfoPercentEncodeSet = objectAssign({}, pathPercentEncodeSet, { + '/': 1, ':': 1, ';': 1, '=': 1, '@': 1, '[': 1, '\\': 1, ']': 1, '^': 1, '|': 1 + }); + + var percentEncode = function (char, set) { + var code = codeAt(char, 0); + return code > 0x20 && code < 0x7F && !has(set, char) ? char : encodeURIComponent(char); + }; + + var specialSchemes = { + ftp: 21, + file: null, + http: 80, + https: 443, + ws: 80, + wss: 443 + }; + + var isSpecial = function (url) { + return has(specialSchemes, url.scheme); + }; + + var includesCredentials = function (url) { + return url.username != '' || url.password != ''; + }; + + var cannotHaveUsernamePasswordPort = function (url) { + return !url.host || url.cannotBeABaseURL || url.scheme == 'file'; + }; + + var isWindowsDriveLetter = function (string, normalized) { + var second; + return string.length == 2 && ALPHA.test(string.charAt(0)) + && ((second = string.charAt(1)) == ':' || (!normalized && second == '|')); + }; + + var startsWithWindowsDriveLetter = function (string) { + var third; + return string.length > 1 && isWindowsDriveLetter(string.slice(0, 2)) && ( + string.length == 2 || + ((third = string.charAt(2)) === '/' || third === '\\' || third === '?' || third === '#') + ); + }; + + var shortenURLsPath = function (url) { + var path = url.path; + var pathSize = path.length; + if (pathSize && (url.scheme != 'file' || pathSize != 1 || !isWindowsDriveLetter(path[0], true))) { + path.pop(); + } + }; + + var isSingleDot = function (segment) { + return segment === '.' || segment.toLowerCase() === '%2e'; + }; + + var isDoubleDot = function (segment) { + segment = segment.toLowerCase(); + return segment === '..' || segment === '%2e.' || segment === '.%2e' || segment === '%2e%2e'; + }; + + // States: + var SCHEME_START = {}; + var SCHEME = {}; + var NO_SCHEME = {}; + var SPECIAL_RELATIVE_OR_AUTHORITY = {}; + var PATH_OR_AUTHORITY = {}; + var RELATIVE = {}; + var RELATIVE_SLASH = {}; + var SPECIAL_AUTHORITY_SLASHES = {}; + var SPECIAL_AUTHORITY_IGNORE_SLASHES = {}; + var AUTHORITY = {}; + var HOST = {}; + var HOSTNAME = {}; + var PORT = {}; + var FILE = {}; + var FILE_SLASH = {}; + var FILE_HOST = {}; + var PATH_START = {}; + var PATH = {}; + var CANNOT_BE_A_BASE_URL_PATH = {}; + var QUERY = {}; + var FRAGMENT = {}; + + // eslint-disable-next-line max-statements + var parseURL = function (url, input, stateOverride, base) { + var state = stateOverride || SCHEME_START; + var pointer = 0; + var buffer = ''; + var seenAt = false; + var seenBracket = false; + var seenPasswordToken = false; + var codePoints, char, bufferCodePoints, failure; + + if (!stateOverride) { + url.scheme = ''; + url.username = ''; + url.password = ''; + url.host = null; + url.port = null; + url.path = []; + url.query = null; + url.fragment = null; + url.cannotBeABaseURL = false; + input = input.replace(LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE, ''); + } + + input = input.replace(TAB_AND_NEW_LINE, ''); + + codePoints = arrayFrom(input); + + while (pointer <= codePoints.length) { + char = codePoints[pointer]; + switch (state) { + case SCHEME_START: + if (char && ALPHA.test(char)) { + buffer += char.toLowerCase(); + state = SCHEME; + } else if (!stateOverride) { + state = NO_SCHEME; + continue; + } else return INVALID_SCHEME; + break; + + case SCHEME: + if (char && (ALPHANUMERIC.test(char) || char == '+' || char == '-' || char == '.')) { + buffer += char.toLowerCase(); + } else if (char == ':') { + if (stateOverride && ( + (isSpecial(url) != has(specialSchemes, buffer)) || + (buffer == 'file' && (includesCredentials(url) || url.port !== null)) || + (url.scheme == 'file' && !url.host) + )) return; + url.scheme = buffer; + if (stateOverride) { + if (isSpecial(url) && specialSchemes[url.scheme] == url.port) url.port = null; + return; + } + buffer = ''; + if (url.scheme == 'file') { + state = FILE; + } else if (isSpecial(url) && base && base.scheme == url.scheme) { + state = SPECIAL_RELATIVE_OR_AUTHORITY; + } else if (isSpecial(url)) { + state = SPECIAL_AUTHORITY_SLASHES; + } else if (codePoints[pointer + 1] == '/') { + state = PATH_OR_AUTHORITY; + pointer++; + } else { + url.cannotBeABaseURL = true; + url.path.push(''); + state = CANNOT_BE_A_BASE_URL_PATH; + } + } else if (!stateOverride) { + buffer = ''; + state = NO_SCHEME; + pointer = 0; + continue; + } else return INVALID_SCHEME; + break; + + case NO_SCHEME: + if (!base || (base.cannotBeABaseURL && char != '#')) return INVALID_SCHEME; + if (base.cannotBeABaseURL && char == '#') { + url.scheme = base.scheme; + url.path = base.path.slice(); + url.query = base.query; + url.fragment = ''; + url.cannotBeABaseURL = true; + state = FRAGMENT; + break; + } + state = base.scheme == 'file' ? FILE : RELATIVE; + continue; + + case SPECIAL_RELATIVE_OR_AUTHORITY: + if (char == '/' && codePoints[pointer + 1] == '/') { + state = SPECIAL_AUTHORITY_IGNORE_SLASHES; + pointer++; + } else { + state = RELATIVE; + continue; + } break; + + case PATH_OR_AUTHORITY: + if (char == '/') { + state = AUTHORITY; + break; + } else { + state = PATH; + continue; + } + + case RELATIVE: + url.scheme = base.scheme; + if (char == EOF) { + url.username = base.username; + url.password = base.password; + url.host = base.host; + url.port = base.port; + url.path = base.path.slice(); + url.query = base.query; + } else if (char == '/' || (char == '\\' && isSpecial(url))) { + state = RELATIVE_SLASH; + } else if (char == '?') { + url.username = base.username; + url.password = base.password; + url.host = base.host; + url.port = base.port; + url.path = base.path.slice(); + url.query = ''; + state = QUERY; + } else if (char == '#') { + url.username = base.username; + url.password = base.password; + url.host = base.host; + url.port = base.port; + url.path = base.path.slice(); + url.query = base.query; + url.fragment = ''; + state = FRAGMENT; + } else { + url.username = base.username; + url.password = base.password; + url.host = base.host; + url.port = base.port; + url.path = base.path.slice(); + url.path.pop(); + state = PATH; + continue; + } break; + + case RELATIVE_SLASH: + if (isSpecial(url) && (char == '/' || char == '\\')) { + state = SPECIAL_AUTHORITY_IGNORE_SLASHES; + } else if (char == '/') { + state = AUTHORITY; + } else { + url.username = base.username; + url.password = base.password; + url.host = base.host; + url.port = base.port; + state = PATH; + continue; + } break; + + case SPECIAL_AUTHORITY_SLASHES: + state = SPECIAL_AUTHORITY_IGNORE_SLASHES; + if (char != '/' || buffer.charAt(pointer + 1) != '/') continue; + pointer++; + break; + + case SPECIAL_AUTHORITY_IGNORE_SLASHES: + if (char != '/' && char != '\\') { + state = AUTHORITY; + continue; + } break; + + case AUTHORITY: + if (char == '@') { + if (seenAt) buffer = '%40' + buffer; + seenAt = true; + bufferCodePoints = arrayFrom(buffer); + for (var i = 0; i < bufferCodePoints.length; i++) { + var codePoint = bufferCodePoints[i]; + if (codePoint == ':' && !seenPasswordToken) { + seenPasswordToken = true; + continue; + } + var encodedCodePoints = percentEncode(codePoint, userinfoPercentEncodeSet); + if (seenPasswordToken) url.password += encodedCodePoints; + else url.username += encodedCodePoints; + } + buffer = ''; + } else if ( + char == EOF || char == '/' || char == '?' || char == '#' || + (char == '\\' && isSpecial(url)) + ) { + if (seenAt && buffer == '') return INVALID_AUTHORITY; + pointer -= arrayFrom(buffer).length + 1; + buffer = ''; + state = HOST; + } else buffer += char; + break; + + case HOST: + case HOSTNAME: + if (stateOverride && url.scheme == 'file') { + state = FILE_HOST; + continue; + } else if (char == ':' && !seenBracket) { + if (buffer == '') return INVALID_HOST; + failure = parseHost(url, buffer); + if (failure) return failure; + buffer = ''; + state = PORT; + if (stateOverride == HOSTNAME) return; + } else if ( + char == EOF || char == '/' || char == '?' || char == '#' || + (char == '\\' && isSpecial(url)) + ) { + if (isSpecial(url) && buffer == '') return INVALID_HOST; + if (stateOverride && buffer == '' && (includesCredentials(url) || url.port !== null)) return; + failure = parseHost(url, buffer); + if (failure) return failure; + buffer = ''; + state = PATH_START; + if (stateOverride) return; + continue; + } else { + if (char == '[') seenBracket = true; + else if (char == ']') seenBracket = false; + buffer += char; + } break; + + case PORT: + if (DIGIT.test(char)) { + buffer += char; + } else if ( + char == EOF || char == '/' || char == '?' || char == '#' || + (char == '\\' && isSpecial(url)) || + stateOverride + ) { + if (buffer != '') { + var port = parseInt(buffer, 10); + if (port > 0xFFFF) return INVALID_PORT; + url.port = (isSpecial(url) && port === specialSchemes[url.scheme]) ? null : port; + buffer = ''; + } + if (stateOverride) return; + state = PATH_START; + continue; + } else return INVALID_PORT; + break; + + case FILE: + url.scheme = 'file'; + if (char == '/' || char == '\\') state = FILE_SLASH; + else if (base && base.scheme == 'file') { + if (char == EOF) { + url.host = base.host; + url.path = base.path.slice(); + url.query = base.query; + } else if (char == '?') { + url.host = base.host; + url.path = base.path.slice(); + url.query = ''; + state = QUERY; + } else if (char == '#') { + url.host = base.host; + url.path = base.path.slice(); + url.query = base.query; + url.fragment = ''; + state = FRAGMENT; + } else { + if (!startsWithWindowsDriveLetter(codePoints.slice(pointer).join(''))) { + url.host = base.host; + url.path = base.path.slice(); + shortenURLsPath(url); + } + state = PATH; + continue; + } + } else { + state = PATH; + continue; + } break; + + case FILE_SLASH: + if (char == '/' || char == '\\') { + state = FILE_HOST; + break; + } + if (base && base.scheme == 'file' && !startsWithWindowsDriveLetter(codePoints.slice(pointer).join(''))) { + if (isWindowsDriveLetter(base.path[0], true)) url.path.push(base.path[0]); + else url.host = base.host; + } + state = PATH; + continue; + + case FILE_HOST: + if (char == EOF || char == '/' || char == '\\' || char == '?' || char == '#') { + if (!stateOverride && isWindowsDriveLetter(buffer)) { + state = PATH; + } else if (buffer == '') { + url.host = ''; + if (stateOverride) return; + state = PATH_START; + } else { + failure = parseHost(url, buffer); + if (failure) return failure; + if (url.host == 'localhost') url.host = ''; + if (stateOverride) return; + buffer = ''; + state = PATH_START; + } continue; + } else buffer += char; + break; + + case PATH_START: + if (isSpecial(url)) { + state = PATH; + if (char != '/' && char != '\\') continue; + } else if (!stateOverride && char == '?') { + url.query = ''; + state = QUERY; + } else if (!stateOverride && char == '#') { + url.fragment = ''; + state = FRAGMENT; + } else if (char != EOF) { + state = PATH; + if (char != '/') continue; + } break; + + case PATH: + if ( + char == EOF || char == '/' || + (char == '\\' && isSpecial(url)) || + (!stateOverride && (char == '?' || char == '#')) + ) { + if (isDoubleDot(buffer)) { + shortenURLsPath(url); + if (char != '/' && !(char == '\\' && isSpecial(url))) { + url.path.push(''); + } + } else if (isSingleDot(buffer)) { + if (char != '/' && !(char == '\\' && isSpecial(url))) { + url.path.push(''); + } + } else { + if (url.scheme == 'file' && !url.path.length && isWindowsDriveLetter(buffer)) { + if (url.host) url.host = ''; + buffer = buffer.charAt(0) + ':'; // normalize windows drive letter + } + url.path.push(buffer); + } + buffer = ''; + if (url.scheme == 'file' && (char == EOF || char == '?' || char == '#')) { + while (url.path.length > 1 && url.path[0] === '') { + url.path.shift(); + } + } + if (char == '?') { + url.query = ''; + state = QUERY; + } else if (char == '#') { + url.fragment = ''; + state = FRAGMENT; + } + } else { + buffer += percentEncode(char, pathPercentEncodeSet); + } break; + + case CANNOT_BE_A_BASE_URL_PATH: + if (char == '?') { + url.query = ''; + state = QUERY; + } else if (char == '#') { + url.fragment = ''; + state = FRAGMENT; + } else if (char != EOF) { + url.path[0] += percentEncode(char, C0ControlPercentEncodeSet); + } break; + + case QUERY: + if (!stateOverride && char == '#') { + url.fragment = ''; + state = FRAGMENT; + } else if (char != EOF) { + if (char == "'" && isSpecial(url)) url.query += '%27'; + else if (char == '#') url.query += '%23'; + else url.query += percentEncode(char, C0ControlPercentEncodeSet); + } break; + + case FRAGMENT: + if (char != EOF) url.fragment += percentEncode(char, fragmentPercentEncodeSet); + break; + } + + pointer++; + } + }; + + // `URL` constructor + // https://url.spec.whatwg.org/#url-class + var URLConstructor = function URL(url /* , base */) { + var that = anInstance(this, URLConstructor, 'URL'); + var base = arguments.length > 1 ? arguments[1] : undefined; + var urlString = String(url); + var state = setInternalState$4(that, { type: 'URL' }); + var baseState, failure; + if (base !== undefined) { + if (base instanceof URLConstructor) baseState = getInternalURLState(base); + else { + failure = parseURL(baseState = {}, String(base)); + if (failure) throw TypeError(failure); + } + } + failure = parseURL(state, urlString, null, baseState); + if (failure) throw TypeError(failure); + var searchParams = state.searchParams = new URLSearchParams$1(); + var searchParamsState = getInternalSearchParamsState(searchParams); + searchParamsState.updateSearchParams(state.query); + searchParamsState.updateURL = function () { + state.query = String(searchParams) || null; + }; + if (!descriptors) { + that.href = serializeURL.call(that); + that.origin = getOrigin.call(that); + that.protocol = getProtocol.call(that); + that.username = getUsername.call(that); + that.password = getPassword.call(that); + that.host = getHost.call(that); + that.hostname = getHostname.call(that); + that.port = getPort.call(that); + that.pathname = getPathname.call(that); + that.search = getSearch.call(that); + that.searchParams = getSearchParams.call(that); + that.hash = getHash.call(that); + } + }; + + var URLPrototype = URLConstructor.prototype; + + var serializeURL = function () { + var url = getInternalURLState(this); + var scheme = url.scheme; + var username = url.username; + var password = url.password; + var host = url.host; + var port = url.port; + var path = url.path; + var query = url.query; + var fragment = url.fragment; + var output = scheme + ':'; + if (host !== null) { + output += '//'; + if (includesCredentials(url)) { + output += username + (password ? ':' + password : '') + '@'; + } + output += serializeHost(host); + if (port !== null) output += ':' + port; + } else if (scheme == 'file') output += '//'; + output += url.cannotBeABaseURL ? path[0] : path.length ? '/' + path.join('/') : ''; + if (query !== null) output += '?' + query; + if (fragment !== null) output += '#' + fragment; + return output; + }; + + var getOrigin = function () { + var url = getInternalURLState(this); + var scheme = url.scheme; + var port = url.port; + if (scheme == 'blob') try { + return new URL(scheme.path[0]).origin; + } catch (error) { + return 'null'; + } + if (scheme == 'file' || !isSpecial(url)) return 'null'; + return scheme + '://' + serializeHost(url.host) + (port !== null ? ':' + port : ''); + }; + + var getProtocol = function () { + return getInternalURLState(this).scheme + ':'; + }; + + var getUsername = function () { + return getInternalURLState(this).username; + }; + + var getPassword = function () { + return getInternalURLState(this).password; + }; + + var getHost = function () { + var url = getInternalURLState(this); + var host = url.host; + var port = url.port; + return host === null ? '' + : port === null ? serializeHost(host) + : serializeHost(host) + ':' + port; + }; + + var getHostname = function () { + var host = getInternalURLState(this).host; + return host === null ? '' : serializeHost(host); + }; + + var getPort = function () { + var port = getInternalURLState(this).port; + return port === null ? '' : String(port); + }; + + var getPathname = function () { + var url = getInternalURLState(this); + var path = url.path; + return url.cannotBeABaseURL ? path[0] : path.length ? '/' + path.join('/') : ''; + }; + + var getSearch = function () { + var query = getInternalURLState(this).query; + return query ? '?' + query : ''; + }; + + var getSearchParams = function () { + return getInternalURLState(this).searchParams; + }; + + var getHash = function () { + var fragment = getInternalURLState(this).fragment; + return fragment ? '#' + fragment : ''; + }; + + var accessorDescriptor = function (getter, setter) { + return { get: getter, set: setter, configurable: true, enumerable: true }; + }; + + if (descriptors) { + objectDefineProperties(URLPrototype, { + // `URL.prototype.href` accessors pair + // https://url.spec.whatwg.org/#dom-url-href + href: accessorDescriptor(serializeURL, function (href) { + var url = getInternalURLState(this); + var urlString = String(href); + var failure = parseURL(url, urlString); + if (failure) throw TypeError(failure); + getInternalSearchParamsState(url.searchParams).updateSearchParams(url.query); + }), + // `URL.prototype.origin` getter + // https://url.spec.whatwg.org/#dom-url-origin + origin: accessorDescriptor(getOrigin), + // `URL.prototype.protocol` accessors pair + // https://url.spec.whatwg.org/#dom-url-protocol + protocol: accessorDescriptor(getProtocol, function (protocol) { + var url = getInternalURLState(this); + parseURL(url, String(protocol) + ':', SCHEME_START); + }), + // `URL.prototype.username` accessors pair + // https://url.spec.whatwg.org/#dom-url-username + username: accessorDescriptor(getUsername, function (username) { + var url = getInternalURLState(this); + var codePoints = arrayFrom(String(username)); + if (cannotHaveUsernamePasswordPort(url)) return; + url.username = ''; + for (var i = 0; i < codePoints.length; i++) { + url.username += percentEncode(codePoints[i], userinfoPercentEncodeSet); + } + }), + // `URL.prototype.password` accessors pair + // https://url.spec.whatwg.org/#dom-url-password + password: accessorDescriptor(getPassword, function (password) { + var url = getInternalURLState(this); + var codePoints = arrayFrom(String(password)); + if (cannotHaveUsernamePasswordPort(url)) return; + url.password = ''; + for (var i = 0; i < codePoints.length; i++) { + url.password += percentEncode(codePoints[i], userinfoPercentEncodeSet); + } + }), + // `URL.prototype.host` accessors pair + // https://url.spec.whatwg.org/#dom-url-host + host: accessorDescriptor(getHost, function (host) { + var url = getInternalURLState(this); + if (url.cannotBeABaseURL) return; + parseURL(url, String(host), HOST); + }), + // `URL.prototype.hostname` accessors pair + // https://url.spec.whatwg.org/#dom-url-hostname + hostname: accessorDescriptor(getHostname, function (hostname) { + var url = getInternalURLState(this); + if (url.cannotBeABaseURL) return; + parseURL(url, String(hostname), HOSTNAME); + }), + // `URL.prototype.port` accessors pair + // https://url.spec.whatwg.org/#dom-url-port + port: accessorDescriptor(getPort, function (port) { + var url = getInternalURLState(this); + if (cannotHaveUsernamePasswordPort(url)) return; + port = String(port); + if (port == '') url.port = null; + else parseURL(url, port, PORT); + }), + // `URL.prototype.pathname` accessors pair + // https://url.spec.whatwg.org/#dom-url-pathname + pathname: accessorDescriptor(getPathname, function (pathname) { + var url = getInternalURLState(this); + if (url.cannotBeABaseURL) return; + url.path = []; + parseURL(url, pathname + '', PATH_START); + }), + // `URL.prototype.search` accessors pair + // https://url.spec.whatwg.org/#dom-url-search + search: accessorDescriptor(getSearch, function (search) { + var url = getInternalURLState(this); + search = String(search); + if (search == '') { + url.query = null; + } else { + if ('?' == search.charAt(0)) search = search.slice(1); + url.query = ''; + parseURL(url, search, QUERY); + } + getInternalSearchParamsState(url.searchParams).updateSearchParams(url.query); + }), + // `URL.prototype.searchParams` getter + // https://url.spec.whatwg.org/#dom-url-searchparams + searchParams: accessorDescriptor(getSearchParams), + // `URL.prototype.hash` accessors pair + // https://url.spec.whatwg.org/#dom-url-hash + hash: accessorDescriptor(getHash, function (hash) { + var url = getInternalURLState(this); + hash = String(hash); + if (hash == '') { + url.fragment = null; + return; + } + if ('#' == hash.charAt(0)) hash = hash.slice(1); + url.fragment = ''; + parseURL(url, hash, FRAGMENT); + }) + }); + } + + // `URL.prototype.toJSON` method + // https://url.spec.whatwg.org/#dom-url-tojson + redefine(URLPrototype, 'toJSON', function toJSON() { + return serializeURL.call(this); + }, { enumerable: true }); + + // `URL.prototype.toString` method + // https://url.spec.whatwg.org/#URL-stringification-behavior + redefine(URLPrototype, 'toString', function toString() { + return serializeURL.call(this); + }, { enumerable: true }); + + if (NativeURL) { + var nativeCreateObjectURL = NativeURL.createObjectURL; + var nativeRevokeObjectURL = NativeURL.revokeObjectURL; + // `URL.createObjectURL` method + // https://developer.mozilla.org/en-US/docs/Web/API/URL/createObjectURL + // eslint-disable-next-line no-unused-vars + if (nativeCreateObjectURL) redefine(URLConstructor, 'createObjectURL', function createObjectURL(blob) { + return nativeCreateObjectURL.apply(NativeURL, arguments); + }); + // `URL.revokeObjectURL` method + // https://developer.mozilla.org/en-US/docs/Web/API/URL/revokeObjectURL + // eslint-disable-next-line no-unused-vars + if (nativeRevokeObjectURL) redefine(URLConstructor, 'revokeObjectURL', function revokeObjectURL(url) { + return nativeRevokeObjectURL.apply(NativeURL, arguments); + }); + } + + setToStringTag(URLConstructor, 'URL'); + + _export({ global: true, forced: !nativeUrl, sham: !descriptors }, { + URL: URLConstructor + }); + + function _typeof(obj) { + "@babel/helpers - typeof"; + + if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { + _typeof = function (obj) { + return typeof obj; + }; + } else { + _typeof = function (obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; + }; + } + + return _typeof(obj); + } + + function _classCallCheck(instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); + } + } + + function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, descriptor.key, descriptor); + } + } + + function _createClass(Constructor, protoProps, staticProps) { + if (protoProps) _defineProperties(Constructor.prototype, protoProps); + if (staticProps) _defineProperties(Constructor, staticProps); + return Constructor; + } + + function _defineProperty(obj, key, value) { + if (key in obj) { + Object.defineProperty(obj, key, { + value: value, + enumerable: true, + configurable: true, + writable: true + }); + } else { + obj[key] = value; + } + + return obj; + } + + function ownKeys$1(object, enumerableOnly) { + var keys = Object.keys(object); + + if (Object.getOwnPropertySymbols) { + var symbols = Object.getOwnPropertySymbols(object); + if (enumerableOnly) symbols = symbols.filter(function (sym) { + return Object.getOwnPropertyDescriptor(object, sym).enumerable; + }); + keys.push.apply(keys, symbols); + } + + return keys; + } + + function _objectSpread2(target) { + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i] != null ? arguments[i] : {}; + + if (i % 2) { + ownKeys$1(Object(source), true).forEach(function (key) { + _defineProperty(target, key, source[key]); + }); + } else if (Object.getOwnPropertyDescriptors) { + Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); + } else { + ownKeys$1(Object(source)).forEach(function (key) { + Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); + }); + } + } + + return target; + } + + function _slicedToArray(arr, i) { + return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); + } + + function _toConsumableArray(arr) { + return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); + } + + function _arrayWithoutHoles(arr) { + if (Array.isArray(arr)) { + for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; + + return arr2; + } + } + + function _arrayWithHoles(arr) { + if (Array.isArray(arr)) return arr; + } + + function _iterableToArray(iter) { + if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); + } + + function _iterableToArrayLimit(arr, i) { + if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === "[object Arguments]")) { + return; + } + + var _arr = []; + var _n = true; + var _d = false; + var _e = undefined; + + try { + for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { + _arr.push(_s.value); + + if (i && _arr.length === i) break; + } + } catch (err) { + _d = true; + _e = err; + } finally { + try { + if (!_n && _i["return"] != null) _i["return"](); + } finally { + if (_d) throw _e; + } + } + + return _arr; + } + + function _nonIterableSpread() { + throw new TypeError("Invalid attempt to spread non-iterable instance"); + } + + function _nonIterableRest() { + throw new TypeError("Invalid attempt to destructure non-iterable instance"); + } + + (function (global) { + /** + * Polyfill URLSearchParams + * + * Inspired from : https://github.com/WebReflection/url-search-params/blob/master/src/url-search-params.js + */ + var checkIfIteratorIsSupported = function checkIfIteratorIsSupported() { + try { + return !!Symbol.iterator; + } catch (error) { + return false; + } + }; + + var iteratorSupported = checkIfIteratorIsSupported(); + + var createIterator = function createIterator(items) { + var iterator = { + next: function next() { + var value = items.shift(); + return { + done: value === void 0, + value: value + }; + } + }; + + if (iteratorSupported) { + iterator[Symbol.iterator] = function () { + return iterator; + }; + } + + return iterator; + }; + /** + * Search param name and values should be encoded according to https://url.spec.whatwg.org/#urlencoded-serializing + * encodeURIComponent() produces the same result except encoding spaces as `%20` instead of `+`. + */ + + + var serializeParam = function serializeParam(value) { + return encodeURIComponent(value).replace(/%20/g, '+'); + }; + + var deserializeParam = function deserializeParam(value) { + return decodeURIComponent(String(value).replace(/\+/g, ' ')); + }; + + var polyfillURLSearchParams = function polyfillURLSearchParams() { + var URLSearchParams = function URLSearchParams(searchString) { + Object.defineProperty(this, '_entries', { + writable: true, + value: {} + }); + + var typeofSearchString = _typeof(searchString); + + if (typeofSearchString === 'undefined') ; else if (typeofSearchString === 'string') { + if (searchString !== '') { + this._fromString(searchString); + } + } else if (searchString instanceof URLSearchParams) { + var _this = this; + + searchString.forEach(function (value, name) { + _this.append(name, value); + }); + } else if (searchString !== null && typeofSearchString === 'object') { + if (Object.prototype.toString.call(searchString) === '[object Array]') { + for (var i = 0; i < searchString.length; i++) { + var entry = searchString[i]; + + if (Object.prototype.toString.call(entry) === '[object Array]' || entry.length !== 2) { + this.append(entry[0], entry[1]); + } else { + throw new TypeError('Expected [string, any] as entry at index ' + i + ' of URLSearchParams\'s input'); + } + } + } else { + for (var key in searchString) { + if (searchString.hasOwnProperty(key)) { + this.append(key, searchString[key]); + } + } + } + } else { + throw new TypeError('Unsupported input\'s type for URLSearchParams'); + } + }; + + var proto = URLSearchParams.prototype; + + proto.append = function (name, value) { + if (name in this._entries) { + this._entries[name].push(String(value)); + } else { + this._entries[name] = [String(value)]; + } + }; + + proto.delete = function (name) { + delete this._entries[name]; + }; + + proto.get = function (name) { + return name in this._entries ? this._entries[name][0] : null; + }; + + proto.getAll = function (name) { + return name in this._entries ? this._entries[name].slice(0) : []; + }; + + proto.has = function (name) { + return name in this._entries; + }; + + proto.set = function (name, value) { + this._entries[name] = [String(value)]; + }; + + proto.forEach = function (callback, thisArg) { + var entries; + + for (var name in this._entries) { + if (this._entries.hasOwnProperty(name)) { + entries = this._entries[name]; + + for (var i = 0; i < entries.length; i++) { + callback.call(thisArg, entries[i], name, this); + } + } + } + }; + + proto.keys = function () { + var items = []; + this.forEach(function (value, name) { + items.push(name); + }); + return createIterator(items); + }; + + proto.values = function () { + var items = []; + this.forEach(function (value) { + items.push(value); + }); + return createIterator(items); + }; + + proto.entries = function () { + var items = []; + this.forEach(function (value, name) { + items.push([name, value]); + }); + return createIterator(items); + }; + + if (iteratorSupported) { + proto[Symbol.iterator] = proto.entries; + } + + proto.toString = function () { + var searchArray = []; + this.forEach(function (value, name) { + searchArray.push(serializeParam(name) + '=' + serializeParam(value)); + }); + return searchArray.join('&'); + }; + + global.URLSearchParams = URLSearchParams; + }; + + var checkIfURLSearchParamsSupported = function checkIfURLSearchParamsSupported() { + try { + var URLSearchParams = global.URLSearchParams; + return new URLSearchParams('?a=1').toString() === 'a=1' && typeof URLSearchParams.prototype.set === 'function'; + } catch (e) { + return false; + } + }; + + if (!checkIfURLSearchParamsSupported()) { + polyfillURLSearchParams(); + } + + var proto = global.URLSearchParams.prototype; + + if (typeof proto.sort !== 'function') { + proto.sort = function () { + var _this = this; + + var items = []; + this.forEach(function (value, name) { + items.push([name, value]); + + if (!_this._entries) { + _this.delete(name); + } + }); + items.sort(function (a, b) { + if (a[0] < b[0]) { + return -1; + } else if (a[0] > b[0]) { + return +1; + } else { + return 0; + } + }); + + if (_this._entries) { + // force reset because IE keeps keys index + _this._entries = {}; + } + + for (var i = 0; i < items.length; i++) { + this.append(items[i][0], items[i][1]); + } + }; + } + + if (typeof proto._fromString !== 'function') { + Object.defineProperty(proto, '_fromString', { + enumerable: false, + configurable: false, + writable: false, + value: function value(searchString) { + if (this._entries) { + this._entries = {}; + } else { + var keys = []; + this.forEach(function (value, name) { + keys.push(name); + }); + + for (var i = 0; i < keys.length; i++) { + this.delete(keys[i]); + } + } + + searchString = searchString.replace(/^\?/, ''); + var attributes = searchString.split('&'); + var attribute; + + for (var i = 0; i < attributes.length; i++) { + attribute = attributes[i].split('='); + this.append(deserializeParam(attribute[0]), attribute.length > 1 ? deserializeParam(attribute[1]) : ''); + } + } + }); + } // HTMLAnchorElement + + })(typeof commonjsGlobal !== 'undefined' ? commonjsGlobal : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : commonjsGlobal); + + (function (global) { + /** + * Polyfill URL + * + * Inspired from : https://github.com/arv/DOM-URL-Polyfill/blob/master/src/url.js + */ + var checkIfURLIsSupported = function checkIfURLIsSupported() { + try { + var u = new global.URL('b', 'http://a'); + u.pathname = 'c d'; + return u.href === 'http://a/c%20d' && u.searchParams; + } catch (e) { + return false; + } + }; + + var polyfillURL = function polyfillURL() { + var _URL = global.URL; + + var URL = function URL(url, base) { + if (typeof url !== 'string') url = String(url); // Only create another document if the base is different from current location. + + var doc = document, + baseElement; + + if (base && (global.location === void 0 || base !== global.location.href)) { + doc = document.implementation.createHTMLDocument(''); + baseElement = doc.createElement('base'); + baseElement.href = base; + doc.head.appendChild(baseElement); + + try { + if (baseElement.href.indexOf(base) !== 0) throw new Error(baseElement.href); + } catch (err) { + throw new Error('URL unable to set base ' + base + ' due to ' + err); + } + } + + var anchorElement = doc.createElement('a'); + anchorElement.href = url; + + if (baseElement) { + doc.body.appendChild(anchorElement); + anchorElement.href = anchorElement.href; // force href to refresh + } + + if (anchorElement.protocol === ':' || !/:/.test(anchorElement.href)) { + throw new TypeError('Invalid URL'); + } + + Object.defineProperty(this, '_anchorElement', { + value: anchorElement + }); // create a linked searchParams which reflect its changes on URL + + var searchParams = new global.URLSearchParams(this.search); + var enableSearchUpdate = true; + var enableSearchParamsUpdate = true; + + var _this = this; + + ['append', 'delete', 'set'].forEach(function (methodName) { + var method = searchParams[methodName]; + + searchParams[methodName] = function () { + method.apply(searchParams, arguments); + + if (enableSearchUpdate) { + enableSearchParamsUpdate = false; + _this.search = searchParams.toString(); + enableSearchParamsUpdate = true; + } + }; + }); + Object.defineProperty(this, 'searchParams', { + value: searchParams, + enumerable: true + }); + var search = void 0; + Object.defineProperty(this, '_updateSearchParams', { + enumerable: false, + configurable: false, + writable: false, + value: function value() { + if (this.search !== search) { + search = this.search; + + if (enableSearchParamsUpdate) { + enableSearchUpdate = false; + + this.searchParams._fromString(this.search); + + enableSearchUpdate = true; + } + } + } + }); + }; + + var proto = URL.prototype; + + var linkURLWithAnchorAttribute = function linkURLWithAnchorAttribute(attributeName) { + Object.defineProperty(proto, attributeName, { + get: function get() { + return this._anchorElement[attributeName]; + }, + set: function set(value) { + this._anchorElement[attributeName] = value; + }, + enumerable: true + }); + }; + + ['hash', 'host', 'hostname', 'port', 'protocol'].forEach(function (attributeName) { + linkURLWithAnchorAttribute(attributeName); + }); + Object.defineProperty(proto, 'search', { + get: function get() { + return this._anchorElement['search']; + }, + set: function set(value) { + this._anchorElement['search'] = value; + + this._updateSearchParams(); + }, + enumerable: true + }); + Object.defineProperties(proto, { + 'toString': { + get: function get() { + var _this = this; + + return function () { + return _this.href; + }; + } + }, + 'href': { + get: function get() { + return this._anchorElement.href.replace(/\?$/, ''); + }, + set: function set(value) { + this._anchorElement.href = value; + + this._updateSearchParams(); + }, + enumerable: true + }, + 'pathname': { + get: function get() { + return this._anchorElement.pathname.replace(/(^\/?)/, '/'); + }, + set: function set(value) { + this._anchorElement.pathname = value; + }, + enumerable: true + }, + 'origin': { + get: function get() { + // get expected port from protocol + var expectedPort = { + 'http:': 80, + 'https:': 443, + 'ftp:': 21 + }[this._anchorElement.protocol]; // add port to origin if, expected port is different than actual port + // and it is not empty f.e http://foo:8080 + // 8080 != 80 && 8080 != '' + + var addPortToOrigin = this._anchorElement.port != expectedPort && this._anchorElement.port !== ''; + return this._anchorElement.protocol + '//' + this._anchorElement.hostname + (addPortToOrigin ? ':' + this._anchorElement.port : ''); + }, + enumerable: true + }, + 'password': { + // TODO + get: function get() { + return ''; + }, + set: function set(value) {}, + enumerable: true + }, + 'username': { + // TODO + get: function get() { + return ''; + }, + set: function set(value) {}, + enumerable: true + } + }); + + URL.createObjectURL = function (blob) { + return _URL.createObjectURL.apply(_URL, arguments); + }; + + URL.revokeObjectURL = function (url) { + return _URL.revokeObjectURL.apply(_URL, arguments); + }; + + global.URL = URL; + }; + + if (!checkIfURLIsSupported()) { + polyfillURL(); + } + + if (global.location !== void 0 && !('origin' in global.location)) { + var getOrigin = function getOrigin() { + return global.location.protocol + '//' + global.location.hostname + (global.location.port ? ':' + global.location.port : ''); + }; + + try { + Object.defineProperty(global.location, 'origin', { + get: getOrigin, + enumerable: true + }); + } catch (e) { + setInterval(function () { + global.location.origin = getOrigin(); + }, 100); + } + } + })(typeof commonjsGlobal !== 'undefined' ? commonjsGlobal : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : commonjsGlobal); + + var IS_CONCAT_SPREADABLE = wellKnownSymbol('isConcatSpreadable'); + var MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF; + var MAXIMUM_ALLOWED_INDEX_EXCEEDED = 'Maximum allowed index exceeded'; + + // We can't use this feature detection in V8 since it causes + // deoptimization and serious performance degradation + // https://github.com/zloirock/core-js/issues/679 + var IS_CONCAT_SPREADABLE_SUPPORT = engineV8Version >= 51 || !fails(function () { + var array = []; + array[IS_CONCAT_SPREADABLE] = false; + return array.concat()[0] !== array; + }); + + var SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('concat'); + + var isConcatSpreadable = function (O) { + if (!isObject(O)) return false; + var spreadable = O[IS_CONCAT_SPREADABLE]; + return spreadable !== undefined ? !!spreadable : isArray(O); + }; + + var FORCED = !IS_CONCAT_SPREADABLE_SUPPORT || !SPECIES_SUPPORT; + + // `Array.prototype.concat` method + // https://tc39.github.io/ecma262/#sec-array.prototype.concat + // with adding support of @@isConcatSpreadable and @@species + _export({ target: 'Array', proto: true, forced: FORCED }, { + concat: function concat(arg) { // eslint-disable-line no-unused-vars + var O = toObject(this); + var A = arraySpeciesCreate(O, 0); + var n = 0; + var i, k, length, len, E; + for (i = -1, length = arguments.length; i < length; i++) { + E = i === -1 ? O : arguments[i]; + if (isConcatSpreadable(E)) { + len = toLength(E.length); + if (n + len > MAX_SAFE_INTEGER) throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED); + for (k = 0; k < len; k++, n++) if (k in E) createProperty(A, n, E[k]); + } else { + if (n >= MAX_SAFE_INTEGER) throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED); + createProperty(A, n++, E); + } + } + A.length = n; + return A; + } + }); + + var $filter = arrayIteration.filter; + + + + var HAS_SPECIES_SUPPORT$1 = arrayMethodHasSpeciesSupport('filter'); + // Edge 14- issue + var USES_TO_LENGTH$3 = arrayMethodUsesToLength('filter'); + + // `Array.prototype.filter` method + // https://tc39.github.io/ecma262/#sec-array.prototype.filter + // with adding support of @@species + _export({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT$1 || !USES_TO_LENGTH$3 }, { + filter: function filter(callbackfn /* , thisArg */) { + return $filter(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); + } + }); + + var $find = arrayIteration.find; + + + + var FIND = 'find'; + var SKIPS_HOLES = true; + + var USES_TO_LENGTH$4 = arrayMethodUsesToLength(FIND); + + // Shouldn't skip holes + if (FIND in []) Array(1)[FIND](function () { SKIPS_HOLES = false; }); + + // `Array.prototype.find` method + // https://tc39.github.io/ecma262/#sec-array.prototype.find + _export({ target: 'Array', proto: true, forced: SKIPS_HOLES || !USES_TO_LENGTH$4 }, { + find: function find(callbackfn /* , that = undefined */) { + return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); + } + }); + + // https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables + addToUnscopables(FIND); + + var ITERATOR$7 = wellKnownSymbol('iterator'); + var SAFE_CLOSING = false; + + try { + var called = 0; + var iteratorWithReturn = { + next: function () { + return { done: !!called++ }; + }, + 'return': function () { + SAFE_CLOSING = true; + } + }; + iteratorWithReturn[ITERATOR$7] = function () { + return this; + }; + // eslint-disable-next-line no-throw-literal + Array.from(iteratorWithReturn, function () { throw 2; }); + } catch (error) { /* empty */ } + + var checkCorrectnessOfIteration = function (exec, SKIP_CLOSING) { + if (!SKIP_CLOSING && !SAFE_CLOSING) return false; + var ITERATION_SUPPORT = false; + try { + var object = {}; + object[ITERATOR$7] = function () { + return { + next: function () { + return { done: ITERATION_SUPPORT = true }; + } + }; + }; + exec(object); + } catch (error) { /* empty */ } + return ITERATION_SUPPORT; + }; + + var INCORRECT_ITERATION = !checkCorrectnessOfIteration(function (iterable) { + Array.from(iterable); + }); + + // `Array.from` method + // https://tc39.github.io/ecma262/#sec-array.from + _export({ target: 'Array', stat: true, forced: INCORRECT_ITERATION }, { + from: arrayFrom + }); + + var $includes = arrayIncludes.includes; + + + + var USES_TO_LENGTH$5 = arrayMethodUsesToLength('indexOf', { ACCESSORS: true, 1: 0 }); + + // `Array.prototype.includes` method + // https://tc39.github.io/ecma262/#sec-array.prototype.includes + _export({ target: 'Array', proto: true, forced: !USES_TO_LENGTH$5 }, { + includes: function includes(el /* , fromIndex = 0 */) { + return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined); + } + }); + + // https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables + addToUnscopables('includes'); + + var $map = arrayIteration.map; + + + + var HAS_SPECIES_SUPPORT$2 = arrayMethodHasSpeciesSupport('map'); + // FF49- issue + var USES_TO_LENGTH$6 = arrayMethodUsesToLength('map'); + + // `Array.prototype.map` method + // https://tc39.github.io/ecma262/#sec-array.prototype.map + // with adding support of @@species + _export({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT$2 || !USES_TO_LENGTH$6 }, { + map: function map(callbackfn /* , thisArg */) { + return $map(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); + } + }); + + // makes subclassing work correct for wrapped built-ins + var inheritIfRequired = function ($this, dummy, Wrapper) { + var NewTarget, NewTargetPrototype; + if ( + // it can work only with native `setPrototypeOf` + objectSetPrototypeOf && + // we haven't completely correct pre-ES6 way for getting `new.target`, so use this + typeof (NewTarget = dummy.constructor) == 'function' && + NewTarget !== Wrapper && + isObject(NewTargetPrototype = NewTarget.prototype) && + NewTargetPrototype !== Wrapper.prototype + ) objectSetPrototypeOf($this, NewTargetPrototype); + return $this; + }; + + // a string of all valid unicode whitespaces + // eslint-disable-next-line max-len + var whitespaces = '\u0009\u000A\u000B\u000C\u000D\u0020\u00A0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF'; + + var whitespace = '[' + whitespaces + ']'; + var ltrim = RegExp('^' + whitespace + whitespace + '*'); + var rtrim = RegExp(whitespace + whitespace + '*$'); + + // `String.prototype.{ trim, trimStart, trimEnd, trimLeft, trimRight }` methods implementation + var createMethod$3 = function (TYPE) { + return function ($this) { + var string = String(requireObjectCoercible($this)); + if (TYPE & 1) string = string.replace(ltrim, ''); + if (TYPE & 2) string = string.replace(rtrim, ''); + return string; + }; + }; + + var stringTrim = { + // `String.prototype.{ trimLeft, trimStart }` methods + // https://tc39.github.io/ecma262/#sec-string.prototype.trimstart + start: createMethod$3(1), + // `String.prototype.{ trimRight, trimEnd }` methods + // https://tc39.github.io/ecma262/#sec-string.prototype.trimend + end: createMethod$3(2), + // `String.prototype.trim` method + // https://tc39.github.io/ecma262/#sec-string.prototype.trim + trim: createMethod$3(3) + }; + + var getOwnPropertyNames = objectGetOwnPropertyNames.f; + var getOwnPropertyDescriptor$2 = objectGetOwnPropertyDescriptor.f; + var defineProperty$5 = objectDefineProperty.f; + var trim = stringTrim.trim; + + var NUMBER = 'Number'; + var NativeNumber = global_1[NUMBER]; + var NumberPrototype = NativeNumber.prototype; + + // Opera ~12 has broken Object#toString + var BROKEN_CLASSOF = classofRaw(objectCreate(NumberPrototype)) == NUMBER; + + // `ToNumber` abstract operation + // https://tc39.github.io/ecma262/#sec-tonumber + var toNumber = function (argument) { + var it = toPrimitive(argument, false); + var first, third, radix, maxCode, digits, length, index, code; + if (typeof it == 'string' && it.length > 2) { + it = trim(it); + first = it.charCodeAt(0); + if (first === 43 || first === 45) { + third = it.charCodeAt(2); + if (third === 88 || third === 120) return NaN; // Number('+0x1') should be NaN, old V8 fix + } else if (first === 48) { + switch (it.charCodeAt(1)) { + case 66: case 98: radix = 2; maxCode = 49; break; // fast equal of /^0b[01]+$/i + case 79: case 111: radix = 8; maxCode = 55; break; // fast equal of /^0o[0-7]+$/i + default: return +it; + } + digits = it.slice(2); + length = digits.length; + for (index = 0; index < length; index++) { + code = digits.charCodeAt(index); + // parseInt parses a string to a first unavailable symbol + // but ToNumber should return NaN if a string contains unavailable symbols + if (code < 48 || code > maxCode) return NaN; + } return parseInt(digits, radix); + } + } return +it; + }; + + // `Number` constructor + // https://tc39.github.io/ecma262/#sec-number-constructor + if (isForced_1(NUMBER, !NativeNumber(' 0o1') || !NativeNumber('0b1') || NativeNumber('+0x1'))) { + var NumberWrapper = function Number(value) { + var it = arguments.length < 1 ? 0 : value; + var dummy = this; + return dummy instanceof NumberWrapper + // check on 1..constructor(foo) case + && (BROKEN_CLASSOF ? fails(function () { NumberPrototype.valueOf.call(dummy); }) : classofRaw(dummy) != NUMBER) + ? inheritIfRequired(new NativeNumber(toNumber(it)), dummy, NumberWrapper) : toNumber(it); + }; + for (var keys$1 = descriptors ? getOwnPropertyNames(NativeNumber) : ( + // ES3: + 'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' + + // ES2015 (in case, if modules with ES2015 Number statics required before): + 'EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,' + + 'MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger' + ).split(','), j = 0, key; keys$1.length > j; j++) { + if (has(NativeNumber, key = keys$1[j]) && !has(NumberWrapper, key)) { + defineProperty$5(NumberWrapper, key, getOwnPropertyDescriptor$2(NativeNumber, key)); + } + } + NumberWrapper.prototype = NumberPrototype; + NumberPrototype.constructor = NumberWrapper; + redefine(global_1, NUMBER, NumberWrapper); + } + + var FAILS_ON_PRIMITIVES = fails(function () { objectKeys(1); }); + + // `Object.keys` method + // https://tc39.github.io/ecma262/#sec-object.keys + _export({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES }, { + keys: function keys(it) { + return objectKeys(toObject(it)); + } + }); + + var notARegexp = function (it) { + if (isRegexp(it)) { + throw TypeError("The method doesn't accept regular expressions"); + } return it; + }; + + var MATCH$1 = wellKnownSymbol('match'); + + var correctIsRegexpLogic = function (METHOD_NAME) { + var regexp = /./; + try { + '/./'[METHOD_NAME](regexp); + } catch (e) { + try { + regexp[MATCH$1] = false; + return '/./'[METHOD_NAME](regexp); + } catch (f) { /* empty */ } + } return false; + }; + + // `String.prototype.includes` method + // https://tc39.github.io/ecma262/#sec-string.prototype.includes + _export({ target: 'String', proto: true, forced: !correctIsRegexpLogic('includes') }, { + includes: function includes(searchString /* , position = 0 */) { + return !!~String(requireObjectCoercible(this)) + .indexOf(notARegexp(searchString), arguments.length > 1 ? arguments[1] : undefined); + } + }); + + var freezing = !fails(function () { + return Object.isExtensible(Object.preventExtensions({})); + }); + + var internalMetadata = createCommonjsModule(function (module) { + var defineProperty = objectDefineProperty.f; + + + + var METADATA = uid('meta'); + var id = 0; + + var isExtensible = Object.isExtensible || function () { + return true; + }; + + var setMetadata = function (it) { + defineProperty(it, METADATA, { value: { + objectID: 'O' + ++id, // object ID + weakData: {} // weak collections IDs + } }); + }; + + var fastKey = function (it, create) { + // return a primitive with prefix + if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it; + if (!has(it, METADATA)) { + // can't set metadata to uncaught frozen object + if (!isExtensible(it)) return 'F'; + // not necessary to add metadata + if (!create) return 'E'; + // add missing metadata + setMetadata(it); + // return object ID + } return it[METADATA].objectID; + }; + + var getWeakData = function (it, create) { + if (!has(it, METADATA)) { + // can't set metadata to uncaught frozen object + if (!isExtensible(it)) return true; + // not necessary to add metadata + if (!create) return false; + // add missing metadata + setMetadata(it); + // return the store of weak collections IDs + } return it[METADATA].weakData; + }; + + // add metadata on freeze-family methods calling + var onFreeze = function (it) { + if (freezing && meta.REQUIRED && isExtensible(it) && !has(it, METADATA)) setMetadata(it); + return it; + }; + + var meta = module.exports = { + REQUIRED: false, + fastKey: fastKey, + getWeakData: getWeakData, + onFreeze: onFreeze + }; + + hiddenKeys[METADATA] = true; + }); + var internalMetadata_1 = internalMetadata.REQUIRED; + var internalMetadata_2 = internalMetadata.fastKey; + var internalMetadata_3 = internalMetadata.getWeakData; + var internalMetadata_4 = internalMetadata.onFreeze; + + var iterate_1 = createCommonjsModule(function (module) { + var Result = function (stopped, result) { + this.stopped = stopped; + this.result = result; + }; + + var iterate = module.exports = function (iterable, fn, that, AS_ENTRIES, IS_ITERATOR) { + var boundFunction = functionBindContext(fn, that, AS_ENTRIES ? 2 : 1); + var iterator, iterFn, index, length, result, next, step; + + if (IS_ITERATOR) { + iterator = iterable; + } else { + iterFn = getIteratorMethod(iterable); + if (typeof iterFn != 'function') throw TypeError('Target is not iterable'); + // optimisation for array iterators + if (isArrayIteratorMethod(iterFn)) { + for (index = 0, length = toLength(iterable.length); length > index; index++) { + result = AS_ENTRIES + ? boundFunction(anObject(step = iterable[index])[0], step[1]) + : boundFunction(iterable[index]); + if (result && result instanceof Result) return result; + } return new Result(false); + } + iterator = iterFn.call(iterable); + } + + next = iterator.next; + while (!(step = next.call(iterator)).done) { + result = callWithSafeIterationClosing(iterator, boundFunction, step.value, AS_ENTRIES); + if (typeof result == 'object' && result && result instanceof Result) return result; + } return new Result(false); + }; + + iterate.stop = function (result) { + return new Result(true, result); + }; + }); + + var collection = function (CONSTRUCTOR_NAME, wrapper, common) { + var IS_MAP = CONSTRUCTOR_NAME.indexOf('Map') !== -1; + var IS_WEAK = CONSTRUCTOR_NAME.indexOf('Weak') !== -1; + var ADDER = IS_MAP ? 'set' : 'add'; + var NativeConstructor = global_1[CONSTRUCTOR_NAME]; + var NativePrototype = NativeConstructor && NativeConstructor.prototype; + var Constructor = NativeConstructor; + var exported = {}; + + var fixMethod = function (KEY) { + var nativeMethod = NativePrototype[KEY]; + redefine(NativePrototype, KEY, + KEY == 'add' ? function add(value) { + nativeMethod.call(this, value === 0 ? 0 : value); + return this; + } : KEY == 'delete' ? function (key) { + return IS_WEAK && !isObject(key) ? false : nativeMethod.call(this, key === 0 ? 0 : key); + } : KEY == 'get' ? function get(key) { + return IS_WEAK && !isObject(key) ? undefined : nativeMethod.call(this, key === 0 ? 0 : key); + } : KEY == 'has' ? function has(key) { + return IS_WEAK && !isObject(key) ? false : nativeMethod.call(this, key === 0 ? 0 : key); + } : function set(key, value) { + nativeMethod.call(this, key === 0 ? 0 : key, value); + return this; + } + ); + }; + + // eslint-disable-next-line max-len + if (isForced_1(CONSTRUCTOR_NAME, typeof NativeConstructor != 'function' || !(IS_WEAK || NativePrototype.forEach && !fails(function () { + new NativeConstructor().entries().next(); + })))) { + // create collection constructor + Constructor = common.getConstructor(wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER); + internalMetadata.REQUIRED = true; + } else if (isForced_1(CONSTRUCTOR_NAME, true)) { + var instance = new Constructor(); + // early implementations not supports chaining + var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance; + // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false + var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); }); + // most early implementations doesn't supports iterables, most modern - not close it correctly + // eslint-disable-next-line no-new + var ACCEPT_ITERABLES = checkCorrectnessOfIteration(function (iterable) { new NativeConstructor(iterable); }); + // for early implementations -0 and +0 not the same + var BUGGY_ZERO = !IS_WEAK && fails(function () { + // V8 ~ Chromium 42- fails only with 5+ elements + var $instance = new NativeConstructor(); + var index = 5; + while (index--) $instance[ADDER](index, index); + return !$instance.has(-0); + }); + + if (!ACCEPT_ITERABLES) { + Constructor = wrapper(function (dummy, iterable) { + anInstance(dummy, Constructor, CONSTRUCTOR_NAME); + var that = inheritIfRequired(new NativeConstructor(), dummy, Constructor); + if (iterable != undefined) iterate_1(iterable, that[ADDER], that, IS_MAP); + return that; + }); + Constructor.prototype = NativePrototype; + NativePrototype.constructor = Constructor; + } + + if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) { + fixMethod('delete'); + fixMethod('has'); + IS_MAP && fixMethod('get'); + } + + if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER); + + // weak collections should not contains .clear method + if (IS_WEAK && NativePrototype.clear) delete NativePrototype.clear; + } + + exported[CONSTRUCTOR_NAME] = Constructor; + _export({ global: true, forced: Constructor != NativeConstructor }, exported); + + setToStringTag(Constructor, CONSTRUCTOR_NAME); + + if (!IS_WEAK) common.setStrong(Constructor, CONSTRUCTOR_NAME, IS_MAP); + + return Constructor; + }; + + var getWeakData = internalMetadata.getWeakData; + + + + + + + + + var setInternalState$5 = internalState.set; + var internalStateGetterFor = internalState.getterFor; + var find$1 = arrayIteration.find; + var findIndex = arrayIteration.findIndex; + var id$1 = 0; + + // fallback for uncaught frozen keys + var uncaughtFrozenStore = function (store) { + return store.frozen || (store.frozen = new UncaughtFrozenStore()); + }; + + var UncaughtFrozenStore = function () { + this.entries = []; + }; + + var findUncaughtFrozen = function (store, key) { + return find$1(store.entries, function (it) { + return it[0] === key; + }); + }; + + UncaughtFrozenStore.prototype = { + get: function (key) { + var entry = findUncaughtFrozen(this, key); + if (entry) return entry[1]; + }, + has: function (key) { + return !!findUncaughtFrozen(this, key); + }, + set: function (key, value) { + var entry = findUncaughtFrozen(this, key); + if (entry) entry[1] = value; + else this.entries.push([key, value]); + }, + 'delete': function (key) { + var index = findIndex(this.entries, function (it) { + return it[0] === key; + }); + if (~index) this.entries.splice(index, 1); + return !!~index; + } + }; + + var collectionWeak = { + getConstructor: function (wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER) { + var C = wrapper(function (that, iterable) { + anInstance(that, C, CONSTRUCTOR_NAME); + setInternalState$5(that, { + type: CONSTRUCTOR_NAME, + id: id$1++, + frozen: undefined + }); + if (iterable != undefined) iterate_1(iterable, that[ADDER], that, IS_MAP); + }); + + var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME); + + var define = function (that, key, value) { + var state = getInternalState(that); + var data = getWeakData(anObject(key), true); + if (data === true) uncaughtFrozenStore(state).set(key, value); + else data[state.id] = value; + return that; + }; + + redefineAll(C.prototype, { + // 23.3.3.2 WeakMap.prototype.delete(key) + // 23.4.3.3 WeakSet.prototype.delete(value) + 'delete': function (key) { + var state = getInternalState(this); + if (!isObject(key)) return false; + var data = getWeakData(key); + if (data === true) return uncaughtFrozenStore(state)['delete'](key); + return data && has(data, state.id) && delete data[state.id]; + }, + // 23.3.3.4 WeakMap.prototype.has(key) + // 23.4.3.4 WeakSet.prototype.has(value) + has: function has$1(key) { + var state = getInternalState(this); + if (!isObject(key)) return false; + var data = getWeakData(key); + if (data === true) return uncaughtFrozenStore(state).has(key); + return data && has(data, state.id); + } + }); + + redefineAll(C.prototype, IS_MAP ? { + // 23.3.3.3 WeakMap.prototype.get(key) + get: function get(key) { + var state = getInternalState(this); + if (isObject(key)) { + var data = getWeakData(key); + if (data === true) return uncaughtFrozenStore(state).get(key); + return data ? data[state.id] : undefined; + } + }, + // 23.3.3.5 WeakMap.prototype.set(key, value) + set: function set(key, value) { + return define(this, key, value); + } + } : { + // 23.4.3.1 WeakSet.prototype.add(value) + add: function add(value) { + return define(this, value, true); + } + }); + + return C; + } + }; + + var es_weakMap = createCommonjsModule(function (module) { + + + + + + + var enforceIternalState = internalState.enforce; + + + var IS_IE11 = !global_1.ActiveXObject && 'ActiveXObject' in global_1; + var isExtensible = Object.isExtensible; + var InternalWeakMap; + + var wrapper = function (init) { + return function WeakMap() { + return init(this, arguments.length ? arguments[0] : undefined); + }; + }; + + // `WeakMap` constructor + // https://tc39.github.io/ecma262/#sec-weakmap-constructor + var $WeakMap = module.exports = collection('WeakMap', wrapper, collectionWeak); + + // IE11 WeakMap frozen keys fix + // We can't use feature detection because it crash some old IE builds + // https://github.com/zloirock/core-js/issues/485 + if (nativeWeakMap && IS_IE11) { + InternalWeakMap = collectionWeak.getConstructor(wrapper, 'WeakMap', true); + internalMetadata.REQUIRED = true; + var WeakMapPrototype = $WeakMap.prototype; + var nativeDelete = WeakMapPrototype['delete']; + var nativeHas = WeakMapPrototype.has; + var nativeGet = WeakMapPrototype.get; + var nativeSet = WeakMapPrototype.set; + redefineAll(WeakMapPrototype, { + 'delete': function (key) { + if (isObject(key) && !isExtensible(key)) { + var state = enforceIternalState(this); + if (!state.frozen) state.frozen = new InternalWeakMap(); + return nativeDelete.call(this, key) || state.frozen['delete'](key); + } return nativeDelete.call(this, key); + }, + has: function has(key) { + if (isObject(key) && !isExtensible(key)) { + var state = enforceIternalState(this); + if (!state.frozen) state.frozen = new InternalWeakMap(); + return nativeHas.call(this, key) || state.frozen.has(key); + } return nativeHas.call(this, key); + }, + get: function get(key) { + if (isObject(key) && !isExtensible(key)) { + var state = enforceIternalState(this); + if (!state.frozen) state.frozen = new InternalWeakMap(); + return nativeHas.call(this, key) ? nativeGet.call(this, key) : state.frozen.get(key); + } return nativeGet.call(this, key); + }, + set: function set(key, value) { + if (isObject(key) && !isExtensible(key)) { + var state = enforceIternalState(this); + if (!state.frozen) state.frozen = new InternalWeakMap(); + nativeHas.call(this, key) ? nativeSet.call(this, key, value) : state.frozen.set(key, value); + } else nativeSet.call(this, key, value); + return this; + } + }); + } + }); + + var $every = arrayIteration.every; + + + + var STRICT_METHOD$3 = arrayMethodIsStrict('every'); + var USES_TO_LENGTH$7 = arrayMethodUsesToLength('every'); + + // `Array.prototype.every` method + // https://tc39.github.io/ecma262/#sec-array.prototype.every + _export({ target: 'Array', proto: true, forced: !STRICT_METHOD$3 || !USES_TO_LENGTH$7 }, { + every: function every(callbackfn /* , thisArg */) { + return $every(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); + } + }); + + // `Object.assign` method + // https://tc39.github.io/ecma262/#sec-object.assign + _export({ target: 'Object', stat: true, forced: Object.assign !== objectAssign }, { + assign: objectAssign + }); + + var non = '\u200B\u0085\u180E'; + + // check that a method works with the correct list + // of whitespaces and has a correct name + var stringTrimForced = function (METHOD_NAME) { + return fails(function () { + return !!whitespaces[METHOD_NAME]() || non[METHOD_NAME]() != non || whitespaces[METHOD_NAME].name !== METHOD_NAME; + }); + }; + + var $trim = stringTrim.trim; + + + // `String.prototype.trim` method + // https://tc39.github.io/ecma262/#sec-string.prototype.trim + _export({ target: 'String', proto: true, forced: stringTrimForced('trim') }, { + trim: function trim() { + return $trim(this); + } + }); + + var $some = arrayIteration.some; + + + + var STRICT_METHOD$4 = arrayMethodIsStrict('some'); + var USES_TO_LENGTH$8 = arrayMethodUsesToLength('some'); + + // `Array.prototype.some` method + // https://tc39.github.io/ecma262/#sec-array.prototype.some + _export({ target: 'Array', proto: true, forced: !STRICT_METHOD$4 || !USES_TO_LENGTH$8 }, { + some: function some(callbackfn /* , thisArg */) { + return $some(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); + } + }); + + // `thisNumberValue` abstract operation + // https://tc39.github.io/ecma262/#sec-thisnumbervalue + var thisNumberValue = function (value) { + if (typeof value != 'number' && classofRaw(value) != 'Number') { + throw TypeError('Incorrect invocation'); + } + return +value; + }; + + // `String.prototype.repeat` method implementation + // https://tc39.github.io/ecma262/#sec-string.prototype.repeat + var stringRepeat = ''.repeat || function repeat(count) { + var str = String(requireObjectCoercible(this)); + var result = ''; + var n = toInteger(count); + if (n < 0 || n == Infinity) throw RangeError('Wrong number of repetitions'); + for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) result += str; + return result; + }; + + var nativeToFixed = 1.0.toFixed; + var floor$4 = Math.floor; + + var pow$1 = function (x, n, acc) { + return n === 0 ? acc : n % 2 === 1 ? pow$1(x, n - 1, acc * x) : pow$1(x * x, n / 2, acc); + }; + + var log = function (x) { + var n = 0; + var x2 = x; + while (x2 >= 4096) { + n += 12; + x2 /= 4096; + } + while (x2 >= 2) { + n += 1; + x2 /= 2; + } return n; + }; + + var FORCED$1 = nativeToFixed && ( + 0.00008.toFixed(3) !== '0.000' || + 0.9.toFixed(0) !== '1' || + 1.255.toFixed(2) !== '1.25' || + 1000000000000000128.0.toFixed(0) !== '1000000000000000128' + ) || !fails(function () { + // V8 ~ Android 4.3- + nativeToFixed.call({}); + }); + + // `Number.prototype.toFixed` method + // https://tc39.github.io/ecma262/#sec-number.prototype.tofixed + _export({ target: 'Number', proto: true, forced: FORCED$1 }, { + // eslint-disable-next-line max-statements + toFixed: function toFixed(fractionDigits) { + var number = thisNumberValue(this); + var fractDigits = toInteger(fractionDigits); + var data = [0, 0, 0, 0, 0, 0]; + var sign = ''; + var result = '0'; + var e, z, j, k; + + var multiply = function (n, c) { + var index = -1; + var c2 = c; + while (++index < 6) { + c2 += n * data[index]; + data[index] = c2 % 1e7; + c2 = floor$4(c2 / 1e7); + } + }; + + var divide = function (n) { + var index = 6; + var c = 0; + while (--index >= 0) { + c += data[index]; + data[index] = floor$4(c / n); + c = (c % n) * 1e7; + } + }; + + var dataToString = function () { + var index = 6; + var s = ''; + while (--index >= 0) { + if (s !== '' || index === 0 || data[index] !== 0) { + var t = String(data[index]); + s = s === '' ? t : s + stringRepeat.call('0', 7 - t.length) + t; + } + } return s; + }; + + if (fractDigits < 0 || fractDigits > 20) throw RangeError('Incorrect fraction digits'); + // eslint-disable-next-line no-self-compare + if (number != number) return 'NaN'; + if (number <= -1e21 || number >= 1e21) return String(number); + if (number < 0) { + sign = '-'; + number = -number; + } + if (number > 1e-21) { + e = log(number * pow$1(2, 69, 1)) - 69; + z = e < 0 ? number * pow$1(2, -e, 1) : number / pow$1(2, e, 1); + z *= 0x10000000000000; + e = 52 - e; + if (e > 0) { + multiply(0, z); + j = fractDigits; + while (j >= 7) { + multiply(1e7, 0); + j -= 7; + } + multiply(pow$1(10, j, 1), 0); + j = e - 1; + while (j >= 23) { + divide(1 << 23); + j -= 23; + } + divide(1 << j); + multiply(1, 1); + divide(2); + result = dataToString(); + } else { + multiply(0, z); + multiply(1 << -e, 0); + result = dataToString() + stringRepeat.call('0', fractDigits); + } + } + if (fractDigits > 0) { + k = result.length; + result = sign + (k <= fractDigits + ? '0.' + stringRepeat.call('0', fractDigits - k) + result + : result.slice(0, k - fractDigits) + '.' + result.slice(k - fractDigits)); + } else { + result = sign + result; + } return result; + } + }); + + var propertyIsEnumerable = objectPropertyIsEnumerable.f; + + // `Object.{ entries, values }` methods implementation + var createMethod$4 = function (TO_ENTRIES) { + return function (it) { + var O = toIndexedObject(it); + var keys = objectKeys(O); + var length = keys.length; + var i = 0; + var result = []; + var key; + while (length > i) { + key = keys[i++]; + if (!descriptors || propertyIsEnumerable.call(O, key)) { + result.push(TO_ENTRIES ? [key, O[key]] : O[key]); + } + } + return result; + }; + }; + + var objectToArray = { + // `Object.entries` method + // https://tc39.github.io/ecma262/#sec-object.entries + entries: createMethod$4(true), + // `Object.values` method + // https://tc39.github.io/ecma262/#sec-object.values + values: createMethod$4(false) + }; + + var $entries = objectToArray.entries; + + // `Object.entries` method + // https://tc39.github.io/ecma262/#sec-object.entries + _export({ target: 'Object', stat: true }, { + entries: function entries(O) { + return $entries(O); + } + }); + + var $values = objectToArray.values; + + // `Object.values` method + // https://tc39.github.io/ecma262/#sec-object.values + _export({ target: 'Object', stat: true }, { + values: function values(O) { + return $values(O); + } + }); + + var defaults = { + addCSS: true, + // Add CSS to the element to improve usability (required here or in your CSS!) + thumbWidth: 15, + // The width of the thumb handle + watch: true // Watch for new elements that match a string target + + }; + + // Element matches a selector + function matches(element, selector) { + + function match() { + return Array.from(document.querySelectorAll(selector)).includes(this); + } + + var matches = match; + return matches.call(element, selector); + } + + // Trigger event + function trigger(element, type) { + if (!element || !type) { + return; + } // Create and dispatch the event + + + var event = new Event(type); // Dispatch the event + + element.dispatchEvent(event); + } + + // `Number.isNaN` method + // https://tc39.github.io/ecma262/#sec-number.isnan + _export({ target: 'Number', stat: true }, { + isNaN: function isNaN(number) { + // eslint-disable-next-line no-self-compare + return number != number; + } + }); + + // ========================================================================== + // Type checking utils + // ========================================================================== + var getConstructor = function getConstructor(input) { + return input !== null && typeof input !== 'undefined' ? input.constructor : null; + }; + + var instanceOf = function instanceOf(input, constructor) { + return Boolean(input && constructor && input instanceof constructor); + }; + + var isNullOrUndefined = function isNullOrUndefined(input) { + return input === null || typeof input === 'undefined'; + }; + + var isObject$1 = function isObject(input) { + return getConstructor(input) === Object; + }; + + var isNumber = function isNumber(input) { + return getConstructor(input) === Number && !Number.isNaN(input); + }; + + var isString = function isString(input) { + return getConstructor(input) === String; + }; + + var isBoolean = function isBoolean(input) { + return getConstructor(input) === Boolean; + }; + + var isFunction = function isFunction(input) { + return getConstructor(input) === Function; + }; + + var isArray$1 = function isArray(input) { + return Array.isArray(input); + }; + + var isNodeList = function isNodeList(input) { + return instanceOf(input, NodeList); + }; + + var isElement = function isElement(input) { + return instanceOf(input, Element); + }; + + var isEvent = function isEvent(input) { + return instanceOf(input, Event); + }; + + var isEmpty = function isEmpty(input) { + return isNullOrUndefined(input) || (isString(input) || isArray$1(input) || isNodeList(input)) && !input.length || isObject$1(input) && !Object.keys(input).length; + }; + + var is = { + nullOrUndefined: isNullOrUndefined, + object: isObject$1, + number: isNumber, + string: isString, + boolean: isBoolean, + function: isFunction, + array: isArray$1, + nodeList: isNodeList, + element: isElement, + event: isEvent, + empty: isEmpty + }; + + // @@match logic + fixRegexpWellKnownSymbolLogic('match', 1, function (MATCH, nativeMatch, maybeCallNative) { + return [ + // `String.prototype.match` method + // https://tc39.github.io/ecma262/#sec-string.prototype.match + function match(regexp) { + var O = requireObjectCoercible(this); + var matcher = regexp == undefined ? undefined : regexp[MATCH]; + return matcher !== undefined ? matcher.call(regexp, O) : new RegExp(regexp)[MATCH](String(O)); + }, + // `RegExp.prototype[@@match]` method + // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@match + function (regexp) { + var res = maybeCallNative(nativeMatch, regexp, this); + if (res.done) return res.value; + + var rx = anObject(regexp); + var S = String(this); + + if (!rx.global) return regexpExecAbstract(rx, S); + + var fullUnicode = rx.unicode; + rx.lastIndex = 0; + var A = []; + var n = 0; + var result; + while ((result = regexpExecAbstract(rx, S)) !== null) { + var matchStr = String(result[0]); + A[n] = matchStr; + if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode); + n++; + } + return n === 0 ? null : A; + } + ]; + }); + + // Get the number of decimal places + function getDecimalPlaces(value) { + var match = "".concat(value).match(/(?:\.(\d+))?(?:[eE]([+-]?\d+))?$/); + + if (!match) { + return 0; + } + + return Math.max(0, // Number of digits right of decimal point. + (match[1] ? match[1].length : 0) - ( // Adjust for scientific notation. + match[2] ? +match[2] : 0)); + } // Round to the nearest step + + function round(number, step) { + if (step < 1) { + var places = getDecimalPlaces(step); + return parseFloat(number.toFixed(places)); + } + + return Math.round(number / step) * step; + } + + var RangeTouch = + /*#__PURE__*/ + function () { + /** + * Setup a new instance + * @param {String|Element} target + * @param {Object} options + */ + function RangeTouch(target, options) { + _classCallCheck(this, RangeTouch); + + if (is.element(target)) { + // An Element is passed, use it directly + this.element = target; + } else if (is.string(target)) { + // A CSS Selector is passed, fetch it from the DOM + this.element = document.querySelector(target); + } + + if (!is.element(this.element) || !is.empty(this.element.rangeTouch)) { + return; + } + + this.config = Object.assign({}, defaults, options); + this.init(); + } + + _createClass(RangeTouch, [{ + key: "init", + value: function init() { + // Bail if not a touch enabled device + if (!RangeTouch.enabled) { + return; + } // Add useful CSS + + + if (this.config.addCSS) { + // TODO: Restore original values on destroy + this.element.style.userSelect = 'none'; + this.element.style.webKitUserSelect = 'none'; + this.element.style.touchAction = 'manipulation'; + } + + this.listeners(true); + this.element.rangeTouch = this; + } + }, { + key: "destroy", + value: function destroy() { + // Bail if not a touch enabled device + if (!RangeTouch.enabled) { + return; + } + + this.listeners(false); + this.element.rangeTouch = null; + } + }, { + key: "listeners", + value: function listeners(toggle) { + var _this = this; + + var method = toggle ? 'addEventListener' : 'removeEventListener'; // Listen for events + + ['touchstart', 'touchmove', 'touchend'].forEach(function (type) { + _this.element[method](type, function (event) { + return _this.set(event); + }, false); + }); + } + /** + * Get the value based on touch position + * @param {Event} event + */ + + }, { + key: "get", + value: function get(event) { + if (!RangeTouch.enabled || !is.event(event)) { + return null; + } + + var input = event.target; + var touch = event.changedTouches[0]; + var min = parseFloat(input.getAttribute('min')) || 0; + var max = parseFloat(input.getAttribute('max')) || 100; + var step = parseFloat(input.getAttribute('step')) || 1; + var delta = max - min; // Calculate percentage + + var percent; + var clientRect = input.getBoundingClientRect(); + var thumbWidth = 100 / clientRect.width * (this.config.thumbWidth / 2) / 100; // Determine left percentage + + percent = 100 / clientRect.width * (touch.clientX - clientRect.left); // Don't allow outside bounds + + if (percent < 0) { + percent = 0; + } else if (percent > 100) { + percent = 100; + } // Factor in the thumb offset + + + if (percent < 50) { + percent -= (100 - percent * 2) * thumbWidth; + } else if (percent > 50) { + percent += (percent - 50) * 2 * thumbWidth; + } // Find the closest step to the mouse position + + + return min + round(delta * (percent / 100), step); + } + /** + * Update range value based on position + * @param {Event} event + */ + + }, { + key: "set", + value: function set(event) { + if (!RangeTouch.enabled || !is.event(event) || event.target.disabled) { + return; + } // Prevent text highlight on iOS + + + event.preventDefault(); // Set value + + event.target.value = this.get(event); // Trigger event + + trigger(event.target, event.type === 'touchend' ? 'change' : 'input'); + } + }], [{ + key: "setup", + + /** + * Setup multiple instances + * @param {String|Element|NodeList|Array} target + * @param {Object} options + */ + value: function setup(target) { + var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + var targets = null; + + if (is.empty(target) || is.string(target)) { + targets = Array.from(document.querySelectorAll(is.string(target) ? target : 'input[type="range"]')); + } else if (is.element(target)) { + targets = [target]; + } else if (is.nodeList(target)) { + targets = Array.from(target); + } else if (is.array(target)) { + targets = target.filter(is.element); + } + + if (is.empty(targets)) { + return null; + } + + var config = Object.assign({}, defaults, options); + + if (is.string(target) && config.watch) { + // Create an observer instance + var observer = new MutationObserver(function (mutations) { + Array.from(mutations).forEach(function (mutation) { + Array.from(mutation.addedNodes).forEach(function (node) { + if (!is.element(node) || !matches(node, target)) { + return; + } // eslint-disable-next-line no-unused-vars + + + var range = new RangeTouch(node, config); + }); + }); + }); // Pass in the target node, as well as the observer options + + observer.observe(document.body, { + childList: true, + subtree: true + }); + } + + return targets.map(function (t) { + return new RangeTouch(t, options); + }); + } + }, { + key: "enabled", + get: function get() { + return 'ontouchstart' in document.documentElement; + } + }]); + + return RangeTouch; + }(); + + var nativePromiseConstructor = global_1.Promise; + + var SPECIES$5 = wellKnownSymbol('species'); + + var setSpecies = function (CONSTRUCTOR_NAME) { + var Constructor = getBuiltIn(CONSTRUCTOR_NAME); + var defineProperty = objectDefineProperty.f; + + if (descriptors && Constructor && !Constructor[SPECIES$5]) { + defineProperty(Constructor, SPECIES$5, { + configurable: true, + get: function () { return this; } + }); + } + }; + + var engineIsIos = /(iphone|ipod|ipad).*applewebkit/i.test(engineUserAgent); + + var location = global_1.location; + var set$1 = global_1.setImmediate; + var clear = global_1.clearImmediate; + var process$1 = global_1.process; + var MessageChannel = global_1.MessageChannel; + var Dispatch = global_1.Dispatch; + var counter = 0; + var queue = {}; + var ONREADYSTATECHANGE = 'onreadystatechange'; + var defer, channel, port; + + var run = function (id) { + // eslint-disable-next-line no-prototype-builtins + if (queue.hasOwnProperty(id)) { + var fn = queue[id]; + delete queue[id]; + fn(); + } + }; + + var runner = function (id) { + return function () { + run(id); + }; + }; + + var listener = function (event) { + run(event.data); + }; + + var post = function (id) { + // old engines have not location.origin + global_1.postMessage(id + '', location.protocol + '//' + location.host); + }; + + // Node.js 0.9+ & IE10+ has setImmediate, otherwise: + if (!set$1 || !clear) { + set$1 = function setImmediate(fn) { + var args = []; + var i = 1; + while (arguments.length > i) args.push(arguments[i++]); + queue[++counter] = function () { + // eslint-disable-next-line no-new-func + (typeof fn == 'function' ? fn : Function(fn)).apply(undefined, args); + }; + defer(counter); + return counter; + }; + clear = function clearImmediate(id) { + delete queue[id]; + }; + // Node.js 0.8- + if (classofRaw(process$1) == 'process') { + defer = function (id) { + process$1.nextTick(runner(id)); + }; + // Sphere (JS game engine) Dispatch API + } else if (Dispatch && Dispatch.now) { + defer = function (id) { + Dispatch.now(runner(id)); + }; + // Browsers with MessageChannel, includes WebWorkers + // except iOS - https://github.com/zloirock/core-js/issues/624 + } else if (MessageChannel && !engineIsIos) { + channel = new MessageChannel(); + port = channel.port2; + channel.port1.onmessage = listener; + defer = functionBindContext(port.postMessage, port, 1); + // Browsers with postMessage, skip WebWorkers + // IE8 has postMessage, but it's sync & typeof its postMessage is 'object' + } else if (global_1.addEventListener && typeof postMessage == 'function' && !global_1.importScripts && !fails(post)) { + defer = post; + global_1.addEventListener('message', listener, false); + // IE8- + } else if (ONREADYSTATECHANGE in documentCreateElement('script')) { + defer = function (id) { + html.appendChild(documentCreateElement('script'))[ONREADYSTATECHANGE] = function () { + html.removeChild(this); + run(id); + }; + }; + // Rest old browsers + } else { + defer = function (id) { + setTimeout(runner(id), 0); + }; + } + } + + var task = { + set: set$1, + clear: clear + }; + + var getOwnPropertyDescriptor$3 = objectGetOwnPropertyDescriptor.f; + + var macrotask = task.set; + + + var MutationObserver$1 = global_1.MutationObserver || global_1.WebKitMutationObserver; + var process$2 = global_1.process; + var Promise$1 = global_1.Promise; + var IS_NODE = classofRaw(process$2) == 'process'; + // Node.js 11 shows ExperimentalWarning on getting `queueMicrotask` + var queueMicrotaskDescriptor = getOwnPropertyDescriptor$3(global_1, 'queueMicrotask'); + var queueMicrotask = queueMicrotaskDescriptor && queueMicrotaskDescriptor.value; + + var flush, head, last, notify, toggle, node, promise, then; + + // modern engines have queueMicrotask method + if (!queueMicrotask) { + flush = function () { + var parent, fn; + if (IS_NODE && (parent = process$2.domain)) parent.exit(); + while (head) { + fn = head.fn; + head = head.next; + try { + fn(); + } catch (error) { + if (head) notify(); + else last = undefined; + throw error; + } + } last = undefined; + if (parent) parent.enter(); + }; + + // Node.js + if (IS_NODE) { + notify = function () { + process$2.nextTick(flush); + }; + // browsers with MutationObserver, except iOS - https://github.com/zloirock/core-js/issues/339 + } else if (MutationObserver$1 && !engineIsIos) { + toggle = true; + node = document.createTextNode(''); + new MutationObserver$1(flush).observe(node, { characterData: true }); + notify = function () { + node.data = toggle = !toggle; + }; + // environments with maybe non-completely correct, but existent Promise + } else if (Promise$1 && Promise$1.resolve) { + // Promise.resolve without an argument throws an error in LG WebOS 2 + promise = Promise$1.resolve(undefined); + then = promise.then; + notify = function () { + then.call(promise, flush); + }; + // for other environments - macrotask based on: + // - setImmediate + // - MessageChannel + // - window.postMessag + // - onreadystatechange + // - setTimeout + } else { + notify = function () { + // strange IE + webpack dev server bug - use .call(global) + macrotask.call(global_1, flush); + }; + } + } + + var microtask = queueMicrotask || function (fn) { + var task = { fn: fn, next: undefined }; + if (last) last.next = task; + if (!head) { + head = task; + notify(); + } last = task; + }; + + var PromiseCapability = function (C) { + var resolve, reject; + this.promise = new C(function ($$resolve, $$reject) { + if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor'); + resolve = $$resolve; + reject = $$reject; + }); + this.resolve = aFunction$1(resolve); + this.reject = aFunction$1(reject); + }; + + // 25.4.1.5 NewPromiseCapability(C) + var f$7 = function (C) { + return new PromiseCapability(C); + }; + + var newPromiseCapability = { + f: f$7 + }; + + var promiseResolve = function (C, x) { + anObject(C); + if (isObject(x) && x.constructor === C) return x; + var promiseCapability = newPromiseCapability.f(C); + var resolve = promiseCapability.resolve; + resolve(x); + return promiseCapability.promise; + }; + + var hostReportErrors = function (a, b) { + var console = global_1.console; + if (console && console.error) { + arguments.length === 1 ? console.error(a) : console.error(a, b); + } + }; + + var perform = function (exec) { + try { + return { error: false, value: exec() }; + } catch (error) { + return { error: true, value: error }; + } + }; + + var task$1 = task.set; + + + + + + + + + + + var SPECIES$6 = wellKnownSymbol('species'); + var PROMISE = 'Promise'; + var getInternalState$3 = internalState.get; + var setInternalState$6 = internalState.set; + var getInternalPromiseState = internalState.getterFor(PROMISE); + var PromiseConstructor = nativePromiseConstructor; + var TypeError$1 = global_1.TypeError; + var document$2 = global_1.document; + var process$3 = global_1.process; + var $fetch$1 = getBuiltIn('fetch'); + var newPromiseCapability$1 = newPromiseCapability.f; + var newGenericPromiseCapability = newPromiseCapability$1; + var IS_NODE$1 = classofRaw(process$3) == 'process'; + var DISPATCH_EVENT = !!(document$2 && document$2.createEvent && global_1.dispatchEvent); + var UNHANDLED_REJECTION = 'unhandledrejection'; + var REJECTION_HANDLED = 'rejectionhandled'; + var PENDING = 0; + var FULFILLED = 1; + var REJECTED = 2; + var HANDLED = 1; + var UNHANDLED = 2; + var Internal, OwnPromiseCapability, PromiseWrapper, nativeThen; + + var FORCED$2 = isForced_1(PROMISE, function () { + var GLOBAL_CORE_JS_PROMISE = inspectSource(PromiseConstructor) !== String(PromiseConstructor); + if (!GLOBAL_CORE_JS_PROMISE) { + // V8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables + // https://bugs.chromium.org/p/chromium/issues/detail?id=830565 + // We can't detect it synchronously, so just check versions + if (engineV8Version === 66) return true; + // Unhandled rejections tracking support, NodeJS Promise without it fails @@species test + if (!IS_NODE$1 && typeof PromiseRejectionEvent != 'function') return true; + } + // We can't use @@species feature detection in V8 since it causes + // deoptimization and performance degradation + // https://github.com/zloirock/core-js/issues/679 + if (engineV8Version >= 51 && /native code/.test(PromiseConstructor)) return false; + // Detect correctness of subclassing with @@species support + var promise = PromiseConstructor.resolve(1); + var FakePromise = function (exec) { + exec(function () { /* empty */ }, function () { /* empty */ }); + }; + var constructor = promise.constructor = {}; + constructor[SPECIES$6] = FakePromise; + return !(promise.then(function () { /* empty */ }) instanceof FakePromise); + }); + + var INCORRECT_ITERATION$1 = FORCED$2 || !checkCorrectnessOfIteration(function (iterable) { + PromiseConstructor.all(iterable)['catch'](function () { /* empty */ }); + }); + + // helpers + var isThenable = function (it) { + var then; + return isObject(it) && typeof (then = it.then) == 'function' ? then : false; + }; + + var notify$1 = function (promise, state, isReject) { + if (state.notified) return; + state.notified = true; + var chain = state.reactions; + microtask(function () { + var value = state.value; + var ok = state.state == FULFILLED; + var index = 0; + // variable length - can't use forEach + while (chain.length > index) { + var reaction = chain[index++]; + var handler = ok ? reaction.ok : reaction.fail; + var resolve = reaction.resolve; + var reject = reaction.reject; + var domain = reaction.domain; + var result, then, exited; + try { + if (handler) { + if (!ok) { + if (state.rejection === UNHANDLED) onHandleUnhandled(promise, state); + state.rejection = HANDLED; + } + if (handler === true) result = value; + else { + if (domain) domain.enter(); + result = handler(value); // can throw + if (domain) { + domain.exit(); + exited = true; + } + } + if (result === reaction.promise) { + reject(TypeError$1('Promise-chain cycle')); + } else if (then = isThenable(result)) { + then.call(result, resolve, reject); + } else resolve(result); + } else reject(value); + } catch (error) { + if (domain && !exited) domain.exit(); + reject(error); + } + } + state.reactions = []; + state.notified = false; + if (isReject && !state.rejection) onUnhandled(promise, state); + }); + }; + + var dispatchEvent = function (name, promise, reason) { + var event, handler; + if (DISPATCH_EVENT) { + event = document$2.createEvent('Event'); + event.promise = promise; + event.reason = reason; + event.initEvent(name, false, true); + global_1.dispatchEvent(event); + } else event = { promise: promise, reason: reason }; + if (handler = global_1['on' + name]) handler(event); + else if (name === UNHANDLED_REJECTION) hostReportErrors('Unhandled promise rejection', reason); + }; + + var onUnhandled = function (promise, state) { + task$1.call(global_1, function () { + var value = state.value; + var IS_UNHANDLED = isUnhandled(state); + var result; + if (IS_UNHANDLED) { + result = perform(function () { + if (IS_NODE$1) { + process$3.emit('unhandledRejection', value, promise); + } else dispatchEvent(UNHANDLED_REJECTION, promise, value); + }); + // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should + state.rejection = IS_NODE$1 || isUnhandled(state) ? UNHANDLED : HANDLED; + if (result.error) throw result.value; + } + }); + }; + + var isUnhandled = function (state) { + return state.rejection !== HANDLED && !state.parent; + }; + + var onHandleUnhandled = function (promise, state) { + task$1.call(global_1, function () { + if (IS_NODE$1) { + process$3.emit('rejectionHandled', promise); + } else dispatchEvent(REJECTION_HANDLED, promise, state.value); + }); + }; + + var bind = function (fn, promise, state, unwrap) { + return function (value) { + fn(promise, state, value, unwrap); + }; + }; + + var internalReject = function (promise, state, value, unwrap) { + if (state.done) return; + state.done = true; + if (unwrap) state = unwrap; + state.value = value; + state.state = REJECTED; + notify$1(promise, state, true); + }; + + var internalResolve = function (promise, state, value, unwrap) { + if (state.done) return; + state.done = true; + if (unwrap) state = unwrap; + try { + if (promise === value) throw TypeError$1("Promise can't be resolved itself"); + var then = isThenable(value); + if (then) { + microtask(function () { + var wrapper = { done: false }; + try { + then.call(value, + bind(internalResolve, promise, wrapper, state), + bind(internalReject, promise, wrapper, state) + ); + } catch (error) { + internalReject(promise, wrapper, error, state); + } + }); + } else { + state.value = value; + state.state = FULFILLED; + notify$1(promise, state, false); + } + } catch (error) { + internalReject(promise, { done: false }, error, state); + } + }; + + // constructor polyfill + if (FORCED$2) { + // 25.4.3.1 Promise(executor) + PromiseConstructor = function Promise(executor) { + anInstance(this, PromiseConstructor, PROMISE); + aFunction$1(executor); + Internal.call(this); + var state = getInternalState$3(this); + try { + executor(bind(internalResolve, this, state), bind(internalReject, this, state)); + } catch (error) { + internalReject(this, state, error); + } + }; + // eslint-disable-next-line no-unused-vars + Internal = function Promise(executor) { + setInternalState$6(this, { + type: PROMISE, + done: false, + notified: false, + parent: false, + reactions: [], + rejection: false, + state: PENDING, + value: undefined + }); + }; + Internal.prototype = redefineAll(PromiseConstructor.prototype, { + // `Promise.prototype.then` method + // https://tc39.github.io/ecma262/#sec-promise.prototype.then + then: function then(onFulfilled, onRejected) { + var state = getInternalPromiseState(this); + var reaction = newPromiseCapability$1(speciesConstructor(this, PromiseConstructor)); + reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true; + reaction.fail = typeof onRejected == 'function' && onRejected; + reaction.domain = IS_NODE$1 ? process$3.domain : undefined; + state.parent = true; + state.reactions.push(reaction); + if (state.state != PENDING) notify$1(this, state, false); + return reaction.promise; + }, + // `Promise.prototype.catch` method + // https://tc39.github.io/ecma262/#sec-promise.prototype.catch + 'catch': function (onRejected) { + return this.then(undefined, onRejected); + } + }); + OwnPromiseCapability = function () { + var promise = new Internal(); + var state = getInternalState$3(promise); + this.promise = promise; + this.resolve = bind(internalResolve, promise, state); + this.reject = bind(internalReject, promise, state); + }; + newPromiseCapability.f = newPromiseCapability$1 = function (C) { + return C === PromiseConstructor || C === PromiseWrapper + ? new OwnPromiseCapability(C) + : newGenericPromiseCapability(C); + }; + + if ( typeof nativePromiseConstructor == 'function') { + nativeThen = nativePromiseConstructor.prototype.then; + + // wrap native Promise#then for native async functions + redefine(nativePromiseConstructor.prototype, 'then', function then(onFulfilled, onRejected) { + var that = this; + return new PromiseConstructor(function (resolve, reject) { + nativeThen.call(that, resolve, reject); + }).then(onFulfilled, onRejected); + // https://github.com/zloirock/core-js/issues/640 + }, { unsafe: true }); + + // wrap fetch result + if (typeof $fetch$1 == 'function') _export({ global: true, enumerable: true, forced: true }, { + // eslint-disable-next-line no-unused-vars + fetch: function fetch(input /* , init */) { + return promiseResolve(PromiseConstructor, $fetch$1.apply(global_1, arguments)); + } + }); + } + } + + _export({ global: true, wrap: true, forced: FORCED$2 }, { + Promise: PromiseConstructor + }); + + setToStringTag(PromiseConstructor, PROMISE, false); + setSpecies(PROMISE); + + PromiseWrapper = getBuiltIn(PROMISE); + + // statics + _export({ target: PROMISE, stat: true, forced: FORCED$2 }, { + // `Promise.reject` method + // https://tc39.github.io/ecma262/#sec-promise.reject + reject: function reject(r) { + var capability = newPromiseCapability$1(this); + capability.reject.call(undefined, r); + return capability.promise; + } + }); + + _export({ target: PROMISE, stat: true, forced: FORCED$2 }, { + // `Promise.resolve` method + // https://tc39.github.io/ecma262/#sec-promise.resolve + resolve: function resolve(x) { + return promiseResolve( this, x); + } + }); + + _export({ target: PROMISE, stat: true, forced: INCORRECT_ITERATION$1 }, { + // `Promise.all` method + // https://tc39.github.io/ecma262/#sec-promise.all + all: function all(iterable) { + var C = this; + var capability = newPromiseCapability$1(C); + var resolve = capability.resolve; + var reject = capability.reject; + var result = perform(function () { + var $promiseResolve = aFunction$1(C.resolve); + var values = []; + var counter = 0; + var remaining = 1; + iterate_1(iterable, function (promise) { + var index = counter++; + var alreadyCalled = false; + values.push(undefined); + remaining++; + $promiseResolve.call(C, promise).then(function (value) { + if (alreadyCalled) return; + alreadyCalled = true; + values[index] = value; + --remaining || resolve(values); + }, reject); + }); + --remaining || resolve(values); + }); + if (result.error) reject(result.value); + return capability.promise; + }, + // `Promise.race` method + // https://tc39.github.io/ecma262/#sec-promise.race + race: function race(iterable) { + var C = this; + var capability = newPromiseCapability$1(C); + var reject = capability.reject; + var result = perform(function () { + var $promiseResolve = aFunction$1(C.resolve); + iterate_1(iterable, function (promise) { + $promiseResolve.call(C, promise).then(capability.resolve, reject); + }); + }); + if (result.error) reject(result.value); + return capability.promise; + } + }); + + var getOwnPropertyDescriptor$4 = objectGetOwnPropertyDescriptor.f; + + + + + + + var nativeStartsWith = ''.startsWith; + var min$4 = Math.min; + + var CORRECT_IS_REGEXP_LOGIC = correctIsRegexpLogic('startsWith'); + // https://github.com/zloirock/core-js/pull/702 + var MDN_POLYFILL_BUG = !CORRECT_IS_REGEXP_LOGIC && !!function () { + var descriptor = getOwnPropertyDescriptor$4(String.prototype, 'startsWith'); + return descriptor && !descriptor.writable; + }(); + + // `String.prototype.startsWith` method + // https://tc39.github.io/ecma262/#sec-string.prototype.startswith + _export({ target: 'String', proto: true, forced: !MDN_POLYFILL_BUG && !CORRECT_IS_REGEXP_LOGIC }, { + startsWith: function startsWith(searchString /* , position = 0 */) { + var that = String(requireObjectCoercible(this)); + notARegexp(searchString); + var index = toLength(min$4(arguments.length > 1 ? arguments[1] : undefined, that.length)); + var search = String(searchString); + return nativeStartsWith + ? nativeStartsWith.call(that, search, index) + : that.slice(index, index + search.length) === search; + } + }); + + // ========================================================================== + // Type checking utils + // ========================================================================== + var getConstructor$1 = function getConstructor(input) { + return input !== null && typeof input !== 'undefined' ? input.constructor : null; + }; + + var instanceOf$1 = function instanceOf(input, constructor) { + return Boolean(input && constructor && input instanceof constructor); + }; + + var isNullOrUndefined$1 = function isNullOrUndefined(input) { + return input === null || typeof input === 'undefined'; + }; + + var isObject$2 = function isObject(input) { + return getConstructor$1(input) === Object; + }; + + var isNumber$1 = function isNumber(input) { + return getConstructor$1(input) === Number && !Number.isNaN(input); + }; + + var isString$1 = function isString(input) { + return getConstructor$1(input) === String; + }; + + var isBoolean$1 = function isBoolean(input) { + return getConstructor$1(input) === Boolean; + }; + + var isFunction$1 = function isFunction(input) { + return getConstructor$1(input) === Function; + }; + + var isArray$2 = function isArray(input) { + return Array.isArray(input); + }; + + var isWeakMap = function isWeakMap(input) { + return instanceOf$1(input, WeakMap); + }; + + var isNodeList$1 = function isNodeList(input) { + return instanceOf$1(input, NodeList); + }; + + var isElement$1 = function isElement(input) { + return instanceOf$1(input, Element); + }; + + var isTextNode = function isTextNode(input) { + return getConstructor$1(input) === Text; + }; + + var isEvent$1 = function isEvent(input) { + return instanceOf$1(input, Event); + }; + + var isKeyboardEvent = function isKeyboardEvent(input) { + return instanceOf$1(input, KeyboardEvent); + }; + + var isCue = function isCue(input) { + return instanceOf$1(input, window.TextTrackCue) || instanceOf$1(input, window.VTTCue); + }; + + var isTrack = function isTrack(input) { + return instanceOf$1(input, TextTrack) || !isNullOrUndefined$1(input) && isString$1(input.kind); + }; + + var isPromise = function isPromise(input) { + return instanceOf$1(input, Promise); + }; + + var isEmpty$1 = function isEmpty(input) { + return isNullOrUndefined$1(input) || (isString$1(input) || isArray$2(input) || isNodeList$1(input)) && !input.length || isObject$2(input) && !Object.keys(input).length; + }; + + var isUrl = function isUrl(input) { + // Accept a URL object + if (instanceOf$1(input, window.URL)) { + return true; + } // Must be string from here + + + if (!isString$1(input)) { + return false; + } // Add the protocol if required + + + var string = input; + + if (!input.startsWith('http://') || !input.startsWith('https://')) { + string = "http://".concat(input); + } + + try { + return !isEmpty$1(new URL(string).hostname); + } catch (e) { + return false; + } + }; + + var is$1 = { + nullOrUndefined: isNullOrUndefined$1, + object: isObject$2, + number: isNumber$1, + string: isString$1, + boolean: isBoolean$1, + function: isFunction$1, + array: isArray$2, + weakMap: isWeakMap, + nodeList: isNodeList$1, + element: isElement$1, + textNode: isTextNode, + event: isEvent$1, + keyboardEvent: isKeyboardEvent, + cue: isCue, + track: isTrack, + promise: isPromise, + url: isUrl, + empty: isEmpty$1 + }; + + var transitionEndEvent = function () { + var element = document.createElement('span'); + var events = { + WebkitTransition: 'webkitTransitionEnd', + MozTransition: 'transitionend', + OTransition: 'oTransitionEnd otransitionend', + transition: 'transitionend' + }; + var type = Object.keys(events).find(function (event) { + return element.style[event] !== undefined; + }); + return is$1.string(type) ? events[type] : false; + }(); // Force repaint of element + + function repaint(element, delay) { + setTimeout(function () { + try { + // eslint-disable-next-line no-param-reassign + element.hidden = true; // eslint-disable-next-line no-unused-expressions + + element.offsetHeight; // eslint-disable-next-line no-param-reassign + + element.hidden = false; + } catch (e) {// Do nothing + } + }, delay); + } + + // ========================================================================== + // Browser sniffing + // Unfortunately, due to mixed support, UA sniffing is required + // ========================================================================== + var browser = { + isIE: + /* @cc_on!@ */ + !!document.documentMode, + isEdge: window.navigator.userAgent.includes('Edge'), + isWebkit: 'WebkitAppearance' in document.documentElement.style && !/Edge/.test(navigator.userAgent), + isIPhone: /(iPhone|iPod)/gi.test(navigator.platform), + isIos: /(iPad|iPhone|iPod)/gi.test(navigator.platform) + }; + + // `Array.prototype.{ reduce, reduceRight }` methods implementation + var createMethod$5 = function (IS_RIGHT) { + return function (that, callbackfn, argumentsLength, memo) { + aFunction$1(callbackfn); + var O = toObject(that); + var self = indexedObject(O); + var length = toLength(O.length); + var index = IS_RIGHT ? length - 1 : 0; + var i = IS_RIGHT ? -1 : 1; + if (argumentsLength < 2) while (true) { + if (index in self) { + memo = self[index]; + index += i; + break; + } + index += i; + if (IS_RIGHT ? index < 0 : length <= index) { + throw TypeError('Reduce of empty array with no initial value'); + } + } + for (;IS_RIGHT ? index >= 0 : length > index; index += i) if (index in self) { + memo = callbackfn(memo, self[index], index, O); + } + return memo; + }; + }; + + var arrayReduce = { + // `Array.prototype.reduce` method + // https://tc39.github.io/ecma262/#sec-array.prototype.reduce + left: createMethod$5(false), + // `Array.prototype.reduceRight` method + // https://tc39.github.io/ecma262/#sec-array.prototype.reduceright + right: createMethod$5(true) + }; + + var $reduce = arrayReduce.left; + + + + var STRICT_METHOD$5 = arrayMethodIsStrict('reduce'); + var USES_TO_LENGTH$9 = arrayMethodUsesToLength('reduce', { 1: 0 }); + + // `Array.prototype.reduce` method + // https://tc39.github.io/ecma262/#sec-array.prototype.reduce + _export({ target: 'Array', proto: true, forced: !STRICT_METHOD$5 || !USES_TO_LENGTH$9 }, { + reduce: function reduce(callbackfn /* , initialValue */) { + return $reduce(this, callbackfn, arguments.length, arguments.length > 1 ? arguments[1] : undefined); + } + }); + + function cloneDeep(object) { + return JSON.parse(JSON.stringify(object)); + } // Get a nested value in an object + + function getDeep(object, path) { + return path.split('.').reduce(function (obj, key) { + return obj && obj[key]; + }, object); + } // Deep extend destination object with N more objects + + function extend() { + var target = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + for (var _len = arguments.length, sources = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + sources[_key - 1] = arguments[_key]; + } + + if (!sources.length) { + return target; + } + + var source = sources.shift(); + + if (!is$1.object(source)) { + return target; + } + + Object.keys(source).forEach(function (key) { + if (is$1.object(source[key])) { + if (!Object.keys(target).includes(key)) { + Object.assign(target, _defineProperty({}, key, {})); + } + + extend(target[key], source[key]); + } else { + Object.assign(target, _defineProperty({}, key, source[key])); + } + }); + return extend.apply(void 0, [target].concat(sources)); + } + + function wrap$1(elements, wrapper) { + // Convert `elements` to an array, if necessary. + var targets = elements.length ? elements : [elements]; // Loops backwards to prevent having to clone the wrapper on the + // first element (see `child` below). + + Array.from(targets).reverse().forEach(function (element, index) { + var child = index > 0 ? wrapper.cloneNode(true) : wrapper; // Cache the current parent and sibling. + + var parent = element.parentNode; + var sibling = element.nextSibling; // Wrap the element (is automatically removed from its current + // parent). + + child.appendChild(element); // If the element had a sibling, insert the wrapper before + // the sibling to maintain the HTML structure; otherwise, just + // append it to the parent. + + if (sibling) { + parent.insertBefore(child, sibling); + } else { + parent.appendChild(child); + } + }); + } // Set attributes + + function setAttributes(element, attributes) { + if (!is$1.element(element) || is$1.empty(attributes)) { + return; + } // Assume null and undefined attributes should be left out, + // Setting them would otherwise convert them to "null" and "undefined" + + + Object.entries(attributes).filter(function (_ref) { + var _ref2 = _slicedToArray(_ref, 2), + value = _ref2[1]; + + return !is$1.nullOrUndefined(value); + }).forEach(function (_ref3) { + var _ref4 = _slicedToArray(_ref3, 2), + key = _ref4[0], + value = _ref4[1]; + + return element.setAttribute(key, value); + }); + } // Create a DocumentFragment + + function createElement(type, attributes, text) { + // Create a new + var element = document.createElement(type); // Set all passed attributes + + if (is$1.object(attributes)) { + setAttributes(element, attributes); + } // Add text node + + + if (is$1.string(text)) { + element.innerText = text; + } // Return built element + + + return element; + } // Inaert an element after another + + function insertAfter(element, target) { + if (!is$1.element(element) || !is$1.element(target)) { + return; + } + + target.parentNode.insertBefore(element, target.nextSibling); + } // Insert a DocumentFragment + + function insertElement(type, parent, attributes, text) { + if (!is$1.element(parent)) { + return; + } + + parent.appendChild(createElement(type, attributes, text)); + } // Remove element(s) + + function removeElement(element) { + if (is$1.nodeList(element) || is$1.array(element)) { + Array.from(element).forEach(removeElement); + return; + } + + if (!is$1.element(element) || !is$1.element(element.parentNode)) { + return; + } + + element.parentNode.removeChild(element); + } // Remove all child elements + + function emptyElement(element) { + if (!is$1.element(element)) { + return; + } + + var length = element.childNodes.length; + + while (length > 0) { + element.removeChild(element.lastChild); + length -= 1; + } + } // Replace element + + function replaceElement(newChild, oldChild) { + if (!is$1.element(oldChild) || !is$1.element(oldChild.parentNode) || !is$1.element(newChild)) { + return null; + } + + oldChild.parentNode.replaceChild(newChild, oldChild); + return newChild; + } // Get an attribute object from a string selector + + function getAttributesFromSelector(sel, existingAttributes) { + // For example: + // '.test' to { class: 'test' } + // '#test' to { id: 'test' } + // '[data-test="test"]' to { 'data-test': 'test' } + if (!is$1.string(sel) || is$1.empty(sel)) { + return {}; + } + + var attributes = {}; + var existing = extend({}, existingAttributes); + sel.split(',').forEach(function (s) { + // Remove whitespace + var selector = s.trim(); + var className = selector.replace('.', ''); + var stripped = selector.replace(/[[\]]/g, ''); // Get the parts and value + + var parts = stripped.split('='); + + var _parts = _slicedToArray(parts, 1), + key = _parts[0]; + + var value = parts.length > 1 ? parts[1].replace(/["']/g, '') : ''; // Get the first character + + var start = selector.charAt(0); + + switch (start) { + case '.': + // Add to existing classname + if (is$1.string(existing.class)) { + attributes.class = "".concat(existing.class, " ").concat(className); + } else { + attributes.class = className; + } + + break; + + case '#': + // ID selector + attributes.id = selector.replace('#', ''); + break; + + case '[': + // Attribute selector + attributes[key] = value; + break; + } + }); + return extend(existing, attributes); + } // Toggle hidden + + function toggleHidden(element, hidden) { + if (!is$1.element(element)) { + return; + } + + var hide = hidden; + + if (!is$1.boolean(hide)) { + hide = !element.hidden; + } // eslint-disable-next-line no-param-reassign + + + element.hidden = hide; + } // Mirror Element.classList.toggle, with IE compatibility for "force" argument + + function toggleClass(element, className, force) { + if (is$1.nodeList(element)) { + return Array.from(element).map(function (e) { + return toggleClass(e, className, force); + }); + } + + if (is$1.element(element)) { + var method = 'toggle'; + + if (typeof force !== 'undefined') { + method = force ? 'add' : 'remove'; + } + + element.classList[method](className); + return element.classList.contains(className); + } + + return false; + } // Has class name + + function hasClass(element, className) { + return is$1.element(element) && element.classList.contains(className); + } // Element matches selector + + function matches$1(element, selector) { + + function match() { + return Array.from(document.querySelectorAll(selector)).includes(this); + } + + var method = match; + return method.call(element, selector); + } // Find all elements + + function getElements(selector) { + return this.elements.container.querySelectorAll(selector); + } // Find a single element + + function getElement(selector) { + return this.elements.container.querySelector(selector); + } // Set focus and tab focus class + + function setFocus() { + var element = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; + var tabFocus = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + + if (!is$1.element(element)) { + return; + } // Set regular focus + + + element.focus({ + preventScroll: true + }); // If we want to mimic keyboard focus via tab + + if (tabFocus) { + toggleClass(element, this.config.classNames.tabFocus); + } + } + + var defaultCodecs = { + 'audio/ogg': 'vorbis', + 'audio/wav': '1', + 'video/webm': 'vp8, vorbis', + 'video/mp4': 'avc1.42E01E, mp4a.40.2', + 'video/ogg': 'theora' + }; // Check for feature support + + var support = { + // Basic support + audio: 'canPlayType' in document.createElement('audio'), + video: 'canPlayType' in document.createElement('video'), + // Check for support + // Basic functionality vs full UI + check: function check(type, provider, playsinline) { + var canPlayInline = browser.isIPhone && playsinline && support.playsinline; + var api = support[type] || provider !== 'html5'; + var ui = api && support.rangeInput && (type !== 'video' || !browser.isIPhone || canPlayInline); + return { + api: api, + ui: ui + }; + }, + // Picture-in-picture support + // Safari & Chrome only currently + pip: function () { + if (browser.isIPhone) { + return false; + } // Safari + // https://developer.apple.com/documentation/webkitjs/adding_picture_in_picture_to_your_safari_media_controls + + + if (is$1.function(createElement('video').webkitSetPresentationMode)) { + return true; + } // Chrome + // https://developers.google.com/web/updates/2018/10/watch-video-using-picture-in-picture + + + if (document.pictureInPictureEnabled && !createElement('video').disablePictureInPicture) { + return true; + } + + return false; + }(), + // Airplay support + // Safari only currently + airplay: is$1.function(window.WebKitPlaybackTargetAvailabilityEvent), + // Inline playback support + // https://webkit.org/blog/6784/new-video-policies-for-ios/ + playsinline: 'playsInline' in document.createElement('video'), + // Check for mime type support against a player instance + // Credits: http://diveintohtml5.info/everything.html + // Related: http://www.leanbackplayer.com/test/h5mt.html + mime: function mime(input) { + if (is$1.empty(input)) { + return false; + } + + var _input$split = input.split('/'), + _input$split2 = _slicedToArray(_input$split, 1), + mediaType = _input$split2[0]; + + var type = input; // Verify we're using HTML5 and there's no media type mismatch + + if (!this.isHTML5 || mediaType !== this.type) { + return false; + } // Add codec if required + + + if (Object.keys(defaultCodecs).includes(type)) { + type += "; codecs=\"".concat(defaultCodecs[input], "\""); + } + + try { + return Boolean(type && this.media.canPlayType(type).replace(/no/, '')); + } catch (e) { + return false; + } + }, + // Check for textTracks support + textTracks: 'textTracks' in document.createElement('video'), + // Sliders + rangeInput: function () { + var range = document.createElement('input'); + range.type = 'range'; + return range.type === 'range'; + }(), + // Touch + // NOTE: Remember a device can be mouse + touch enabled so we check on first touch event + touch: 'ontouchstart' in document.documentElement, + // Detect transitions support + transitions: transitionEndEvent !== false, + // Reduced motion iOS & MacOS setting + // https://webkit.org/blog/7551/responsive-design-for-motion/ + reducedMotion: 'matchMedia' in window && window.matchMedia('(prefers-reduced-motion)').matches + }; + + // https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md + // https://www.youtube.com/watch?v=NPM6172J22g + + var supportsPassiveListeners = function () { + // Test via a getter in the options object to see if the passive property is accessed + var supported = false; + + try { + var options = Object.defineProperty({}, 'passive', { + get: function get() { + supported = true; + return null; + } + }); + window.addEventListener('test', null, options); + window.removeEventListener('test', null, options); + } catch (e) {// Do nothing + } + + return supported; + }(); // Toggle event listener + + + function toggleListener(element, event, callback) { + var _this = this; + + var toggle = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; + var passive = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true; + var capture = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : false; + + // Bail if no element, event, or callback + if (!element || !('addEventListener' in element) || is$1.empty(event) || !is$1.function(callback)) { + return; + } // Allow multiple events + + + var events = event.split(' '); // Build options + // Default to just the capture boolean for browsers with no passive listener support + + var options = capture; // If passive events listeners are supported + + if (supportsPassiveListeners) { + options = { + // Whether the listener can be passive (i.e. default never prevented) + passive: passive, + // Whether the listener is a capturing listener or not + capture: capture + }; + } // If a single node is passed, bind the event listener + + + events.forEach(function (type) { + if (_this && _this.eventListeners && toggle) { + // Cache event listener + _this.eventListeners.push({ + element: element, + type: type, + callback: callback, + options: options + }); + } + + element[toggle ? 'addEventListener' : 'removeEventListener'](type, callback, options); + }); + } // Bind event handler + + function on(element) { + var events = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ''; + var callback = arguments.length > 2 ? arguments[2] : undefined; + var passive = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true; + var capture = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false; + toggleListener.call(this, element, events, callback, true, passive, capture); + } // Unbind event handler + + function off(element) { + var events = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ''; + var callback = arguments.length > 2 ? arguments[2] : undefined; + var passive = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true; + var capture = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false; + toggleListener.call(this, element, events, callback, false, passive, capture); + } // Bind once-only event handler + + function once(element) { + var _this2 = this; + + var events = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ''; + var callback = arguments.length > 2 ? arguments[2] : undefined; + var passive = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true; + var capture = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false; + + var onceCallback = function onceCallback() { + off(element, events, onceCallback, passive, capture); + + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + callback.apply(_this2, args); + }; + + toggleListener.call(this, element, events, onceCallback, true, passive, capture); + } // Trigger event + + function triggerEvent(element) { + var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ''; + var bubbles = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; + var detail = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; + + // Bail if no element + if (!is$1.element(element) || is$1.empty(type)) { + return; + } // Create and dispatch the event + + + var event = new CustomEvent(type, { + bubbles: bubbles, + detail: _objectSpread2({}, detail, { + plyr: this + }) + }); // Dispatch the event + + element.dispatchEvent(event); + } // Unbind all cached event listeners + + function unbindListeners() { + if (this && this.eventListeners) { + this.eventListeners.forEach(function (item) { + var element = item.element, + type = item.type, + callback = item.callback, + options = item.options; + element.removeEventListener(type, callback, options); + }); + this.eventListeners = []; + } + } // Run method when / if player is ready + + function ready() { + var _this3 = this; + + return new Promise(function (resolve) { + return _this3.ready ? setTimeout(resolve, 0) : on.call(_this3, _this3.elements.container, 'ready', resolve); + }).then(function () {}); + } + + function validateRatio(input) { + if (!is$1.array(input) && (!is$1.string(input) || !input.includes(':'))) { + return false; + } + + var ratio = is$1.array(input) ? input : input.split(':'); + return ratio.map(Number).every(is$1.number); + } + function reduceAspectRatio(ratio) { + if (!is$1.array(ratio) || !ratio.every(is$1.number)) { + return null; + } + + var _ratio = _slicedToArray(ratio, 2), + width = _ratio[0], + height = _ratio[1]; + + var getDivider = function getDivider(w, h) { + return h === 0 ? w : getDivider(h, w % h); + }; + + var divider = getDivider(width, height); + return [width / divider, height / divider]; + } + function getAspectRatio(input) { + var parse = function parse(ratio) { + return validateRatio(ratio) ? ratio.split(':').map(Number) : null; + }; // Try provided ratio + + + var ratio = parse(input); // Get from config + + if (ratio === null) { + ratio = parse(this.config.ratio); + } // Get from embed + + + if (ratio === null && !is$1.empty(this.embed) && is$1.array(this.embed.ratio)) { + ratio = this.embed.ratio; + } // Get from HTML5 video + + + if (ratio === null && this.isHTML5) { + var _this$media = this.media, + videoWidth = _this$media.videoWidth, + videoHeight = _this$media.videoHeight; + ratio = reduceAspectRatio([videoWidth, videoHeight]); + } + + return ratio; + } // Set aspect ratio for responsive container + + function setAspectRatio(input) { + if (!this.isVideo) { + return {}; + } + + var wrapper = this.elements.wrapper; + var ratio = getAspectRatio.call(this, input); + + var _ref = is$1.array(ratio) ? ratio : [0, 0], + _ref2 = _slicedToArray(_ref, 2), + w = _ref2[0], + h = _ref2[1]; + + var padding = 100 / w * h; + wrapper.style.paddingBottom = "".concat(padding, "%"); // For Vimeo we have an extra
to hide the standard controls and UI + + if (this.isVimeo && this.supported.ui) { + var height = 240; + var offset = (height - padding) / (height / 50); + this.media.style.transform = "translateY(-".concat(offset, "%)"); + } else if (this.isHTML5) { + wrapper.classList.toggle(this.config.classNames.videoFixedRatio, ratio !== null); + } + + return { + padding: padding, + ratio: ratio + }; + } + + var html5 = { + getSources: function getSources() { + var _this = this; + + if (!this.isHTML5) { + return []; + } + + var sources = Array.from(this.media.querySelectorAll('source')); // Filter out unsupported sources (if type is specified) + + return sources.filter(function (source) { + var type = source.getAttribute('type'); + + if (is$1.empty(type)) { + return true; + } + + return support.mime.call(_this, type); + }); + }, + // Get quality levels + getQualityOptions: function getQualityOptions() { + // Whether we're forcing all options (e.g. for streaming) + if (this.config.quality.forced) { + return this.config.quality.options; + } // Get sizes from elements + + + return html5.getSources.call(this).map(function (source) { + return Number(source.getAttribute('size')); + }).filter(Boolean); + }, + setup: function setup() { + if (!this.isHTML5) { + return; + } + + var player = this; // Set speed options from config + + player.options.speed = player.config.speed.options; // Set aspect ratio if fixed + + if (!is$1.empty(this.config.ratio)) { + setAspectRatio.call(player); + } // Quality + + + Object.defineProperty(player.media, 'quality', { + get: function get() { + // Get sources + var sources = html5.getSources.call(player); + var source = sources.find(function (s) { + return s.getAttribute('src') === player.source; + }); // Return size, if match is found + + return source && Number(source.getAttribute('size')); + }, + set: function set(input) { + if (player.quality === input) { + return; + } // If we're using an an external handler... + + + if (player.config.quality.forced && is$1.function(player.config.quality.onChange)) { + player.config.quality.onChange(input); + } else { + // Get sources + var sources = html5.getSources.call(player); // Get first match for requested size + + var source = sources.find(function (s) { + return Number(s.getAttribute('size')) === input; + }); // No matching source found + + if (!source) { + return; + } // Get current state + + + var _player$media = player.media, + currentTime = _player$media.currentTime, + paused = _player$media.paused, + preload = _player$media.preload, + readyState = _player$media.readyState, + playbackRate = _player$media.playbackRate; // Set new source + + player.media.src = source.getAttribute('src'); // Prevent loading if preload="none" and the current source isn't loaded (#1044) + + if (preload !== 'none' || readyState) { + // Restore time + player.once('loadedmetadata', function () { + player.speed = playbackRate; + player.currentTime = currentTime; // Resume playing + + if (!paused) { + player.play(); + } + }); // Load new source + + player.media.load(); + } + } // Trigger change event + + + triggerEvent.call(player, player.media, 'qualitychange', false, { + quality: input + }); + } + }); + }, + // Cancel current network requests + // See https://github.com/sampotts/plyr/issues/174 + cancelRequests: function cancelRequests() { + if (!this.isHTML5) { + return; + } // Remove child sources + + + removeElement(html5.getSources.call(this)); // Set blank video src attribute + // This is to prevent a MEDIA_ERR_SRC_NOT_SUPPORTED error + // Info: http://stackoverflow.com/questions/32231579/how-to-properly-dispose-of-an-html5-video-and-close-socket-or-connection + + this.media.setAttribute('src', this.config.blankVideo); // Load the new empty source + // This will cancel existing requests + // See https://github.com/sampotts/plyr/issues/174 + + this.media.load(); // Debugging + + this.debug.log('Cancelled network requests'); + } + }; + + function dedupe(array) { + if (!is$1.array(array)) { + return array; + } + + return array.filter(function (item, index) { + return array.indexOf(item) === index; + }); + } // Get the closest value in an array + + function closest(array, value) { + if (!is$1.array(array) || !array.length) { + return null; + } + + return array.reduce(function (prev, curr) { + return Math.abs(curr - value) < Math.abs(prev - value) ? curr : prev; + }); + } + + var defineProperty$6 = objectDefineProperty.f; + var getOwnPropertyNames$1 = objectGetOwnPropertyNames.f; + + + + + + var setInternalState$7 = internalState.set; + + + + var MATCH$2 = wellKnownSymbol('match'); + var NativeRegExp = global_1.RegExp; + var RegExpPrototype$1 = NativeRegExp.prototype; + var re1 = /a/g; + var re2 = /a/g; + + // "new" should create a new object, old webkit bug + var CORRECT_NEW = new NativeRegExp(re1) !== re1; + + var UNSUPPORTED_Y$2 = regexpStickyHelpers.UNSUPPORTED_Y; + + var FORCED$3 = descriptors && isForced_1('RegExp', (!CORRECT_NEW || UNSUPPORTED_Y$2 || fails(function () { + re2[MATCH$2] = false; + // RegExp constructor can alter flags and IsRegExp works correct with @@match + return NativeRegExp(re1) != re1 || NativeRegExp(re2) == re2 || NativeRegExp(re1, 'i') != '/a/i'; + }))); + + // `RegExp` constructor + // https://tc39.github.io/ecma262/#sec-regexp-constructor + if (FORCED$3) { + var RegExpWrapper = function RegExp(pattern, flags) { + var thisIsRegExp = this instanceof RegExpWrapper; + var patternIsRegExp = isRegexp(pattern); + var flagsAreUndefined = flags === undefined; + var sticky; + + if (!thisIsRegExp && patternIsRegExp && pattern.constructor === RegExpWrapper && flagsAreUndefined) { + return pattern; + } + + if (CORRECT_NEW) { + if (patternIsRegExp && !flagsAreUndefined) pattern = pattern.source; + } else if (pattern instanceof RegExpWrapper) { + if (flagsAreUndefined) flags = regexpFlags.call(pattern); + pattern = pattern.source; + } + + if (UNSUPPORTED_Y$2) { + sticky = !!flags && flags.indexOf('y') > -1; + if (sticky) flags = flags.replace(/y/g, ''); + } + + var result = inheritIfRequired( + CORRECT_NEW ? new NativeRegExp(pattern, flags) : NativeRegExp(pattern, flags), + thisIsRegExp ? this : RegExpPrototype$1, + RegExpWrapper + ); + + if (UNSUPPORTED_Y$2 && sticky) setInternalState$7(result, { sticky: sticky }); + + return result; + }; + var proxy = function (key) { + key in RegExpWrapper || defineProperty$6(RegExpWrapper, key, { + configurable: true, + get: function () { return NativeRegExp[key]; }, + set: function (it) { NativeRegExp[key] = it; } + }); + }; + var keys$2 = getOwnPropertyNames$1(NativeRegExp); + var index = 0; + while (keys$2.length > index) proxy(keys$2[index++]); + RegExpPrototype$1.constructor = RegExpWrapper; + RegExpWrapper.prototype = RegExpPrototype$1; + redefine(global_1, 'RegExp', RegExpWrapper); + } + + // https://tc39.github.io/ecma262/#sec-get-regexp-@@species + setSpecies('RegExp'); + + function generateId(prefix) { + return "".concat(prefix, "-").concat(Math.floor(Math.random() * 10000)); + } // Format string + + function format(input) { + for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + args[_key - 1] = arguments[_key]; + } + + if (is$1.empty(input)) { + return input; + } + + return input.toString().replace(/{(\d+)}/g, function (match, i) { + return args[i].toString(); + }); + } // Get percentage + + function getPercentage(current, max) { + if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) { + return 0; + } + + return (current / max * 100).toFixed(2); + } // Replace all occurances of a string in a string + + function replaceAll() { + var input = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; + var find = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ''; + var replace = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : ''; + return input.replace(new RegExp(find.toString().replace(/([.*+?^=!:${}()|[\]/\\])/g, '\\$1'), 'g'), replace.toString()); + } // Convert to title case + + function toTitleCase() { + var input = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; + return input.toString().replace(/\w\S*/g, function (text) { + return text.charAt(0).toUpperCase() + text.substr(1).toLowerCase(); + }); + } // Convert string to pascalCase + + function toPascalCase() { + var input = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; + var string = input.toString(); // Convert kebab case + + string = replaceAll(string, '-', ' '); // Convert snake case + + string = replaceAll(string, '_', ' '); // Convert to title case + + string = toTitleCase(string); // Convert to pascal case + + return replaceAll(string, ' ', ''); + } // Convert string to pascalCase + + function toCamelCase() { + var input = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; + var string = input.toString(); // Convert to pascal case + + string = toPascalCase(string); // Convert first character to lowercase + + return string.charAt(0).toLowerCase() + string.slice(1); + } // Remove HTML from a string + + function stripHTML(source) { + var fragment = document.createDocumentFragment(); + var element = document.createElement('div'); + fragment.appendChild(element); + element.innerHTML = source; + return fragment.firstChild.innerText; + } // Like outerHTML, but also works for DocumentFragment + + function getHTML(element) { + var wrapper = document.createElement('div'); + wrapper.appendChild(element); + return wrapper.innerHTML; + } + + var resources = { + pip: 'PIP', + airplay: 'AirPlay', + html5: 'HTML5', + vimeo: 'Vimeo', + youtube: 'YouTube' + }; + var i18n = { + get: function get() { + var key = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; + var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + + if (is$1.empty(key) || is$1.empty(config)) { + return ''; + } + + var string = getDeep(config.i18n, key); + + if (is$1.empty(string)) { + if (Object.keys(resources).includes(key)) { + return resources[key]; + } + + return ''; + } + + var replace = { + '{seektime}': config.seekTime, + '{title}': config.title + }; + Object.entries(replace).forEach(function (_ref) { + var _ref2 = _slicedToArray(_ref, 2), + k = _ref2[0], + v = _ref2[1]; + + string = replaceAll(string, k, v); + }); + return string; + } + }; + + var Storage = + /*#__PURE__*/ + function () { + function Storage(player) { + _classCallCheck(this, Storage); + + this.enabled = player.config.storage.enabled; + this.key = player.config.storage.key; + } // Check for actual support (see if we can use it) + + + _createClass(Storage, [{ + key: "get", + value: function get(key) { + if (!Storage.supported || !this.enabled) { + return null; + } + + var store = window.localStorage.getItem(this.key); + + if (is$1.empty(store)) { + return null; + } + + var json = JSON.parse(store); + return is$1.string(key) && key.length ? json[key] : json; + } + }, { + key: "set", + value: function set(object) { + // Bail if we don't have localStorage support or it's disabled + if (!Storage.supported || !this.enabled) { + return; + } // Can only store objectst + + + if (!is$1.object(object)) { + return; + } // Get current storage + + + var storage = this.get(); // Default to empty object + + if (is$1.empty(storage)) { + storage = {}; + } // Update the working copy of the values + + + extend(storage, object); // Update storage + + window.localStorage.setItem(this.key, JSON.stringify(storage)); + } + }], [{ + key: "supported", + get: function get() { + try { + if (!('localStorage' in window)) { + return false; + } + + var test = '___test'; // Try to use it (it might be disabled, e.g. user is in private mode) + // see: https://github.com/sampotts/plyr/issues/131 + + window.localStorage.setItem(test, test); + window.localStorage.removeItem(test); + return true; + } catch (e) { + return false; + } + } + }]); + + return Storage; + }(); + + // ========================================================================== + // Fetch wrapper + // Using XHR to avoid issues with older browsers + // ========================================================================== + function fetch(url) { + var responseType = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'text'; + return new Promise(function (resolve, reject) { + try { + var request = new XMLHttpRequest(); // Check for CORS support + + if (!('withCredentials' in request)) { + return; + } + + request.addEventListener('load', function () { + if (responseType === 'text') { + try { + resolve(JSON.parse(request.responseText)); + } catch (e) { + resolve(request.responseText); + } + } else { + resolve(request.response); + } + }); + request.addEventListener('error', function () { + throw new Error(request.status); + }); + request.open('GET', url, true); // Set the required response type + + request.responseType = responseType; + request.send(); + } catch (e) { + reject(e); + } + }); + } + + // ========================================================================== + + function loadSprite(url, id) { + if (!is$1.string(url)) { + return; + } + + var prefix = 'cache'; + var hasId = is$1.string(id); + var isCached = false; + + var exists = function exists() { + return document.getElementById(id) !== null; + }; + + var update = function update(container, data) { + // eslint-disable-next-line no-param-reassign + container.innerHTML = data; // Check again incase of race condition + + if (hasId && exists()) { + return; + } // Inject the SVG to the body + + + document.body.insertAdjacentElement('afterbegin', container); + }; // Only load once if ID set + + + if (!hasId || !exists()) { + var useStorage = Storage.supported; // Create container + + var container = document.createElement('div'); + container.setAttribute('hidden', ''); + + if (hasId) { + container.setAttribute('id', id); + } // Check in cache + + + if (useStorage) { + var cached = window.localStorage.getItem("".concat(prefix, "-").concat(id)); + isCached = cached !== null; + + if (isCached) { + var data = JSON.parse(cached); + update(container, data.content); + } + } // Get the sprite + + + fetch(url).then(function (result) { + if (is$1.empty(result)) { + return; + } + + if (useStorage) { + window.localStorage.setItem("".concat(prefix, "-").concat(id), JSON.stringify({ + content: result + })); + } + + update(container, result); + }).catch(function () {}); + } + } + + var ceil$1 = Math.ceil; + var floor$5 = Math.floor; + + // `Math.trunc` method + // https://tc39.github.io/ecma262/#sec-math.trunc + _export({ target: 'Math', stat: true }, { + trunc: function trunc(it) { + return (it > 0 ? floor$5 : ceil$1)(it); + } + }); + + var getHours = function getHours(value) { + return Math.trunc(value / 60 / 60 % 60, 10); + }; + var getMinutes = function getMinutes(value) { + return Math.trunc(value / 60 % 60, 10); + }; + var getSeconds = function getSeconds(value) { + return Math.trunc(value % 60, 10); + }; // Format time to UI friendly string + + function formatTime() { + var time = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; + var displayHours = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + var inverted = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; + + // Bail if the value isn't a number + if (!is$1.number(time)) { + return formatTime(undefined, displayHours, inverted); + } // Format time component to add leading zero + + + var format = function format(value) { + return "0".concat(value).slice(-2); + }; // Breakdown to hours, mins, secs + + + var hours = getHours(time); + var mins = getMinutes(time); + var secs = getSeconds(time); // Do we need to display hours? + + if (displayHours || hours > 0) { + hours = "".concat(hours, ":"); + } else { + hours = ''; + } // Render + + + return "".concat(inverted && time > 0 ? '-' : '').concat(hours).concat(format(mins), ":").concat(format(secs)); + } + + var controls = { + // Get icon URL + getIconUrl: function getIconUrl() { + var url = new URL(this.config.iconUrl, window.location); + var cors = url.host !== window.location.host || browser.isIE && !window.svg4everybody; + return { + url: this.config.iconUrl, + cors: cors + }; + }, + // Find the UI controls + findElements: function findElements() { + try { + this.elements.controls = getElement.call(this, this.config.selectors.controls.wrapper); // Buttons + + this.elements.buttons = { + play: getElements.call(this, this.config.selectors.buttons.play), + pause: getElement.call(this, this.config.selectors.buttons.pause), + restart: getElement.call(this, this.config.selectors.buttons.restart), + rewind: getElement.call(this, this.config.selectors.buttons.rewind), + fastForward: getElement.call(this, this.config.selectors.buttons.fastForward), + mute: getElement.call(this, this.config.selectors.buttons.mute), + pip: getElement.call(this, this.config.selectors.buttons.pip), + airplay: getElement.call(this, this.config.selectors.buttons.airplay), + settings: getElement.call(this, this.config.selectors.buttons.settings), + captions: getElement.call(this, this.config.selectors.buttons.captions), + fullscreen: getElement.call(this, this.config.selectors.buttons.fullscreen) + }; // Progress + + this.elements.progress = getElement.call(this, this.config.selectors.progress); // Inputs + + this.elements.inputs = { + seek: getElement.call(this, this.config.selectors.inputs.seek), + volume: getElement.call(this, this.config.selectors.inputs.volume) + }; // Display + + this.elements.display = { + buffer: getElement.call(this, this.config.selectors.display.buffer), + currentTime: getElement.call(this, this.config.selectors.display.currentTime), + duration: getElement.call(this, this.config.selectors.display.duration) + }; // Seek tooltip + + if (is$1.element(this.elements.progress)) { + this.elements.display.seekTooltip = this.elements.progress.querySelector(".".concat(this.config.classNames.tooltip)); + } + + return true; + } catch (error) { + // Log it + this.debug.warn('It looks like there is a problem with your custom controls HTML', error); // Restore native video controls + + this.toggleNativeControls(true); + return false; + } + }, + // Create icon + createIcon: function createIcon(type, attributes) { + var namespace = 'http://www.w3.org/2000/svg'; + var iconUrl = controls.getIconUrl.call(this); + var iconPath = "".concat(!iconUrl.cors ? iconUrl.url : '', "#").concat(this.config.iconPrefix); // Create + + var icon = document.createElementNS(namespace, 'svg'); + setAttributes(icon, extend(attributes, { + role: 'presentation', + focusable: 'false' + })); // Create the to reference sprite + + var use = document.createElementNS(namespace, 'use'); + var path = "".concat(iconPath, "-").concat(type); // Set `href` attributes + // https://github.com/sampotts/plyr/issues/460 + // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/xlink:href + + if ('href' in use) { + use.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path); + } // Always set the older attribute even though it's "deprecated" (it'll be around for ages) + + + use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', path); // Add to + + icon.appendChild(use); + return icon; + }, + // Create hidden text label + createLabel: function createLabel(key) { + var attr = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + var text = i18n.get(key, this.config); + + var attributes = _objectSpread2({}, attr, { + class: [attr.class, this.config.classNames.hidden].filter(Boolean).join(' ') + }); + + return createElement('span', attributes, text); + }, + // Create a badge + createBadge: function createBadge(text) { + if (is$1.empty(text)) { + return null; + } + + var badge = createElement('span', { + class: this.config.classNames.menu.value + }); + badge.appendChild(createElement('span', { + class: this.config.classNames.menu.badge + }, text)); + return badge; + }, + // Create a
if needed + + if (is$1.empty(source)) { + source = player.media.getAttribute(player.config.attributes.embed.id); + } + + var id = parseId(source); // Build an iframe + + var iframe = createElement('iframe'); + var src = format(player.config.urls.vimeo.iframe, id, params); + iframe.setAttribute('src', src); + iframe.setAttribute('allowfullscreen', ''); + iframe.setAttribute('allowtransparency', ''); + iframe.setAttribute('allow', 'autoplay'); // Set the referrer policy if required + + if (!is$1.empty(config.referrerPolicy)) { + iframe.setAttribute('referrerPolicy', config.referrerPolicy); + } // Get poster, if already set + + + var poster = player.poster; // Inject the package + + var wrapper = createElement('div', { + poster: poster, + class: player.config.classNames.embedContainer + }); + wrapper.appendChild(iframe); + player.media = replaceElement(wrapper, player.media); // Get poster image + + fetch(format(player.config.urls.vimeo.api, id), 'json').then(function (response) { + if (is$1.empty(response)) { + return; + } // Get the URL for thumbnail + + + var url = new URL(response[0].thumbnail_large); // Get original image + + url.pathname = "".concat(url.pathname.split('_')[0], ".jpg"); // Set and show poster + + ui.setPoster.call(player, url.href).catch(function () {}); + }); // Setup instance + // https://github.com/vimeo/player.js + + player.embed = new window.Vimeo.Player(iframe, { + autopause: player.config.autopause, + muted: player.muted + }); + player.media.paused = true; + player.media.currentTime = 0; // Disable native text track rendering + + if (player.supported.ui) { + player.embed.disableTextTrack(); + } // Create a faux HTML5 API using the Vimeo API + + + player.media.play = function () { + assurePlaybackState.call(player, true); + return player.embed.play(); + }; + + player.media.pause = function () { + assurePlaybackState.call(player, false); + return player.embed.pause(); + }; + + player.media.stop = function () { + player.pause(); + player.currentTime = 0; + }; // Seeking + + + var currentTime = player.media.currentTime; + Object.defineProperty(player.media, 'currentTime', { + get: function get() { + return currentTime; + }, + set: function set(time) { + // Vimeo will automatically play on seek if the video hasn't been played before + // Get current paused state and volume etc + var embed = player.embed, + media = player.media, + paused = player.paused, + volume = player.volume; + var restorePause = paused && !embed.hasPlayed; // Set seeking state and trigger event + + media.seeking = true; + triggerEvent.call(player, media, 'seeking'); // If paused, mute until seek is complete + + Promise.resolve(restorePause && embed.setVolume(0)) // Seek + .then(function () { + return embed.setCurrentTime(time); + }) // Restore paused + .then(function () { + return restorePause && embed.pause(); + }) // Restore volume + .then(function () { + return restorePause && embed.setVolume(volume); + }).catch(function () {// Do nothing + }); + } + }); // Playback speed + + var speed = player.config.speed.selected; + Object.defineProperty(player.media, 'playbackRate', { + get: function get() { + return speed; + }, + set: function set(input) { + player.embed.setPlaybackRate(input).then(function () { + speed = input; + triggerEvent.call(player, player.media, 'ratechange'); + }); + } + }); // Volume + + var volume = player.config.volume; + Object.defineProperty(player.media, 'volume', { + get: function get() { + return volume; + }, + set: function set(input) { + player.embed.setVolume(input).then(function () { + volume = input; + triggerEvent.call(player, player.media, 'volumechange'); + }); + } + }); // Muted + + var muted = player.config.muted; + Object.defineProperty(player.media, 'muted', { + get: function get() { + return muted; + }, + set: function set(input) { + var toggle = is$1.boolean(input) ? input : false; + player.embed.setVolume(toggle ? 0 : player.config.volume).then(function () { + muted = toggle; + triggerEvent.call(player, player.media, 'volumechange'); + }); + } + }); // Loop + + var loop = player.config.loop; + Object.defineProperty(player.media, 'loop', { + get: function get() { + return loop; + }, + set: function set(input) { + var toggle = is$1.boolean(input) ? input : player.config.loop.active; + player.embed.setLoop(toggle).then(function () { + loop = toggle; + }); + } + }); // Source + + var currentSrc; + player.embed.getVideoUrl().then(function (value) { + currentSrc = value; + controls.setDownloadUrl.call(player); + }).catch(function (error) { + _this.debug.warn(error); + }); + Object.defineProperty(player.media, 'currentSrc', { + get: function get() { + return currentSrc; + } + }); // Ended + + Object.defineProperty(player.media, 'ended', { + get: function get() { + return player.currentTime === player.duration; + } + }); // Set aspect ratio based on video size + + Promise.all([player.embed.getVideoWidth(), player.embed.getVideoHeight()]).then(function (dimensions) { + var _dimensions = _slicedToArray(dimensions, 2), + width = _dimensions[0], + height = _dimensions[1]; + + player.embed.ratio = [width, height]; + setAspectRatio.call(_this); + }); // Set autopause + + player.embed.setAutopause(player.config.autopause).then(function (state) { + player.config.autopause = state; + }); // Get title + + player.embed.getVideoTitle().then(function (title) { + player.config.title = title; + ui.setTitle.call(_this); + }); // Get current time + + player.embed.getCurrentTime().then(function (value) { + currentTime = value; + triggerEvent.call(player, player.media, 'timeupdate'); + }); // Get duration + + player.embed.getDuration().then(function (value) { + player.media.duration = value; + triggerEvent.call(player, player.media, 'durationchange'); + }); // Get captions + + player.embed.getTextTracks().then(function (tracks) { + player.media.textTracks = tracks; + captions.setup.call(player); + }); + player.embed.on('cuechange', function (_ref) { + var _ref$cues = _ref.cues, + cues = _ref$cues === void 0 ? [] : _ref$cues; + var strippedCues = cues.map(function (cue) { + return stripHTML(cue.text); + }); + captions.updateCues.call(player, strippedCues); + }); + player.embed.on('loaded', function () { + // Assure state and events are updated on autoplay + player.embed.getPaused().then(function (paused) { + assurePlaybackState.call(player, !paused); + + if (!paused) { + triggerEvent.call(player, player.media, 'playing'); + } + }); + + if (is$1.element(player.embed.element) && player.supported.ui) { + var frame = player.embed.element; // Fix keyboard focus issues + // https://github.com/sampotts/plyr/issues/317 + + frame.setAttribute('tabindex', -1); + } + }); + player.embed.on('bufferstart', function () { + triggerEvent.call(player, player.media, 'waiting'); + }); + player.embed.on('bufferend', function () { + triggerEvent.call(player, player.media, 'playing'); + }); + player.embed.on('play', function () { + assurePlaybackState.call(player, true); + triggerEvent.call(player, player.media, 'playing'); + }); + player.embed.on('pause', function () { + assurePlaybackState.call(player, false); + }); + player.embed.on('timeupdate', function (data) { + player.media.seeking = false; + currentTime = data.seconds; + triggerEvent.call(player, player.media, 'timeupdate'); + }); + player.embed.on('progress', function (data) { + player.media.buffered = data.percent; + triggerEvent.call(player, player.media, 'progress'); // Check all loaded + + if (parseInt(data.percent, 10) === 1) { + triggerEvent.call(player, player.media, 'canplaythrough'); + } // Get duration as if we do it before load, it gives an incorrect value + // https://github.com/sampotts/plyr/issues/891 + + + player.embed.getDuration().then(function (value) { + if (value !== player.media.duration) { + player.media.duration = value; + triggerEvent.call(player, player.media, 'durationchange'); + } + }); + }); + player.embed.on('seeked', function () { + player.media.seeking = false; + triggerEvent.call(player, player.media, 'seeked'); + }); + player.embed.on('ended', function () { + player.media.paused = true; + triggerEvent.call(player, player.media, 'ended'); + }); + player.embed.on('error', function (detail) { + player.media.error = detail; + triggerEvent.call(player, player.media, 'error'); + }); // Rebuild UI + + setTimeout(function () { + return ui.build.call(player); + }, 0); + } + }; + + function parseId$1(url) { + if (is$1.empty(url)) { + return null; + } + + var regex = /^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|&v=)([^#&?]*).*/; + return url.match(regex) ? RegExp.$2 : url; + } // Set playback state and trigger change (only on actual change) + + + function assurePlaybackState$1(play) { + if (play && !this.embed.hasPlayed) { + this.embed.hasPlayed = true; + } + + if (this.media.paused === play) { + this.media.paused = !play; + triggerEvent.call(this, this.media, play ? 'play' : 'pause'); + } + } + + function getHost$1(config) { + if (config.noCookie) { + return 'https://www.youtube-nocookie.com'; + } + + if (window.location.protocol === 'http:') { + return 'http://www.youtube.com'; + } // Use YouTube's default + + + return undefined; + } + + var youtube = { + setup: function setup() { + var _this = this; + + // Add embed class for responsive + toggleClass(this.elements.wrapper, this.config.classNames.embed, true); // Setup API + + if (is$1.object(window.YT) && is$1.function(window.YT.Player)) { + youtube.ready.call(this); + } else { + // Reference current global callback + var callback = window.onYouTubeIframeAPIReady; // Set callback to process queue + + window.onYouTubeIframeAPIReady = function () { + // Call global callback if set + if (is$1.function(callback)) { + callback(); + } + + youtube.ready.call(_this); + }; // Load the SDK + + + loadScript(this.config.urls.youtube.sdk).catch(function (error) { + _this.debug.warn('YouTube API failed to load', error); + }); + } + }, + // Get the media title + getTitle: function getTitle(videoId) { + var _this2 = this; + + var url = format(this.config.urls.youtube.api, videoId); + fetch(url).then(function (data) { + if (is$1.object(data)) { + var title = data.title, + height = data.height, + width = data.width; // Set title + + _this2.config.title = title; + ui.setTitle.call(_this2); // Set aspect ratio + + _this2.embed.ratio = [width, height]; + } + + setAspectRatio.call(_this2); + }).catch(function () { + // Set aspect ratio + setAspectRatio.call(_this2); + }); + }, + // API ready + ready: function ready() { + var player = this; // Ignore already setup (race condition) + + var currentId = player.media && player.media.getAttribute('id'); + + if (!is$1.empty(currentId) && currentId.startsWith('youtube-')) { + return; + } // Get the source URL or ID + + + var source = player.media.getAttribute('src'); // Get from
if needed + + if (is$1.empty(source)) { + source = player.media.getAttribute(this.config.attributes.embed.id); + } // Replace the