From deny@monaco.net Tue Mar 3 11:52:52 2009 From: deny To: traduc@traduc.org Subject: Re: [Traduc] =?utf-8?q?probl=C3=A8me?= Date: Tue, 03 Mar 2009 11:52:34 +0100 Message-ID: <49AD0BF2.60206@monaco.net> In-Reply-To: <49AD09B4.2000507@monaco.net> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============8336392118233405215==" --===============8336392118233405215== Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable >> un wiki, on peut y =C3=A9crire, non? >=20 oui , on va m=C3=AAme dire que c'est un peu fait pour cela >> Apriori, le docbook cr=C3=A9=C3=A9 par MoinMoin passe bien les scripts (ce= ux du >> LDP, en tout cas pour l'instant) Il passe bien les scripts mais il g=C3=A9n=C3=A9re du code degueulasse, qu'il= va me falloir deux heures pour d=C3=A9boguer -rajouter les en-t=C3=AAtes -rajouter les tags docbook omis -faire une mise en page clarifi=C3=A9e voici d'ailleurs le code g=C3=A9n=C3=A9r=C3=A9 pour que chacun (mais il y a p= as vraiment pas grand monde, donc ca devrait =C3=AAtre rapide) puisse se faire une id=C3=A9e du travail =C3=A0 effectuer je vais sur le wiki je trouve la page envoy=C3=A9 par le traducteur je fais afficher en docbook et ensuite je r=C3=A9cup=C3=A8re le fichier g= =C3=A9n=C3=A9r=C3=A9 et attention les yeux,le voici le voila (et j'envoie ci-joint un exemple de fichier "propre", que je dois tirer de ce torchon ) Il n'y a pas un probl=C3=A8me, la ? > "-//OASIS//DTD DocBook XML V4.4//EN"=20 > "http://www.docbook.org/xml/4.4/docbookx.dtd">
= Gazette=20 > Linux/Brouillons/lg149-C VPN=20 > Networking192009= -03-02=20 > 18:51:33KamalSawalToure<= revision>182009-03-02=20 > 10:53:00KamalSawalToureR= electure=20 > faite. Traduction finie. Merci pour votre=20 > patience17200= 9-03-02=20 > 01:08:45KamalSawalToure<= revision>162009-03-02=20 > 01:07:57KamalSawalTourej= 'ai=20 > fini. Il reste la=20 > relecture1520= 09-02-23=20 > 15:28:50KamalSawalToure<= revision>142009-02-23=20 > 13:35:28KamalSawalToure<= revision>132009-02-23=20 > 11:26:29KamalSawalToure<= revision>122009-02-10=20 > 18:51:54KamalSawalToure<= revision>112009-02-10=20 > 14:57:25KamalSawalToure<= revision>102009-02-10=20 > 13:33:23KamalSawalToure<= revision>92009-02-10=20 > 12:41:40KamalSawalToure<= revision>82008-12-07=20 > 08:27:06KamalSawalToure<= revision>72008-10-17=20 > 17:02:24KamalSawalToure<= revision>62008-10-17=20 > 17:00:13KamalSawalToure<= revision>52008-10-17=20 > 16:28:34KamalSawalToure<= revision>42008-10-14=20 > 12:58:08KamalSawalToure<= revision>32008-10-14=20 > 11:47:13KamalSawalToure<= revision>22008-10-01=20 > 08:50:27KamalSawalToure<= revision>12008-09-30=20 > 15:51:29KamalSawalToure<= /revhistory>
Configuration=20 > d'un R=C3=A9seau Priv=C3=A9 Virtuel (VPN)Cr=C3=A9er son propr= e R=C3=A9seau=20 > Virtuel Priv=C3=A9 (VPN) est assez facile sur des plateformes qui sont=20 > livr=C3=A9es avec un pilote tun: cela permet de traiter le flux des paquets= =20 > r=C3=A9seaux au niveau de l'espace utilisateur. Bien que cela soit=20 > consid=C3=A9rablement plus facile que de faire de la programmation r=C3=A9s= eau=20 > dans le noyau, il reste cependant quelques d=C3=A9tails =C3=A0 prendre en c= ompte.=20 > Cet article vous guidera =C3=A0 travers mes trouvailles.=20 > IFF_TUN Versus IFF_TAP=20 > Le Pilote tun est un p=C3=A9riph=C3=A9rique deux-en-un:=20 > Un P=C3=A9riph=C3=A9rique point =C3=A0= point=20 > (IFF_TUN). Le p=C3=A9riph=C3=A9rique TUN permet le traitement de paquets IP= .=20 > Un p=C3=A9riph=C3=A9rique Ethernet (IFF_T= AP). Le=20 > p=C3=A9riph=C3=A9rique TAP traite les trames Ethernet.=20 > Cet article parle du code =C3=A0=20 > =C3=A9crire pour le p=C3=A9riph=C3=A9rique Ethernet.Si vous choisissez le p= =C3=A9riph=C3=A9rique=20 > IP, alors vous g=C3=A9n=C3=A8rerez 18 octets par paquet trait=C3=A9; le tra= fic est=20 > certes moins important (l'en-t=C3=AAte et la queue du paquet Ethernet), mai= s=20 > vous aurez =C3=A0 coder un peu plus pour mettre en place votre r=C3=A9seau.= =20 > Activation du pilote=20 > Premi=C3=A8rement, on doit s'assurer que le pilote tun est=20 > actif.Sur mon syst=C3=A8me Debian, je dois tout simplement le charger:=20 > # /sbin/modprobe tun # /sbin/lsmod | grep tun tun =20 > 10208 0 # /bin/ls -l /dev/net/tun crw-rw-rw- 1 root root=20 > 10, 200 2008-02-10 11:30 /dev/net/tun role=3D'strong'>La Configuration Pour des besoins=20 > de d=C3=A9monstration, on mettra en place un r=C3=A9seau virtuel de deux h= =C3=B4tes.=20 > Une fois qu'on a mis la main sur les paquets Ethernet, nous utiliserons=20 > l'encapsulation UDP pour les faire transiter d'une interface virtuelle=20 > sur l'h=C3=B4te A vers une interface virtuelle sur l'h=C3=B4te B et vice-ve= rsa. Le=20 > socket UDP sera utilis=C3=A9 en mode non-connect=C3=A9; cela a l'avantage d= e nous=20 > permettre d'utiliser le m=C3=AAme socket pour envoyer et recevoir des paque= ts=20 > depuis n'importe quel autre h=C3=B4te de notre r=C3=A9seau virtuel. Toutefo= is, la=20 > nature non-connect=C3=A9e de notre socket UDP, complique la r=C3=A9ception = du=20 > chemin MTU (plus de d=C3=A9tails dessus dans les prochaines lignes).=20 > Chaque h=C3=B4te de notre r=C3=A9seau virtuel ex=C3=A9cutera u= ne instance=20 > du programme de d=C3=A9monstration. Pour l'illustrer, le trafic d'une=20 > application (telnet dans le cas pr=C3=A9sent) sur l'h=C3=B4te A vers l'appl= ication=20 > correspondante (inetd/telnetd) vers l'h=C3=B4te B, utilisera le chemin=20 > suivant: Le m=C3=A9canisme de=20 > d=C3=A9couverte En pratique, nous avons besoin d'un= =20 > m=C3=A9canisme pour faire correspondre les adresses IP virtuelles aux=20 > adresses IP r=C3=A9elles. Il nous appartient de bidouiller une m=C3=A9thode= de=20 > d=C3=A9couverte pour r=C3=A9soudre ce probl=C3=A8me de correspondance; cepe= ndant comme=20 > cela n'est pas en rapport direct avec notre sujet du jour, ni n=C3=A9cessai= re=20 > pour les besoins de notre petite d=C3=A9monstration d=C3=A9crite ici, nous = allons=20 > tricher et laisser le programme de tunnelling =C3=A9tablir les=20 > correspondances par des lignes de commande:=20 > Host A# ./udptun=20 > Usage: ./udptun local-tun-ip remote-physical-ip Host A# ./udptun=20 > 172.16.0.1 192.168.2.103 Host B# ./udptun 172.16.0.111 192.168.2.113=20 > Mise en=20 > place de l'interface La premi=C3=A8re chose =C3=A0 = faire=20 > est de cr=C3=A9er l'interface Ethernet virtuelle (tap). Cela se fait avec u= n=20 > simple appel =C3=A0 la fonction open(): ifr_tun; > int fd; >=20 > if ((fd =3D open("/dev/net/tun", O_RDWR)) < 0) { > /*Erreur de traitement, retour.*/; > } >=20 > memset( &ifr_tun, 0, sizeof(ifr_tun) ); > ifr_tun.ifr_flags =3D IFF_TAP | IFF_NO_PI; > if ((ioctl(fd, TUNSETIFF, (void *)&ifr_tun)) < 0) { > /*Erreur de traitement, retour.*/; > } >=20 > /*Configurer l'interface: D=C3=A9finir l'adresse IP, le MTU,=20 > etc*/]]>Ici, l'indicateur IFF_NO_PI requiert qu'on=20 > manipule de trames brutes. Si on ne fait pas cela, les trames se verront=20 > ajouter un en-t=C3=AAte de 4 octets. role=3D'strong'>Interface setup: the IP address=20 > L'interface virtuelle doit =C3=AAtre identifi=C3=A9e par une a= dresse=20 > IP. On la d=C3=A9finira avec un appel de la fonction ioctl():=20 > int set_ip(struct ifreq *ifr_tun, unsigned long ip4) > { > struct sockaddr_in addr; > int sock =3D -1; >=20 > sock =3D socket(AF_INET, SOCK_DGRAM, 0); >=20 > if (sock < 0) { > /*Erreur de traitement, retour*/ > } >=20 > memset(&addr, 0, sizeof(addr)); > addr.sin_addr.s_addr =3D ip; /*network byte order*/ > addr.sin_family =3D AF_INET; > memcpy(&ifr_tun->ifr_addr, &addr, sizeof(struct sockaddr)); >=20 > if (ioctl(sock, SIOCSIFADDR, ifr_tun) < 0) { > /*Erreur de traitement, retour*/ > } >=20 > /*Sera Utilis=C3=A9 plus tard pour d=C3=A9finir le MTU.*/ > return sock; > }]]>Le PMTU (Path Maximum=20 > Transmission Unit) La seul =C3=A9l=C3=A9ment que no= us=20 > avons =C3=A0 configurer est le MTU (Maximum Transmit Unit) de l'interface. = > Pour notre interface pseudo-Ethernet, le MTU est la charge la plus=20 > importante que les trames Ethernet peuvent transporter. On d=C3=A9finira le= =20 > PMTU en fonction du MTU. Pour faire simple, on dira que le=20 > PMTU est le paquet le plus large qui peut traverser le chemin allant=20 > d'un h=C3=B4te =C3=A0 sa destination sans subir de fragmentation. Le=20 > PMTU est un param=C3=A8tre important =C3=A0 prendre en compte pour que tout= se=20 > passe bien. Consid=C3=A9rez ceci: en (r=C3=A9)injectant vos trames dans le = noyau,=20 > elles se verront attribuer des en-t=C3=AAtes (IP, UDP et Ethernet)=20 > suppl=C3=A9mentaires. Si la taille de la trame que vous avez envoy=C3=A9e a= u noyau=20 > est trop proche du PMTU, la trame finale qui sera envoy=C3=A9e =C3=A0 parti= r de=20 > l'interface r=C3=A9elle pourrait =C3=AAtre plus grande que le PMTU. Au pire= des=20 > cas, une telle trame sera perdue quelque part en route. Au meilleur des=20 > cas, la trame sera fragment=C3=A9e en deux et la premi=C3=A8re partie sera = trait=C3=A9e=20 > =C3=A0 100%, ce qui ne sera pas le cas pour la seconde partie.=20 > Pour =C3=A9viter cela, on doit d=C3=A9couvrir la valeur du PMT= U et=20 > s'assurer que la nouvelle trame Ethernet sera correctement dimensionn=C3=A9= e=20 > pour le PMTU. Ensuite, on soustraira du PMTU la taille des nouvelles=20 > en-t=C3=AAtes et on donnera cette valeur au MTU de l'interface virtuelle.=20 > La t=C3=A2che est facile sous Linux, pour un socket TCP: on do= it=20 > juste s'assurer que les m=C3=A9canismes de d=C3=A9couverte du PMTU par le n= oyau=20 > sont configur=C3=A9s, et c'est tout. Par contre pour les socke= ts=20 > UDP, nous les utilisateurs, avons la responsabilit=C3=A9 de nous assurer qu= e=20 > les datagrammes UDP sont de taille correcte. Si le socket UDP est=20 > connect=C3=A9 =C3=A0 l'h=C3=B4te correspondant, un simple appel appel de la= fonction=20 > getsockopt()avec l'indicateur IP_MTU positionn=C3=A9, nous donnera le PMTU = > En ce qui concerne les sockets non-connect=C3=A9s, on doit=20 > analyser le PMTU. Premi=C3=A8rement, le socket doit =C3=AAtre configur=C3= =A9 de fa=C3=A7on =C3=A0=20 > ce que les datagrammes ne soient pas fragment=C3=A9s (positionner=20 > l'indicateur DF); ensuite, on doit configurer de fa=C3=A7on =C3=A0 =C3=AAtr= e averti des=20 > erreurs ICMP que cela pourrait g=C3=A9n=C3=A9rer. Si un h=C3=B4te ne peut p= as g=C3=A9rer la=20 > taille du datagramme sans le fragmenter, alors il devra nous en informer=20 > (enfin, on l'esp=C3=A8re): int on; >=20 > sock =3D socket(AF_INET, SOCK_DGRAM, 0); > if (sock < 0) { > /*Erreur de traitement, retour*/; > } >=20 > on =3D IP_PMTUDISC_DO; > if (setsockopt(sock, SOL_IP, IP_MTU_DISCOVER, &on, sizeof(on))) { > /*Erreur de traitement, retour*/; > } >=20 > on =3D 1; > if (setsockopt(sock, SOL_IP, IP_RECVERR, &on, sizeof(on))) { > /*Erreur de traitement, retour*/; > } >=20 > /*Utiliser sock pour la d=C3=A9couverte du=20 > PMTU.*/]]>Ensuite, on envoie des datagrammes analys=C3=A9s d= e=20 > diverses tailles: buf, len, 0, > (struct sockaddr*)target, > sizeof(struct sockaddr_in));]]>Pour=20 > finir, on farfouille parmi les erreurs jusqu'=C3=A0 trouver le bon PMTU. Si= =20 > on a une erreur de PMTU, on ajuste la taille du datagramme et on=20 > recommence =C3=A0 envoyer les datagrammes jusqu'=C3=A0 ce que la destinatio= n soit=20 > atteinte: struct iovec iov; > struct msghdr msg; > struct cmsghdr *cmsg =3D NULL; > struct sock_extended_err *err =3D NULL; > struct sockaddr_in addr; > int res; > int mtu; >=20 > if (recv(sock, sndbuf, sizeof(sndbuf), MSG_DONTWAIT) > 0) { > /* R=C3=A9ponse re=C3=A7ue. Fin de la d=C3=A9couverte du PMTU. Reto= ur.*/ > } >=20 > msg.msg_name =3D (unsigned char*)&addr; > msg.msg_namelen =3D sizeof(addr); > msg.msg_iov =3D &iov; > msg.msg_iovlen =3D 1; > msg.msg_flags =3D 0; > msg.msg_control =3D cbuf; > msg.msg_controllen =3D sizeof(cbuf); > res =3D recvmsg(sock, &msg, MSG_ERRQUEUE); > if (res < 0) { > if (errno !=3D EAGAIN) > perror("recvmsg"); > /*Nothing for now, return.*/ > } >=20 > for (cmsg =3D CMSG_FIRSTHDR(&msg); cmsg; cmsg =3D CMSG_NXTHDR(&msg,=20 > cmsg)) { > if (cmsg->cmsg_level =3D=3D SOL_IP) { > if (cmsg->cmsg_type =3D=3D IP_RECVERR) { > err =3D (struct sock_extended_err *) CMSG_DATA(cmsg); > } > } > } > if (err =3D=3D NULL) { > /*D=C3=A9couvrte du PMTU: pas d'info jusque l=C3=A0. Retour, mais c= ontinue=20 > =C3=A0 analyser.*/ > } >=20 >=20 > mtu =3D 0; > switch (err->ee_errno) { > ... > case EMSGSIZE: > debug(" EMSGSIZE pmtu %d\n", err->ee_info); > mtu =3D err->ee_info; > break; > ... > } /*end switch*/ >=20 > return mtu; /*Mais continue =C3=A0 analyser jusqu'=C3=A0 ce que l'h=C3= =B4te distant=20 > soit atteint!*/]]>Une derni=C3=A8re chose: le PMTU est tenu = de=20 > changer dans le temps. On devra donc le tester de temps en temps et=20 > ensuite configurer le MTU de l'interface virtuelle en fonction des=20 > r=C3=A9sultats du test. Si on veut =C3=A9viter toute cette gymnastique, on = peut=20 > configurer le MTU de fa=C3=A7on s=C3=A9curis=C3=A9e mais moins optimale : c= hoisir la=20 > valeur la plus petit entre 576 et le MTU de l'interface physique (moins=20 > l'en-t=C3=AAte que nous avons mentionn=C3=A9, bien entendu.)=20 > Configuration de l'interface: le=20 > MTU Apr=C3=A8s avoir finalement obtenu cette valeur= =20 > magique qu'est le PMTU, nous pouvons correctement configurer le MTU de=20 > notre interface: ... > ifr_tun->ifr_mtu =3D mtu; > if (ioctl(sock, SIOCSIFMTU, ifr_tun) < 0) { > /*Erreur de Traitement*/ > }]]>Encapsulation=20 > UDP Nous avons maintenant une interface=20 > virtuelle bien configur=C3=A9e et qui fonctionne. Tout ce que nous avons = =C3=A0=20 > faire est de relayer les trames dans les deux directions. Premi=C3=A8rement= ,=20 > il faut ouvrir un socket UDP non-connect=C3=A9 (Je vous =C3=A9pargne les d= =C3=A9tails),=20 > et ensuite: Lire = > les paquets du fichier descriptif du tap et les envoyer =C3=A0 l'adresse IP= =20 > physique distante de notre h=C3=B4te correspondant; ceci enverra les paquet= s=20 > dans une seule direction.=20 > buf[VPN_MAX_MTU] =3D {0}; > struct sockaddr_in cliaddr =3D {0}; > int recvlen =3D -1; > socklen_t clilen =3D sizeof(cliaddr); >=20 > recvlen =3D read(_tun_fd, buf, sizeof(buf)); > if (recvlen > 0) > sendto(_udp_fd, buf, recvlen, 0, (struct=20 > sockaddr*)&cliaddr, clilen); ]]> override=3D'none'>Avertissement:= =20 > La lecture du fichier descriptif du tap va provoquer un blocage. Cela=20 > veut dire que la fonction read() ne va pas =C3=AAtre interrompue m=C3=AAme = si on=20 > ferme le descripteur sous-jacent du fichier. On est donc oblig=C3=A9=20 > d'utiliser les fonctions poll()/select() sur ce descripteur de fichier=20 > avant d'executer la fonction read() dessus si on veut pouvoir terminer=20 > ce thread proprement.=20 > lire les=20 > datagrammes du socket UDP et les envoyer =C3=A0 travers le descripteur de=20 > fichier tap : les donn=C3=A9es circuleront maintenant dans la direction=20 > oppos=C3=A9e. recvfrom(_udp_fd, buf, sizeof(buf), 0, > (struct sockaddr*)&cliaddr, &clilen); > if (recvlen > 0) > write(_tun_fd, buf, recvlen); ]]>Notez=20 > qu'en pratique, si on a plus de deux h=C3=B4tes dans son r=C3=A9seau virtue= l, on=20 > doit regarder le contenu des trames pour v=C3=A9rifier les adresses IP sour= ce=20 > et destination avant de d=C3=A9cider o=C3=B9 envoyer la trame. On=20 > peut t=C3=A9l=C3=A9charger les sources des fichiers udptun.c, ttools.c, tto= ols.h=20 > et pathmtu.c avec le Makefile; tout ce dont on parl=C3=A9 ci-dessus est aus= si=20 > t=C3=A9l=C3=A9chargeable sous la forme d'une archive tar. role=3D'strong'>P comme Priv=C3=A9 Comme on a le=20 > contr=C3=B4le total du trafic de notre r=C3=A9seau virtuel, on peut le cryp= ter=20 > dans l'espace utilisateur. Pour les besoins de cette d=C3=A9monstration, no= us=20 > allons construire un VPN complet, que nous allons crypter avec IPSEC=20 > (remarque: IPSEC a aussi une fonctionnalit=C3=A9 int=C3=A9gr=C3=A9e de tunn= elling).=20 > Sous Debian, il faut juste installer le paquetage=20 > ipsec-tools et utiliser ces fichiers pour des manipulations manuelles:=20 > Pour l'h=C3=B4te A: override=3D'none'>## Vider le SAD et SPD flush; spdflush;=20 > # A & B add 172.16.0.1 172.16.0.111 ah 15700 -A=20 > hmac-md5 "123456789.123456"; add 172.16.0.111 172.16.0.1 ah 24500=20 > -A hmac-md5 "123456789.123456"; add 172.16.0.1 172.16.0.111 esp=20 > 15701 -E 3des-cbc "123456789.123456789.1234"; add 172.16.0.111=20 > 172.16.0.1 esp 24501 -E 3des-cbc "123456789.123456789.1234"; # A=20 > spdadd 172.16.0.1 172.16.0.111 any -P out ipsec=20 > override=3D'none'>esp/transport//require ah/transport//require;=20 > spdadd 172.16.0.111 172.16.0.1=20 > any -P in ipsec override=3D'none'>esp/transport//require ah/transport//require;=20 > Pour=20 > l'h=C3=B4te B: ## Vi= der=20 > le SAD et SPD flush; spdflush; # A & B add 172.16.0.1 =20 > 172.16.0.111 ah 15700 -A hmac-md5 "123456789.123456"; add=20 > 172.16.0.111 172.16.0.1 ah 24500 -A hmac-md5 "123456789.123456"; add=20 > 172.16.0.1 172.16.0.111 esp 15701 -E 3des-cbc=20 > override=3D'none'>"123456789.123456789.1234";=20 > add 172.16.0.111 172.16.0.1 esp=20 > 24501 -E 3des-cbc override=3D'none'>"123456789.123456789.1234";=20 > #dump ah; #dump esp; # B spdadd=20 > 172.16.0.111 172.16.0.1 any -P out ipsec override=3D'none'>esp/transport//require ah/transport//require;=20 > spdadd 172.16.0.1 172.16.0.111=20 > any -P in ipsec override=3D'none'>esp/transport//require ah/transport//require;=20 > Remarquez = > comme le m=C3=A9canisme de cryptage tout entier est li=C3=A9 aux adresses=20 > virtuelles et comme il vous isole des r=C3=A9seaux physiques sur lesquels v= os=20 > h=C3=B4tes se trouvent. Vous pouvez directement t=C3=A9l=C3=A9charger le fi= chier=20 > ipsec-tools.conf. Le VPN en=20 > marche C'est parti! Faisons un ping de 100=20 > octets sur l'interface virtuelle de l'autre h=C3=B4te:=20 > Host A$ ping -s 100 = > 172.16.0.111 Regardons le trafic=20 > avec tcpdump sur l'interface virtuelle:: override=3D'none'>#tcpdump -i tap0 override=3D'none'>.. 15:43:27.739218 IP 172.16.0.1 >=20 > 172.16.0.111: AH(spi=3D0x00003d54,seq=3D0x1d):=20 > override=3D'none'>ESP(spi=3D0x00003d55,seq=3D0x1d), length role=3D'strong'>128=20 > 15:43:27.740673 IP 172.16.0.111 >=20 > 172.16.0.1: AH(spi=3D0x00005fb4,seq=3D0x1d): override=3D'none'>ESP(spi=3D0x00005fb5,seq=3D0x1d), length 128=20 > 15:43:28.738741 IP 172.16.0.1 >=20 > 172.16.0.111: AH(spi=3D0x00003d54,seq=3D0x1e):=20 > override=3D'none'>ESP(spi=3D0x00003d55,seq=3D0x1e), length 128=20 > 15:43:28.740170 IP 172.16.0.111 >=20 > 172.16.0.1: AH(spi=3D0x00005fb4,seq=3D0x1e): override=3D'none'>ESP(spi=3D0x00005fb5,seq=3D0x1e), length 128=20 > 15:43:39.494298 IP 172.16.0.1 >=20 > 172.16.0.111: AH(spi=3D0x00003d54,seq=3D0x1f):=20 > override=3D'none'>ESP(spi=3D0x00003d55,seq=3D0x1f), length 64=20 > 15:43:39.496818 IP 172.16.0.111 >=20 > 172.16.0.1: AH(spi=3D0x00005fb4,seq=3D0x1f): override=3D'none'>ESP(spi=3D0x00005fb5,seq=3D0x1f), length 40=20 > Sur=20 > l'interface physique: override=3D'none'># tcpdump -i eth2 override=3D'none'>.. 15:45:46.878156 IP=20 > 192.168.40.128.11223 > 192.168.40.129.11223: UDP,=20 > length role=3D'strong'>186=20 > 15:45:46.879021 IP=20 > 192.168.40.129.11223 > 192.168.40.128.11223: UDP,=20 > length 186=20 > 15:45:47.879479 IP=20 > 192.168.40.128.11223 > 192.168.40.129.11223: UDP,=20 > length 186=20 > 15:45:47.887054 IP=20 > 192.168.40.129.11223 > 192.168.40.128.11223: UDP,=20 > length 186=20 > 15:45:48.880268 IP=20 > 192.168.40.128.11223 > 192.168.40.129.11223: UDP,=20 > length 186=20 > 15:45:48.882738 IP=20 > 192.168.40.129.11223 > 192.168.40.128.11223: UDP,=20 > length 186=20 > Tous=20 > les chiffres en gras sont des charges utiles. Quand il sort de=20 > l'interface virtuelle, le datagramme crypt=C3=A9 est de 186 octets: 14 octe= ts=20 > pour l'en-t=C3=AAte Ethernet, 20 pour l'en-t=C3=AAte IP, un en-t=C3=AAte AH= de 24=20 > octets et un ESP pour les 128 octets restants. Quand il=20 > sort de l'interface physique, le datagramme est de 232 octets: 14 octets=20 > pour l'en-t=C3=AAte Ethernet, 20 octets pour l'en-t=C3=AAte IP, 8 pour l'en= -t=C3=AAte=20 > UDP, 186 octets de charge physique et 4 octets pour le bloc de fin de la=20 > trame Ethernet. Nous avons donc rajout=C3=A9 46 octets par datagramme.=20 > Ressources=20 > url=3D'http://www.mjmwired.net/kernel/Documentation/networking/tuntap.txt'>= The=20 > TUN/TAP kernel documentation=20 > url=3D'http://www.faqs.org/rfcs/rfc1191.html'>The Path MTU Discovery=20 > RFC url=3D'http://linux.die.net/man/7/ip'>The Linux IPv4 man page=20 > url=3D'http://www.networksorcery.com/enp/Protocol.htm'>The RFC=20 > Sourcebook
=20 >=20 >=20 --=20 --===============8336392118233405215== Content-Type: text/xml Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="lg160-A.xml" MIME-Version: 1.0 PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCFET0NUWVBFIGFydGljbGUg UFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjUvL0VOIgogICJodHRwOi8vd3d3 Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuNS9kb2Nib29reC5kdGQiPgoKCjxhcnRpY2xl IGxhbmc9ImZyIj4KCiA8YXJ0aWNsZWluZm8+CiAgPHRpdGxlPk1lcyBhc3R1Y2VzPC90aXRsZT4K CiAgPHN1YnRpdGxlPgogIEdhemV0dGUmbmJzcDtMaW51eCBu77+977+9MTYwJm5ic3A7Jm1kYXNo OyZuYnNwO01hcnMmbmJzcDsyMDA5CiAgPC9zdWJ0aXRsZT4KCiAgPGF1dGhvcj4KICAgIDxmaXJz dG5hbWU+QmVuPC9maXJzdG5hbWU+CiAgICA8c3VybmFtZT5Pa29wbmlrPC9zdXJuYW1lPgogICAg PGVtYWlsPmJlbiBDSEVaIGxpbnV4Z2F6ZXR0ZSBQT0lOVCBuZXQ8L2VtYWlsPgogIDwvYXV0aG9y PgoKICA8b3RoZXJjcmVkaXQgcm9sZT0idHJhZHVjdGlvbiIgY2xhc3M9InRyYW5zbGF0b3IiPgog ICAgIDxmaXJzdG5hbWU+RGVueTwvZmlyc3RuYW1lPgogICAgICAgPGNvbnRyaWI+QWRhcHRhdGlv biBmcmFu77+977+9YWlzZSA8L2NvbnRyaWI+CiAgICAgPGVtYWlsPmRlbnkgQ0hFWiBtb25hY28g UE9JTlQgbmV0PC9lbWFpbD4KICA8L290aGVyY3JlZGl0PgoKICA8b3RoZXJjcmVkaXQgcm9sZT0i cmVsZWN0dXJlIiBjbGFzcz0idHJhbnNsYXRvciI+CiAgICA8Zmlyc3RuYW1lPjwvZmlyc3RuYW1l PgogICAgPHN1cm5hbWU+PC9zdXJuYW1lPgogICAgPGNvbnRyaWI+UmVsZWN0dXJlIGRlIGxhIHZl cnNpb24gZnJhbu+/ve+/vWFpc2UgPC9jb250cmliPgogICAgPGVtYWlsPjwvZW1haWw+CiAgPC9v dGhlcmNyZWRpdD4KCiAgPGxlZ2Fsbm90aWNlPgogICAgPHBhcmE+QXJ0aWNsZSBwYXJ1IGRhbnMg bGUgbu+/ve+/vTE2MCBkZSBsYSBHYXpldHRlIExpbnV4IGRlIE1hcnMgMjAwOS48L3BhcmE+CiAg ICA8cGFyYT5BcnRpY2xlIHB1Ymxp77+977+9IHNvdXMgPHVsaW5rIHVybD0iaHR0cDovL2xpbnV4 Z2F6ZXR0ZS5uZXQvY29weWluZy5odG1sIj5PcGVuIFB1YmxpY2F0aW9uIExpY2Vuc2U8L3VsaW5r Pi4gTGEgPGNpdGV0aXRsZT5MaW51eCBHYXpldHRlPC9jaXRldGl0bGU+IG4nZXN0IG5pIHByb2R1 aXRlLCBuaSBzcG9uc29yaXPvv73vv71lLCBuaSBhdmFsaXPvv73vv71lIHBhciBub3RyZSBo77+9 77+9YmVyZ2V1ciBwcmluY2lwYWwsIFNTQywgSW5jLjwvcGFyYT4KICA8L2xlZ2Fsbm90aWNlPgoK ICA8Y29weXJpZ2h0PgogICAgPHllYXI+MjAwOTwveWVhcj4KICAgIDxob2xkZXI+QmVuIE9rb3Bu aWs8L2hvbGRlcj4KICA8L2NvcHlyaWdodD4KCiAgPGNvcHlyaWdodD4KICAgIDx5ZWFyPjIwMDk8 L3llYXI+CiAgICA8aG9sZGVyPkRlbnk8L2hvbGRlcj4KICA8L2NvcHlyaWdodD4KCiAgCiA8L2Fy dGljbGVpbmZvPgogCiA8c2VjdGlvbiBpZD0ibGVjdHVyZSI+PHRpdGxlPkxpcmUgZGVzIGZpY2hp ZXJzIDxhY3JvbnltPk1IVDwvYWNyb255bT4gc291cyA8c3lzdGVtaXRlbSBjbGFzcz0ib3NuYW1l Ij5MaW51eDwvc3lzdGVtaXRlbT48L3RpdGxlPgo8cGFyYT4KQWJvcmRvbnMgdW4gYXV0cmUgZm9y bWF0IHByb3Byae+/ve+/vXRhaXJlIG9yaWdpbmFpcmUgZGUgPHRyYWRlbWFyayBjbGFzcz0iY29w eXJpZ2h0Ij5NaWNyMHMwZnQ8L3RyYWRlbWFyaz4mbmJzcDs6IGxlcyBmaWNoaWVycyA8YWNyb255 bT4ubWh0PC9hY3JvbnltPi4gSWwgc2VtYmxlIHF1ZSA8YXBwbGljYXRpb24+SW50ZXJuZXQgRXhw bG9yZXI8L2FwcGxpY2F0aW9uPiBlbnJlZ2lzdHJlIGxlcyBjb3VycmllbHMgZXQgPGFjcm9ueW0+ SFRNTDwvYWNyb255bT4gZCd1bmUgbWFuae+/ve+/vXJlIGhhc2FyZGV1c2UgcXVpIHJlc3NlbWJs ZSBhc3NleiBwZXUg77+977+9IHVuIGNvdXJyaWVsJm5ic3A7OyBzZWxvbiBXaWtpcGVkaWEsIGls IG4nZXhpc3RlIHBhcyBkZSBub3JtZSB1bmlxdWUsIGV0IGxhIHNpdHVhdGlvbiBlc3QgZO+/ve+/ vWNyaXRlIGNvbW1lIDxxdW90ZT5wcm9ibO+/ve+/vW1hdGlxdWU8L3F1b3RlPi4KPC9wYXJhPgoK PHBhcmE+ClVuZSByZWNoZXJjaGUgPGFwcGxpY2F0aW9uPkludGVybmV0PC9hcHBsaWNhdGlvbj4g bW9udHJlIHF1J2lsIHkgYSBkZSBub21icmV1c2VzIHBlcnNvbm5lcyZtZGFzaDtsZXMgZO+/ve+/ vWJ1dGFudHMgZnJh77+977+9Y2hlbWVudCBjb252ZXJ0aXMg77+977+9IDxzeXN0ZW1pdGVtIGNs YXNzPSJvc25hbWUiPkxpbnV4PC9zeXN0ZW1pdGVtPiBlbiBwYXJ0aWN1bGllciZtZGFzaDtxdWkg cG9zc++/ve+/vWRlbnQgbm9tYnJlIGRlIGNlcyBmaWNoaWVycyBldCBuZSBzYXZlbnQgcXVvaSBl biBmYWlyZS4gQ2VydGFpbnMgcmVjb21tYW5kZW50IDxhcHBsaWNhdGlvbj5PcGVyYTwvYXBwbGlj YXRpb24+IChqZSBzdXBwb3NlIHF1ZSBxdWVscXVlcyBoZXVyZXMgZW4gY29tcGFnbmllIGRlIEtp cmkgVGUgS2FuYXdhIHNvdWxhZ2VudCB0b3V0ZXMgc29ydGVzIGRlIHN0cmVzcyZuYnNwOy4uLikm bmJzcDs7IGQnYXV0cmVzIG9udCBldSBkZSBsYSBjaGFuY2UgYXZlYyBkaXZlcnMgdXRpbGl0YWly ZXMgZGUgY29udmVyc2lvbi4gSmUgbSd5IHN1aXMgaW5077+977+9cmVzc++/ve+/vSwgZXQgY2Vs YSByZXNzZW1ibGFpdCDvv73vv70gdW4gZW4tdO+/ve+/vXRlIGRlIGNvdXJyaWVyIGTvv73vv71m ZWN0dWV1eC4KPC9wYXJhPgoKPHBhcmE+CkplIG5lIHN1aXMgcGFzIGFsbO+/ve+/vSByZWNoZXJj aGVyIGF1LWRlbO+/ve+/vSBkdSBzZXVsIGZpY2hpZXIgcXVlIGplIHBvc3Pvv73vv71kZSwgbWFp cyB2b2ljaSBjZSBxdWkgZm9uY3Rpb25uZSBjb3JyZWN0ZW1lbnQgcXVhbmQgamUgbCdvdXZyZSZu YnNwOzogCjwvcGFyYT4KCjxwcm9ncmFtbGlzdGluZz4KIyBDb252ZXJ0aXQgbGVzIGZpbnMgZGUg bGlnbmUgYXUgZm9ybWF0IFVuaXgKZmxpcCAtdWIgZmlsZS5taHQKIyBBam91dGUgdW4gZW4tdO+/ ve+/vXRlIGRlIGNvdXJyaWVyIHN0YW5kYXJkICdGcm9tICcgYXUgZmljaGllcgpzZWQgLWkgJzFp XCciJChlY2hvIEZyb20gJFVTRVIgJChkYXRlKSkiIGZpbGUubWh0CiMgVm91cyBkZXZyaWV6IO+/ ve+/vSBwcu+/ve+/vXNlbnQgcG91dm9pciBsJ291dnJpciBhdmVjIHZvdHJlIE1VQSBmYXZvcmkK bXV0dCAtZiBmaWxlLm1odAo8L3Byb2dyYW1saXN0aW5nPgoKPC9zZWN0aW9uPgoKPHNlY3Rpb24g aWQ9InJhcHBlbCI+PHRpdGxlPiAgICBSYXBwZWxzIGdyYXR1aXRzIGV0IHJhcGlkZXMgc3VyIHZv dHJlIHTvv73vv71s77+977+9cGhvbmUgcG9ydGFibGU8L3RpdGxlPgo8cGFyYT4KQ2VjaSBuZSBj b25jZXJuZSBwYXMgdnJhaW1lbnQgPHN5c3RlbWl0ZW0gY2xhc3M9Im9zbmFtZSI+TGludXg8L3N5 c3RlbWl0ZW0+LCBtYWlzIGMnZXN0IHVuZSBhc3R1Y2UgaW5077+977+9cmVzc2FudGUgY2VwZW5k YW50Lgo8L3BhcmE+CjxwYXJhPgpTaSB2b3VzIHV0aWxpc2V6IHVuZSBwYWdlIGQnZW52b2kgZCd1 biBjb3VycmllbCDvv73vv70gdW5lIGRhdGUgdWx077+977+9cmlldXJlICh0ZWxsZSBxdWUgPHVs aW5rIHVybD0iaHR0cDovL3d3dy5mdXR1cmVtZS5vcmcvIj5odHRwOi8vd3d3LmZ1dHVyZW1lLm9y Zy88L3VsaW5rPikgZW4gZW52b3lhbnQgY29uam9pbnRlbWVudCB1biBjb3VycmllbCB2ZXJzIHVu ZSBwYXNzZXJlbGxlIDxhY3JvbnltPnNtczwvYWNyb255bT4gKHZvdXMgcG91dmV6IG9idGVuaXIg dW5lIGxpc3RlIGljaSZuYnNwOzogPHVsaW5rIHVybD0iaHR0cDovL3d3dy5tdXR1YmUuY29tL3By b2plY3RzL29wZW4tZW1haWwtdG8tc21zL2dhdGV3YXktbGlzdC8iPmh0dHA6Ly93d3cubXV0dWJl LmNvbS9wcm9qZWN0cy9vcGVuLWVtYWlsLXRvLXNtcy9nYXRld2F5LWxpc3QvPC91bGluaz4gKSwg dm91cyBwb3V2ZXogZW52b3llciBkZXMgcmFwcGVscyBkZSBmYe+/ve+/vW9uIGxpYnJlIGV0IHJh cGlkZSwgZGlyZWN0ZW1lbnQgc3VyIHZvdHJlIHTvv73vv71s77+977+9cGhvbmUgcG9ydGFibGUg KGV0IGZ1dHVyZW1lIG5lIHZvdXMgZGVtYW5kZSBt77+977+9bWUgcGFzIGRlIHZvdXMgZW5yZWdp c3RyZXIpIAo8L3BhcmE+Cjwvc2VjdGlvbj4KCgo8c2VjdGlvbiBpZD0iaW1hZ2VzIj48dGl0bGU+ ICAgQ29udmVyc2lvbiBkZSBwb2xpY2VzIGRlIGNhcmFjdO+/ve+/vXJlcyBlbiBpbWFnZXM8L3Rp dGxlPgo8cGFyYT4KVm91cyBuZSBsZSBzYXZleiBwZXV0Le+/ve+/vXRyZSBwYXMsIG1haXMgbGVz IGZpY2hpZXJzIDx0cmFkZW1hcmsgY2xhc3M9ImNvcHlyaWdodCI+VHJ1ZVR5cGU8L3RyYWRlbWFy az4gcGV1dmVudCDvv73vv710cmUgdmlzdWFsaXPvv73vv71zIGF2ZWMgbCdhcHBsaWNhdGlvbiA8 YXBwbGljYXRpb24+ZGlzcGxheTwvYXBwbGljYXRpb24+Jm1kYXNoO2NvbW1lIHMnaWwgcydhZ2lz c2FpdCBkJ3VuIGF1dHJlIHR5cGUgZCdpbWFnZS4KPC9wYXJhPgo8cHJvZ3JhbWxpc3Rpbmc+CiNj b252ZXJ0aXIgZm9udF9uYW1lLnR0ZiBlbiBmb250X25hbWUudHRmLmpwZwojaWwgcydhZ2l0IGVu IGfvv73vv71u77+977+9cmFsIGQndW4gZmljaGllciBub21t77+977+9IHR0Zi1jb252ZXJ0Cgog IyEvYmluL2Jhc2gKIHdoaWxlIFsgJCMgLWd0IDAgXTsKIGRvCiBjb252ZXJ0ICQxICQxLmpwZwo8 L3Byb2dyYW1saXN0aW5nPgo8cGFyYT4KTCdvcO+/ve+/vXJhdGlvbiDvv73vv71jaG91ZXJhIG5h dHVyZWxsZW1lbnQsIHNpIGxlIGZpY2hpZXIgZXN0IG5vbW3vv73vv70gPGZpbGVuYW1lPk1TIFZl cmRhbmEudHRmPC9maWxlbmFtZT4sIChub3RleiBsJ2VzcGFjZS4pLiBJbCBlc3QgdG91am91cnMg cHLvv73vv71m77+977+9cmFibGUgZGUgbWV0dHJlIGVuIGd1aWxsZW1ldHMgbGVzIHZhcmlhYmxl cyBlbXBsb3nvv73vv71lcyBlbiBhcmd1bWVudC4KPC9wYXJhPgo8cHJvZ3JhbWxpc3Rpbmc+Cj4g c2hpZnQ7Cj4gZG9uZQo8L3Byb2dyYW1saXN0aW5nPgo8cGFyYT4KSidhaSBwZXVyIHF1ZSBjZSBz b2l0IHVuIG1hdXZhaXMgb3V0aWwgcG91ciBjZSBnZW5yZSBkZSB0cmF2YWlsLiBVbmUgYm91Y2xl IDxjb21tYW5kPndoaWxlPC9jb21tYW5kPiBlc3QgdW4gdGVzdGV1ciBkJ++/ve+/vXRhdCAoYydl c3Qt77+977+9LWRpcmUsIGVsbGUgdu+/ve+/vXJpZmllIHNpIGwn77+977+9dGF0IGVzdCB2cmFp IG91IGZhdXggZXQgZWxsZSBib3VjbGUpJm5ic3A7OyBsYSBib3VjbGUgPGNvbW1hbmQ+Zm9yPC9j b21tYW5kPiBlc3QgdW4gaXTvv73vv71yYXRldXIsIHF1aSBwYXJjb3VydCAoPGZvcmVpZ25waHJh c2U+aXRlcmF0ZXM8L2ZvcmVpZ25waHJhc2U+KSB1bmUgbGlzdGUgZCdhcmd1bWVudHMmbWRhc2g7 Y2UgcXVpIGVzdCBleGFjdGVtZW50IGNlIHF1ZSBsJ29uIGRlbWFuZGUgaWNpLiAKPC9wYXJhPgo8 cHJvZ3JhbWxpc3Rpbmc+CiMgQm91Y2xlIHN1ciBsYSBsaXN0ZSBkZSB0b3VzIGxlcyBhcmd1bWVu dHMgZW4gbGlnbmUgZGUgY29tbWFuZGUKZm9yIGYKZG8KCS91c3IvYmluL2NvbnZlcnQgIiRmIiAi JGYuanBnIgpkb25lCjwvcHJvZ3JhbWxpc3Rpbmc+CjxwYXJhPgombmJzcDsuLi5tYWlzLCBwdWlz cXUnaWwgcydhZ2l0IHZyYWltZW50IGQndW5lIGNvbW1hbmRlIGQndW5lIGxpZ25lLCBqJ2F1cmFp cyBwbHV077+977+9dCB0ZW5kYW5jZSDvv73vv70gc2Fpc2lyJm5ic3A7CjwvcGFyYT4KPHByb2dy YW1saXN0aW5nPgpmb3IgZiBpbiAqdHRmOyBkbyBjb252ZXJ0ICIkZiIgIiRmLmpwZyI7IGRvbmUK PC9wcm9ncmFtbGlzdGluZz4KPHBhcmE+CmVuIGxpZ25lIGRlIGNvbW1hbmRlLgo8L3BhcmE+Cjwv c2VjdGlvbj4KCjxzZWN0aW9uIGlkPSJpbmRleGF0aW9uIj48dGl0bGU+CVVuZSBtYW5p77+977+9 cmUgZmFjaWxlIGRlIHPvv73vv71jdXJpc2VyIGRldXggZmljaGllcnMgb3Ugcu+/ve+/vXBlcnRv aXJlcyBleGFjdGVtZW50IHNlbWJsYWJsZXM8L3RpdGxlPgoKPHBhcmE+ClNpIHZvdXMgYWRtaW5p c3RyZXogdW4gc3lzdO+/ve+/vW1lIDxzeXN0ZW1pdGVtIGNsYXNzPSJvc25hbWUiPkxpbnV4PC9z eXN0ZW1pdGVtPiBhdmVjIHVuZSBwb2xpdGlxdWUgPGFwcGxpY2F0aW9uPlNFTGludXg8L2FwcGxp Y2F0aW9uPiByZW5mb3Jj77+977+9ZSwgdm91cyBzYXZleiBxdWUgbGEgcGx1cGFydCBkdSB0ZW1w cywgdm91cyBkZXZleiBk77+977+9ZmluaXIgdW5lIHBvbGl0aXF1ZSBkZSBz77+977+9Y3VyaXTv v73vv70gcG91ciBjZXJ0YWlucyBmaWNoaWVycyBvdSBy77+977+9cGVydG9pcmVzIGFmaW4gcXVl IGxlcyBk77+977+9bW9ucyBvdSBsZXMgdXRpbGlzYXRldXJzIHB1aXNzZW50IGNvcnJlY3RlbWVu dCB5IGFjY++/ve+/vWRlci4KPC9wYXJhPgo8cGFyYT4KU2kgbGEgdO+/ve+/vWNoZSByZXNzZW1i bGUg77+977+9IDxxdW90ZT5KZSBjcu+/ve+/vWUgdW4gbm91dmVhdSBy77+977+9cGVydG9pcmUg PGZpbGVuYW1lIGNsYXNzPSJkaXJlY3RvcnkiPi92YXIvYXBhY2hlL2h0bWw8L2ZpbGVuYW1lPiBw b3VyIHBsYWNlciBkZXMgZmljaGllcnMgPGFjcm9ueW0+SFRNTDwvYWNyb255bT4gcG91ciBtb24g bm91dmVsIGjvv73vv710ZSB2aXJ0dWVsIHNvdXMgPGFwcGxpY2F0aW9uPkFwYWNoZTwvYXBwbGlj YXRpb24+PC9xdW90ZT4sIHZvdXMgZGV2ZXog77+977+9dGFibGlyIGxhIG3vv73vv71tZSBwb2xp dGlxdWUgZGUgc++/ve+/vWN1cml077+977+9IHBvdXIgPGZpbGVuYW1lIGNsYXNzPSJkaXJlY3Rv cnkiPi92YXIvYXBhY2hlL2h0bWw8L2ZpbGVuYW1lPiBxdWUgcG91ciA8ZmlsZW5hbWUgY2xhc3M9 ImRpcmVjdG9yeSI+L3Zhci93d3cvaHRtbDwvZmlsZW5hbWU+IChlbiBzdXBwb3NhbnQgcXUnaWwg cydhZ2l0IGR1IHLvv73vv71wZXJ0b2lyZSByYWNpbmUgPGZvcmVpZ25waHJhc2U+RG9jdW1lbnRS b290PC9mb3JlaWducGhyYXNlPiBwYXIgZO+/ve+/vWZhdXQgZCc8YXBwbGljYXRpb24+QXBhY2hl PC9hcHBsaWNhdGlvbj4pLiBDZXR0ZSBjb21tYW5kZSBmYWl0IGxlIG7vv73vv71jZXNzYWlyZSDv v73vv70gdm90cmUgcGxhY2UmbmJzcDs6CjwvcGFyYT4KPHNjcmVlbj4KPGNvbW1hbmQ+CiMgY2hj b24gLS1yZWZlcmVuY2U9L3Zhci93d3cvaHRtbCAvdmFyL2FwYWNoZS9odG1sCjwvY29tbWFuZD4K PC9zY3JlZW4+Cgo8cGFyYT4KUG91ciBkZXMgaW5mb3JtYXRpb25zIHN1cHBs77+977+9bWVudGFp cmVzLCA8Y29tbWFuZD5jaG1vZDwvY29tbWFuZD4gZXQgPGNvbW1hbmQ+Y2hvd248L2NvbW1hbmQ+ IHV0aWxpc2VudCDvv73vv71nYWxlbWVudCBsYSBt77+977+9bWUgb3B0aW9uLCBwYXIgZXhlbXBs ZSZuYnNwOzoKPC9wYXJhPgo8c2NyZWVuPgo8Y29tbWFuZD4KIyBjaG1vZCAtLXJlZmVyZW5jZT0v dmFyL3d3dy9odG1sIC92YXIvYXBhY2hlL2h0bWwKPC9jb21tYW5kPgo8L3NjcmVlbj4KCjxwYXJh Pgpk77+977+9ZmluaXNzZXogZXhhY3RlbWVudCBsZXMgbe+/ve+/vW1lcyBwZXJtaXNzaW9ucyBk J2FjY++/ve+/vXMgcG91ciBsZXMgZGV1eCBy77+977+9cGVydG9pcmVzLgo8L3BhcmE+Cjwvc2Vj dGlvbj4KCgo8c2VjdGlvbiBpZD0ic3RyYXRlZ2llIj48dGl0bGU+ICAgIFF1ZWwgZXN0IGxlIG5v bSBkZSBjZSA8Zm9yZWlnbnBocmFzZT5zY3JpcHQ8L2ZvcmVpZ25waHJhc2U+IChjYWNo77+977+9 KSZuYnNwOz88L3RpdGxlPgo8cGFyYT4KQXUgZmlsIGRlcyBhbnMsIGonYWkg77+977+9Y3JpdCBk ZXMgY2VudGFpbmVzIGRlIDxmb3JlaWducGhyYXNlPnNjcmlwdHM8L2ZvcmVpZ25waHJhc2U+IHBv dXIgbSdhaWRlciBkYW5zIGRpdmVyc2VzIHTvv73vv71jaGVzLiBOb21icmUgZCdlbnRyZSBldXgg c29udCBlbmNvcmUgdHLvv73vv71zIHV0aWxlcyZtZGFzaDttYWlzIHBldXQt77+977+9dHJlIG1h IG3vv73vv71tb2lyZSBuJ2VzdCBwbHVzIGNlIHF1J2VsbGUg77+977+9dGFpdCBvdSBwZXV0Le+/ ve+/vXRyZSBqJ2FpIHRyb3AgZGUgY2hvc2VzIO+/ve+/vSBnYXJkZXIgZW4gdO+/ve+/vXRlLCBt YWlzIGplIG1lIHN1aXMgc291dmVudCB2dSBlbiB0cmFpbiBkZSBjaGVyY2hlciBldCBkZSBwZXN0 ZXIgcXVhbmQgamUgbmUgcG91dmFpcyBwYXMgdHJvdXZlciBsZSA8Zm9yZWlnbnBocmFzZT5zY3Jp cHQ8L2ZvcmVpZ25waHJhc2U+IGRvbnQgaidhdmFpcyBiZXNvaW4gZXQgcXVlIGplIHNhdmFpcyBh dm9pciBk77+977+9au+/ve+/vSDvv73vv71jcml0LiBUcm9wIGRlIDxmb3JlaWducGhyYXNlPnNj cmlwdHM8L2ZvcmVpZ25waHJhc2U+Jm5ic3A7IQo8L3BhcmE+Cgo8cGFyYT4KUG91ciByZW3vv73v v71kaWVyIO+/ve+/vSBjZWxhLCBqJ2FpIGNvbW1lbmPvv73vv70g77+977+9IGNvcGllciBxdWVs cXVlIGNob3NlIHF1ZSBqJ2FpIGTvv73vv71q77+977+9IGZhaXQgYWlsbGV1cnMuIFF1YW5kIGon ZW5zZWlnbmUsIGplIGRvbm5lIO+/ve+/vSBtZXMg77+977+9bO+/ve+/vXZlcyB1biBlbnNlbWJs ZSBkZSA8Zm9yZWlnbnBocmFzZT5zY3JpcHRzPC9mb3JlaWducGhyYXNlPiBxdWUgaidhaSBtaXMg ZW4gcGxhY2UgcG91ciBjaGFxdWUgY2xhc3NlJm1kYXNoOwpldCBkYW5zIGNoYWN1biBkZSBjZXMg PGZvcmVpZ25waHJhc2U+c2NyaXB0czwvZm9yZWlnbnBocmFzZT4sIGonaW5z77+977+9cmUgdW4g Y29tbWVudGFpcmUgZCdleHBsaWNhdGlvbiDvv73vv70gbGEgbGlnbmUmbmJzcDszICgxIGVzdCBw b3VyIGxlIDxmb3JlaWducGhyYXNlPnNoZWJhbmc8L2ZvcmVpZ25waHJhc2U+LCBwZW5kYW50IHF1 ZSAyIGVzdCB1biBjb21tZW50YWlyZSBmYWlzYW50IG1lbnRpb24gZGUgbCdhdXRldXIgZXQgdW5l IGVzdGFtcGlsbGUgdGVtcG9yZWxsZS4pIEonZXNzYWllIGRlIHRyb3V2ZXIgZGVzIG1vdHMtY2zv v73vv71zIHF1aSBzZXJvbnQg77+977+9dmlkZW50cyBt77+977+9bWUgc2kgamUgbmUgbWUgc291 dmllbnMgcGx1cyBkZSBjZSBxdWUgaidhaSDvv73vv71jcml0IG9yaWdpbmFsZW1lbnQuIEonYWkg YXVzc2kgYWpvdXTvv73vv70gdW4gPGZvcmVpZ25waHJhc2U+c2NyaXB0PC9mb3JlaWducGhyYXNl PiA8Zm9yZWlnbnBocmFzZT5SRUFETUU8L2ZvcmVpZ25waHJhc2U+IHF1aSBwcu+/ve+/vXNlbnRl IGxhIHRyb2lzae+/ve+/vW1lIGxpZ25lIGRlIGNoYXF1ZSBmaWNoaWVyIGRhbnMgbGUgcu+/ve+/ vXBlcnRvaXJlLiBJbCBleGlzdGUgbe+/ve+/vW1lIHVuZSBt77+977+9dGhvZGUgcG91ciBpZ25v cmVyIGRlcyBmaWNoaWVycyBldCBham91dGVyIHZvcyBwcm9wcmVzIGRlc2NyaXB0aW9ucyAoZXNz YXllciBkJ++/ve+/vXZpdGVyIGNlcyBkZXJuae+/ve+/vXJlcywgcG91ciBkZXMgcmFpc29ucyDv v73vv712aWRlbnRlcy4pCjwvcGFyYT4KPHBhcmE+CkRvbmMsIHRvdXQgY2UgcXVlIHZvdXMgZGV2 ZXogZmFpcmUgZXN0IGRlIHByZW5kcmUgbCdoYWJpdHVkZSBkZSBjb21tZW50ZXIgY2xhaXJlbWVu dCB2b3MgPGZvcmVpZ25waHJhc2U+c2NyaXB0czwvZm9yZWlnbnBocmFzZT4gbm90YW1tZW50IO+/ ve+/vSBsYSB0cm9pc2nvv73vv71tZSBsaWduZS4gVW5lIGZvaXMgY2VjaSBmYWl0LCBjZSBwZXRp dCA8Zm9yZWlnbnBocmFzZT5zY3JpcHQ8L2ZvcmVpZ25waHJhc2U+IHZvdXMgcGVybWV0dHJhIGQn 77+977+9Y29ub21pc2VyIGJlYXVjb3VwIGRlIHRlbXBzIGV0IGRlIGZydXN0cmF0aW9uLiAKPC9w YXJhPgoKPHByb2dyYW1saXN0aW5nPgojIS9iaW4vc2gKIyBDcu+/ve+/vWUgcGFyIEJlbiBPa29w bmlrIGxlIGRpbWFuY2hlIDEwIETvv73vv71jZW1icmUKIyBFeO+/ve+/vWN1dGV6IGNlIHNjcmlw dCBwb3VyIGFmZmljaGVyIGxlcyBkZXNjcmlwdGlvbnMgZGUgdG91cyBsZXMgZmljaGllcnMgZGFu cyBjZSBy77+977+9cGVydG9pcmUKIApyZWplY3Q9J2Eub3V0IHJlZ2V4LjcgYWNjZXNzLmxvZycK cHJpbnRmICIlLTI1cyVzXG4iICJyZWdleC43IiAgICAiIyBIZW5yeSBTcGVuY2VyJ3MgcmVndWxh ciBleHByZXNzaW9ucyIKcHJpbnRmICIlLTI1cyVzXG4iICJhY2Nlc3MubG9nIiAiIyBUeXBpY2Fs IEFwYWNoZSBsb2cgZmlsZSIKIApmb3IgbiBpbiAqCmRvCiAgICBbIC1mICIkbiIgLWEgLXogImBl Y2hvICRyZWplY3R8Z3JlcCBcIlwmIzYwOyRuXD5cImAiIF0gfHwgY29udGludWUKICAgIHByaW50 ZiAiJS0yNXMlc1xuIiAiJG4iICJgL2Jpbi9zZWQgLW4gJzNwJyBcIiRuXCJgIgpkb25lCjwvcHJv Z3JhbWxpc3Rpbmc+Cgo8YmxvY2txdW90ZT4KPHBhcmE+CkJlbiBlc3QgbGUgcu+/ve+/vWRhY3Rl dXIgZW4gY2hlZiBkZSBsYSA8dHJhZGVtYXJrIGNsYXNzPSJjb3B5cmlnaHQiPjx1bGluayB1cmw9 Imh0dHA6Ly9saW51eGdhemV0dGUubmV0Ij5MaW51eCBHYXpldHRlPC91bGluaz48L3RyYWRlbWFy az4gZXQgaWwgZXN0IG1lbWJyZSBkZSBsJyZsYXF1bzsmbmJzcDs8dHJhZGVtYXJrIGNsYXNzPSJj b3B5cmlnaHQiPkFuc3dlciBHYW5nPC90cmFkZW1hcms+Jm5ic3A7JnJhcXVvOy4KPC9wYXJhPgoK PHBhcmE+CkJlbiBlc3Qgbu+/ve+/vSDvv73vv70gTW9zY291IGVuIFJ1c3NpZSBlbiAxOTYyLiBJ bCBhIGNvbW1lbmPvv73vv70g77+977+9IHMnaW5077+977+9cmVzc2VyIO+/ve+/vSBsJ++/ve+/ vWxlY3RyaWNpdO+/ve+/vSBk77+977+9cyBsJ++/ve+/vWdlIGRlIDYgYW5zIGVuIGVuZm9u77+9 77+9YW50IHVuZSBmb3VyY2hldHRlIGRhbnMgdW5lIHByaXNlIGV0IGTvv73vv71jbGVuY2hhbnQg YWluc2kgdW4gaW5jZW5kaWUsIGRlcHVpcyBpbCBuJ2EgamFtYWlzIGNlc3Pvv73vv70gZGUgcydp bnTvv73vv71yZXNzZXIg77+977+9IGxhIHRlY2hub2xvZ2llLiBJbCB0cmF2YWlsbGUgYXZlYyBs ZXMgb3JkaW5hdGV1cnMgZGVwdWlzIGxlcyBUZW1wcyBBbmNpZW5zIG/vv73vv70gbCdvbiBkZXZh aXQgc291ZGVyIHNvaS1t77+977+9bWUgZGVzIGNvbXBvc2FudHMgc3VyIGRlcyBjYXJ0ZXMg77+9 77+9IGNpcmN1aXRzIGltcHJpbe+/ve+/vXMgZXQgb++/ve+/vSBsZXMgcHJvZ3JhbW1lcyBkZXZh aWVudCB0ZW5pciBkYW5zIDQmbmJzcDtrbyBkZSBt77+977+9bW9pcmUuIElsIHNlcmFpdCBoZXVy ZXV4IGRlIHBheWVyIHRvdXQgcHN5Y2hvbG9ndWUgY2FwYWJsZSBkZSBsZSBnde+/ve+/vXJpciBk ZXMgY2F1Y2hlbWFycyBy77+977+9Y3VycmVudHMgcXUnaWwgYSBnYXJk77+977+9cyBkZSBjZXR0 ZSDvv73vv71wb3F1ZS4KPC9wYXJhPgoKPHBhcmE+ClNlcyBleHDvv73vv71yaWVuY2VzIHN1aXZh bnRlcyBjb21wcmVubmVudCBsYSBjcu+/ve+/vWF0aW9uIGRlIHByb2dyYW1tZXMgZGFucyBwcmF0 aXF1ZW1lbnQgdW5lIGRvdXphaW5lIGRlIGxhbmdhZ2VzLCBsYSBtYWludGVuYW5jZSBkZSBy77+9 77+9c2VhdXggZXQgZGUgYmFzZXMgZGUgZG9ubu+/ve+/vWVzIHBlbmRhbnQgbCdhcHByb2NoZSBk J3VuIG91cmFnYW4gZXQgbCfvv73vv71jcml0dXJlIGQnYXJ0aWNsZXMgcG91ciBkZXMgcHVibGlj YXRpb25zIGFsbGFudCBkZXMgbWFnYXppbmVzIGRlIHZvaWxlIGF1eCBqb3VybmF1eCB0ZWNobm9s b2dpcXVlcy4gQXBy77+977+9cyB1bmUgY3JvaXNp77+977+9cmUgZGUgNyZuYnNwO2FucyBkYW5z IGwnQXRsYW50aXF1ZSBldCBsZXMgQ2FyYe+/ve+/vWJlcyBhaW5zaSBxdWUgZGVzIHBhc3NhZ2Vz IHN1ciBsYSBj77+977+9dGUgRXN0IGRlcyDvv73vv710YXRzLVVuaXMsIGlsIGEgZO+/ve+/vXNv cm1haXMgamV077+977+9IGwnYW5jcmUg77+977+9IFN0LUF1Z3VzdGluZSwgZW4gRmxvcmlkZS4g SW5zdHJ1Y3RldXIgdGVjaG5pcXVlIGNoZXogPHRyYWRlbWFyayBjbGFzcz0iY29weXJpZ2h0Ij5T dW4gTWljcm9zeXN0ZW1zPC90cmFkZW1hcms+LCBpbCB0cmF2YWlsbGUg77+977+9Z2FsZW1lbnQg 77+977+9IHRpdHJlIHByaXbvv73vv70gY29tbWUgY29uc3VsdGFudCA8Zm9yZWlnbnBocmFzZT5v cGVuIHNvdXJjZTwvZm9yZWlnbnBocmFzZT4gZXQgZO+/ve+/vXZlbG9wcGV1ciB3ZWIuIFNlcyBw YXNzZS10ZW1wcyBhY3R1ZWxzIHNvbnQgbm90YW1tZW50IGwnYXZpYXRpb24sIGxlIHlvZ2EsIGxl cyBhcnRzIG1hcnRpYXV4LCBsYSBtb3RvLCBsJ++/ve+/vWNyaXR1cmUgZXQgbCdoaXN0b2lyZSBy b21haW5lLiBTb24gPHRyYWRlbWFyayBjbGFzcz0iY29weXJpZ2h0Ij5QYWxtIFBpbG90PC90cmFk ZW1hcms+IGVzdCB0cnVmZu+/ve+/vSBkJ2FsYXJtZXMgZG9udCBsYSBwbHVwYXJ0IGNvbnRpZW5u ZW50IGRlcyBwb2ludHMgZCdleGNsYW1hdGlvbi4KPC9wYXJhPgo8L2Jsb2NrcXVvdGU+CgoKPC9z ZWN0aW9uPgoKPGNvbG9waG9uIGlkPSJhZGFwdCI+PHRpdGxlPkFkYXB0YXRpb24gZnJhbu+/ve+/ vWFpc2UgZGUgbGEgR2F6ZXR0ZSZuYnNwO0xpbnV4PC90aXRsZT4KCjxwYXJhPgpMJ2FkYXB0YXRp b24gZnJhbu+/ve+/vWFpc2UgZGUgY2UgZG9jdW1lbnQgYSDvv73vv71077+977+9IHLvv73vv71h bGlz77+977+9ZSBkYW5zIGxlIGNhZHJlIGR1IDxjaXRldGl0bGU+UHJvamV0IGRlIHRyYWR1Y3Rp b24gZGUgbGEgR2F6ZXR0ZSZuYnNwO0xpbnV4PC9jaXRldGl0bGU+Lgo8L3BhcmE+Cgo8cGFyYT4K Vm91cyBwb3VycmV6IGxpcmUgZCdhdXRyZXMgYXJ0aWNsZXMgdHJhZHVpdHMgZXQgZW4gYXBwcmVu ZHJlIHBsdXMgc3VyIGNlIHByb2pldCBlbiB2aXNpdGFudCBub3RyZSBzaXRlJm5ic3A7OiA8dWxp bmsgdXJsPSJodHRwOi8vd2lraS50cmFkdWMub3JnL0dhemV0dGVfTGludXgiLz4uCjwvcGFyYT4K CjxwYXJhPgpTaSB2b3VzIHNvdWhhaXRleiBhcHBvcnRlciB2b3RyZSBjb250cmlidXRpb24sIG4n aO+/ve+/vXNpdGV6IHBhcyDvv73vv70gbm91cyByZWpvaW5kcmUsIG5vdXMgc2Vyb25zIGhldXJl dXggZGUgdm91cyBhY2N1ZWlsbGlyLgo8L3BhcmE+CjwvY29sb3Bob24+Cgo8L2FydGljbGU+Cg== --===============8336392118233405215==--