Compare commits

..

175 Commits

Author SHA1 Message Date
Vencislav Atanasov 7c7661f8b4 Simplify Video.js setup 2024-10-31 22:13:44 +02:00
Vencislav Atanasov 9fc93ec924 Sort halls by ID 2024-10-31 21:24:28 +02:00
Vencislav Atanasov 20701350ba Add gap between the players 2024-10-31 01:22:48 +02:00
Vencislav Atanasov d464a4c181 Add basic CSS for front page stream wrappers 2024-10-31 01:20:18 +02:00
Vencislav Atanasov d2a08c7355 Rework shortcode to use heredoc instead of output buffering 2024-10-31 01:10:15 +02:00
Vencislav Atanasov 5fc953c7ec Fix shortcodes 2024-10-31 00:52:24 +02:00
Vencislav Atanasov 0f493a950f Oops 2024-10-31 00:51:05 +02:00
Vencislav Atanasov 59003fdec7 Add front page players 2024-10-31 00:49:29 +02:00
Vencislav Atanasov d7d02f59d5 Add fluid video.js option 2024-10-31 00:34:15 +02:00
Vencislav Atanasov b5fbe19c7d Delete streaming template 2024-10-31 00:10:04 +02:00
Vencislav Atanasov f78d86d5de Use array_merge instead of array unpacking 2024-10-30 23:59:09 +02:00
Vencislav Atanasov 60835892c0 Add Video.js shortcode 2024-10-30 23:53:59 +02:00
Vencislav Atanasov 42071de21d Add Video.js styles and script if a stream is active 2024-10-30 23:42:23 +02:00
Vencislav Atanasov bb9a257dd5 Move CSS to the stylesheets file 2024-10-30 22:14:56 +02:00
Vencislav Atanasov bd6e489bcb Extract date interval functions, add text if no streams are available 2024-10-30 22:05:30 +02:00
Vencislav Atanasov 1d83107b3a Fix front page style 2024-10-30 21:43:06 +02:00
Vencislav Atanasov 1d7cfbf100 Fix text after event 2024-10-30 21:40:48 +02:00
Vencislav Atanasov 483c563526 Fix array keys 2024-10-30 21:38:20 +02:00
Vencislav Atanasov 2322eb3e66 Extract front page content into a separate file, extract event times into a config file 2024-10-30 21:37:11 +02:00
Vencislav Atanasov b0ea463d53 Add countdown logic 2024-10-25 00:09:41 +03:00
Vencislav Atanasov b28f8909f9 Add padding between the digits 2024-10-24 23:50:09 +03:00
Vencislav Atanasov 823c4276a2 Fix CSS selector 2024-10-24 23:44:57 +03:00
Vencislav Atanasov 3f465a92e6 Add before and after texts to countdown 2024-10-24 23:43:03 +03:00
Vencislav Atanasov 25132d2cc2 Add static version of the countdown 2024-10-24 23:39:28 +03:00
Vencislav Atanasov 9e92868475 Remove unneeded echo 2024-10-24 23:20:34 +03:00
Vencislav Atanasov e94ff0bbea Add border to 2024 logo 2024-10-11 21:00:42 +03:00
Vencislav Atanasov 24e0aa9673 Add gradient to navbar 2024-10-11 20:56:06 +03:00
Vencislav Atanasov 941e672ce2 Delete empty readme.txt 2024-10-11 19:48:25 +03:00
Vencislav Atanasov e8a0f338e2 Remove gradient from 2024 nav bar 2024-10-10 20:44:34 +03:00
Vencislav Atanasov 8f0082debe Fix equal sign and quote style 2024-10-10 20:44:12 +03:00
Vencislav Atanasov f83beafb52 Fix should_show_sidebar() 2024-10-10 20:26:08 +03:00
Vencislav Atanasov c969dd7146 Fix schedule sidebar for workshops in 2024 2024-10-10 20:23:34 +03:00
Vencislav Atanasov bbd885d3ac Fix speaker pictures 2024-10-10 20:07:40 +03:00
Vencislav Atanasov e6d606f832 Add schedule config for 2024 2024-10-10 19:55:20 +03:00
Vencislav Atanasov abddaeff41 Add white background to the 2024 logo 2024-10-10 16:03:11 +03:00
Vencislav Atanasov 8be02b68c8 Add 2024 logo 2024-10-10 00:03:46 +03:00
Vencislav Atanasov 827ad21a33 Add 2024 banner 2024-10-10 00:03:09 +03:00
Vencislav Atanasov 9e4448b363 Add new line and word-joiner in speaker organisation label 2023-10-17 00:54:07 +03:00
Vencislav Atanasov 9f3dc1a1aa Show the organisation of each speaker, if provided 2023-10-17 00:45:48 +03:00
Vencislav Atanasov 8ad92a5fa3 Replace an arrow function with an anonymous one 2023-10-17 00:20:21 +03:00
Vencislav Atanasov 0284c3f460 Load and use the strftime replacement function only if needed 2023-10-17 00:17:55 +03:00
Vencislav Atanasov 7d6ca43395 Fix an edge case in which an event spans over adjacent slots but in different days 2023-10-17 00:00:27 +03:00
Vencislav Atanasov 0eb9145e5a Use more meaningful variable names 2023-10-17 00:00:27 +03:00
Vencislav Atanasov b33da1563f Fix for unset events 2023-10-17 00:00:27 +03:00
Vencislav Atanasov 4b072dc2df Add backwards-compatible strftime polyfill for PHP 8.1+ 2023-10-17 00:00:27 +03:00
Vencislav Atanasov 24d57ee1b5 Replace strftime() with date() 2023-10-17 00:00:27 +03:00
Vencislav Atanasov 43f83c1ca4 Get schedule year from blog slug 2023-10-17 00:00:27 +03:00
Vencislav Atanasov a0b6b4f6d9 Fix for local development 2023-10-17 00:00:27 +03:00
ignisf 08d3cd0423 Fix favicon aspect ratio.... 2023-10-16 23:30:38 +03:00
Ivaylo Markov a69388ebe3 Title fixes 2023-10-16 22:11:24 +03:00
Vencislav Atanasov 6a6a7200ea Add schedule config for 2023 2023-10-16 19:38:46 +03:00
Vencislav Atanasov 395122a411 Change fb_preview filename format to match the other images 2023-09-08 13:35:14 +03:00
Vencislav Atanasov db17984d05 Extract blog_slug detection to a new function 2023-09-08 13:31:19 +03:00
Vencislav Atanasov 6a27f51189 Fix blog_slug not being global 2023-09-08 13:20:44 +03:00
Vencislav Atanasov aa75f2f60f Implement automatic OpenGraph tags population 2023-09-08 13:17:11 +03:00
Vencislav Atanasov 4231dab898 Apply additional CSS from wp-admin 2023-09-08 13:04:50 +03:00
Iliyan Georgiev e2ea6b866f 2023: new fb preview 2023-09-07 20:28:40 +03:00
ignisf 62609b2143 Add FB banner for 2023 2023-09-04 19:56:35 +03:00
Vencislav Atanasov 6a3b7e73ad 2023 logo position 2023-09-02 23:39:59 +03:00
Vencislav Atanasov f9f94e106d Fix 2023 header again 2023-09-02 23:31:37 +03:00
Vencislav Atanasov 6952ef4277 Fix 2023 header 2023-09-02 23:28:38 +03:00
Vencislav Atanasov b8e90fd396 Replace 2023 image 2023-09-02 23:16:23 +03:00
Vencislav Atanasov 1f29fce402 Fix CSS 2023-09-02 23:15:07 +03:00
Vencislav Atanasov 47cf98cb62 Fix quotes 2023-09-02 23:11:46 +03:00
Vencislav Atanasov 9e31f24f69 Add header customisation for 2023 2023-09-02 23:09:36 +03:00
Vencislav Atanasov 1b355bd48f Add 2023 images 2023-09-02 22:55:03 +03:00
Ivaylo Markov fe28caadda streaming: remove chat for 2022 2022-10-16 15:23:15 +03:00
Vasil Kolev 4fa533919d schedule: fix XSS, reported by Hetti 2022-10-16 15:23:01 +03:00
Vasil Kolev dadf30c8ae streaming: default for 2022 is hall-a 2022-10-13 13:53:04 +03:00
Vasil Kolev c5d9daa758 parse.php: HOW THE HELL DID THAT WORK EVER 2022-09-29 15:35:55 +03:00
Ivan Popjelev 2e1323bb6a Improve displaying of sponsors logos. 2022-09-29 15:31:38 +03:00
Vasil Kolev 6c785d30e4 2022 images 2022-09-29 15:31:37 +03:00
Vasil Kolev b129823bf6 config: add 2022 2022-09-29 15:31:37 +03:00
Vasil Kolev 0e7d96a965 streaming: updated to have chat 2022-09-29 15:31:37 +03:00
Vasil Kolev 4b2c31c775 2021 hacks 2022-09-29 15:31:37 +03:00
Vasil Kolev f2b7e6f278 2022: new fb preview 2022-09-29 15:31:37 +03:00
Vasil Kolev 3d1d95c759 Change sponsor items formatting. 2022-09-29 15:31:37 +03:00
Vasil Kolev ab3f19d552 2022 temporary images 2022-09-29 15:31:37 +03:00
Vasil Kolev 1e06de42bc schedule: fix id of misc track 2022-09-29 15:31:37 +03:00
Vasil Kolev cfe9b21b82 schedule: fix for transposition to work 2021-07-27 22:12:26 +03:00
Vasil Kolev 5821861655 front-page: remove old unused code 2021-07-21 19:16:57 +03:00
Vasil Kolev 6d293220ec add about event on top 2021-07-21 19:16:44 +03:00
Vasil Kolev d4286f4688 switch the news to be in a single column 2021-07-21 19:15:51 +03:00
Vasil Kolev 4d158f28e4 2021: for mobiles, show logo centered on top 2021-07-21 18:46:02 +03:00
Vasil Kolev 8c2d6fcfa3 2021: rm author/publication date from post 2021-07-21 18:29:58 +03:00
Vasil Kolev 0b11777948 2021: rm comments-are-disabled 2021-07-21 18:29:00 +03:00
Vasil Kolev a231a3c8c1 2021: rm poster name and date 2021-07-21 18:24:29 +03:00
Ivaylo Markov ba2d4d96ad 2021: updates 2021-07-21 17:46:18 +03:00
Ivaylo Markov e9859e3937 Design update for 2021 2021-07-08 21:22:00 +03:00
Ivaylo Markov 81f5de7db8 Add Streaming page submenu 2020-11-07 19:25:54 +02:00
Ivaylo Markov a4f8e714b8 Don't display hidden language tracks in legend 2020-11-05 23:00:18 +02:00
Ivaylo Markov 9da34728cc Auto-update iCalendar link; remove Google Calendar 2020-10-31 10:39:42 +02:00
Ivaylo Markov 90d896cfe2 Add workaround for wrong FB/Twitter preview image 2020-10-31 10:34:37 +02:00
Ivaylo Markov 711f550c16 Use conference ID when linking Clarion iCalendar 2020-10-29 18:30:34 +02:00
Ivaylo Markov 84837482e2 Add schedule config for 2020 2020-10-26 22:33:50 +02:00
Ivaylo Markov afeb62845f Allow shortcodes in excerpts for BBB forms 2020-10-25 18:06:26 +02:00
Ivaylo Markov 618d65e659 Add some docs on updating the design. 2020-09-30 21:10:41 +03:00
Ivaylo Markov c9c7318578 Add the real 2020 images 2020-09-30 19:40:51 +03:00
Ivaylo Markov 88b00c586e Add 2020 temporary English banner 2020-09-05 22:47:21 +03:00
Ivaylo Markov d0fcf7eb8a Misc. 2020 tweaks 2020-09-05 11:38:33 +03:00
Ivaylo Markov 638fa0235c Add temporary 2020 design 2020-09-05 11:37:36 +03:00
Vasil Kolev 0834c196fe schedule: do not repeat multi-slot talks 2019-11-01 08:28:12 +02:00
Vasil Kolev 09bbd6adc6 calendar: temporary hack 2019-10-31 22:33:41 +02:00
Vasil Kolev 23ef4e25ed functions: add rss links in header 2019-06-18 15:33:32 +03:00
Vasil Kolev bcf09ae4b0 css: make the logo to be always on top 2019-06-18 15:16:42 +03:00
Vasil Kolev c62d86f41b 2019: add proper bg/en overlays 2019-06-18 15:16:20 +03:00
Vasil Kolev 6f65da3260 theme: add most stuff for 2019 2019-06-17 19:42:48 +03:00
Vasil Kolev 88e49db34e schedule config: add 2019 2019-06-09 15:12:19 +03:00
Vasil Kolev 0e6b47259c schedule: more visible (and translated) feedback link, shown after the event 2018-11-07 17:18:46 +02:00
Vasil Kolev f534221de0 schedule: do not show misc in fulltalk list 2018-10-16 13:08:18 +03:00
Vasil Kolev 76b46316f9 schedule: add support for full schedule 2018-10-16 13:07:52 +03:00
Vasil Kolev 18ac2789f7 schedule/config: add 2018 2018-10-16 13:07:10 +03:00
Vasil Kolev ac3a19bf73 schedule: display TBA on missing data 2018-09-11 17:08:39 +03:00
Vasil Kolev bd9e467ac7 2018 images 2018-09-11 17:08:20 +03:00
Vasil Kolev 80a1dee4b0 shortcode_attrs got changed in this version 2018-05-23 23:01:48 +03:00
Vasil Kolev 2bb875d771 add feedback link 2017-11-04 12:05:44 +02:00
Vasil Kolev 136ebf38b9 2017 changes 2017-10-25 19:06:57 +03:00
Vasil Kolev 6ad6a010b8 make the logo year-specific 2017-10-25 19:06:24 +03:00
Vasil Kolev ce7bbcbbbe don't take slots from other rooms that have nothing to do with us 2017-10-20 01:28:13 +03:00
Vasil Kolev 3e5047028f get language from wp 2017-10-20 01:27:49 +03:00
Vasil Kolev ec35c444e4 missed fetching the right language string 2017-10-20 01:01:37 +03:00
Vasil Kolev e8ab9df36f add hidden track 2017-10-20 00:56:43 +03:00
Vasil Kolev 1501e54165 updated banners 2017-10-20 00:56:21 +03:00
Vasil Kolev 08bbce3e67 streaming page 2017-08-07 11:12:05 +03:00
Vasil Kolev 0f15f6c48b interlude 2017-08-07 11:11:45 +03:00
Vasil Kolev d6b2532b24 images for 2017 2017-08-07 11:11:27 +03:00
Vasil Kolev 9d27521459 config form 2017 2017-08-07 11:10:59 +03:00
Vasil Kolev 6f913742dd update from last year 2017-08-07 11:10:32 +03:00
Vasil Kolev 4d9a3dc27a update readme 2016-10-24 22:05:03 +03:00
Vasil Kolev cd87efd6e8 parse the year properly, restore a simplified schedule-config 2016-10-24 16:22:25 +03:00
Vasil Kolev dd8e76cb76 move this to the new model schedule 2016-10-24 16:04:13 +03:00
Vasil Kolev 2cb42a34db rm unused files 2016-10-24 01:08:52 +03:00
Vasil Kolev 96eea92ebb rm unused files 2016-10-24 01:08:11 +03:00
Vasil Kolev 49e25053e0 use the new style program 2016-10-24 01:07:26 +03:00
Vasil Kolev dbbdb20b61 fix table style 2016-10-24 01:06:43 +03:00
Openfest 4225e2f191 Merge branch 'schedule-rewrite' of https://github.com/user890104/initfest into user890104-schedule-rewrite 2016-10-24 00:51:18 +03:00
Vencislav Atanasov af0f5020ec Merge branch 'master' of https://github.com/initLab/initfest into schedule-rewrite
# Conflicts:
#	schedule/load.php
2016-10-24 00:46:48 +03:00
Vasil Kolev f4daf0c5ba merge 2016-10-24 00:43:48 +03:00
Openfest 6aac03d5fb last mods 2016-10-24 00:35:05 +03:00
Vencislav Atanasov 46d9f93ac3 Fix filtering by event type 2016-10-24 00:34:15 +03:00
Vencislav Atanasov 48a0fa9c5f Remove unused variables, add filter by event type, rewrite CSS class generation 2016-10-24 00:16:00 +03:00
Vencislav Atanasov a807406eb0 Rename variables, add vertical merging of slots 2016-10-23 23:16:13 +03:00
Vencislav Atanasov e18f6d1eb7 Enable horizontal merging of slots 2016-10-23 00:44:27 +03:00
Vencislav Atanasov 06080c6249 Use the proper styles 2016-10-22 19:09:03 +03:00
Vencislav Atanasov 69058e8fab Merge event slots horizontally 2016-10-22 17:22:04 +03:00
Vencislav Atanasov 3b74bc0053 Fix rendering of schedule for 2015 2016-10-22 03:30:31 +03:00
Vencislav Atanasov da5810e68b [WIP] Properly format the schedule, fix minor bugs/whitespace 2016-10-22 03:23:29 +03:00
Vencislav Atanasov 439d778f15 Add support for showing different conferences (2014-2016), simplify some of the HTML code generation 2016-10-19 21:49:50 +03:00
Vencislav Atanasov 0857039fc5 Split code to functions, add basic config 2016-10-16 21:50:09 +03:00
Vencislav Atanasov ca4f0e0f73 Filter allowed hall ids 2016-10-16 21:13:25 +03:00
Vencislav Atanasov 33ecff552c Add legend, fix issues with the locale 2016-10-16 21:01:19 +03:00
Vencislav Atanasov bdd3caa101 Increate cut length from 50 to 70, use multibyte strlen 2016-10-16 20:46:27 +03:00
Vencislav Atanasov 117c405747 Fix closing tags, add placeholder for speaker URL 2016-10-16 20:43:36 +03:00
Vencislav Atanasov 159cd14a5e Fix html of the test page 2016-10-16 20:30:50 +03:00
Vencislav Atanasov 4eddfb2d5a Skip slots without matching event ID 2016-10-16 20:23:37 +03:00
Vencislav Atanasov 25379fab15 Add gitignore for cache 2016-10-16 20:03:05 +03:00
Vencislav Atanasov b6b02e48b0 Revert to the initial version of schedule 2016-10-16 19:47:05 +03:00
Vasil Kolev 581962c4b6 one more check 2016-10-16 00:03:36 +03:00
Vasil Kolev d69b2b7b14 halls for 2016 2016-10-16 00:02:51 +03:00
Vasil Kolev 772ec30e0f update css as per Lyubo1's suggestion 2016-07-05 14:48:32 +03:00
Vasil Kolev df3138a09e add new program conifg, tba label 2016-07-05 14:47:12 +03:00
Vasil Kolev 2ed2a73af4 fix banner style 2016-07-05 14:46:47 +03:00
Vasil Kolev f8c1de2542 fix banner style 2016-07-05 14:08:18 +03:00
Vasil Kolev 501186204b set the banner background to be switched with the year, too, add banners for 2016 2016-07-03 14:10:04 +03:00
Vasil Kolev 43b49895e5 survive if clarion is down 2016-03-31 22:13:29 +03:00
Vencislav Atanasov dc7b3b5e92 Merge pull request #30 from user890104/master
Hide stream player on homepage
2015-11-17 23:52:51 +02:00
Vencislav Atanasov 2db122c92a hide stream player on homepage 2015-11-17 23:50:33 +02:00
Vencislav Atanasov e9783ec7e6 Merge pull request #3 from initLab/master
sync with upstream
2015-11-17 23:49:32 +02:00
Vasil Kolev 22058ca66c Merge pull request #29 from qweqq/stream-player
Добавен видео плейър на началната страница
2015-11-07 08:28:44 +02:00
Vasil Kolev 1ba2eccbe4 Merge pull request #28 from qweqq/master
Разширяване на менюто за да може да побере Streaming бутон
2015-11-07 08:28:27 +02:00
Hristo Stefanov ea461fd09a Added missing translation 2015-11-07 06:11:30 +02:00
Hristo Stefanov 6ea910cd53 fixed escaping of strings when passed from php to javascript 2015-11-07 05:50:46 +02:00
Hristo Stefanov 2154e74d96 Added player for the video streams on the front page 2015-11-07 05:31:22 +02:00
Hristo Stefanov 60f84fa16c Thanks to @herince - fixes menu bar when Streaming button is added (it's more wide now when possible) 2015-11-07 05:19:12 +02:00
Vasil Kolev fdaf2752b7 Merge pull request #27 from initLab/uptading-header
Updating the header images
2015-11-04 18:02:44 +02:00
79 changed files with 1619 additions and 1096 deletions

View File

@ -107,33 +107,21 @@ todo: да се добави и url към някакъв homepage, като с
## Комуникация с clarion ## Комуникация с clarion
Има няколко скрипта, които наливат информацията от clarion в текущия сайт, и един който директно я връща на потребителите. Всички си говорят с clarion през връзка до базада му, създадена от dbconn.php в initfest (в repo-то има dbconn.dist.pp, като пример какво трябва да има във файла). Clarion ни предоставя JSON интерфейс с всичките неща, от които се генерира програмата.
/calendar2014.php директно говори с базата данни на clarion и подава на потребителите в ICS формат календар с програмата, който могат да използват в каквито приложения се поддържат. Данните се дърпат чрез smartCurl (който и кешира данните) и от тях се генерират програмата на сайта и списъкът с лекторите.
Скриптовете в initfest/ темата (сложени там поради липса на по-приятно място) се базират на малко заимстван код за cli wordpress скриптове (може да се види в cli-header.php) и са следните:
* load-program-old.php - генерира програмата и я зарежда в стария вид (като стария сайт)
* load-program.php - генерира програмата и я зарежда в новия и вид.
* load-speakers.php - изтрива всички съществуващи лектори и ги създава наново, в двата езика и със снимките им.
Скриптовете, които генерират програмата правят #href link-ове към страницата с лекторите, за да работят линковете. href-овете са наименувани като името на лектора. Скриптовете, които генерират програмата правят #href link-ове към страницата с лекторите, за да работят линковете. href-овете са наименувани като името на лектора.
### load-program.php ### schedule-config.php
В този скрипт има няколко hardcode-нати неща, които в някой момент трябва да се изчистят: За да се избере какво да се визуализира, се ползва schedule-config.php, който от своя страна се зарежда от page-schedule.php и page-speakers.php.
* map м/у id-тата на потоците и стиловете им в css-а Има два елемента, които се вадят от името на сайта/страницата - дали става въпрос за лекции или workshop-и, и за коя година става въпрос. На база на тях getSchedConfig() в schedule/config.php избира кое е id-то на конференцията и кой тип са лекциите и workshop-ите.
* преводи на разни string-ове
* id-та на статиите, в които се пише програмата (това може да се реши по-лесно с custom field и да се маркират някъде, а скрипта да ги търси)
* url-тата на страниците с лекторите (това също трябва да има по-чист начин)
* Също така би било хубаво да може да се извади някаква част от template-ите и да се избегне повторението за българския и английския на някакви части от кода
### load-speakers.php ### Генериране на външния вид на таблицата
В скрипта има hardcode-нато предположение къде се намират снимките на лекторите в clarion-а. Скриптът създава post-овете, добавя им нужните custom field-ове (за момента github, twitter и public email), слага ги за различните езици и ги връзва. Черна магия, Slackware трябва да го опише.
todo: Скриптът зарежда два пъти снимката на лектора, веднъж за българския, веднъж за английския post, което трябва да може да се избегне.
## functions.php ## functions.php
@ -142,3 +130,22 @@ todo: Скриптът зарежда два пъти снимката на ле
* openfest_home_page() - връща дали е главната страница, поради един проблем, създаден от polylang, заради който is_front_page() не работеше. * openfest_home_page() - връща дали е главната страница, поради един проблем, създаден от polylang, заради който is_front_page() не работеше.
* of_get_lang(), е_() - wrapper-и около polylang, ако липсва plugin-а. * of_get_lang(), е_() - wrapper-и около polylang, ако липсва plugin-а.
* pn_get_attachment_id_from_url - отмъкната функция, която намира id на attachment от url, трябва при зареждането на снимките на лекторите. * pn_get_attachment_id_from_url - отмъкната функция, която намира id на attachment от url, трябва при зареждането на снимките на лекторите.
## Създаване на сайт за ново издание на събитието
Клонира се последният сайт с помощта на NS Cloner plugin-а от главния админ панел на сайта. За slug на сайта е редно да се използва годината на предстоящото събитие, тъй като това ще бъде "ключ" за графичните елементи (виж по-долу).
Статусът на всички публикации се слага на "Чернова", за да не се виждат в сайта, но да могат при нужда да се използват за шаблони.
В **Languages -> Strings translations** трябва да се обнови информация като име и описание на събитието, дати и местоположение на залата.
За да излезе новият сайт на началната страница, maniax трябва да направи някаква магия в базата, тъй като redirect плъгинът е счупен.
### Обновяване на визията
Всяка година се променя визията на сайта. Ако няма намеса в layout-а, е достатъчно да бъдат добавени следните картинки (със съответната година в името):
* `banner-back-2020.jpg` - фон за шапката на сайта
* `banner-bg-2020.png` - надпис на български в/у горния с името на събитието, дати и място
* `banner-en-2020.png` - като горния надпис, но на английски
* `logo-2020.png` - лого на събитието
* `navbg-2020.png` - фон за менюто в най-горната част на сайта. Обикновено е градиент от бяло към основния цвят.

16
config-events.php Normal file
View File

@ -0,0 +1,16 @@
<?php
$eventsConfig = [
'2024' => [
'startTime' => '2024-11-02 09:45:00',
'endTime' => '2024-11-03 18:15:00',
'streams' => [[
'startTime' => '2024-11-02 09:45:00',
'endTime' => '2024-11-02 19:00:00',
'tracks' => ['hall-a', 'hall-b'],
], [
'startTime' => '2024-11-03 09:45:00',
'endTime' => '2024-11-03 18:15:00',
'tracks' => ['hall-a', 'hall-b'],
]],
],
];

View File

@ -3,7 +3,7 @@
font-family: 'Arimo'; font-family: 'Arimo';
font-style: normal; font-style: normal;
font-weight: 400; font-weight: 400;
src: local('Arimo'), url(http://fonts.gstatic.com/s/arimo/v8/an78_18DAUCSU6a4qacRuA.woff2) format('woff2'); src: local('Arimo'), url(//fonts.gstatic.com/s/arimo/v8/an78_18DAUCSU6a4qacRuA.woff2) format('woff2');
unicode-range: U+0460-052F, U+20B4, U+2DE0-2DFF, U+A640-A69F; unicode-range: U+0460-052F, U+20B4, U+2DE0-2DFF, U+A640-A69F;
} }
/* cyrillic */ /* cyrillic */
@ -11,7 +11,7 @@
font-family: 'Arimo'; font-family: 'Arimo';
font-style: normal; font-style: normal;
font-weight: 400; font-weight: 400;
src: local('Arimo'), url(http://fonts.gstatic.com/s/arimo/v8/4NN7UQ_VsRBn7NDD9HKUPw.woff2) format('woff2'); src: local('Arimo'), url(//fonts.gstatic.com/s/arimo/v8/4NN7UQ_VsRBn7NDD9HKUPw.woff2) format('woff2');
unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
} }
/* greek-ext */ /* greek-ext */
@ -19,7 +19,7 @@
font-family: 'Arimo'; font-family: 'Arimo';
font-style: normal; font-style: normal;
font-weight: 400; font-weight: 400;
src: local('Arimo'), url(http://fonts.gstatic.com/s/arimo/v8/ye-fuRt_0mKrPeIp6Mwa8A.woff2) format('woff2'); src: local('Arimo'), url(//fonts.gstatic.com/s/arimo/v8/ye-fuRt_0mKrPeIp6Mwa8A.woff2) format('woff2');
unicode-range: U+1F00-1FFF; unicode-range: U+1F00-1FFF;
} }
/* greek */ /* greek */
@ -27,7 +27,7 @@
font-family: 'Arimo'; font-family: 'Arimo';
font-style: normal; font-style: normal;
font-weight: 400; font-weight: 400;
src: local('Arimo'), url(http://fonts.gstatic.com/s/arimo/v8/VF6T-UwCT6WyIiUKP6AykQ.woff2) format('woff2'); src: local('Arimo'), url(//fonts.gstatic.com/s/arimo/v8/VF6T-UwCT6WyIiUKP6AykQ.woff2) format('woff2');
unicode-range: U+0370-03FF; unicode-range: U+0370-03FF;
} }
/* vietnamese */ /* vietnamese */
@ -35,7 +35,7 @@
font-family: 'Arimo'; font-family: 'Arimo';
font-style: normal; font-style: normal;
font-weight: 400; font-weight: 400;
src: local('Arimo'), url(http://fonts.gstatic.com/s/arimo/v8/eSHy7hCA8QR4qTF-59v60g.woff2) format('woff2'); src: local('Arimo'), url(//fonts.gstatic.com/s/arimo/v8/eSHy7hCA8QR4qTF-59v60g.woff2) format('woff2');
unicode-range: U+0102-0103, U+1EA0-1EF1, U+20AB; unicode-range: U+0102-0103, U+1EA0-1EF1, U+20AB;
} }
/* latin-ext */ /* latin-ext */
@ -43,7 +43,7 @@
font-family: 'Arimo'; font-family: 'Arimo';
font-style: normal; font-style: normal;
font-weight: 400; font-weight: 400;
src: local('Arimo'), url(http://fonts.gstatic.com/s/arimo/v8/V41d6938Z8eBLYL302F8Ig.woff2) format('woff2'); src: local('Arimo'), url(//fonts.gstatic.com/s/arimo/v8/V41d6938Z8eBLYL302F8Ig.woff2) format('woff2');
unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF; unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF;
} }
/* latin */ /* latin */
@ -51,7 +51,7 @@
font-family: 'Arimo'; font-family: 'Arimo';
font-style: normal; font-style: normal;
font-weight: 400; font-weight: 400;
src: local('Arimo'), url(http://fonts.gstatic.com/s/arimo/v8/chnpHRvNNCWcZBKRQ4gVug.woff2) format('woff2'); src: local('Arimo'), url(//fonts.gstatic.com/s/arimo/v8/chnpHRvNNCWcZBKRQ4gVug.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000; unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000;
} }
/* cyrillic-ext */ /* cyrillic-ext */
@ -59,7 +59,7 @@
font-family: 'Arimo'; font-family: 'Arimo';
font-style: normal; font-style: normal;
font-weight: 700; font-weight: 700;
src: local('Arimo Bold'), local('Arimo-Bold'), url(http://fonts.gstatic.com/s/arimo/v8/ar6XjGD_YvbpY9XD5YxKTBTbgVql8nDJpwnrE27mub0.woff2) format('woff2'); src: local('Arimo Bold'), local('Arimo-Bold'), url(//fonts.gstatic.com/s/arimo/v8/ar6XjGD_YvbpY9XD5YxKTBTbgVql8nDJpwnrE27mub0.woff2) format('woff2');
unicode-range: U+0460-052F, U+20B4, U+2DE0-2DFF, U+A640-A69F; unicode-range: U+0460-052F, U+20B4, U+2DE0-2DFF, U+A640-A69F;
} }
/* cyrillic */ /* cyrillic */
@ -67,7 +67,7 @@
font-family: 'Arimo'; font-family: 'Arimo';
font-style: normal; font-style: normal;
font-weight: 700; font-weight: 700;
src: local('Arimo Bold'), local('Arimo-Bold'), url(http://fonts.gstatic.com/s/arimo/v8/XzFO_hPcAZmADxw_2htokBTbgVql8nDJpwnrE27mub0.woff2) format('woff2'); src: local('Arimo Bold'), local('Arimo-Bold'), url(//fonts.gstatic.com/s/arimo/v8/XzFO_hPcAZmADxw_2htokBTbgVql8nDJpwnrE27mub0.woff2) format('woff2');
unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
} }
/* greek-ext */ /* greek-ext */
@ -75,7 +75,7 @@
font-family: 'Arimo'; font-family: 'Arimo';
font-style: normal; font-style: normal;
font-weight: 700; font-weight: 700;
src: local('Arimo Bold'), local('Arimo-Bold'), url(http://fonts.gstatic.com/s/arimo/v8/Tq4Zh2K0uru54pu6hyua9BTbgVql8nDJpwnrE27mub0.woff2) format('woff2'); src: local('Arimo Bold'), local('Arimo-Bold'), url(//fonts.gstatic.com/s/arimo/v8/Tq4Zh2K0uru54pu6hyua9BTbgVql8nDJpwnrE27mub0.woff2) format('woff2');
unicode-range: U+1F00-1FFF; unicode-range: U+1F00-1FFF;
} }
/* greek */ /* greek */
@ -83,7 +83,7 @@
font-family: 'Arimo'; font-family: 'Arimo';
font-style: normal; font-style: normal;
font-weight: 700; font-weight: 700;
src: local('Arimo Bold'), local('Arimo-Bold'), url(http://fonts.gstatic.com/s/arimo/v8/gRIQMcBGUlcKSvTGaO9yHBTbgVql8nDJpwnrE27mub0.woff2) format('woff2'); src: local('Arimo Bold'), local('Arimo-Bold'), url(//fonts.gstatic.com/s/arimo/v8/gRIQMcBGUlcKSvTGaO9yHBTbgVql8nDJpwnrE27mub0.woff2) format('woff2');
unicode-range: U+0370-03FF; unicode-range: U+0370-03FF;
} }
/* vietnamese */ /* vietnamese */
@ -91,7 +91,7 @@
font-family: 'Arimo'; font-family: 'Arimo';
font-style: normal; font-style: normal;
font-weight: 700; font-weight: 700;
src: local('Arimo Bold'), local('Arimo-Bold'), url(http://fonts.gstatic.com/s/arimo/v8/u0Tw4Txbkc9Av4uzN1j1aBTbgVql8nDJpwnrE27mub0.woff2) format('woff2'); src: local('Arimo Bold'), local('Arimo-Bold'), url(//fonts.gstatic.com/s/arimo/v8/u0Tw4Txbkc9Av4uzN1j1aBTbgVql8nDJpwnrE27mub0.woff2) format('woff2');
unicode-range: U+0102-0103, U+1EA0-1EF1, U+20AB; unicode-range: U+0102-0103, U+1EA0-1EF1, U+20AB;
} }
/* latin-ext */ /* latin-ext */
@ -99,7 +99,7 @@
font-family: 'Arimo'; font-family: 'Arimo';
font-style: normal; font-style: normal;
font-weight: 700; font-weight: 700;
src: local('Arimo Bold'), local('Arimo-Bold'), url(http://fonts.gstatic.com/s/arimo/v8/XCmwOdi6K62tkWaszbVGURTbgVql8nDJpwnrE27mub0.woff2) format('woff2'); src: local('Arimo Bold'), local('Arimo-Bold'), url(//fonts.gstatic.com/s/arimo/v8/XCmwOdi6K62tkWaszbVGURTbgVql8nDJpwnrE27mub0.woff2) format('woff2');
unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF; unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF;
} }
/* latin */ /* latin */
@ -107,7 +107,7 @@
font-family: 'Arimo'; font-family: 'Arimo';
font-style: normal; font-style: normal;
font-weight: 700; font-weight: 700;
src: local('Arimo Bold'), local('Arimo-Bold'), url(http://fonts.gstatic.com/s/arimo/v8/27rE5lMk9EHpLbxiIuGd0BTbgVql8nDJpwnrE27mub0.woff2) format('woff2'); src: local('Arimo Bold'), local('Arimo-Bold'), url(//fonts.gstatic.com/s/arimo/v8/27rE5lMk9EHpLbxiIuGd0BTbgVql8nDJpwnrE27mub0.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000; unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000;
} }
/* cyrillic-ext */ /* cyrillic-ext */
@ -115,7 +115,7 @@
font-family: 'Arimo'; font-family: 'Arimo';
font-style: italic; font-style: italic;
font-weight: 400; font-weight: 400;
src: local('Arimo Italic'), local('Arimo-Italic'), url(http://fonts.gstatic.com/s/arimo/v8/-lqiBwxkYHykb59Lvn7rk_Y6323mHUZFJMgTvxaG2iE.woff2) format('woff2'); src: local('Arimo Italic'), local('Arimo-Italic'), url(//fonts.gstatic.com/s/arimo/v8/-lqiBwxkYHykb59Lvn7rk_Y6323mHUZFJMgTvxaG2iE.woff2) format('woff2');
unicode-range: U+0460-052F, U+20B4, U+2DE0-2DFF, U+A640-A69F; unicode-range: U+0460-052F, U+20B4, U+2DE0-2DFF, U+A640-A69F;
} }
/* cyrillic */ /* cyrillic */
@ -123,7 +123,7 @@
font-family: 'Arimo'; font-family: 'Arimo';
font-style: italic; font-style: italic;
font-weight: 400; font-weight: 400;
src: local('Arimo Italic'), local('Arimo-Italic'), url(http://fonts.gstatic.com/s/arimo/v8/tvCMF1Qlf0MEvcc7JEzrhfY6323mHUZFJMgTvxaG2iE.woff2) format('woff2'); src: local('Arimo Italic'), local('Arimo-Italic'), url(//fonts.gstatic.com/s/arimo/v8/tvCMF1Qlf0MEvcc7JEzrhfY6323mHUZFJMgTvxaG2iE.woff2) format('woff2');
unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
} }
/* greek-ext */ /* greek-ext */
@ -131,7 +131,7 @@
font-family: 'Arimo'; font-family: 'Arimo';
font-style: italic; font-style: italic;
font-weight: 400; font-weight: 400;
src: local('Arimo Italic'), local('Arimo-Italic'), url(http://fonts.gstatic.com/s/arimo/v8/aKQL0kir7sjNM0_YzHc9yvY6323mHUZFJMgTvxaG2iE.woff2) format('woff2'); src: local('Arimo Italic'), local('Arimo-Italic'), url(//fonts.gstatic.com/s/arimo/v8/aKQL0kir7sjNM0_YzHc9yvY6323mHUZFJMgTvxaG2iE.woff2) format('woff2');
unicode-range: U+1F00-1FFF; unicode-range: U+1F00-1FFF;
} }
/* greek */ /* greek */
@ -139,7 +139,7 @@
font-family: 'Arimo'; font-family: 'Arimo';
font-style: italic; font-style: italic;
font-weight: 400; font-weight: 400;
src: local('Arimo Italic'), local('Arimo-Italic'), url(http://fonts.gstatic.com/s/arimo/v8/c6Ldt38oFMowvdIZIi9CaPY6323mHUZFJMgTvxaG2iE.woff2) format('woff2'); src: local('Arimo Italic'), local('Arimo-Italic'), url(//fonts.gstatic.com/s/arimo/v8/c6Ldt38oFMowvdIZIi9CaPY6323mHUZFJMgTvxaG2iE.woff2) format('woff2');
unicode-range: U+0370-03FF; unicode-range: U+0370-03FF;
} }
/* vietnamese */ /* vietnamese */
@ -147,7 +147,7 @@
font-family: 'Arimo'; font-family: 'Arimo';
font-style: italic; font-style: italic;
font-weight: 400; font-weight: 400;
src: local('Arimo Italic'), local('Arimo-Italic'), url(http://fonts.gstatic.com/s/arimo/v8/Phj51JGRBuPcxq7i7-qcHPY6323mHUZFJMgTvxaG2iE.woff2) format('woff2'); src: local('Arimo Italic'), local('Arimo-Italic'), url(//fonts.gstatic.com/s/arimo/v8/Phj51JGRBuPcxq7i7-qcHPY6323mHUZFJMgTvxaG2iE.woff2) format('woff2');
unicode-range: U+0102-0103, U+1EA0-1EF1, U+20AB; unicode-range: U+0102-0103, U+1EA0-1EF1, U+20AB;
} }
/* latin-ext */ /* latin-ext */
@ -155,7 +155,7 @@
font-family: 'Arimo'; font-family: 'Arimo';
font-style: italic; font-style: italic;
font-weight: 400; font-weight: 400;
src: local('Arimo Italic'), local('Arimo-Italic'), url(http://fonts.gstatic.com/s/arimo/v8/-CSRdP_Aes2aBSIDGwIm6vY6323mHUZFJMgTvxaG2iE.woff2) format('woff2'); src: local('Arimo Italic'), local('Arimo-Italic'), url(//fonts.gstatic.com/s/arimo/v8/-CSRdP_Aes2aBSIDGwIm6vY6323mHUZFJMgTvxaG2iE.woff2) format('woff2');
unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF; unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF;
} }
/* latin */ /* latin */
@ -163,7 +163,7 @@
font-family: 'Arimo'; font-family: 'Arimo';
font-style: italic; font-style: italic;
font-weight: 400; font-weight: 400;
src: local('Arimo Italic'), local('Arimo-Italic'), url(http://fonts.gstatic.com/s/arimo/v8/W9ndJDdcIndrj-dqFXLbVvY6323mHUZFJMgTvxaG2iE.woff2) format('woff2'); src: local('Arimo Italic'), local('Arimo-Italic'), url(//fonts.gstatic.com/s/arimo/v8/W9ndJDdcIndrj-dqFXLbVvY6323mHUZFJMgTvxaG2iE.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000; unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000;
} }
@ -228,7 +228,7 @@ h3 small {
/* Navigation */ /* Navigation */
nav { nav {
position: relative; position: relative;
height: 84px; height: 81px;
background: url("../img/navbg.jpg") repeat-x; background: url("../img/navbg.jpg") repeat-x;
} }
nav ul { nav ul {
@ -276,6 +276,10 @@ nav .menu > li:hover {
text-indent: -9999px; text-indent: -9999px;
} }
nav > .content {
max-width: 1080px;
}
nav ul a { nav ul a {
color: #000; color: #000;
text-decoration: none; text-decoration: none;
@ -317,13 +321,18 @@ nav .logo {
position: absolute; position: absolute;
top: 0; top: 0;
left: 0; left: 0;
z-index: 99 !important;
} }
nav .selected { nav .selected {
font-weight: bold; font-weight: bold;
} }
@media all and (max-width: 840px) { @media all and (max-width: 840px) {
nav .logo { nav .logo {
display: none; display: block;
position: relative;
width: 110px;
height: 94px;
margin: 0 auto 15px;
} }
nav .logo img { nav .logo img {
display: block; display: block;
@ -397,7 +406,6 @@ nav .selected {
padding: 0 0 0 1em; padding: 0 0 0 1em;
} }
.grid .col3 { .grid .col3 {
width: 33%;
float: left; float: left;
-webkit-box-sizing: border-box; -webkit-box-sizing: border-box;
-moz-box-sizing: border-box; -moz-box-sizing: border-box;
@ -594,10 +602,49 @@ footer .content li a {
display: inline-block; display: inline-block;
margin: 0 0 2em 0; margin: 0 0 2em 0;
} }
.sponsors-item .tac a {
display: inline-block;
width: 15em;
height: 9em;
line-height: 9em;
margin-bottom: 0.5em;
}
.sponsors-item .tac a img {
width: auto;
height: auto;
max-width: calc(15em - 0.6em); /* width - (left+right padding) */
max-height: calc(9em - 0.6em);
padding: 0.3em;
vertical-align: middle;
}
.sponsors-item .tac p {
text-align: justify;
}
.sponsors-frontpage {
text-align: center;
}
.sponsors-frontpage h3,
.sponsors-frontpage .content {
text-align: left;
}
.sponsors-frontpage a { .sponsors-frontpage a {
display: inline-block; display: inline-block;
padding: 0 2.2em 1em 0; padding: 0;
margin: 0.3em;
width: calc(15em - 0.6em - 2px); /* width - (left+right margin) - (left+right border) */
height: calc(9em - 0.6em - 2px);
line-height: calc(9em - 0.6em - 2px);
border: solid 1px #DBDBDB;
text-align: center;
}
.sponsors-frontpage a img {
width: auto;
height: auto;
max-width: calc(15em - 1.2em - 2px); /* width - (left+right margin&padding) - (left+right border) */
max-height: calc(9em - 1.2em - 2px);
padding: 0.3em;
vertical-align: middle;
} }
.sponsors-frontpage p a { .sponsors-frontpage p a {
display: inline; display: inline;
@ -624,7 +671,8 @@ h6 { font-size: 1.0em; }
h1, h2, h3, h4, h5, h6 { font-weight: normal; } h1, h2, h3, h4, h5, h6 { font-weight: normal; }
a { color: #428bca; text-decoration: none; } a { color: #764C9E; text-decoration: none; }
/* a { color: #428bca; text-decoration: none; } */
a:hover { text-decoration: underline; } a:hover { text-decoration: underline; }
@ -694,10 +742,10 @@ a.button:hover { opacity: 0.8; }
.program table { .program table {
width: 99%; width: 99%;
} }
/*
.program h2 { .program h2 {
} }
*/
.program table, .program td, .program tr, .program th { .program table, .program td, .program tr, .program th {
border: 0; border: 0;
} }
@ -815,10 +863,11 @@ a.button:hover { opacity: 0.8; }
.schedule-social { .schedule-social {
background: #a6b4de; background: #a6b4de;
} }
/*
.schedule-14 { .schedule-14 {
background: #; background: #;
} }
*/
/* Advanced technical track 2015 */ /* Advanced technical track 2015 */
.schedule-advanced-technical { .schedule-advanced-technical {
background: #DF9959; background: #DF9959;
@ -848,6 +897,11 @@ a.button:hover { opacity: 0.8; }
background: #E2E0E9; background: #E2E0E9;
} }
/* Education track 2015*/
.schedule-education {
background: #ffaa36;
}
.schedule-en::after { .schedule-en::after {
content: " "; content: " ";
background: url('../img/en_US.png'); background: url('../img/en_US.png');
@ -905,3 +959,77 @@ footer.entry-footer {
float: right; float: right;
margin-left: 1.625em; margin-left: 1.625em;
} }
.videoWrapper {
position: relative;
padding-bottom: 56.25%;
height: 0;
margin-bottom: 20px;
}
.videoWrapper > iframe {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
border: 0;
}
@media all and (max-width: 600px) {
p.info + p {
height: auto;
}
}
section.subtitle_content {
background: #f0f0f0;
padding: 10px;
text-align: justify;
font-weight: bold;
}
/* countdown */
.countdown {
text-align: center;
margin-top: 18px;
}
.countdown > table {
margin: 0 auto;
}
.countdown .digits > td {
font-size: 30px;
padding: 0 10px;
}
.countdown .units > td {
font-size: 12px;
}
/* no current streams */
.no_current_streams {
text-align: center;
margin-top: 18px;
}
/* after event */
.after_event {
text-align: center;
margin-top: 18px;
}
/* front page stream players */
.stream_players_wrapper {
display: flex;
column-gap: 10px;
}
@media all and (max-width: 960px) {
.stream_players_wrapper {
flex-direction: column;
}
}
.stream_players_wrapper > * {
flex-grow: 1;
}

View File

@ -1,5 +1,2 @@
<section class="entry-meta"> <section class="entry-meta">
<span class="author vcard"><?php the_author_posts_link(); ?></span>
<span class="meta-sep"> | </span>
<span class="entry-date"><?php the_time( get_option( 'date_format' ) ); ?></span>
</section> </section>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 4.2 KiB

View File

@ -14,12 +14,17 @@
<?php wp_nav_menu(array('theme_location' => 'footer-schedule', 'items_wrap' => '%3$s<br/>' )); ?> <?php wp_nav_menu(array('theme_location' => 'footer-schedule', 'items_wrap' => '%3$s<br/>' )); ?>
</p> </p>
</div> </div>
<?php
$blog_slug = get_blog_slug();
if ( $blog_slug !== '2020' ) {
?>
<div class="col4"> <div class="col4">
<h3><?php e_('Други')?></h3> <h3><?php e_('Други')?></h3>
<p> <p>
<?php wp_nav_menu(array('theme_location' => 'footer-others', 'items_wrap' => '%3$s<br/>' )); ?> <?php wp_nav_menu(array('theme_location' => 'footer-others', 'items_wrap' => '%3$s<br/>' )); ?>
</p> </p>
</div> </div>
<?php } ?>
<div class="col4"> <div class="col4">
<h3><?php e_('Последвайте ни в:')?></h3> <h3><?php e_('Последвайте ни в:')?></h3>
<p> <p>

99
front-page-content.php Normal file
View File

@ -0,0 +1,99 @@
<?php
if (!function_exists('get_blog_slug')) {
exit;
}
require __DIR__ . '/config-events.php';
$blog_slug = get_blog_slug();
if (!array_key_exists($blog_slug, $eventsConfig)) {
return;
}
$now = new DateTimeImmutable('now');
function interval_to_now(string $dateTimeStr) {
global $now;
return $now->diff(new DateTimeImmutable($dateTimeStr . ' Europe/Sofia'));
}
function is_before_interval(DateInterval $interval) {
return $interval->invert === 0;
}
function is_after_interval(DateInterval $interval) {
return $interval->invert === 1;
}
$eventStartInterval = interval_to_now($eventsConfig[$blog_slug]['startTime']);
$isBeforeEvent = is_before_interval($eventStartInterval);
$eventEndInterval = interval_to_now($eventsConfig[$blog_slug]['endTime']);
$isAfterEvent = is_after_interval($eventEndInterval);
$activeStreams = array_filter($eventsConfig[$blog_slug]['streams'], function($stream) {
$streamStartInterval = interval_to_now($stream['startTime']);
$streamEndInterval = interval_to_now($stream['endTime']);
return is_after_interval($streamStartInterval) && is_before_interval($streamEndInterval);
});
$activeStream = reset($activeStreams);
$noCurrentStreams = !$isBeforeEvent && !$isAfterEvent && $activeStream === false;
if ($isBeforeEvent) {
?>
<div class="countdown">
<?php e_('countdown_text_before'); ?>
<table>
<tbody>
<tr class="digits">
<td><?php echo $eventStartInterval->format('%a'); ?></td>
<td><?php echo $eventStartInterval->format('%H'); ?></td>
<td><?php echo $eventStartInterval->format('%I'); ?></td>
</tr>
<tr class="units">
<td><?php e_('countdown_days'); ?></td>
<td><?php e_('countdown_hours'); ?></td>
<td><?php e_('countdown_minutes'); ?></td>
</tr>
</tbody>
</table>
<?php e_('countdown_text_after'); ?>
</div>
<?php
}
if ($activeStream) {
?>
<div class="stream_players_wrapper">
<?php
foreach ($activeStream['tracks'] as $track) {
?>
<div>
<h3><?php e_($track); ?></h3>
<?php echo do_shortcode('[stream-player track="' . $track . '"]'); ?>
</div>
<?php
}
?>
</div>
<?php
}
if ($noCurrentStreams) {
?>
<div class="no_current_streams">
<?php e_('no_current_streams'); ?>
</div>
<?php
}
if ($isAfterEvent) {
?>
<div class="after_event">
<?php e_('after_event'); ?>
</div>
<?php
}

View File

@ -1,4 +1,11 @@
<?php get_header(); ?> <?php get_header(); ?>
<section class="content subtitle_content">
<?php
e_('about_event');
require __DIR__ . '/front-page-content.php';
?>
</section>
<section class="content"> <section class="content">
<?php echo do_shortcode( '[sh-latest-posts cat="news" label="'.pll__('Новини').'"]' ); ?> <?php echo do_shortcode( '[sh-latest-posts cat="news" label="'.pll__('Новини').'"]' ); ?>
<div class="separator"></div> <div class="separator"></div>

View File

@ -2,11 +2,46 @@
# Add support for thumbnais # Add support for thumbnais
add_theme_support( 'post-thumbnails' ); add_theme_support( 'post-thumbnails' );
add_theme_support( 'automatic-feed-links' );
add_filter( 'the_excerpt', 'shortcode_unautop');
add_filter( 'the_excerpt', 'do_shortcode');
function get_blog_slug() {
if (!is_multisite()) {
// local development, non-multisite
return date('Y');
}
$blog_details = get_blog_details();
return trim($blog_details->path, '/');
}
// OpenGraph image for FB/Twitter
function og_image( $tags ) {
$blog_slug = get_blog_slug();
$imagePath = __DIR__ . '/img/fb_preview_' . $blog_slug . '.jpg';
if (file_exists($imagePath)) {
$imageUrl = esc_url('https://www.openfest.org/wp-content/themes/initfest/img/' . basename($imagePath));
list($width, $height) = getimagesize($imagePath);
$tags['og:image'] = $imageUrl;
$tags['og:image:width'] = $width;
$tags['og:image:height'] = $height;
$tags['twitter:image'] = $imageUrl;
}
return $tags;
}
add_filter( 'jetpack_open_graph_tags', 'og_image' );
register_nav_menus( register_nav_menus(
array( 'main-menu' => __( 'Main Menu', 'initfest' ), array( 'main-menu' => __( 'Main Menu', 'initfest' ),
'subnav-menu' => __( 'Sub Navigation', 'initfest'), 'subnav-menu' => __( 'Sub Navigation', 'initfest'),
'stream-menu' => __('Stream Menu', 'initfest'),
'footer-openfest' => __('OpenFest', 'initfest'), 'footer-openfest' => __('OpenFest', 'initfest'),
'footer-openfest' => __('OpenFest', 'initfest'), 'footer-openfest' => __('OpenFest', 'initfest'),
'footer-schedule' => __('Schedule', 'initfest'), 'footer-schedule' => __('Schedule', 'initfest'),
@ -21,16 +56,21 @@ function register_shortcodes(){
add_shortcode('sponsors', 'sponsors_shortcode'); add_shortcode('sponsors', 'sponsors_shortcode');
add_shortcode('partners', 'partners_shortcode'); add_shortcode('partners', 'partners_shortcode');
add_shortcode('transport', 'transport_shortcode'); add_shortcode('transport', 'transport_shortcode');
add_shortcode('stream-player', 'stream_player_shortcode');
} }
add_action( 'init', 'register_shortcodes'); add_action( 'init', 'register_shortcodes');
function sh_latest_posts($atts){ function sh_latest_posts($atts){
$atts = shortcode_atts( array( if (of_get_lang()=='bg')
'cat' => 'news', $ncat = "news-bg";
else
$ncat = "news";
$atts = array(
'cat' => $ncat,
'label' => __('News', 'initfest') 'label' => __('News', 'initfest')
), $atts ); );
$result = '<section class="content"><h3>'.$atts['label'].' | <small><a href="'.esc_url(get_term_link($atts['cat'], 'category')).'">'.__('see all', 'initfest').'</a></small></h3><div class="grid">'; $result = '<section class="content"><h3>'.$atts['label'].' | <small><a href="'.esc_url(get_term_link($atts['cat'], 'category')).'">'.__('see all', 'initfest').'</a></small></h3><div class="grid">';
@ -45,12 +85,11 @@ function sh_latest_posts($atts){
?> ?>
<div class="col3"> <div class="col3">
<h4><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h4> <h4><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h4>
<p class="info"><?php pll_e('От');?> <?php the_author(); ?> | <?php pll_e('Публикувано на');?> <?php the_date(); ?> </p>
<?php the_excerpt(); ?> <?php the_excerpt(); ?>
<a class="button" href="<?php the_permalink(); ?>"><?php pll_e('виж цялата новина');?></a> <a class="button" href="<?php the_permalink(); ?>"><?php pll_e('виж цялата новина');?></a>
</div> </div>
<?php <?php
if ($i==3) # if ($i==3)
echo '</div></section><section class="content"><div class="grid">'; echo '</div></section><section class="content"><div class="grid">';
endwhile; endwhile;
@ -165,6 +204,26 @@ function transport_shortcode() {
} }
function stream_player_shortcode($params = []) {
wp_enqueue_style('video.js', 'https://unpkg.com/video.js/dist/video-js.css');
wp_enqueue_script('video.js', 'https://unpkg.com/video.js/dist/video.min.js');
$params = array_merge([
'host' => 'stream.openfest.org',
'track' => 'hall-a',
], $params);
$urlPrefix = 'https://' . $params['host'] . '/';
return <<<EOF
<video class="video-js vjs-fluid" controls data-setup="{}">
<source type="application/x-mpegURL" src="{$urlPrefix}hls/{$params['track']}.m3u8"></source>
<source type="application/dash+xml" src="{$urlPrefix}dash/{$params['track']}.mpd"></source>
</video>
EOF;
}
# Create a custom post type for Sponsors # Create a custom post type for Sponsors
function create_sponsors_posttype() { function create_sponsors_posttype() {
@ -335,4 +394,41 @@ if (function_exists("pll_register_string")) {
pll_register_string('hall3','G1'); pll_register_string('hall3','G1');
pll_register_string('hall4','Пловдив'); pll_register_string('hall4','Пловдив');
pll_register_string('hall5','Бургас'); pll_register_string('hall5','Бургас');
pll_register_string('bulgaria_hall','BULGARIA_HALL');
pll_register_string('chamber_hall','CHAMBER_HALL');
pll_register_string('music_hall','MUSIC_HALL');
pll_register_string('low_quality','LOW_QUALITY');
pll_register_string('normal_quality','NORMAL_QUALITY');
pll_register_string('high_quality','HIGH_QUALITY');
pll_register_string('all_streams','ALL_STREAMS');
pll_register_string('tba','TBA');
pll_register_string('feedback','Submit feedback');
pll_register_string('about_event','about_event');
pll_register_string('countdown_text_before','countdown_text_before');
pll_register_string('countdown_text_after','countdown_text_after');
pll_register_string('countdown_days','countdown_days');
pll_register_string('countdown_hours','countdown_hours');
pll_register_string('countdown_minutes','countdown_minutes');
pll_register_string('after_event','after_event');
pll_register_string('no_current_streams','no_current_streams');
pll_register_string('hall-a','hall-a');
pll_register_string('hall-b','hall-b');
}
add_filter( 'wp_title', 'wpdocs_hack_wp_title_for_home' );
/**
* Customize the title for the home page, if one is not set.
*
* @param string $title The original title.
* @return string The title to use.
*/
function wpdocs_hack_wp_title_for_home( $title )
{
if ( empty( $title ) && ( is_home() || is_front_page() ) ) {
$title = get_bloginfo('name') . ' | ' . get_bloginfo( 'description' );
} else {
$title = $title . get_bloginfo( 'tagline' );
}
return $title;
} }

View File

@ -15,7 +15,7 @@
<!--<link rel="icon" type="image/png" href="">--> <!--<link rel="icon" type="image/png" href="">-->
<link rel="shortcut icon" href="<?php echo get_stylesheet_directory_uri(); ?>/favicon.ico" /> <link rel="shortcut icon" href="<?php echo get_stylesheet_directory_uri(); ?>/favicon.ico" />
<title><?php is_front_page() ? (bloginfo('name').e_(' | ').e_('Да споделим свободата')) : wp_title( ' | ', true, 'right' ); ?></title> <title><?php wp_title( ' | ', true, 'right' ) ?></title>
<link href="//maxcdn.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css" rel="stylesheet"> <link href="//maxcdn.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css" rel="stylesheet">
<link rel="stylesheet" type="text/css" href="<?php echo get_stylesheet_uri(); ?>" /> <link rel="stylesheet" type="text/css" href="<?php echo get_stylesheet_uri(); ?>" />
@ -23,18 +23,58 @@
</head> </head>
<body> <body>
<?php
$blog_slug = get_blog_slug();
<nav> if ($blog_slug === '2019' || $blog_slug === '2020') {
echo '<nav style="background: url(\''.get_template_directory_uri().'/img/navbg-'.$blog_slug.'.png\'); height: 84px">';
}
elseif ($blog_slug === '2024') {
echo '<nav style="background-image: linear-gradient(#FFFFFF, #BFFAF4);">';
} else {
echo '<nav>';
}
?>
<div class="content cf"> <div class="content cf">
<a href="<?php echo esc_url( home_url( '/' ) ); ?>" class="logo"><img src="<?php echo get_template_directory_uri(); ?>/img/logo.png" alt="OpenFest" /></a> <a href="<?php echo esc_url( home_url( '/' ) ); ?>" class="logo"><img src="<?php echo get_template_directory_uri().'/img/logo-'.$blog_slug.'.png'; ?>" alt="OpenFest" /></a>
<?php wp_nav_menu( array('theme_location' => 'main-menu') ); ?> <?php wp_nav_menu( array('theme_location' => 'main-menu') ); ?>
</div> </div>
</nav> </nav>
<?php <?php
if(openfest_home_page()){ if(openfest_home_page()){
$blog_details = get_blog_details(); if ($blog_slug === '2019') {
$blog_slug = str_replace('/', '', $blog_details->path); echo '<section class="banner cf" style="background: url(\''.get_template_directory_uri().'/img/banner-back-'.$blog_slug.'.jpg\') top repeat-x; background-size:cover; position:relative; padding: 0.2em 0 0 0;height: 400px;"><img src="'.get_template_directory_uri().'/img/banner-'.of_get_lang().'-'. $blog_slug .'.png" alt="" style="position:absolute;top:0;left:50%;margin-left:-550px;height:100%;width:430px" /></section>';
echo '<section class="banner cf"><img src="'.get_template_directory_uri().'/img/banner-'.of_get_lang().'-'. $blog_slug .'.png" alt="" /></section>'; #echo '<section class="banner cf" style="background: url(\''.get_template_directory_uri().'/img/banner-back-'.$blog_slug.'.jpg\') top repeat-x;padding: 0.2em 0 0 0;height: 400px;"><img src="'.get_template_directory_uri().'/img/banner-'.of_get_lang().'-'. $blog_slug .'.png" alt="" style="padding-right: 35%; margin-top: -0.2em;;height:400px" /></section>';
} else if ($blog_slug === '2021') {
//echo '<section class="banner cf" style="background: url(\''.get_template_directory_uri().'/img/banner-back-'.$blog_slug.'.jpg\') top repeat-x; background-size:cover; position:relative; padding: 0.2em 0 0 0;height: 400px;"><img src="'.get_template_directory_uri().'/img/banner-'.of_get_lang().'-'. $blog_slug .'.png" alt="" style="position:absolute;top:0;left:50%;height:100%;width:608px" /></section>';
//if (of_get_lang() === 'en') {
// echo '<section class="banner cf" style="background: url(\''.get_template_directory_uri().'/img/banner-back-'.$blog_slug.'.jpg\') top repeat-x; background-size:cover; position:relative; padding: 0.2em 0 0 0;height: 400px;"><img src="'.get_template_directory_uri().'/img/banner-'.of_get_lang().'-'. $blog_slug .'.png" alt="" style="position:absolute;top:0;left:50%;height:100%;width:608px" /></section>';
//} else {
// echo '<section class="banner cf content" style="top: repeat-x; background-size:cover; position:relative; padding: 0.2em 0 0 0;height: 400px; background: none">';
// echo '<img src="'.get_template_directory_uri().'/img/banner-back-2021.svg" alt="" style="position:absolute;top:0;right:65%;height:100%;">';
// echo '<img src="'.get_template_directory_uri().'/img/banner-bg-2021.svg" alt="" style="position:absolute;top:0;left:50%;height:100%;width:608px">';
// echo '</section>';
//}
echo '<section class="banner cf content" style="top: repeat-x; background-size:cover; position:relative; padding: 0.2em 0 0 0;height: 400px; background: none">';
echo '<img src="'.get_template_directory_uri().'/img/banner-back-2021.svg" alt="" style="position:absolute;top:0;right:65%;height:100%;">';
if (of_get_lang() === 'bg') {
echo '<img src="'.get_template_directory_uri().'/img/banner-bg-2021.svg" alt="" style="position:absolute;top:0;left:50%;height:100%;width:608px">';
} else {
echo '<img src="'.get_template_directory_uri().'/img/banner-en-2021.png" alt="" style="position:absolute;top:0;left:50%;height:100%;width:608px">';
}
echo '</section>';
} else if ($blog_slug === '2023') {
echo '<section class="banner cf" style="background: url('.get_template_directory_uri().'/img/banner-back-2023.png) top center no-repeat;padding: 0.2em 0 0 0;height: 258px;"><img src="'.get_template_directory_uri().'/img/banner-'.of_get_lang().'-2023.png" alt="" style="margin-left: calc(40vw - 428px);" /></section>';
} else if ($blog_slug === '2024') {
echo '<section class="banner cf" style="background: url('.get_template_directory_uri().'/img/banner-back-2024.png) top center no-repeat;padding: 0.2em 0 0 0;height: 258px;"></section>';
} else {
echo '<section class="banner cf" style="background: url(\''.get_template_directory_uri().'/img/banner-back-'.$blog_slug.'.jpg\') top repeat-x;padding: 0.2em 0 0 0;height: 258px;"><img src="'.get_template_directory_uri().'/img/banner-'.of_get_lang().'-'. $blog_slug .'.png" alt="" /></section>';
}
} }
?> ?>

BIN
img/banner-back-2014.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 192 KiB

BIN
img/banner-back-2015.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 192 KiB

BIN
img/banner-back-2016.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

BIN
img/banner-back-2017.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 172 KiB

BIN
img/banner-back-2018.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 178 KiB

BIN
img/banner-back-2019.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

BIN
img/banner-back-2020.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 117 KiB

BIN
img/banner-back-2021.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

75
img/banner-back-2021.svg Normal file
View File

@ -0,0 +1,75 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Creator: CorelDRAW X7 -->
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="1920px" height="1920px" version="1.1" style="shape-rendering:geometricPrecision; text-rendering:geometricPrecision; image-rendering:optimizeQuality; fill-rule:evenodd; clip-rule:evenodd"
viewBox="0 0 192000 192000"
xmlns:xlink="http://www.w3.org/1999/xlink">
<defs>
<style type="text/css">
<![CDATA[
.fil0 {fill:none}
.fil2 {fill:white}
.fil1 {fill:#1EAC7D;fill-rule:nonzero}
.fil4 {fill:#9CDBC6;fill-rule:nonzero}
.fil3 {fill:#FFCC00;fill-rule:nonzero}
]]>
</style>
</defs>
<g id="Layer_x0020_1">
<metadata id="CorelCorpID_0Corel-Layer"/>
<g id="_1658993452192">
<rect class="fil0" width="192000" height="192000"/>
<g>
<circle class="fil0" cx="96000" cy="96000" r="6060"/>
<g>
<circle class="fil1" transform="matrix(-1.38902 1.38902 -1.38902 -1.38902 96000 96000)" r="35942"/>
<g>
<g>
<path class="fil2" d="M132004 136375c-751,450 -1540,809 -2349,1078 -1022,339 -2071,532 -3111,575 -550,23 -1105,4 -1661,-58 -418,-46 -829,-116 -1232,-209 -46,62 -93,125 -142,186 -132,168 -272,326 -421,475 -516,516 -1114,907 -1754,1172 -667,276 -1373,414 -2076,414 -703,0 -1410,-138 -2076,-414 -640,-265 -1238,-656 -1754,-1172 -516,-516 -907,-1114 -1172,-1754 -276,-666 -414,-1373 -414,-2076 0,-497 69,-997 209,-1487 88,-309 203,-611 346,-902 -99,-69 -198,-142 -296,-218l-13 -11c-238,-185 -457,-378 -657,-577 -944,-944 -1578,-2097 -1918,-3377 -348,-1308 -384,-2748 -124,-4227 242,-1376 744,-2789 1491,-4156 718,-1313 1661,-2585 2815,-3739 1154,-1153 2425,-2096 3739,-2814 1366,-747 2780,-1249 4155,-1491 1479,-260 2919,-224 4228,123 1279,340 2432,975 3376,1919 202,202 392,417 569,643 64,82 127,166 188,251 323,-181 660,-326 1006,-435 532,-168 1084,-252 1636,-252 703,0 1409,138 2076,414 640,265 1238,656 1754,1172 516,516 907,1114 1172,1754 276,666 414,1373 414,2076 0,703 -138,1409 -414,2076 -265,640 -656,1238 -1172,1754 -183,183 -381,353 -590,510 -94,70 -189,137 -287,200 98,410 171,827 219,1248 64,562 85,1131 61,1701 -36,844 -148,1623 -346,2384 -196,752 -476,1480 -846,2229l1 0c-349,762 -512,1537 -492,2258 20,704 213,1357 578,1892 169,247 106,584 -142,754 -87,59 -185,90 -283,94 -719,30 -1309,-55 -1789,-233 -171,-64 -328,-139 -471,-224 -8,52 -15,104 -22,157 -49,365 -71,750 -71,1168 1,300 -241,543 -541,544 -157,0 -299,-66 -398,-173 -325,-321 -587,-621 -793,-909 -76,-105 -144,-210 -206,-313zm-2692 51c901,-299 1780,-727 2608,-1284l0 1c35,-23 73,-43 114,-58 280,-104 592,38 696,318 53,141 124,286 217,438 56,-391 137,-763 247,-1130l1 1c35,-117 109,-222 218,-295 249,-166 585,-99 751,150 154,232 389,420 721,543 141,52 300,93 477,122 -187,-494 -288,-1027 -304,-1581 -25,-890 170,-1832 588,-2744l2 1 7 -16c342,-689 598,-1353 775,-2035 177,-678 278,-1383 310,-2155 22,-514 4,-1027 -54,-1533 -58,-500 -155,-995 -291,-1481 -67,-238 36,-499 263,-623 179,-97 354,-209 523,-335 161,-121 319,-258 472,-411 417,-417 731,-895 941,-1403 218,-526 327,-1091 327,-1658 0,-568 -109,-1132 -327,-1658 -210,-508 -524,-986 -941,-1403 -417,-417 -895,-731 -1403,-941 -526,-218 -1090,-327 -1658,-327 -442,0 -884,67 -1309,201 -415,132 -814,326 -1180,584l0 0 -33 21c-256,155 -590,73 -745,-183 -124,-205 -263,-406 -416,-602 -148,-188 -310,-371 -485,-546 -806,-806 -1792,-1348 -2887,-1639 -1157,-308 -2437,-338 -3759,-106 -1258,222 -2559,685 -3824,1377 -1220,667 -2407,1548 -3490,2631 -1084,1084 -1965,2270 -2632,3490 -692,1266 -1155,2567 -1376,3825 -233,1321 -202,2602 105,3759 291,1095 833,2081 1639,2887 184,184 369,348 553,491l12 10c192,149 403,291 630,426l9 6c254,159 332,493 174,748 -216,347 -377,715 -485,1093 -109,384 -164,785 -164,1190 0,568 109,1132 327,1658 210,508 524,986 941,1403 417,417 895,731 1403,941 526,218 1090,327 1658,327 567,0 1132,-109 1658,-327 508,-210 986,-524 1403,-941 125,-125 238,-252 340,-381 104,-131 200,-270 290,-416l1 1c123,-200 368,-304 606,-238 477,130 961,222 1447,276 486,54 987,70 1496,49 946,-40 1894,-213 2813,-518z"/>
<path class="fil2" d="M127388 132996c-1735,1735 -4549,1735 -6285,0 -726,-726 -1148,-1640 -1266,-2586 -1654,155 -3145,-246 -4159,-1260 -1144,-1144 -1509,-2897 -1173,-4805 364,-2072 1539,-4302 3436,-6200 1898,-1898 4129,-3072 6201,-3436 1908,-336 3660,28 4804,1173 1012,1011 1414,2499 1262,4149 948,117 1865,540 2592,1267 1736,1736 1736,4550 0,6285 -1152,1152 -2779,1539 -4250,1162 377,1472 -10,3099 -1162,4251zm-7993 -10743c-277,415 -839,527 -1255,250 -416,-278 -528,-840 -250,-1255 190,-285 409,-578 654,-877 243,-296 488,-568 732,-812 245,-244 516,-489 812,-732 299,-246 592,-464 877,-654 416,-278 978,-166 1255,250 278,415 166,977 -250,1255 -267,179 -512,359 -731,539 -222,182 -450,390 -682,622 -233,233 -441,461 -623,682 -180,220 -360,464 -539,732zm4188 2912c-121,120 -279,180 -437,180 -158,0 -316,-60 -436,-180 -120,-121 -181,-278 -181,-436l0 -1c0,-158 61,-316 181,-436 120,-121 278,-181 436,-181 158,0 316,60 437,181 120,120 180,278 180,436l0 1c0,158 -60,316 -180,436zm1425 -1426c-120,121 -278,181 -436,181l-1 0c-158,0 -316,-60 -436,-181 -120,-120 -180,-278 -180,-436l0 0c0,-158 60,-316 180,-436 120,-121 278,-181 436,-181l1 0c158,0 316,60 436,181 120,120 180,278 180,436l0 0c0,158 -60,316 -180,436zm582 7459c-289,289 -701,400 -1134,346 -433,-53 -886,-272 -1258,-643 -371,-372 -590,-825 -644,-1258 -53,-433 58,-845 347,-1134 289,-290 702,-401 1135,-347 433,53 886,272 1257,644 371,371 590,824 644,1257 54,433 -58,845 -347,1135zm5412 -5413c-289,290 -701,401 -1134,347 -433,-54 -886,-272 -1258,-644 -371,-371 -590,-824 -643,-1257 -54,-433 57,-845 346,-1135 290,-289 702,-400 1135,-347 433,54 886,273 1257,644 372,372 591,825 644,1258 54,433 -57,845 -347,1134zm-11744 11046c573,0 1146,-218 1583,-656 33,-33 65,-66 95,-101 -620,-380 -1204,-837 -1738,-1371 -335,-335 -651,-708 -947,-1115 -147,-201 -284,-406 -412,-614 -37,-5 -74,-11 -111,-17 -18,17 -36,34 -53,52 -438,437 -656,1010 -656,1583 0,573 218,1146 656,1583 437,438 1010,656 1583,656zm16594 -15722c-377,-609 -827,-1182 -1353,-1708 -335,-335 -708,-651 -1114,-947 -202,-146 -407,-284 -614,-412 -4,-24 -8,-48 -11,-71 73,-104 156,-203 249,-296 437,-438 1010,-656 1583,-656 573,0 1146,218 1583,656 438,437 656,1010 656,1583 0,573 -218,1146 -656,1583 -101,101 -209,191 -323,268z"/>
</g>
<g>
<path class="fil2" d="M150008 99091c-213,849 -516,1661 -899,2423 -482,963 -1088,1840 -1793,2607 -373,405 -775,781 -1202,1124 -320,258 -657,497 -1008,716 14,80 25,160 35,239 25,213 38,428 38,643 0,730 -147,1429 -412,2069 -276,666 -678,1264 -1175,1761 -980,980 -2334,1586 -3830,1586 -730,0 -1429,-146 -2069,-411 -666,-276 -1263,-678 -1760,-1175 -352,-352 -658,-757 -906,-1203 -156,-281 -288,-576 -393,-884 -124,22 -250,42 -376,58 -309,39 -610,59 -903,59 -1335,0 -2599,-366 -3744,-1030 -1171,-680 -2215,-1673 -3077,-2903 -801,-1143 -1446,-2498 -1884,-3992 -421,-1437 -653,-3002 -653,-4634 0,-1632 232,-3197 653,-4634 438,-1494 1083,-2849 1884,-3992 862,-1230 1906,-2223 3077,-2903 1145,-664 2409,-1030 3744,-1030 293,0 584,18 873,53 107,14 214,30 322,48 100,-355 235,-696 402,-1018 260,-499 591,-951 981,-1341 497,-497 1094,-899 1760,-1175 640,-265 1339,-411 2069,-411 731,0 1430,146 2070,411 666,276 1263,678 1760,1175 497,497 899,1095 1175,1761 265,640 412,1339 412,2069 0,262 -20,524 -58,785 -17,120 -38,238 -63,355 358,221 699,461 1023,719 439,350 852,735 1235,1151 573,623 1044,1253 1441,1931 397,675 715,1392 984,2191 291,776 722,1433 1244,1926 512,484 1110,809 1746,929 294,56 488,339 433,633 -19,104 -67,195 -134,268 -487,529 -965,886 -1429,1099 -166,77 -330,134 -492,175 31,42 63,85 95,127 224,292 480,581 776,876 213,211 214,555 3,767 -111,111 -259,165 -404,159 -457,4 -855,-24 -1204,-81 -128,-21 -250,-47 -367,-76zm-1867 1939c425,-848 744,-1773 936,-2751l1 0c8,-41 21,-82 39,-121 124,-272 446,-392 718,-268 136,63 289,115 462,156 -237,-316 -443,-637 -625,-973l1 -1c-57,-107 -79,-234 -54,-362 59,-294 344,-484 637,-425 274,55 572,22 894,-126 137,-63 278,-146 424,-251 -481,-217 -929,-522 -1332,-902 -640,-605 -1165,-1402 -1515,-2336l-14 -37c-246,-730 -534,-1380 -890,-1987 -355,-605 -782,-1174 -1306,-1744 -345,-375 -716,-722 -1111,-1036 -385,-307 -787,-581 -1202,-818 -242,-111 -371,-386 -293,-648 60,-200 106,-404 136,-611 29,-202 44,-413 44,-632 0,-590 -116,-1149 -326,-1657 -218,-526 -540,-1002 -941,-1404 -402,-401 -878,-723 -1404,-941 -508,-211 -1068,-327 -1658,-327 -589,0 -1149,116 -1657,327 -526,218 -1002,540 -1403,941 -316,315 -581,676 -785,1069 -201,387 -345,808 -421,1253l-1 0 -8 38c-71,291 -365,469 -656,397 -237,-59 -483,-104 -735,-136 -243,-30 -490,-45 -741,-45 -1140,0 -2220,314 -3200,882 -1036,601 -1963,1485 -2733,2584 -733,1046 -1325,2294 -1731,3678 -391,1334 -607,2796 -607,4328 0,1532 216,2994 607,4328 406,1384 998,2632 1731,3678 770,1099 1697,1983 2733,2584 980,568 2060,882 3200,882 269,0 525,-16 767,-47 245,-31 490,-78 733,-140l40 -10c292,-67 583,115 649,407 92,397 239,772 430,1118 195,350 440,673 728,960 401,401 877,723 1403,941 508,211 1068,327 1657,327 1196,0 2278,-485 3062,-1268 401,-401 723,-878 941,-1404 210,-508 326,-1067 326,-1657 0,-178 -10,-350 -29,-516 -22,-179 -52,-347 -90,-505 -54,-228 44,-474 257,-597 418,-240 821,-516 1205,-825 384,-308 746,-647 1083,-1014 641,-697 1190,-1490 1624,-2356z"/>
<path class="fil2" d="M144355 99965c0,2454 -1990,4444 -4445,4444 -1026,0 -1971,-348 -2723,-932 -1060,1279 -2398,2049 -3832,2049 -1618,0 -3115,-981 -4227,-2568 -1207,-1723 -1954,-4130 -1954,-6814 0,-2684 747,-5091 1954,-6814 1112,-1587 2609,-2568 4227,-2568 1431,0 2767,767 3826,2042 753,-587 1700,-937 2729,-937 2455,0 4445,1989 4445,4444 0,1629 -877,3053 -2184,3827 1307,774 2184,2198 2184,3827zm-9146 -4862c0,170 -70,324 -181,436l-1 0c-112,112 -266,181 -436,181 -170,0 -324,-69 -436,-181l0 0c-112,-112 -181,-266 -181,-436 0,-170 69,-324 181,-436l0 0c112,-112 266,-181 436,-181 170,0 324,69 436,181l1 0c111,112 181,266 181,436zm6603 -2792c0,409 -213,779 -557,1047 -344,269 -819,434 -1345,434 -525,0 -1000,-165 -1344,-434 -344,-268 -557,-638 -557,-1047 0,-409 213,-779 557,-1047 344,-269 819,-434 1344,-434 526,0 1001,165 1345,434 344,268 557,638 557,1047zm0 7654c0,409 -213,779 -557,1048 -344,268 -819,433 -1345,433 -525,0 -1000,-165 -1344,-433 -344,-269 -557,-639 -557,-1048 0,-409 213,-779 557,-1047 344,-269 819,-434 1344,-434 526,0 1001,165 1345,434 344,268 557,638 557,1047zm-11032 -3335c217,450 29,990 -421,1206 -449,217 -989,29 -1205,-420 -96,-198 -168,-396 -214,-592 -50,-207 -74,-415 -74,-624 0,-209 24,-417 74,-624 46,-196 118,-394 214,-592 216,-449 756,-637 1205,-420 450,216 638,756 421,1206 -34,70 -61,145 -79,224 -17,68 -25,137 -25,206 0,69 8,138 25,206 18,79 45,154 79,224zm4429 489c0,170 -70,324 -181,436 -112,112 -266,181 -437,181 -170,0 -324,-69 -436,-181l0 0c-112,-112 -181,-266 -181,-436 0,-171 69,-325 181,-437 112,-111 266,-181 436,-181 170,0 324,70 436,181l1 1c111,112 181,266 181,436zm6137 11307c405,-405 656,-965 656,-1583 0,-49 -2,-97 -5,-145 -716,174 -1461,266 -2227,266 -473,0 -961,-41 -1458,-119 -246,-38 -488,-86 -725,-142 -20,15 -41,30 -62,45 -1,31 -2,63 -2,95 0,618 251,1178 656,1583 405,405 965,656 1583,656 619,0 1179,-251 1584,-656zm615 -22844c27,-138 41,-280 41,-425 0,-618 -251,-1178 -656,-1583 -405,-405 -965,-656 -1584,-656 -618,0 -1178,251 -1583,656 -405,405 -656,965 -656,1583 0,140 13,276 38,409l26 19c237,-56 479,-104 725,-142 497,-78 985,-119 1458,-119 753,0 1486,89 2191,258z"/>
</g>
<g>
<path class="fil2" d="M41992 92909c213,-849 516,-1661 899,-2423 482,-963 1088,-1840 1793,-2607 555,-604 1174,-1142 1844,-1602 548,-376 1134,-700 1752,-966 -2,-58 -3,-109 -3,-154 0,-730 146,-1429 411,-2069 276,-666 678,-1264 1175,-1761 498,-497 1095,-899 1761,-1175 640,-265 1339,-411 2069,-411 730,0 1430,146 2070,411 666,276 1263,678 1760,1175 324,324 608,693 846,1099 162,276 300,568 411,872 1285,24 2503,388 3609,1029 1171,680 2215,1673 3077,2903 801,1143 1446,2498 1884,3992 421,1437 654,3002 654,4634 0,1632 -233,3197 -654,4634 -438,1494 -1083,2849 -1884,3992 -862,1230 -1906,2223 -3077,2903 -1078,625 -2262,987 -3512,1027 -107,356 -251,697 -427,1019 -252,461 -565,880 -927,1242 -497,497 -1094,899 -1760,1175 -640,265 -1340,411 -2070,411 -730,0 -1429,-146 -2069,-411 -666,-276 -1263,-678 -1761,-1175 -497,-497 -899,-1094 -1175,-1761 -265,-640 -411,-1339 -411,-2069 0,-142 6,-287 18,-434 -615,-264 -1200,-587 -1751,-963 -676,-462 -1300,-1004 -1860,-1613 -572,-622 -1043,-1252 -1441,-1930 -393,-671 -710,-1383 -978,-2174l-1 0c-292,-785 -724,-1448 -1249,-1944 -512,-484 -1110,-809 -1746,-929 -294,-56 -488,-339 -433,-633 19,-104 67,-195 134,-268 487,-529 965,-886 1429,-1099 166,-77 330,-135 492,-175 -31,-43 -63,-85 -95,-127 -224,-292 -480,-581 -776,-876 -213,-211 -214,-555 -2,-767 110,-111 258,-164 403,-159 457,-4 855,24 1204,81 128,21 250,47 367,76zm1867 -1939c-425,848 -744,1773 -936,2751l-1 0c-8,41 -21,82 -39,121 -124,272 -446,392 -718,268 -136,-63 -289,-115 -462,-156 237,315 443,636 624,973l-1 0c58,107 80,234 54,363 -58,293 -344,483 -637,425 -273,-56 -571,-22 -893,126 -137,63 -278,146 -424,251 481,217 930,522 1333,903 646,611 1175,1416 1524,2356l-1 1 5 16c246,729 535,1380 891,1987 355,605 781,1174 1305,1743 505,549 1066,1037 1673,1452 598,409 1241,747 1918,1004 236,89 385,334 344,593 -16,104 -30,219 -40,346 -9,112 -14,228 -14,350 0,590 117,1149 327,1657 218,526 540,1002 941,1404 402,401 878,723 1404,941 508,211 1068,327 1657,327 590,0 1150,-116 1658,-327 526,-218 1002,-540 1403,-941 296,-296 547,-629 745,-991 194,-356 340,-745 428,-1157l1 1c53,-251 279,-437 545,-430l85 3c69,0 -59,-2 87,-2 1140,0 2221,-314 3200,-882 1036,-601 1963,-1485 2733,-2584 733,-1046 1325,-2294 1731,-3678 391,-1334 607,-2796 607,-4328 0,-1532 -216,-2994 -607,-4328 -406,-1384 -998,-2632 -1731,-3678 -770,-1099 -1697,-1983 -2733,-2584 -979,-568 -2060,-882 -3200,-882 -106,0 -89,-1 -118,-1l-106 3c-251,16 -487,-145 -556,-396 -101,-361 -246,-702 -431,-1016 -185,-317 -414,-612 -680,-878 -401,-401 -877,-723 -1403,-941 -508,-211 -1068,-327 -1658,-327 -589,0 -1149,116 -1657,327 -526,218 -1002,540 -1404,941 -401,401 -723,878 -941,1404 -210,508 -327,1067 -327,1657 0,95 2,170 5,227 4,75 9,150 17,225l-1 0c25,237 -111,471 -345,560 -667,257 -1304,595 -1901,1005 -600,412 -1156,895 -1656,1440 -641,697 -1190,1490 -1624,2356z"/>
<path class="fil2" d="M47645 92035c0,-2454 1990,-4444 4445,-4444 1026,0 1971,348 2723,932 1060,-1279 2398,-2049 3832,-2049 1618,0 3115,981 4227,2568 1207,1723 1954,4130 1954,6814 0,2684 -747,5091 -1954,6814 -1112,1587 -2609,2568 -4227,2568 -1431,0 -2767,-767 -3826,-2042 -753,587 -1700,937 -2729,937 -2455,0 -4445,-1989 -4445,-4444 0,-1629 877,-3053 2185,-3827 -1308,-774 -2185,-2198 -2185,-3827zm3154 0c0,-525 138,-1000 362,-1344 223,-345 532,-557 873,-557 340,0 649,212 873,557 223,344 361,819 361,1344 0,525 -138,1000 -361,1344 -224,345 -533,557 -873,557 -341,0 -650,-212 -873,-557 -224,-344 -362,-819 -362,-1344zm8174 -205c141,-478 643,-752 1121,-611 479,140 752,642 612,1121 -157,533 -276,1090 -356,1661 -79,564 -120,1152 -120,1753 0,665 49,1310 143,1921 96,617 240,1223 431,1806 154,475 -106,985 -580,1139 -475,154 -985,-106 -1139,-580 -216,-659 -382,-1361 -494,-2089 -113,-733 -171,-1470 -171,-2197 0,-665 47,-1336 140,-2001 93,-659 231,-1303 413,-1923zm-4807 3051c0,-170 69,-324 181,-436 111,-112 266,-181 436,-181 170,0 324,69 436,181l1 0c111,112 180,266 180,436 0,171 -69,325 -180,437 -112,112 -266,181 -437,181 -170,0 -324,-69 -436,-181l0 -1c-112,-112 -181,-266 -181,-436zm0 2016c0,-170 69,-324 181,-436l0 0c112,-112 266,-181 436,-181 170,0 324,69 436,181l1 0c111,112 180,266 180,436 0,170 -69,324 -180,436l-1 0c-112,112 -266,181 -436,181 -170,0 -324,-69 -436,-181l0 0c-112,-112 -181,-266 -181,-436zm-3367 2792c0,-525 138,-1000 362,-1344 223,-345 532,-557 873,-557 340,0 649,212 873,557 223,344 361,819 361,1344 0,525 -138,1000 -361,1345 -224,344 -533,556 -873,556 -341,0 -650,-212 -873,-556 -224,-345 -362,-820 -362,-1345zm1311 -16115c-386,385 -631,911 -654,1494 255,-21 513,-32 774,-32 474,0 961,41 1458,119 246,38 488,86 725,143 446,-330 917,-609 1410,-833 -110,-340 -300,-644 -546,-891 -405,-405 -965,-656 -1584,-656 -618,0 -1178,251 -1583,656zm-647 23071c-6,65 -9,131 -9,198 0,618 251,1178 656,1583 405,405 965,656 1583,656 619,0 1179,-251 1584,-656 307,-307 526,-704 613,-1149 -518,-229 -1011,-518 -1477,-862 -237,56 -479,104 -725,142 -497,78 -984,119 -1458,119 -258,0 -514,-11 -767,-31z"/>
</g>
<g>
<path class="fil2" d="M99091 41992c849,213 1661,516 2423,899 963,482 1840,1088 2607,1793 405,373 781,775 1124,1202 258,320 497,657 716,1008 80,-14 160,-25 239,-34 213,-26 428,-39 643,-39 730,0 1429,147 2069,412 666,276 1264,678 1761,1175 497,497 899,1094 1175,1760 265,640 411,1339 411,2070 0,730 -146,1429 -411,2069 -276,666 -678,1263 -1175,1760 -352,352 -757,658 -1203,906 -281,156 -576,288 -884,393 22,124 42,250 58,376 39,309 59,610 59,903 0,1335 -366,2599 -1030,3744 -680,1171 -1673,2215 -2903,3077 -1143,801 -2498,1446 -3992,1884 -1437,421 -3002,654 -4634,654 -1632,0 -3197,-233 -4634,-654 -1494,-438 -2849,-1083 -3992,-1884 -1230,-862 -2223,-1906 -2903,-3077 -664,-1145 -1030,-2409 -1030,-3744 0,-293 18,-584 54,-873 13,-107 29,-214 47,-321 -355,-101 -696,-236 -1018,-403 -499,-259 -951,-591 -1341,-981 -497,-497 -899,-1094 -1175,-1760 -265,-640 -411,-1339 -411,-2069 0,-731 146,-1430 411,-2070 276,-666 678,-1263 1175,-1760 497,-497 1094,-899 1761,-1175 640,-265 1339,-412 2069,-412 262,0 524,20 785,58 120,17 238,38 355,63 221,-358 461,-699 719,-1023 350,-439 735,-852 1151,-1235 623,-573 1253,-1044 1931,-1441 675,-396 1392,-715 2191,-984 776,-291 1433,-722 1927,-1244 483,-512 808,-1110 929,-1746 55,-294 338,-488 632,-433 104,19 196,67 268,134 530,487 886,965 1099,1429 77,167 134,331 175,492 43,-31 85,-62 127,-95 292,-224 581,-480 876,-776 211,-213 555,-214 767,-2 111,110 165,258 159,403 4,457 -24,855 -81,1204 -21,128 -47,250 -76,367zm1939 1867c-848,-425 -1773,-744 -2751,-936l0 -1c-41,-8 -82,-21 -121,-39 -272,-124 -392,-446 -268,-718 63,-136 115,-289 156,-462 -316,237 -637,443 -973,625l-1 -1c-107,57 -234,79 -363,54 -293,-59 -483,-344 -424,-637 55,-274 22,-572 -126,-894 -63,-137 -146,-278 -251,-424 -217,481 -522,929 -902,1332 -605,640 -1402,1165 -2336,1515l-37 14c-730,246 -1380,534 -1987,890 -605,355 -1174,782 -1744,1306 -375,345 -722,716 -1036,1111 -307,385 -581,787 -818,1202 -111,242 -386,371 -648,293 -200,-60 -404,-106 -611,-136 -202,-29 -413,-44 -632,-44 -590,0 -1149,116 -1657,326 -526,218 -1002,540 -1404,942 -401,401 -723,877 -941,1403 -211,508 -327,1068 -327,1658 0,589 116,1149 327,1657 218,526 540,1002 941,1404 315,315 676,580 1069,784 387,201 808,345 1253,421l0 1 38 8c291,71 469,365 397,656 -59,237 -104,483 -136,735 -30,243 -45,490 -45,741 0,1140 314,2220 882,3200 601,1036 1485,1963 2584,2733 1046,733 2294,1325 3678,1731 1334,391 2796,607 4328,607 1532,0 2994,-216 4328,-607 1384,-406 2632,-998 3678,-1731 1099,-770 1983,-1697 2584,-2733 568,-980 882,-2060 882,-3200 0,-269 -16,-525 -47,-767 -31,-245 -78,-490 -140,-733l-11 -39c-66,-293 116,-584 408,-650 397,-92 772,-239 1118,-430 350,-195 673,-440 960,-727 401,-402 723,-878 941,-1404 211,-508 327,-1068 327,-1657 0,-590 -116,-1150 -327,-1658 -218,-526 -540,-1002 -941,-1403 -401,-402 -878,-724 -1404,-942 -508,-210 -1067,-326 -1657,-326 -178,0 -350,10 -516,29 -179,22 -347,52 -505,90 -228,55 -474,-44 -597,-257 -240,-418 -516,-821 -825,-1205 -308,-384 -647,-746 -1014,-1083 -697,-641 -1490,-1190 -2356,-1624z"/>
<path class="fil2" d="M99965 50188c525,0 1000,213 1344,557 345,344 557,820 557,1345 0,525 -212,1000 -557,1344 -344,344 -819,557 -1344,557 -525,0 -1000,-213 -1344,-557 -345,-344 -557,-819 -557,-1344 0,-525 212,-1001 557,-1345 344,-344 819,-557 1344,-557zm0 -2543c2455,0 4444,1990 4444,4445 0,1026 -348,1971 -932,2723 871,722 1506,1573 1822,2495 -1117,689 -2354,1245 -3669,1655 -1726,538 -3585,821 -5486,821 -1750,0 -3468,-241 -5082,-701 -1468,-419 -2844,-1016 -4074,-1774 316,-920 948,-1769 1816,-2490 -587,-753 -937,-1700 -937,-2729 0,-2455 1989,-4445 4444,-4445 1629,0 3053,877 3827,2184 774,-1307 2198,-2184 3827,-2184zm5508 11649c-223,1367 -1143,2616 -2515,3578 -1723,1207 -4130,1954 -6814,1954 -2684,0 -5091,-747 -6814,-1954 -1373,-962 -2292,-2212 -2515,-3579 1170,639 2432,1153 3752,1529 1776,507 3663,773 5577,773 2077,0 4120,-313 6023,-907 1161,-361 2271,-829 3306,-1394zm-8354 -5044c170,0 324,69 436,181 112,111 181,266 181,436 0,170 -69,324 -181,436l0 1c-112,111 -266,180 -436,180 -171,0 -325,-69 -437,-180 -111,-112 -181,-266 -181,-437 0,-170 70,-324 181,-436l1 0c112,-112 266,-181 436,-181zm-2016 0c170,0 324,69 436,181l0 0c112,112 181,266 181,436 0,170 -69,324 -181,436l0 1c-112,111 -266,180 -436,180 -170,0 -324,-69 -436,-180l0 -1c-112,-112 -181,-266 -181,-436 0,-170 69,-324 181,-436l0 0c112,-112 266,-181 436,-181zm-2792 -4062c525,0 1000,213 1344,557 345,344 557,820 557,1345 0,525 -212,1000 -557,1344 -344,344 -819,557 -1344,557 -525,0 -1000,-213 -1345,-557 -344,-344 -556,-819 -556,-1344 0,-525 212,-1001 556,-1345 345,-344 820,-557 1345,-557zm-6729 -149c-138,-27 -280,-41 -425,-41 -618,0 -1178,251 -1583,656 -405,405 -656,965 -656,1584 0,618 251,1178 656,1583 405,405 965,656 1583,656 140,0 276,-13 409,-38l19 -26c-56,-237 -104,-479 -142,-725 -78,-497 -119,-985 -119,-1458 0,-753 89,-1486 258,-2191zm22844 615c-405,-405 -965,-656 -1583,-656 -49,0 -97,2 -145,5 174,716 266,1461 266,2227 0,473 -41,961 -119,1458 -38,246 -86,488 -142,725 15,21 30,41 45,62 31,1 63,2 95,2 618,0 1178,-251 1583,-656 405,-405 656,-965 656,-1583 0,-619 -251,-1179 -656,-1584z"/>
</g>
<g>
<path class="fil2" d="M136084 59673c456,747 822,1532 1097,2340 347,1019 548,2066 600,3106 27,545 14,1090 -40,1631 -40,406 -104,809 -191,1206 69,48 136,97 201,148 172,132 336,275 491,428 520,512 916,1107 1186,1745 282,664 425,1369 431,2072 6,703 -127,1410 -397,2079 -260,642 -646,1243 -1158,1764 -512,520 -1107,916 -1745,1186 -664,281 -1370,425 -2072,431 -500,4 -1003,-63 -1496,-199 -310,-86 -614,-200 -907,-342 -73,108 -149,214 -228,319l-11 14c-187,246 -384,474 -590,683 -936,952 -2084,1596 -3361,1946 -1305,358 -2745,406 -4226,157 -1378,-230 -2795,-721 -4167,-1457 -1320,-707 -2599,-1640 -3762,-2784 -1163,-1144 -2116,-2408 -2844,-3716 -758,-1361 -1271,-2770 -1524,-4144 -273,-1477 -248,-2917 89,-4228 330,-1282 955,-2440 1891,-3392 201,-204 422,-401 663,-591l-2 -1c89,-70 179,-138 272,-204 -184,-321 -332,-657 -445,-1002 -175,-536 -265,-1090 -269,-1642 -6,-703 127,-1411 397,-2079 260,-642 646,-1243 1158,-1764 512,-520 1107,-916 1745,-1186 664,-281 1369,-425 2072,-431 703,-5 1411,127 2079,397 643,260 1244,646 1764,1159 190,186 365,387 524,598 75,98 145,198 212,299 401,-97 808,-170 1216,-219 553,-66 1112,-90 1673,-71 864,30 1656,142 2419,336 752,192 1473,465 2203,819l0 -1c765,343 1541,500 2262,473 704,-25 1355,-224 1887,-592 246,-171 584,-111 755,135 60,87 92,185 96,283 37,718 -44,1309 -218,1790 -62,172 -136,329 -220,473 52,8 104,15 157,21 365,46 750,65 1169,61 299,-3 544,237 548,537 1,157 -64,299 -170,399 -318,328 -616,593 -903,801 -104,77 -208,146 -311,209zm73 2690c-307,-898 -742,-1773 -1305,-2596l1 -1c-23,-34 -43,-72 -59,-113 -107,-279 33,-592 313,-699 140,-54 284,-126 435,-221 -391,-52 -764,-130 -1131,-237l0 -1c-117,-34 -223,-107 -296,-216 -168,-247 -104,-584 144,-752 231,-156 416,-392 537,-725 51,-142 91,-301 118,-479 -492,191 -1025,297 -1579,317 -889,33 -1833,-155 -2748,-566l0 -1 -15 -8c-667,-324 -1326,-574 -2014,-749 -684,-175 -1400,-276 -2185,-302 -505,-17 -1008,4 -1504,64 -483,58 -957,151 -1419,280 -248,91 -532,-11 -663,-250 -102,-186 -216,-364 -343,-532 -125,-165 -266,-326 -422,-479 -420,-414 -900,-724 -1410,-930 -528,-214 -1093,-318 -1661,-314 -567,5 -1131,119 -1655,341 -507,214 -982,532 -1396,952 -413,420 -723,901 -929,1410 -214,528 -318,1093 -314,1661 4,447 75,890 213,1312 134,411 330,804 589,1166 12,16 24,33 34,50 156,256 76,590 -180,746 -215,131 -424,275 -624,433l-1 -1c-188,148 -375,316 -562,506 -799,812 -1333,1803 -1616,2900 -298,1159 -318,2440 -75,3760 232,1256 706,2553 1408,3813 676,1215 1567,2394 2659,3469 1092,1074 2286,1946 3511,2603 1271,682 2576,1135 3835,1346 1324,222 2604,181 3759,-136 1092,-300 2074,-850 2873,-1662 187,-190 355,-383 502,-577l9 -12c156,-205 299,-423 430,-651l12 -20c157,-255 491,-334 746,-177 349,214 720,374 1101,480 387,108 791,160 1198,156 567,-4 1131,-118 1655,-340 507,-214 982,-532 1396,-952 413,-421 723,-901 929,-1410 214,-528 318,-1094 314,-1661 -5,-568 -118,-1132 -340,-1656 -215,-506 -532,-981 -953,-1395 -128,-126 -260,-241 -394,-345 -136,-105 -273,-199 -408,-281 -215,-115 -332,-366 -268,-613 120,-467 205,-944 253,-1426 48,-484 60,-975 35,-1469 -47,-946 -228,-1893 -540,-2810z"/>
<path class="fil2" d="M132742 64315c1749,1722 1772,4536 50,6285 -719,732 -1630,1161 -2574,1287 168,1653 -222,3147 -1227,4169 -1135,1153 -2885,1532 -4795,1212 -2075,-348 -4315,-1505 -6228,-3387 -1913,-1882 -3105,-4103 -3486,-6172 -351,-1906 -1,-3661 1134,-4814 1004,-1020 2488,-1434 4139,-1295 110,-949 525,-1869 1246,-2603 1722,-1749 4536,-1772 6285,-50 1161,1142 1562,2766 1196,4241 1469,-389 3099,-15 4260,1127zm-1784 1813c375,368 564,853 568,1340 4,486 -178,974 -546,1349 -368,374 -853,563 -1340,567 -487,4 -975,-178 -1349,-546 -374,-368 -564,-853 -568,-1340 -3,-486 178,-975 546,-1349 369,-374 854,-564 1340,-567 487,-4 975,177 1349,546zm-8166 2850c569,560 1076,1139 1507,1708 452,597 820,1185 1086,1730 287,588 461,1144 504,1629 55,626 -97,1156 -482,1548 -385,391 -913,551 -1540,506 -486,-35 -1044,-200 -1637,-478 -549,-257 -1143,-615 -1747,-1057 -576,-422 -1163,-920 -1731,-1479 -569,-560 -1076,-1139 -1507,-1708 -452,-597 -820,-1185 -1086,-1729 -287,-589 -461,-1144 -504,-1630 -55,-625 97,-1156 482,-1547 385,-392 913,-552 1540,-507 486,35 1044,200 1637,478 549,257 1143,615 1747,1057 576,422 1163,920 1731,1479zm65 2800c-374,-494 -822,-1005 -1335,-1509 -512,-504 -1030,-945 -1530,-1311 -512,-375 -1003,-673 -1445,-880 -398,-186 -738,-294 -996,-313 -89,-6 -114,-35 -124,-25 -9,10 19,35 27,124 23,257 136,596 329,990 214,439 520,925 903,1431 374,494 823,1005 1335,1509 513,504 1031,945 1530,1311 513,375 1004,673 1446,880 398,186 738,294 995,313 90,6 115,35 124,25 10,-10 -18,-35 -26,-124 -23,-257 -137,-595 -329,-990 -215,-439 -520,-925 -904,-1431zm2635 -4153c121,119 183,277 184,435 1,158 -58,316 -177,438 -120,121 -277,182 -435,184l-1 0c-158,1 -316,-58 -437,-177 -122,-120 -183,-277 -184,-435 -2,-158 57,-317 177,-438 119,-121 276,-183 434,-184l1 0c158,-1 317,58 438,177zm-1437 -1414c121,119 182,277 184,435l0 0c1,159 -58,317 -177,438 -119,121 -277,183 -435,184l0 0c-158,1 -317,-58 -438,-177 -121,-119 -182,-277 -184,-435l0 0c-1,-158 58,-317 177,-438 119,-121 277,-182 435,-184l0 0c159,-1 317,58 438,177zm1448 -5452c374,368 564,853 567,1340 4,487 -177,975 -546,1349 -368,374 -853,564 -1340,568 -486,4 -974,-178 -1348,-546 -375,-369 -564,-854 -568,-1340 -4,-487 178,-975 546,-1349 368,-375 853,-564 1340,-568 486,-4 975,178 1349,546zm11179 11615c-4,-572 -228,-1144 -669,-1577 -36,-36 -73,-71 -112,-103 -380,641 -842,1245 -1386,1798 -332,337 -703,656 -1107,956 -200,148 -404,287 -611,417l-5 40c26,28 53,56 80,83 441,434 1016,648 1589,644 573,-5 1144,-228 1578,-669 434,-441 648,-1016 643,-1589zm-15847 -16456c-81,-117 -173,-228 -279,-332 -440,-434 -1015,-648 -1588,-643 -573,5 -1144,228 -1578,669 -434,441 -648,1015 -643,1588 4,573 228,1144 668,1578 105,103 216,193 333,271 126,-207 261,-412 405,-613 293,-409 606,-785 938,-1122 535,-544 1120,-1008 1744,-1396z"/>
</g>
<g>
<path class="fil2" d="M55625 132004c-450,-751 -809,-1540 -1078,-2349 -339,-1022 -532,-2071 -575,-3111 -17,-413 -11,-829 19,-1245 20,-281 50,-559 92,-834 -133,-79 -264,-164 -390,-256 -239,-172 -463,-361 -669,-567 -516,-516 -907,-1114 -1172,-1754 -276,-666 -414,-1373 -414,-2076 0,-703 138,-1409 414,-2076 265,-640 655,-1238 1172,-1754 516,-516 1114,-907 1754,-1172 666,-276 1373,-414 2076,-414 541,0 1086,82 1612,246 320,99 633,230 935,391 114,-206 238,-407 373,-602 248,-360 524,-694 829,-1000 944,-944 2097,-1578 3377,-1918 1308,-348 2748,-384 4227,-124 1376,242 2789,744 4156,1491 1314,718 2585,1661 3739,2815 1153,1153 2096,2425 2814,3739 747,1366 1249,2779 1491,4155 260,1479 224,2919 -123,4228 -340,1279 -975,2432 -1919,3376 -298,299 -626,570 -980,816 -181,125 -365,241 -554,349 197,327 356,673 478,1030 197,573 295,1168 295,1758 0,703 -138,1410 -414,2076 -265,640 -656,1238 -1172,1754 -516,517 -1114,907 -1754,1173 -667,276 -1373,414 -2076,413 -703,0 -1410,-138 -2076,-413 -640,-266 -1238,-656 -1754,-1173 -240,-240 -455,-501 -646,-780 -110,-161 -210,-326 -300,-495 -285,45 -572,79 -861,101 -432,33 -866,41 -1298,23 -845,-36 -1624,-148 -2384,-346 -758,-198 -1491,-480 -2246,-854 -754,-343 -1523,-503 -2242,-483 -704,20 -1356,213 -1891,578 -247,169 -584,106 -754,-142 -59,-87 -90,-185 -94,-283 -30,-719 56,-1309 233,-1789 64,-171 139,-328 225,-471 -52,-8 -105,-15 -157,-22 -366,-49 -751,-71 -1169,-71 -299,1 -543,-241 -544,-541 0,-157 66,-299 173,-398 321,-325 621,-587 909,-793 105,-76 210,-144 313,-206zm-51 -2692c299,901 728,1780 1284,2607l-1 1c23,35 43,73 58,114 104,280 -38,592 -318,696 -141,53 -286,124 -438,217 391,56 764,137 1131,247l-1 1c117,35 222,109 295,218 166,249 98,585 -150,751 -233,154 -420,389 -544,721 -52,141 -93,300 -122,477 493,-187 1027,-288 1580,-304 881,-25 1815,167 2723,580l36 16c690,343 1354,599 2035,776 679,177 1383,278 2156,310 393,17 784,10 1169,-19 381,-29 759,-81 1133,-155 249,-57 511,68 618,311 107,246 237,483 390,706 147,217 320,426 519,624 417,417 895,731 1403,941 526,218 1090,327 1658,327 568,0 1132,-109 1658,-327 508,-210 986,-524 1403,-941 417,-417 731,-895 941,-1402 218,-527 327,-1091 327,-1659 0,-480 -77,-956 -232,-1407 -150,-439 -376,-861 -677,-1247 -24,-33 -46,-68 -64,-107 -126,-272 -8,-595 264,-721 341,-157 661,-338 958,-544 289,-201 567,-432 830,-696 806,-806 1349,-1792 1639,-2887 308,-1157 338,-2437 106,-3759 -222,-1258 -685,-2559 -1377,-3825 -667,-1219 -1548,-2406 -2631,-3489 -1084,-1084 -2270,-1965 -3490,-2632 -1266,-692 -2566,-1155 -3825,-1376 -1321,-233 -2602,-202 -3759,105 -1095,291 -2081,833 -2887,1639 -267,267 -502,550 -706,847 -211,306 -394,633 -551,977l-1 0c-13,30 -29,58 -48,86 -171,245 -509,306 -754,135 -362,-250 -756,-439 -1167,-567 -417,-130 -853,-195 -1291,-195 -568,0 -1132,109 -1659,327 -507,211 -985,524 -1402,941 -417,417 -731,895 -941,1403 -218,526 -327,1091 -327,1658 0,568 109,1132 327,1658 210,508 524,986 941,1403 173,173 351,325 533,456 185,134 378,250 576,350 225,100 361,345 313,597 -69,366 -117,733 -143,1101 -27,368 -32,743 -16,1121 40,947 213,1895 518,2814z"/>
<g>
<path class="fil2" d="M70265 136206l52 -27c18,-9 36,-19 54,-29 21,-10 41,-22 62,-33l-168 89zm321 -174c22,-12 44,-25 67,-38l44 -25c22,-13 43,-26 65,-39l42 -25c23,-14 46,-28 69,-42l35 -22c25,-15 50,-31 75,-47l30 -19c27,-17 54,-35 81,-52l24 -16c27,-18 55,-36 82,-55l25 -16c27,-19 54,-37 81,-56l17 -12c29,-20 58,-41 87,-61l17 -12c29,-21 57,-42 86,-63l18 -14c30,-21 59,-43 89,-65l12 -10c29,-22 59,-45 88,-68l13 -10c30,-23 60,-46 89,-70l8 -6c30,-24 60,-49 91,-74l11 -9c30,-25 59,-50 89,-75l10 -8c30,-26 60,-51 90,-77l7 -7c30,-26 60,-52 89,-79l5 -4c30,-27 61,-55 92,-83l4 -4c30,-28 59,-55 88,-83l11 -9c28,-28 57,-55 86,-83l6 -7c30,-29 60,-58 90,-88 335,-335 651,-708 947,-1114l9 -13c75,59 147,122 216,191 438,437 656,1010 656,1583 0,573 -218,1146 -656,1584 -437,437 -1010,656 -1583,656 -573,0 -1146,-219 -1583,-656 -153,-153 -280,-323 -379,-504 13,-6 26,-13 39,-20l321 -174zm-11582 -8644c-1735,-1735 -1735,-4549 0,-6285 726,-726 1641,-1148 2586,-1266 -155,-1654 246,-3145 1260,-4159 1144,-1144 2897,-1509 4805,-1173 2072,364 4302,1539 6200,3436 1898,1898 3072,4129 3437,6201 335,1908 -29,3660 -1174,4804 -1011,1012 -2499,1414 -4149,1262 -117,948 -540,1865 -1267,2592 -1736,1736 -4550,1736 -6285,0 -1152,-1152 -1539,-2779 -1162,-4250 -1471,377 -3098,-10 -4251,-1162zm5226 -9050c-468,170 -985,-72 -1155,-540 -170,-468 72,-985 540,-1155 1390,-503 2980,-479 4543,2 1518,468 3019,1367 4283,2631 1169,1170 2032,2548 2525,3960 505,1446 623,2932 290,4276 -120,484 -610,780 -1095,660 -485,-120 -780,-611 -660,-1095 247,-998 150,-2127 -241,-3246 -403,-1156 -1120,-2295 -2099,-3274 -1057,-1057 -2296,-1804 -3538,-2187 -1197,-368 -2386,-397 -3393,-32zm-3427 7252c-372,-371 -557,-858 -557,-1344 0,-487 185,-974 557,-1345 371,-371 857,-557 1344,-557 487,0 973,186 1345,557 371,371 556,858 556,1345 0,486 -185,973 -556,1344 -372,371 -858,557 -1345,557 -487,0 -973,-186 -1344,-557zm5412 5412c-371,-371 -557,-857 -557,-1344 0,-487 185,-973 557,-1345 371,-371 858,-556 1344,-556 487,0 974,185 1345,556 371,372 557,858 557,1345 0,487 -186,973 -557,1344 -372,372 -858,557 -1345,557 -486,0 -973,-185 -1344,-557zm897 -4846c-120,-120 -180,-278 -180,-436l0 -1c0,-158 60,-316 180,-436 121,-120 278,-180 437,-180l0 0c158,0 316,60 436,180 121,120 181,278 181,436l0 1c0,158 -60,316 -181,436 -120,120 -278,180 -436,180l0 0c-159,0 -316,-60 -437,-180zm-1425 -1425c-120,-121 -181,-279 -181,-437 0,-158 61,-316 181,-436 121,-120 278,-181 436,-181l1 0c158,0 316,61 436,181 121,120 181,278 181,436 0,158 -60,316 -181,437 -120,120 -278,180 -436,180l-1 0c-158,0 -316,-60 -436,-180zm-11072 -4919c0,573 218,1146 655,1583 86,86 177,163 272,232 442,-880 1027,-1701 1755,-2429 335,-335 708,-651 1115,-947l27 -20 -2 -2c-437,-437 -1010,-656 -1583,-656 -573,0 -1146,219 -1584,656 -437,437 -655,1010 -655,1583z"/>
</g>
</g>
<g>
<path class="fil2" d="M59996 55625c751,-450 1540,-809 2349,-1078 1022,-339 2071,-532 3112,-575 439,-19 879,-11 1317,24 304,24 606,60 905,109 74,-119 153,-237 238,-352 162,-221 342,-432 540,-630 516,-517 1114,-907 1754,-1172 666,-276 1373,-414 2076,-414 703,0 1409,138 2076,414 640,265 1238,655 1754,1172 516,516 907,1114 1172,1754 276,666 414,1373 414,2076 0,535 -79,1070 -237,1587 -97,317 -224,627 -381,927 187,108 369,224 546,348 334,236 648,498 938,788 944,944 1578,2097 1918,3377 348,1308 384,2748 124,4227 -242,1376 -744,2789 -1491,4156 -718,1313 -1661,2585 -2815,3739 -1153,1153 -2425,2096 -3739,2814 -1366,747 -2779,1249 -4155,1491 -1479,260 -2919,224 -4228,-123 -1279,-340 -2432,-975 -3376,-1919 -283,-283 -541,-590 -773,-917 -114,-162 -222,-328 -324,-500 -327,194 -670,351 -1023,470 -564,190 -1151,285 -1734,285 -703,0 -1410,-138 -2076,-414 -640,-265 -1238,-656 -1754,-1172 -517,-516 -907,-1114 -1173,-1754 -276,-667 -413,-1373 -413,-2076 0,-703 138,-1410 414,-2076 265,-640 655,-1238 1172,-1754 227,-227 477,-434 744,-620 149,-103 301,-198 456,-284 -54,-309 -94,-620 -120,-931 -37,-454 -47,-911 -28,-1369 55,-1306 530,-2694 969,-3980 378,-1106 728,-2131 715,-2850 -7,-367 -60,-719 -159,-1046 -96,-319 -236,-617 -420,-887 -169,-247 -106,-584 142,-754 87,-59 185,-90 283,-94 719,-30 1309,55 1789,233 171,64 328,139 471,224 8,-52 16,-104 23,-157 48,-365 70,-750 70,-1168 -1,-299 241,-543 541,-544 157,0 299,66 398,173 325,321 587,621 793,909 76,105 145,210 206,313zm2692 -51c-901,299 -1780,727 -2607,1284l-1 -1c-35,23 -73,43 -114,58 -280,104 -592,-38 -696,-318 -53,-141 -124,-286 -217,-438 -55,391 -137,763 -246,1130l-2 -1c-34,117 -109,222 -218,295 -248,166 -585,99 -751,-150 -154,-232 -388,-420 -721,-543 -141,-52 -300,-93 -478,-122 36,96 70,194 100,293 129,427 198,878 206,1341 17,905 -364,2019 -775,3222 -413,1210 -860,2517 -908,3674 -18,414 -9,826 25,1234 34,409 93,812 178,1207 51,243 -70,498 -305,605 -233,106 -458,233 -672,382 -203,141 -402,307 -594,500 -417,417 -731,895 -941,1403 -218,526 -327,1090 -327,1658 0,568 109,1132 327,1658 210,508 524,986 941,1403 417,417 895,731 1402,941 527,218 1091,327 1659,327 471,0 940,-75 1386,-226 437,-147 856,-366 1236,-656l1 0c28,-21 58,-40 91,-56 268,-131 592,-19 723,249 150,308 325,606 527,890 194,273 413,533 659,779 806,806 1792,1348 2887,1639 1157,308 2437,338 3759,106 1258,-222 2559,-685 3825,-1377 1220,-667 2406,-1548 3489,-2631 1084,-1084 1965,-2270 2632,-3490 692,-1266 1155,-2567 1376,-3825 233,-1321 203,-2602 -105,-3759 -291,-1095 -833,-2081 -1639,-2887 -250,-250 -516,-473 -797,-670 -285,-201 -588,-378 -905,-529 -26,-13 -52,-27 -77,-44 -248,-168 -312,-506 -144,-754 243,-359 426,-748 550,-1153 126,-412 189,-841 189,-1269 0,-568 -109,-1132 -327,-1659 -210,-507 -524,-985 -941,-1402 -417,-417 -895,-731 -1403,-941 -526,-218 -1091,-327 -1658,-327 -568,0 -1132,109 -1658,327 -508,210 -986,524 -1403,941 -161,161 -306,330 -435,506 -132,179 -248,367 -349,562l0 -1c-109,210 -347,331 -590,281 -384,-78 -772,-132 -1162,-163 -392,-31 -789,-38 -1188,-21 -947,40 -1895,213 -2814,518z"/>
<path class="fil2" d="M64612 59004c1735,-1735 4549,-1735 6285,0 726,726 1148,1640 1266,2586 1654,-155 3145,246 4159,1260 1144,1144 1509,2897 1173,4805 -364,2072 -1539,4302 -3436,6200 -1898,1898 -4129,3072 -6201,3436 -1908,336 -3660,-28 -4804,-1173 -1012,-1011 -1414,-2499 -1262,-4149 -947,-117 -1865,-540 -2592,-1267 -1736,-1736 -1736,-4550 0,-6285 1152,-1152 2779,-1539 4250,-1162 -377,-1472 10,-3099 1162,-4251zm1798 1798c371,-371 858,-556 1344,-556 487,0 974,185 1345,556 371,372 557,858 557,1345 0,487 -186,973 -557,1344 -371,372 -858,557 -1345,557 -486,0 -973,-185 -1344,-557 -371,-371 -557,-857 -557,-1344 0,-487 186,-973 557,-1345zm7000 3207c-3,-147 30,-298 104,-438 32,-62 71,-119 116,-170 204,-272 553,-416 908,-342 222,46 408,170 535,338 26,18 52,36 78,56 145,105 270,211 376,316 1038,1038 1248,2647 748,4409 -450,1586 -1489,3328 -3012,4850 -1522,1523 -3264,2562 -4850,3012 -1762,500 -3371,290 -4409,-748 -96,-96 -191,-206 -285,-331 -86,-113 -165,-235 -239,-365 -228,-403 -113,-906 252,-1173 111,-105 251,-183 411,-221 867,-203 1826,-630 2800,-1234 994,-615 1994,-1411 2922,-2338 960,-961 1775,-1992 2395,-3011 548,-901 944,-1792 1150,-2610zm-7297 10429c504,109 1125,59 1804,-133 1302,-369 2760,-1251 4066,-2557 1306,-1306 2187,-2764 2557,-4065 192,-679 242,-1300 133,-1805 -237,554 -530,1118 -873,1682 -700,1150 -1605,2299 -2655,3350 -1022,1022 -2133,1904 -3246,2594 -597,369 -1196,683 -1786,934zm-269 -7326c120,-120 278,-180 436,-180l1 0c158,0 316,60 436,180 120,121 180,278 180,437l0 0c0,158 -60,316 -180,436 -120,120 -278,181 -436,181l-1 0c-158,0 -316,-61 -436,-181 -120,-120 -180,-278 -180,-436l0 0c0,-159 60,-316 180,-437zm1425 -1425c121,-120 279,-181 437,-181 158,0 316,61 436,181 120,120 181,278 181,436l0 1c0,158 -61,316 -181,436 -120,121 -278,181 -436,181 -158,0 -316,-60 -437,-181 -120,-120 -180,-278 -180,-436l0 -1c0,-158 60,-316 180,-436zm-6271 528c371,-372 857,-557 1344,-557 487,0 973,185 1345,557 371,371 557,858 557,1344 0,487 -186,973 -557,1345 -372,371 -858,557 -1345,557 -487,0 -973,-186 -1344,-557 -372,-372 -557,-858 -557,-1345 0,-486 185,-973 557,-1344zm11289 -11502c-573,0 -1146,219 -1583,656 -14,14 -27,27 -40,41l-1 2 -19 20 -1 0c-19,21 -38,42 -56,63l-1 1 -17 20 -2 3 -16 20 -2 1c-11,14 -23,29 -34,43l-1 1 -15 20 -1 2c833,434 1610,997 2304,1691 335,335 651,708 947,1115 35,47 69,95 102,143l19 -19c437,-437 656,-1010 656,-1583 0,-573 -219,-1146 -656,-1584 -437,-437 -1010,-656 -1583,-656zm-16452 15633l-16 9 -10 6 -10 6 -11 7 -15 9 -9 6 -18 11 -4 3 -18 12 -7 4 -14 10 -10 7 -14 9 -8 5 -17 12 -7 5 -17 13 -3 2 -18 14 -6 4 -17 13 -6 4 -18 15 -1 0 -18 15 -7 6 -17 14 -3 2 -20 17 0 0c-14,13 -28,25 -42,37l-2 2 -19 18 -2 1 -18 17 -3 3 -19 18 -2 2 -20 20c-437,437 -656,1010 -656,1583 0,573 219,1146 656,1583 438,437 1011,656 1584,656 573,0 1146,-219 1583,-656 13,-13 26,-26 38,-39l4 -4 16 -17 4 -4 17 -19 1 -1c6,-6 12,-13 18,-20l1 -1 18 -21 1 -1 16 -19 4 -5 12 -14 7 -9 13 -17 2 -2 14 -18 6 -7 11 -15 2 -2c-42,-29 -84,-59 -126,-89 -406,-296 -779,-612 -1114,-947 -680,-680 -1235,-1440 -1665,-2253l-1 0z"/>
</g>
<g>
<path class="fil2" d="M92909 150008c-849,-213 -1661,-516 -2423,-899 -963,-482 -1840,-1088 -2607,-1793 -405,-373 -781,-775 -1124,-1202 -257,-320 -497,-657 -716,-1008 -80,14 -160,25 -239,34 -213,26 -428,39 -643,39 -730,0 -1429,-147 -2069,-412 -666,-276 -1264,-678 -1761,-1175 -980,-980 -1586,-2334 -1586,-3830 0,-730 146,-1429 411,-2069 276,-666 678,-1263 1175,-1760 352,-352 757,-658 1203,-906 281,-156 576,-288 884,-393 -22,-124 -42,-250 -58,-377 -39,-308 -59,-609 -59,-902 0,-1335 366,-2599 1030,-3744 680,-1171 1673,-2215 2903,-3077 1143,-801 2498,-1446 3992,-1884 1437,-421 3003,-654 4634,-654 1632,0 3197,233 4634,654 1494,438 2849,1083 3992,1884 1230,862 2223,1906 2903,3077 664,1145 1031,2409 1031,3744 0,293 -19,584 -54,872 -14,108 -29,215 -48,322 355,101 696,236 1018,403 499,259 951,591 1341,981 497,497 899,1094 1175,1760 265,640 411,1339 411,2069 0,731 -146,1430 -411,2070 -276,666 -678,1263 -1175,1760 -497,497 -1094,899 -1761,1175 -640,265 -1339,412 -2069,412 -262,0 -524,-20 -785,-58 -120,-17 -238,-38 -354,-63 -222,358 -462,699 -720,1023 -350,439 -735,852 -1151,1235 -636,585 -1280,1061 -1960,1457 -671,391 -1376,702 -2144,962l0 1c-785,292 -1449,725 -1944,1249 -484,512 -809,1110 -929,1746 -56,294 -339,488 -633,433 -104,-19 -195,-67 -268,-134 -529,-487 -886,-965 -1099,-1429 -77,-166 -134,-330 -175,-492 -43,31 -85,63 -127,95 -292,224 -581,480 -876,776 -211,213 -555,214 -767,2 -111,-110 -164,-258 -159,-403 -4,-457 24,-855 81,-1204 21,-128 47,-250 76,-367zm-1939 -1867c848,425 1773,744 2751,936l0 1c41,8 82,21 121,39 272,124 392,446 268,718 -63,136 -114,289 -156,462 315,-237 636,-443 973,-624l0 1c107,-58 234,-80 363,-54 293,58 483,344 425,637 -55,273 -22,571 126,893 63,137 146,278 251,424 217,-481 522,-930 903,-1333 611,-646 1416,-1175 2356,-1524l1 1 16 -5c703,-237 1348,-521 1962,-878 609,-356 1190,-786 1768,-1318 376,-345 722,-716 1036,-1111 307,-385 581,-787 818,-1202 111,-242 386,-371 648,-293 200,60 404,106 611,136 202,29 413,44 632,44 590,0 1149,-116 1657,-326 526,-218 1003,-540 1404,-942 401,-401 723,-877 941,-1403 211,-508 327,-1068 327,-1658 0,-589 -116,-1149 -327,-1657 -218,-526 -540,-1002 -941,-1404 -315,-315 -675,-580 -1069,-784 -387,-201 -808,-345 -1253,-421l0 -1 -38 -8c-291,-71 -469,-365 -397,-656 59,-237 105,-483 136,-735 30,-243 45,-491 45,-741 0,-1140 -314,-2220 -882,-3200 -601,-1036 -1485,-1963 -2584,-2733 -1046,-733 -2293,-1325 -3678,-1731 -1334,-391 -2796,-607 -4328,-607 -1532,0 -2994,216 -4328,607 -1384,406 -2632,998 -3678,1731 -1099,770 -1983,1697 -2584,2733 -568,980 -882,2060 -882,3200 0,269 16,525 47,767 31,245 78,490 140,733l11 39c66,293 -116,584 -408,650 -397,92 -772,239 -1118,430 -350,195 -673,440 -960,727 -401,402 -723,878 -941,1404 -211,508 -327,1068 -327,1657 0,1196 485,2278 1268,3061 402,402 878,724 1404,942 508,210 1067,326 1657,326 178,0 350,-10 516,-29 179,-22 347,-52 505,-90 228,-55 474,44 597,257 240,418 516,821 825,1205 308,384 647,746 1014,1083 697,641 1490,1190 2356,1624z"/>
<path class="fil2" d="M92035 144355c-2454,0 -4444,-1990 -4444,-4445 0,-1026 348,-1971 932,-2723 -1279,-1060 -2049,-2398 -2049,-3832 0,-1618 981,-3115 2568,-4227 1723,-1207 4130,-1954 6814,-1954 2684,0 5091,747 6814,1954 1587,1112 2568,2609 2568,4227 0,1431 -767,2767 -2042,3826 587,753 937,1700 937,2729 0,2455 -1989,4445 -4444,4445 -1629,0 -3053,-877 -3827,-2184 -774,1307 -2198,2184 -3827,2184zm3821 -10517c-374,0 -736,-76 -1070,-214 -349,-145 -660,-353 -914,-608 -255,-255 -463,-565 -608,-914 -138,-334 -215,-696 -215,-1070 0,-375 77,-736 215,-1070 145,-350 353,-660 608,-915 254,-255 565,-463 914,-607 334,-139 696,-215 1070,-215 375,0 736,76 1070,215 350,144 660,352 915,607 255,255 462,565 607,915 138,334 215,695 215,1070 0,374 -77,736 -215,1070 -145,349 -352,659 -607,914 -255,255 -565,463 -915,608 -334,138 -695,214 -1070,214zm-975 3912c-170,0 -324,-69 -436,-181 -112,-111 -181,-266 -181,-436 0,-170 69,-324 181,-436l0 -1c112,-111 266,-180 436,-180 171,0 325,69 437,180 112,112 181,266 181,437 0,170 -69,324 -181,436l-1 0c-112,112 -266,181 -436,181zm2016 0c-170,0 -324,-69 -436,-181l0 0c-112,-112 -181,-266 -181,-436 0,-170 69,-324 181,-436l0 -1c112,-111 266,-180 436,-180 170,0 324,69 436,180l0 1c112,112 181,266 181,436 0,170 -69,324 -181,436l0 0c-112,112 -266,181 -436,181zm-4862 4062c-525,0 -1000,-213 -1344,-557 -345,-344 -557,-820 -557,-1345 0,-525 212,-1000 557,-1344 344,-344 819,-557 1344,-557 525,0 1000,213 1345,557 344,344 556,819 556,1344 0,525 -212,1001 -556,1345 -345,344 -820,557 -1345,557zm7654 0c-525,0 -1000,-213 -1344,-557 -344,-344 -557,-820 -557,-1345 0,-525 213,-1000 557,-1344 344,-344 819,-557 1344,-557 525,0 1000,213 1345,557 344,344 556,819 556,1344 0,525 -212,1001 -556,1345 -345,344 -820,557 -1345,557zm-4217 -9857c114,47 243,73 384,73 141,0 270,-26 384,-73 116,-48 225,-123 320,-219 96,-96 171,-204 219,-320 47,-114 73,-244 73,-384 0,-141 -26,-270 -73,-384 -48,-116 -123,-225 -219,-321 -95,-95 -204,-170 -320,-218 -114,-47 -243,-73 -384,-73 -141,0 -270,26 -384,73 -116,48 -225,123 -320,218 -96,96 -171,205 -219,321 -47,114 -73,243 -73,384 0,140 26,270 73,384 48,116 123,224 219,320 95,96 204,170 320,219zm-11898 9391c405,405 965,656 1583,656 49,0 97,-2 146,-5 -175,-716 -267,-1461 -267,-2227 0,-473 41,-961 119,-1458 38,-246 86,-488 143,-725 -16,-21 -31,-41 -46,-62 -31,-1 -63,-2 -95,-2 -618,0 -1178,251 -1583,656 -405,405 -656,965 -656,1583 0,619 251,1179 656,1584zm22844 615c138,27 280,41 425,41 618,0 1178,-251 1583,-656 405,-405 656,-965 656,-1584 0,-618 -251,-1178 -656,-1583 -405,-405 -965,-656 -1583,-656 -140,0 -276,13 -409,38l-19 26c56,237 104,479 142,725 78,497 119,985 119,1458 0,753 -89,1486 -258,2191z"/>
</g>
</g>
<g>
<circle class="fil0" cx="96123" cy="95877" r="6029"/>
<g>
<path class="fil3" d="M72166 101293l0 -52c166,-1067 209,-2321 1052,-3563l0 0c56,-73 114,-145 175,-215 870,-995 2102,-1493 3693,-1493 1574,0 2799,493 3678,1479 846,938 1271,2204 1271,3797 0,1540 -406,2785 -1214,3735 -863,1007 -2048,1512 -3562,1512 -2133,0 -3619,-796 -4463,-2389 -420,-794 -630,-1732 -630,-2811zm2118 -69c0,998 216,1806 645,2425 495,721 1223,1081 2180,1081 965,0 1690,-363 2181,-1088 417,-619 626,-1432 626,-2439 0,-1019 -206,-1827 -619,-2425 -481,-696 -1209,-1045 -2188,-1045 -981,0 -1713,351 -2199,1053 -417,602 -626,1415 -626,2438zm9014 8141l1593 0 0 -3628c135,263 310,457 528,583 218,126 491,187 820,187 353,0 643,-71 872,-215 230,-143 410,-363 543,-662 133,-298 223,-677 275,-1135 50,-457 76,-1002 76,-1630 0,-621 -29,-1155 -83,-1603 -57,-450 -154,-820 -294,-1111 -137,-292 -325,-507 -557,-645 -232,-140 -524,-208 -877,-208 -334,0 -618,75 -853,227 -235,152 -415,375 -545,666l0 -709 -1498 0 0 9883zm1567 -6738c0,-355 7,-661 23,-917 17,-253 52,-464 107,-628 57,-166 137,-284 246,-362 109,-76 256,-114 441,-114 168,0 299,45 396,132 97,88 171,223 220,411 48,185 79,421 93,708 14,287 21,626 21,1022 0,393 -5,732 -14,1021 -10,287 -38,524 -85,711 -50,188 -124,327 -221,420 -97,92 -232,140 -410,140 -194,0 -346,-50 -453,-150 -109,-99 -191,-253 -246,-462 -57,-208 -90,-471 -102,-792 -12,-319 -16,-699 -16,-1140zm7335 1349c0,467 -59,808 -178,1026 -118,216 -322,325 -614,325 -298,0 -502,-140 -616,-419 -114,-278 -171,-726 -171,-1339 0,-79 0,-152 0,-223 0,-74 5,-150 15,-223l3116 0 0 -514c0,-283 -4,-546 -14,-792 -7,-244 -28,-472 -61,-683 -34,-210 -81,-403 -145,-576 -66,-175 -154,-331 -265,-476 -200,-263 -448,-460 -749,-590 -301,-131 -666,-194 -1098,-194 -855,0 -1481,241 -1879,727 -119,145 -211,306 -280,486 -69,180 -118,382 -154,602 -33,218 -54,460 -64,721 -9,260 -14,545 -14,850 0,361 2,695 9,1003 7,308 31,592 69,853 40,261 100,500 180,716 81,213 192,412 334,593 195,229 434,398 723,502 287,104 640,156 1060,156 789,0 1372,-182 1744,-545 372,-362 559,-934 559,-1716 0,-40 0,-83 0,-125 0,-41 -4,-90 -14,-145l-1493 0zm-1579 -1934c0,-80 -2,-144 -7,-194 -4,-50 -7,-86 -7,-109 0,-436 57,-756 169,-958 109,-201 315,-303 616,-303 154,0 280,24 379,73 100,50 178,126 232,225 55,102 95,233 119,392 23,161 35,350 35,571l0 303 -1536 0zm4321 4280l1593 0 0 -4365c0,-451 52,-782 154,-998 102,-216 292,-325 569,-325 260,0 434,88 524,261 87,175 132,448 132,818l0 4609 1593 0 0 -5372c0,-546 -140,-958 -419,-1235 -280,-278 -671,-417 -1174,-417 -315,0 -592,75 -836,225 -244,149 -446,367 -607,654l0 -695 -1529 0 0 6840zm5961 0l1706 0 0 -4010 2890 0 0 -1450 -2890 0 0 -2147 3063 0 0 -1494 -4769 0 0 9101zm8219 -2346c0,467 -59,808 -177,1026 -119,216 -323,325 -614,325 -299,0 -503,-140 -616,-419 -114,-278 -171,-726 -171,-1339 0,-79 0,-152 0,-223 0,-74 5,-150 14,-223l3117 0 0 -514c0,-283 -5,-546 -14,-792 -7,-244 -29,-472 -62,-683 -33,-210 -80,-403 -144,-576 -67,-175 -155,-331 -266,-476 -199,-263 -448,-460 -749,-590 -301,-131 -666,-194 -1097,-194 -856,0 -1482,241 -1880,727 -118,145 -211,306 -279,486 -69,180 -119,382 -155,602 -33,218 -54,460 -63,721 -10,260 -15,545 -15,850 0,361 3,695 10,1003 7,308 31,592 68,853 41,261 100,500 181,716 80,213 192,412 334,593 194,229 434,398 723,502 287,104 640,156 1059,156 789,0 1372,-182 1745,-545 372,-362 559,-934 559,-1716 0,-40 0,-83 0,-125 0,-41 -5,-90 -14,-145l-1494 0zm-1578 -1934c0,-80 -2,-144 -7,-194 -5,-50 -7,-86 -7,-109 0,-436 57,-756 168,-958 109,-201 315,-303 616,-303 154,0 280,24 380,73 99,50 177,126 232,225 54,102 95,233 118,392 24,161 36,350 36,571l0 303 -1536 0zm4079 2005l0 270c0,754 180,1306 538,1659 358,354 915,531 1671,531 735,0 1292,-168 1666,-502 375,-337 562,-804 562,-1406 0,-315 -52,-583 -157,-808 -104,-225 -248,-429 -433,-614 -185,-184 -406,-362 -657,-530 -253,-169 -528,-356 -829,-560 -140,-97 -263,-185 -373,-263 -108,-78 -199,-156 -270,-232 -71,-76 -125,-157 -163,-240 -38,-82 -55,-175 -55,-277 0,-175 57,-320 173,-431 116,-112 275,-166 479,-166 273,0 472,76 592,230 124,151 185,391 185,720l0 145 1394 0 0 -147c0,-1420 -692,-2128 -2074,-2128 -723,0 -1270,161 -1642,481 -372,322 -560,784 -560,1384 0,284 41,531 121,744 83,213 199,408 351,590 154,180 344,353 571,524 225,168 486,348 778,543 156,106 301,201 429,284 130,85 244,166 339,247 94,83 165,166 218,253 49,88 75,190 75,306 0,209 -63,372 -192,493 -125,121 -303,180 -530,180 -287,0 -486,-83 -600,-249 -114,-166 -171,-443 -171,-829l0 -202 -1436 0zm8535 1157l182 1095c-339,73 -652,109 -941,109 -926,0 -1472,-304 -1635,-910 -74,-278 -111,-726 -111,-1347l0 -4242 -911 0 0 -967 911 0 0 -1825 1237 -749 0 2574 1265 0 0 967 -1265 0 0 4299c0,365 31,609 90,728 99,194 305,292 623,292 149,0 334,-8 555,-24z"/>
<path class="fil3" d="M115025 79602l-6347 7296c1504,1478 2638,3131 3400,4697l-4669 2698c0,0 -1892,-4442 -5454,-7120 410,942 632,1984 632,3074 0,4281 -3492,7778 -7769,7778 -4503,0 -8070,-3863 -7756,-8323l3972 479c-536,1975 963,4016 3078,4016 1744,0 3191,-1430 3191,-3191 0,-4687 -5328,-5834 -9133,-4221 -2368,1007 -4273,2486 -6880,4495 -2665,-2494 -5437,-4892 -8214,-7328l2733 -3105 7042 6880c531,-432 1141,-885 1809,-1343l-4491 -6029 2603 -1801 4064 6487c1233,-675 2602,-1303 4102,-1787l-3418 -10716 5175 -1248 2141 11088c819,-92 1643,-140 2472,-136l1910 -9020 3753 872 -2677 8428c2817,1768 3578,2549 5578,4955l7714 -9236 1439 1361z"/>
</g>
<path class="fil4" d="M85575 112548l58 2168 2419 -141 35 773 -2618 2483 24 1972 5083 -59 -12 -2171 -2418 176 2219 -2008 -270 -2700 -517 -493 -4003 0zm10061 -82l-3182 140 -1221 364 177 6833 4097 -59 1068 -152 153 -6211 -1092 -915zm-1021 5189l-1362 23 -47 -3087 1503 -118 -94 3182zm3017 -5107l59 2168 2418 -141 35 773 -2618 2483 24 1972 5083 -59 -12 -2171 -2418 176 2219 -2008 -270 -2700 -517 -493 -4003 0zm5189 1054l223 1994 1397 -669 -70 4947 2406 -106 -35 -7220 -2207 47 -1714 1007z"/>
<polygon class="fil3" points="76666,109003 115580,109003 115580,109727 76666,109727 "/>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 50 KiB

BIN
img/banner-back-2022.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 934 KiB

BIN
img/banner-back-2022.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

BIN
img/banner-back-2023.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

BIN
img/banner-back-2024.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 389 KiB

BIN
img/banner-bg-2016.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

BIN
img/banner-bg-2017.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

BIN
img/banner-bg-2018.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

BIN
img/banner-bg-2019.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

BIN
img/banner-bg-2020.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

BIN
img/banner-bg-2021.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

79
img/banner-bg-2021.svg Normal file
View File

@ -0,0 +1,79 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Creator: CorelDRAW X7 -->
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="1920px" height="1000px" version="1.1" style="shape-rendering:geometricPrecision; text-rendering:geometricPrecision; image-rendering:optimizeQuality; fill-rule:evenodd; clip-rule:evenodd"
viewBox="0 0 192000 100000"
xmlns:xlink="http://www.w3.org/1999/xlink">
<defs>
<style type="text/css">
<![CDATA[
.str0 {stroke:#FFE16B;stroke-width:600.01;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:600.009567 1800.028701}
.fil0 {fill:none}
.fil4 {fill:#9EE3CC}
.fil1 {fill:whitesmoke}
.fil5 {fill:white}
.fil2 {fill:gray;fill-rule:nonzero}
.fil3 {fill:#FFE16B;fill-rule:nonzero}
]]>
</style>
</defs>
<g id="Layer_x0020_1">
<metadata id="CorelCorpID_0Corel-Layer"/>
<g id="_1659027276032">
<rect class="fil0" width="192000" height="100000"/>
<g>
<rect class="fil1" x="38849" y="28254" width="113800" height="49193"/>
<polygon class="fil2" points="41089,29137 41222,24905 43881,24861 43779,22348 38400,22759 38444,31400 44219,31694 44219,28961 "/>
<path id="1" class="fil2" d="M51802 22465l-6319 103 -220 8715 2586 294 4336 -179 308 -1663 -691 -7270zm-3997 6599l74 -4086 1631 89 191 3923 -1896 74z"/>
<path id="2" class="fil2" d="M56784 22333l44 1220 -2836 44 -793 1381 147 4306 1219 1220 2293 -74 29 1426 2778 -191 -15 -1235 2778 -220 793 -1337 -117 -4203 -941 -1132 -2557 -59 0 -1263 -2822 117zm-1190 3659l1396 -44 0 2043 -1308 29 -88 -2028zm5305 15l30 1896 -1294 0 0 -1925 1264 29z"/>
<polygon id="3" class="fil2" points="68659,31724 71598,31636 71524,26492 71524,22465 68614,22495 68629,23656 67674,25258 66895,26536 66822,22612 64132,22612 64147,31415 66880,31562 66866,30313 67938,28491 68644,27462 "/>
<path id="4" class="fil2" d="M76521 28843l558 103 -132 2837 3013 -162 -265 -9141 -4188 -15 -2219 265 -221 4923 985 500 -1808 2733 2660 1029 1617 -3072zm793 -2145l-1499 29 -14 -1925 1543 -118 -30 2014z"/>
<polygon id="5" class="fil2" points="83766,32106 84912,32547 88689,22348 87484,21936 "/>
<polygon id="6" class="fil2" points="38281,36500 38143,43476 40314,43487 40337,39803 40984,41154 42231,41062 42809,39768 42959,43522 45119,43372 44853,36338 42970,36269 41561,39018 40129,36269 "/>
<path id="7" class="fil2" d="M51321 38995l-1675 -2738 -2033 81 -1443 2992 -301 4134 1987 35 58 -1236 1651 -139 116 1433 2079 -93 -439 -4469zm-3327 1536l104 -1040 601 -1305 624 1328 80 936 -1409 81z"/>
<path id="8" class="fil2" d="M56633 35299l578 -878 -1386 -35 -104 382 -162 173 -404 11 -139 -231 -104 -346 -1374 46 728 1063 335 300 1432 58 600 -543zm-600 8258l2310 -70 -58 -4042 0 -3164 -2287 23 12 912 -751 1259 -612 1005 -58 -3084 -2113 0 11 6918 2148 116 -11 -982 843 -1432 554 -809 12 3350z"/>
<polygon id="9" class="fil2" points="59636,36500 59498,43476 61669,43487 61692,39803 62339,41154 63586,41062 64163,39768 64314,43522 66473,43372 66208,36338 64325,36269 62916,39018 61484,36269 "/>
<polygon id="10" class="fil2" points="70816,40762 70804,41697 67617,41512 67443,43545 72017,43672 73103,42355 72987,36223 70816,36165 70816,38948 69545,38821 69476,36246 67293,36292 67397,40762 "/>
<polygon id="11" class="fil2" points="77618,43557 79928,43487 79871,39445 79871,36154 77584,36246 77595,38937 76232,39041 76175,36396 74061,36396 74073,43314 76221,43314 76209,40866 77607,40808 "/>
<path id="12" class="fil2" d="M86234 38995l-1674 -2738 -2033 81 -1444 2992 -300 4134 1986 35 58 -1236 1652 -139 115 1433 2079 -93 -439 -4469zm-3326 1536l104 -1040 601 -1305 623 1328 81 936 -1409 81z"/>
<path id="13" class="fil2" d="M92840 39976l-115 -2760 -959 -970 -4342 115 34 7161 2276 12 -81 -2357 2564 -161 623 -1040zm-3245 -1721l104 -127 1097 24 35 1351 -1224 81 -12 -1329z"/>
<polygon id="14" class="fil2" points="97160,43557 99470,43487 99412,39445 99412,36154 97125,36246 97137,38937 95774,39041 95716,36396 93603,36396 93614,43314 95762,43314 95751,40866 97148,40808 "/>
<polygon id="15" class="fil2" points="104170,43557 106480,43487 106422,39445 106422,36281 104136,36304 104147,37216 103396,38475 102784,39480 102727,36396 100613,36396 100625,43314 102773,43430 102761,42448 103604,41016 104159,40207 "/>
<polygon id="16" class="fil2" points="107531,36373 107624,43487 109922,43406 109841,40685 111111,41537 111238,43534 113664,43395 113179,40375 111758,39751 113144,38898 113329,36465 110984,36315 110927,38323 109749,39176 109702,36338 "/>
<path id="17" class="fil2" d="M119658 38995l-1675 -2738 -2032 81 -1444 2992 -300 4134 1986 35 58 -1236 1651 -139 116 1433 2079 -93 -439 -4469zm-3326 1536l104 -1040 600 -1305 624 1328 81 936 -1409 81z"/>
<path class="fil2" d="M39385 52302l541 0 0 -5193 -452 0c-13,328 -111,569 -294,725 -183,156 -460,234 -831,234l-62 0 0 436 1098 0 0 3798z"/>
<path id="1" class="fil2" d="M43254 52302l551 0 0 -1314 484 0 0 -508 -484 0 0 -3371 -500 0 -1922 3371 0 508 1871 0 0 1314zm-1394 -1822l1461 -2635 -67 2635 -1394 0z"/>
<polygon id="2" class="fil2" points="46599,50673 48260,50673 48260,50068 46599,50068 "/>
<path id="3" class="fil2" d="M51903 52302l540 0 0 -5193 -451 0c-14,328 -112,569 -295,725 -182,156 -459,234 -830,234l-62 0 0 436 1098 0 0 3798z"/>
<path id="4" class="fil2" d="M54007 50938c0,481 112,845 338,1095 226,249 557,374 994,374 219,0 416,-40 591,-121 175,-82 322,-200 445,-357 121,-156 213,-349 278,-576 63,-228 95,-486 95,-777 0,-266 -30,-502 -94,-711 -61,-208 -149,-383 -262,-525 -114,-143 -250,-250 -410,-323 -160,-74 -338,-110 -535,-110 -203,0 -375,35 -517,106 -144,71 -239,159 -286,264l185 -1556 1721 0 0 -508 -2174 0 -283 2635 491 43c50,-149 138,-266 261,-350 123,-84 280,-126 468,-126 564,0 847,409 847,1225 0,414 -72,728 -215,940 -144,213 -351,319 -620,319 -247,0 -439,-79 -575,-237 -136,-157 -203,-383 -203,-677l0 -47 -540 0z"/>
<path id="5" class="fil2" d="M61734 52312l0 -410c-15,5 -31,8 -47,8 -14,0 -26,0 -39,0 -82,0 -140,-22 -174,-66 -33,-43 -51,-113 -51,-210l0 -2257c0,-364 -84,-629 -255,-794 -171,-165 -438,-249 -803,-249 -392,0 -680,90 -860,272 -181,180 -275,466 -283,857l508 0 0 -63c0,-212 47,-368 141,-466 95,-98 239,-148 434,-148 193,0 339,35 434,105 96,68 144,185 144,348l0 362c0,65 -11,119 -31,164 -22,43 -56,80 -105,114 -48,32 -110,62 -188,90 -77,27 -172,60 -285,101 -196,61 -366,126 -509,191 -144,63 -264,141 -358,231 -94,91 -164,203 -211,334 -47,133 -71,299 -71,499 0,340 78,605 234,793 154,187 371,281 649,281 214,0 399,-51 555,-155 155,-102 272,-255 351,-457 9,179 59,316 146,412 88,95 209,144 363,144 47,0 96,-3 145,-10 51,-7 107,-15 166,-21zm-851 -2090l0 764c0,147 -18,279 -54,395 -35,117 -85,216 -149,296 -65,80 -141,141 -231,183 -89,42 -188,63 -299,63 -156,0 -275,-52 -358,-157 -85,-105 -127,-255 -127,-449 0,-129 12,-235 38,-320 24,-83 62,-153 111,-210 51,-56 115,-103 190,-142 76,-38 165,-75 269,-112 133,-47 251,-92 353,-134 104,-42 188,-101 257,-177z"/>
<path id="6" class="fil2" d="M62293 50809c0,275 32,519 97,728 64,210 158,382 285,515 112,127 251,217 416,272 166,55 355,83 567,83 228,0 429,-35 603,-106 172,-71 317,-174 434,-309 117,-136 204,-301 262,-498 58,-197 86,-420 86,-669 0,-374 -86,-673 -260,-901 -173,-225 -428,-364 -764,-415 275,-55 489,-188 638,-399 149,-211 225,-484 225,-816 0,-118 -22,-247 -64,-386 -41,-139 -111,-268 -208,-387 -97,-117 -224,-216 -383,-294 -159,-79 -355,-118 -589,-118 -191,0 -369,32 -533,98 -164,66 -305,161 -426,286 -121,124 -215,277 -284,458 -69,180 -102,387 -102,619l0 2239zm540 33l0 -2252c0,-319 69,-567 206,-742 136,-176 320,-264 552,-264 144,0 264,23 356,69 95,46 168,108 224,187 55,78 94,170 115,275 20,106 31,221 31,344 0,159 -19,293 -58,400 -37,107 -94,193 -169,259 -74,65 -167,112 -277,141 -110,28 -238,43 -382,43l-371 0 0 476 430 0c347,0 595,91 742,274 148,183 222,448 222,792 0,348 -63,610 -189,789 -127,177 -328,266 -608,266 -550,0 -824,-352 -824,-1057z"/>
<path id="7" class="fil2" d="M68017 51123l-540 0c0,276 -59,474 -176,595 -118,120 -292,181 -522,181 -211,0 -375,-55 -490,-164 -117,-110 -175,-262 -175,-456 0,-114 16,-211 47,-291 32,-80 79,-148 143,-207 63,-59 139,-112 231,-158 93,-45 199,-91 320,-138 207,-81 380,-163 521,-245 140,-82 253,-170 339,-266 85,-95 146,-201 183,-317 36,-117 55,-250 55,-398 0,-154 -28,-286 -85,-394 -56,-109 -125,-199 -207,-273 -180,-172 -441,-258 -782,-258 -405,0 -704,93 -899,277 -195,184 -293,468 -293,852l516 0c0,-255 51,-434 153,-537 102,-104 253,-156 452,-156 201,0 353,54 454,160 101,106 151,257 151,454 0,45 -4,92 -14,141 -9,50 -33,102 -71,156 -39,54 -100,108 -179,163 -81,55 -192,110 -333,165 -234,90 -429,176 -586,258 -159,84 -285,172 -383,266 -97,94 -167,201 -209,318 -43,117 -64,254 -64,411 0,388 99,676 298,864 199,187 502,281 910,281 188,0 358,-25 510,-77 151,-52 282,-131 389,-237 109,-108 193,-241 250,-400 58,-160 86,-349 86,-570z"/>
<path id="8" class="fil2" d="M68457 53527c148,44 269,66 363,66 162,0 302,-23 419,-68 117,-44 218,-113 301,-204 85,-91 157,-208 221,-349 63,-142 122,-311 177,-507l1186 -4018 -556 0 -846 3107 -823 -3107 -587 0 1134 3886c-43,140 -83,258 -125,359 -40,99 -85,180 -133,243 -48,63 -105,109 -168,139 -63,28 -137,43 -224,43 -58,0 -113,-4 -167,-14 -54,-9 -112,-27 -172,-53l0 477z"/>
<path id="9" class="fil2" d="M73237 50947c-11,326 -69,570 -177,736 -107,165 -260,248 -461,248 -137,0 -252,-31 -345,-93 -93,-61 -168,-155 -223,-283 -55,-128 -96,-290 -121,-488 -24,-198 -36,-430 -36,-698 0,-266 12,-496 37,-690 24,-195 66,-357 123,-484 56,-128 131,-222 225,-284 94,-62 211,-93 351,-93 187,0 332,70 440,209 106,139 162,346 170,622l535 0 0 -79c0,-189 -27,-359 -82,-511 -55,-153 -133,-282 -234,-389 -102,-106 -224,-186 -368,-243 -145,-56 -306,-85 -485,-85 -441,0 -768,166 -981,498 -214,332 -320,832 -320,1501 0,698 102,1217 306,1557 206,340 525,509 957,509 391,0 694,-125 908,-374 213,-248 321,-611 321,-1086l-540 0z"/>
<path id="10" class="fil2" d="M74552 52302l541 0 0 -2708c0,-113 19,-215 56,-309 39,-93 93,-174 163,-240 68,-67 152,-119 250,-155 97,-37 203,-56 318,-56 210,0 357,65 437,193 82,129 122,326 122,591l0 2684 541 0 0 -2684c0,-113 20,-218 59,-313 39,-96 94,-179 165,-249 72,-68 155,-123 253,-162 97,-39 204,-60 323,-60 112,0 204,17 275,50 71,32 126,82 167,149 41,68 68,151 83,252 15,100 22,220 22,356l0 2661 540 0 0 -3003c0,-309 -81,-543 -242,-702 -161,-159 -401,-238 -719,-238 -223,0 -419,45 -587,138 -170,91 -312,230 -428,417 -52,-182 -146,-319 -282,-414 -135,-94 -312,-141 -530,-141 -466,0 -805,185 -1015,557l0 -469 -512 0 0 3855z"/>
<path class="fil2" d="M39071 57038c0,-149 8,-278 25,-386 18,-108 45,-196 84,-265 37,-67 88,-117 153,-149 64,-31 145,-47 239,-47 90,0 164,13 222,39 58,27 103,67 137,122 35,55 59,125 71,213 14,86 20,189 20,310 0,136 -13,251 -38,344 -27,93 -68,168 -123,226 -56,58 -125,98 -208,122 -82,23 -182,35 -297,35l-100 0 0 670 162 0c145,0 262,13 352,41 91,27 161,74 211,140 50,66 84,153 102,264 19,111 28,247 28,411 0,162 -8,302 -24,419 -15,117 -43,213 -82,288 -39,75 -93,130 -160,165 -67,36 -150,54 -250,54 -99,0 -183,-20 -250,-59 -67,-39 -121,-101 -161,-186 -42,-83 -70,-191 -88,-322 -17,-131 -25,-289 -25,-472l0 -1977zm-903 -147l0 2268c0,551 113,959 340,1227 227,267 582,402 1064,402 506,0 881,-137 1125,-410 243,-273 366,-690 366,-1252 0,-174 -19,-337 -58,-487 -39,-150 -98,-281 -177,-396 -78,-114 -179,-205 -301,-275 -123,-70 -267,-110 -432,-124 121,-16 234,-51 337,-105 104,-53 194,-123 272,-209 78,-88 137,-190 181,-308 43,-118 65,-249 65,-394 0,-430 -117,-759 -351,-988 -232,-228 -562,-343 -986,-343 -466,0 -822,121 -1072,362 -248,242 -373,586 -373,1032z"/>
<polygon id="1" class="fil2" points="41391,60691 42407,60691 42852,59652 43305,60691 44297,60691 43313,58706 44270,56812 43297,56812 42876,57781 42458,56812 41434,56812 42415,58706 "/>
<path id="2" class="fil2" d="M45850 56707c-274,0 -498,39 -673,118 -175,78 -313,201 -413,366 -100,165 -170,378 -209,636 -39,258 -59,567 -59,926 0,363 20,672 59,929 39,258 109,469 209,634 100,165 238,286 413,364 175,77 399,116 673,116 275,0 500,-39 677,-116 176,-78 314,-199 416,-364 102,-165 172,-376 211,-634 39,-257 59,-566 59,-929 0,-359 -20,-668 -59,-926 -39,-258 -109,-471 -211,-636 -102,-165 -240,-288 -416,-366 -177,-79 -402,-118 -677,-118zm-5 694c108,0 191,22 250,70 59,45 104,115 135,211 29,95 48,215 55,360 6,145 9,317 9,517l0 385c0,213 -3,395 -9,544 -7,148 -25,270 -54,366 -28,95 -74,164 -135,207 -60,44 -143,65 -251,65 -111,0 -196,-24 -255,-71 -59,-47 -102,-123 -132,-227 -30,-105 -46,-241 -51,-407 -5,-168 -8,-371 -8,-608l0 -356c0,-183 3,-339 9,-470 7,-132 26,-242 55,-330 31,-86 76,-150 135,-193 59,-42 141,-63 247,-63z"/>
<path id="3" class="fil2" d="M49096 57449c100,0 181,20 242,61 62,41 109,104 143,189 32,86 54,194 64,325 11,131 17,289 17,472 0,266 -3,492 -10,680 -7,187 -25,340 -55,459 -31,118 -77,204 -138,258 -62,53 -150,80 -263,80 -94,0 -169,-21 -224,-63 -55,-42 -97,-109 -125,-203 -27,-93 -44,-212 -52,-357 -8,-147 -13,-323 -13,-530 0,-242 3,-449 10,-621 7,-172 24,-313 51,-425 28,-111 70,-193 125,-246 55,-52 132,-79 228,-79zm1337 2934l0 -3571 -849 0 0 402c-70,-166 -172,-292 -303,-378 -132,-86 -293,-129 -482,-129 -198,0 -362,35 -494,105 -131,68 -235,181 -313,336 -80,155 -135,356 -166,602 -31,247 -47,547 -47,902 0,360 15,669 43,929 30,261 81,474 158,642 75,168 180,292 314,373 133,79 304,119 514,119 331,0 575,-144 729,-433l0 347c0,125 -6,235 -18,328 -14,93 -38,169 -72,229 -33,59 -80,102 -139,131 -58,29 -135,43 -229,43 -99,0 -179,-21 -237,-63 -56,-43 -88,-102 -94,-179l-891 0c6,284 109,502 309,652 201,152 494,227 881,227 287,0 531,-40 728,-119 198,-81 346,-194 445,-342 97,-143 157,-310 179,-500 23,-188 34,-405 34,-653z"/>
<path id="4" class="fil2" d="M54536 59167l0 80c0,155 -5,287 -17,397 -13,112 -34,203 -64,274 -29,73 -71,125 -123,159 -53,33 -120,49 -201,49 -146,0 -248,-56 -303,-170 -55,-113 -82,-297 -82,-554l0 -1344c0,-225 28,-390 86,-497 58,-107 158,-160 299,-160 142,0 242,53 302,161 59,107 88,273 88,499l0 90 862 0 0 -137c0,-449 -102,-779 -308,-990 -204,-211 -519,-317 -945,-317 -262,0 -480,39 -650,118 -171,78 -304,202 -402,369 -97,166 -164,377 -202,634 -39,258 -58,566 -58,925 0,360 19,668 58,925 38,258 105,469 202,634 98,165 231,288 402,366 170,79 388,118 650,118 433,0 750,-116 952,-347 200,-230 301,-586 301,-1066l0 -216 -847 0z"/>
<path id="5" class="fil2" d="M56973 57038c0,-149 8,-278 25,-386 18,-108 45,-196 84,-265 37,-67 88,-117 153,-149 65,-31 145,-47 239,-47 90,0 164,13 222,39 58,27 104,67 137,122 35,55 59,125 71,213 14,86 21,189 21,310 0,136 -14,251 -39,344 -27,93 -68,168 -123,226 -56,58 -125,98 -208,122 -82,23 -182,35 -297,35l-100 0 0 670 162 0c145,0 262,13 352,41 91,27 161,74 211,140 50,66 85,153 102,264 19,111 28,247 28,411 0,162 -8,302 -24,419 -15,117 -43,213 -82,288 -39,75 -93,130 -160,165 -67,36 -150,54 -250,54 -99,0 -183,-20 -250,-59 -67,-39 -121,-101 -161,-186 -42,-83 -70,-191 -88,-322 -17,-131 -25,-289 -25,-472l0 -1977zm-903 -147l0 2268c0,551 113,959 340,1227 227,267 582,402 1064,402 506,0 881,-137 1125,-410 244,-273 366,-690 366,-1252 0,-174 -19,-337 -58,-487 -39,-150 -98,-281 -177,-396 -78,-114 -179,-205 -301,-275 -123,-70 -267,-110 -432,-124 121,-16 234,-51 337,-105 104,-53 194,-123 272,-209 78,-88 137,-190 181,-308 43,-118 65,-249 65,-394 0,-430 -117,-759 -351,-988 -232,-228 -562,-343 -986,-343 -466,0 -822,121 -1072,362 -248,242 -373,586 -373,1032z"/>
<path id="6" class="fil2" d="M60828 56707c-274,0 -499,39 -674,118 -174,78 -313,201 -412,366 -101,165 -171,378 -210,636 -39,258 -59,567 -59,926 0,363 20,672 59,929 39,258 109,469 210,634 99,165 238,286 412,364 175,77 400,116 674,116 274,0 500,-39 676,-116 176,-78 314,-199 417,-364 102,-165 172,-376 211,-634 39,-257 59,-566 59,-929 0,-359 -20,-668 -59,-926 -39,-258 -109,-471 -211,-636 -103,-165 -241,-288 -417,-366 -176,-79 -402,-118 -676,-118zm-6 694c108,0 191,22 250,70 60,45 104,115 135,211 29,95 48,215 55,360 7,145 9,317 9,517l0 385c0,213 -2,395 -9,544 -7,148 -24,270 -54,366 -28,95 -74,164 -134,207 -61,44 -144,65 -252,65 -111,0 -196,-24 -255,-71 -59,-47 -102,-123 -132,-227 -29,-105 -45,-241 -51,-407 -5,-168 -8,-371 -8,-608l0 -356c0,-183 3,-339 10,-470 6,-132 25,-242 55,-330 31,-86 75,-150 134,-193 59,-42 141,-63 247,-63z"/>
<path id="7" class="fil2" d="M63258 57820c0,-251 16,-464 47,-636 32,-172 85,-316 160,-430 75,-115 175,-210 300,-282 123,-71 281,-136 470,-191 243,-73 445,-132 602,-175 157,-43 296,-76 413,-101l0 -782c-47,23 -105,46 -175,70 -70,23 -136,43 -200,59 -65,18 -120,31 -164,42 -44,9 -67,15 -67,15 -268,82 -502,150 -703,207 -201,56 -374,119 -519,191 -147,71 -266,157 -362,258 -94,100 -169,238 -224,410 -55,170 -94,387 -117,645 -23,258 -34,579 -34,962l0 1020c0,300 24,555 72,768 47,213 123,388 229,527 107,137 246,238 420,302 173,65 384,97 634,97 256,0 469,-35 643,-105 173,-69 313,-175 419,-319 106,-142 183,-323 230,-543 47,-219 71,-478 71,-776l0 -131c0,-304 -15,-567 -46,-787 -29,-221 -88,-402 -174,-548 -86,-143 -209,-250 -365,-318 -156,-69 -361,-102 -615,-102 -100,0 -198,13 -293,41 -97,27 -186,69 -270,124 -84,55 -159,124 -225,204 -66,82 -118,176 -157,284zm1242 1122c0,214 -3,395 -10,545 -6,149 -25,271 -55,367 -29,94 -75,164 -135,207 -62,44 -148,65 -257,65 -105,0 -187,-20 -247,-61 -61,-41 -107,-105 -138,-194 -30,-89 -49,-203 -57,-345 -8,-141 -12,-312 -12,-512l0 -139c0,-169 4,-317 12,-445 8,-126 27,-232 56,-316 30,-84 75,-147 136,-190 62,-42 145,-64 250,-64 101,0 181,18 242,54 60,35 106,91 138,168 32,77 54,175 63,296 10,119 14,265 14,433l0 131z"/>
<path id="8" class="fil2" d="M67332 56707c-274,0 -499,39 -674,118 -174,78 -313,201 -412,366 -101,165 -171,378 -210,636 -39,258 -59,567 -59,926 0,363 20,672 59,929 39,258 109,469 210,634 99,165 238,286 412,364 175,77 400,116 674,116 274,0 500,-39 676,-116 176,-78 314,-199 417,-364 102,-165 172,-376 211,-634 39,-257 59,-566 59,-929 0,-359 -20,-668 -59,-926 -39,-258 -109,-471 -211,-636 -103,-165 -241,-288 -417,-366 -176,-79 -402,-118 -676,-118zm-6 694c108,0 191,22 250,70 60,45 104,115 135,211 29,95 48,215 55,360 7,145 9,317 9,517l0 385c0,213 -2,395 -9,544 -7,148 -24,270 -54,366 -28,95 -74,164 -134,207 -61,44 -144,65 -252,65 -111,0 -196,-24 -255,-71 -59,-47 -102,-123 -132,-227 -29,-105 -45,-241 -51,-407 -5,-168 -8,-371 -8,-608l0 -356c0,-183 3,-339 10,-470 6,-132 25,-242 55,-330 31,-86 75,-150 134,-193 59,-42 141,-63 247,-63z"/>
<path id="9" class="fil2" d="M70578 57449c99,0 180,20 242,61 62,41 109,104 142,189 33,86 54,194 65,325 11,131 16,289 16,472 0,266 -3,492 -10,680 -6,187 -25,340 -55,459 -31,118 -76,204 -138,258 -62,53 -149,80 -262,80 -94,0 -170,-21 -225,-63 -55,-42 -96,-109 -125,-203 -27,-93 -44,-212 -52,-357 -8,-147 -12,-323 -12,-530 0,-242 3,-449 9,-621 7,-172 24,-313 51,-425 29,-111 70,-193 125,-246 55,-52 132,-79 229,-79zm1336 2934l0 -3571 -848 0 0 402c-70,-166 -172,-292 -304,-378 -132,-86 -293,-129 -481,-129 -199,0 -363,35 -495,105 -130,68 -235,181 -313,336 -79,155 -134,356 -165,602 -31,247 -47,547 -47,902 0,360 14,669 43,929 29,261 80,474 157,642 75,168 180,292 314,373 133,79 304,119 514,119 332,0 575,-144 730,-433l0 347c0,125 -7,235 -19,328 -14,93 -38,169 -71,229 -34,59 -81,102 -140,131 -58,29 -135,43 -229,43 -99,0 -178,-21 -236,-63 -57,-43 -89,-102 -94,-179l-891 0c5,284 108,502 309,652 200,152 493,227 880,227 288,0 531,-40 729,-119 197,-81 345,-194 444,-342 97,-143 158,-310 179,-500 23,-188 34,-405 34,-653z"/>
<path id="10" class="fil2" d="M74267 59360c0,265 -33,459 -100,582 -68,123 -183,184 -349,184 -169,0 -284,-79 -349,-237 -65,-158 -97,-412 -97,-760 0,-44 0,-86 0,-126 0,-42 3,-85 8,-127l1768 0 0 -291c0,-160 -3,-309 -8,-449 -4,-139 -16,-268 -35,-387 -19,-120 -46,-229 -82,-327 -38,-99 -88,-188 -151,-270 -113,-149 -254,-261 -425,-335 -170,-74 -377,-110 -622,-110 -485,0 -840,137 -1066,413 -67,82 -119,173 -158,275 -39,102 -68,217 -88,342 -19,123 -31,260 -36,408 -5,148 -8,309 -8,483 0,204 1,394 5,568 4,175 18,336 39,484 23,148 57,284 102,406 46,121 109,234 190,336 110,131 246,226 410,285 163,59 363,89 601,89 447,0 778,-104 989,-309 211,-206 317,-530 317,-973 0,-23 0,-47 0,-72 0,-23 -2,-51 -8,-82l-847 0zm-895 -1096c0,-46 -1,-82 -4,-111 -3,-28 -4,-48 -4,-61 0,-248 32,-429 96,-544 61,-114 178,-172 349,-172 87,0 159,14 215,42 57,28 101,71 132,128 31,58 54,132 67,222 13,91 20,199 20,324l0 172 -871 0z"/>
<polygon id="11" class="fil2" points="76718,58989 77508,58989 77508,60691 78411,60691 78411,56812 77508,56812 77508,58264 76718,58264 76718,56812 75814,56812 75814,60691 76718,60691 "/>
<polygon class="fil3" points="13797,77787 19508,77633 19137,71262 21173,71169 27714,78066 32910,78004 32755,64613 27034,64643 27498,71014 22209,65169 15096,65881 13797,67241 "/>
<path id="1" class="fil3" d="M13581 51283l371 8381 959 3217 17999 -464 -155 -10793 -402 -2815 -16360 -402 -2412 2876zm13669 2691l62 3587 -8134 124 -309 -3958 8381 247z"/>
<polygon id="2" class="fil3" points="13797,46026 19508,45871 19137,39500 21173,39408 27714,46304 32910,46242 32755,32851 27034,32882 27498,39253 22209,33408 15096,34119 13797,35480 "/>
<polygon id="3" class="fil3" points="16575,32356 21828,31769 20065,28089 33095,28274 32817,21934 13797,22027 13921,27841 "/>
<polyline class="fil0 str0" points="97450,27963 152649,27963 152649,77447 38849,77447 "/>
<g>
<path class="fil4" d="M148322 63626c-3440,-674 -6522,-2263 -8931,-4479 -1281,-1178 -2372,-2532 -3228,-4020 -612,148 -1252,226 -1910,226 -2237,0 -4263,-907 -5729,-2373 -1467,-1467 -2374,-3492 -2374,-5730 0,-2237 907,-4263 2374,-5729 1052,-1053 2393,-1817 3893,-2165 -232,-897 -353,-1820 -353,-2761 0,-4195 2351,-7941 6152,-10605 3574,-2505 8466,-4054 13829,-4054 5364,0 10256,1549 13830,4054 3801,2664 6152,6410 6152,10605 0,909 -113,1801 -330,2669 1684,290 3191,1099 4349,2257 1466,1466 2373,3492 2373,5729 0,2238 -907,4263 -2373,5730 -1467,1466 -3492,2373 -5730,2373 -808,0 -1588,-118 -2325,-338 -865,1532 -1978,2925 -3291,4132 -1983,1824 -3987,2986 -6531,3843 -2870,1066 -4881,3199 -5348,5660 -1647,-1515 -2140,-2900 -1893,-4125 -1105,596 -2101,1362 -3144,2407 -14,-1440 167,-2495 538,-3306zm-2631 -12968c-873,0 -1663,-354 -2236,-926 -572,-572 -926,-1363 -926,-2236 0,-873 354,-1663 926,-2236 573,-572 1363,-926 2236,-926 873,0 1664,354 2236,926 572,573 926,1363 926,2236 0,873 -354,1664 -926,2236 -572,572 -1363,926 -2236,926zm0 4229c-4082,0 -7390,-3309 -7390,-7391 0,-1706 578,-3278 1550,-4529 -1448,-1200 -2504,-2615 -3030,-4148 1857,-1146 3914,-2071 6102,-2753 2869,-894 5962,-1365 9122,-1365 2910,0 5768,400 8451,1166 2441,697 4730,1689 6775,2950 -525,1530 -1577,2942 -3019,4140 976,1253 1558,2828 1558,4539 0,4082 -3309,7391 -7390,7391 -2710,0 -5078,-1458 -6365,-3632 -1286,2174 -3655,3632 -6364,3632zm-9160 -19371c372,-2273 1901,-4351 4182,-5950 2866,-2008 6869,-3250 11332,-3250 4463,0 8467,1242 11332,3250 2283,1599 3812,3678 4183,5952 -1946,-1064 -4045,-1918 -6240,-2544 -2954,-843 -6091,-1284 -9275,-1284 -3454,0 -6850,520 -10016,1507 -1931,601 -3776,1378 -5498,2319zm13894 8388c-284,0 -540,-115 -726,-301 -186,-186 -301,-442 -301,-726 0,-283 115,-539 301,-725l1 0c185,-186 442,-301 725,-301 283,0 540,115 725,301 186,185 301,442 301,725 0,283 -115,539 -301,725l0 1c-187,186 -443,301 -725,301zm3351 0c-282,0 -538,-115 -725,-301l0 -1c-186,-186 -301,-442 -301,-725 0,-282 115,-539 301,-725l0 0c187,-186 443,-301 725,-301 283,0 539,115 725,301l1 0c186,186 301,443 301,725 0,283 -115,539 -301,725l-1 1c-186,186 -442,301 -725,301zm4644 6754c-873,0 -1664,-354 -2236,-926 -572,-572 -926,-1363 -926,-2236 0,-873 354,-1663 926,-2236 572,-572 1363,-926 2236,-926 873,0 1663,354 2235,926 573,573 927,1363 927,2236 0,873 -354,1664 -927,2236 -572,572 -1362,926 -2235,926zm11216 -7069l-32 43c94,395 173,797 237,1207 130,826 197,1636 197,2424l0 59 0 59 -1 58 0 59 -1 58 -2 59 -1 58 -2 58 -1 59 -2 58 -3 58 -2 58 -3 58c-2,39 -4,77 -6,116l-3 58 -4 58c-7,115 -15,231 -25,346 -4,38 -7,76 -10,115 -8,76 -15,152 -23,229l-7 57 -6 57c-28,247 -63,493 -102,736 -28,169 -58,337 -91,504l-11 56 -12 55 -11 56 -12 55 -12 56c-12,55 -24,110 -37,166l-12 55 -13 55 -13 55c229,44 465,67 706,67 1029,0 1960,-417 2633,-1091 674,-673 1091,-1604 1091,-2633 0,-1028 -417,-1959 -1091,-2633 -673,-674 -1604,-1090 -2633,-1090 -232,0 -459,21 -680,62zm-35141 7377l-13 -56 -13 -56 -14 -56 -12 -56 -13 -56 -13 -56 -12 -56 -12 -57 -12 -56 -11 -57 -12 -56c-7,-38 -15,-76 -22,-113l-11 -57 -11 -57 -10 -57 -10 -57 -10 -57 -10 -57c-7,-38 -13,-76 -19,-114l-9 -58 -9 -57c-6,-38 -12,-76 -18,-115l-8 -57 -8 -58 -8 -57c-5,-39 -10,-77 -15,-116 -8,-58 -15,-116 -22,-173l-6 -58c-7,-59 -13,-117 -19,-175l-6 -58c-6,-58 -11,-117 -16,-175l-5 -59c-3,-39 -6,-78 -9,-117 -3,-39 -6,-78 -9,-117 -2,-39 -5,-78 -7,-118l-4 -58c-4,-79 -8,-158 -11,-236l-2 -59c-2,-40 -3,-79 -4,-119l-2 -59c-1,-40 -2,-79 -3,-119l-1 -59 -1 -60 0 -59 0 -60 -1 -60c0,-788 68,-1598 198,-2424 64,-410 143,-812 237,-1207 -25,-34 -50,-68 -75,-102 -53,-2 -105,-3 -159,-3 -1028,0 -1959,416 -2633,1090 -673,674 -1090,1605 -1090,2633 0,1029 417,1960 1090,2633 674,674 1605,1091 2633,1091 82,0 162,-3 242,-8z"/>
<path class="fil5" d="M136531 35516c372,-2273 1901,-4351 4182,-5950 2866,-2008 6869,-3250 11332,-3250 4463,0 8467,1242 11332,3250 2283,1599 3812,3678 4183,5952 -1946,-1064 -4045,-1918 -6240,-2544 -2954,-843 -6091,-1284 -9275,-1284 -3454,0 -6850,520 -10016,1507 -1931,601 -3776,1378 -5498,2319zm33105 8073l-32 43c94,395 173,797 237,1207 130,826 197,1636 197,2424l0 59 0 59 -1 58 0 59 -1 58 -2 59 -1 58 -2 58 -1 59 -2 58 -3 58 -2 58 -3 58c-2,39 -4,77 -6,116l-3 58 -4 58c-7,115 -15,231 -25,346 -3,38 -7,76 -10,115 -8,76 -15,152 -23,229l-7 57 -6 57c-28,247 -63,493 -102,736 -28,169 -58,337 -91,504l-11 56 -12 55 -11 56 -12 55 -12 56c-12,55 -24,110 -37,166l-12 55 -13 55 -13 55c229,44 465,67 706,67 1029,0 1960,-417 2633,-1091 674,-673 1091,-1604 1091,-2633 0,-1028 -417,-1959 -1091,-2633 -673,-674 -1604,-1090 -2633,-1090 -232,0 -459,21 -680,62zm-35141 7377l-13 -56 -13 -56 -14 -56 -12 -56 -13 -56 -13 -56 -12 -56 -12 -57 -12 -56 -11 -57 -12 -56c-7,-38 -15,-76 -22,-114l-11 -56 -11 -57 -10 -57 -10 -57 -10 -57 -10 -57c-7,-38 -13,-76 -19,-114l-9 -58 -9 -57c-6,-38 -12,-76 -18,-115l-8 -57 -8 -58 -8 -57c-5,-39 -10,-77 -15,-116 -8,-58 -15,-116 -22,-173l-6 -58c-7,-59 -13,-117 -19,-175l-6 -58c-6,-58 -11,-117 -16,-175l-5 -59c-3,-39 -6,-78 -9,-117 -3,-39 -6,-78 -9,-117 -2,-39 -5,-78 -7,-117l-4 -59c-4,-79 -8,-158 -11,-236l-2 -59c-2,-40 -3,-79 -4,-119l-2 -59c-1,-40 -2,-79 -3,-119l-1 -59 -1 -60 0 -59 -1 -60 0 -60c0,-788 68,-1598 198,-2424 64,-410 143,-812 237,-1207 -25,-34 -50,-68 -75,-102 -53,-2 -105,-3 -159,-3 -1028,0 -1959,416 -2633,1090 -673,674 -1090,1605 -1090,2633 0,1029 417,1960 1090,2633 674,674 1605,1091 2633,1091 82,0 162,-3 242,-8zm11196 3921c-4082,0 -7390,-3309 -7390,-7391 0,-1706 578,-3278 1550,-4529 -1448,-1200 -2504,-2615 -3030,-4148 1857,-1146 3914,-2071 6102,-2753 2869,-894 5962,-1365 9122,-1365 2910,0 5768,400 8451,1166 2441,697 4730,1689 6775,2950 -525,1530 -1577,2942 -3019,4140 976,1253 1558,2828 1558,4539 0,4082 -3309,7391 -7390,7391 -2710,0 -5078,-1458 -6365,-3632 -1286,2174 -3655,3632 -6364,3632zm0 -4229c-873,0 -1663,-354 -2236,-926 -572,-572 -926,-1363 -926,-2236 0,-873 354,-1663 926,-2236 573,-572 1363,-926 2236,-926 873,0 1664,354 2236,926 572,573 926,1363 926,2236 0,873 -354,1664 -926,2236 -572,572 -1363,926 -2236,926zm12729 0c-873,0 -1664,-354 -2236,-926 -572,-572 -926,-1363 -926,-2236 0,-873 354,-1663 926,-2236 572,-572 1363,-926 2236,-926 873,0 1663,354 2235,926 573,573 927,1363 927,2236 0,873 -354,1664 -927,2236 -572,572 -1362,926 -2235,926zm-4644 -6754c-282,0 -538,-115 -725,-301l0 -1c-186,-186 -301,-442 -301,-725 0,-282 115,-539 301,-725l0 0c187,-186 443,-301 725,-301 283,0 539,115 725,301l1 0c186,186 301,443 301,725 0,283 -115,539 -301,725l-1 1c-186,186 -442,301 -725,301zm-3351 0c-284,0 -540,-115 -726,-301 -186,-186 -301,-442 -301,-726 0,-283 115,-539 301,-725l1 0c185,-186 442,-301 725,-301 283,0 540,115 725,301 186,185 301,442 301,725 0,283 -115,539 -301,725l0 1c-187,186 -443,301 -725,301z"/>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 27 KiB

BIN
img/banner-bg-2022.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 166 KiB

BIN
img/banner-bg-2023.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

BIN
img/banner-en-2016.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

BIN
img/banner-en-2017.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

BIN
img/banner-en-2018.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

BIN
img/banner-en-2019.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

BIN
img/banner-en-2020.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

BIN
img/banner-en-2021.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

BIN
img/banner-en-2022.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 163 KiB

BIN
img/fb_preview_2020.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 168 KiB

BIN
img/fb_preview_2021.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

BIN
img/fb_preview_2022.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 MiB

BIN
img/fb_preview_2023.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB

BIN
img/logo-2014.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.7 KiB

BIN
img/logo-2015.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.7 KiB

BIN
img/logo-2016.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.7 KiB

BIN
img/logo-2017.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

BIN
img/logo-2018.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.9 KiB

BIN
img/logo-2019.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

BIN
img/logo-2020.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

BIN
img/logo-2021.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

BIN
img/logo-2022.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.9 KiB

BIN
img/logo-2023.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.7 KiB

BIN
img/logo-2024.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

BIN
img/logo-pre-2017.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.7 KiB

After

Width:  |  Height:  |  Size: 7.3 KiB

BIN
img/navbg-2017.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
img/navbg-2019.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

BIN
img/navbg-2020.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

BIN
img/navbg-2021.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 244 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 5.6 KiB

View File

@ -3,7 +3,6 @@
<div class="col-left"> <div class="col-left">
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
<?php get_template_part( 'entry' ); ?> <?php get_template_part( 'entry' ); ?>
<?php comments_template(); ?>
<?php endwhile; endif; ?> <?php endwhile; endif; ?>
<?php get_template_part( 'nav', 'below' ); ?> <?php get_template_part( 'nav', 'below' ); ?>
</div> </div>

View File

@ -1,146 +0,0 @@
<?php
require("cli-header.php");
/* fugly hardcoding */
$sched_en=3263;
$sched_bg=10;
$en = $bg = '<style type="text/css"><!--
.lecture-description {
display: none;
}
--></style><script type="text/javascript">// <![CDATA[
jQuery( document ).ready(function($) {
$( \'.program\' ).on( \'click\', \'.lecture-title\', function() {
$(this).nextAll( \'.lecture-description\' ).toggle( \'slow\' );
});
});
// ]]></script><div class="program">';
$prg = pg_query("select
h.name as hallname,
to_char(starts_at, 'DD FMMonth - FMDay') as dt,
to_char(s.starts_at,'HH24:MI') as start, to_char(s.ends_at,'HH24:MI') as end,
e.title, e.language,
e.abstract,
t.name as tname, t.color as tcolor,
sp.first_name || ' ' || sp.last_name as spname
from
slots s join halls h on h.id=s.hall_id
join events e on s.event_id = e.id
join tracks t on t.id=e.track_id
join users u on u.id=e.user_id
join speaker_profiles sp on sp.user_id=u.id
where
not s.event_id is null
order by date(s.starts_at),s.hall_id, s.starts_at
");
$bgpost = array();
$enpost = array();
$bgpost['ID'] = $sched_bg;
$enpost['ID'] = $sched_en;
$bgpost['post_title'] = "Програма";
$enpost['post_title'] = "Schedule";
$bgpost['post_name'] = "schedule";
$enpost['post_name'] = "schedule";
$cdate='';
$chall='';
while ($row = pg_fetch_object($prg)) {
if ($chall!=$row->hallname && strlen($chall)>1) {
$bg.= "</table>\n";
$en.= "</table>\n";
}
if ($cdate!=$row->dt) {
$cdate = $row->dt;
$bg.= "<h2>$cdate</h2>\n";
$en.= "<h2>$cdate</h2>\n";
}
if ($chall!=$row->hallname) {
$chall = $row->hallname;
echo pll_translate_string($chall, 'en_US')."\n";
$en.= "<table><caption>".pll_translate_string($chall, 'en')." Hall</caption><tbody>";
$bg.= "<table><caption>Зала ".pll_translate_string($chall,'bg')."</caption><tbody>";
}
$bg .= '<tr><td class="time">'.$row->start.' - '.$row->end.'</td>';
$bg .= '<td><span class="lecture-title"><a href="javascript: void0">'.htmlentities($row->title).'</a></span><br/>';
$bg .= '<a class="vt-p" href="/bg/schedule-3/speakers/#'.htmlentities($row->spname).'">'.htmlentities($row->spname).'</a><br/>';
$bg .= '<font color="#'.$row->tcolor.'">'.$row->tname.'</font>';
$bg .= '<div class="lecture-description">'.htmlentities($row->abstract).'</div></td></tr>';
$en .= '<tr><td class="time">'.$row->start.' - '.$row->end.'</td>';
$en .= '<td><span class="lecture-title"><a href="javascript: void0">'.htmlentities($row->title).'</a></span><br/>';
$en .= '<a class="vt-p" href="/en/schedule/speakers/#'.htmlentities($row->spname).'">'.htmlentities($row->spname).'</a><br/>';
$en .= '<font color="#'.$row->tcolor.'">'.$row->tname.'</font>';
$en .= '<div class="lecture-description">'.htmlentities($row->abstract).'</div></td></tr>';
/*
<tr>
<td class="time">10:15 11:00</td>
<td><span class="lecture-title"><a href="javascript: void0">Open-source hardware от България</a></span>
<a class="vt-p" href="/lecturers/#tzvetan">Цветан Узунов</a>
<div class="lecture-description">Какво е OSHW (Open Source Hardware)?
Какви са приликите и разликите между OSHW и FOSS?
Може ли да се прави бизнес с OSHW?
Кога да правим и кога да не правим OSHW?
OLinuXino boards roadmap.
Olimex's Arduino boards roadmap.</div></td>
</tr>
*/
}
$bg.= "</table></div>\n";
$en.= "</table></div>\n";
$bgpost['post_content'] = $bg;
$enpost['post_content'] = $en;
$bgpost['post_content_filtered'] = $bg;
$enpost['post_content_filtered'] = $en;
$bgpost['post_status'] = 'publish';
$enpost['post_status'] = 'publish';
$bgpost['post_type'] = 'page';
$enpost['post_type'] = 'page';
$bgpost['filter'] = true;
$enpost['filter'] = true;
kses_remove_filters();
wp_insert_post($bgpost);
wp_insert_post($enpost);
/*
$newpost = array();
$newpost['post_type'] = 'speakers';
$newpost['post_status'] = 'publish';
$newpost['post_title'] = $row->first_name." ".$row->last_name;
$newpost['post_content'] = $row->biography;
$newpost['post_excerpt'] = $row->biography;
$postid=wp_insert_post($newpost);
$url = 'https://cfp.openfest.org/uploads/speaker_profile/picture/'.$row->id.'/schedule_'.$row->picture;
echo $url."\n";
$att = media_sideload_image($url, $postid, "photo_spk_".$row->user_id);
preg_match("%src='(http://[^']*)'%", $att, $matches);
var_dump($matches);
$wpurl = $matches[1];
$attid = pn_get_attachment_id_from_url($wpurl);
add_post_meta($postid, '_thumbnail_id', $attid);
pll_set_post_language($postid, 'bg');
}*/

View File

@ -1,195 +0,0 @@
<?php
require("cli-header.php");
/* fugly hardcoding */
$sched_en=3263;
$sched_bg=10;
/*
$sched_en=3942;
$sched_bg=3940;*/
$bg = '<section class="content">&nbsp;<table cellpadding="0" cellspacing="0" class="schedule"><tr><th>&nbsp;</th><th>Зала София</th><th>Зала Варна</th><th>Зала G1</th></tr>';
$en = '<section class="content">&nbsp;<table cellpadding="0" cellspacing="0" class="schedule"><tr><th>&nbsp;</th><th>Sofia Hall</th><th>Varna Hall</th><th>Hall G1</th></tr>';
$tracks=array(8 => 'open-biz', 9 => 'open-art', 2 => 'technical', 6 => 'civic', 5 => 'social', 3 => 'advanced-technical');
$prg = pg_query("select
h.name as hallname,h.id as hallid,
to_char(starts_at, 'DD FMMonth - FMDay') as dt,
to_char(s.starts_at,'HH24:MI')|| ' - ' || to_char(s.ends_at,'HH24:MI') as slot,
e.title, e.subtitle, e.language, e.id as eventid,
e.abstract, e.description,
t.name as tname,t.id as trackid,
array_agg(sp.first_name || ' ' || sp.last_name)::text as spname
from
slots s join halls h on h.id=s.hall_id
join events e on s.event_id = e.id
join tracks t on t.id=e.track_id
left join events_speaker_profiles esp on esp.event_id=e.id
left join speaker_profiles sp on esp.speaker_profile_id=sp.id
where
not s.event_id is null and h.id in (1,2,3)
group by h.name, h.id, starts_at, ends_at, t.id, e.title, e.subtitle, e.language, e.id, s.hall_id
order by date(s.starts_at),s.starts_at, s.hall_id;
");
$dtrans = array('01 November - Saturday' => '01 ноември - събота', '02 November - Sunday' => '02 ноември - неделя');
$p = array();
while ($row = pg_fetch_object($prg)) {
$p[$row->dt][$row->slot][$row->hallname]=$row;
}
$bgpost = array();
$enpost = array();
$bgpost['ID'] = $sched_bg;
$enpost['ID'] = $sched_en;
$bgpost['post_title'] = "Програма";
$enpost['post_title'] = "Schedule";
$bgpost['post_name'] = "programa";
$enpost['post_name'] = "schedule";
$bgpost['post_author'] = 2;
$enpost['post_author'] = 2;
$bgpost['post_date'] = "2014-10-13 00:01:02";
$enpost['post_date'] = "2014-10-13 00:01:02";
$cdate='';
$chall='';
$clearsmb=array('{', '}', '"');
$events = array();
foreach ($p as $day => $dayv) {
$bg .='<tr><td class="schedule-day">'.$dtrans[$day].'</td><td colspan="4" class="schedule-empty"></td></tr>'."\n";
$en .='<tr><td class="schedule-day">'.$day.'</td><td colspan="4" class="schedule-empty"></td></tr>'."\n";
foreach ($dayv as $slot => $slotv) {
$bg .= '<tr><td>'.$slot.'</td>'."\n";
$en .= '<tr><td>'.$slot.'</td>'."\n";
$h=0;
foreach ($slotv as $hall => $event){
$h++;
while ($h < $event->hallid) {
$h++;
$bg .= "<td></td>\n";
$en .= "<td></td>\n";
}
$spkarr = explode(',', str_replace($clearsmb, '' ,$event->spname));
$spkbgarr = array();
$spkenarr = array();
foreach ($spkarr as $val){
if ($val == "NULL") continue;
$spkbgarr[] = '<a class="vt-p" href="/bg/programa/speakers/#'.htmlentities($val).'">'.htmlentities($val).'</a>';
$spkenarr[] = '<a class="vt-p" href="/en/schedule/speakers/#'.htmlentities($val).'">'.htmlentities($val).'</a>';
}
$spkbg = implode(", ", $spkbgarr);
$spken = implode(", ", $spkenarr);
if (count($spkbgarr)>0) {
$event->spken = '('.$spken.')';
$event->spkbg = '('.$spkbg.')';
} else {
$event->spken = '';
$event->spkbg = '';
}
$events[] = $event;
$bg .= '<td class="schedule-'.$tracks[$event->trackid].' schedule-'.$event->language.'"><a href="#lecture-'.$event->eventid.'">'.htmlentities($event->title).'</a>';
$bg .='<br>'.$spkbg.'</td>'."\n";
$en .= '<td class="schedule-'.$tracks[$event->trackid].' schedule-'.$event->language.'"><a href="#lecture-'.$event->eventid.'">'.htmlentities($event->title).'</a>';
$en .='<br>'.$spken.'</td>'."\n";
#var_dump($event);
}
while ($h < 3) {
$h++;
$bg .= "<td></td>\n";
$en .= "<td></td>\n";
}
$bg .= '</tr>'."\n";
$en .= '</tr>'."\n";
}
}
$bg .= '</table>';
$en .= '</table>';
$legend = '<!-- legend -->
<table cllpadding="0" cellspacing="0" class="schedule schedule-legend">
<tr><td class="schedule-technical">Technical</td></tr>
<tr><td class="schedule-advanced-technical">Advanced technical</td></tr>
<tr><td class="schedule-social">Social</td></tr>
<tr><td class="schedule-open-art">Open art</td></tr>
<tr><td class="schedule-open-biz">Open biz</td></tr>
<tr><td class="schedule-civic">Civic hacking</td></tr>
<tr><td class="schedule-misc">Misc</td></tr>
<tr><td class="schedule-en">English</td></tr>
<tr><td class="schedule-bg">Български</td></tr>
</table>';
$bg .= $legend;
$en .= $legend;
$bg .= '<div class="separator"></div>';
$en .= '<div class="separator"></div>';
foreach ($events as $k => $event) {
if ($event->spkbg=='') continue;
$bg .= '<section id="lecture-'.$event->eventid.'">';
$bg .= '<p><strong> '.$event->title.' '.$event->spkbg.'</strong><p>';
if (strlen($event->subtitle)>2) $bg .= '<p><small>'.htmlentities($event->subtitle).'</small></p>';
$bg .= '<p>'.htmlentities($event->abstract).'</p>';
# $bg .= '<p>'.htmlentities($event->description).'</p>';
$bg .= "</section>";
$bg .= '<div class="separator"></div>';
$en .= '<section id="lecture-'.$event->eventid.'">';
$en .= '<p><strong> '.$event->title.' '.$event->spken.'</strong><p>';
if (strlen($event->subtitle)>2) $en .= '<p><small>'.htmlentities($event->subtitle).'</small></p>';
$en .= '<p>'.htmlentities($event->abstract).'</p>';
# $en .= '<p>'.htmlentities($event->description).'</p>';
$en .= "</section>";
$en .= '<div class="separator"></div>';
};
$bg .= '</section>';
$en .= '</section>';
$bgpost['post_content'] = $bg;
$enpost['post_content'] = $en;
$bgpost['post_content_filtered'] = $bg;
$enpost['post_content_filtered'] = $en;
$bgpost['post_status'] = 'publish';
$enpost['post_status'] = 'publish';
$bgpost['post_type'] = 'page';
$enpost['post_type'] = 'page';
$bgpost['filter'] = true;
$enpost['filter'] = true;
kses_remove_filters();
wp_insert_post($bgpost);
wp_insert_post($enpost);

View File

@ -1,74 +0,0 @@
<?php
require("cli-header.php");
foreach ( array('en', 'bg') as $lang) {
$speakers_args = array( 'post_type' => 'speakers','lang' => $lang, 'nopaging' => 'true');
$speakers = new WP_Query( $speakers_args );
$result = $speakers->get_posts();
# var_dump($result);
foreach ($result as $k=>$v) {
$args = array(
'post_parent' => $v->id,
'post_type' => 'attachment',
'posts_per_page' => -1,
'post_status' => 'any' );
$chld = get_children($args);
foreach ($chld as $k => $att) {
if (preg_match('/^photo_spk/', $att->post_name))
wp_delete_post($att->ID, true);
}
wp_delete_post($v->ID, true);
}
}
$spk = pg_query("select
distinct sp.user_id, sp.id, sp.first_name, sp.last_name, e.language, picture, biography, github, twitter, public_email
from
speaker_profiles sp join events_speaker_profiles esp on sp.id=esp.speaker_profile_id
join events e on esp.event_id=e.id
where e.state=1
order by sp.first_name, sp.last_name;
");
while ($row = pg_fetch_object($spk)) {
$newpost = array();
$newpost['post_type'] = 'speakers';
$newpost['post_status'] = 'publish';
$newpost['post_title'] = $row->first_name." ".$row->last_name;
$newpost['post_content'] = $row->biography;
$newpost['post_excerpt'] = $row->biography;
$postid=wp_insert_post($newpost);
$url = 'https://cfp.openfest.org/uploads/speaker_profile/picture/'.$row->id.'/schedule_'.$row->picture;
echo $url."\n";
$att = media_sideload_image($url, $postid, "photo_spk_bg_".$row->user_id);
preg_match("%src='(http://[^']*)'%", $att, $matches);
$wpurl = $matches[1];
$attid = pn_get_attachment_id_from_url($wpurl);
add_post_meta($postid, '_thumbnail_id', $attid);
pll_set_post_language($postid, 'bg');
$postid_en=wp_insert_post($newpost);
$url = 'https://cfp.openfest.org/uploads/speaker_profile/picture/'.$row->id.'/schedule_'.$row->picture;
echo $url."\n";
$att = media_sideload_image($url, $postid_en, "photo_spk_en_".$row->user_id);
preg_match("%src='(http://[^']*)'%", $att, $matches);
$wpurl = $matches[1];
$attid = pn_get_attachment_id_from_url($wpurl);
add_post_meta($postid_en, '_thumbnail_id', $attid);
pll_set_post_language($postid_en, 'en');
foreach (array($postid, $postid_en) as $v) {
if (strlen($row->github)>1) add_post_meta ($v, 'github', $row->github);
if (strlen($row->twitter)>1) add_post_meta ($v, 'twitter', $row->twitter);
if (strlen($row->public_email)>1) add_post_meta ($v, 'public_email', $row->public_email);
}
pll_save_post_translations(array($postid => 'bg', $postid_en => '$en'));
}

View File

@ -1,195 +0,0 @@
<?php
require("cli-header.php");
/* fugly hardcoding */
$sched_en=5650;
$sched_bg=5648;
/*
$sched_en=3942;
$sched_bg=3940;*/
$bg = '<section class="content">&nbsp;<table cellpadding="0" cellspacing="0" class="schedule"><tr><th>&nbsp;</th><th>Зала Пловдив</th><th>Зала Бургас</th></tr>';
$en = '<section class="content">&nbsp;<table cellpadding="0" cellspacing="0" class="schedule"><tr><th>&nbsp;</th><th>Plovdiv Hall</th><th>Burgas Hall</th></tr>';
$tracks=array(8 => 'open-biz', 9 => 'open-art', 2 => 'technical', 6 => 'civic', 5 => 'social', 3 => 'advanced-technical');
$prg = pg_query("select
h.name as hallname,h.id as hallid,
to_char(starts_at, 'DD FMMonth - FMDay') as dt,
to_char(s.starts_at,'HH24:MI')|| ' - ' || to_char(s.ends_at,'HH24:MI') as slot,
e.title, e.subtitle, e.language, e.id as eventid,
e.abstract, e.description,
t.name as tname,t.id as trackid,
array_agg(sp.first_name || ' ' || sp.last_name)::text as spname
from
slots s join halls h on h.id=s.hall_id
join events e on s.event_id = e.id
join tracks t on t.id=e.track_id
left join events_speaker_profiles esp on esp.event_id=e.id
left join speaker_profiles sp on esp.speaker_profile_id=sp.id
where
not s.event_id is null and h.id in (4,5)
group by h.name, h.id, starts_at, ends_at, t.id, e.title, e.subtitle, e.language, e.id, s.hall_id
order by date(s.starts_at),s.starts_at, s.hall_id;
");
$dtrans = array('01 November - Saturday' => '01 ноември - събота', '02 November - Sunday' => '02 ноември - неделя');
$p = array();
while ($row = pg_fetch_object($prg)) {
$p[$row->dt][$row->slot][$row->hallname]=$row;
}
$bgpost = array();
$enpost = array();
$bgpost['ID'] = $sched_bg;
$enpost['ID'] = $sched_en;
$bgpost['post_title'] = "Workshop-и";
$enpost['post_title'] = "Workshops";
$bgpost['post_name'] = "workshopsbg";
$enpost['post_name'] = "workshops";
$bgpost['post_author'] = 2;
$enpost['post_author'] = 2;
$bgpost['post_date'] = "2014-10-13 00:01:02";
$enpost['post_date'] = "2014-10-13 00:01:02";
$cdate='';
$chall='';
$clearsmb=array('{', '}', '"');
$events = array();
foreach ($p as $day => $dayv) {
$bg .='<tr><td class="schedule-day">'.$dtrans[$day].'</td><td colspan="4" class="schedule-empty"></td></tr>'."\n";
$en .='<tr><td class="schedule-day">'.$day.'</td><td colspan="4" class="schedule-empty"></td></tr>'."\n";
foreach ($dayv as $slot => $slotv) {
$bg .= '<tr><td>'.$slot.'</td>'."\n";
$en .= '<tr><td>'.$slot.'</td>'."\n";
$h=0;
foreach ($slotv as $hall => $event){
$h++;
while ($h+3 < $event->hallid) {
$h++;
$bg .= "<td></td>\n";
$en .= "<td></td>\n";
}
$spkarr = explode(',', str_replace($clearsmb, '' ,$event->spname));
$spkbgarr = array();
$spkenarr = array();
foreach ($spkarr as $val){
if ($val == 'NULL') continue;
$spkbgarr[] = '<a class="vt-p" href="/bg/programa/speakers/#'.htmlentities($val).'">'.htmlentities($val).'</a>';
$spkenarr[] = '<a class="vt-p" href="/en/schedule/speakers/#'.htmlentities($val).'">'.htmlentities($val).'</a>';
}
$spkbg = implode(", ", $spkbgarr);
$spken = implode(", ", $spkenarr);
if (count($spkbgarr)>0) {
$event->spken = '('.$spken.')';
$event->spkbg = '('.$spkbg.')';
} else {
$event->spken = '';
$event->spkbg = '';
}
$events[] = $event;
$bg .= '<td class="schedule-'.$tracks[$event->trackid].' schedule-'.$event->language.'"><a href="#lecture-'.$event->eventid.'">'.htmlentities($event->title).'</a>';
$bg .='<br>'.$spkbg.'</td>'."\n";
$en .= '<td class="schedule-'.$tracks[$event->trackid].' schedule-'.$event->language.'"><a href="#lecture-'.$event->eventid.'">'.htmlentities($event->title).'</a>';
$en .='<br>'.$spken.'</td>'."\n";
#var_dump($event);
}
while ($h < 2) {
$h++;
$bg .= "<td></td>\n";
$en .= "<td></td>\n";
}
$bg .= '</tr>'."\n";
$en .= '</tr>'."\n";
}
}
$bg .= '</table>';
$en .= '</table>';
$legend = '<!-- legend -->
<table cllpadding="0" cellspacing="0" class="schedule schedule-legend">
<tr><td class="schedule-technical">Technical</td></tr>
<tr><td class="schedule-advanced-technical">Advanced technical</td></tr>
<tr><td class="schedule-social">Social</td></tr>
<tr><td class="schedule-open-art">Open art</td></tr>
<tr><td class="schedule-open-biz">Open biz</td></tr>
<tr><td class="schedule-civic">Civic hacking</td></tr>
<tr><td class="schedule-misc">Misc</td></tr>
<tr><td class="schedule-en">English</td></tr>
<tr><td class="schedule-bg">Български</td></tr>
</table>';
$bg .= $legend;
$en .= $legend;
$bg .= '<div class="separator"></div>';
$en .= '<div class="separator"></div>';
foreach ($events as $k => $event) {
if ($event->spkbg=='') continue;
$bg .= '<section id="lecture-'.$event->eventid.'">';
$bg .= '<p><strong> '.$event->title.' '.$event->spkbg.'</strong><p>';
if (strlen($event->subtitle)>2) $bg .= '<p><small>'.htmlentities($event->subtitle).'</small></p>';
$bg .= '<p>'.htmlentities($event->abstract).'</p>';
# $bg .= '<p>'.htmlentities($event->description).'</p>';
$bg .= "</section>";
$bg .= '<div class="separator"></div>';
$en .= '<section id="lecture-'.$event->eventid.'">';
$en .= '<p><strong> '.$event->title.' '.$event->spken.'</strong><p>';
if (strlen($event->subtitle)>2) $en .= '<p><small>'.htmlentities($event->subtitle).'</small></p>';
$en .= '<p>'.htmlentities($event->abstract).'</p>';
# $en .= '<p>'.htmlentities($event->description).'</p>';
$en .= "</section>";
$en .= '<div class="separator"></div>';
};
$bg .= '</section>';
$en .= '</section>';
$bgpost['post_content'] = $bg;
$enpost['post_content'] = $en;
$bgpost['post_content_filtered'] = $bg;
$enpost['post_content_filtered'] = $en;
$bgpost['post_status'] = 'publish';
$enpost['post_status'] = 'publish';
$bgpost['post_type'] = 'page';
$enpost['post_type'] = 'page';
$bgpost['filter'] = true;
$enpost['filter'] = true;
kses_remove_filters();
wp_insert_post($bgpost);
wp_insert_post($enpost);

View File

@ -5,52 +5,65 @@ wp_nav_menu( array( 'theme_location' => 'footer-schedule', 'container_class' =>
require("schedule-config.php"); require("schedule-config.php");
$content = require __DIR__ . DIRECTORY_SEPARATOR . 'schedule' . DIRECTORY_SEPARATOR . 'parse.php';
//var_dump($data);
?> ?>
<section class="content grid"> <section class="content grid">
<div class="col-left"> <?php
function should_show_sidebar() {
global $year, $pagename;
if ($year === '2021') {
return true;
}
if (preg_match('/^full/', $pagename)) {
return false;
}
if ($year === '2024' && preg_match('/^workshop/', $pagename)) {
return false;
}
return true;
}
// full schedule is not limited in only one column
if (should_show_sidebar()) {
echo '<div class="col-left">';
}
?>
<h1><?php pll_e('Програма') ?></h1> <h1><?php pll_e('Програма') ?></h1>
<?php
if (!empty($content)) {
echo '<p><a href="https://cfp.openfest.org/api/conferences/'.$sched_config['conferenceId'].'/events.ics?locale='.$lang.'">iCalendar</a></p>';
echo $content['schedule'];
?>
<div class="separator"></div>
<table cellpadding="0" cellspacing="0" style="text-align: center;" class="schedule"> <table cellpadding="0" cellspacing="0" style="text-align: center;" class="schedule">
<thead>
<tr>
<td>&nbsp;</td>
<?php
foreach ($content['halls'] as $hall_name) {
?>
<td><?php echo htmlspecialchars($hall_name[$CF['lang']]); ?></td>
<?php
}
?>
</tr>
</thead>
<tbody> <tbody>
<?php <?php
foreach ($content['lines'] as $line) { echo $content['legend'], PHP_EOL;
echo str_replace('SPKURL', $CF['speakers_url'], $line), PHP_EOL;
}
?> ?>
</tbody> </tbody>
</table> </table>
<div class="separator"></div> <div class="separator"></div>
<table cellpadding="0" cellspacing="0" class="schedule schedule-legend">
<tbody>
<?php <?php
foreach ($content['legend'] as $line) { echo $content['fulltalks'];
echo $line, PHP_EOL; echo $content['gspk'];
} echo $content['fspk'];
} else {
echo "TBA";
}
?> ?>
</tbody>
</table>
<?php <?php
foreach ($content['fulltalks'] as $line) { if (should_show_sidebar()) {
echo str_replace('SPKURL', $CF['speakers_url'], $line), PHP_EOL; echo "</div>";
} get_sidebar();
};
?> ?>
</div>
<?php get_sidebar(); ?>
</section> </section>
<?php echo do_shortcode( '[transport]' ); ?> <?php echo do_shortcode( '[transport]' ); ?>

View File

@ -5,25 +5,21 @@ wp_nav_menu( array( 'theme_location' => 'footer-schedule', 'container_class' =>
require("schedule-config.php"); require("schedule-config.php");
$content = require __DIR__ . DIRECTORY_SEPARATOR . 'schedule' . DIRECTORY_SEPARATOR . 'parse.php';
//var_dump($data);
?> ?>
<section class="content grid"> <section class="content grid">
<div class="col-left"> <div class="col-left">
<h1><?php pll_e('Лектори') ?></h1> <h1><?php pll_e('Лектори') ?></h1>
<?php <?php
if (!empty($content)) {
foreach ($content['gspk'] as $line) { echo $content['gspk'];
echo $line, PHP_EOL;
}
?> ?>
<div class="separator"></div> <div class="separator"></div>
<?php <?php
foreach ($content['fspk'] as $line) { echo $content['fspk'];
echo $line, PHP_EOL; } else {
} pll_e('TBA');
}
?> ?>
</div> </div>
<?php get_sidebar(); ?> <?php get_sidebar(); ?>

View File

@ -45,7 +45,7 @@ get_header(); ?>
<?php <?php
$sponsor_count++; $sponsor_count++;
if ($sponsor_count % 2 == 0) { if ($sponsor_count % 2 === 0) {
?> ?>
</section> </section>
<section class="content grid sponsors-item"> <section class="content grid sponsors-item">

View File

@ -1,6 +0,0 @@
<?php
# move this to pgconn.php
global $pgconn;
$pgconn = pg_connect("host=localhost dbname=DBNAME user=USERNAME password=PASSWORD");

View File

View File

@ -1,58 +1,22 @@
<?php <?php
/* basic config for all conferences $requirePath = __DIR__ . DIRECTORY_SEPARATOR . 'schedule' . DIRECTORY_SEPARATOR;
* needs to be included from a WP page, otherwise won't work properly require $requirePath . 'class.SmartCurl.php';
* some of this stuff would need to be moved to be taken from Clarion in the future require $requirePath . 'config.php';
*/ require $requirePath . 'load.php';
$CF = array(); require $requirePath . 'parse.php';
$CF['lang'] = pll_current_language('slug'); $year = get_blog_slug();
$sched_config = getSchedConfig($year);
$hall_defs = array( '2014' => array('lectures' => array(1, 2, 3), 'workshops' => array(4, 5), 'all' => array(1, 2, 3, 4, 5) ), $sched_config['lang'] = of_get_lang();
'2015' => array('lectures' => array(6, 7, 8), 'workshops' => array(9), 'all' => array(6, 7, 8, 9) )
);
/* clarion conference ids */ $data = loadData($sched_config);
$confids = array('2014' => 1, '2015' => 2);
/* get stuff from WP and parse */
$siteurl = get_option('siteurl');
$year = preg_replace('%.*/([0-9]*)$%', '\1', $siteurl);
$CF['confid'] = $confids[$year];
/* TODO make this read the ids from the proper place, as this breaks other years*/
if ( preg_match('/^workshop/', $pagename) ) { if ( preg_match('/^workshop/', $pagename) ) {
$CF['allowedhallids'] = $hall_defs[$year]['workshops']; $sched_config['filterEventType'] = "workshop";
} else if (preg_match('/^(speakers|lektori)/', $pagename) ) { } else if (!preg_match('/^full/', $pagename)) {
$CF['allowedhallids'] = $hall_defs[$year]['all']; $sched_config['filterEventType'] = "lecture";
} else {
$CF['allowedhallids'] = $hall_defs[$year]['lectures'];
} }
$content = parseData($sched_config, $data);
/*
* There is no better way to get where the speakers are
*/
if ('en' === $CF['lang']) {
$CF['s_slug'] = 'speakers';
} else {
$CF['s_slug'] = 'lektori';
}
$args = array(
'name' => $CF['s_slug'],
'post_type' => 'page',
'numberposts' => 1
);
$speakers_url = '';
$my_posts = get_posts($args);
if( $my_posts ) {
$CF['speakers_url'] = get_permalink( $my_posts[0]->ID );
}
?>

View File

@ -12,7 +12,7 @@ class SmartCurl {
} }
if (!file_exists($this->cache_dir)) { if (!file_exists($this->cache_dir)) {
mkdir($this->cache_dir); mkdir($this->cache_dir, 0777, true);
} }
$this->cache_index = $this->cache_dir . '.json'; $this->cache_index = $this->cache_dir . '.json';
@ -71,24 +71,28 @@ class SmartCurl {
} }
if (curl_setopt($this->ch, CURLOPT_URL, $url) === false) { if (curl_setopt($this->ch, CURLOPT_URL, $url) === false) {
throw new Exception('set url failed'); throw new Exception('set url failed: ' . $url);
} }
$cache_file = $this->cache_dir . DIRECTORY_SEPARATOR . $filename; $cache_file = $this->cache_dir . DIRECTORY_SEPARATOR . str_replace('/', '@', $filename);
$etag = array_key_exists($url, static::$etags) && file_exists($cache_file) ? static::$etags[$url] : null; $etag = array_key_exists($url, static::$etags) && file_exists($cache_file) ? static::$etags[$url] : null;
if (curl_setopt($this->ch, CURLOPT_HTTPHEADER, [ if (curl_setopt($this->ch, CURLOPT_HTTPHEADER, [
'If-None-Match:' . (is_null($etag) ? '' : ' ' . $etag), 'If-None-Match:' . (is_null($etag) ? '' : ' ' . $etag),
]) === false) { ]) === false) {
throw new Exception('set etag failed'); throw new Exception('set etag failed: ' . $url);
} }
$response = curl_exec($this->ch); $response = curl_exec($this->ch);
if ($response === false) { if ($response === false) {
if (file_exists($cache_file)) {
return file_get_contents($cache_file);
}
else {
return false; return false;
} }
}
//var_dump(curl_getinfo($this->ch, CURLINFO_HEADER_OUT)); //var_dump(curl_getinfo($this->ch, CURLINFO_HEADER_OUT));
//var_dump($response); //var_dump($response);
@ -123,12 +127,6 @@ class SmartCurl {
$body = substr($response, $header_size); $body = substr($response, $header_size);
if ($http_code === 200) { if ($http_code === 200) {
$dirname = dirname($filename);
if ($dirname !== '.') {
mkdir($this->cache_dir . DIRECTORY_SEPARATOR . $dirname, 0777, true);
}
file_put_contents($cache_file, $body); file_put_contents($cache_file, $body);
} }

101
schedule/config.php Normal file
View File

@ -0,0 +1,101 @@
<?php
function getSchedConfig($year = 2017) {
$globalConfig = [
'lang' => 'bg',
'cfp_url' => 'https://cfp.openfest.org',
'cut_len' => 70,
'hidden_speakers' => [4],
'hidden_language_tracks' => [],
];
$config = [
2014 => [
'conferenceId' => 1,
'eventTypes' => [
'lecture' => 1,
'workshop' => 2,
],
],
2015 => [
'conferenceId' => 2,
'eventTypes' => [
'lecture' => 3,
'workshop' => 4,
],
'hidden_language_tracks' => [16],
],
2016 => [
'conferenceId' => 3,
'eventTypes' => [
'lecture' => 5,
'workshop' => 6,
],
'hidden_language_tracks' => [25],
],
2017 => [
'conferenceId' => 4,
'eventTypes' => [
'lecture' => 7,
'workshop' => 8,
],
'hidden_language_tracks' => [34],
],
2018 => [
'conferenceId' => 5,
'eventTypes' => [
'lecture' => 10,
'workshop' => 9,
],
'hidden_language_tracks' => [42],
],
2019 => [
'conferenceId' => 6,
'eventTypes' => [
'lecture' => 12,
'workshop' => 11,
],
'hidden_language_tracks' => [50],
],
2020 => [
'conferenceId' => 7,
'eventTypes' => [
'lecture' => 14,
],
'hidden_language_tracks' => [59],
],
2021 => [
'conferenceId' => 8,
'eventTypes' => [
'lecture' => 16,
'workshop' => 15,
],
'hidden_language_tracks' => [66],
],
2022 => [
'conferenceId' => 9,
'eventTypes' => [
'lecture' => 18,
'workshop' => 17,
],
'hidden_language_tracks' => [73],
],
2023 => [
'conferenceId' => 10,
'eventTypes' => [
'lecture' => 20,
'workshop' => 19,
],
'hidden_language_tracks' => [78],
],
2024 => [
'conferenceId' => 11,
'eventTypes' => [
'lecture' => 24,
'workshop' => 23,
],
'hidden_language_tracks' => [83],
],
];
return array_merge($globalConfig, $config[$year]);
}

View File

@ -1,49 +1,39 @@
<html>
<head>
<title>Test schedule</title>
<link href="//maxcdn.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css" rel="stylesheet">
<link rel="stylesheet" type="text/css" href="http://www.openfest.org/2014/wp-content/themes/initfest/style.css" />
</head>
<pre>
<?php <?php
//header('Content-Type: text/plain; charset=utf-8');
error_reporting(~0); error_reporting(~0);
ini_set('display_errors', 1); ini_set('display_errors', 1);
$content = require __DIR__ . DIRECTORY_SEPARATOR . 'parse.php'; $requirePath = __DIR__ . DIRECTORY_SEPARATOR;
require $requirePath . 'class.SmartCurl.php';
require $requirePath . 'config.php';
require $requirePath . 'load.php';
require $requirePath . 'parse.php';
$sched_config = getSchedConfig(date('Y'));
$data = loadData($sched_config);
$sched_config['filterEventType'] = array_key_exists('event_type', $_GET) ? $_GET['event_type'] : null;
$content = parseData($sched_config, $data);
?> ?>
</pre> <html>
<table border="1" style="text-align: center;"> <head>
<thead> <title>Test schedule</title>
<tr> <link href="//maxcdn.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css" rel="stylesheet">
<td>&nbsp;</td> <link rel="stylesheet" type="text/css" href="http://www.openfest.org/2014/wp-content/themes/initfest/style.css" />
</head>
<body>
<?php <?php
foreach ($content['halls'] as $hall_name) { echo $content['schedule'];
?> ?>
<td><?php echo htmlspecialchars($hall_name); ?></td> <div class="separator"></div>
<?php <table border="1">
}
?>
</tr>
</thead>
<tbody> <tbody>
<?php <?php
foreach ($content['lines'] as $line) { echo $content['legend'], PHP_EOL;
echo $line, PHP_EOL;
}
?> ?>
</tbody> </tbody>
</table> </table>
<div class="separator"></div>
<?php <?php
foreach ($content['fulltalks'] as $line) { echo $content['fulltalks'];
echo $line, PHP_EOL; echo $content['gspk'];
} echo $content['fspk'];
?>
foreach ($content['gspk'] as $line) { </body>
echo $line, PHP_EOL; </html>
}
foreach ($content['fspk'] as $line) {
echo $line, PHP_EOL;
}

51
schedule/interlude.php Normal file
View File

@ -0,0 +1,51 @@
<?php
$requirePath = __DIR__ . DIRECTORY_SEPARATOR;
require $requirePath . 'class.SmartCurl.php';
require $requirePath . 'config.php';
require $requirePath . 'load.php';
require $requirePath . 'parse.php';
$sched_config = getSchedConfig();
$data = loadData($sched_config);
$sched_config['filterEventType'] = 'lecture';
$content = parseData($sched_config, $data);
header('Content-Type:application/json; charset=utf-8');
header('Cache-Control:max-age=0, private, must-revalidate');
header('Access-Control-Allow-Origin: *');
$events = array_map(function($hallData) use ($data) {
return array_map(function($event) use ($data) {
unset($event['hall_id']);
if (!array_key_exists($event['event_id'], $data['events'])) {
unset($event['event_id']);
return $event;
}
$eventData = &$data['events'][$event['event_id']];
$event['title'] = $eventData['title'];
$event['speakers'] = array_map(function($speaker_id) use ($data) {
if (!array_key_exists($speaker_id, $data['speakers'])) {
return [];
}
$speakerData = &$data['speakers'][$speaker_id];
return [
'name' => $speakerData['first_name'] . ' ' . $speakerData['last_name'],
'description' => $speakerData['biography'],
];
}, array_filter($eventData['participant_user_ids'], function($speaker_id) {
return !in_array($speaker_id, [4]);
}));
unset($event['event_id']);
return $event;
}, $hallData);
}, $content['slots']);
echo json_encode($events);

View File

@ -1,26 +1,30 @@
<?php <?php
require __DIR__ . DIRECTORY_SEPARATOR . 'class.SmartCurl.php'; function compareKeys($a, $b, $key) {
$valA = &$a[$key];
$valB = &$b[$key];
$base_url = 'https://cfp.openfest.org/api/conferences/'. $CF['confid'] .'/'; return ($valA < $valB) ? -1 : (($valA > $valB) ? 1 : 0);
}
$filenames = [ function loadData($config) {
$filenames = [
'events' => 'events.json', 'events' => 'events.json',
'speakers' => 'speakers.json', 'speakers' => 'speakers.json',
'tracks' => 'tracks.json', 'tracks' => 'tracks.json',
'event_types' => 'event_types.json', 'event_types' => 'event_types.json',
'halls' => 'halls.json', 'halls' => 'halls.json',
'slots' => 'slots.json', 'slots' => 'slots.json',
]; ];
$data = [];
$curl = new SmartCurl($config['cfp_url'] . '/api/conferences/');
$data = []; foreach ($filenames as $name => $filename) {
$json = $curl->getUrl($config['conferenceId'] . '/' . $filename);
foreach ($filenames as $name => $filename) {
$curl = new SmartCurl($base_url, 'cache' . DIRECTORY_SEPARATOR .$CF['confid']);
$json = $curl->getUrl($filename);
if ($json === false) { if ($json === false) {
echo 'get failed: ', $filename, ' ', $base_url, PHP_EOL; #echo 'get failed: ', $filename, PHP_EOL;
return false;
exit; exit;
} }
@ -32,13 +36,12 @@ foreach ($filenames as $name => $filename) {
} }
$add = true; $add = true;
switch ($name) { switch ($name) {
case 'halls': case 'halls':
$ret = array(); $decoded = array_map(function($el) {
foreach($decoded as $id => $hall) { return $el['name'];
if (in_array($id, $CF['allowedhallids'])) $ret[$id] = $hall['name']; }, $decoded);
}
$decoded = $ret;
break; break;
case 'slots': case 'slots':
$decoded = array_map(function($el) { $decoded = array_map(function($el) {
@ -52,19 +55,11 @@ foreach ($filenames as $name => $filename) {
} }
$data[$name] = $decoded; $data[$name] = $decoded;
} }
function compareKeys($a, $b, $key) { uasort($data['slots'], function($a, $b) {
$valA = &$a[$key];
$valB = &$b[$key];
return ($valA < $valB) ? -1 : (($valA > $valB) ? 1 : 0);
}
uasort($data['slots'], function($a, $b) {
return compareKeys($a, $b, 'starts_at') ?: compareKeys($a, $b, 'hall_id'); return compareKeys($a, $b, 'starts_at') ?: compareKeys($a, $b, 'hall_id');
}); });
//array_pop($data['halls']); return $data;
}
return $data;

View File

@ -1,169 +1,435 @@
<?php <?php
// 'halfnarp_friendly' $strftimeDeprecated = version_compare(PHP_VERSION, '8.1.0', '>=');
// 'events'
// 'speakers'
// 'tracks' [en/bg]
// 'event_types' [en/bg]
// 'halls'
// 'slots'
$data = require __DIR__ . DIRECTORY_SEPARATOR . 'load.php'; if ($strftimeDeprecated) {
require 'php-8.1-strftime.php';
}
/* no idea why do I have to write this, doesn't seem to exist in the system */ $strftime = function (...$args) {
global $strftimeDeprecated;
$languages = array('en' => array('name' => 'English', 'locale' => 'en_US.UTF8'), 'bg' => array ('name' => 'Български', 'locale' => 'bg_BG.UTF8')); return $strftimeDeprecated ? PHP81_BC\strftime(...$args) : \strftime(...$args);
};
$cut_len = 70; function parseData($config, $data) {
$cfp_url = 'http://cfp.openfest.org'; global $strftime;
$time = 0;
$date = 0;
$lines = [];
$fulltalks = [];
$prev_event_id = 0;
$colspan = 1;
$hall_ids = array_keys($data['halls']);
$first_hall_id = min($hall_ids);
$last_hall_id = max($hall_ids);
/* We need to set these so we actually parse properly the dates. WP fucks up both. */ $languages = array(
date_default_timezone_set('Europe/Sofia'); 'en' => array(
setlocale(LC_TIME, $languages[$CF['lang']]['locale']); 'name' => 'English',
'locale' => 'en_US.UTF8'
),
'bg' => array(
'name' => 'Български',
'locale' => 'bg_BG.UTF8'
)
);
foreach ($data['slots'] as $slot_id => $slot) { if ($data === false) return false;
if (! in_array($slot['hall_id'], $CF['allowedhallids'])) continue;
$slotTime = $slot['starts_at'];
$slotDate = date('d', $slotTime);
if ($slotDate !== $date) { $halls = $data['halls'];
/* this seems to be the easiest way to localize the date */ ksort($halls);
$localdate = strftime('%d %B - %A' ,$slotTime);
$lines[] = '<tr>';
$lines[] = '<td>' . $localdate . '</td>';
$lines[] = '<td colspan="3">&nbsp;</td>';
$lines[] = '</tr>';
$date = $slotDate; // We need to set these so we actually parse properly the dates. WP fucks up both.
date_default_timezone_set('Europe/Sofia');
setlocale(LC_TIME, $languages[$config['lang']]['locale']);
// Filter out invalid slots
$data['slots'] = array_filter($data['slots'], function($slot) {
return isset($slot['starts_at'], $slot['ends_at'], $slot['hall_id'], $slot['event_id']);
});
// Collect the slots for each hall, sort them in order of starting
$slots = [];
$timestamps = [];
$filtered_type_id =
array_key_exists('filterEventType', $config) &&
array_key_exists($config['filterEventType'], $config['eventTypes']) ?
$config['eventTypes'][$config['filterEventType']] :
null;
foreach ($halls as $hall_id => $hall) {
$slots[$hall_id] = [];
foreach ($data['slots'] as $slot_id => $slot) {
if ($slot['hall_id'] !== $hall_id) {
continue;
} }
if ($slotTime !== $time) { $eid = $slot['event_id'];
if ($time !== 0) { $etype = $data['events'][$eid]['event_type_id'];
$lines[] = '</tr>'; if ($etype !== $filtered_type_id && !is_null($filtered_type_id)) {
continue;
} }
$lines[] = '<tr>'; if (!in_array($slot['starts_at'], $timestamps)) {
$lines[] = '<td>' . date('H:i', $slot['starts_at']) . ' - ' . date('H:i', $slot['ends_at']) . '</td>'; $timestamps[] = $slot['starts_at'];
$time = $slotTime;
} }
$eid = &$slot['event_id']; if (!in_array($slot['ends_at'], $timestamps)) {
$event = &$data['events'][$eid]; $timestamps[] = $slot['ends_at'];
}
if (is_null($eid)) { $slots[$hall_id][$slot['starts_at']] = $slot;
$lines[] = '<td>TBA</td>'; }
ksort($slots[$hall_id]);
if (empty($slots[$hall_id])) unset($slots[$hall_id]);
}
sort($timestamps);
// Find all microslots (the smallest time unit)
$microslots = [];
$lastTs = 0;
$first = true;
foreach ($timestamps as $ts) {
if ($first) {
$lastTs = $ts;
$first = false;
continue;
}
if (date('d.m', $lastTs) !== date('d.m', $ts)) {
$lastTs = $ts;
continue;
}
$microslots[] = [$lastTs, $ts];
$lastTs = $ts;
}
// Fill in the event ID for each time slot in each hall
$events = [];
foreach ($halls as $hall_id => $hall) {
$hall_data = [];
foreach ($microslots as $timestamps) {
$found = false;
foreach ($data['slots'] as $slot_id => $slot) {
if (
$slot['hall_id'] === $hall_id &&
$slot['starts_at'] <= $timestamps[0] &&
$slot['ends_at'] >= $timestamps[1] &&
array_key_exists($slot['event_id'], $data['events'])
) {
if (!is_null($filtered_type_id)) {
if ($data['events'][$slot['event_id']]['event_type_id'] !== $filtered_type_id) {
continue;
}
}
$found = true;
$hall_data[] = [
'event_id' => $slot['event_id'],
'hall_id' => $slot['hall_id'],
'edge' => $slot['starts_at'] === $timestamps[0] || $slot['ends_at'] === $timestamps[1],
];
break;
}
}
if (!$found) {
$hall_data[] = null;
}
}
$events[$hall_id] = $hall_data;
}
// Remove halls with no events after filtering
foreach ($events as $i => $event) {
$hasEvents = false;
foreach ($event as $event_info) {
if (!is_null($event_info)) {
$hasEvents = true;
break;
}
}
if (!$hasEvents) {
unset($events[$i]);
}
}
// Transpose the matrix
// rows->halls, cols->timeslots ===> rows->timeslots, cols->halls
$events = array_map(null, ...$events);
// Filter empty slots
foreach($events as $i => $event) {
$hall_count = count($event);
$hasEvents = false;
for ($j = 0; $j < $hall_count; ++$j) {
if (!is_null($event[$j]) && $event[$j]['edge']) {
$hasEvents = true;
continue 2;
}
}
if (!$hasEvents) {
unset($events[$i]);
}
}
// Merge events longer than one slot
$prevEventId = [];
$prevEventSlot = [];
$prevSlotIndex = 0;
$first = true;
foreach ($events as $slot_index => &$events_data) {
if ($first) {
$prevEventId = array_map(function($event_info) {
return is_null($event_info) ? null : $event_info['event_id'];
}, $events_data);
$prevEventSlot = array_fill(0, count($events_data), null);
$prevSlotIndex = $slot_index;
$first = false;
continue;
}
foreach ($events_data as $hall_index => &$event_info) {
if (is_null($event_info)) {
$prevEventId[$hall_index] = null;
$prevEventSlot[$hall_index] = null;
continue;
}
if ($event_info['event_id'] !== $prevEventId[$hall_index]) {
$prevEventId[$hall_index] = $event_info['event_id'];
$prevEventSlot[$hall_index] = null;
continue;
}
// We have a long event
if (is_null($prevEventSlot[$hall_index])) {
$prevEventSlot[$hall_index] = $prevSlotIndex;
}
$masterSlotIndex = $prevEventSlot[$hall_index];
// check if the events spans on the next day
if (date('d.m', $microslots[$slot_index][0]) !== date('d.m', $microslots[$masterSlotIndex][1])) {
// not sure why this is needed, but it fixes things
$prevEventSlot[$hall_index] = null;
continue;
}
$master_slot = &$events[$masterSlotIndex][$hall_index];
if (!array_key_exists('rowspan', $master_slot)) {
$master_slot['rowspan'] = 2;
} }
else { else {
$title = mb_substr($event['title'], 0, $cut_len) . (mb_strlen($event['title']) > $cut_len ? '...' : ''); ++$master_slot['rowspan'];
}
unset($master_slot);
$event_info = false;
}
unset($event_info);
$prevSlotIndex = $slot_index;
}
unset($events_data);
// Build the HTML
$schedule_body = '';
$lastTs = 0;
$fulltalks = '';
$hall_ids = [];
$now = time();
$known_events = array();
foreach ($events as $slot_index => $events_data) {
$columns = [];
if (date('d.m', $microslots[$slot_index][0]) !== date('d.m', $lastTs)) {
$schedule_body .= '<tr><th colspan="' . (count($events_data) + 1) . '">' . $strftime('%d %B - %A', $microslots[$slot_index][0]) . '</th></tr>';
}
$lastTs = $microslots[$slot_index][0];
$lastEventId = 0;
$colspan = 1;
foreach ($events_data as $event_info) {
if ($event_info === false) {
continue;
}
if (is_null($event_info) || is_null($event_info['event_id'])) {
$columns[] = '<td>&nbsp;</td>';
continue;
}
if (!in_array($event_info['hall_id'], $hall_ids)) {
$hall_ids[] = $event_info['hall_id'];
}
$eid = &$event_info['event_id'];
$event = &$data['events'][$eid];
# var_dump($microslots[$slot_index]);
$title = mb_substr($event['title'], 0, $config['cut_len']) . (mb_strlen($event['title']) > $config['cut_len'] ? '...' : '');
$speakers = ''; $speakers = '';
if (count($event['participant_user_ids']) > 0) { if (count($event['participant_user_ids']) > 0) {
$speakers = json_encode($event['participant_user_ids']) . '<br>'; $spk = [];
$spk = array();
$speaker_name = array();
foreach ($event['participant_user_ids'] as $uid) { foreach ($event['participant_user_ids'] as $uid) {
/* The check for uid==4 is for us not to show the "Opefest Team" as a presenter for lunches, etc. */ if (in_array($uid, $config['hidden_speakers']) || empty($data['speakers'][$uid])) {
if ($uid == 4 || empty ($data['speakers'][$uid])) {
continue; continue;
} else {
/* TODO: fix the URL */
$name = $data['speakers'][$uid]['first_name'] . ' ' . $data['speakers'][$uid]['last_name'];
$spk[$uid] = '<a class="vt-p" href="SPKURL#'. $name . '">' . $name . '</a>';
} }
$speaker = $data['speakers'][$uid];
$name = $speaker['first_name'] . ' ' . $speaker['last_name'];
$organisation = empty($speaker['organisation']) ? '' :
('<br>/&#8288;' . $speaker['organisation'] . '&#8288;/');
$spk[] = '<a class="vt-p" href="#' . $name . '">' . $name . '</a>' . $organisation;
} }
$speakers = implode (', ', $spk); $speakers = implode (', ', $spk);
} }
if ($microslots[$slot_index][0] < $now) {
/* Hack, we don't want language for the misc track. This is the same for all years. */ // talk has already started. Provide feedback links
if ('misc' !== $data['tracks'][$event['track_id']]['name']['en']) { $fullfb = '<p align=right><strong><a href="https://cfp.openfest.org/events/' . $eid . '/feedback/new">'.pll__('Submit feedback').'</a></strong></p>';
$csslang = "schedule-".$event['language']; $progfb = '<p><i><a href="https://cfp.openfest.org/events/' . $eid . '/feedback/new">'.pll__('Submit feedback').'</a></i></p>';
} else { } else {
$csslang = ""; $fullfb = "";
$progfb = "";
} }
$cssclass = &$data['tracks'][$event['track_id']]['css_class']; $content = '<a href="#lecture-' . $eid . '">' . htmlspecialchars($title) . '</a><br>' . $speakers;
$style = ' class="' . $cssclass . ' ' . $csslang . '"';
$content = '<a href=#lecture-' . $eid . '>' . htmlspecialchars($title) . '</a> <br>' . $speakers;
if (!isset($known_events[$eid])) {
//if (!in_array($data['events'][$event_info['event_id']]['track_id'], $config['hidden_language_tracks']) && !isset($known_events[$eid])) {
$fulltalks .= '<section id="lecture-' . $eid . '">';
/* these are done by $eid, as otherwise we get some talks more than once (for example the lunch) */ // We don't want '()' when we don't have a speaker name
$fulltalks[$eid] = ''; $fulltalk_spkr = strlen($speakers) > 0 ? (' (' . $speakers . ')') : '';
$fulltalks[$eid] .= '<section id="lecture-' . $eid . '">'; $fulltalks .= '<p><strong>' . htmlentities($event['title']) . ' ' . $fulltalk_spkr . '</strong></p>';
/* We don't want '()' when we don't have a speaker name */ $fulltalks .= '<p>' . htmlentities($event['abstract']) . '</p>';
$fulltalk_spkr = strlen($speakers)>1 ? ' (' . $speakers . ')' : ''; $fulltalks .= $fullfb;
$fulltalks[$eid] .= '<p><strong>' . $event['title'] . ' ' . $fulltalk_spkr . '</strong>'; $fulltalks .= '<div class="separator"></div></section>';
$fulltalks[$eid] .= '<p>' . $event['abstract'] . '</p>'; $known_events[$eid] = $eid;
$fulltalks[$eid] .= '<div class="separator"></div></section>'; }
if ($slot['event_id'] === $prev_event_id) { if ($eid === $lastEventId) {
array_pop($lines); array_pop($columns);
$lines[] = '<td' . $style . ' colspan="' . ++$colspan . '">' . $content . '</td>'; ++$colspan;
} }
else { else {
$lines[] = '<td' . $style . '>' . $content . '</td>';
$colspan = 1; $colspan = 1;
} }
$rowspan = array_key_exists('rowspan', $event_info) ? (' rowspan="' . $event_info['rowspan'] . '"') : '';
// CSS
$cssClasses = [];
if (!in_array($event['track_id'], $config['hidden_language_tracks'])) {
$cssClasses[] = 'schedule-' . $event['language'];
} }
$prev_event_id = $slot['event_id']; $cssClass = $data['tracks'][$event['track_id']]['css_class'];
}
$lines[] = '</tr>'; if (strlen($cssClass) > 0) {
/* create the legend */ $cssClasses[] = $cssClass;
}
$legend = []; $cssClasses = count($cssClasses) > 0 ? (' class="' . implode(' ', $cssClasses) . '"') : '';
foreach($data['tracks'] as $track) { // Render cell
$legend[] = '<tr><td class="' . $track['css_class'] . '">' . $track['name'][$CF['lang']] . '</td></tr>'; $columns[] = '<td' . ($colspan > 1 ? ' colspan="' . $colspan . '"' : $rowspan) . $cssClasses . '>' . $content . $progfb . '</td>';
}
foreach ($languages as $l => $n) {
$legend[] = '<tr><td class="schedule-' . $l . '">' . $n['name'] . '</td></tr>';
}
$gspk = []; $lastEventId = $eid;
$fspk = []; unset($eid, $event);
$types = []; }
$types['twitter']['url']='https://twitter.com/';
$types['twitter']['class']='fa fa-twitter';
$types['github']['url']='https://github.com/';
$types['github']['class']='fa fa-github';
$types['email']['url']='mailto:';
$types['email']['class']='fa fa-envelope';
$gspk[] = '<div class="grid members">'; $schedule_body .= '<tr><td>';
$schedule_body .= date('H:i', $microslots[$slot_index][0]) . ' - ' . date('H:i', $microslots[$slot_index][1]);
$schedule_body .= '</td>';
$schedule_body .= implode('', $columns);
$schedule_body .= '</tr>';
}
foreach ($data['speakers'] as $speaker) { $schedule = '<table cellpadding="0" cellspacing="0" style="text-align: center;" class="schedule"><thead><tr><th></th>';
foreach ($halls as $hall_id => $hall) {
if (!in_array($hall_id, $hall_ids)) {
continue;
}
$schedule .= '<th>' . $hall[$config['lang']] . '</th>';
}
$schedule .= '</tr></thead><tbody>';
$schedule .= $schedule_body;
$schedule .= '</tbody></table>';
// Create the legend
$legend = '';
foreach($data['tracks'] as $track_id => $track) {
if ( in_array($track_id, $config['hidden_language_tracks'])) {
continue;
}
$legend .= '<tr><td class="' . $track['css_class'] . '">' . $track['name'][$config['lang']] . '</td></tr>';
}
foreach ($languages as $code => $lang) {
$legend .= '<tr><td class="schedule-' . $code . '">' . $lang['name'] . '</td></tr>';
}
// Speaker list
$gspk = '<div class="grid members">';
$fspk = '';
$types = [
'twitter' => [
'class' => 'twitter',
'url' => 'https://twitter.com/',
],
'github' => [
'class' => 'github',
'url' => 'https://github.com/',
],
'email' => [
'class' => 'envelope',
'url' => 'mailto:',
],
];
foreach ($data['speakers'] as $speaker) {
$name = $speaker['first_name'] . ' ' . $speaker['last_name']; $name = $speaker['first_name'] . ' ' . $speaker['last_name'];
$gspk[] = '<div class="member col4">'; $gspk .= '<div class="member col4">';
$gspk[] = '<a href="#' . $name . '">'; $gspk .= '<a href="#' . $name . '">';
$gspk[] = '<img width="100" height="100" src="' . $cfp_url . $speaker['picture']['schedule']['url'].'" class="attachment-100x100 wp-post-image" alt="' . $name .'" />'; $gspk .= '<img width="100" height="100" src="' . $speaker['picture'] . '" class="attachment-100x100 wp-post-image" alt="' . $name . '" />';
$gspk[] = '</a> </div>'; $gspk .= '</a> </div>';
$fspk[] = '<div class="speaker" id="' . $name . '">'; $fspk .= '<div class="speaker" id="' . $name . '">';
$fspk[] = '<img width="100" height="100" src="' . $cfp_url . $speaker['picture']['schedule']['url'].'" class="attachment-100x100 wp-post-image" alt="' . $name .'" />'; $fspk .= '<img width="100" height="100" src="' . $speaker['picture'] . '" class="attachment-100x100 wp-post-image" alt="' . $name . '" />';
$fspk[] = '<h3>' . $name . '</h3>'; $fspk .= '<h3>' . $name . '</h3>';
$fspk[] = '<div class="icons">'; $fspk .= '<div class="icons">';
foreach ($types as $type => $parm) {
foreach ($types as $type => $param) {
if (!empty($speaker[$type])) { if (!empty($speaker[$type])) {
$fspk[] = '<a href="'. $parm['url'] . $speaker[$type] . '"><i class="' . $parm['class'] . '"></i></a>'; $fspk .= '<a href="' . $param['url'] . $speaker[$type] . '"><i class="fa fa-' . $param['class'] . '"></i></a>';
} }
} }
$fspk[] = '</div>';
$fspk[] = '<p>' . $speaker['biography'] . '</p>'; $fspk .= '</div>';
$fspk[] = '</div><div class="separator"></div>'; $fspk .= '<p>' . htmlentities($speaker['biography']) . '</p>';
$fspk .= '</div><div class="separator"></div>';
}
$gspk .= '</div>';
return compact('slots', 'schedule', 'fulltalks', 'gspk', 'fspk', 'legend');
} }
$gspk[] = '</div>';
return array_merge($data, compact('lines', 'fulltalks', 'gspk', 'fspk', 'legend'));

View File

@ -0,0 +1,217 @@
<?php
namespace PHP81_BC;
use DateTime;
use DateTimeZone;
use DateTimeInterface;
use Exception;
use IntlDateFormatter;
use IntlGregorianCalendar;
use InvalidArgumentException;
/**
* Locale-formatted strftime using IntlDateFormatter (PHP 8.1 compatible)
* This provides a cross-platform alternative to strftime() for when it will be removed from PHP.
* Note that output can be slightly different between libc sprintf and this function as it is using ICU.
*
* Usage:
* use function \PHP81_BC\strftime;
* echo strftime('%A %e %B %Y %X', new \DateTime('2021-09-28 00:00:00'), 'fr_FR');
*
* Original use:
* \setlocale(LC_TIME, 'fr_FR.UTF-8');
* echo \strftime('%A %e %B %Y %X', strtotime('2021-09-28 00:00:00'));
*
* @param string $format Date format
* @param integer|string|DateTime $timestamp Timestamp
* @return string
* @author BohwaZ <https://bohwaz.net/>
*/
function strftime (string $format, $timestamp = null, ?string $locale = null) : string {
if (!($timestamp instanceof DateTimeInterface)) {
$timestamp = is_int($timestamp) ? '@' . $timestamp : (string) $timestamp;
try {
$timestamp = new DateTime($timestamp);
} catch (Exception $e) {
throw new InvalidArgumentException('$timestamp argument is neither a valid UNIX timestamp, a valid date-time string or a DateTime object.', 0, $e);
}
}
$timestamp->setTimezone(new DateTimeZone(date_default_timezone_get()));
if (empty($locale)) {
// get current locale
$locale = setlocale(LC_TIME, '0');
}
// remove trailing part not supported by ext-intl locale
$locale = preg_replace('/[^\w-].*$/', '', $locale);
$intl_formats = [
'%a' => 'EEE', // An abbreviated textual representation of the day Sun through Sat
'%A' => 'EEEE', // A full textual representation of the day Sunday through Saturday
'%b' => 'MMM', // Abbreviated month name, based on the locale Jan through Dec
'%B' => 'MMMM', // Full month name, based on the locale January through December
'%h' => 'MMM', // Abbreviated month name, based on the locale (an alias of %b) Jan through Dec
];
$intl_formatter = function (DateTimeInterface $timestamp, string $format) use ($intl_formats, $locale) {
$tz = $timestamp->getTimezone();
$date_type = IntlDateFormatter::FULL;
$time_type = IntlDateFormatter::FULL;
$pattern = '';
switch ($format) {
// %c = Preferred date and time stamp based on locale
// Example: Tue Feb 5 00:45:10 2009 for February 5, 2009 at 12:45:10 AM
case '%c':
$date_type = IntlDateFormatter::LONG;
$time_type = IntlDateFormatter::SHORT;
break;
// %x = Preferred date representation based on locale, without the time
// Example: 02/05/09 for February 5, 2009
case '%x':
$date_type = IntlDateFormatter::SHORT;
$time_type = IntlDateFormatter::NONE;
break;
// Localized time format
case '%X':
$date_type = IntlDateFormatter::NONE;
$time_type = IntlDateFormatter::MEDIUM;
break;
default:
$pattern = $intl_formats[$format];
}
// In October 1582, the Gregorian calendar replaced the Julian in much of Europe, and
// the 4th October was followed by the 15th October.
// ICU (including IntlDateFormattter) interprets and formats dates based on this cutover.
// Posix (including strftime) and timelib (including DateTimeImmutable) instead use
// a "proleptic Gregorian calendar" - they pretend the Gregorian calendar has existed forever.
// This leads to the same instants in time, as expressed in Unix time, having different representations
// in formatted strings.
// To adjust for this, a custom calendar can be supplied with a cutover date arbitrarily far in the past.
$calendar = IntlGregorianCalendar::createInstance();
$calendar->setGregorianChange(PHP_INT_MIN);
return (new IntlDateFormatter($locale, $date_type, $time_type, $tz, $calendar, $pattern))->format($timestamp);
};
// Same order as https://www.php.net/manual/en/function.strftime.php
$translation_table = [
// Day
'%a' => $intl_formatter,
'%A' => $intl_formatter,
'%d' => 'd',
'%e' => function ($timestamp) {
return sprintf('% 2u', $timestamp->format('j'));
},
'%j' => function ($timestamp) {
// Day number in year, 001 to 366
return sprintf('%03d', $timestamp->format('z')+1);
},
'%u' => 'N',
'%w' => 'w',
// Week
'%U' => function ($timestamp) {
// Number of weeks between date and first Sunday of year
$day = new DateTime(sprintf('%d-01 Sunday', $timestamp->format('Y')));
return sprintf('%02u', 1 + ($timestamp->format('z') - $day->format('z')) / 7);
},
'%V' => 'W',
'%W' => function ($timestamp) {
// Number of weeks between date and first Monday of year
$day = new DateTime(sprintf('%d-01 Monday', $timestamp->format('Y')));
return sprintf('%02u', 1 + ($timestamp->format('z') - $day->format('z')) / 7);
},
// Month
'%b' => $intl_formatter,
'%B' => $intl_formatter,
'%h' => $intl_formatter,
'%m' => 'm',
// Year
'%C' => function ($timestamp) {
// Century (-1): 19 for 20th century
return floor($timestamp->format('Y') / 100);
},
'%g' => function ($timestamp) {
return substr($timestamp->format('o'), -2);
},
'%G' => 'o',
'%y' => 'y',
'%Y' => 'Y',
// Time
'%H' => 'H',
'%k' => function ($timestamp) {
return sprintf('% 2u', $timestamp->format('G'));
},
'%I' => 'h',
'%l' => function ($timestamp) {
return sprintf('% 2u', $timestamp->format('g'));
},
'%M' => 'i',
'%p' => 'A', // AM PM (this is reversed on purpose!)
'%P' => 'a', // am pm
'%r' => 'h:i:s A', // %I:%M:%S %p
'%R' => 'H:i', // %H:%M
'%S' => 's',
'%T' => 'H:i:s', // %H:%M:%S
'%X' => $intl_formatter, // Preferred time representation based on locale, without the date
// Timezone
'%z' => 'O',
'%Z' => 'T',
// Time and Date Stamps
'%c' => $intl_formatter,
'%D' => 'm/d/Y',
'%F' => 'Y-m-d',
'%s' => 'U',
'%x' => $intl_formatter,
];
$out = preg_replace_callback('/(?<!%)%([_#-]?)([a-zA-Z])/', function ($match) use ($translation_table, $timestamp) {
$prefix = $match[1];
$char = $match[2];
$pattern = '%'.$char;
if ($pattern === '%n') {
return "\n";
} elseif ($pattern === '%t') {
return "\t";
}
if (!isset($translation_table[$pattern])) {
throw new InvalidArgumentException(sprintf('Format "%s" is unknown in time format', $pattern));
}
$replace = $translation_table[$pattern];
if (is_string($replace)) {
$result = $timestamp->format($replace);
} else {
$result = $replace($timestamp, $pattern);
}
switch ($prefix) {
case '_':
// replace leading zeros with spaces but keep last char if also zero
return preg_replace('/\G0(?=.)/', ' ', $result);
case '#':
case '-':
// remove leading zeros but keep last char if also zero
return preg_replace('/^0+(?=.)/', '', $result);
}
return $result;
}, $format);
$out = str_replace('%%', '%', $out);
return $out;
}