Nov
DEC
Jan
12
2019
2020
2021
About this capture
Organization:
Internet Archive
Focused crawls are collections of frequently-updated webcrawl data from narrow (as opposed to broad or wide) web crawls, often focused on a single domain or subdomain.
T h e W a y b a c k M a c h i n e - h t t p : / / w e b . a r c h i v e . o r g / w e b / 2 0 2 0 1 2 1 2 0 7 4 1 1 7 / h t t p s : / / g i t h u b . c o m / c r o s s b a r i o / a u t o b a h n - p y t h o n
S k i p t o c o n t e n t
/ ; r e f _ c t a : S i g n u p ; r e f _ l o c : h e a d e r l o g g e d o u t " >
S i g n up
●
F e a t u r e s →
● C o d e r e v i e w
● P r o j e c t m a n a g e m e n t
● I n t e g r a t i o n s
● A c t i o n s
● P a c k a g e s
● S e c u r i t y
● T e a m m a n a g e m e n t
● H o s t i n g
● M o b i l e
● C u s t o m e r s t o r i e s →
● S e c u r i t y →
●
●
●
● E x p l o r e G i t H u b →
L e a r n & c o n t r i b u t e
● T o p i c s
● C o l l e c t i o n s
● T r e n d i n g
● L e a r n i n g L a b
● O p e n s o u r c e g u i d e s
C o n n e c t w i t h o t h e r s
● E v e n t s
● C o m m u n i t y f o r u m
● G i t H u b E d u c a t i o n
● G i t H u b S t a r s p r o g r a m
●
●
P l a n s →
● C o m p a r e p l a n s
● C o n t a c t S a l e s
● N o n p r o f i t →
● E d u c a t i o n →
In this repository
All GitHub
↵
Jump to
↵
No suggested jump to results
{ { m e s s a g e } }
●
W a t c h
1 0 5
●
S t a r
2 . 2 k
●
F o r k
6 2 4
W e b S o c k e t a n d W A M P i n P y t h o n f o r T w i s t e d a n d a s y n c i o
c r o s s b a r . i o / a u t o b a h n
M I T L i c e n s e
2 . 2 k
s t a r s
6 2 4
f o r k s
S t a r
W a t c h
●
C o d e
●
I s s u e s
1 6 2
●
P u l l r e q u e s t s
2
●
A c t i o n s
●
P r o j e c t s
0
●
W i k i
●
S e c u r i t y
●
I n s i g h t s
M o r e
●
C o d e
●
I s s u e s
●
P u l l r e q u e s t s
●
A c t i o n s
●
P r o j e c t s
●
W i k i
●
S e c u r i t y
●
I n s i g h t s
D i s m i s s
J o i n G i t H u b t o d a y
G i t H u b i s h o m e t o o v e r 5 0 m i l l i o n d e v e l o p e r s w o r k i n g t o g e t h e r t o h o s t a n d r e v i e w c o d e , m a n a g e p r o j e c t s , a n d b u i l d s o f t w a r e t o g e t h e r .
S i g n u p
G i t H u b i s w h e r e t h e w o r l d b u i l d s s o f t w a r e
M i l l i o n s o f d e v e l o p e r s a n d c o m p a n i e s b u i l d , s h i p , a n d m a i n t a i n t h e i r s o f t w a r e o n G i t H u b — t h e l a r g e s t a n d m o s t a d v a n c e d d e v e l o p m e n t p l a t f o r m i n t h e w o r l d .
S i g n u p f o r f r e e
D i s m i s s
4
b r a n c h e s
1 3 4
t a g s
G o t o f i l e
C o d e
C l o n e
U s e G i t o r c h e c k o u t w i t h S V N u s i n g t h e w e b U R L .
W o r k f a s t w i t h o u r o f f i c i a l C L I .
L e a r n m o r e .
●
O p e n w i t h G i t H u b D e s k t o p
●
D o w n l o a d Z I P
L a u n c h i n g G i t H u b D e s k t o p
I f n o t h i n g h a p p e n s , d o w n l o a d G i t H u b D e s k t o p a n d t r y a g a i n .
G o b a c k
L a u n c h i n g G i t H u b D e s k t o p
I f n o t h i n g h a p p e n s , d o w n l o a d G i t H u b D e s k t o p a n d t r y a g a i n .
G o b a c k
L a u n c h i n g X c o d e
I f n o t h i n g h a p p e n s , d o w n l o a d X c o d e a n d t r y a g a i n .
G o b a c k
L a u n c h i n g V i s u a l S t u d i o
I f n o t h i n g h a p p e n s , d o w n l o a d t h e G i t H u b e x t e n s i o n f o r V i s u a l S t u d i o a n d t r y a g a i n .
G o b a c k
L a t e s t c o m m i t
G i t s t a t s
●
3 , 1 8 4
c o m m i t s
F i l e s
P e r m a l i n k
F a i l e d t o l o a d l a t e s t c o m m i t i n f o r m a t i o n .
T y p e
N a m e
L a t e s t c o m m i t m e s s a g e
C o m m i t t i m e
a u t o b a h n
W A M P I D L ( p a r t 2 ) ( # 1 4 3 2 )
D e c 1 2 , 2 0 2 0
d o c k e r
a u t o b a h n 2 0 . 1 . 1 + o n l y s u p p o r t s p y t h o n 3 - u p d a t e d o c k e r i m a g e b u i l d s … (
J a n 1 9 , 2 0 2 0
d o c s
w a m p i d l ( # 1 4 2 6 )
D e c 8 , 2 0 2 0
e x a m p l e s
h o o k i n g ( # 1 3 3 3 )
T h e r e i s a s m a l l t y p o i n e x a m p l e s / t w i s t e d / w a m p / w o r k / n e w a p i / t e s t _ n e w a p i 1 1 . p y .
S h o u l d r e a d ` h o o k i n g ` r a t h e r t h a n ` h o o k i n h ` . " c l a s s = " l i n k - g r a y " h r e f = " / w e b / 2 0 2 0 1 2 1 2 0 7 4 1 1 7 / h t t p s : / / g i t h u b . c o m / c r o s s b a r i o / a u t o b a h n - p y t h o n / c o m m i t / c 9 3 a a b 6 5 e e 7 d a 6 0 f f 6 5 e c 4 4 8 9 0 6 6 6 1 6 1 c 6 5 d 8 5 1 6 " > F i x s i m p l e t y p o : h o o k i n h - > h o o k i n g ( # 1 3 3 3 h o o k i n g ( # 1 3 3 3 )
T h e r e i s a s m a l l t y p o i n e x a m p l e s / t w i s t e d / w a m p / w o r k / n e w a p i / t e s t _ n e w a p i 1 1 . p y .
S h o u l d r e a d ` h o o k i n g ` r a t h e r t h a n ` h o o k i n h ` . " c l a s s = " l i n k - g r a y " h r e f = " / w e b / 2 0 2 0 1 2 1 2 0 7 4 1 1 7 / h t t p s : / / g i t h u b . c o m / c r o s s b a r i o / a u t o b a h n - p y t h o n / c o m m i t / c 9 3 a a b 6 5 e e 7 d a 6 0 f f 6 5 e c 4 4 8 9 0 6 6 6 1 6 1 c 6 5 d 8 5 1 6 " > )
M a r 1 , 2 0 2 0
t w i s t e d / p l u g i n s
M o r e p y 2 r e m o v a l ( # 1 2 8 6 )
J a n 1 0 , 2 0 2 0
w s t e s t
r e m o v e A B s n a p ( d o e s n t w o r k w i t h v e n v s ) ; i m p r o v e w s t e s t m a k e f i l e
N o v 1 4 , 2 0 2 0
. c o v e r a g e r c
a d d f l a t b u f f e r s b i t s ; f i x c o v e r a g e / t o x ( # 1 1 3 5 )
M a r 1 5 , 2 0 1 9
. g i t i g n o r e
F i x 1 3 4 9 ( # 1 3 5 0 )
M a r 2 8 , 2 0 2 0
. t r a v i s - d e p l o y . s h
S e s s i o n d e t a i l s p e e r t r a n s p o r t ( # 1 3 5 2 )
M a r 3 0 , 2 0 2 0
. t r a v i s . y m l
" c l a s s = " l i n k - g r a y " h r e f = " / w e b / 2 0 2 0 1 2 1 2 0 7 4 1 1 7 / h t t p s : / / g i t h u b . c o m / c r o s s b a r i o / a u t o b a h n - p y t h o n / c o m m i t / b 0 1 9 c 5 9 0 1 8 1 9 e 3 3 3 3 8 1 c d 0 5 7 0 4 7 a 3 6 c 5 b 0 0 6 7 8 e 9 " > T i c k e t 1 3 9 2 i n t e r n a l a t t r s ( # 1 3 9 4 " c l a s s = " l i n k - g r a y " h r e f = " / w e b / 2 0 2 0 1 2 1 2 0 7 4 1 1 7 / h t t p s : / / g i t h u b . c o m / c r o s s b a r i o / a u t o b a h n - p y t h o n / c o m m i t / b 0 1 9 c 5 9 0 1 8 1 9 e 3 3 3 3 8 1 c d 0 5 7 0 4 7 a 3 6 c 5 b 0 0 6 7 8 e 9 " > )
J u n 1 7 , 2 0 2 0
. v e r s i o n s . s h
m o r e l o g g i n g ; f i x v e r s i o n . s h ( # 1 3 6 3 )
A p r 1 7 , 2 0 2 0
D E V E L O P E R S . m d
M o r e p y 2 r e m o v a l ( # 1 2 8 6 )
J a n 1 0 , 2 0 2 0
L I C E N S E
c o p y r i g h t s t r a n s f e r r e d f r o m T a v e n d o t o C r o s s b a r . i o T e c h n o l o g i e s
N o v 7 , 2 0 1 6
M A N I F E S T . i n
m o v e d f r o m x b r / x b r - p r o t o c o l ( # 1 2 0 3 )
J u n 4 , 2 0 1 9
M a k e f i l e
i m p r o v e c l i d o c s ; s o m e o t h e r x b r b i t s ( # 1 3 8 2 )
M a y 1 2 , 2 0 2 0
R E A D M E . r s t
F i x l i n k i n R E A D M E ( # 1 3 8 1 )
M a y 6 , 2 0 2 0
r e a d t h e d o c s . y m l
t r y f i x # 1 3 4 2
S e p 3 0 , 2 0 2 0
r e q u i r e m e n t s - r t d . t x t
e x p a n d X B R C L I a n d a d j u s t f o r X B R 2 0 . 5 . 1 ( # 1 3 8 7 )
J u n 8 , 2 0 2 0
s e t u p . c f g
R e l 1 7 9 1 ( # 8 8 9 )
S e p 4 , 2 0 1 7
s e t u p . p y
w a m p i d l ( # 1 4 2 6 )
D e c 8 , 2 0 2 0
t o x . i n i
w a m p i d l ( # 1 4 2 6 )
D e c 8 , 2 0 2 0
V i e w c o d e
R E A D M E . r s t
A u t o b a h n | P y t h o n
W e b S o c k e t & W A M P f o r P y t h o n o n T w i s t e d a n d a s y n c i o .
Q u i c k L i n k s : S o u r c e C o d e - D o c u m e n t a t i o n - W e b S o c k e t E x a m p l e s - W A M P E x a m p l e s
C o m m u n i t y : M a i l i n g l i s t - S t a c k O v e r f l o w - T w i t t e r - I R C # a u t o b a h n / c h a t . f r e e n o d e . n e t
C o m p a n i o n P r o j e c t s : A u t o b a h n | J S - A u t o b a h n | C p p - A u t o b a h n | T e s t s u i t e - C r o s s b a r . i o - W A M P
I n t r o d u c t i o n
A u t o b a h n | P y t h o n i s a s u b p r o j e c t o f A u t o b a h n a n d p r o v i d e s o p e n - s o u r c e
i m p l e m e n t a t i o n s o f
● T h e W e b S o c k e t P r o t o c o l
● T h e W e b A p p l i c a t i o n M e s s a g i n g P r o t o c o l ( W A M P )
f o r P y t h o n 3 . 5 + a n d r u n n i n g o n T w i s t e d a n d a s y n c i o .
Y o u c a n u s e A u t o b a h n | P y t h o n t o c r e a t e c l i e n t s a n d s e r v e r s i n P y t h o n s p e a k i n g j u s t p l a i n W e b S o c k e t o r W A M P .
W e b S o c k e t a l l o w s b i d i r e c t i o n a l r e a l - t i m e m e s s a g i n g o n t h e W e b a n d b e y o n d , w h i l e W A M P a d d s r e a l - t i m e a p p l i c a t i o n c o m m u n i c a t i o n o n t o p o f W e b S o c k e t .
W A M P p r o v i d e s a s y n c h r o n o u s R e m o t e P r o c e d u r e C a l l s a n d P u b l i s h & S u b s c r i b e f o r a p p l i c a t i o n s i n o n e p r o t o c o l r u n n i n g o v e r W e b S o c k e t . W A M P i s a r o u t e d p r o t o c o l , s o y o u n e e d a W A M P R o u t e r t o c o n n e c t y o u r A u t o b a h n | P y t h o n b a s e d c l i e n t s . W e p r o v i d e C r o s s b a r . i o , b u t t h e r e a r e o t h e r o p t i o n s a s w e l l .
N o t e
A u t o b a h n | P y t h o n u p t o v e r s i o n v 1 9 . 1 1 . 2 a l s o s u p p o r t e d P y t h o n 2 a n d 3 . 4 + .
F e a t u r e s
● f r a m e w o r k f o r W e b S o c k e t a n d W A M P c l i e n t s a n d s e r v e r s
● r u n s o n C P y t h o n , P y P y a n d J y t h o n
● r u n s u n d e r T w i s t e d a n d a s y n c i o - i m p l e m e n t s W e b S o c k e t
R F C 6 4 5 5 a n d D r a f t H y b i - 1 0 +
● i m p l e m e n t s W e b S o c k e t c o m p r e s s i o n
● i m p l e m e n t s W A M P , t h e W e b A p p l i c a t i o n M e s s a g i n g P r o t o c o l
● h i g h - p e r f o r m a n c e , f u l l y a s y n c h r o n o u s i m p l e m e n t a t i o n
● b e s t - i n - c l a s s s t a n d a r d s c o n f o r m a n c e ( 1 0 0 % s t r i c t p a s s e s w i t h A u t o b a h n T e s t s u i t e : C l i e n t S e r v e r )
● m e s s a g e - , f r a m e - a n d s t r e a m i n g - A P I s f o r W e b S o c k e t
● s u p p o r t s T L S ( s e c u r e W e b S o c k e t ) a n d p r o x i e s
● O p e n - s o u r c e ( M I T l i c e n s e )
S h o w m e s o m e c o d e
T o g i v e y o u a f i r s t i m p r e s s i o n , h e r e a r e t w o e x a m p l e s . W e h a v e l o t m o r e i n t h e r e p o .
W e b S o c k e t E c h o S e r v e r
H e r e i s a s i m p l e W e b S o c k e t E c h o S e r v e r t h a t w i l l e c h o b a c k a n y W e b S o c k e t
m e s s a g e r e c e i v e d :
from autobahn .twisted .websocket import WebSocketServerProtocol
# or: from autobahn.asyncio.websocket import WebSocketServerProtocol
class MyServerProtocol (WebSocketServerProtocol ):
def onConnect (self , request ):
print ("Client connecting: {}" .format (request .peer ))
def onOpen (self ):
print ("WebSocket connection open." )
def onMessage (self , payload , isBinary ):
if isBinary :
print ("Binary message received: {} bytes" .format (len (payload )))
else :
print ("Text message received: {}" .format (payload .decode ('utf8' )))
# echo back message verbatim
self .sendMessage (payload , isBinary )
def onClose (self , wasClean , code , reason ):
print ("WebSocket connection closed: {}" .format (reason ))
T o a c t u a l l y r u n a b o v e s e r v e r p r o t o c o l , y o u n e e d s o m e l i n e s o f b o i l e r p l a t e .
W A M P A p p l i c a t i o n C o m p o n e n t
H e r e i s a W A M P A p p l i c a t i o n C o m p o n e n t t h a t p e r f o r m s a l l f o u r t y p e s o f
a c t i o n s t h a t W A M P p r o v i d e s :
(一) s u b s c r i b e t o a t o p i c
(二) p u b l i s h a n e v e n t
(三) r e g i s t e r a p r o c e d u r e
(四) c a l l a p r o c e d u r e
from autobahn .twisted .wamp import ApplicationSession
# or: from autobahn.asyncio.wamp import ApplicationSession
class MyComponent (ApplicationSession ):
@inlineCallbacks
def onJoin (self , details ):
# 1. subscribe to a topic so we receive events
def onevent (msg ):
print ("Got event: {}" .format (msg ))
yield self .subscribe (onevent , 'com.myapp.hello' )
# 2. publish an event to a topic
self .publish ('com.myapp.hello' , 'Hello, world!' )
# 3. register a procedure for remote calling
def add2 (x , y ):
return x + y
self .register (add2 , 'com.myapp.add2' )
# 4. call a remote procedure
res = yield self .call ('com.myapp.add2' , 2 , 3 )
print ("Got result: {}" .format (res ))
A b o v e c o d e w i l l w o r k o n T w i s t e d a n d a s y n c i o b y c h a n g i n g a s i n g l e l i n e
( t h e b a s e c l a s s o f M y C o m p o n e n t ) . T o a c t u a l l y r u n a b o v e a p p l i c a t i o n c o m p o n e n t , y o u n e e d s o m e l i n e s o f b o i l e r p l a t e a n d a W A M P R o u t e r .
E x t e n s i o n s
N e t w o r k i n g f r a m e w o r k
A u t o b a h n r u n s o n b o t h T w i s t e d a n d a s y n c i o . T o s e l e c t t h e r e s p e c t i v e n e t o w o r k i n g f r a m e w o r k , i n s t a l l f l a v o r :
● a s y n c i o : I n s t a l l a s y n c i o ( w h e n o n P y t h o n 2 , o t h e r w i s e i t ' s i n c l u d e d i n t h e s t a n d a r d l i b r a r y a l r e a d y ) a n d a s y n c i o s u p p o r t i n A u t o b a h n
● t w i s t e d : I n s t a l l T w i s t e d a n d T w i s t e d s u p p o r t i n A u t o b a h n
W e b S o c k e t a c c e l e r a t i o n a n d c o m p r e s s i o n
● a c c e l e r a t e : I n s t a l l W e b S o c k e t a c c e l e r a t i o n - O n l y u s e o n C P y t h o n - n o t o n P y P y ( w h i c h i s f a s t e r n a t i v e l y )
● c o m p r e s s : I n s t a l l ( n o n - s t a n d a r d ) W e b S o c k e t c o m p r e s s o r s b z i p 2 a n d s n a p p y ( s t a n d a r d d e f l a t e b a s e d W e b S o c k e t c o m p r e s s i o n i s a l r e a d y i n c l u d e d i n t h e b a s e i n s t a l l )
E n c r y p t i o n a n d W A M P a u t h e n t i c a t i o n
A u t o b a h n s u p p o r t s r u n n i n g o v e r T L S ( f o r W e b S o c k e t a n d a l l W A M P t r a n s p o r t s ) a s w e l l a s W A M P - c r y p o s i g n a u t h e n t i c a t i o n .
T o i n s t a l l u s e t h i s f l a v o r :
● e n c r y p t i o n : I n s t a l l s T L S a n d W A M P - c r y p t o s i g n d e p e n d e n c i e s
A u t o b a h n a l s o s u p p o r t s W A M P - S C R A M a u t h e n t i c a t i o n . T o i n s t a l l :
● s c r a m : I n s t a l l s W A M P - S C R A M d e p e n d e n c i e s
X B R
A u t o b a h n i n c l u d e s s u p p o r t f o r X B R . T o i n s t a l l u s e t h i s f l a v o r :
● x b r :
T o i n s t a l l :
pip install autobahn[xbr]
o r ( T w i s t e d , w i t h m o r e b e l l s a n w h i s t l e s )
pip install autobahn[twisted,encryption,serialization,xbr]
o r ( a s y n c i o , w i t h m o r e b e l l s a n w h i s t l e s )
pip install autobahn[asyncio,encryption,serialization,xbr]
N a t i v e v e c t o r e x t e n s i o n s ( N V X )
> T h i s i s N O T y e t c o m p l e t e - A L P H A !
A u t o b a h n c o n t a i n s N V X , a n e t w o r k a c c e l e r a t o r l i b r a r y t h a t p r o v i d e s S I M D a c c e l e r a t e d n a t i v e v e c t o r c o d e f o r W e b S o c k e t ( X O R m a s k i n g ) a n d U T F - 8 v a l i d a t i o n .
W A M P S e r i a l i z e r s
● s e r i a l i z a t i o n : T o i n s t a l l a d d i t i o n a l W A M P s e r i a l i z e r s : C B O R , M e s s a g e P a c k , U B J S O N a n d F l a t b u f f e r s
A b o v e i s f o r a d v a n c e d u s e s . I n g e n e r a l w e r e c o m m e n d t o u s e C B O R w h e r e y o u c a n ,
a n d J S O N ( f r o m t h e s t a n d a r d l i b r a r y ) o t h e r w i s e .
T o i n s t a l l A u t o b a h n w i t h a l l a v a i l a b l e s e r i a l i z e r s :
pip install autobahn[serializers]
o r ( d e v e l o p m e n t i n s t a l l )
pip install -e .[serializers]
F u r t h e r , t o s p e e d u p J S O N o n C P y t h o n u s i n g u j s o n , s e t t h e e n v i r o n m e n t v a r i a b l e :
AUTOBAHN_USE_UJSON=1
W a r n i n g
U s i n g u j s o n ( o n b o t h C P y t h o n a n d P y P y ) w i l l b r e a k t h e a b i l i t y o f A u t o b a h n
t o t r a n s p o r t a n d t r a n s l a t e b i n a r y a p p l i c a t i o n p a y l o a d s i n W A M P t r a n s p a r e n t l y .
T h i s a b i l i t y d e p e n d s o n f e a t u r e s o f t h e r e g u l a r J S O N s t a n d a r d l i b r a r y m o d u l e
n o t a v a i l a b l e o n u j s o n .
T o u s e c b o r 2 , a n a l t e r n a t i v e , h i g h l y f l e x i b l e a n d s t a n d a r d s c o m p l i c a n t C B O R
i m p l e m e n t a t i o n , s e t t h e e n v i r o n m e n t v a r i a b l e :
AUTOBAHN_USE_CBOR2=1
N o t e
c b o r 2 i s n o t u s e d b y d e f a u l t , b e c a u s e i t i s s i g n i f i c a n t l y s l o w e r c u r r e n t l y
i n o u r b e n c h m a r k i n g f o r W A M P m e s s a g e s e r i a l i z a t i o n o n b o t h C P y t h o n a n d P y P y
c o m p a r e d t o c b o r .
A b o u t
W e b S o c k e t a n d W A M P i n P y t h o n f o r T w i s t e d a n d a s y n c i o
c r o s s b a r . i o / a u t o b a h n
T o p i c s
p y t h o n
w e b s o c k e t
r e a l - t i m e
w a m p
r p c
p u b s u b
a u t o b a h n
R e s o u r c e s
R e a d m e
L i c e n s e
M I T L i c e n s e
1 3 4
t a g s
N o p a c k a g e s p u b l i s h e d
+ 1 0 , 3 9 3
+ 1 0 0 c o n t r i b u t o r s
L a n g u a g e s
●
P y t h o n
9 6 . 5 %
●
M a k e f i l e
1 . 5 %
●
O t h e r
2 . 0 %
● © 2 0 2 0 G i t H u b , I n c .
● T e r m s
● P r i v a c y
●
C o o k i e P r e f e r e n c e s
● S e c u r i t y
● S t a t u s
● H e l p
● C o n t a c t G i t H u b
● P r i c i n g
● A P I
● T r a i n i n g
● B l o g
● A b o u t
Y o u c a n ’ t p e r f o r m t h a t a c t i o n a t t h i s t i m e .
Y o u s i g n e d i n w i t h a n o t h e r t a b o r w i n d o w . R e l o a d t o r e f r e s h y o u r s e s s i o n .
Y o u s i g n e d o u t i n a n o t h e r t a b o r w i n d o w . R e l o a d t o r e f r e s h y o u r s e s s i o n .
W e u s e o p t i o n a l t h i r d - p a r t y a n a l y t i c s c o o k i e s t o u n d e r s t a n d h o w y o u u s e G i t H u b . c o m s o w e c a n b u i l d b e t t e r p r o d u c t s .
L e a r n m o r e .
A c c e p t
R e j e c t
W e u s e o p t i o n a l t h i r d - p a r t y a n a l y t i c s c o o k i e s t o u n d e r s t a n d h o w y o u u s e G i t H u b . c o m s o w e c a n b u i l d b e t t e r p r o d u c t s .
Y o u c a n a l w a y s u p d a t e y o u r s e l e c t i o n b y c l i c k i n g C o o k i e P r e f e r e n c e s a t t h e b o t t o m o f t h e p a g e .
F o r m o r e i n f o r m a t i o n , s e e o u r P r i v a c y S t a t e m e n t .
E s s e n t i a l c o o k i e s
W e u s e e s s e n t i a l c o o k i e s t o p e r f o r m e s s e n t i a l w e b s i t e f u n c t i o n s , e . g . t h e y ' r e u s e d t o l o g y o u i n .
L e a r n m o r e
A l w a y s a c t i v e
A n a l y t i c s c o o k i e s
W e u s e a n a l y t i c s c o o k i e s t o u n d e r s t a n d h o w y o u u s e o u r w e b s i t e s s o w e c a n m a k e t h e m b e t t e r , e . g . t h e y ' r e u s e d t o g a t h e r i n f o r m a t i o n a b o u t t h e p a g e s y o u v i s i t a n d h o w m a n y c l i c k s y o u n e e d t o a c c o m p l i s h a t a s k .
L e a r n m o r e
A c c e p t
R e j e c t
S a v e p r e f e r e n c e s