Compare commits

..

No commits in common. "master" and "doug" have entirely different histories.
master ... doug

74 changed files with 201 additions and 3086 deletions

View File

@ -1,6 +0,0 @@
[flake8]
ignore = E111,I001,I004,I003,E265,E114,E501,I005
exclude = .git,__pycache__
max-line-length = 160
use-flake8-tabs = true
tab-width = 2

5
.gitignore vendored
View File

@ -1,8 +1,3 @@
*.un~
*.swp
*.sh
thsf.log
thsf_venv
build/
src/thsf.egg-info/
thsf.pid

View File

@ -1,6 +0,0 @@
{
"arrowParens": "always",
"singleQuote": true,
"trailingComma": "es5",
"bracketSpacing": false
}

491
.pylintrc
View File

@ -1,491 +0,0 @@
[MASTER]
# A comma-separated list of package or module names from where C extensions may
# be loaded. Extensions are loading into the active Python interpreter and may
# run arbitrary code.
extension-pkg-whitelist=
# Add files or directories to the blacklist. They should be base names, not
# paths.
ignore=CVS
# Add files or directories matching the regex patterns to the blacklist. The
# regex matches against base names, not paths.
ignore-patterns=
# Python code to execute, usually for sys.path manipulation such as
# pygtk.require().
#init-hook=
# Use multiple processes to speed up Pylint. Specifying 0 will auto-detect the
# number of processors available to use.
jobs=1
# Control the amount of potential inferred values when inferring a single
# object. This can help the performance when dealing with large functions or
# complex, nested conditions.
limit-inference-results=100
# List of plugins (as comma separated values of python modules names) to load,
# usually to register additional checkers.
load-plugins=
# Pickle collected data for later comparisons.
persistent=yes
# Specify a configuration file.
#rcfile=
# When enabled, pylint would attempt to guess common misconfiguration and emit
# user-friendly hints instead of false-positive error messages.
suggestion-mode=yes
# Allow loading of arbitrary C extensions. Extensions are imported into the
# active Python interpreter and may run arbitrary code.
unsafe-load-any-extension=no
[MESSAGES CONTROL]
# Only show warnings with the listed confidence levels. Leave empty to show
# all. Valid levels: HIGH, INFERENCE, INFERENCE_FAILURE, UNDEFINED.
confidence=
# Disable the message, report, category or checker with the given id(s). You
# can either give multiple identifiers separated by comma (,) or put this
# option multiple times (only on the command line, not in the configuration
# file where it should appear only once). You can also use "--disable=all" to
# disable everything first and then reenable specific checks. For example, if
# you want to run only the similarities checker, you can use "--disable=all
# --enable=similarities". If you want to run only the classes checker, but have
# no Warning level messages displayed, use "--disable=all --enable=classes
# --disable=W".
disable=missing-module-docstring,
missing-class-docstring,
missing-function-docstring,
broad-except,
logging-fstring-interpolation,
wrong-import-order
# Enable the message, report, category or checker with the given id(s). You can
# either give multiple identifier separated by comma (,) or put this option
# multiple time (only on the command line, not in the configuration file where
# it should appear only once). See also the "--disable" option for examples.
enable=c-extension-no-member
[REPORTS]
# Python expression which should return a note less than 10 (10 is the highest
# note). You have access to the variables errors warning, statement which
# respectively contain the number of errors / warnings messages and the total
# number of statements analyzed. This is used by the global evaluation report
# (RP0004).
evaluation=10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10)
# snmp used to display messages. This is a python new-style format string
# used to format the message information. See doc for all details.
#msg-snmp=
# Set the output format. Available formats are text, parseable, colorized, json
# and msvs (visual studio). You can also give a reporter class, e.g.
# mypackage.mymodule.MyReporterClass.
output-format=text
# Tells whether to display a full report or only the messages.
reports=no
# Activate the evaluation score.
score=yes
[REFACTORING]
# Maximum number of nested blocks for function / method body
max-nested-blocks=5
# Complete name of functions that never returns. When checking for
# inconsistent-return-statements if a never returning function is called then
# it will be considered as an explicit return statement and no message will be
# printed.
never-returning-functions=sys.exit
[SIMILARITIES]
# Ignore comments when computing similarities.
ignore-comments=yes
# Ignore docstrings when computing similarities.
ignore-docstrings=yes
# Ignore imports when computing similarities.
ignore-imports=no
# Minimum lines number of a similarity.
min-similarity-lines=4
[MISCELLANEOUS]
# List of note tags to take in consideration, separated by a comma.
notes=FIXME,
XXX,
TODO
[SPELLING]
# Limits count of emitted suggestions for spelling mistakes.
max-spelling-suggestions=4
# Spelling dictionary name. Available dictionaries: none. To make it working
# install python-enchant package..
spelling-dict=
# List of comma separated words that should not be checked.
spelling-ignore-words=
# A path to a file that contains private dictionary; one word per line.
spelling-private-dict-file=
# Tells whether to store unknown words to indicated private dictionary in
# --spelling-private-dict-file option instead of raising a message.
spelling-store-unknown-words=no
[STRING]
# This flag controls whether the implicit-str-concat-in-sequence should
# generate a warning on implicit string concatenation in sequences defined over
# several lines.
check-str-concat-over-line-jumps=no
[LOGGING]
# Format style used to check logging format string. `old` means using %
# formatting, while `new` is for `{}` formatting.
logging-format-style=old
# Logging modules to check that the string format arguments are in logging
# function parameter format.
logging-modules=
[BASIC]
# Naming style matching correct argument names.
argument-naming-style=snake_case
# Regular expression matching correct argument names. Overrides argument-
# naming-style.
#argument-rgx=
# Naming style matching correct attribute names.
attr-naming-style=snake_case
# Regular expression matching correct attribute names. Overrides attr-naming-
# style.
#attr-rgx=
# Bad variable names which should always be refused, separated by a comma.
bad-names=foo,
bar,
baz,
toto,
tutu,
tata
# Naming style matching correct class attribute names.
class-attribute-naming-style=any
# Regular expression matching correct class attribute names. Overrides class-
# attribute-naming-style.
#class-attribute-rgx=
# Naming style matching correct class names.
class-naming-style=PascalCase
# Regular expression matching correct class names. Overrides class-naming-
# style.
#class-rgx=
# Naming style matching correct constant names.
const-naming-style=UPPER_CASE
# Regular expression matching correct constant names. Overrides const-naming-
# style.
#const-rgx=
# Minimum line length for functions/classes that require docstrings, shorter
# ones are exempt.
docstring-min-length=-1
# Naming style matching correct function names.
function-naming-style=snake_case
# Regular expression matching correct function names. Overrides function-
# naming-style.
#function-rgx=
# Good variable names which should always be accepted, separated by a comma.
good-names=i,
j,
k,
ex,
e,
Run,
_
# Include a hint for the correct naming format with invalid-name.
include-naming-hint=no
# Naming style matching correct inline iteration names.
inlinevar-naming-style=any
# Regular expression matching correct inline iteration names. Overrides
# inlinevar-naming-style.
#inlinevar-rgx=
# Naming style matching correct method names.
method-naming-style=snake_case
# Regular expression matching correct method names. Overrides method-naming-
# style.
#method-rgx=
# Naming style matching correct module names.
module-naming-style=snake_case
# Regular expression matching correct module names. Overrides module-naming-
# style.
#module-rgx=
# Colon-delimited sets of names that determine each other's naming style when
# the name regexes allow several styles.
name-group=
# Regular expression which should only match function or class names that do
# not require a docstring.
no-docstring-rgx=^_
# List of decorators that produce properties, such as abc.abstractproperty. Add
# to this list to register other decorators that produce valid properties.
# These decorators are taken in consideration only for invalid-name.
property-classes=abc.abstractproperty
# Naming style matching correct variable names.
variable-naming-style=snake_case
# Regular expression matching correct variable names. Overrides variable-
# naming-style.
#variable-rgx=
[TYPECHECK]
# List of decorators that produce context managers, such as
# contextlib.contextmanager. Add to this list to register other decorators that
# produce valid context managers.
contextmanager-decorators=contextlib.contextmanager
# List of members which are set dynamically and missed by pylint inference
# system, and so shouldn't trigger E1101 when accessed. Python regular
# expressions are accepted.
generated-members=
# Tells whether missing members accessed in mixin class should be ignored. A
# mixin class is detected if its name ends with "mixin" (case insensitive).
ignore-mixin-members=yes
# Tells whether to warn about missing members when the owner of the attribute
# is inferred to be None.
ignore-none=yes
# This flag controls whether pylint should warn about no-member and similar
# checks whenever an opaque object is returned when inferring. The inference
# can return multiple potential results while evaluating a Python object, but
# some branches might not be evaluated, which results in partial inference. In
# that case, it might be useful to still emit no-member and other checks for
# the rest of the inferred objects.
ignore-on-opaque-inference=yes
# List of class names for which member attributes should not be checked (useful
# for classes with dynamically set attributes). This supports the use of
# qualified names.
ignored-classes=optparse.Values,thread._local,_thread._local
# List of module names for which member attributes should not be checked
# (useful for modules/projects where namespaces are manipulated during runtime
# and thus existing member attributes cannot be deduced by static analysis. It
# supports qualified module names, as well as Unix pattern matching.
ignored-modules=
# Show a hint with possible names when a member name was not found. The aspect
# of finding the hint is based on edit distance.
missing-member-hint=yes
# The minimum edit distance a name should have in order to be considered a
# similar match for a missing member name.
missing-member-hint-distance=1
# The total number of similar names that should be taken in consideration when
# showing a hint for a missing member.
missing-member-max-choices=1
[VARIABLES]
# List of additional names supposed to be defined in builtins. Remember that
# you should avoid defining new builtins when possible.
additional-builtins=
# Tells whether unused global variables should be treated as a violation.
allow-global-unused-variables=yes
# List of strings which can identify a callback function by name. A callback
# name must start or end with one of those strings.
callbacks=cb_,
_cb
# A regular expression matching the name of dummy variables (i.e. expected to
# not be used).
dummy-variables-rgx=_+$|(_[a-zA-Z0-9_]*[a-zA-Z0-9]+?$)|dummy|^ignored_|^unused_
# Argument names that match this expression will be ignored. Default to name
# with leading underscore.
ignored-argument-names=_.*|^ignored_|^unused_
# Tells whether we should check for unused import in __init__ files.
init-import=no
# List of qualified module names which can have objects that can redefine
# builtins.
redefining-builtins-modules=six.moves,past.builtins,future.builtins,builtins,io
[FORMAT]
# Expected format of line ending, e.g. empty (any line ending), LF or CRLF.
expected-line-ending-format=
# Regexp for a line that is allowed to be longer than the limit.
ignore-long-lines=^\s*(# )?<?https?://\S+>?$
# Number of spaces of indent required inside a hanging or continued line.
indent-after-paren=2
# String used as indentation unit. This is usually " " (4 spaces) or "\t" (1
# tab).
indent-string=' '
# Maximum number of characters on a single line.
max-line-length=200
# Maximum number of lines in a module.
max-module-lines=1000
# Allow the body of a class to be on the same line as the declaration if body
# contains single statement.
single-line-class-stmt=no
# Allow the body of an if to be on the same line as the test if there is no
# else.
single-line-if-stmt=no
[DESIGN]
# Maximum number of arguments for function / method.
max-args=5
# Maximum number of attributes for a class (see R0902).
max-attributes=7
# Maximum number of boolean expressions in an if statement.
max-bool-expr=5
# Maximum number of branch for function / method body.
max-branches=12
# Maximum number of locals for function / method body.
max-locals=15
# Maximum number of parents for a class (see R0901).
max-parents=7
# Maximum number of public methods for a class (see R0904).
max-public-methods=20
# Maximum number of return / yield for function / method body.
max-returns=6
# Maximum number of statements in function / method body.
max-statements=50
# Minimum number of public methods for a class (see R0903).
min-public-methods=2
[IMPORTS]
# Allow wildcard imports from modules that define __all__.
allow-wildcard-with-all=no
# Analyse import fallback blocks. This can be used to support both Python 2 and
# 3 compatible code, which means that the block might have code that exists
# only in one or another interpreter, leading to false positives when analysed.
analyse-fallback-blocks=no
# Deprecated modules which should not be used, separated by a comma.
deprecated-modules=optparse,tkinter.tix
# Create a graph of external dependencies in the given file (report RP0402 must
# not be disabled).
ext-import-graph=
# Create a graph of every (i.e. internal and external) dependencies in the
# given file (report RP0402 must not be disabled).
import-graph=
# Create a graph of internal dependencies in the given file (report RP0402 must
# not be disabled).
int-import-graph=
# Force import order to recognize a module as part of the standard
# compatibility libraries.
known-standard-library=
# Force import order to recognize a module as part of a third party library.
known-third-party=enchant
[CLASSES]
# List of method names used to declare (i.e. assign) instance attributes.
defining-attr-methods=__init__,
__new__,
setUp
# List of member names, which should be excluded from the protected access
# warning.
exclude-protected=_asdict,
_fields,
_replace,
_source,
_make
# List of valid names for the first argument in a class method.
valid-classmethod-first-arg=cls
# List of valid names for the first argument in a metaclass class method.
valid-metaclass-classmethod-first-arg=cls
[EXCEPTIONS]
# Exceptions that will emit a warning when being caught. Defaults to
# "BaseException, Exception".
overgeneral-exceptions=BaseException,
Exception

View File

@ -1,20 +0,0 @@
---
extends: default
rules:
line-length: disable
colons:
level: warning
indentation:
level: warning
indent-sequences: consistent
commas:
level: warning
brackets:
level: warning
hyphens:
level: warning
new-line-at-end-of-file: disable
quoted-strings:
required: only-when-needed
level: warning

View File

@ -1,6 +0,0 @@
global-exclude *.pyc
global-exclude build
global-exclude __pycache__
include src/thsf/templates/*.*
include src/thsf/static/**/*.*

View File

@ -1,50 +1,4 @@
.PHONY: clean distclean install run stop all docker-build docker-run docker-stop docker-all
.PHONY: install
install:
set -e ;\
python -m venv thsf_venv; \
. thsf_venv/bin/activate; \
pip install -r requirements.txt ;\
pip install . ;\
pip install gunicorn;
run:
set -e ;\
THSF_DIR=$$(pwd); \
. thsf_venv/bin/activate; \
thsf_venv/bin/gunicorn -p thsf.pid -w 4 -b 0.0.0.0:8042 'thsf:app'
debug:
set -e ;\
THSF_DIR=$$(pwd); \
. thsf_venv/bin/activate; \
thsf_venv/bin/gunicorn -p thsf.pid -w 4 -b 0.0.0.0:8042 'thsf:app'
stop:
-set -e;\
THSF_DIR=$$(pwd); \
kill -15 $$(cat $$THSF_DIR/thsf.pid); \
rm thsf.pid
clean:
-set -e ;\
THSF_DIR=$$(pwd); \
rm -Rf ./build ./src/thsf.egg-info ./thsf.pid ./thsf.log; \
. thsf_venv/bin/activate; \
pip uninstall thsf -y
distclean: clean
rm -Rf thsf_venv/
all: stop clean install run
docker-build:
docker-compose build
docker-run:
docker-compose up -d
docker-stop:
-docker-compose down
docker-all: docker-stop docker-build docker-run
echo "We Make P0RN"

84
NOTE.md
View File

@ -1,84 +0,0 @@
# API
## Récupérer l'évènement
```bash
curl -s -X GET -H "Authorization: Token <TOKEN>" https://23.thsf.net/api/events/
```
Réponse:
```json
[{"name":{"en":"Toulouse HackerSpace Factory","fr":"Toulouse HackerSpace Factory"},"slug":"thsf-2023","is_public":true,"date_from":"2023-05-26","date_to":"2023-05-28","timezone":"Europe/Paris","urls":{"base":"https://23.thsf.net/thsf-2023/","schedule":"https://23.thsf.net/thsf-2023/schedule/","login":"https://23.thsf.net/thsf-2023/login/","feed":"https://23.thsf.net/thsf-2023/schedule/feed.xml"}}]
```
## Récupérer la liste des intervenants
```bash
curl -s -X GET -H "Authorization: Token <TOKEN>" https://23.thsf.net/api/speakes/
```
## Récupérer la liste des salles
curl -s -X GET -H "Authorization: Token <TOKEN>" https://23.thsf.net/api/events/thsf-2023/rooms/
## Récupérer les versions des plannings de l'évènement
```bash
curl -s -X GET -H "Authorization: Token <TOKEN>" https://23.thsf.net/api/events/<EVENT>/schedules/
```
Réponse:
```json
{"count":6,"next":null,"previous":null,"results":[{"version":"wip","published":null},{"version":"0.5","published":"2023-04-03T12:14:39.675671+02:00"},{"version":"0.4","published":"2023-04-03T10:07:41.632059+02:00"},{"version":"0.3","published":"2023-03-25T12:34:17.704819+01:00"},{"version":"0.2","published":"2023-03-25T12:21:23.464899+01:00"},{"version":"0.1","published":"2023-03-25T12:14:10.460100+01:00"}]}
```
### Récupérer un planning spécifique
```bash
curl -s -X GET -H "Authorization: Token <TOKEN>" https://23.thsf.net/api/events/thsf-2023/schedules/<version>/
```
Reponse:
```json
{
"slots": [
{
"code": "JHCFVE",
"speakers": [
{
"code": "BT9CDU",
"name": "Youssr Youssef",
"biography": "",
"avatar": "https://23.thsf.net/media/avatars/YoussrYoussef_408QSEG.jpeg"
}
],
"title": "René Carmille, un hacker sous l'Occupation",
"submission_type": {
"en": "Screening",
"fr": "Projection"
},
"track": null,
"state": "confirmed",
"abstract": "Entre collaboration et résistance, confronté aux premiers enjeux modernes de la collecte de données en masse, la trajectoire étonnante de René Carmille n'a encore jamais été racontée... Son héritage est pourtant majeur, les questions qu'il soulève le sont tout autant. \r\nSous lOccupation, le polytechnicien René Carmille est le précurseur de l'usage massif des données en France : c'est lui qui a mis en place et dirigé le Service national de statistiques (SNS) qui deviendra plus tard l'INSEE, c'est aussi lui qui a inventé notre numéro de sécurité sociale.\r\n\r\nLa projection du documentaire sera suivie d'une rencontre en visioconférence avec la réalisatrice.",
"description": "",
"duration": 80,
"slot_count": 1,
"do_not_record": false,
"is_featured": true,
"content_locale": "fr",
"slot": {
"room": {
"en": "Salle 1 Cinema",
"fr": "Salle 1 Cinema"
},
"start": "2023-05-27T11:30:00+02:00",
"end": "2023-05-27T12:50:00+02:00"
},
"image": "https://23.thsf.net/media/thsf-2023/submissions/JHCFVE/Carmille-1-scaled_p0gxA6D.jpeg",
"resources": []
},
...
```

View File

@ -1,66 +1,36 @@
# THSF.NET
Le site du **THSF**
Le site du THSF
## Fonctionnement du site
## Modifier le site
Le site du **THSF** est une application *Python Flask* configurée à partir du fichier `config.yml` situé à la racine du dépôt.
Il n'est généralement pas nécessaire de modifier ce fichier de configuration, cependant il ets possible d'augmenter le niveau de *log* en modifiant la clef de configuration `log::root::level` en la passant à `DEBUG` (valeur en production: `INFO`).
### Conteneur
Un fichier `thsf.Dockerfile` ainsi que le fichier `docker-compose.yml` correspondant permettront de rapidement démarrer localement une instance du site du **THSF**.
### Démarrer une instance du site du **THSF**
Assurez vous d'avoir l'environnement de conteneurisation adéquat (i.e: *docker* + *docker-compose*) puis exécuter directement les commandes suivantes depuis la racine du dépôt:
```shell
docker-compose build
docker-compose up -d
```
Le site du **THSF** écoutera alors sur le port *TCP/8042*:
`http://127.0.0.1:8042`
### Arrêter une instance du site du **THSF**
```shell
docker-compose down
```
## Apporter des modifications au site
**Important**: Avant d'apporter la moindre modification, pensez à créer une nouvelle branche à l'aide de la commande suivante en remplaçant `ma_branche` par le nom de votre branche:
```shell
git checkout -b ma_branche
```
Le code de l'application *Python Flask* se situe dans le répertoire `src` et une fois votre branche créée, vous pouvez apporter toutes les modification souhaitées.
### Créer un patch contenant toutes vos modifications
Une fois satisfaits de vos modifications vous pouvez créer un *patch* regroupant l'ensemble de vos modifications à l'aide la commande suivante
```shell
git diff -u --patch master..ma_branche > mes_modifications.patch
```
Vous pouvez faire parvenir votre fichier de *patch* à **contact@tetalab.org** pour que vos modifications soient incorporées au site après vérification.
### Publication automatisée des modifications
**Note**: Cette partie ne concerne que les personnes ayant un accès en écriture sur le dépôt *Git*.
Il n'est **pas possible** de pousser directement des modifications sur la branche `master`.
Il n'est **pas possible** de pousser directement des modifcations sur la branche `master`.
Pour modifier le site, il est nécessaire de créer une branche spécifique et d'y pousser vos modifications.
## Publication du site
Lorsque vous êtes satisfaits de vos modifications, vous pouvez créer [une demande d'ajout](https://git.tetalab.org/tetalab/thsf.net/pulls) de votre branche sur la branche `master`.
Lorsque la demande de fusion sera acceptée, vos modifications seront automatiquement publiées sur [le site du THSF](https://www.thsf.net).
Lorsque la demande de fusion sera acceptée (vous pouvez auto-accepter vos demandes de fusion), vos modifications seront automatiquement publiées sur [le site du THSF](https://www.thsf.net).
Vous pouvez auto-accepter vos demandes de fusion si vous faites partie des développeurs autorisés.
### Personnalisation de la publication
Afin de rendre le processus plus souple, il est possible de personnaliser la livraison en plaçant **à la racine du dépôt** un fichier `Makefile` contenant une cible `install` qui sera systématiquement executée.
C'est dans cette cible `install` que vous pourrez mettre toutes vos commandes personnalisées, typiquement l'installation de modules `npm`.
Le processus de publication est le suivant:
1. Le site actuellement en production est **supprimé**
2. La branche `master` du présent dépôt est cloné sur le serveur hébergeant le site du **THSF**
3. Si un fichier `Makefile` se trouve **à la racine du dépôt**, la cible `install` (i.e: `make install`) est automatiquement exécutée.
## Contrôle de qualité et tests
Aucun contrôle de qualité ou de tests n'est mis en place. Vous êtes seuls sur le coup.
Soyez responsable et **testez vos modifications sur votre machine locale avant de fusionner votre branche** sur la branche `master`.

View File

@ -1,65 +0,0 @@
---
log:
version: 1
formatters:
default:
format: '[%(asctime)-20s][%(levelname)-8s][%(funcName)-20s]: %(message)s'
handlers:
wsgi:
class: logging.FileHandler
filename: thsf.log
formatter: default
loggers:
thsf:
handlers: [wsgi]
propagate: no
root:
level: INFO
handlers: [wsgi]
app:
secret_key: xxx
languages:
- fr
name: THSF
real_url: https://www.thsf.net
pretalx:
url: https://23.thsf.net
apiprefix: api
apikey: bb770a53b15467dfb67c03d178004aca9e4819d6
event: thsf-2023
schedule: wip
navbar:
items:
- name: Home
classes: fa-solid fa-house
url: /
- name: Programme
classes: fa-regular fa-calendar
url: /planning
- name: Lieu
classes: fa-solid fa-map-location-dot
url: /place
- name: Restauration
classes: fa-solid fa-burger
url: /food
- name: Goodies
classes: fa-solid fa-shirt
url: /goodies
- name: Concerts & DJ Sets
classes: fa-solid fa-guitar
url: /concerts
- name: Ateliers
classes: fa-solid fa-screwdriver-wrench
url: /workshops
- name: Projections
classes: fa-solid fa-film
url: /screenings
- name: Tables rondes
classes: fa-solid fa-users-line
url: /discussions
- name: Installation
classes: fa-solid fa-palette
url: /exhibitions
- name: Présentations
classes: fa-solid fa-person-chalkboard
url: /talks

View File

@ -1,12 +0,0 @@
version: "2"
services:
thsf:
build:
dockerfile: thsf.Dockerfile
context: .
extra_hosts:
- "23.thsf.net:192.168.122.26"
ports:
- "127.0.0.1:8042:8042"
image: thsf:latest
container_name: thsf

BIN
images/affiche_v1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

View File

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 31 KiB

34
index.html Normal file
View File

@ -0,0 +1,34 @@
<!DOCTYPE html>
<html lang='zxx'>
<head>
<title>THSF 2023: Extractivisme</title>
<meta name="viewport" content="initial-scale=1.0" />
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<link rel="stylesheet" type="text/css" href="./styles/main.css" />
<link rel="icon" type="image/png" href="/images/favicon.png" />
</head>
<body>
<ul>
<li></li>
<li></li>
<li></li>
<li>Extraction in progress...</li>
<li></li>
<li></li>
<li></li>
<li>Extraction in progress...</li>
<li></li>
<li></li>
<li></li>
<li>Extraction in progress...</li>
<li></li>
<li></li>
<li></li>
<li>Extraction in progress...</li>
<li></li>
<li></li>
<li></li>
</ul>
</body>
</html>

View File

@ -1,13 +0,0 @@
#!/usr/bin/python3
import docker
client = docker.from_env()
for container in client.containers.list():
if container.name == "thsf":
print("Content-type: text/html\n\n")
print("[+] Rebooting container<br>")
print(" '-> Stopping container<br>")
container.stop()
print(" '-> Starting container<br>")
container.start()
print("[+] Container restarted<br>")

File diff suppressed because one or more lines are too long

View File

@ -1,7 +0,0 @@
$("#reboot").on("click", function(){
$.get("https://www.thsf.net/thsf.net/maintenance/reboot.py", function(data, status){
console.log(status);
$("#logs").html = data;
setTimeout(function () {document.location.reload()}, 5000);
});
});

View File

@ -1,19 +0,0 @@
#!/usr/bin/python3
import docker
import jinja2
base_path = "/var/www/www.thsf.net/thsf.net/maintenance/templates"
status_template = "status.html"
env = jinja2.Environment(loader=jinja2.FileSystemLoader(base_path),
autoescape=True)
template = env.get_template(status_template)
client = docker.from_env()
for container in client.containers.list():
if container.name == "thsf":
cont = dict()
cont["name"] = container.name
cont["status"] = container.status
cont["logs"] = container.logs().decode('utf-8').replace('\n', '<br>')
print(template.render(containers=[cont]))

View File

@ -1,66 +0,0 @@
body {
font-size: 1.2em;
font-family: Arial, Helvetica, sans-serif;
}
.page_wrapper {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
align-content: center;
text-align: center;
}
.center_wrapper {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
text-align: center;
}
.container_list {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
text-align: center;
width: 48em;
}
.title {
font-size: 3em;
font-weight: bold;
margin: 0.5em;
}
.table_headers, .line {
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
}
.header, .status {
font-weight: bold;
border-width: 1px;
border-style: solid;
width: 16em;
padding: 0.2em;
}
.table_content {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
text-align: center;
}
.status {
font-weight: normal;
}
.container_log {
text-align: left;
width: 49em;
padding: 0.2em;
border-width: 1px;
border-style: solid;
}
.button {
font-weight: bold;
cursor: pointer;
}

View File

@ -1,46 +0,0 @@
Content-type: text/html
<!DOCTYPE html>
<html lang='zxx'>
<head>
<title>THSF 2023: Status page</title>
<meta name="viewport" content="initial-scale=1.0">
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<link rel="stylesheet"
href="/thsf.net/maintenance/style/maintenance.css">
<link rel="stylesheet"
href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
<script src="/thsf.net/maintenance/scripts/jquery-3.7.0.min.js"></script>
</head>
<body>
<div class="page_wrapper">
<div class="center_wrapper">
<div class="container_list">
<div class="line">
<span class="title">THSF Status</span>
</div>
<div class="table_headers">
<div class="header">Name</div>
<div class="header">Status</div>
<div class="header">Action</div>
</div>
<div class="table_content">
{% for container in containers %}
<div class="line">
<div class="status">{{ container.name }}</div>
<div class="status">{{ container.status }}</div>
<div class="status">
<i id="reboot" class="button fa-solid fa-recycle" title="Reboot container" alt="Reboot container"></i>
</div>
</div>
<div class="container_log" id="logs">
{{ container.logs | safe }}
</div>
{% endfor %}
</div>
</div>
</div>
</div>
<script src="/thsf.net/maintenance/scripts/maintenance.js"></script>
</body>
</html>

View File

@ -1,10 +0,0 @@
[build-system]
requires = ["setuptools>=62",
"build",
"wheel"]
build-backend = "setuptools.build_meta"
[tool.pytest.ini_options]
pythonpath = [
"src"
]

View File

@ -1,7 +0,0 @@
build
wheel
flask
Flask-Minify
gunicorn
pyYAML
requests

View File

@ -1,611 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 27.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 756 611.76" style="enable-background:new 0 0 756 611.76;" xml:space="preserve">
<style type="text/css">
.st0{fill:#E5006D;}
.st1{fill:#FFFFFF;}
.st2{fill:url(#SVGID_1_);}
.st3{fill:url(#SVGID_00000080208031039852088860000012736015428469503665_);}
</style>
<g id="Calque_2_00000062903287396250667820000015008425281140850568_">
<rect x="-10.25" y="-9.84" class="st0" width="776.35" height="632.15"/>
</g>
<g id="Calque_1_00000168107049754406420960000008902215559746130366_">
<g>
<path d="M366.84,248.03c0,0-1.98-15.18-13.55-29.89l-19.59,33.94c6.6,3.81,12.93,8.09,18.92,12.76
C356.17,261.41,363.92,253.08,366.84,248.03z"/>
<path d="M315.4,219.95c0,0-9.31-12.16-26.68-19.11v39.19c7.62,0,15.25,0.54,22.77,1.59C312.84,236.87,315.4,225.78,315.4,219.95z"
/>
<path d="M256.81,221.35c0,0-14.14-5.88-32.66-3.21l19.59,33.94c6.6-3.81,13.47-7.16,20.51-10.01
C263.06,237.28,259.73,226.4,256.81,221.35z"/>
<path d="M206.77,251.86c0,0-15.18,1.98-29.89,13.55L210.82,285c3.81-6.6,8.09-12.93,12.76-18.92
C220.15,262.53,211.82,254.78,206.77,251.86z"/>
<path d="M178.69,303.3c0,0-12.16,9.31-19.11,26.68h39.19c0-7.62,0.54-15.25,1.59-22.77C195.61,305.86,184.52,303.3,178.69,303.3z"
/>
<path d="M180.09,361.89c0,0-5.88,14.14-3.21,32.66l33.94-19.59c-3.81-6.6-7.16-13.47-10.01-20.51
C196.03,355.64,185.14,358.97,180.09,361.89z"/>
<path d="M210.6,411.93c0,0,1.98,15.18,13.55,29.89l19.59-33.94c-6.6-3.81-12.93-8.09-18.92-12.76
C221.28,398.55,213.52,406.88,210.6,411.93z"/>
<path d="M262.04,440.01c0,0,9.31,12.16,26.68,19.11v-39.19c-7.62,0-15.25-0.54-22.77-1.59
C264.6,423.09,262.04,434.18,262.04,440.01z"/>
<path d="M320.63,438.61c0,0,14.14,5.88,32.66,3.21l-19.59-33.94c-6.6,3.81-13.47,7.16-20.51,10.01
C314.38,422.67,317.72,433.56,320.63,438.61z"/>
</g>
<g>
<path d="M554.34,395.12c-5.99,4.67-12.32,8.95-18.92,12.76l19.59,33.94c11.57-14.7,13.55-29.89,13.55-29.89
C565.65,406.88,557.89,398.55,554.34,395.12z"/>
<path d="M513.21,418.34c-7.52,1.05-15.14,1.59-22.77,1.59v39.19c17.37-6.95,26.68-19.11,26.68-19.11
C517.12,434.18,514.57,423.09,513.21,418.34z"/>
<path d="M465.98,417.88c-7.04-2.85-13.91-6.19-20.51-10.01l-19.59,33.94c18.52,2.67,32.66-3.21,32.66-3.21
C461.45,433.56,464.78,422.67,465.98,417.88z"/>
<path d="M426.55,264.84c5.99-4.67,12.32-8.95,18.92-12.76l-19.59-33.94c-11.57,14.7-13.55,29.89-13.55,29.89
C415.24,253.08,423,261.41,426.55,264.84z"/>
<path d="M467.68,241.62c7.52-1.05,15.14-1.59,22.77-1.59v-39.19c-17.37,6.95-26.68,19.11-26.68,19.11
C463.77,225.78,466.32,236.87,467.68,241.62z"/>
<path d="M514.91,242.07c7.04,2.85,13.91,6.19,20.51,10.01l19.59-33.94c-18.52-2.67-32.66,3.21-32.66,3.21
C519.44,226.4,516.11,237.28,514.91,242.07z"/>
<path d="M555.58,266.08c4.67,5.99,8.95,12.32,12.76,18.92l33.94-19.59c-14.7-11.57-29.89-13.55-29.89-13.55
C567.34,254.78,559.02,262.53,555.58,266.08z"/>
<path d="M578.8,307.21c1.05,7.52,1.59,15.14,1.59,22.77h39.19c-6.95-17.37-19.11-26.68-19.11-26.68
C594.64,303.3,583.55,305.86,578.8,307.21z"/>
<path d="M578.35,354.44c-2.85,7.04-6.19,13.91-10.01,20.51l33.94,19.59c2.67-18.52-3.21-32.66-3.21-32.66
C594.02,358.97,583.14,355.64,578.35,354.44z"/>
</g>
<path class="st0" d="M490.45,424.51c-6.39,0-12.79-0.65-19.03-1.92c-6.08-1.24-12.06-3.1-17.78-5.52
c-5.6-2.37-11.01-5.3-16.07-8.72c-5-3.38-9.7-7.26-13.97-11.53l-34.02-34.02l-34.02,34.02c-4.27,4.27-8.97,8.15-13.97,11.53
c-5.06,3.42-10.46,6.35-16.07,8.72c-5.72,2.42-11.7,4.27-17.78,5.52c-6.23,1.27-12.63,1.92-19.03,1.92s-12.79-0.65-19.03-1.92
c-6.08-1.24-12.06-3.1-17.78-5.52c-5.6-2.37-11.01-5.3-16.07-8.72c-5-3.38-9.7-7.26-13.97-11.53s-8.15-8.97-11.53-13.98
c-3.41-5.05-6.35-10.46-8.72-16.07c-2.42-5.71-4.27-11.69-5.52-17.78c-1.27-6.23-1.92-12.63-1.92-19.03c0-0.03,0-0.05,0-0.08
c0.01-6.38,0.65-12.75,1.92-18.95c1.25-6.08,3.1-12.06,5.52-17.78c2.37-5.6,5.3-11.01,8.72-16.07c3.38-5,7.26-9.7,11.53-13.97
s8.97-8.15,13.97-11.53c5.06-3.42,10.46-6.35,16.07-8.72c5.72-2.42,11.7-4.27,17.78-5.52c6.2-1.27,12.6-1.91,19.03-1.91
s12.83,0.64,19.03,1.91c6.08,1.24,12.06,3.1,17.78,5.52c5.61,2.37,11.01,5.31,16.07,8.72c5,3.38,9.7,7.26,13.97,11.53
c0,0,24.25,24.25,34.02,34.02l34.02-34.02c4.27-4.27,8.97-8.15,13.97-11.53c5.06-3.42,10.46-6.35,16.07-8.72
c5.72-2.42,11.7-4.27,17.78-5.52c6.23-1.27,12.63-1.92,19.03-1.92s12.8,0.65,19.03,1.92c6.08,1.24,12.06,3.1,17.78,5.52
c5.61,2.37,11.01,5.3,16.07,8.72c5,3.38,9.7,7.26,13.97,11.53c4.27,4.27,8.15,8.98,11.53,13.97c3.41,5.05,6.35,10.46,8.72,16.07
c2.42,5.71,4.27,11.69,5.52,17.78c1.27,6.23,1.92,12.63,1.92,19.02c0,6.4-0.65,12.8-1.92,19.03c-1.25,6.09-3.1,12.07-5.52,17.78
c-2.38,5.61-5.31,11.02-8.72,16.07c-3.38,5-7.26,9.7-11.53,13.97s-8.97,8.15-13.97,11.53c-5.06,3.42-10.46,6.35-16.07,8.72
c-5.72,2.42-11.7,4.27-17.78,5.52C503.24,423.86,496.84,424.51,490.45,424.51z M288.72,281.87c-3.28,0-6.55,0.33-9.72,0.98
c-3.08,0.63-6.11,1.57-9,2.79c-2.84,1.2-5.59,2.69-8.16,4.43c-2.55,1.72-4.95,3.71-7.14,5.89c-2.18,2.18-4.16,4.58-5.89,7.14
c-1.74,2.57-3.23,5.31-4.43,8.16c-1.22,2.89-2.16,5.92-2.79,9c-0.65,3.17-0.98,6.44-0.98,9.72s0.33,6.55,0.98,9.72
c0.63,3.08,1.57,6.11,2.79,9c1.2,2.85,2.69,5.59,4.43,8.16c1.72,2.55,3.71,4.95,5.89,7.14c2.18,2.18,4.58,4.16,7.14,5.89
c2.57,1.74,5.32,3.23,8.16,4.43c2.89,1.22,5.92,2.16,9,2.79c3.15,0.65,6.42,0.97,9.72,0.97s6.57-0.33,9.72-0.97
c3.08-0.63,6.11-1.57,9-2.79c2.85-1.2,5.59-2.7,8.16-4.43c1.69-1.14,4.97-3.91,7.22-5.98l33.93-33.93l-34.02-34.02
c-2.18-2.18-4.58-4.16-7.14-5.89c-2.57-1.74-5.32-3.23-8.16-4.43c-2.89-1.22-5.92-2.16-9-2.79
C295.27,282.2,292,281.87,288.72,281.87z M456.43,364c2.18,2.18,4.58,4.16,7.14,5.89c2.57,1.74,5.32,3.23,8.16,4.43
c2.89,1.22,5.92,2.16,9,2.79c3.16,0.65,6.43,0.97,9.72,0.97s6.57-0.33,9.72-0.97c3.08-0.63,6.1-1.57,9-2.79
c2.84-1.2,5.59-2.69,8.17-4.43c2.55-1.73,4.95-3.71,7.13-5.89c2.18-2.18,4.17-4.58,5.89-7.14c1.74-2.57,3.23-5.32,4.43-8.16
c1.22-2.9,2.16-5.92,2.79-9c0.65-3.17,0.98-6.44,0.98-9.72s-0.33-6.55-0.98-9.72c-0.63-3.07-1.57-6.1-2.79-9
c-1.2-2.85-2.7-5.59-4.43-8.16c-1.73-2.56-3.71-4.96-5.89-7.14c-2.18-2.18-4.58-4.17-7.14-5.89c-2.57-1.74-5.32-3.23-8.16-4.43
c-2.89-1.22-5.92-2.16-9-2.79c-3.16-0.65-6.43-0.97-9.72-0.97s-6.57,0.33-9.72,0.97c-3.08,0.63-6.1,1.57-9,2.79
c-2.85,1.2-5.59,2.69-8.16,4.43c-2.54,1.72-4.94,3.7-7.13,5.88l-34.03,34.03L456.43,364z"/>
<g>
<g>
<g>
<path class="st1" d="M410.96,43.04c-2.16,0-3.88,0.88-5.14,2.63c-1.27,1.75-1.9,4.57-1.9,8.46l-5.69-1.05
c0-4.97,1.06-8.79,3.17-11.47c2.11-2.68,5.35-4.04,9.7-4.11c4.54,0,7.79,1.32,9.75,3.97s2.94,6.14,2.94,10.48
c0,2.81-0.27,5.41-0.79,7.8c-0.53,2.39-1.42,4.8-2.66,7.23l-15.67,32.25h18.66v5.35h-25v-5.26l17.35-35.64
c0.87-1.85,1.45-3.74,1.73-5.69c0.28-1.94,0.42-3.97,0.42-6.07c0-1.08-0.08-2.16-0.23-3.25c-0.15-1.08-0.48-2.04-0.97-2.87
c-0.49-0.83-1.19-1.5-2.08-2.01C413.63,43.3,412.44,43.04,410.96,43.04z"/>
<path class="st1" d="M457.56,93.02c0,2.04-0.34,3.82-1.02,5.35s-1.6,2.8-2.74,3.82c-1.15,1.02-2.48,1.78-4,2.29
s-3.11,0.76-4.79,0.76s-3.27-0.26-4.79-0.76c-1.52-0.51-2.85-1.27-4-2.29c-1.15-1.02-2.06-2.29-2.74-3.82s-1.02-3.31-1.02-5.35
V49.83c0-1.97,0.34-3.74,1.02-5.3c0.68-1.56,1.6-2.85,2.74-3.87c1.15-1.02,2.48-1.8,4-2.34s3.11-0.81,4.79-0.81
c3.53,0,6.51,1.05,8.92,3.15c2.42,2.1,3.63,5.16,3.63,9.17L457.56,93.02L457.56,93.02z M451.87,49.65c0-2.04-0.63-3.65-1.9-4.83
s-2.89-1.77-4.86-1.77c-2.04,0-3.71,0.59-5,1.77c-1.3,1.18-1.95,2.79-1.95,4.83V93.3c0,2.04,0.65,3.65,1.95,4.83
c1.3,1.18,2.96,1.77,5,1.77c1.98,0,3.6-0.59,4.86-1.77c1.27-1.18,1.9-2.79,1.9-4.83V49.65z"/>
<path class="st1" d="M479.44,43.04c-2.16,0-3.88,0.88-5.14,2.63c-1.27,1.75-1.9,4.57-1.9,8.46l-5.69-1.05
c0-4.97,1.06-8.79,3.17-11.47c2.11-2.68,5.35-4.04,9.7-4.11c4.54,0,7.79,1.32,9.75,3.97s2.94,6.14,2.94,10.48
c0,2.81-0.27,5.41-0.79,7.8c-0.53,2.39-1.42,4.8-2.66,7.23l-15.67,32.25h18.66v5.35h-25v-5.26l17.35-35.64
c0.87-1.85,1.45-3.74,1.73-5.69c0.28-1.94,0.42-3.97,0.42-6.07c0-1.08-0.08-2.16-0.23-3.25c-0.15-1.08-0.48-2.04-0.97-2.87
c-0.49-0.83-1.19-1.5-2.08-2.01C482.11,43.3,480.92,43.04,479.44,43.04z"/>
<path class="st1" d="M525.95,91.66c0,4.59-1.17,8.01-3.5,10.24c-2.33,2.23-5.43,3.35-9.28,3.35c-4.29,0-7.46-1.21-9.52-3.63
c-2.05-2.42-3.02-5.92-2.89-10.51l5.69-1.15c-0.13,3.06,0.33,5.48,1.35,7.26c1.03,1.78,2.88,2.68,5.55,2.68
c1.99,0,3.65-0.61,4.99-1.82c1.34-1.22,2.01-3.26,2.01-6.14V81.3c0-3.07-0.61-5.26-1.82-6.57s-3-1.97-5.36-1.97h-2.71v-5.35
h2.89c2.24,0,3.97-0.6,5.18-1.81s1.82-3.27,1.82-6.19v-8.95c0-1.02-0.11-1.97-0.33-2.85c-0.22-0.89-0.59-1.67-1.12-2.33
c-0.53-0.67-1.21-1.2-2.05-1.62c-0.84-0.41-1.88-0.62-3.13-0.62c-2.55,0-4.4,0.91-5.55,2.72c-1.15,1.82-1.73,4.16-1.73,7.02
c-0.19-0.06-0.55-0.13-1.07-0.19c-0.53-0.06-1.12-0.14-1.77-0.24c-0.65-0.1-1.25-0.19-1.77-0.29c-0.53-0.1-0.89-0.14-1.07-0.14
c0.06-2.1,0.37-4.03,0.93-5.78s1.4-3.26,2.52-4.54c1.12-1.27,2.5-2.28,4.15-3.01s3.56-1.1,5.74-1.1c2.24,0,4.12,0.33,5.64,1
s2.75,1.59,3.69,2.77c0.93,1.18,1.6,2.56,2.01,4.15c0.4,1.59,0.61,3.31,0.61,5.15v7.73c0,1.21-0.06,2.39-0.19,3.53
c-0.13,1.15-0.39,2.21-0.79,3.2c-0.41,0.99-0.98,1.89-1.73,2.72s-1.74,1.53-2.99,2.1v0.19c1.31,0.51,2.33,1.16,3.08,1.96
c0.75,0.8,1.32,1.72,1.73,2.78c0.4,1.05,0.65,2.22,0.75,3.49c0.09,1.28,0.14,2.65,0.14,4.11L525.95,91.66z"/>
</g>
<g>
<path class="st1" d="M250.72,114.74v21.1h-1.35v-21.1h-4.14v-1.25h9.62v1.25H250.72z"/>
<path class="st1" d="M259.74,119.91c1.15,0,2.03,0.22,2.64,0.67c0.61,0.45,1.03,1.02,1.26,1.7c0.1,0.28,0.18,0.65,0.24,1.11
c0.05,0.46,0.09,0.96,0.13,1.51c0.03,0.55,0.05,1.1,0.05,1.67s0,1.1,0,1.59v0.48c0,0.56-0.01,1.12-0.02,1.7
c-0.01,0.58-0.05,1.21-0.11,1.89c-0.06,0.75-0.24,1.37-0.52,1.86s-0.63,0.88-1.04,1.17s-0.85,0.49-1.34,0.61
c-0.48,0.12-0.95,0.18-1.42,0.18c-1.26,0-2.2-0.26-2.82-0.79s-1.04-1.19-1.27-2.01c-0.06-0.26-0.12-0.58-0.16-0.98
c-0.04-0.4-0.07-0.83-0.09-1.3c-0.02-0.47-0.03-0.95-0.03-1.45c0-0.49,0-0.95,0-1.38c0-0.58,0-1.15,0.02-1.72
c0.01-0.57,0.03-1.11,0.06-1.62s0.08-0.98,0.14-1.4s0.14-0.75,0.22-1.01c0.27-0.75,0.73-1.35,1.38-1.81
C257.71,120.14,258.61,119.91,259.74,119.91z M259.68,121.16c-0.55,0-1.07,0.11-1.58,0.34c-0.5,0.22-0.88,0.66-1.13,1.3
c-0.17,0.43-0.27,1.1-0.32,2.01c-0.04,0.91-0.06,1.96-0.06,3.16v0.8c0,1.03,0.02,1.89,0.05,2.6s0.11,1.25,0.24,1.64
c0.19,0.58,0.51,1.02,0.96,1.33c0.45,0.31,1.07,0.47,1.84,0.47c0.69,0,1.29-0.19,1.8-0.58c0.5-0.39,0.84-0.92,1.01-1.61
c0.08-0.36,0.14-0.94,0.17-1.73s0.05-1.64,0.05-2.54c0-0.47-0.01-0.97-0.02-1.51c-0.01-0.53-0.02-1.05-0.03-1.54
s-0.04-0.94-0.08-1.33s-0.09-0.7-0.16-0.92c-0.19-0.64-0.53-1.12-1.02-1.43C260.9,121.32,260.33,121.16,259.68,121.16z"/>
<path class="st1" d="M273.77,134.07h-0.09c-0.36,0.62-0.83,1.11-1.41,1.46c-0.59,0.35-1.24,0.53-1.98,0.53
c-0.71,0-1.31-0.11-1.79-0.34c-0.48-0.22-0.86-0.53-1.14-0.92c-0.28-0.39-0.49-0.83-0.61-1.35s-0.19-1.06-0.19-1.64V120.1h1.35
v11.27c0,0.49,0.04,0.94,0.13,1.35c0.08,0.41,0.23,0.75,0.43,1.04c0.2,0.29,0.48,0.52,0.83,0.69c0.36,0.17,0.81,0.26,1.36,0.26
c0.48,0,0.92-0.1,1.31-0.3s0.71-0.47,0.98-0.8c0.26-0.33,0.47-0.71,0.61-1.14c0.15-0.43,0.22-0.87,0.22-1.32V120.1h1.35v15.73
h-1.35L273.77,134.07L273.77,134.07z"/>
<path class="st1" d="M278.03,112.52h1.35v19.62c0,0.81,0.13,1.46,0.39,1.94s0.79,0.72,1.58,0.72h0.38v1.25h-0.47
c-1.05,0-1.84-0.26-2.4-0.77c-0.55-0.51-0.83-1.46-0.83-2.83L278.03,112.52L278.03,112.52z"/>
<path class="st1" d="M287.36,119.91c1.15,0,2.03,0.22,2.64,0.67c0.61,0.45,1.03,1.02,1.26,1.7c0.1,0.28,0.18,0.65,0.24,1.11
c0.05,0.46,0.09,0.96,0.13,1.51c0.03,0.55,0.05,1.1,0.05,1.67s0,1.1,0,1.59v0.48c0,0.56-0.01,1.12-0.02,1.7
c-0.01,0.58-0.05,1.21-0.11,1.89c-0.06,0.75-0.24,1.37-0.52,1.86s-0.63,0.88-1.04,1.17s-0.85,0.49-1.34,0.61
c-0.48,0.12-0.95,0.18-1.42,0.18c-1.26,0-2.2-0.26-2.82-0.79s-1.04-1.19-1.27-2.01c-0.06-0.26-0.12-0.58-0.16-0.98
s-0.07-0.83-0.09-1.3s-0.03-0.95-0.03-1.45c0-0.49,0-0.95,0-1.38c0-0.58,0-1.15,0.02-1.72c0.01-0.57,0.03-1.11,0.06-1.62
s0.08-0.98,0.14-1.4c0.06-0.42,0.14-0.75,0.22-1.01c0.27-0.75,0.73-1.35,1.38-1.81C285.33,120.14,286.23,119.91,287.36,119.91z
M287.3,121.16c-0.55,0-1.07,0.11-1.58,0.34c-0.5,0.22-0.88,0.66-1.13,1.3c-0.17,0.43-0.27,1.1-0.32,2.01
c-0.04,0.91-0.06,1.96-0.06,3.16v0.8c0,1.03,0.02,1.89,0.05,2.6s0.11,1.25,0.24,1.64c0.19,0.58,0.51,1.02,0.96,1.33
c0.45,0.31,1.07,0.47,1.84,0.47c0.69,0,1.29-0.19,1.8-0.58c0.5-0.39,0.84-0.92,1.01-1.61c0.08-0.36,0.14-0.94,0.17-1.73
s0.05-1.64,0.05-2.54c0-0.47-0.01-0.97-0.02-1.51c-0.01-0.53-0.02-1.05-0.03-1.54s-0.04-0.94-0.08-1.33s-0.09-0.7-0.16-0.92
c-0.19-0.64-0.53-1.12-1.02-1.43C288.52,121.32,287.95,121.16,287.3,121.16z"/>
<path class="st1" d="M301.39,134.07h-0.09c-0.36,0.62-0.83,1.11-1.41,1.46c-0.59,0.35-1.24,0.53-1.98,0.53
c-0.71,0-1.31-0.11-1.79-0.34c-0.48-0.22-0.86-0.53-1.14-0.92c-0.28-0.39-0.49-0.83-0.61-1.35s-0.19-1.06-0.19-1.64V120.1h1.35
v11.27c0,0.49,0.04,0.94,0.13,1.35c0.08,0.41,0.23,0.75,0.43,1.04c0.2,0.29,0.48,0.52,0.83,0.69c0.36,0.17,0.81,0.26,1.36,0.26
c0.48,0,0.92-0.1,1.31-0.3s0.71-0.47,0.98-0.8c0.26-0.33,0.47-0.71,0.61-1.14c0.15-0.43,0.22-0.87,0.22-1.32V120.1h1.35v15.73
h-1.35L301.39,134.07L301.39,134.07z"/>
<path class="st1" d="M306.25,131.85c0,0.9,0.25,1.62,0.74,2.15c0.49,0.54,1.18,0.8,2.06,0.8c1.11,0,1.88-0.27,2.3-0.8
c0.42-0.54,0.63-1.29,0.63-2.25c0-0.47-0.04-0.87-0.11-1.21c-0.07-0.33-0.21-0.63-0.42-0.9c-0.21-0.27-0.5-0.51-0.88-0.74
c-0.38-0.22-0.88-0.46-1.5-0.69c-0.81-0.32-1.48-0.64-2.01-0.97c-0.52-0.32-0.92-0.66-1.21-1.01c-0.28-0.35-0.48-0.72-0.58-1.11
c-0.1-0.39-0.16-0.79-0.16-1.22c0-1.18,0.33-2.14,1-2.9s1.72-1.13,3.17-1.13c1.32,0,2.34,0.34,3.06,1.03
c0.72,0.68,1.08,1.68,1.08,2.99l-1.41,0.23c0-0.96-0.25-1.7-0.74-2.22s-1.18-0.77-2.06-0.77c-0.55,0-1,0.08-1.36,0.24
c-0.36,0.16-0.64,0.37-0.84,0.63c-0.2,0.26-0.34,0.55-0.43,0.87c-0.08,0.32-0.13,0.65-0.13,1c0,0.34,0.04,0.65,0.13,0.93
c0.08,0.28,0.25,0.54,0.49,0.79s0.59,0.49,1.03,0.72c0.44,0.24,1.01,0.48,1.71,0.74c0.8,0.3,1.43,0.61,1.9,0.93
c0.46,0.32,0.82,0.67,1.06,1.05c0.24,0.38,0.4,0.78,0.47,1.22s0.11,0.92,0.11,1.43c0,0.64-0.07,1.23-0.22,1.77
s-0.39,1-0.72,1.38c-0.34,0.39-0.77,0.69-1.31,0.9c-0.54,0.21-1.19,0.32-1.97,0.32c-1.34,0-2.38-0.33-3.1-0.98
s-1.11-1.65-1.15-3L306.25,131.85z"/>
<path class="st1" d="M319.71,119.91c1.25,0,2.22,0.33,2.92,0.98s1.08,1.59,1.14,2.81c0.02,0.24,0.03,0.47,0.03,0.69
s0,0.46,0,0.69v3.11h-7.15v1.03c0,0.68,0.02,1.4,0.05,2.13s0.11,1.29,0.24,1.65c0.19,0.56,0.49,1,0.91,1.32s0.98,0.48,1.69,0.48
c0.94,0,1.64-0.28,2.08-0.83c0.45-0.56,0.71-1.24,0.77-2.05l1.35,0.26c-0.1,1.26-0.53,2.23-1.28,2.89s-1.72,1-2.9,1
c-0.62,0-1.17-0.08-1.64-0.24s-0.86-0.37-1.17-0.63c-0.31-0.26-0.56-0.55-0.75-0.88s-0.32-0.68-0.41-1.04
c-0.06-0.26-0.11-0.59-0.16-1c-0.04-0.41-0.07-0.84-0.08-1.3c-0.01-0.46-0.02-0.94-0.03-1.43c-0.01-0.49-0.02-0.95-0.02-1.38
c0-0.58,0-1.16,0.02-1.73c0.01-0.58,0.03-1.12,0.06-1.64c0.03-0.51,0.08-0.98,0.14-1.41c0.06-0.43,0.14-0.77,0.22-1.03
c0.27-0.75,0.72-1.34,1.34-1.78C317.71,120.13,318.59,119.91,319.71,119.91z M317,122.84c-0.15,0.37-0.24,0.91-0.27,1.63
c-0.03,0.72-0.06,1.58-0.08,2.57h5.83v-1.97c0-0.5-0.03-0.98-0.08-1.45s-0.18-0.89-0.38-1.26s-0.49-0.66-0.87-0.87
s-0.88-0.32-1.51-0.32c-0.53,0-1.03,0.12-1.51,0.35C317.65,121.75,317.28,122.2,317,122.84z"/>
<path class="st1" d="M340.45,135.84v-10.82h-6.96v10.82h-1.35v-22.35h1.35v10.28h6.96v-10.28h1.35v22.35H340.45z"/>
<path class="st1" d="M344.69,122.51c0.29-0.81,0.78-1.45,1.47-1.91c0.69-0.46,1.58-0.69,2.67-0.69c1.32,0,2.33,0.31,3.04,0.92
c0.71,0.61,1.07,1.7,1.07,3.26v11.75h-1.35v-1.41h-0.03c-0.5,0.71-1.07,1.15-1.71,1.33s-1.26,0.27-1.87,0.27
c-0.69,0-1.27-0.12-1.74-0.37s-0.85-0.57-1.14-0.98c-0.29-0.41-0.51-0.87-0.64-1.4c-0.14-0.52-0.2-1.08-0.2-1.65
c0-0.6,0.07-1.19,0.2-1.78c0.14-0.59,0.37-1.12,0.71-1.61c0.33-0.48,0.78-0.87,1.33-1.17c0.55-0.3,1.25-0.45,2.08-0.45h3.01
v-2.52c0-0.43-0.04-0.82-0.13-1.18c-0.08-0.35-0.23-0.66-0.44-0.92c-0.21-0.26-0.5-0.46-0.86-0.61
c-0.37-0.15-0.83-0.23-1.4-0.23c-0.61,0-1.18,0.15-1.72,0.45c-0.54,0.3-0.9,0.75-1.07,1.35L344.69,122.51z M348.86,127.87
c-0.46,0-0.89,0.06-1.29,0.19s-0.74,0.34-1.03,0.65c-0.29,0.3-0.52,0.69-0.69,1.18c-0.17,0.48-0.25,1.07-0.25,1.76
c0,0.86,0.21,1.6,0.64,2.21c0.43,0.61,1.18,0.92,2.24,0.92c0.9,0,1.64-0.25,2.23-0.76c0.58-0.51,0.88-1.25,0.88-2.24v-3.9
L348.86,127.87L348.86,127.87z"/>
<path class="st1" d="M359.78,119.91c1.31,0,2.31,0.35,3,1.06s1.03,1.73,1.03,3.08c-0.23,0.04-0.45,0.08-0.67,0.11
c-0.23,0.03-0.45,0.07-0.67,0.11c0.02-0.98-0.21-1.75-0.69-2.3s-1.17-0.82-2.07-0.82c-0.56,0-1.07,0.13-1.52,0.38
c-0.45,0.26-0.81,0.7-1.08,1.32c-0.17,0.41-0.27,1.1-0.31,2.09c-0.04,0.98-0.06,2.12-0.06,3.4v0.42c0,0.39,0,0.78,0.02,1.19
c0.01,0.41,0.03,0.8,0.05,1.19s0.05,0.74,0.08,1.06c0.03,0.32,0.08,0.58,0.14,0.77c0.19,0.58,0.5,1.03,0.94,1.35
s1,0.48,1.69,0.48c0.86,0,1.54-0.24,2.05-0.72s0.77-1.26,0.77-2.33l1.35,0.26c-0.04,1.35-0.43,2.36-1.16,3.03
s-1.74,1.01-3.03,1.01c-0.63,0-1.17-0.08-1.64-0.24s-0.86-0.37-1.17-0.63s-0.56-0.55-0.75-0.88s-0.32-0.68-0.41-1.04
c-0.06-0.26-0.11-0.59-0.16-1c-0.04-0.41-0.07-0.84-0.08-1.32c-0.01-0.47-0.02-0.95-0.03-1.43s-0.02-0.94-0.02-1.36
c0-0.58,0-1.16,0.02-1.73c0.01-0.58,0.03-1.12,0.06-1.64c0.03-0.51,0.08-0.98,0.14-1.4c0.06-0.42,0.14-0.75,0.22-1.01
c0.27-0.75,0.72-1.35,1.34-1.8C357.78,120.13,358.66,119.91,359.78,119.91z"/>
<path class="st1" d="M367.35,129.41h0.03l5.67-9.25h1.5l-3.57,5.78l4.42,9.89h-1.5l-3.76-8.61l-2.79,4.53v4.08H366v-23.31h1.35
V129.41z"/>
<path class="st1" d="M381.04,119.91c1.25,0,2.22,0.33,2.92,0.98s1.08,1.59,1.14,2.81c0.02,0.24,0.03,0.47,0.03,0.69
s0,0.46,0,0.69v3.11h-7.15v1.03c0,0.68,0.02,1.4,0.05,2.13s0.11,1.29,0.24,1.65c0.19,0.56,0.49,1,0.91,1.32s0.98,0.48,1.69,0.48
c0.94,0,1.63-0.28,2.09-0.83c0.45-0.56,0.71-1.24,0.77-2.05l1.35,0.26c-0.1,1.26-0.53,2.23-1.28,2.89s-1.72,1-2.9,1
c-0.62,0-1.17-0.08-1.64-0.24s-0.86-0.37-1.17-0.63s-0.56-0.55-0.75-0.88s-0.32-0.68-0.41-1.04c-0.06-0.26-0.11-0.59-0.16-1
c-0.04-0.41-0.07-0.84-0.08-1.3c-0.01-0.46-0.02-0.94-0.03-1.43c-0.01-0.49-0.02-0.95-0.02-1.38c0-0.58,0-1.16,0.02-1.73
c0.01-0.58,0.03-1.12,0.06-1.64c0.03-0.51,0.08-0.98,0.14-1.41c0.06-0.43,0.14-0.77,0.22-1.03c0.27-0.75,0.72-1.34,1.34-1.78
C379.04,120.13,379.91,119.91,381.04,119.91z M378.33,122.84c-0.15,0.37-0.24,0.91-0.27,1.63c-0.03,0.72-0.06,1.58-0.08,2.57
h5.83v-1.97c0-0.5-0.03-0.98-0.08-1.45c-0.05-0.47-0.18-0.89-0.38-1.26s-0.49-0.66-0.87-0.87s-0.88-0.32-1.51-0.32
c-0.53,0-1.03,0.12-1.51,0.35C378.98,121.75,378.6,122.2,378.33,122.84z"/>
<path class="st1" d="M393.53,121.51c-0.13-0.02-0.26-0.04-0.39-0.05c-0.14-0.01-0.27-0.02-0.39-0.02
c-1.04,0-1.85,0.36-2.43,1.09c-0.58,0.73-0.86,1.77-0.86,3.12v10.18h-1.35v-15.7h1.35v2.15h0.06c0.33-0.83,0.78-1.44,1.35-1.81
c0.56-0.38,1.24-0.56,2.04-0.56c0.1,0,0.21,0,0.31,0s0.21,0.01,0.31,0.03V121.51z"/>
<path class="st1" d="M410.08,129.99c0,0.92-0.08,1.75-0.25,2.5s-0.44,1.39-0.81,1.91s-0.88,0.93-1.5,1.22s-1.41,0.43-2.34,0.43
c-0.88,0-1.62-0.12-2.23-0.37c-0.62-0.25-1.12-0.58-1.52-1.01s-0.68-0.93-0.86-1.51s-0.28-1.21-0.3-1.89l1.35-0.29
c0,0.49,0.06,0.97,0.19,1.43c0.13,0.46,0.33,0.86,0.61,1.2s0.65,0.62,1.1,0.82c0.45,0.2,1,0.3,1.65,0.3
c0.78,0,1.4-0.13,1.87-0.39s0.83-0.6,1.09-1.03c0.25-0.43,0.42-0.93,0.49-1.51s0.11-1.18,0.11-1.8c0-0.75-0.04-1.38-0.11-1.88
c-0.07-0.5-0.23-0.94-0.47-1.32c-0.24-0.37-0.6-0.72-1.07-1.03s-1.11-0.65-1.93-1.01c-1.05-0.47-1.88-0.93-2.51-1.38
s-1.1-0.9-1.43-1.36c-0.32-0.46-0.53-0.95-0.63-1.46c-0.09-0.51-0.14-1.08-0.14-1.7c0-0.81,0.09-1.56,0.28-2.25
c0.19-0.68,0.48-1.27,0.88-1.77c0.4-0.49,0.9-0.88,1.5-1.16c0.6-0.28,1.33-0.42,2.19-0.42c0.94,0,1.71,0.14,2.33,0.42
c0.61,0.28,1.1,0.64,1.47,1.09c0.36,0.45,0.62,0.95,0.77,1.49c0.15,0.55,0.22,1.09,0.22,1.62l-1.35,0.35
c0-0.51-0.06-0.99-0.17-1.43c-0.12-0.44-0.31-0.82-0.58-1.16c-0.27-0.33-0.64-0.59-1.09-0.79s-1-0.29-1.65-0.29
c-0.71,0-1.3,0.13-1.75,0.4c-0.45,0.27-0.8,0.61-1.06,1.03c-0.25,0.42-0.42,0.87-0.5,1.37c-0.08,0.49-0.13,0.97-0.13,1.44
c0,0.56,0.05,1.04,0.16,1.46c0.1,0.42,0.3,0.81,0.6,1.17c0.29,0.36,0.71,0.72,1.25,1.06s1.28,0.72,2.2,1.12
c0.94,0.41,1.68,0.82,2.23,1.24c0.54,0.42,0.95,0.87,1.22,1.35s0.44,1.03,0.52,1.64C410.05,128.5,410.08,129.2,410.08,129.99z"
/>
<path class="st1" d="M417.06,119.94c0.37,0,0.77,0.05,1.19,0.16s0.8,0.3,1.16,0.58c0.35,0.28,0.66,0.66,0.92,1.14
c0.26,0.48,0.42,1.1,0.48,1.85c0.06,0.69,0.1,1.34,0.11,1.97c0.01,0.63,0.02,1.25,0.02,1.85v0.45c0,1.22-0.02,2.31-0.06,3.28
c-0.04,0.96-0.18,1.79-0.41,2.47c-0.23,0.66-0.62,1.23-1.17,1.69c-0.55,0.46-1.37,0.69-2.45,0.69c-0.83,0-1.52-0.2-2.06-0.59
s-0.89-0.79-1.06-1.17h-0.06v7.77h-1.35v-21.9h1.35v1.48h0.06c0.35-0.54,0.79-0.95,1.29-1.25S416.21,119.94,417.06,119.94z
M416.75,121.26c-0.94,0-1.68,0.31-2.25,0.93s-0.84,1.43-0.84,2.44v6.49c0,0.47,0.06,0.93,0.19,1.36
c0.12,0.44,0.31,0.82,0.56,1.16c0.25,0.33,0.56,0.6,0.94,0.8c0.37,0.2,0.81,0.3,1.31,0.3c0.62,0,1.17-0.17,1.65-0.51
c0.48-0.34,0.8-0.85,0.97-1.51c0.06-0.21,0.11-0.51,0.14-0.88c0.03-0.37,0.06-0.79,0.08-1.25s0.03-0.94,0.03-1.45
c0-0.5,0-1,0-1.49c0-1.01-0.02-1.9-0.05-2.68s-0.1-1.35-0.2-1.72c-0.21-0.75-0.52-1.27-0.94-1.56
C417.92,121.4,417.39,121.26,416.75,121.26z"/>
<path class="st1" d="M423.35,122.51c0.29-0.81,0.78-1.45,1.47-1.91c0.69-0.46,1.58-0.69,2.67-0.69c1.32,0,2.33,0.31,3.04,0.92
c0.71,0.61,1.07,1.7,1.07,3.26v11.75h-1.35v-1.41h-0.03c-0.5,0.71-1.07,1.15-1.71,1.33s-1.26,0.27-1.87,0.27
c-0.69,0-1.27-0.12-1.74-0.37s-0.85-0.57-1.14-0.98c-0.29-0.41-0.51-0.87-0.64-1.4s-0.2-1.08-0.2-1.65c0-0.6,0.07-1.19,0.2-1.78
s0.37-1.12,0.71-1.61c0.33-0.48,0.78-0.87,1.33-1.17s1.25-0.45,2.08-0.45h3.01v-2.52c0-0.43-0.04-0.82-0.12-1.18
c-0.08-0.35-0.23-0.66-0.44-0.92c-0.21-0.26-0.5-0.46-0.86-0.61s-0.83-0.23-1.39-0.23c-0.61,0-1.18,0.15-1.72,0.45
c-0.54,0.3-0.9,0.75-1.07,1.35L423.35,122.51z M427.52,127.87c-0.46,0-0.89,0.06-1.29,0.19s-0.74,0.34-1.04,0.65
c-0.29,0.3-0.52,0.69-0.69,1.18c-0.17,0.48-0.25,1.07-0.25,1.76c0,0.86,0.21,1.6,0.64,2.21s1.18,0.92,2.24,0.92
c0.9,0,1.64-0.25,2.23-0.76s0.88-1.25,0.88-2.24v-3.9L427.52,127.87L427.52,127.87z"/>
<path class="st1" d="M438.44,119.91c1.31,0,2.31,0.35,3,1.06s1.03,1.73,1.03,3.08c-0.22,0.04-0.45,0.08-0.67,0.11
s-0.45,0.07-0.67,0.11c0.02-0.98-0.21-1.75-0.69-2.3s-1.17-0.82-2.07-0.82c-0.56,0-1.07,0.13-1.52,0.38
c-0.45,0.26-0.81,0.7-1.08,1.32c-0.17,0.41-0.27,1.1-0.31,2.09s-0.06,2.12-0.06,3.4v0.42c0,0.39,0,0.78,0.02,1.19
c0.01,0.41,0.03,0.8,0.05,1.19s0.05,0.74,0.08,1.06c0.03,0.32,0.08,0.58,0.14,0.77c0.19,0.58,0.5,1.03,0.94,1.35
s1,0.48,1.69,0.48c0.86,0,1.54-0.24,2.05-0.72c0.51-0.48,0.77-1.26,0.77-2.33l1.35,0.26c-0.04,1.35-0.43,2.36-1.16,3.03
s-1.74,1.01-3.03,1.01c-0.62,0-1.17-0.08-1.64-0.24s-0.86-0.37-1.17-0.63s-0.56-0.55-0.75-0.88s-0.32-0.68-0.41-1.04
c-0.06-0.26-0.12-0.59-0.16-1s-0.07-0.84-0.08-1.32c-0.01-0.47-0.02-0.95-0.03-1.43s-0.02-0.94-0.02-1.36
c0-0.58,0-1.16,0.02-1.73c0.01-0.58,0.03-1.12,0.06-1.64s0.08-0.98,0.14-1.4c0.06-0.42,0.14-0.75,0.22-1.01
c0.27-0.75,0.72-1.35,1.34-1.8C436.44,120.13,437.32,119.91,438.44,119.91z"/>
<path class="st1" d="M448.79,119.91c1.25,0,2.22,0.33,2.92,0.98s1.08,1.59,1.14,2.81c0.02,0.24,0.03,0.47,0.03,0.69
s0,0.46,0,0.69v3.11h-7.15v1.03c0,0.68,0.02,1.4,0.05,2.13s0.11,1.29,0.24,1.65c0.19,0.56,0.49,1,0.91,1.32s0.98,0.48,1.69,0.48
c0.94,0,1.63-0.28,2.08-0.83c0.45-0.56,0.71-1.24,0.77-2.05l1.35,0.26c-0.1,1.26-0.53,2.23-1.28,2.89s-1.72,1-2.9,1
c-0.62,0-1.17-0.08-1.64-0.24s-0.86-0.37-1.17-0.63s-0.56-0.55-0.75-0.88s-0.32-0.68-0.41-1.04c-0.06-0.26-0.11-0.59-0.16-1
c-0.04-0.41-0.07-0.84-0.08-1.3c-0.01-0.46-0.02-0.94-0.03-1.43c-0.01-0.49-0.02-0.95-0.02-1.38c0-0.58,0-1.16,0.02-1.73
c0.01-0.58,0.03-1.12,0.06-1.64s0.08-0.98,0.14-1.41c0.06-0.43,0.14-0.77,0.22-1.03c0.27-0.75,0.72-1.34,1.34-1.78
C446.79,120.13,447.66,119.91,448.79,119.91z M446.08,122.84c-0.15,0.37-0.24,0.91-0.27,1.63c-0.03,0.72-0.06,1.58-0.08,2.57
h5.83v-1.97c0-0.5-0.03-0.98-0.08-1.45c-0.05-0.47-0.18-0.89-0.38-1.26s-0.49-0.66-0.87-0.87s-0.88-0.32-1.51-0.32
c-0.53,0-1.03,0.12-1.51,0.35C446.73,121.75,446.35,122.2,446.08,122.84z"/>
<path class="st1" d="M461.25,135.84v-22.35h8.87v1.25h-7.52v8.99h6.65v1.25h-6.65v10.85L461.25,135.84L461.25,135.84z"/>
<path class="st1" d="M470.97,122.51c0.29-0.81,0.78-1.45,1.47-1.91c0.69-0.46,1.58-0.69,2.67-0.69c1.32,0,2.33,0.31,3.04,0.92
c0.71,0.61,1.07,1.7,1.07,3.26v11.75h-1.35v-1.41h-0.03c-0.5,0.71-1.07,1.15-1.71,1.33s-1.26,0.27-1.87,0.27
c-0.69,0-1.27-0.12-1.74-0.37s-0.85-0.57-1.14-0.98c-0.29-0.41-0.51-0.87-0.64-1.4s-0.2-1.08-0.2-1.65c0-0.6,0.07-1.19,0.2-1.78
s0.37-1.12,0.71-1.61c0.33-0.48,0.78-0.87,1.33-1.17s1.25-0.45,2.08-0.45h3.01v-2.52c0-0.43-0.04-0.82-0.12-1.18
c-0.08-0.35-0.23-0.66-0.44-0.92c-0.21-0.26-0.5-0.46-0.86-0.61s-0.83-0.23-1.39-0.23c-0.61,0-1.18,0.15-1.72,0.45
c-0.54,0.3-0.9,0.75-1.07,1.35L470.97,122.51z M475.14,127.87c-0.46,0-0.89,0.06-1.29,0.19s-0.74,0.34-1.04,0.65
c-0.29,0.3-0.52,0.69-0.69,1.18c-0.17,0.48-0.25,1.07-0.25,1.76c0,0.86,0.21,1.6,0.64,2.21s1.18,0.92,2.24,0.92
c0.9,0,1.64-0.25,2.23-0.76s0.88-1.25,0.88-2.24v-3.9L475.14,127.87L475.14,127.87z"/>
<path class="st1" d="M486.07,119.91c1.31,0,2.31,0.35,3,1.06s1.03,1.73,1.03,3.08c-0.22,0.04-0.45,0.08-0.67,0.11
s-0.45,0.07-0.67,0.11c0.02-0.98-0.21-1.75-0.69-2.3s-1.17-0.82-2.07-0.82c-0.56,0-1.07,0.13-1.52,0.38
c-0.45,0.26-0.81,0.7-1.08,1.32c-0.17,0.41-0.27,1.1-0.31,2.09s-0.06,2.12-0.06,3.4v0.42c0,0.39,0,0.78,0.02,1.19
c0.01,0.41,0.03,0.8,0.05,1.19s0.05,0.74,0.08,1.06c0.03,0.32,0.08,0.58,0.14,0.77c0.19,0.58,0.5,1.03,0.94,1.35
s1,0.48,1.69,0.48c0.86,0,1.54-0.24,2.05-0.72c0.51-0.48,0.77-1.26,0.77-2.33l1.35,0.26c-0.04,1.35-0.43,2.36-1.16,3.03
s-1.74,1.01-3.03,1.01c-0.62,0-1.17-0.08-1.64-0.24s-0.86-0.37-1.17-0.63s-0.56-0.55-0.75-0.88s-0.32-0.68-0.41-1.04
c-0.06-0.26-0.12-0.59-0.16-1s-0.07-0.84-0.08-1.32c-0.01-0.47-0.02-0.95-0.03-1.43s-0.02-0.94-0.02-1.36
c0-0.58,0-1.16,0.02-1.73c0.01-0.58,0.03-1.12,0.06-1.64s0.08-0.98,0.14-1.4c0.06-0.42,0.14-0.75,0.22-1.01
c0.27-0.75,0.72-1.35,1.34-1.8C484.07,120.13,484.94,119.91,486.07,119.91z"/>
<path class="st1" d="M491.54,120.13h1.76v-4.3h1.35v4.3h2.32v1.16h-2.32v10.86c0,0.79,0.16,1.39,0.49,1.81
c0.32,0.42,0.87,0.62,1.65,0.62h0.35v1.25h-0.6c-2.15,0-3.23-1.17-3.23-3.52v-11.02h-1.76L491.54,120.13L491.54,120.13z"/>
<path class="st1" d="M503.44,119.91c1.15,0,2.03,0.22,2.64,0.67c0.61,0.45,1.03,1.02,1.26,1.7c0.1,0.28,0.18,0.65,0.24,1.11
c0.05,0.46,0.09,0.96,0.13,1.51s0.05,1.1,0.05,1.67s0,1.1,0,1.59v0.48c0,0.56-0.01,1.12-0.02,1.7
c-0.01,0.58-0.05,1.21-0.11,1.89c-0.06,0.75-0.24,1.37-0.52,1.86s-0.63,0.88-1.04,1.17s-0.85,0.49-1.34,0.61
c-0.48,0.12-0.95,0.18-1.42,0.18c-1.26,0-2.2-0.26-2.82-0.79c-0.62-0.52-1.04-1.19-1.27-2.01c-0.06-0.26-0.12-0.58-0.16-0.98
s-0.07-0.83-0.09-1.3s-0.03-0.95-0.03-1.45c0-0.49,0-0.95,0-1.38c0-0.58,0-1.15,0.02-1.72c0.01-0.57,0.03-1.11,0.06-1.62
s0.08-0.98,0.14-1.4c0.06-0.42,0.14-0.75,0.22-1.01c0.27-0.75,0.73-1.35,1.38-1.81C501.41,120.14,502.3,119.91,503.44,119.91z
M503.37,121.16c-0.55,0-1.07,0.11-1.58,0.34c-0.5,0.22-0.88,0.66-1.13,1.3c-0.17,0.43-0.27,1.1-0.32,2.01s-0.06,1.96-0.06,3.16
v0.8c0,1.03,0.02,1.89,0.05,2.6s0.11,1.25,0.24,1.64c0.19,0.58,0.51,1.02,0.96,1.33c0.45,0.31,1.07,0.47,1.84,0.47
c0.69,0,1.29-0.19,1.8-0.58c0.5-0.39,0.84-0.92,1.01-1.61c0.08-0.36,0.14-0.94,0.17-1.73s0.05-1.64,0.05-2.54
c0-0.47,0-0.97-0.02-1.51c-0.01-0.53-0.02-1.05-0.03-1.54s-0.04-0.94-0.08-1.33s-0.09-0.7-0.16-0.92
c-0.19-0.64-0.53-1.12-1.02-1.43C504.6,121.32,504.02,121.16,503.37,121.16z"/>
<path class="st1" d="M516.06,121.51c-0.13-0.02-0.26-0.04-0.39-0.05c-0.14-0.01-0.27-0.02-0.39-0.02
c-1.04,0-1.85,0.36-2.43,1.09c-0.58,0.73-0.86,1.77-0.86,3.12v10.18h-1.35v-15.7h1.35v2.15h0.06c0.33-0.83,0.78-1.44,1.35-1.81
c0.56-0.38,1.24-0.56,2.04-0.56c0.1,0,0.21,0,0.31,0s0.21,0.01,0.31,0.03L516.06,121.51L516.06,121.51z"/>
<path class="st1" d="M521.26,133.65c0.29-1.09,0.57-2.22,0.85-3.39c0.27-1.17,0.54-2.31,0.82-3.42l1.72-6.71h1.38l-4.61,17.63
c-0.17,0.68-0.36,1.32-0.56,1.89c-0.23,0.73-0.6,1.33-1.11,1.81s-1.2,0.72-2.05,0.72h-0.47v-1.25h0.38
c0.67,0,1.18-0.25,1.54-0.74s0.64-1.18,0.85-2.05c0.1-0.41,0.2-0.81,0.3-1.2c0.09-0.4,0.19-0.8,0.3-1.2
c-0.69-2.61-1.37-5.21-2.05-7.79c-0.68-2.59-1.35-5.19-2.02-7.82h1.44l1.63,6.74l1.63,6.78H521.26z"/>
</g>
<g>
<path d="M250.36,148.01c-0.38,0-0.72,0.15-1,0.44c-0.29,0.29-0.43,0.79-0.43,1.48l-0.71-0.12c0.02-0.83,0.22-1.45,0.6-1.85
c0.38-0.4,0.9-0.61,1.57-0.61c0.77,0,1.32,0.23,1.65,0.68s0.5,1.05,0.5,1.79c0,0.54-0.05,1-0.15,1.4s-0.25,0.8-0.46,1.21
L249,158.5h3.43v0.66h-4.22v-0.67l3.15-6.5c0.17-0.36,0.29-0.71,0.34-1.06c0.05-0.35,0.08-0.72,0.08-1.11
c0-0.22-0.02-0.45-0.06-0.67s-0.11-0.41-0.21-0.58s-0.25-0.3-0.43-0.41C250.91,148.06,250.67,148.01,250.36,148.01z"/>
<path d="M256.22,153.01c0.12-0.12,0.28-0.23,0.48-0.31s0.4-0.13,0.6-0.13c0.59,0,1.06,0.18,1.41,0.53s0.53,0.85,0.53,1.49v2.65
c0,0.35-0.06,0.65-0.17,0.9c-0.11,0.25-0.27,0.46-0.46,0.63s-0.42,0.29-0.67,0.38c-0.26,0.08-0.53,0.13-0.81,0.13
c-0.29,0-0.56-0.04-0.81-0.13s-0.48-0.21-0.67-0.38s-0.35-0.38-0.46-0.63s-0.17-0.55-0.17-0.9v-2.17c0-0.37,0.02-0.69,0.07-0.95
s0.12-0.51,0.21-0.73l2.22-5.92h0.71c-0.08,0.19-0.18,0.46-0.3,0.8c-0.13,0.34-0.26,0.72-0.41,1.12s-0.3,0.82-0.45,1.23
c-0.15,0.42-0.29,0.8-0.42,1.14s-0.23,0.63-0.31,0.86s-0.13,0.36-0.14,0.38L256.22,153.01z M258.54,154.56
c0-0.42-0.13-0.74-0.39-0.98c-0.26-0.24-0.6-0.35-1.01-0.35c-0.23,0-0.43,0.05-0.61,0.14c-0.18,0.1-0.33,0.22-0.45,0.37
c-0.12,0.15-0.21,0.33-0.27,0.52s-0.09,0.4-0.09,0.6v2.42c0,0.42,0.13,0.74,0.4,0.98c0.27,0.24,0.61,0.35,1.02,0.35
s0.75-0.12,1.01-0.35c0.26-0.24,0.39-0.56,0.39-0.98V154.56z"/>
<path d="M267.74,148.01c-0.38,0-0.72,0.15-1,0.44c-0.29,0.29-0.43,0.79-0.43,1.48l-0.71-0.12c0.02-0.83,0.22-1.45,0.6-1.85
c0.38-0.4,0.9-0.61,1.57-0.61c0.77,0,1.32,0.23,1.65,0.68s0.5,1.05,0.5,1.79c0,0.54-0.05,1-0.15,1.4s-0.25,0.8-0.46,1.21
l-2.93,6.07h3.43v0.66h-4.22v-0.67l3.15-6.5c0.17-0.36,0.29-0.71,0.34-1.06c0.05-0.35,0.08-0.72,0.08-1.11
c0-0.22-0.02-0.45-0.06-0.67s-0.11-0.41-0.21-0.58s-0.25-0.3-0.43-0.41C268.29,148.06,268.05,148.01,267.74,148.01z"/>
<path d="M276.63,151.31c0,0.45-0.09,0.82-0.28,1.11s-0.42,0.52-0.71,0.67c0.28,0.16,0.52,0.38,0.71,0.67s0.28,0.66,0.28,1.09
v2.39c0,0.35-0.06,0.65-0.17,0.9c-0.11,0.25-0.27,0.46-0.46,0.63s-0.42,0.29-0.67,0.38s-0.53,0.13-0.81,0.13
c-0.29,0-0.56-0.04-0.81-0.13s-0.48-0.21-0.67-0.38s-0.35-0.38-0.46-0.63s-0.17-0.55-0.17-0.9v-2.39c0-0.44,0.09-0.8,0.27-1.09
s0.42-0.52,0.71-0.67c-0.3-0.16-0.53-0.38-0.71-0.67s-0.27-0.66-0.27-1.11v-1.92c0-0.34,0.06-0.63,0.17-0.88
c0.12-0.25,0.27-0.46,0.46-0.64c0.19-0.17,0.42-0.3,0.67-0.39s0.53-0.13,0.81-0.13s0.56,0.04,0.81,0.13s0.48,0.21,0.67,0.39
c0.19,0.17,0.35,0.39,0.46,0.64c0.12,0.25,0.17,0.55,0.17,0.88V151.31z M275.92,149.34c0-0.42-0.13-0.74-0.39-0.98
s-0.6-0.35-1.01-0.35s-0.75,0.12-1.02,0.35c-0.27,0.24-0.4,0.56-0.4,0.98v2.05c0,0.42,0.13,0.74,0.4,0.98
c0.27,0.24,0.61,0.36,1.02,0.36s0.75-0.12,1.01-0.36s0.39-0.57,0.39-0.98V149.34z M275.92,154.76c0-0.41-0.13-0.73-0.39-0.98
s-0.6-0.38-1.01-0.39c-0.41,0-0.75,0.12-1.02,0.37s-0.4,0.58-0.4,1v2.53c0,0.42,0.13,0.74,0.4,0.98
c0.27,0.24,0.61,0.35,1.02,0.35s0.75-0.12,1.01-0.35s0.39-0.56,0.39-0.98V154.76z"/>
<path d="M289.34,149.49c-0.2,0.57-0.4,1.14-0.61,1.69s-0.42,1.12-0.62,1.69l-1.33,3.57h-0.49c-0.22-0.59-0.44-1.18-0.65-1.77
c-0.21-0.58-0.43-1.17-0.65-1.75l-1.2-3.35h-0.07v9.59h-0.71v-11.71h0.72c0.25,0.67,0.5,1.34,0.73,1.99
c0.24,0.66,0.47,1.32,0.72,1.99l1.33,3.75h0.05l1.36-3.77c0.03-0.08,0.09-0.22,0.16-0.43c0.08-0.21,0.16-0.44,0.25-0.71
c0.09-0.26,0.19-0.55,0.3-0.85s0.21-0.59,0.31-0.85c0.1-0.26,0.18-0.5,0.25-0.71s0.12-0.35,0.16-0.43h0.72v11.71h-0.71v-9.68
h-0.02L289.34,149.49L289.34,149.49z"/>
<path d="M297.26,159.17l-0.66-3.06h-3.19l-0.66,3.06h-0.67l2.51-11.71h0.81l2.56,11.71H297.26z M294.99,148.52l-0.61,2.93
l-0.85,4h2.94l-0.85-4.04l-0.59-2.89H294.99z"/>
<path d="M300.15,159.17v-11.71h0.71v11.71H300.15z"/>
<path d="M309.67,148.01c-0.38,0-0.72,0.15-1,0.44c-0.29,0.29-0.43,0.79-0.43,1.48l-0.71-0.12c0.02-0.83,0.22-1.45,0.6-1.85
c0.38-0.4,0.9-0.61,1.57-0.61c0.77,0,1.32,0.23,1.65,0.68s0.5,1.05,0.5,1.79c0,0.54-0.05,1-0.15,1.4s-0.25,0.8-0.46,1.21
l-2.93,6.07h3.43v0.66h-4.22v-0.67l3.15-6.5c0.17-0.36,0.29-0.71,0.34-1.06c0.05-0.35,0.08-0.72,0.08-1.11
c0-0.22-0.02-0.45-0.06-0.67s-0.11-0.41-0.21-0.58s-0.25-0.3-0.43-0.41C310.22,148.06,309.98,148.01,309.67,148.01z"/>
<path d="M318.55,157.25c0,0.35-0.06,0.65-0.17,0.9c-0.11,0.25-0.27,0.46-0.46,0.63s-0.42,0.29-0.67,0.38
c-0.26,0.08-0.53,0.13-0.81,0.13c-0.29,0-0.56-0.04-0.81-0.13c-0.26-0.08-0.48-0.21-0.67-0.38s-0.35-0.38-0.46-0.63
s-0.17-0.55-0.17-0.9v-7.86c0-0.34,0.06-0.63,0.17-0.88c0.12-0.25,0.27-0.46,0.46-0.64c0.19-0.17,0.42-0.3,0.67-0.39
s0.53-0.13,0.81-0.13c0.3,0,0.57,0.04,0.83,0.13s0.48,0.21,0.67,0.39c0.19,0.17,0.34,0.39,0.45,0.64
c0.11,0.25,0.16,0.55,0.16,0.88V157.25z M317.85,149.36c0-0.42-0.13-0.75-0.39-0.99s-0.6-0.36-1.01-0.36s-0.75,0.12-1.02,0.36
s-0.4,0.57-0.4,0.99v7.92c0,0.42,0.13,0.75,0.4,0.99s0.61,0.36,1.02,0.36s0.75-0.12,1.01-0.36s0.39-0.57,0.39-0.99V149.36z"/>
<path d="M323.24,148.01c-0.38,0-0.72,0.15-1,0.44c-0.29,0.29-0.43,0.79-0.43,1.48l-0.71-0.12c0.02-0.83,0.22-1.45,0.6-1.85
c0.38-0.4,0.9-0.61,1.57-0.61c0.77,0,1.32,0.23,1.65,0.68s0.5,1.05,0.5,1.79c0,0.54-0.05,1-0.15,1.4s-0.25,0.8-0.46,1.21
l-2.93,6.07h3.43v0.66h-4.22v-0.67l3.15-6.5c0.17-0.36,0.29-0.71,0.34-1.06c0.05-0.35,0.08-0.72,0.08-1.11
c0-0.22-0.02-0.45-0.06-0.67s-0.11-0.41-0.21-0.58s-0.25-0.3-0.43-0.41C323.79,148.06,323.55,148.01,323.24,148.01z"/>
<path d="M330.06,147.36c0.4,0,0.73,0.05,0.99,0.16c0.26,0.11,0.48,0.26,0.63,0.45c0.16,0.2,0.27,0.43,0.34,0.71
c0.07,0.27,0.1,0.57,0.1,0.9v1.55c-0.01,0.2-0.03,0.4-0.06,0.59s-0.08,0.37-0.16,0.55c-0.08,0.17-0.18,0.33-0.31,0.46
s-0.31,0.24-0.53,0.32v0.02c0.24,0.09,0.43,0.21,0.58,0.35c0.14,0.15,0.25,0.32,0.32,0.51s0.12,0.41,0.13,0.65
c0.02,0.24,0.02,0.48,0.02,0.72v1.73c0,0.71-0.18,1.26-0.54,1.66c-0.36,0.4-0.9,0.6-1.62,0.6c-0.62,0-1.12-0.18-1.51-0.55
c-0.39-0.37-0.59-0.95-0.59-1.76l0.71-0.2c0,0.57,0.1,1.02,0.3,1.35s0.57,0.5,1.09,0.5c0.42,0,0.76-0.12,1.03-0.35
s0.41-0.64,0.41-1.22v-1.96c0-0.63-0.13-1.07-0.39-1.32s-0.58-0.37-0.98-0.37h-0.44v-0.69h0.48c0.38,0,0.7-0.12,0.95-0.35
c0.25-0.23,0.38-0.64,0.38-1.24v-1.67c0-0.42-0.11-0.76-0.33-1.03s-0.58-0.4-1.08-0.4s-0.87,0.17-1.09,0.5
c-0.22,0.34-0.34,0.76-0.34,1.28c-0.12-0.02-0.24-0.04-0.35-0.06c-0.12-0.02-0.23-0.04-0.35-0.06c0.01-0.71,0.2-1.28,0.56-1.71
C328.79,147.57,329.34,147.36,330.06,147.36z"/>
<path d="M338.5,154.69V154h3.84v0.69H338.5z"/>
</g>
<g>
<path class="st1" d="M354.1,147.36c0.47,0,0.88,0.07,1.22,0.2c0.34,0.13,0.62,0.32,0.85,0.56c0.22,0.24,0.39,0.52,0.49,0.85
c0.1,0.33,0.16,0.69,0.16,1.08l-1.73,0.45c0-0.43-0.08-0.77-0.24-1.04c-0.16-0.27-0.41-0.4-0.76-0.4
c-0.21,0-0.38,0.04-0.51,0.13s-0.23,0.21-0.3,0.35c-0.07,0.14-0.12,0.29-0.15,0.46c-0.03,0.16-0.04,0.32-0.04,0.46v5.95
c0,0.11,0.01,0.24,0.03,0.37c0.02,0.13,0.07,0.26,0.14,0.38s0.17,0.22,0.29,0.29c0.12,0.08,0.29,0.12,0.48,0.12
c0.65,0,0.98-0.48,0.99-1.45c0.3,0.06,0.59,0.1,0.89,0.14c0.3,0.04,0.59,0.08,0.89,0.13c-0.02,0.89-0.26,1.59-0.71,2.1
c-0.45,0.52-1.13,0.77-2.01,0.77c-0.94,0-1.64-0.24-2.09-0.73s-0.67-1.2-0.67-2.15v-5.84c0-0.44,0.05-0.85,0.14-1.24
c0.09-0.39,0.25-0.73,0.47-1.02c0.22-0.29,0.51-0.52,0.86-0.69C353.15,147.44,353.58,147.36,354.1,147.36z"/>
<path class="st1" d="M359.11,159.17v-11.71h1.77v11.71H359.11z"/>
<path class="st1" d="M365.35,152.35v6.81h-1.77v-11.71h1.59l1.38,3.48c0.11,0.29,0.22,0.58,0.33,0.86s0.22,0.57,0.35,0.86
l0.58,1.62c0.02,0,0.04,0,0.04-0.01c0.01,0,0.02-0.01,0.04-0.01v-6.8h1.74v11.71h-1.55l-1.38-3.47
c-0.22-0.57-0.43-1.13-0.65-1.68c-0.21-0.55-0.42-1.1-0.63-1.67L365.35,152.35L365.35,152.35z"/>
<path class="st1" d="M372.27,159.17v-11.71h5.08v1.7h-3.3v3.2h2.88v1.73h-2.88v3.38h3.3v1.7L372.27,159.17L372.27,159.17z
M373.5,146.21l2.53-2.04l1.05,1.26l-2.94,1.65L373.5,146.21z"/>
<path class="st1" d="M382.83,156.61l-0.82-2.17l-0.7-2.05h-0.08v6.78h-1.77v-11.71h1.73l1.24,3.33l0.9,2.54h0.08l0.92-2.61
l1.23-3.26h1.71v11.71h-1.77v-6.75h-0.07l-0.72,2.09l-0.8,2.1H382.83z"/>
<path class="st1" d="M394,159.17l-0.44-2.44h-2.1c-0.08,0.4-0.15,0.81-0.22,1.22s-0.14,0.82-0.21,1.22h-1.81
c0.38-1.96,0.77-3.92,1.15-5.86s0.77-3.89,1.15-5.86h1.97l2.32,11.71L394,159.17L394,159.17z M392.46,150.17
c-0.11,0.81-0.22,1.61-0.34,2.42c-0.12,0.8-0.25,1.62-0.39,2.45h1.56l-0.74-4.86L392.46,150.17L392.46,150.17z"/>
<path class="st1" d="M407.64,147.47v8.7c0,1.02-0.22,1.79-0.66,2.31s-1.14,0.78-2.11,0.78s-1.66-0.25-2.1-0.75
s-0.66-1.22-0.66-2.16v-8.88h1.77v8.92c0,0.3,0.07,0.58,0.22,0.82s0.4,0.36,0.76,0.36s0.62-0.13,0.77-0.38s0.23-0.56,0.23-0.92
v-8.8L407.64,147.47L407.64,147.47z"/>
<path class="st1" d="M413.08,149.16v10.01h-1.77v-10.01h-1.84v-1.7h5.46v1.7H413.08z"/>
<path class="st1" d="M422.28,156.17c0,1.02-0.22,1.79-0.67,2.31s-1.15,0.78-2.11,0.78s-1.66-0.25-2.1-0.75s-0.66-1.22-0.66-2.16
v-5.89c0-0.46,0.05-0.88,0.16-1.26c0.1-0.38,0.26-0.71,0.48-0.98c0.22-0.27,0.5-0.49,0.86-0.64c0.35-0.15,0.78-0.23,1.27-0.23
c0.52,0,0.96,0.07,1.32,0.21c0.36,0.14,0.64,0.35,0.85,0.61c0.21,0.27,0.37,0.59,0.46,0.98c0.09,0.38,0.14,0.81,0.14,1.29
V156.17z M420.51,150.32c0-0.33-0.07-0.62-0.21-0.88c-0.14-0.26-0.4-0.39-0.78-0.39c-0.21,0-0.38,0.05-0.51,0.14
s-0.23,0.21-0.3,0.35c-0.07,0.14-0.12,0.3-0.15,0.47s-0.04,0.33-0.04,0.48v5.89c0,0.3,0.07,0.58,0.22,0.82s0.4,0.36,0.76,0.36
c0.36,0,0.62-0.13,0.77-0.38s0.23-0.56,0.23-0.92L420.51,150.32L420.51,150.32z"/>
<path class="st1" d="M427.42,147.46c1.05,0,1.82,0.28,2.31,0.84s0.73,1.46,0.73,2.71c0,0.55-0.05,1.05-0.15,1.5
s-0.27,0.83-0.51,1.15c-0.24,0.32-0.56,0.57-0.94,0.75s-0.88,0.27-1.47,0.27h-0.72v4.49h-1.77v-11.71H427.42z M426.67,149.16
v3.79h0.62c0.55,0,0.93-0.16,1.14-0.48c0.21-0.32,0.32-0.8,0.32-1.45c0-0.57-0.1-1.03-0.3-1.36c-0.2-0.33-0.58-0.5-1.12-0.5
H426.67z"/>
<path class="st1" d="M432.68,159.17v-11.71h1.77v11.71H432.68z"/>
<path class="st1" d="M441.31,159.17l-0.44-2.44h-2.1c-0.08,0.4-0.15,0.81-0.22,1.22s-0.14,0.82-0.21,1.22h-1.81
c0.38-1.96,0.77-3.92,1.15-5.86s0.77-3.89,1.15-5.86h1.97l2.32,11.71L441.31,159.17L441.31,159.17z M439.76,150.17
c-0.11,0.81-0.22,1.61-0.34,2.42c-0.12,0.8-0.25,1.62-0.39,2.45h1.56l-0.74-4.86L439.76,150.17L439.76,150.17z"/>
<path class="st1" d="M453.63,153.04c0.5,0.17,0.85,0.49,1.04,0.96s0.28,1.01,0.28,1.62c0,1.22-0.25,2.12-0.76,2.69
s-1.29,0.86-2.34,0.86h-2.37v-11.71h2.5c1.01,0,1.74,0.27,2.19,0.82c0.46,0.54,0.68,1.33,0.68,2.36c0,0.54-0.09,1.01-0.27,1.41
c-0.18,0.4-0.5,0.71-0.95,0.91V153.04z M453.15,150.67c0-0.54-0.1-0.92-0.31-1.16s-0.55-0.35-1.04-0.35h-0.56v3.03h0.58
c0.46,0,0.8-0.13,1.01-0.39S453.15,151.17,453.15,150.67z M453.25,155.47c0-0.55-0.1-0.96-0.29-1.23
c-0.2-0.27-0.54-0.4-1.04-0.4h-0.67v3.63h0.71c0.29,0,0.51-0.05,0.68-0.16c0.17-0.11,0.3-0.25,0.39-0.43
c0.09-0.18,0.15-0.39,0.18-0.64S453.25,155.74,453.25,155.47z"/>
<path class="st1" d="M462.96,156.17c0,1.02-0.22,1.79-0.67,2.31s-1.15,0.78-2.11,0.78s-1.66-0.25-2.1-0.75s-0.66-1.22-0.66-2.16
v-5.89c0-0.46,0.05-0.88,0.16-1.26c0.1-0.38,0.26-0.71,0.48-0.98c0.22-0.27,0.5-0.49,0.86-0.64c0.35-0.15,0.78-0.23,1.27-0.23
c0.52,0,0.96,0.07,1.32,0.21c0.36,0.14,0.64,0.35,0.85,0.61c0.21,0.27,0.37,0.59,0.46,0.98c0.09,0.38,0.14,0.81,0.14,1.29
V156.17z M461.19,150.32c0-0.33-0.07-0.62-0.21-0.88c-0.14-0.26-0.4-0.39-0.78-0.39c-0.21,0-0.38,0.05-0.51,0.14
s-0.23,0.21-0.3,0.35c-0.07,0.14-0.12,0.3-0.15,0.47s-0.04,0.33-0.04,0.48v5.89c0,0.3,0.07,0.58,0.22,0.82s0.4,0.36,0.76,0.36
c0.36,0,0.62-0.13,0.77-0.38s0.23-0.56,0.23-0.92L461.19,150.32L461.19,150.32z"/>
<path class="st1" d="M468.18,147.46c0.93,0,1.66,0.27,2.19,0.8s0.79,1.4,0.79,2.6c0,0.74-0.1,1.37-0.3,1.88
c-0.2,0.51-0.56,0.91-1.08,1.2l1.69,5.23h-1.81l-1.48-4.85h-0.84v4.85h-1.77v-11.71H468.18z M467.35,149.16v3.43h0.72
c0.46,0,0.8-0.14,1.02-0.41c0.22-0.28,0.33-0.72,0.33-1.32c0-0.54-0.11-0.96-0.32-1.25c-0.21-0.3-0.57-0.45-1.06-0.45
L467.35,149.16L467.35,149.16z"/>
<path class="st1" d="M476.46,147.46c0.68,0,1.21,0.12,1.61,0.36c0.39,0.24,0.67,0.65,0.82,1.22c0.12,0.42,0.18,0.98,0.19,1.71
s0.01,1.57,0.01,2.55c0,0.97-0.01,1.79-0.02,2.49c-0.01,0.7-0.08,1.25-0.21,1.65c-0.21,0.66-0.54,1.12-0.99,1.36
s-0.97,0.37-1.55,0.37h-2.69v-11.71H476.46z M477.3,150.53c0-0.43-0.08-0.76-0.24-1s-0.46-0.36-0.91-0.36h-0.76v8.31h0.76
c0.44,0,0.74-0.12,0.9-0.36s0.25-0.58,0.25-1.03V150.53z"/>
<path class="st1" d="M481.75,159.17v-11.71h5.08v1.7h-3.3v3.2h2.88v1.73h-2.88v3.38h3.3v1.7L481.75,159.17L481.75,159.17z"/>
<path class="st1" d="M491.6,147.46c0.93,0,1.66,0.27,2.19,0.8s0.79,1.4,0.79,2.6c0,0.74-0.1,1.37-0.3,1.88
c-0.2,0.51-0.56,0.91-1.08,1.2l1.69,5.23h-1.81l-1.48-4.85h-0.84v4.85h-1.77v-11.71H491.6z M490.76,149.16v3.43h0.72
c0.46,0,0.8-0.14,1.02-0.41c0.22-0.28,0.33-0.72,0.33-1.32c0-0.54-0.11-0.96-0.32-1.25c-0.21-0.3-0.57-0.45-1.06-0.45
L490.76,149.16L490.76,149.16z"/>
<path class="st1" d="M502.47,156.17c0,1.02-0.22,1.79-0.67,2.31s-1.15,0.78-2.11,0.78s-1.66-0.25-2.1-0.75s-0.66-1.22-0.66-2.16
v-5.89c0-0.46,0.05-0.88,0.16-1.26c0.1-0.38,0.26-0.71,0.48-0.98c0.22-0.27,0.5-0.49,0.86-0.64c0.35-0.15,0.78-0.23,1.27-0.23
c0.52,0,0.96,0.07,1.32,0.21c0.36,0.14,0.64,0.35,0.85,0.61c0.21,0.27,0.37,0.59,0.46,0.98c0.09,0.38,0.14,0.81,0.14,1.29
V156.17z M500.7,150.32c0-0.33-0.07-0.62-0.21-0.88c-0.14-0.26-0.4-0.39-0.78-0.39c-0.21,0-0.38,0.05-0.51,0.14
s-0.23,0.21-0.3,0.35c-0.07,0.14-0.12,0.3-0.15,0.47s-0.04,0.33-0.04,0.48v5.89c0,0.3,0.07,0.58,0.22,0.82s0.4,0.36,0.76,0.36
c0.36,0,0.62-0.13,0.77-0.38s0.23-0.56,0.23-0.92L500.7,150.32L500.7,150.32z"/>
<path class="st1" d="M510.56,147.47v8.7c0,1.02-0.22,1.79-0.66,2.31s-1.14,0.78-2.11,0.78s-1.66-0.25-2.1-0.75
s-0.66-1.22-0.66-2.16v-8.88h1.77v8.92c0,0.3,0.07,0.58,0.22,0.82s0.4,0.36,0.76,0.36s0.62-0.13,0.77-0.38s0.23-0.56,0.23-0.92
v-8.8L510.56,147.47L510.56,147.47z"/>
<path class="st1" d="M515.93,159.27c-0.94,0-1.64-0.24-2.09-0.73s-0.67-1.2-0.67-2.15v-5.84c0-0.44,0.05-0.85,0.15-1.24
c0.1-0.39,0.26-0.73,0.49-1.02s0.51-0.52,0.86-0.69s0.78-0.25,1.28-0.25c0.93,0,1.62,0.24,2.05,0.73
c0.44,0.49,0.66,1.13,0.66,1.92v0.13l-1.74,0.35c0-0.43-0.08-0.77-0.23-1.04c-0.16-0.27-0.41-0.4-0.75-0.4
c-0.21,0-0.37,0.04-0.5,0.13c-0.13,0.09-0.23,0.21-0.3,0.35s-0.12,0.29-0.15,0.46c-0.03,0.16-0.04,0.32-0.04,0.46v5.95
c0,0.12,0.02,0.24,0.05,0.35c0.03,0.2,0.11,0.39,0.23,0.56s0.34,0.25,0.65,0.25s0.56-0.08,0.75-0.25s0.28-0.4,0.28-0.69v-2.3
h-1.04v-1.58h2.81v3.74c0,0.92-0.25,1.62-0.76,2.09C517.41,159.03,516.75,159.27,515.93,159.27z"/>
<path class="st1" d="M521.19,159.17v-11.71h5.08v1.7h-3.3v3.2h2.88v1.73h-2.88v3.38h3.3v1.7L521.19,159.17L521.19,159.17z"/>
</g>
</g>
<g>
<path d="M263.69,50.5v54.08H251V50.5h-9.98V38.08h32.65V50.5H263.69z"/>
<path d="M299.8,104.58V77.06h-8.12v27.52h-12.69v-66.5h12.69v26.37h8.12V38.08h12.69v66.5H299.8z"/>
<path d="M354.1,84.99c0,3.06-0.27,5.83-0.79,8.31c-0.53,2.48-1.43,4.6-2.71,6.35s-3,3.11-5.18,4.06
c-2.18,0.96-4.91,1.43-8.21,1.43c-2.99,0-5.55-0.45-7.7-1.35c-2.15-0.9-3.89-2.13-5.22-3.71c-1.34-1.57-2.32-3.4-2.94-5.48
s-0.93-4.3-0.93-6.66l12.78-2.48c0.12,2.42,0.48,4.24,1.06,5.45s1.67,1.82,3.28,1.82c0.92,0,1.64-0.22,2.17-0.67
c0.52-0.44,0.92-1.02,1.2-1.72c0.28-0.7,0.46-1.53,0.55-2.48c0.09-0.95,0.14-1.91,0.14-2.86c0-1.33-0.09-2.45-0.28-3.34
s-0.51-1.65-0.98-2.29s-1.1-1.19-1.91-1.67c-0.81-0.48-1.8-0.97-2.99-1.48c-3.17-1.33-5.72-2.72-7.65-4.15s-3.41-2.96-4.43-4.58
c-1.03-1.62-1.7-3.34-2.01-5.15c-0.31-1.81-0.47-3.8-0.47-5.96c0-2.73,0.31-5.26,0.93-7.58s1.6-4.31,2.94-5.96
c1.34-1.65,3.08-2.96,5.22-3.91c2.15-0.95,4.74-1.43,7.79-1.43c3.23,0,5.91,0.53,8.02,1.58c2.11,1.05,3.78,2.39,4.99,4.01
s2.07,3.43,2.57,5.4c0.5,1.98,0.75,3.89,0.75,5.73L341.6,57c0-0.96-0.05-1.85-0.14-2.68c-0.09-0.83-0.29-1.58-0.6-2.25
s-0.72-1.19-1.24-1.58c-0.52-0.38-1.25-0.57-2.17-0.57c-0.86,0-1.54,0.21-2.03,0.62s-0.88,0.92-1.15,1.53
c-0.28,0.61-0.46,1.29-0.55,2.05s-0.14,1.5-0.14,2.2c0,0.89,0.06,1.69,0.18,2.39s0.43,1.37,0.93,2.01s1.22,1.26,2.18,1.86
c0.96,0.61,2.31,1.26,4.04,1.96c2.97,1.21,5.32,2.48,7.06,3.82c1.73,1.34,3.05,2.8,3.95,4.4c0.9,1.59,1.49,3.39,1.76,5.4
S354.1,82.45,354.1,84.99z"/>
<path d="M374.34,50.5v14.14h14.93v12.42h-14.93v27.52h-12.69v-66.5h29.76V50.5H374.34z"/>
</g>
</g>
<g>
<path d="M364.78,329.98l24.81-24.81l-38.03-38.03c-4.02-4.02-8.44-7.66-13.14-10.84c-4.75-3.21-9.83-5.97-15.1-8.2
c-5.37-2.27-10.99-4.02-16.7-5.19c-11.71-2.4-24.07-2.4-35.78,0c-5.71,1.17-11.33,2.91-16.7,5.19c-5.27,2.23-10.35,4.99-15.1,8.2
c-4.7,3.18-9.12,6.82-13.14,10.84s-7.66,8.44-10.84,13.14c-3.21,4.75-5.97,9.83-8.2,15.1c-2.27,5.37-4.02,10.99-5.19,16.7
c-1.2,5.85-1.81,11.87-1.81,17.89c0,0.01,0,0.01,0,0.02c0,4.92,0.55,9.72,1.6,14.35c1.05,4.64,2.59,9.12,4.58,13.39
c1.99,4.27,4.42,8.32,7.25,12.11c2.82,3.79,6.04,7.33,9.6,10.56c3.56,3.23,7.45,6.15,11.63,8.71c4.18,2.56,8.65,4.77,13.35,6.58
s9.64,3.21,14.75,4.16c5.12,0.95,10.41,1.45,15.84,1.45c5.92,0,11.7-0.48,17.29-1.38s10.97-2.24,16.1-3.96s10.01-3.82,14.57-6.26
s8.81-5.22,12.69-8.29l113.32-89.46c-0.56,0.51,0.53-0.54,0,0c2.44-2.44,5.12-4.65,7.97-6.58c2.88-1.94,5.95-3.61,9.13-4.96
c3.24-1.37,6.63-2.42,10.07-3.13c7.09-1.45,14.63-1.45,21.71,0c3.44,0.7,6.83,1.76,10.07,3.13c3.18,1.35,6.25,3.01,9.13,4.96
c2.85,1.93,5.53,4.14,7.97,6.58c2.44,2.44,4.65,5.12,6.58,7.97c1.94,2.87,3.61,5.95,4.96,9.13c1.37,3.24,2.42,6.63,3.13,10.07
c0.72,3.54,1.09,7.2,1.09,10.86c0,3.66-0.37,7.31-1.09,10.86c-0.71,3.45-1.76,6.83-3.13,10.07c-1.35,3.18-3.01,6.26-4.96,9.13
c-1.93,2.85-4.14,5.53-6.58,7.97s-5.12,4.65-7.97,6.58c-2.87,1.94-5.95,3.61-9.13,4.96c-3.24,1.37-6.63,2.42-10.07,3.13
c-7.09,1.45-14.62,1.45-21.71,0c-3.44-0.7-6.83-1.76-10.07-3.13c-3.18-1.35-6.25-3.01-9.13-4.95c-2.85-1.93-5.53-4.14-7.97-6.58
l-38.03-38.03l0,0l-24.81,24.81l0,0l38.03,38.03c4.02,4.02,8.44,7.66,13.14,10.84c4.75,3.21,9.83,5.97,15.1,8.2
c5.37,2.27,10.99,4.02,16.7,5.19c5.85,1.2,11.87,1.81,17.89,1.81s12.04-0.61,17.89-1.81c5.71-1.17,11.33-2.91,16.7-5.19
c5.27-2.23,10.35-4.99,15.1-8.2c4.7-3.18,9.12-6.82,13.14-10.84s7.66-8.44,10.84-13.14c3.21-4.75,5.97-9.83,8.2-15.1
c2.27-5.37,4.02-10.99,5.19-16.7c1.2-5.85,1.8-11.87,1.8-17.89l0,0c0-4.92-0.55-9.73-1.6-14.37c-1.05-4.64-2.59-9.12-4.58-13.39
c-1.99-4.27-4.42-8.32-7.25-12.11c-2.82-3.79-6.04-7.33-9.6-10.56s-7.45-6.15-11.63-8.71s-8.65-4.77-13.35-6.58
c-4.7-1.8-9.64-3.21-14.75-4.16c-5.12-0.95-10.41-1.45-15.84-1.45c-5.92,0-11.7,0.47-17.29,1.38c-5.58,0.9-10.97,2.24-16.1,3.96
s-10.01,3.82-14.57,6.26s-8.81,5.22-12.69,8.29l-113.32,89.46c-1.98,1.82-5.75,5.07-7.97,6.58c-2.87,1.94-5.95,3.61-9.13,4.96
c-3.24,1.37-6.63,2.42-10.07,3.13c-7.09,1.45-14.62,1.45-21.71,0c-3.44-0.71-6.83-1.76-10.07-3.13c-3.18-1.35-6.25-3.01-9.13-4.96
c-2.85-1.93-5.53-4.14-7.97-6.58c-2.44-2.44-4.65-5.12-6.58-7.97c-1.94-2.87-3.61-5.95-4.96-9.13c-1.37-3.24-2.42-6.63-3.13-10.07
c-0.73-3.54-1.09-7.2-1.09-10.86c0-3.66,0.37-7.31,1.09-10.86c0.7-3.44,1.76-6.83,3.13-10.07c1.35-3.18,3.01-6.25,4.95-9.13
c1.93-2.85,4.14-5.53,6.58-7.97s5.12-4.65,7.97-6.58c2.88-1.94,5.95-3.61,9.13-4.96c3.24-1.37,6.63-2.42,10.07-3.13
c3.54-0.73,7.2-1.09,10.86-1.09c3.66,0,7.31,0.37,10.86,1.09c3.44,0.7,6.83,1.76,10.07,3.13c3.18,1.35,6.25,3.01,9.13,4.96
c2.85,1.93,5.53,4.14,7.97,6.58L364.78,329.98L364.78,329.98z"/>
<g>
<g>
<g>
<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="604.435" y1="427.5899" x2="392.7685" y2="639.2565" gradientTransform="matrix(1 0 0 1 0 -230)">
<stop offset="0.1074" style="stop-color:#E5006D"/>
<stop offset="1" style="stop-color:#000000"/>
</linearGradient>
<path class="st2" d="M452.77,270.26c4.56-2.44,9.44-4.54,14.57-6.26s10.52-3.05,16.1-3.96c5.58-0.9,11.36-1.38,17.29-1.38
c5.43,0,10.72,0.5,15.84,1.45s10.05,2.35,14.75,4.16c4.7,1.8,9.17,4.01,13.35,6.58c4.18,2.56,8.08,5.48,11.63,8.71
c3.56,3.23,6.77,6.76,9.6,10.56c2.82,3.79,5.26,7.85,7.25,12.11c1.99,4.27,3.53,8.74,4.58,13.39c1.05,4.64,1.6,9.45,1.6,14.37
c0-6.02-0.61-12.04-1.8-17.89c-1.17-5.71-2.91-11.33-5.19-16.7c-2.23-5.27-4.99-10.35-8.2-15.1
c-3.18-4.7-6.82-9.12-10.84-13.14c-4.02-4.02-8.44-7.66-13.14-10.84c-4.75-3.21-9.83-5.97-15.1-8.2
c-5.37-2.27-10.99-4.02-16.7-5.19c-5.85-1.2-11.87-1.81-17.89-1.81c-6.02,0-12.04,0.61-17.89,1.81
c-5.71,1.17-11.33,2.91-16.7,5.19c-5.27,2.23-10.35,4.98-15.1,8.2c-4.7,3.18-9.12,6.82-13.14,10.84l-38.03,38.03L364.8,330
l-38.03,38.03c-0.54,0.54-1.09,1.05-1.64,1.57l114.97-91.03C443.95,275.48,448.2,272.7,452.77,270.26z"/>
</g>
</g>
<g>
<linearGradient id="SVGID_00000049196946087679940990000002865169276270721946_" gradientUnits="userSpaceOnUse" x1="631.6329" y1="-164.8441" x2="419.9663" y2="46.8224" gradientTransform="matrix(-1 0 0 -1 806.3674 297.5265)">
<stop offset="0.1074" style="stop-color:#E5006D"/>
<stop offset="1" style="stop-color:#000000"/>
</linearGradient>
<path style="fill:url(#SVGID_00000049196946087679940990000002865169276270721946_);" d="M326.4,389.7
c-4.56,2.44-9.44,4.54-14.57,6.26s-10.52,3.05-16.1,3.96c-5.58,0.9-11.36,1.38-17.29,1.38c-5.43,0-10.72-0.5-15.84-1.45
s-10.05-2.35-14.75-4.16c-4.7-1.8-9.17-4.01-13.35-6.58c-4.18-2.56-8.08-5.48-11.63-8.71c-3.56-3.23-6.77-6.76-9.6-10.56
c-2.82-3.79-5.26-7.85-7.25-12.11c-1.99-4.27-3.53-8.74-4.58-13.39c-1.05-4.64-1.6-9.45-1.6-14.37c0,6.02,0.61,12.04,1.8,17.89
c1.17,5.71,2.91,11.33,5.19,16.7c2.23,5.27,4.99,10.35,8.2,15.1c3.18,4.7,6.82,9.12,10.84,13.14
c4.02,4.02,8.44,7.66,13.14,10.84c4.75,3.21,9.83,5.97,15.1,8.2c5.37,2.27,10.99,4.02,16.7,5.19c5.85,1.2,11.87,1.81,17.89,1.81
s12.04-0.61,17.89-1.81c5.71-1.17,11.33-2.91,16.7-5.19c5.27-2.23,10.35-4.98,15.1-8.2c4.7-3.18,9.12-6.82,13.14-10.84
l38.03-38.03l24.81-24.81l38.03-38.03c0.54-0.54,1.09-1.05,1.64-1.57l-114.97,91.03C335.21,384.48,330.96,387.26,326.4,389.7z"
/>
</g>
</g>
</g>
<g>
<path d="M411.61,538.22c1.81-2.21,4.52-3.65,7.6-3.65c3.08,0,5.79,1.44,7.6,3.65c-2.33,1-4.9,1.56-7.6,1.56
C416.51,539.77,413.94,539.22,411.61,538.22z M409.47,537.12l3.07-4.86c1.73-2.73,1.17-6.32-1.29-8.4l-4.02-3.39h5.66
c3.24,0,6.14-2.42,6.31-5.66c0.18-3.45-2.56-6.3-5.97-6.3h-9.16l0,0c-0.91,1.16-1.67,2.43-2.32,3.76
c-0.06,0.13-0.12,0.25-0.18,0.38c-0.14,0.31-0.26,0.63-0.39,0.96c-0.09,0.24-0.18,0.47-0.26,0.71c-0.1,0.29-0.19,0.58-0.27,0.87
c-0.08,0.3-0.16,0.59-0.23,0.9c-0.06,0.26-0.12,0.53-0.17,0.79c-0.07,0.37-0.12,0.74-0.17,1.12c-0.03,0.22-0.06,0.43-0.08,0.65
c-0.06,0.6-0.09,1.21-0.09,1.83C399.9,527.57,403.75,533.77,409.47,537.12z M423.85,522.68c0,2.49,2.02,4.52,4.52,4.52h1.61v6.74
c0,0.78,0.21,1.5,0.56,2.14c4.83-3.51,7.98-9.19,7.98-15.61c0-0.78-0.06-1.54-0.15-2.3h-10
C425.87,518.17,423.85,520.19,423.85,522.68z M427.58,516.43h2.78h7.73c-0.73-3.44-2.39-6.54-4.69-9.03h-5.82
c-2.49,0-4.52,2.02-4.52,4.52S425.08,516.43,427.58,516.43z M430.48,504.81c-3.17-2.29-7.06-3.66-11.28-3.66s-8.1,1.37-11.28,3.66
H430.48z"/>
<g>
<path d="M480.41,519.99l-1.17-2.83l-1.17-2.83l-1.17-2.83l-1.17-2.83l0,0c-0.14-0.33-0.34-0.63-0.59-0.88s-0.55-0.45-0.88-0.59
c-0.33-0.14-0.69-0.22-1.07-0.22h-1.6h-1.6h-1.6h-1.6c-0.38,0-0.74,0.08-1.07,0.22c-0.33,0.14-0.63,0.34-0.88,0.59
s-0.45,0.55-0.59,0.88l0,0l-1.17,2.83l-1.17,2.83l-1.17,2.83l-1.17,2.83c-0.05,0.12-0.07,0.24-0.07,0.36s0.03,0.24,0.07,0.35
c0.05,0.11,0.11,0.21,0.19,0.3c0.08,0.08,0.19,0.15,0.3,0.2l0.2,0.08l0.2,0.08l0.2,0.08l0.2,0.08c0.12,0.05,0.24,0.07,0.36,0.07
s0.24-0.03,0.35-0.07c0.11-0.05,0.21-0.11,0.3-0.2c0.09-0.08,0.16-0.19,0.2-0.3l1.17-2.83l1.17-2.83l1.07-2.59
c0.22,0.12,0.43,0.26,0.61,0.43c0.22,0.22,0.4,0.48,0.52,0.78c0.11,0.26,0.17,0.54,0.18,0.84v3.43l-4.11,22.88h2.93l4.38-17.47
l4.38,17.47h2.93l-4.11-22.88v-3.43c0.01-0.3,0.07-0.58,0.18-0.84c0.12-0.29,0.3-0.55,0.52-0.78c0.18-0.18,0.39-0.32,0.61-0.43
l1.07,2.59l1.17,2.83l1.17,2.83c0.05,0.12,0.12,0.22,0.2,0.3c0.09,0.08,0.19,0.15,0.3,0.2s0.23,0.07,0.35,0.07
s0.24-0.02,0.36-0.07l0.2-0.08l0.2-0.08l0.2-0.08l0.2-0.08c0.12-0.05,0.22-0.12,0.3-0.2c0.08-0.09,0.15-0.19,0.2-0.3
c0.04-0.11,0.07-0.23,0.07-0.35C480.48,520.23,480.46,520.11,480.41,519.99z"/>
<path d="M470.06,505.61c2.29,0,4.15-1.86,4.15-4.15s-1.86-4.15-4.15-4.15s-4.15,1.86-4.15,4.15
C465.9,503.75,467.76,505.61,470.06,505.61z"/>
</g>
<path d="M261.64,503.71v-0.75c0-1.65-1.35-2.99-2.99-2.99h-3.99c-1.65,0-2.99,1.35-2.99,2.99v0.75c-1.65,0-2.99,1.35-2.99,2.99
v31.4c0,1.65,1.35,2.99,2.99,2.99h9.98c1.65,0,2.99-1.35,2.99-2.99v-31.4C264.63,505.05,263.29,503.71,261.64,503.71z
M261.99,536.57c0,1.1-0.9,2-2,2h-6.67c-1.1,0-2-0.9-2-2v-7.25h10.67V536.57z M261.21,510.99c-0.25,0.25-0.6,0.41-0.99,0.41h-2.17
v2.18c0,0.39-0.16,0.74-0.41,0.99s-0.6,0.41-0.99,0.41c-0.39,0-0.74-0.16-0.99-0.41s-0.41-0.61-0.41-0.99v-2.18h-2.18
c-0.39,0-0.74-0.16-0.99-0.41s-0.41-0.6-0.41-0.99c0-0.39,0.16-0.74,0.41-0.99s0.6-0.41,0.99-0.41h2.18v-2.17
c0-0.39,0.16-0.74,0.41-0.99s0.6-0.41,0.99-0.41s0.74,0.16,0.99,0.41s0.41,0.61,0.41,0.99v2.17h2.17c0.39,0,0.74,0.16,0.99,0.41
s0.41,0.6,0.41,0.99S261.47,510.74,261.21,510.99z M259.91,532.52c0.25,0.25,0.41,0.61,0.41,0.99s-0.16,0.74-0.41,0.99
s-0.6,0.41-0.99,0.41h-2.27h-2.27c-0.39,0-0.74-0.16-0.99-0.41s-0.41-0.6-0.41-0.99s0.16-0.74,0.41-0.99s0.6-0.41,0.99-0.41h2.27
h2.27C259.31,532.11,259.66,532.27,259.91,532.52z"/>
<g>
<path d="M298.48,505.8c2.29,0,4.15-1.86,4.15-4.15s-1.86-4.15-4.15-4.15s-4.15,1.86-4.15,4.15
C294.32,503.94,296.18,505.8,298.48,505.8z"/>
<path d="M308.91,519.83c0,0-0.44-1.06-0.78-1.89l0,0c-0.21-0.52-0.39-0.94-0.39-0.94l-1.17-2.83l-1.17-2.83l-1.17-2.83l0,0
c-0.14-0.33-0.34-0.63-0.59-0.88s-0.55-0.45-0.88-0.59c-0.33-0.14-0.69-0.22-1.07-0.22h-1.6h-1.6h-1.6h-1.6
c-0.38,0-0.74,0.08-1.07,0.22c-0.33,0.14-0.63,0.34-0.88,0.59s-0.45,0.55-0.59,0.88l0,0l-1.17,2.83l-1.17,2.83l-1.17,2.83
l-1.17,2.83c-0.05,0.12-0.07,0.24-0.07,0.36s0.03,0.24,0.07,0.35s0.11,0.21,0.2,0.3c0.08,0.08,0.19,0.15,0.3,0.2l0.2,0.08
l0.2,0.08l0.2,0.08l0.2,0.08c0.12,0.05,0.24,0.07,0.36,0.07s0.24-0.03,0.35-0.07c0.11-0.05,0.21-0.11,0.3-0.2
c0.09-0.08,0.16-0.19,0.2-0.3l1.17-2.83l1.17-2.83l1.17-2.83l0.04-0.1c0.28,0.14,0.54,0.31,0.75,0.52
c0.25,0.25,0.46,0.55,0.6,0.88s0.22,0.69,0.22,1.08v1.84l-2.83,10.13c-0.28,0.89,0.11,1.62,0.89,1.62h1.88l1.41,12.62h2.93
l1.41-12.62h1.91c0.77,0,1.17-0.73,0.89-1.62l-2.86-10.13v-1.84c0-0.38,0.08-0.74,0.22-1.08c0.14-0.33,0.34-0.63,0.6-0.88
c0.22-0.22,0.47-0.39,0.75-0.52l0.04,0.1l1.17,2.83l1.17,2.83l1.17,2.83c0.05,0.12,0.12,0.22,0.2,0.3
c0.09,0.08,0.19,0.15,0.3,0.2s0.23,0.07,0.35,0.07s0.24-0.02,0.36-0.07l0.2-0.08l0.2-0.08l0.2-0.08l0.2-0.08
c0.12-0.05,0.22-0.12,0.3-0.2c0.08-0.09,0.15-0.19,0.2-0.3c0.05-0.11,0.07-0.23,0.07-0.35
C308.98,520.06,308.96,519.94,308.91,519.83z"/>
</g>
<path d="M501.08,524.93c0.38-0.38,0.92-0.62,1.5-0.62h23.71c0.15,0,0.29,0.01,0.43,0.04c0.97,0.2,1.7,1.05,1.7,2.08l0,0
c0,1.03-0.73,1.88-1.7,2.08c-0.14,0.03-0.28,0.04-0.43,0.04v5.17l-23.71,2.75v-7.92c-0.59,0-1.12-0.24-1.5-0.62
c-0.19-0.19-0.35-0.42-0.46-0.68c-0.05-0.13-0.1-0.26-0.12-0.4c-0.03-0.14-0.04-0.28-0.04-0.43l0,0
C500.46,525.85,500.7,525.31,501.08,524.93z M528.42,514.26c0-1.03-0.73-1.88-1.7-2.08c-0.14-0.03-0.28-0.04-0.43-0.04h-23.71
c-0.88,0-1.64,0.54-1.96,1.3c-0.11,0.25-0.17,0.53-0.17,0.83c0,1.17,0.95,2.12,2.12,2.12v7.92l23.71-2.75v-5.17
c0.15,0,0.29-0.01,0.43-0.04C527.69,516.14,528.42,515.29,528.42,514.26z M500.62,537.78c-0.11,0.25-0.17,0.53-0.17,0.83
c0,0.29,0.06,0.57,0.17,0.83c0.32,0.76,1.08,1.3,1.96,1.3h23.71c0.15,0,0.29-0.01,0.43-0.04c0.97-0.2,1.7-1.05,1.7-2.08
s-0.73-1.88-1.7-2.08c-0.14-0.03-0.28-0.04-0.43-0.04h-23.71C501.7,536.48,500.95,537.01,500.62,537.78z M526.29,504.21
c0.15,0,0.29-0.01,0.43-0.04c0.97-0.2,1.7-1.05,1.7-2.08s-0.73-1.88-1.7-2.08c-0.14-0.03-0.28-0.04-0.43-0.04h-23.71
c-0.88,0-1.64,0.54-1.96,1.3c-0.11,0.25-0.17,0.53-0.17,0.83s0.06,0.57,0.17,0.83c0.32,0.76,1.08,1.3,1.96,1.3v7.92l23.71-2.75
V504.21z"/>
<path d="M359.68,535.12h4.63v2.27H343.9v-2.27h4.63v-3.96h11.15V535.12z M354.26,515.8c-0.82,0-1.49,0.67-1.49,1.49
s0.67,1.49,1.49,1.49c0.82,0,1.49-0.67,1.49-1.49C355.76,516.47,355.09,515.8,354.26,515.8z M374.51,505.68v23.22h-40.5v-23.22
L374.51,505.68L374.51,505.68z M361.1,517.29c0-3.77-3.07-6.83-6.83-6.83c-3.77,0-6.83,3.06-6.83,6.83c0,3.77,3.07,6.83,6.83,6.83
c1.35,0,2.65-0.39,3.78-1.14l-0.84-1.26c-0.87,0.58-1.89,0.89-2.94,0.89c-2.93,0-5.32-2.39-5.32-5.32s2.39-5.32,5.32-5.32
s5.32,2.39,5.32,5.32c0,0.51-0.07,1.01-0.22,1.49h-2.51c0.26-0.44,0.41-0.95,0.41-1.49c0-1.66-1.35-3.01-3.01-3.01
s-3.01,1.35-3.01,3.01c0,1.66,1.35,3.01,3.01,3.01h6.15l0.19-0.48C360.93,519.01,361.1,518.16,361.1,517.29z"/>
</g>
<g>
<path d="M257.18,326.38c-0.64-0.33-1.28-0.57-1.94-0.73s-1.35-0.24-2.08-0.24c-2.1,0-3.15,0.38-3.15,1.12
c0,0.26,0.1,0.45,0.31,0.58c0.21,0.13,0.5,0.22,0.88,0.29s0.84,0.11,1.38,0.14c0.54,0.03,1.16,0.08,1.85,0.15
c0.74,0.07,1.38,0.17,1.94,0.3c0.55,0.13,1.01,0.3,1.38,0.52c0.36,0.22,0.64,0.5,0.82,0.82c0.18,0.33,0.27,0.73,0.27,1.2
c0,1.02-0.45,1.8-1.35,2.35s-2.22,0.83-3.96,0.83c-2.43,0-4.38-0.55-5.83-1.66l1-1.31c0.65,0.45,1.37,0.79,2.17,1.02
c0.8,0.23,1.68,0.35,2.63,0.35c1.1,0,1.93-0.14,2.5-0.41c0.57-0.27,0.85-0.63,0.85-1.08c0-0.51-0.36-0.87-1.08-1.06
c-0.52-0.14-1.14-0.22-1.85-0.23s-1.52-0.06-2.42-0.14c-1.17-0.11-2.03-0.36-2.58-0.75s-0.83-0.96-0.83-1.72
c0-0.9,0.44-1.62,1.31-2.15s2.12-0.79,3.75-0.79c2.13,0,3.86,0.46,5.18,1.38L257.18,326.38z"/>
<path d="M279.64,333.66h-2.11l7.14-11.29h2.09L279.64,333.66z"/>
<path class="st1" d="M306.39,333.5v-9.46h9.83v1.66h-7.98v2.06h5.55v1.66h-5.55v2.42h8.34v1.66L306.39,333.5L306.39,333.5z"/>
<path class="st1" d="M346.07,333.5l-3.77-3.71l-3.77,3.71h-2.32l4.92-4.8l-4.75-4.66h2.32l3.6,3.57l3.6-3.57h2.32l-4.75,4.66
l4.92,4.8H346.07z"/>
<path class="st1" d="M373.81,325.7v7.8h-1.85v-7.8h-4.52v-1.66h10.89v1.66H373.81z"/>
<path class="st1" d="M407.66,333.5l-2.48-3.48h-4.69v3.48h-1.85v-9.46h7.65c0.5,0,0.96,0.07,1.36,0.22s0.75,0.35,1.04,0.61
s0.51,0.58,0.66,0.95c0.15,0.37,0.23,0.78,0.23,1.23c0,0.77-0.2,1.4-0.6,1.88c-0.4,0.49-0.98,0.82-1.75,0.99l2.55,3.58H407.66z
M406.01,328.37c1.12,0,1.68-0.43,1.68-1.29c0-0.48-0.14-0.83-0.43-1.04c-0.29-0.22-0.74-0.33-1.35-0.33h-5.42v2.66H406.01z"/>
<path class="st1" d="M439.64,333.5l-1.09-2.03h-6.35l-1.09,2.03h-2.03l5.15-9.46h2.29l5.15,9.46H439.64z M435.38,325.63
l-2.26,4.18h4.51L435.38,325.63z"/>
<path class="st1" d="M461.83,333.5v-9.46h1.85v9.46H461.83z"/>
<path class="st1" d="M494.38,333.5l-2.48-3.48h-4.69v3.48h-1.85v-9.46h7.65c0.5,0,0.96,0.07,1.36,0.22s0.75,0.35,1.04,0.61
s0.51,0.58,0.66,0.95c0.15,0.37,0.23,0.78,0.23,1.23c0,0.77-0.2,1.4-0.6,1.88c-0.4,0.49-0.98,0.82-1.75,0.99l2.55,3.58H494.38z
M492.74,328.37c1.12,0,1.68-0.43,1.68-1.29c0-0.48-0.14-0.83-0.43-1.04c-0.29-0.22-0.74-0.33-1.35-0.33h-5.42v2.66H492.74z"/>
<path class="st1" d="M517.58,333.5v-9.46h9.83v1.66h-7.98v2.06h5.55v1.66h-5.55v2.42h8.34v1.66L517.58,333.5L517.58,333.5z"/>
</g>
<path d="M359.68,535.12h4.63v2.27H343.9v-2.27h4.63v-3.96h11.15V535.12z M354.26,515.8c-0.82,0-1.49,0.67-1.49,1.49
s0.67,1.49,1.49,1.49c0.82,0,1.49-0.67,1.49-1.49C355.76,516.47,355.09,515.8,354.26,515.8z M374.51,505.68v23.22h-40.5v-23.22
L374.51,505.68L374.51,505.68z M361.1,517.29c0-3.77-3.07-6.83-6.83-6.83c-3.77,0-6.83,3.06-6.83,6.83c0,3.77,3.07,6.83,6.83,6.83
c1.35,0,2.65-0.39,3.78-1.14l-0.84-1.26c-0.87,0.58-1.89,0.89-2.94,0.89c-2.93,0-5.32-2.39-5.32-5.32s2.39-5.32,5.32-5.32
s5.32,2.39,5.32,5.32c0,0.51-0.07,1.01-0.22,1.49h-2.51c0.26-0.44,0.41-0.95,0.41-1.49c0-1.66-1.35-3.01-3.01-3.01
s-3.01,1.35-3.01,3.01c0,1.66,1.35,3.01,3.01,3.01h6.15l0.19-0.48C360.93,519.01,361.1,518.16,361.1,517.29z"/>
<g>
<g>
<polygon points="361.86,564.75 346.67,564.75 354.26,557.07 354.26,557.07 "/>
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 325 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 55 KiB

View File

@ -1,50 +0,0 @@
[metadata]
version = 1.0.2
classifiers =
Programming Language :: Python :: 3
License :: OSI Approved :: MIT License
Operating System :: OS Independent
url = https://git.tetalab.org/tetalab/thsf.net
description = "THSF website"
name = thsf
long_description = file: README.md
long_description_content_type = text/markdown
author = Doug Le Tough
author_email = doug@redatomik.org
[options]
package_dir =
= src
packages = find:
include_package_data = True
python_requires = >=3.7
install_requires =
flask
Flask-Minify
gunicorn
pyYAML
requests
[options.packages.find]
where = src
[options.extras_require]
dev =
twine
build
wheel>=0.37.0
flake8>=4.0.1
flake8-breakpoint>=1.1.0
flake8-builtins>=1.5.3
flake8-print>=4.0.0
flake8-return>=1.1.3
pep8-naming>=0.8.2
setuptools>=60.9.2
pylint>=2.12.2
[flake8]
ignore = E111
exclude = .git,__pycache__,build,dist, thot-cli-venv
max-line-length = 160
use-flake8-tabs = true
tab-width = 2

View File

@ -1,3 +0,0 @@
import setuptools
setuptools.setup()

View File

@ -1,217 +0,0 @@
import re
import sys
import json
import logging
from logging import config
import yaml
from flask import Flask, render_template, redirect, request, url_for
from flask_minify import minify
from thsf.backend import Backend
from thsf.schedule import Schedule
from thsf.navbar import Navbar
# ------------------------------------------------------------------------------
# -- Configuration
# ------------------------------------------------------------------------------
class AppConfig:
""" Flask application config """
CONFIG_FILENAME = "config.yml"
# ------------------------------------------------------------------------------
# -- Application
# ------------------------------------------------------------------------------
logger = logging.getLogger('wsgi')
app = Flask(__name__)
# ------------------------------------------------------------------------------
# -- Local configuration
# ------------------------------------------------------------------------------
app.config.from_object(__name__ + '.AppConfig')
try:
with open(app.config["CONFIG_FILENAME"], mode="r", encoding="utf-8") as local_config_file:
app.local_config = yaml.load(local_config_file, Loader=yaml.SafeLoader)
app.config["SECRET_KEY"] = app.local_config["app"]["secret_key"]
app.config["LANGUAGES"] = app.local_config["app"]["languages"]
config.dictConfig(app.local_config["log"])
backend = Backend(url=app.local_config["pretalx"]["url"],
apiprefix=app.local_config["pretalx"]["apiprefix"],
apikey=app.local_config["pretalx"]["apikey"])
schedule = Schedule()
navbar = Navbar(config=app.local_config["navbar"])
except Exception as err:
logger.critical(f"[{err.__class__}] {str(err)}")
sys.exit(1)
if app.local_config["log"]["root"]["level"] != "DEBUG":
minify(app=app, html=True, js=True, cssless=True)
# ------------------------------------------------------------------------------
# -- Tools
# ------------------------------------------------------------------------------
@app.errorhandler(404)
def page_not_found(err):
return redirect(url_for('index'))
def get_slots():
return backend.get(endpoint=f"events/{app.local_config['pretalx']['event']}/schedules/{app.local_config['pretalx']['schedule']}/").json()
def get_speaker_biography(code):
try:
speaker_info = backend.get(endpoint=f"events/{app.local_config['pretalx']['event']}/speakers/{code}/").json()
return speaker_info.get("biography").strip()
except Exception as err:
return None
# ------------------------------------------------------------------------------
# -- Custom filters
# ------------------------------------------------------------------------------
@app.template_filter('date2dmyhm')
def date2dmyhm(date):
splitted_date = date.split("-")
splitted_time = splitted_date[2].split("T")[1].split(":")
year, month, day = (splitted_date[0],
splitted_date[1],
splitted_date[2].split("T")[0])
hour, minutes = (splitted_time[0], splitted_time[1].split("+")[0])
return f"{day}/{month} {hour}:{minutes}"
@app.template_filter('date2dayclass')
def date2dayclass(date):
classes = {"26/05": "bg1",
"27/05": "bg2",
"28/05": "bg3"}
splitted_date = date.split("-")
month, day = (splitted_date[1],
splitted_date[2].split("T")[0])
return classes[f"{day}/{month}"]
@app.template_filter('toicon')
def type2icon(slot_type):
slot_types = {"Projection": "fa-solid fa-film",
"Presentation Courte": "fa-solid fa-person-chalkboard",
"DJ Set": "fa-solid fa-guitar",
"Concert": "fa-solid fa-guitar",
"Présentation": "fa-solid fa-person-chalkboard",
"Table Ronde": "fa-solid fa-users-line",
"Atelier": "fa-solid fa-screwdriver-wrench",
"Installation": "fa-solid fa-palette"}
return slot_types[slot_type]
# ------------------------------------------------------------------------------
# -- Routes
# ------------------------------------------------------------------------------
@app.route('/favicon.ico', methods=['GET'])
def favicon():
return redirect(url_for('static', filename='images/favicon.png'))
@app.route('/', methods=['GET'])
def index():
return render_template("index.html",
navbar=navbar.get_from_page(page="/"))
@app.route('/planning', methods=['GET'])
def planning():
slots = get_slots()
for slot in slots.get("slots"):
for speaker in slot.get("speakers"):
speaker["biography"] = get_speaker_biography(speaker.get("code"))
return render_template("planning.html",
slots=sorted(slots.get("slots"),
key=lambda slot: slot.get("slot").get("start")),
navbar=navbar.get_from_page(page="/planning"),
filter=["concert", "dj set", "panel discussion", "talk", "screening"])
@app.route('/place', methods=['GET'])
def place():
return render_template("place.html",
navbar=navbar.get_from_page(page="/place"))
@app.route('/food', methods=['GET'])
def food():
return render_template("food.html",
navbar=navbar.get_from_page(page="/food"))
@app.route('/goodies', methods=['GET'])
def goodies():
return render_template("goodies.html",
navbar=navbar.get_from_page(page="/goodies"))
@app.route('/concerts', methods=['GET'])
def concerts():
slots = get_slots()
return render_template("planning.html",
slots=sorted(slots.get("slots"),
key=lambda slot: slot.get("slot").get("start")),
navbar=navbar.get_from_page(page="/concerts"),
filter=["concert", "dj set"])
@app.route('/workshops', methods=['GET'])
def workshops():
slots = get_slots()
return render_template("planning.html",
slots=sorted(slots.get("slots"),
key=lambda slot: slot.get("slot").get("start")),
navbar=navbar.get_from_page(page="/workshops"),
filter=["workshop"])
@app.route('/screenings', methods=['GET'])
def screenings():
slots = get_slots()
return render_template("planning.html",
slots=sorted(slots.get("slots"),
key=lambda slot: slot.get("slot").get("start")),
navbar=navbar.get_from_page(page="/screenings"),
filter=["screening"])
@app.route('/discussions', methods=['GET'])
def discussions():
slots = get_slots()
return render_template("planning.html",
slots=sorted(slots.get("slots"),
key=lambda slot: slot.get("slot").get("start")),
navbar=navbar.get_from_page(page="/discussions"),
filter=["panel discussion"])
@app.route('/exhibitions', methods=['GET'])
def exhibitions():
slots = get_slots()
return render_template("planning.html",
slots=sorted(slots.get("slots"),
key=lambda slot: slot.get("slot").get("start")),
navbar=navbar.get_from_page(page="/exhibitions"),
filter=["installation"])
@app.route('/talks', methods=['GET'])
def talks():
slots = get_slots()
return render_template("planning.html",
slots=sorted(slots.get("slots"),
key=lambda slot: slot.get("slot").get("start")),
navbar=navbar.get_from_page(page="/talks"),
filter=["talk", "light talk"])
# ------------------------------------------------------------------------------
# -- Main
# ------------------------------------------------------------------------------
if __name__ == '__main__':
app.run(host='127.0.0.1', port=5000, debug=True)

View File

@ -1,15 +0,0 @@
import requests
import logging
class Backend:
def __init__(self, url, apiprefix, apikey):
self.url = url
self.apiprefix = apiprefix
self.apikey = apikey
self.session = requests.Session()
def get(self, endpoint, params=None):
url = f"{self.url}/{self.apiprefix}/{endpoint}"
headers = {"Authorization": f"Token {self.apikey}",
"Accept": "application/json"}
return self.session.get(url, params=params, headers=headers)

View File

@ -1,6 +0,0 @@
class Navbar:
def __init__(self, config):
self.config = config
def get_from_page(self, page):
return [item for item in self.config["items"] if item["url"] != page]

View File

@ -1,6 +0,0 @@
class Schedule:
def __init__(self):
self.slots = list()
def set_slots(self, slots):
self.slots = slots

View File

@ -1,49 +0,0 @@
@font-face {
font-family: pfdintextcomppromedium;
src: url(../fonts/PFDinTextCompPro-Medium.ttf);
}
@font-face {
font-family: pfdintextcompprothin;
src: url(../fonts/PFDinTextCompPro-Thin.ttf);
}
:root {
--main-bg-color: #e6007e;
--alt-bg-color: #E59730;
--alt2-bg-color: #9EBF43;
--alt3-bg-color: #3096E5;
--main-color: #ffffff;
--alt-main-color: #1A000D;
}
.white {
color: var(--main-color);
}
.black {
color: var(--alt-main-color);
}
.thin {
font-family: pfdintextcompprothin;
}
.bold {
font-family: pfdintextcomppromedium;
}
.bg1 {
background-color: var(--alt-bg-color);
border-color: var(--alt-bg-color);
}
.bg2 {
background-color: var(--alt2-bg-color);
border-color: var(--alt2-bg-color);
}
.bg3 {
background-color: var(--alt3-bg-color);
border-color: var(--alt3-bg-color);
}

View File

@ -1,115 +0,0 @@
@media screen and (min-width: 45em) {
.header {
display: flex;
flex-direction: row;
justify-content: center;
gap: 0;
text-align: center;
font-size: 9.75em;
font-weight: bold;
padding: 0;
}
.logo {
width: inherit;
}
.header > span {
margin: 0;
}
.subheader {
margin: -1em 0 0 0;
font-size: 3.47em;
}
.place {
margin: 0;
font-size: 2.145em;
}
.important {
font-family: pfdintextcomppromedium;
}
.left {
float: left;
margin-right: 0.5em;
}
.right {
float: right;
margin-left: 0.5em;
}
.logo_partner {
max-width: 250px;
max-height: 250px;
margin: 1em;
}
.button {
font-size: 2.5em;
transition-property: color;
transition-duration: 1s;
}
.button:hover {
color: var(--main-color);
cursor: pointer;
}
.goodies, .food {
text-align: justify;
}
.goodies_pic, .food_pic {
max-width: 7em;
}
}
@media screen and (max-width: 44em) {
.header {
display: flex;
flex-direction: row;
justify-content: center;
gap: 0;
text-align: center;
font-size: 6.75em;
font-weight: bold;
padding: 0;
}
.header > span {
margin: 0;
}
.logo {
width: inherit;
}
.subheader {
margin: -1em 0 0 0;
font-size: 2.30em;
}
.place {
margin: 0;
font-size: 1.2em;
}
.important {
font-family: pfdintextcomppromedium;
}
.left {
float: left;
margin-right: 0.25em;
}
.right {
float: right;
margin-left: 0.25em;
}
.logo_partner {
max-width: 125px;
max-height: 125px;
margin: 0.25em;
}
.button {
font-size: 1.2em;
transition-property: color;
transition-duration: 1s;
}
.button:hover {
color: var(--main-color);
cursor: pointer;
}
.goodies, .food {
text-align: justify;
}
.goodies_pic, .food_pic {
max-width: 7em;
}
}

View File

@ -1,19 +0,0 @@
a {
font-family: pfdintextcomppromedium;
font-weight: 250;
color: var(--alt-main-color);
transition-property: color;
transition-duration: 1s;
text-decoration: wavy;
}
a:hover {
color: var(--main-color);
cursor: pointer;
text-shadow: -1px -1px 0 var(--alt-main-color), 1px -1px 0 var(--alt-main-color), -1px 1px 0 var(--alt-main-color), 1px 1px 0 var(--alt-main-color);
}
.content > p,
.content > h2 {
margin-top: 1.5em;
}

View File

@ -1,82 +0,0 @@
.slot {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
align-content: center;
margin-bottom: 1em;
width: 20em;
}
.slot_header {
margin: 0;
width: 20em;
font-family: pfdintextcompprothin;
font-weight: bold;
}
.slot_title {
border-radius: 1em 0 0 0;
color: var(--main-color);
padding: 0.5em;
text-align: center;
display: flex;
flex-direction: row;
justify-content: flex-start;
align-content: flex-start;
align-items: flex-start;
width: 20em;
cursor: pointer;
}
.slot_title .title{
margin-left: 0.5em;
}
.slot_info {
background-color: var(--main-color);
color: var(--alt-main-color);
margin: 0;
padding: 0.5em;
display: flex;
flex-direction: column;
justify-content: flex-start;
align-content: flex-start;
align-items: flex-start;
border-radius: 0 0 0 1em;
}
.speaker {
cursor: pointer;
}
.speakers > .speaker > .name > span {
text-decoration: underline;
}
.speaker_details,
.slot_details {
visibility: hidden;
display: none;
}
.speaker_img,
.slot_img {
width: 18em;
}
.abstract a,
.speaker_biography a {
color: var(--main-bg-color);
}
.abstract a:hover,
.speaker_biography a:hover {
color: var(--alt-color);
text-shadow: -1px -1px 0 var(--main-bg-color), 1px -1px 0 var(--main-bg-color), -1px 1px 0 var(--main-bg-color), 1px 1px 0 var(--main-bg-color);
}
.abstract strong,
.speaker_biography strong {
font-family: pfdintextcomppromedium;
}

View File

@ -1,15 +0,0 @@
* {
box-sizing: border-box;
}
body {
background-color: var(--main-bg-color);
font-family: pfdintextcomppromedium;
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
align-content: center;
text-align: center;
/* background-color: yellow; */
}

View File

@ -1,57 +0,0 @@
.tooltip,
.slot_tooltip {
position: relative;
display: inline-block;
}
.tooltip .tooltiptext {
visibility: hidden;
background-color: var(--alt-main-color);
color: var(--main-color);
text-align: center;
border-radius: 6px;
padding: 5px 0;
position: absolute;
z-index: 1;
bottom: 0;
left: 0;
opacity: 0;
transform: translateX(-25%) translateY(-2em);
transition: opacity 1s;
}
.slot_tooltip .slot_tooltiptext {
visibility: hidden;
background-color: var(--main-color);
color: var(--alt-main-color);
text-align: center;
border-radius: 6px;
padding: 5px 0;
position: absolute;
z-index: 1;
bottom: 0;
left: 0;
opacity: 0;
transform: translateX(2em);
transition: opacity 1s;
}
.tooltip .tooltiptext::after,
.slot_tooltip .slot_tooltiptext::after {
content: "";
position: absolute;
top: 100%;
left: 50%;
margin-left: -5px;
border-width: 5px;
}
.tooltip:hover .tooltiptext,
.slot_tooltip:hover .slot_tooltiptext {
visibility: visible;
opacity: 1;
font-size: 0.7em;
padding: 0.2em;
}

View File

@ -1,72 +0,0 @@
@media screen and (min-width: 45em) {
.wemakeporn {
background-color: #FFD036;
color: #000000;
font-family: Arial, Helvetica, sans-serif;
border-radius: 1em;
border-width: 1em;
border-style: solid;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
align-content: center;
padding: 0.5em;
transform: rotate(-20deg) translate(2em, -6em);
visibility: hidden;
position: fixed;
}
.wemakeporn:hover{
cursor: default;
}
.wemake {
font-size: 7em;
font-weight: bold;
flex-direction: row;
justify-content: center;
align-items: center;
align-content: center;
}
.porn {
font-size: 12em;
font-weight: bold;
flex-direction: row;
justify-content: center;
align-items: center;
align-content: center;
}
}
@media screen and (max-width: 44em) {
.wemakeporn {
background-color: #FFD036;
color: #000000;
font-family: Arial, Helvetica, sans-serif;
border-radius: 0.5em;
border-width: 0.5em;
border-style: solid;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
align-content: center;
padding: 0.5em;
transform: rotate(-20deg) translate(-1.5em, 8em);
visibility: hidden;
position: fixed;
}
.wemakeporn:hover{
cursor: default;
}
.wemake {
font-size: 3.5em;
font-weight: bold;
}
.porn {
font-size: 6em;
font-weight: bold;
}
}

View File

@ -1,125 +0,0 @@
@media screen and (min-width: 45em) {
.page_wrapper {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
align-content: center;
text-align: center;
padding-bottom: 5em;
/* background-color: green; */
}
.center_wrapper,
.header_wrapper {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
text-align: center;
}
.logo_wrapper {
margin: 1em 0 1em 0;
width: 40em;
}
.navbar_wrapper {
position: fixed;
bottom: 0;
padding: 1em 0;
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
gap: 1.4em;
background-color: var(--main-bg-color);
width: 40em;
transform: translateZ(2);
}
.content {
font-size: 2em;
font-family: pfdintextcompprothin;
color: var(--main-color);
width: 20em;
text-align:justify;
text-justify: inter-word;
}
.partners {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
text-align: center;
margin-bottom: 2em;
}
.subpartners {
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
text-align: center;
}
}
@media screen and (max-width: 44em) {
.page_wrapper {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
align-content: center;
text-align: center;
padding-bottom: 2em;
width: 21em;
/* background-color: green; */
}
.center_wrapper ,
.header_wrapper {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
text-align: center;
width: 21em;
/* background-color: orangered; */
}
.logo_wrapper {
margin-top: 0.5em;
width: 21em;
/* background-color: red; */
}
.navbar_wrapper {
position: fixed;
bottom: 0;
padding: 0.5em 0;
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
gap: 1em;
background-color: var(--main-bg-color);
width: 21em;
transform: translateZ(2);
/* background-color: white; */
}
.content {
font-size: 1em;
font-family: pfdintextcompprothin;
color: var(--main-color);
width: 21em;
text-align:justify;
text-justify: inter-word;
}
.partners {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
text-align: center;
margin-bottom: 2em;
}
.subpartners {
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
text-align: center;
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 77 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 110 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 207 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

View File

@ -1,14 +0,0 @@
function switch_visibility(item){
console.log(item.style.visibility);
console.log(item.style.display);
if (item.style.visibility == "hidden" || item.style.display == "none") {
item.style.visibility = "visible";
item.style.display = "block";
} else if (item.style.visibility == "" && item.style.display == "") {
item.style.visibility = "visible";
item.style.display = "block";
} else {
item.style.visibility = "hidden";
item.style.display = "none";
}
}

View File

@ -1,107 +0,0 @@
<!DOCTYPE html>
<html lang='zxx'>
<head>
<title>THSF 2023: S/Extraire</title>
<meta name="viewport" content="initial-scale=1.0">
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<script src="{{ url_for('static', filename='scripts/thsf23.js') }}"></script>
<link rel="stylesheet"
href="{{ url_for('static', filename='css/colors.css') }}">
<link rel="stylesheet"
href="{{ url_for('static', filename='css/wemakeporn.css') }}">
<link rel="stylesheet"
href="{{ url_for('static', filename='css/wrappers.css') }}">
<link rel="stylesheet"
href="{{ url_for('static', filename='css/custom.css') }}">
<link rel="stylesheet"
href="{{ url_for('static', filename='css/elements.css') }}">
<link rel="stylesheet"
href="{{ url_for('static', filename='css/style.css') }}">
<link rel="stylesheet"
href="{{ url_for('static', filename='css/tooltip.css') }}">
<link rel="stylesheet"
href="{{ url_for('static', filename='css/slot.css') }}">
<link rel="icon"
type="image/svg+xml"
href="{{ url_for('static', filename='images/logo.svg') }}">
<link rel="stylesheet"
href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
{% block headers %}
{% endblock %}
</head>
<body>
<div class="page_wrapper">
<div class="center_wrapper">
<div class="header_wrapper">
<div class="header">
<span class="black bold">THSF</span>
<span class="white thin">2023</span>
</div>
<div class="subheader">
<span class="white thin">Toulouse Hacker Space Factory</span>
</div>
<div class="place">
<span class="black thin">26 28 mai 2023 - </span>
<span class="white bold">CINÉMA UTOPIA BORDEROUGE</span>
</div>
</div>
{% block content %}
{% endblock %}
<div class="partners">
<div class="subpartners">
<a href="https://www.tetalab.org/" target="_new">
<img src="{{ url_for('static', filename='images/tetalab.png')}}"
alt="Tetalab"
title="Tetalab"
class="logo_partner">
</a>
<a href="https://www.librairie-terranova.fr/" target="_new">
<img src="{{ url_for('static', filename='images/terranova.jpg')}}"
alt="Librairie Terra Nova"
title="Librairie Terra Nova"
class="logo_partner">
</a>
</div>
<div class="subpartners">
<a href="https://www.tvbruits.org/" target="_new">
<img src="{{ url_for('static', filename='images/tv-bruits.png')}}"
alt="TV Bruits"
title="TV Bruits"
class="logo_partner">
</a>
<a href="https://www.tetaneutral.net/" target="_new">
<img src="{{ url_for('static', filename='images/tetaneutral.png')}}"
alt="Tetaneutral"
title="Tetaneutral"
class="logo_partner">
</a>
<a href="https://www.radio-fmr.net/" target="_new">
<img src="{{ url_for('static', filename='images/fmr.png')}}"
alt="Radio FMR"
title="Radio FMR"
class="logo_partner">
</a>
</div>
<div class="subpartners">
<a href="https://clutchmag.fr/" target="_new">
<img src="{{ url_for('static', filename='images/clutch.png')}}"
alt="Clutch"
title="Clutch"
class="logo_partner">
</a>
<a href="https://www.antistatik.store/" target="_new">
<img src="{{ url_for('static', filename='images/antistatik.png')}}"
alt="Antistatik"
title="Antistatik"
class="logo_partner">
</a>
</div>
</div>
{% block navbar %}
{% include "navbar.html" %}
{% endblock %}
</div>
</div>
</body>
</html>

View File

@ -1,40 +0,0 @@
{% extends "base.html" %}
{% block content %}
<div class="logo_wrapper">
<img class="logo"
src="{{ url_for('static', filename='images/logo.svg') }}"
alt="THSF 2023 - S/Extraire"
title="THSF 2023 - S/Extraire">
</div>
<div class="content">
<h2>Gastronomie régionale et artisanat</h2>
<p class="food">
<img class="left food_pic"
src="{{url_for('static', filename='images/fourmidable01.png')}}"
alt="Fourmidable!"
title="Fourmidable!">
Depuis 2020, l'association toulousaine <strong>Fourmidable!</strong>, œuvre pour promouvoir la gastronomie régionale et l'artisanat local. Cette initiative collective et solidaire s'est donnée pour mission de valoriser les produits locaux, de qualité et à petits prix.
</p>
<p class="food">
<img class="right food_pic"
src="{{url_for('static', filename='images/fourmidable02.png')}}"
alt="Fourmidable!"
title="Fourmidable!">
En mai 2022, <strong>Fourmidable!</strong> inaugure une cuisine associative au sein de <a href="https://www.terresderencontres.fr/restofourmidable">l'espace Terres de Rencontres</a>. Une occasion pour les gourmands de découvrir une cuisine de qualité, élaborée avec des produits locaux et de saison.
</p>
<p class="food">
<img class="left food_pic"
src="{{url_for('static', filename='images/fourmidable03.png')}}"
alt="Fourmidable!"
title="Fourmidable!">
Au menu, des plats du jour, des flammekueche, des sandwichs, des desserts, des boissons fermentées et bien d'autres délices. Pour <strong>Fourmidable!</strong>, il est essentiel de proposer des plats savoureux et sains, tout en préservant l'environnement et le circuit court. Les aliments sont donc rigoureusement sélectionnés auprès des producteurs locaux pour une cuisine éthique et responsable.
</p>
<p class="food">
<img class="right food_pic"
src="{{url_for('static', filename='images/fourmidable04.png')}}"
alt="Fourmidable!"
title="Fourmidable!">
La cuisine associative de <strong>Fourmidable!</strong> est une invitation à découvrir la richesse de la gastronomie régionale, à travers des produits locaux et de qualité mais est également un lieu d'ateliers ouverts à tous. Les amateurs de cuisine pourront apprendre à faire du pain au levain, de la pâte à pizza, brasser de la bière, du kombucha, du kéfir, etc. <strong>Fourmidable!</strong> encourage ainsi la transmission des savoir-faire culinaires et artisanaux, dans une ambiance conviviale et solidaire.
</p>
</div>
{% endblock %}

View File

@ -1,33 +0,0 @@
{% extends "base.html" %}
{% block content %}
<div class="logo_wrapper">
<img class="logo"
src="{{ url_for('static', filename='images/logo.svg') }}"
alt="THSF 2023 - S/Extraire"
title="THSF 2023 - S/Extraire">
</div>
<div class="content" class="goodies">
<h2>Nous avons besoin de votre soutien</h2>
<p class="goodies">
<img class="left goodies_pic"
src="{{ url_for('static', filename='images/stickers.webp') }}"
alt="Stickers"
title="Stickers">
Pour faire du <strong>Toulouse Hacker Space Factory</strong> un événement toujours différent des autres festivals <a href="https://www.leetchi.com/c/thsf23" target="_new">votre soutien financier</a> est nécessaire.
</p>
<p class="goodies">
<img class="right goodies_pic"
src="{{ url_for('static', filename='images/tshirt.webp') }}"
alt="T-Shirt"
title="T-Shirt">
Pour faciliter la collecte des dons et vous remercier de votre participation, nous avons mis en place <a href="https://www.leetchi.com/c/thsf23" target="_new">une cagnote Leetchi</a> qui nous permettra de recenser les dons et vous permettra de suivre l'évolution du financement de notre festival.
</p>
<p class="goodies">
<img class="left goodies_pic"
src="{{ url_for('static', filename='images/sweatshirt.webp') }}"
alt="Sweat shirt"
title="Sweat shirt">
Nous sommes également conscients que la situation actuelle est particulièrement difficile. C'est pourquoi nous nous engageons à ce que <span class="important">toutes les sommes qui dépasseront notre objectif de financement de 2 000 € seront reversées aux caisses des grévistes de la réforme des retraites</span>. Ainsi, votre contribution permettra également de soutenir une cause importante et de <span class="important">faire une différence dans la vie de ceux qui se battent pour nos droits</span>.
</p>
</div>
{% endblock %}

View File

@ -1,29 +0,0 @@
{% extends "base.html" %}
{% block content %}
<div class="logo_wrapper">
<img class="logo"
src="{{ url_for('static', filename='images/logo.svg') }}"
alt="THSF 2023 - S/Extraire"
title="THSF 2023 - S/Extraire"
onclick="document.getElementById('wemakeporn').style.visibility='visible';">
<div id="wemakeporn" class="wemakeporn"
onclick="document.getElementById('wemakeporn').style.visibility='hidden';">
<div class="wemake">WE MAKE</div>
<div class="porn">PORN</div>
</div>
</div>
<div class="content">
<h2>Le THSF est enfin de retour !</h2>
<p>Nous vous invitons à passer un week-end de 3 jours à <a href="https://www.cinemas-utopia.org/toulouse/" target="_new">Utopia Borderouge Toulouse</a> pour partager avec vous nos projets, nos réflexions, nos performances, nos poésies et nos doutes sur la technologie.</p>
<p>Après avoir été soutenu et accueilli pendant 10 ans par <a href="https://vive.mixart-myrys.org/" target="_new">Mix'Art Myrys</a>, le <strong>Toulouse HackerSpace Factory</strong> se tient désormais dans un autre lieu où l'utopie nécessaire est inscrite au programme.</p>
<p>Cette année nous mettons en avant des réflexions sur <a href="https://fr.wikipedia.org/wiki/Extractivisme" target="_new">l'extractivisme des ressources</a> planétaires, des données et du produit du travail.</p>
<p>Comme toujours, notre objectif est de créer un festival qui poétise les bifurcations de nos idées communes et qui réinvente le sens de certains schémas imposés par notre époque. Rejoignez-nous pour une expérience enrichissante et pleine de surprises !</p>
<p>Retrouvez <a href="/planning">le programme du THSF</a> avec ses <a href="/workshops">ateliers</a>, ses <a href="/exhibitions">expositions et installations</a> mais également ses <a href="/concerts">concerts</a>, ses <a href="/projections">projections</a>, ses <a href="/talks">présentations</a> et ses <a href="/discussions">tables rondes</a>.</p>
<p>Accéder aux conférences, tables rondes et reportages grâce à nos amis de TVBruits: <a href="https://tvbruits.org/spip.php?mot87">https://tvbruits.org/spip.php?mot87</a>
</p>
</div>
{% endblock %}

View File

@ -1,8 +0,0 @@
<div class="navbar_wrapper">
{% for item in navbar %}
<i class="button tooltip black {{ item.classes }}"
onclick="document.location='{{item.url}}'">
<span class="tooltiptext thin">{{item.name}}</span>
</i>
{% endfor %}
</div>

View File

@ -1,34 +0,0 @@
{% extends "base.html" %}
{% block content %}
<div class="logo_wrapper">
<img class="logo"
src="{{ url_for('static', filename='images/logo.svg') }}"
alt="THSF 2023 - S/Extraire"
title="THSF 2023 - S/Extraire"
onclick="document.getElementById('wemakeporn').style.visibility='visible';">
<div id="wemakeporn" class="wemakeporn"
onclick="document.getElementById('wemakeporn').style.visibility='hidden';">
<div class="wemake">WE MAKE</div>
<div class="porn">PORN</div>
</div>
</div>
<div class="content">
<h2>Toujours plus d'utopies</h2>
<p>
La fermeture administrative imposée à <a href="https://vive.mixart-myrys.org/" target="_new">Mix'Art Myrys</a>, terre d'accueil des 10 éditions antérieures du THSF, nous montre qu'il est plus que jamais important de continuer à bâtir, consolider et faire vivre nos utopies face à la repression systémique qu'on voudrait nous imposer.
</p>
<p>
Connu pour sa programmation alternative et engagée, ainsi que pour son ambiance conviviale et chaleureuse, le cinéma d'art et d'essai indépendant <a href="https://www.cinemas-utopia.org/toulouse/">Utopia Borderouge</a>, dont l'utopie est naturellement au programme, s'est proposé pour accueillir le <strong>THSF 2023</strong>.
</p>
<h3>Plan d'accès</h3>
<ul>
<li><strong>Adresse:</strong> 59, avenue Maurice Bourgès-Maunoury, Les Izards - Toulouse</li>
<li><strong>GPS:</strong> 43°38'22.7"N 1°27'07.3"E</li>
<li><strong>Métro:</strong> Ligne B - Borderouge</li>
<li><strong>Velooz:</strong> Station 175 - Métro Borderouge - Maunoury</li>
</ul>
<div class="map">
<iframe width="425" height="350" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="https://www.openstreetmap.org/export/embed.html?bbox=1.4502596855163576%2C43.63879667815726%2C1.4538002014160158%2C43.64046408342326&amp;layer=mapnik&amp;marker=43.639631357124614%2C1.4520299434661865" style="border: 1px solid black"></iframe><br/><small><a href="https://www.openstreetmap.org/?mlat=43.63963&amp;mlon=1.45203#map=19/43.63963/1.45203">Afficher une carte plus grande</a></small>
</div>
</div>
{% endblock %}

View File

@ -1,17 +0,0 @@
{% extends "base.html" %}
{% block content %}
<div class="content">
<p>Accéder aux conférences, tables rondes et reportages grâce à nos amis de TVBruits: <a href="https://tvbruits.org/spip.php?mot87">https://tvbruits.org/spip.php?mot87</a>
</p>
{% for slot in slots %}
{% set loop_index = loop.index %}
{% if filter %}
{% if slot.submission_type.en | lower in filter %}
{% include "slot.html" %}
{% endif %}
{% else %}
{% include "slot.html" %}
{% endif %}
{% endfor %}
</div>
{% endblock %}

View File

@ -1,64 +0,0 @@
<div class="slot">
<div class="slot_header">
<div class="slot_title {{ slot.slot.start | date2dayclass}}"
onclick="switch_visibility(document.getElementById('{{slot.code}}_{{loop_index}}'))">
<i class="black {{slot.submission_type.fr | toicon }}"></i>
<span class="title">{{slot.title}}</span>
</div>
<div class="slot_info">
{% if slot.slot.room.fr != "Workshops" %}
<div class="start">
<i class="fa-solid fa-caret-right"></i>
{{slot.slot.start | date2dmyhm}} - {{slot.duration}} minutes ({{slot.content_locale | capitalize}})
</div>
<div class="room">
<i class="fa-solid fa-caret-right"></i>
{{slot.slot.room.fr}}
</div>
{% endif %}
<div class="speakers">
{% for speaker in slot.speakers %}
<div class="speaker">
<div class="name" onclick="switch_visibility(document.getElementById('{{speaker.code}}_{{loop_index}}'))">
<i class="fa-solid fa-user"></i>
<span>{{speaker.name | title}}</span>
</div>
{% if speaker.avatar or speaker.biography %}
<div id="{{speaker.code}}_{{loop_index}}" class="speaker_details">
{% if speaker.avatar %}
<div class="speaker_avatar">
<img class="speaker_img"
src="{{speaker.avatar}}"
alt="{{speaker.name | title}}"
title="{{speaker.name | title}}">
</div>
{% endif %}
{% if speaker.biography %}
<div class="speaker_biography">
{{ speaker.biography | safe }}
</div>
{% endif %}
</div>
{% endif %}
</div>
{% endfor %}
</div>
<div id="{{slot.code}}_{{loop_index}}" class="slot_details">
<div class="abstract">
{% if slot.image %}
<img class="slot_img"
src="{{slot.image}}"
alt="{{slot.name}}"
title="{{slot.name}}">
{% endif %}
{% if slot.abstract %}
<p>{{slot.abstract | safe }}</p>
{% endif %}
{% if slot.description %}
<p>{{slot.description | safe }}</p>
{% endif %}
</div>
</div>
</div>
</div>
</div>

View File

@ -1,5 +0,0 @@
from thsf import app
if __name__ == "__main__":
application = app
application.run(host="127.0.0.1", port=8043)

139
styles/main.css Normal file
View File

@ -0,0 +1,139 @@
@font-face {
font-family: pfdintextcomppro;
src: url(../fonts/PFDinTextCompPro-Medium.ttf);
}
* {
margin: 0;
padding: 0;
box-sizing: border-box;
font-family: pfdintextcomppro;
}
body {
background-color: #e6007e;
background-image: url('../images/affiche_v1.png');
background-repeat: no-repeat;
background-size: auto;
background-position-x: center;
overflow: hidden;
}
ul {
overflow: hidden;
perspective: 900px;
list-style: none;
height: 100vh;
max-height: 800px;
min-height: 400px;
text-align: center;
}
@keyframes width-sway {
0%, 100% {
width: 500px;
}
50% {
width: 100%;
}
}
li {
position: absolute;
top: 0;
margin: auto;
width: 100%;
transform: translateY(100vh);
font-size: 6rem;
font-family: pfdintextcomppro;
font-weight: bold;
color: #ffffdd;
animation: 5.3333333333s spiral-staircase linear infinite;
white-space: nowrap;
}
li:nth-child(1) {
animation-delay: 0.3333333333s;
}
li:nth-child(2) {
animation-delay: 0.6666666667s;
}
li:nth-child(3) {
animation-delay: 1s;
}
li:nth-child(4) {
animation-delay: 1.3333333333s;
}
li:nth-child(5) {
animation-delay: 1.6666666667s;
}
li:nth-child(6) {
animation-delay: 2s;
}
li:nth-child(7) {
animation-delay: 2.3333333333s;
}
li:nth-child(8) {
animation-delay: 2.6666666667s;
}
li:nth-child(9) {
animation-delay: 3s;
}
li:nth-child(10) {
animation-delay: 3.3333333333s;
}
li:nth-child(11) {
animation-delay: 3.6666666667s;
}
li:nth-child(12) {
animation-delay: 4s;
}
li:nth-child(13) {
animation-delay: 4.3333333333s;
}
li:nth-child(14) {
animation-delay: 4.6666666667s;
}
li:nth-child(15) {
animation-delay: 5s;
}
li:nth-child(16) {
animation-delay: 5.3333333333s;
}
@keyframes spiral-staircase {
0% {
transform: rotateY(90deg) translateY(105vh) rotate(0deg) scale(0);
opacity: 0;
}
40% {
transform: rotateY(90deg) translateY(61vh) rotate(0deg) scale(0);
opacity: 0;
}
50% {
transform: rotateY(0deg) translateY(55vh) rotate(0deg) scale(0.50);
opacity: 1;
}
75% {
transform: rotateY(-60deg) translateY(27.5vh) rotate(0deg) scale(1);
opacity: 1;
}
100% {
transform: rotateY(-90deg) translateY(-5vh) rotate(0deg) scale(1.2);
opacity: 0;
}
}

View File

@ -1,15 +0,0 @@
ARG PRETALX_HOSTS_ENTRY
FROM python:3.9.16-bullseye as thsf_base
RUN apt-get update -y && \
apt-get install -y bash make python3-pip && \
useradd -m -d /home/thsf -s /bin/bash thsf
from thsf_base as thsf_build
COPY . /home/thsf/
RUN chown -R thsf:thsf /home/thsf/
USER thsf
WORKDIR /home/thsf/
from thsf_build
RUN make install
CMD ["make", "run"]

View File

@ -1,8 +0,0 @@
{
"folders": [
{
"path": "."
}
],
"settings": {}
}