• il y a 8 mois
FRnOG 39 - Jean-Baptiste Kempf : Le projet Kyber
Transcription
00:00 Bonjour tout le monde, aujourd'hui on va parler un peu d'un de mes nouveaux projets qui s'appelle Kyber
00:07 et on va parler de basse latence. Alors pour ceux qui ne me connaissent pas, je m'appelle Jean-Baptiste Kempf,
00:12 il faut m'appeler JB, ça fait 17 ans, 18 ans que je fais du VLC,
00:16 j'ai créé l'association Videolan, qui est une association qui fait que de l'open source,
00:21 je suis actif dans VLC, FFmpeg, x264 et tout ça, enfin plein d'autres choses comme ça.
00:25 Et au cours de ma vie en fait j'ai fait
00:29 de la tech due diligence pour des VCs, je sais, tout le monde n'est pas parfait, on a vu des VCs juste avant,
00:35 et en fait je me suis retrouvé avec ça, je me suis retrouvé CTO de Shadow.
00:39 Shadow c'était, c'est encore, mais je suis désolé, c'était une boîte qui faisait du cloud desktop
00:45 et
00:49 j'ai été CTO et j'ai adoré les gens qu'il y avait là-bas, j'ai adoré la tech, bon malheureusement
00:53 ils ont raté une levée de fonds et donc c'est parti au tribunal de commerce
00:57 et avec un groupe de 5 code GUS,
00:59 on a essayé de racheter la boîte et on s'est planté.
01:03 Alors c'est pas le sujet d'aujourd'hui mais en fait c'est la raison pour laquelle je parle aujourd'hui de Kyber.
01:08 On va parler de basse latence
01:10 et dans la vidéo il faut savoir que quand les gens ils parlent de basse latence, ils parlent de 10 secondes.
01:17 Alors ça fait un peu bizarre mais en fait c'est parce que
01:21 tout ce qu'ils essayent de passer par des CDN, et CDN c'est lent,
01:25 et donc en fait tout ce qui est OTT, c'était on était sur de l'ordre de 60 secondes,
01:29 après on a fait de la basse latence, c'est 10 secondes, après on est dans la ultra basse latence, c'est de l'ordre de la seconde,
01:34 de fait c'est 5 secondes,
01:36 et puis ça suffit pas, donc en fait on est descendu vers
01:39 de la très très très basse latence, c'est à dire WebRTC, c'est à dire ce que vous faites habituellement, du zoom, du WebEx et
01:45 autres choses absolument horribles.
01:47 Toutes ces trucs là comme du SRT, l'objectif c'est d'être à peu près dans l'ordre de 100 millisecondes, 200 millisecondes, c'est l'ordre de grandeur,
01:53 mais que ce soit stable. Et moi ma question c'est comment on fait pour aller en dessous de l'hyper ultra basse latence,
01:58 enfin bref, comment est ce qu'on descend plus bas ? Alors la question vous allez me dire "bon je m'en fous, il n'y en a pas besoin d'aller plus bas".
02:04 Si, il y a plein de cas d'usage où en fait au lieu de parler à des humains,
02:09 on parle à des robots ou des machines quoi,
02:12 donc c'est du cloud desktop, du cloud gaming, du VDI, tous les trucs géniaux comme Citrix,
02:18 autres VMware et autres choses absolument adorables qu'on adore déployer.
02:23 Mais aussi tout ce qui est contrôle de drone, contrôle de robot,
02:27 chirurgico,
02:29 industriel, tous les cas où on fait de la supervision, c'est à dire que en fait il y a un fournisseur très très gentil qui vous a donné
02:35 une super grosse boîte, vous n'avez pas le droit d'y toucher, vous avez le droit de juste plugger un écran,
02:38 en fait ce serait quand même cool de mettre un truc entre l'écran et la boîte, comme ça vous n'êtes pas obligés d'être devant l'écran pour
02:43 regarder ce qu'il se passe,
02:44 etc etc. Et dans tous ces cas là,
02:46 ils ont l'air différents mais en fait c'est la même chose, on a besoin de contrôler une machine à distance qui est plus rapide qu'un
02:51 humain.
02:52 Je sais qu'il y a certains d'entre vous qui sont plus proches des robots que des humains mais quand même globalement on est vraiment dans
02:56 quelque chose de très très bas et tout ça ça fonctionne de la même façon, on a besoin d'un flux vidéo
03:01 extrêmement basse latence et un flux bidirectionnel pour les contrôles.
03:05 Ok ? Bah c'est ça Kyber.
03:08 Kyber c'est un SDK
03:10 open source qui permet de faire du contrôle de machine à distance.
03:13 C'est à la fois un client, un serveur, une stack réseau, on est quand même là pour parler réseau,
03:17 ça fait de la vidéo, de l'audio, des sous titres
03:20 et ça permet d'avoir du contrôle
03:23 des I/O bidirectionnels. Tout ça c'est
03:27 un SDK, c'est cross-plateforme mais surtout tout ça c'est basé sur Quick, c'est à dire que l'idée c'est de ne pas utiliser cette
03:34 abomination qui est WebRTC pour ceux qui en ont déjà fait
03:40 et d'aller réussir à utiliser quelque chose de simple et de fonctionnel. Alors c'est marrant parce que
03:45 c'est basé sur VLC FFmpeg, sinon je serais pas là, et donc c'est multi plateforme donc ça marche, le client il marche sous
03:51 Windows, Linux, Mac, Android, iOS, Apple TV, Chromebook,
03:55 j'imagine un jour BOS parce que VLC ça marche sur BOS,
03:58 et il y a aussi, c'est vrai, une version Web.
04:03 Mais le serveur en fait c'est FFmpeg donc même chose,
04:07 il y a plein de plateformes pour le serveur et ça c'est déjà un peu plus rare parce que par exemple
04:11 Parsec, Shadow ou d'autres choses ne fonctionnent pas sur tous les serveurs. Là le serveur ça peut être évidemment Windows, Linux et Linux, Wayland,
04:18 Mac mais aussi Android ou iOS.
04:21 C'est agnostique du type de codec puisque grosso modo tout le travail sur le décodeur et l'encodeur il est déjà fait donc on
04:27 supporte AV1, VP9, HEVC,
04:29 passer d'un codec à l'autre, enfin je me souviens quand on était chez Shadow, quand il a fallu passer en FLAC, il a fallu six mois de développement
04:36 dans Kyber, ça a pris à peu près deux heures.
04:38 Et c'est logique parce que ce qu'on fait c'est qu'on réutilise
04:41 tout ce qui est déjà fait.
04:44 Alors une petite démo
04:46 qui j'espère ne va pas trop merder.
04:48 Ce que vous voyez là en fait c'est
04:50 une démo assez simple en fait à droite il y a le serveur, à gauche il y a le client qui est grosso modo VLC en
04:56 plein écran.
04:58 C'est le même écran, c'est la même machine parce que sinon c'est triché et en fait on demande, on fait venir les gens pour voir
05:03 s'ils sont capables de faire la différence.
05:05 La réponse en général c'est non, les gens ne font pas la différence. Les seuls gens qui sont capables de voir la différence
05:11 c'est pas des robots mais c'est en fait des gens qui connaissent en encodage vidéo et qui sont capables de voir les artefacts
05:17 qui sont assez faciles. Donc là vous avez vu c'est la même chose mais c'est sous Mac, il y a un Mac mini.
05:22 Donc c'est CSGO, donc CS c'est quand même un, on a vraiment besoin de basse latence.
05:27 La version Linux parce que quand même, enfin la version Debian parce que c'est quand même le seul OS qui vaut quelque chose.
05:33 Avec Elden Ring,
05:35 voilà une version sur Android, bref vous avez compris quoi, ça fonctionne sur toutes les plateformes
05:42 et ça marche globalement bien.
05:45 Alors,
05:47 c'est une petite démo avec
05:50 le serveur, vous voyez donc là on est sous Windows et on fait tourner un Linux, donc le serveur Linux ça marche aussi.
05:55 Alors voilà, bon tout ça c'était rigolo mais en vrai comment ça marche parce que c'est comme ça, c'est comme ça,
06:01 c'est quand même ça qui est intéressant, c'est comment ça marche. Et alors en fait,
06:03 du seconde je garde le temps, c'est bon.
06:06 Vous avez à gauche, grosso modo le serveur, à droite le client,
06:09 jusque là ça va. La brique verte en fait, le serveur vidéo,
06:13 c'est un FFmpeg, alors en fait c'est pas vraiment un FFmpeg, c'est qu'on va directement taper en dessous.
06:18 Ce qu'on fait c'est qu'en fait on a construit un serveur temps réel au dessus de
06:22 FFmpeg qui fait à peu près ce que fait Gstreamer ou VLC, c'est à dire qui construit un graphe orienté
06:28 à la volée et qui est un compositeur vidéo mais orienté GPU.
06:31 Et de l'autre côté c'est un VLC.
06:33 Alors qu'est ce qu'on a fait pour que ça fonctionne ?
06:35 En fait on a détruit tout ce qu'on a fait depuis 20 ans,
06:37 c'est à dire qu'on n'essaye plus de synchroniser l'audio et la vidéo et les sous-titres.
06:41 Puisque en fait le but c'est vraiment d'être en mode push.
06:44 C'est à dire que dès qu'une frame elle est prête on l'envoie aux notes d'après et on l'envoie aux notes d'après et aux notes d'après.
06:49 Alors qu'en fait on passe notre temps dans VLC et en FFmpeg à faire des buffers partout pour être sûr d'être synchronisé.
06:54 Là en fait, ben on a un VLC,
06:56 on est sûr d'être synchronisé, là en fait, ben non.
06:59 Basse latence, ça veut dire basse latence.
07:01 Donc vous avez un serveur à gauche qui envoie la vidéo,
07:05 un serveur, un lecteur à droite qui est VLC,
07:07 qu'on a les patchs sur VLC pour vous donner une idée c'est 2500 lignes de code quoi.
07:12 De patch c'est quand même pas un changement monstrueux.
07:14 On a un serveur d'input qui est en rust
07:18 et de l'autre côté un client d'input qui est toujours en rust.
07:22 Et en fait, les inputs c'est quasiment toujours bidirectionnel à part le clavier.
07:27 Donc même la souris vous savez c'est bidirectionnel.
07:30 Et donc en fait le client c'est aussi un serveur.
07:34 Donc en fait c'est la même chose des deux côtés.
07:36 Mais surtout ce qui nous intéresse, ce qui est le plus intéressant pour vous et pour nous ici,
07:41 c'est la brique qu'on appelle MUX et DEMUX
07:43 qui en fait prend les flux de tous les modules qu'on a à gauche
07:47 et qui les MUX sur une seule socket en QUIC.
07:50 Et donc en fait ce que vous voyez c'est que tout ça est modulaire
07:54 et c'est des process séparés.
07:56 La raison pour laquelle c'est des process séparés c'est que
07:58 c'est pour simplifier le développement.
08:00 Shadow ça a été un enfer puisqu'il y avait un seul serveur qui faisait tout
08:03 et donc la moindre modification c'était absolument ingérable.
08:06 Il y a quelque chose d'un petit peu rigolo,
08:09 c'est qu'en fait pour streamer une webcam,
08:11 on fait la même chose à l'envers.
08:13 C'est à dire que vous voyez qu'il y a quand même le serveur vidéo basé sur FFmpeg qui est aussi à droite.
08:17 Et donc au lieu de faire du USB over IP pour la webcam,
08:20 c'est à dire transporter une webcam de plusieurs dizaines de mégabits de secondes
08:23 comme on fait chez Shadow ou fait par Sec,
08:25 là on ré-encode en local pour envoyer
08:27 et donc en fait on a vraiment une architecture qui est complètement symétrique.
08:31 Alors comme j'ai dit, c'est basé sur FFmpeg,
08:35 ça fait de l'overlay, on a tous les types de codecs,
08:38 on supporte les décodeurs et les encodeurs matériels,
08:41 Nvidia, AMD, Intel, enfin vraiment tout quoi,
08:44 on utilise vraiment tout ce qu'on fait de FFmpeg.
08:46 Et ce qui est rigolo, c'est qu'on a un...
08:48 alors je ne sais pas s'il y a encore des Vici dans la salle...
08:50 on a une feature AI.
08:52 [Rires]
08:54 En vrai, ce qu'on a, c'est qu'en vidéo on fait du 4 2 0,
08:58 alors je ne sais pas si ça parle à tout le monde,
09:00 mais grosso modo, ce qui se passe c'est que pour compresser la vidéo,
09:03 on garde la luminosité à la résolution normale
09:07 et les couleurs, on les divise par 4.
09:10 Et en fait en général, ça marche globalement assez bien pour regarder un film,
09:13 parce que tout a été fait comme ça.
09:15 Mais quand vous streamez ce qu'on appelle un screen content,
09:18 c'est-à-dire vraiment un écran,
09:20 quand vous vous affichez en grand, c'est absolument horrible.
09:24 Vous voyez les gros crénelages horribles d'aliasing que tu as en rouge,
09:27 et c'est moche quoi.
09:30 Quand vous faites certains jeux vidéo, ça va,
09:32 quand vous faites de l'Excel, c'est absolument horrible.
09:34 Parce que ce n'est pas une blague,
09:36 un des trucs les plus durs à streamer, c'est Excel.
09:38 [Rires]
09:40 Et je ne vous parle pas du sub-intime de pixels
09:43 sous Windows, FreeType, etc.
09:45 C'est absolument horrible.
09:47 Donc, l'idée c'est de partir en 4.4.4,
09:50 donc de garder toutes les couleurs,
09:53 mais le problème c'est que vos décodeurs matériels,
09:55 ils ne supportent pas le 4.4.4.
09:57 Donc ce qu'on a, c'est en vrai un petit filtre,
10:00 avec un mini réseau de neurones qui est vraiment trivial,
10:02 ce n'est pas de l'IA, mais on va dire que c'est de l'IA,
10:04 qui permet, ou en fait on dit,
10:06 on a une petite information, ou on envoie en disant,
10:08 là je suis en train de streamer Excel,
10:10 là je suis en train de streamer un jeu vidéo,
10:12 là je suis en train de streamer un browser,
10:14 et donc en fait, on fait au niveau du client,
10:16 un petit pixel shader,
10:18 qui permet de corriger certaines aberrations chromatiques.
10:21 Si vous me demandez, je fais plein d'IA.
10:23 L'input, c'est un serveur d'input écrit en Rust,
10:27 from scratch, qui fait aussi un graph orienté,
10:30 en fait la même chose que ce qu'on fait en vidéo,
10:32 qui supporte mouse, keyboard,
10:35 curseur, gamepad, rumble, copy/paste,
10:37 file transfer, USB over IP,
10:39 alors ça c'est très très drôle,
10:41 USB over IP, over stream, over quick, over TLS.
10:45 J'adore l'informatique.
10:48 Evidemment, ce qu'on fait,
10:51 c'est que contrairement à ce que fait Shadow,
10:53 ou ce que font des gens comme Waitop,
10:55 ou des Splice, en fait on ne fait rien dans l'hyperviseur,
10:57 parce qu'on contrôle des machines qui ne sont pas forcément des VM.
11:00 Mais qu'est-ce que ça veut dire ?
11:01 Ça veut dire qu'on est obligé de faire des drivers dans le host,
11:04 donc on a un driver virtuel d'écran,
11:07 de souris, de gamepad, de keyboard,
11:10 on n'a pas vraiment le choix.
11:12 Et comme j'ai dit, que cosplay toi ?
11:13 Alors, le réseau, c'est comme ça dont on veut parler aujourd'hui,
11:16 c'est que le multiplexer est écrit incroyablement en Rust,
11:20 from scratch,
11:23 il est fait pour supporter grosso modo plusieurs protocoles,
11:26 et principalement QUIC et WebTransport,
11:29 sous la torture je vous révélerai que ça supporte aussi WebSocket et RTP,
11:33 principalement à des fins de debug,
11:36 mais évidemment je nierai ça tant que je n'ai pas pris plusieurs bières.
11:39 Dès le début je voulais utiliser QUIC,
11:42 parce qu'il y a plein de fonctionnalités intéressantes dans QUIC,
11:44 le fait que ça n'ouvre qu'un seul port,
11:46 ça c'est quand même hyper important,
11:48 dès que vous devez passer des firewalls d'entreprise,
11:51 et vous leur dites "il faudrait ouvrir 25 ports",
11:53 là ils vous disent "ouh, au secours"
11:55 et surtout ça ressemble à du HTTP3,
11:58 puisque grosso modo vous ne voyez pas la différence,
12:00 donc ça permet quand même pas mal de choses.
12:03 Il y a aussi pas mal de choses intéressantes,
12:05 c'est qu'il y a des CDN qui sont en train de réfléchir à des trucs comme Media Over Quick,
12:08 c'est-à-dire qu'on peut se dire qu'ils vont être capables de relay
12:11 le travail sur Kyber,
12:13 c'est TLS par défaut,
12:15 aujourd'hui c'est important,
12:17 et c'est intéressant,
12:19 c'est que j'ai tout un système de multi-user
12:21 et de duplication de paquets,
12:23 c'est dur à dire en français,
12:25 duplication de paquets qui permet en fait
12:27 que ce soit vraiment le muxer
12:29 qui envoie en deux protocoles
12:31 ou à deux personnes différentes.
12:33 Ce qui est important,
12:35 c'est que ça marche un peu en forme de Pub/Sub,
12:37 c'est-à-dire que tu demandes si tu veux l'audio,
12:39 la vidéo, les sous-titres et les inputs,
12:41 donc tu peux, quand tu queries le serveur,
12:43 comme ça, tu peux avoir un user qui est maître
12:46 et qui a les inputs,
12:48 et l'autre qui a juste l'audio et la vidéo pour regarder.
12:50 Et comme ça utilise des sub-streams quick,
12:53 la latence de l'input
12:56 est différente de la latence de la vidéo.
12:59 Alors, on arrive quand même au truc intéressant,
13:02 c'est les mesures.
13:04 Les mesures sont intéressantes,
13:06 mais c'est pas tout.
13:08 Donc, on a commencé à faire des mesures,
13:10 et on a commencé à faire des mesures,
13:12 et on a commencé à faire des mesures.
13:14 Et on a commencé à faire des mesures,
13:16 et on a commencé à faire des mesures.
13:18 Et on a commencé à faire des mesures.
13:20 Et on a commencé à faire des mesures.
13:22 Et on a commencé à faire des mesures.
13:24 Et on a commencé à faire des mesures.
13:26 Et on a commencé à faire des mesures.
13:28 Et on a commencé à faire des mesures.
13:30 Et on a commencé à faire des mesures.
13:32 Et on a commencé à faire des mesures.
13:34 Et on a commencé à faire des mesures.
13:36 Et on a commencé à faire des mesures.
13:38 Et on a commencé à faire des mesures.
13:40 Et on a commencé à faire des mesures.
13:42 Et on a commencé à faire des mesures.
13:44 Et on a commencé à faire des mesures.
13:46 Et on a commencé à faire des mesures.
13:48 Et on a commencé à faire des mesures.
13:50 Et on a commencé à faire des mesures.
13:52 Et on a commencé à faire des mesures.
13:54 Et on a commencé à faire des mesures.
13:56 Et on a commencé à faire des mesures.
13:58 Et on a commencé à faire des mesures.
14:00 Et on a commencé à faire des mesures.
14:02 Et on a commencé à faire des mesures.
14:04 Et on a commencé à faire des mesures.
14:06 Et on a commencé à faire des mesures.
14:08 Et on a commencé à faire des mesures.
14:10 Et on a commencé à faire des mesures.
14:12 Et on a commencé à faire des mesures.
14:14 Et on a commencé à faire des mesures.
14:16 Et on a commencé à faire des mesures.
14:18 Et on a commencé à faire des mesures.
14:20 Et on a commencé à faire des mesures.
14:22 Et on a commencé à faire des mesures.
14:24 Et on a commencé à faire des mesures.
14:26 Et on a commencé à faire des mesures.
14:28 Et on a commencé à faire des mesures.
14:30 Et on a commencé à faire des mesures.
14:32 Et on a commencé à faire des mesures.
14:34 Et on a commencé à faire des mesures.
14:36 Et on a commencé à faire des mesures.
14:38 Et on a commencé à faire des mesures.
14:40 Et on a commencé à faire des mesures.
14:42 Et on a commencé à faire des mesures.
14:44 Et on a commencé à faire des mesures.
14:46 Et on a commencé à faire des mesures.
14:48 Et on a commencé à faire des mesures.
14:50 Et on a commencé à faire des mesures.
14:52 Et on a commencé à faire des mesures.
14:54 Et on a commencé à faire des mesures.
14:56 Et on a commencé à faire des mesures.
14:58 Et on a commencé à faire des mesures.
15:00 Et on a commencé à faire des mesures.
15:02 Et on a commencé à faire des mesures.
15:04 Et on a commencé à faire des mesures.
15:06 Et on a commencé à faire des mesures.
15:08 Et on a commencé à faire des mesures.
15:10 Et on a commencé à faire des mesures.
15:12 Et on a commencé à faire des mesures.
15:14 Et on a commencé à faire des mesures.
15:16 Et on a commencé à faire des mesures.
15:18 Et on a commencé à faire des mesures.
15:20 Et on a commencé à faire des mesures.
15:22 Et on a commencé à faire des mesures.
15:24 Et on a commencé à faire des mesures.
15:26 Et on a commencé à faire des mesures.
15:28 Et on a commencé à faire des mesures.
15:30 Et on a commencé à faire des mesures.
15:32 Et on a commencé à faire des mesures.
15:34 Et on a commencé à faire des mesures.
15:36 Et on a commencé à faire des mesures.
15:38 Et on a commencé à faire des mesures.
15:40 Et on a commencé à faire des mesures.
15:42 Et on a commencé à faire des mesures.
15:44 Et on a commencé à faire des mesures.
15:46 Et on a commencé à faire des mesures.
15:48 Et on a commencé à faire des mesures.
15:50 Et on a commencé à faire des mesures.
15:52 Et on a commencé à faire des mesures.
15:54 Et on a commencé à faire des mesures.
15:56 Et on a commencé à faire des mesures.
15:58 Et on a commencé à faire des mesures.
16:00 Et on a commencé à faire des mesures.
16:02 Et on a commencé à faire des mesures.
16:04 Et on a commencé à faire des mesures.
16:06 Et on a commencé à faire des mesures.
16:08 Et on a commencé à faire des mesures.
16:10 Et on a commencé à faire des mesures.
16:12 Et on a commencé à faire des mesures.
16:14 Et on a commencé à faire des mesures.
16:16 Et on a commencé à faire des mesures.
16:18 Et on a commencé à faire des mesures.
16:20 Et on a commencé à faire des mesures.
16:22 Et on a commencé à faire des mesures.
16:24 Et on a commencé à faire des mesures.
16:26 Et on a commencé à faire des mesures.
16:28 Et on a commencé à faire des mesures.
16:30 Et on a commencé à faire des mesures.
16:32 Et on a commencé à faire des mesures.
16:34 Et on a commencé à faire des mesures.
16:36 Et on a commencé à faire des mesures.
16:38 Et on a commencé à faire des mesures.
16:40 Et on a commencé à faire des mesures.
16:42 Et on a commencé à faire des mesures.
16:44 Et on a commencé à faire des mesures.
16:46 Et on a commencé à faire des mesures.
16:48 Et on a commencé à faire des mesures.
16:50 Et on a commencé à faire des mesures.
16:52 Et on a commencé à faire des mesures.
16:54 Et on a commencé à faire des mesures.
16:56 Et on a commencé à faire des mesures.
16:58 Et on a commencé à faire des mesures.
17:00 Et on a commencé à faire des mesures.
17:02 Et on a commencé à faire des mesures.
17:04 Et on a commencé à faire des mesures.
17:06 Et on a commencé à faire des mesures.
17:08 Et on a commencé à faire des mesures.
17:10 Et on a commencé à faire des mesures.
17:12 Et on a commencé à faire des mesures.
17:14 Et on a commencé à faire des mesures.
17:16 Et on a commencé à faire des mesures.
17:18 Et on a commencé à faire des mesures.
17:20 Et on a commencé à faire des mesures.
17:22 Et on a commencé à faire des mesures.
17:24 Et on a commencé à faire des mesures.
17:26 Et on a commencé à faire des mesures.
17:28 Et on a commencé à faire des mesures.
17:30 Et on a commencé à faire des mesures.
17:32 Et on a commencé à faire des mesures.
17:34 Et on a commencé à faire des mesures.
17:36 Et on a commencé à faire des mesures.
17:38 Et on a commencé à faire des mesures.
17:40 Et on a commencé à faire des mesures.
17:42 Et on a commencé à faire des mesures.
17:44 Et on a commencé à faire des mesures.
17:46 Et on a commencé à faire des mesures.
17:48 Et on a commencé à faire des mesures.
17:50 Et on a commencé à faire des mesures.
17:52 Et on a commencé à faire des mesures.
17:54 Et on a commencé à faire des mesures.
17:56 Et on a commencé à faire des mesures.
17:58 Et on a commencé à faire des mesures.
18:00 Et on a commencé à faire des mesures.
18:02 Et on a commencé à faire des mesures.
18:04 Et on a commencé à faire des mesures.
18:06 Et on a commencé à faire des mesures.
18:08 Et on a commencé à faire des mesures.
18:10 Et on a commencé à faire des mesures.
18:12 Et on a commencé à faire des mesures.
18:14 Et on a commencé à faire des mesures.
18:16 Et on a commencé à faire des mesures.
18:18 Et on a commencé à faire des mesures.
18:20 Et on a commencé à faire des mesures.
18:22 Et on a commencé à faire des mesures.
18:24 Et on a commencé à faire des mesures.
18:26 Et on a commencé à faire des mesures.
18:28 Et on a commencé à faire des mesures.
18:30 Et on a commencé à faire des mesures.
18:32 Et on a commencé à faire des mesures.
18:34 Et on a commencé à faire des mesures.
18:36 Et on a commencé à faire des mesures.
18:38 Et on a commencé à faire des mesures.
18:40 Et on a commencé à faire des mesures.
18:42 Et on a commencé à faire des mesures.
18:44 Et on a commencé à faire des mesures.
18:46 Et on a commencé à faire des mesures.
18:48 Et on a commencé à faire des mesures.
18:50 Et on a commencé à faire des mesures.
18:52 Et on a commencé à faire des mesures.
18:54 Et on a commencé à faire des mesures.
18:56 Et on a commencé à faire des mesures.
18:58 Et on a commencé à faire des mesures.
19:00 Et on a commencé à faire des mesures.
19:02 Et on a commencé à faire des mesures.
19:04 Et on a commencé à faire des mesures.
19:06 Et on a commencé à faire des mesures.
19:08 Et on a commencé à faire des mesures.
19:10 Et on a commencé à faire des mesures.
19:12 Et on a commencé à faire des mesures.
19:14 Et on a commencé à faire des mesures.
19:16 Et on a commencé à faire des mesures.
19:18 Et on a commencé à faire des mesures.
19:20 Et on a commencé à faire des mesures.
19:22 Et on a commencé à faire des mesures.
19:24 Et on a commencé à faire des mesures.
19:26 Et on a commencé à faire des mesures.
19:28 Et on a commencé à faire des mesures.
19:30 Et on a commencé à faire des mesures.
19:32 Et on a commencé à faire des mesures.
19:34 Et on a commencé à faire des mesures.
19:36 Et on a commencé à faire des mesures.
19:38 Et on a commencé à faire des mesures.
19:40 Et on a commencé à faire des mesures.
19:42 Et on a commencé à faire des mesures.
19:44 Et on a commencé à faire des mesures.
19:46 Et on a commencé à faire des mesures.
19:48 Et on a commencé à faire des mesures.
19:50 Et on a commencé à faire des mesures.
19:52 Et on a commencé à faire des mesures.
19:54 Et on a commencé à faire des mesures.
19:56 Et on a commencé à faire des mesures.
19:58 Et on a commencé à faire des mesures.
20:00 Et on a commencé à faire des mesures.
20:02 Et on a commencé à faire des mesures.
20:04 Et on a commencé à faire des mesures.
20:06 Et on a commencé à faire des mesures.
20:08 Et on a commencé à faire des mesures.
20:10 Et on a commencé à faire des mesures.
20:12 Et on a commencé à faire des mesures.
20:14 Et on a commencé à faire des mesures.
20:16 Et on a commencé à faire des mesures.
20:18 Et on a commencé à faire des mesures.
20:20 Et on a commencé à faire des mesures.
20:22 Et on a commencé à faire des mesures.
20:24 Et on a commencé à faire des mesures.
20:26 Et on a commencé à faire des mesures.
20:28 Et on a commencé à faire des mesures.
20:30 Et on a commencé à faire des mesures.
20:32 Et on a commencé à faire des mesures.
20:34 Et on a commencé à faire des mesures.
20:36 Et on a commencé à faire des mesures.
20:38 Et on a commencé à faire des mesures.
20:40 Et on a commencé à faire des mesures.
20:42 Et on a commencé à faire des mesures.
20:44 Et on a commencé à faire des mesures.
20:46 Et on a commencé à faire des mesures.
20:48 Et on a commencé à faire des mesures.
20:50 Et on a commencé à faire des mesures.
20:52 Et on a commencé à faire des mesures.
20:54 Et on a commencé à faire des mesures.
20:56 Et on a commencé à faire des mesures.
20:58 Et on a commencé à faire des mesures.
21:00 Et on a commencé à faire des mesures.
21:02 Et on a commencé à faire des mesures.
21:04 Et on a commencé à faire des mesures.
21:06 Et on a commencé à faire des mesures.
21:08 Et on a commencé à faire des mesures.
21:10 Et on a commencé à faire des mesures.
21:12 Et on a commencé à faire des mesures.
21:14 Et on a commencé à faire des mesures.
21:16 Et on a commencé à faire des mesures.
21:18 Et on a commencé à faire des mesures.
21:20 Et on a commencé à faire des mesures.
21:22 Et on a commencé à faire des mesures.
21:24 Et on a commencé à faire des mesures.
21:26 Et on a commencé à faire des mesures.
21:28 Et on a commencé à faire des mesures.
21:30 Et on a commencé à faire des mesures.
21:32 Et on a commencé à faire des mesures.
21:34 Et on a commencé à faire des mesures.
21:36 Et on a commencé à faire des mesures.
21:38 Et on a commencé à faire des mesures.

Recommandations