$ od -c -N 50000 [Indigo]<AltoSource>PUPTEST.DM!2 0000000 377 \0 \0 P u p T e s t . d e c l \0 0000020 373 224 024 026 327 \0 \0 376 001 \0 373 260 / / P 0000040 u p T e s t . d e c l - c o 0000060 m m o n s t u f f w i t h 0000100 P u p C o n t r o l \r / / C o 0000120 p y r i g h t X e r o x C o 0000140 r p o r a t i o n 1 9 7 9 \r / 0000160 / L a s t m o d i f i e d 0000200 D e c e m b e r 2 6 , 1 9 7 0000220 8 1 0 : 0 4 P M b y B 0000240 o g g s \r \r / / - - - - - - - - 0000260 - - - - - - - - - - - - - - - - * 0000360 - - - - \r m a n i f e s t \r / / 0000400 - - - - - - - - - - - - - - - - 0000420 - - - - - - - - - - - - 376 001 \0 274 0000440 016 - - - - - - - - - - - - - - - 0000460 - - - - - - - - - - - - - - - - * 0000520 - \r [ \r s o c k e t P u p C o n 0000540 t r o l = 2 6 b \r \r t y p e 0000560 C m m d = 2 0 0 b \r t y p e 0000600 O K = 2 0 1 b \r t y p e K i 0000620 s s O f D e a t h = 2 4 7 b 0000640 \r \r s t a t e S t o p = 0 \r 0000660 s t a t e B S P = 4 \r s t a 0000700 t e E F T P = 5 \r \r t r y H 0000720 a r d = 2 5 \r t r y S o f t 0000740 = 1 \r \r m a x H o s t s = 0000760 2 4 \r \r c o l N e t H o s t 0001000 = \t 2 b 1 4 + 6 b 1 0 + 0001020 1 0 \r c o l P a r t n e r = \t 0001040 2 376 001 \0 352 357 b 1 4 + 6 b 1 0 0001060 + 7 0 \r c o l D e a d = \t 0001100 1 b 1 4 + 1 b 1 0 + 1 3 0001120 0 \r c o l S t a t e = \t 1 b 1 0001140 4 + 6 b 1 0 + 1 4 0 \r c 0001160 o l C h k s m = \t 3 b 1 4 + 0001200 5 b 1 0 + 2 0 0 \r c o l D 0001220 a t a = \t 3 b 1 4 + 5 b 1 0001240 0 + 2 5 0 \r c o l O v l p 0001260 = \t 3 b 1 4 + 5 b 1 0 + 0001300 3 0 0 \r c o l T h r u p u t 0001320 = \t 0 b 1 4 + 7 b 1 0 + 0001340 4 0 0 \r c o l A T h r u p u t 0001360 = \t 0 b 1 4 + 7 b 1 0 + 0001400 4 7 0 \r \r b f n D M T = 1 7 0001420 7 7 7 6 b \r b f n P u p T e s t 0001440 = 1 7 7 376 001 \0 371 342 7 7 7 b \r 0001460 \r m u l = ( a l t o ? 6 1 0001500 0 2 0 b , 7 3 3 0 1 b ) \r d i 0001520 v = ( a l t o ? 6 1 0 2 1 0001540 b , 7 3 1 0 1 b ) \r ] \r \r / / 0001560 - - - - - - - - - - - - - - - - * 0001660 - - - - - - - - - - - - \r s t r 0001700 u c t u r e C o l : [ t y 0001720 p e b i t 2 ; w i d t h 0001740 b i t 4 ; s t a r t b i t 0001760 1 0 ] \r / / - - - - - - - - 0002000 - - - - - - - - - - - - - - - - * 0002040 - - - - - - - - - - - 376 001 \0 256 351 0002060 - - - - - - - - - - - - - - - - 0002100 - - - - - - - - - \r \r / / - - - 0002120 - - - - - - - - - - - - - - - - * 0002220 - - - - - - - - - \r s t r u c t 0002240 u r e S t a t F i l e : \t / / 0002260 u s e d b y P u p C o n t r 0002300 o l \r / / - - - - - - - - - - - 0002320 - - - - - - - - - - - - - - - - * 0002420 - \r [ \r v a l i d w o r d \r n 0002440 a m e : @ S t r i n g / / 0002460 376 001 \0 244 310 f i l e n a m e \r ] 0002500 \r m a n i f e s t l e n S t a 0002520 t F i l e = s i z e S t a 0002540 t F i l e / 1 6 \r \r / / - - - - 0002560 - - - - - - - - - - - - - - - - * 0002660 - - - - - - - - \r s t r u c t u 0002700 r e T P : \t \t / / T h r u p u 0002720 t - u s e d o n l y b y 0002740 P u p T e s t \r / / - - - - - 0002760 - - - - - - - - - - - - - - - - * 0003060 - - - - - 376 001 \0 241 ! - - \r [ \r t 0003100 i m e r w o r d \r b i g C o u 0003120 n t w o r d \t \t / / c o u n t 0003140 s t o 5 0 \r c o u n t w o 0003160 r d \t \t / / c o u n t s t o 0003200 1 0 K \r t h r u p u t w o r d 0003220 \r a v e T h r u p u t w o r d 0003240 \r ] \r m a n i f e s t l e n T 0003260 P = s i z e T P / 1 6 \r \r 0003300 / / - - - - - - - - - - - - - - 0003320 - - - - - - - - - - - - - - - - * 0003400 - - - - - - - - - - - - - - \r s 0003420 t r u c t u r e S t a t s : \t 0003440 / / P u p T e s t - > P u p 0003460 C o n t r o l \r / / 376 001 \0 372 204 - 0003500 - - - - - - - - - - - - - - - - * 0003600 - - - - - - - - - - - \r [ \r t h 0003620 r u p u t w o r d \r a v e t h 0003640 r u p u t w o r d \r s t a t e 0003660 b y t e \r f l a g s b y t e 0003700 = \r [ \r b l a n 0003720 k b i t 5 \r c h e c k 0003740 s u m s b i t 1 \r d a 0003760 t a b i t 1 \r o v e r 0004000 l a p D a t a W i t h A c k b 0004020 i t 1 \r ] \r ] \r m a n i 0004040 f e s t l e n S t a t s = 0004060 s i z e S t a t s / 1 6 \r \r 376 0004100 001 \0 . / / - - - - - - - - - - 0004120 - - - - - - - - - - - - - - - - * 0004220 - - \r s t r u c t u r e C m m 0004240 d : \t \t / / P u p C o n t r o l 0004260 - > P u p T e s t \r / / - - 0004300 - - - - - - - - - - - - - - - - * 0004400 - - - - - - - - - - \r [ \r s e n 0004420 d p o r t : @ P o r t \r c m m 0004440 d b y t e \r f l a g s b y t 0004460 e = \r [ \r b l a 0004500 n k b 376 001 \0 025 ( i t 5 \r 0004520 c h e c k s u m s b i t 1 0004540 \r d a t a b i t 1 \r 0004560 o v e r l a p D a t a W i t 0004600 h A c k b i t 1 \r ] \r 0004620 ] \r m a n i f e s t l e n C m 0004640 m d = s i z e C m m d / 1 0004660 6 \r \r m a n i f e s t \r [ \r c h 0004700 k s F l a g = 1 b 2 \r d a t 0004720 a F l a g = 1 b 1 \r o v l p 0004740 F l a g = 1 b 0 \r ] \r \r / / 0004760 - - - - - - - - - - - - - - - - * 0005060 - - - - - - - - - - - - \r s t r 0005100 u c t u r e H T 376 001 \0 373 r : \t 0005120 \t / / H o s t T a b l e - 0005140 u s e d o n l y b y P u p 0005160 C o n t r o l \r / / - - - - - - 0005200 - - - - - - - - - - - - - - - - * 0005300 - - - - - - \r [ \r d s w o r d 0005320 \r i d w o r d \r y M a x w o 0005340 r d \r y M i n w o r d \r s e l 0005360 e c t e d w o r d \r d e a d 0005400 w o r d \r s o c : @ P u p S o 0005420 c \r c b : @ C m m d \r s t a t 0005440 s : @ S t a t s \r ] ^ 1 , m 0005460 a x H o s t s \r m a n i f e s t 0005500 l e n H T = s i z e 376 \0 0005520 006 255 230 H T / 1 6 \r 377 \0 \0 P u p T 0005540 e s t . b c p l \0 373 230 230 { 021 \0 \0 0005560 376 001 \0 254 270 / / P u p T e s t . 0005600 b c p l - P u p p a c k a 0005620 g e t e s t p r o g r a m \r 0005640 / / C o p y r i g h t X e r 0005660 o x C o r p o r a t i o n 1 0005700 9 7 9 , 1 9 8 2 \r / / L a s 0005720 t m o d i f i e d F e b r u 0005740 a r y 1 5 , 1 9 8 2 5 : 0005760 1 0 P M b y B o g g s \r \r 0006000 g e t " P u p 0 . d e c l " \r 0006020 g e t " P u p 1 . d e c l " \r 0006040 g e t " P u p T e s t . d e c 0006060 l " \r \r e x t e r n a l \r [ \r / 0006100 / o u t g o i n g p r o c e 0006120 d u r e s \r C o m m a n d ; R 0006140 e m o t e C o n t r o l ; P u 0006160 p T e s t 376 001 \0 303 c F i n i s h 0006200 ; S y s E r r \r \r / / i n c 0006220 o m i n g p r o c e d u r e s 0006240 \r I n i t P u p T e s t ; C r 0006260 e a t e K e y b o a r d S t r e 0006300 a m \r E t h e r B o o t ; J u 0006320 n t a ; M y F r a m e ; Z e 0006340 r o ; M o v e B l o c k \r W s 0006360 ; W s s ; C o n f i r m ; 0006400 P u t T e m p l a t e \r G e t s 0006420 ; P u t s ; E n d o f s ; 0006440 C l o s e s \r B l o c k ; C a 0006460 l l C o n t e x t L i s t ; D 0006500 i s m i s s \r A d d T o Z o n e 0006520 ; F r e e ; A l l o c a t e 0006540 ; E n q u e u e ; D e q u e 0006560 u e ; F l u s h Q 376 001 \0 L 341 u 0006600 e u e \r O p e n L e v e l 1 S o 0006620 c k e t ; C l o s e L e v e l 0006640 1 S o c k e t ; E x c h a n g 0006660 e P o r t s \r C o m p l e t e P 0006700 u p ; S e t A l l o c a t i o 0006720 n ; G e t P B I ; R e l e a 0006740 s e P B I \r \r E c h o U s e r ; 0006760 M i s c S e r v i c e s ; B 0007000 S P S e n d ; E F T P S e n d 0007020 \r P r i n t P u p R T ; P r i 0007040 n t S t a t i s t i c s \r \r / / 0007060 o u t g o i n g s t a t i c 0007100 s \r S t a t e ; C m m d ; c 0007120 h e c k s u m s ; c h e c k d 0007140 a t a ; p b i C o u n t \r \r / 0007160 / i n c o m i n g s t a t 376 0007200 001 \0 356 x i c s \r k e y s ; d s 0007220 p ; s y s Z o n e ; s p y B 0007240 u f f e r \r l v U s e r F i n i 0007260 s h P r o c ; s a v e d F i n 0007300 i s h \r c h e c k B u f f e r ; 0007320 c t x Q ; s e n d P o r t ; 0007340 t p ; b o o t F l a g \r n u 0007360 m N e t s ; s o c k e t Q ; 0007400 p b i F r e e Q ; d P S I B ; 0007420 p u p R T \r l e n P u p ; l 0007440 e n P B I ; m a x P u p D a t 0007460 a B y t e s ; o v e r l a p D 0007500 a t a W i t h A c k \r ] \r \r m a 0007520 n i f e s t [ l e v B c p l 0007540 = 3 ; s t k L i m = 3 0007560 3 5 b ] \r \r s t a t i c \r [ \r 0007600 S t a t 376 001 \0 Y E e ; C m m d 0007620 ; c o d e E n d ; p b i C o 0007640 u n t \r c h e c k s u m s = 0007660 f a l s e \r c h e c k d a t a 0007700 = f a l s e \r ] \r \r s t r u c 0007720 t u r e B y t e ^ 0 , 0 b y 0007740 t e \r \f \r / / - - - - - - - - - 0007760 - - - - - - - - - - - - - - - - * 0010060 - - - \r l e t P u p T e s t ( 0010100 b l v ) b e \r / / - - - - - - 0010120 - - - - - - - - - - - - - - - - * 0010200 - - - - - - - - - 376 001 \0 \t 370 - - 0010220 - - - - - - - - - - - \r [ \r c o 0010240 d e E n d = b l v ! 2 9 \r I 0010260 n i t P u p T e s t ( ) \r J u n 0010300 t a ( l e v B c p l , A f t e 0010320 r J u n t a ) \r ] \r \r / / - - - 0010340 - - - - - - - - - - - - - - - - * 0010440 - - - - - - - - - \r a n d A f 0010460 t e r J u n t a ( ) b e \r / / 0010500 - - - - - - - - - - - - - - - - * 0010600 - - - - - - - - - - - - \r [ 376 001 0010620 \0 v 205 \r C r e a t e K e y b o a 0010640 r d S t r e a m ( ) \r / / A d d 0010660 t h e r e m a i n i n g s 0010700 t a c k a n d t h e J u n 0010720 t a e d O S p a r t s t o 0010740 s y s Z o n e \r l e t f r e 0010760 e B e g i n = @ s t k L i m 0011000 \r @ s t k L i m = M y F r a 0011020 m e ( ) - 1 2 0 \r A d d T o Z 0011040 o n e ( s y s Z o n e , f r e 0011060 e B e g i n , @ s t k L i m - 0011100 f r e e B e g i n ) \r A d d T o 0011120 Z o n e ( s y s Z o n e , I n 0011140 i t P u p T e s t , c o d e E 0011160 n d - I n i t P u p T e s t ) 0011200 / / I n i t c o d e \r l e t 0011220 f r 376 001 \0 _ 271 e e S l o p = 0011240 A l l o c a t e ( s y s Z o n 0011260 e , 1 2 5 0 ) / / l a t e r 0011300 d y n a m i c a l l o c a t 0011320 i o n n e e d s \r p b i C o u 0011340 n t = 0 \r [ / / a 0011360 l l o c a t e a s m a n y 0011400 a d d i t i o n a l p b i s 0011420 a s w e c a n \r l e t 0011440 p b i = A l l o c a t e ( 0011460 s y s Z o n e , l e n P B I , 0011500 t r u e ) \r i f p b i 0011520 e q 0 b r e a k \r E 0011540 n q u e u e ( p b i F r e e Q , 0011560 p b i ) \r p b i C o u n 0011600 t = p b i C o u n t + 1 \r 0011620 ] r e p 376 001 \0 F ~ e a t 0011640 w h i l e p b i C o u n t l 0011660 s 3 2 7 6 7 / m a x P u p D a 0011700 t a B y t e s \r F r e e ( s y s 0011720 Z o n e , f r e e S l o p ) \r 0011740 p b i C o u n t = p b i C o 0011760 u n t - n u m N e t s \r l e t 0012000 s o c = s o c k e t Q ! 0 \r 0012020 w h i l e s o c n e 0 d 0012040 o \r [ \r S e t A l l 0012060 o c a t i o n ( s o c , p b i 0012100 C o u n t , p b i C o u n t - 0012120 1 , p b i C o u n t - 1 ) \r 0012140 s o c = s o c ! 0 \r 0012160 ] \r l e t f a k e S o c = 0012200 d P S I B - o f f s e t 0012220 P u p S o c . p s i b / 1 376 001 \0 0012240 231 031 6 \r S e t A l l o c a t i o 0012260 n ( f a k e S o c , p b i C o 0012300 u n t , p b i C o u n t - 1 , 0012320 p b i C o u n t - 1 ) \r \r C a 0012340 l l C o n t e x t L i s t ( c t 0012360 x Q ! 0 ) r e p e a t \r ] \r \r 0012400 / / - - - - - - - - - - - - - - 0012420 - - - - - - - - - - - - - - - - * 0012500 - - - - - - - - - - - - - - \r a 0012520 n d P u p T e s t F i n i s h 0012540 ( ) b e \r / / - - - - - - - - 0012560 - - - - - - - - - - - - - - - - * 0012640 - - 376 001 \0 \n 324 - - - - - - - - - 0012660 - - - - - - - - - \r [ \r @ 4 2 0 0012700 b = 0 ; f o r i = 0 0012720 t o 3 0 0 0 0 l o o p \r ( 0012740 t a b l e [ 6 3 0 0 0 b ; 0012760 1 4 0 1 b ] ) ( 1 7 7 7 7 6 b 0013000 ) \r @ l v U s e r F i n i s h P 0013020 r o c = s a v e d F i n i s 0013040 h \r i f b o o t F l a g t h 0013060 e n E t h e r B o o t ( 1 0 b 0013100 ) \r ] \r \r / / - - - - - - - - - 0013120 - - - - - - - - - - - - - - - - * 0013220 - - - \r a n d S y s E r r ( p 0013240 1 , e r r N 376 001 \0 311 023 o , p 0013260 2 , p 3 , p 4 , p 5 ) b 0013300 e \r / / - - - - - - - - - - - - 0013320 - - - - - - - - - - - - - - - - * 0013420 \r [ \r l e t t = p 1 ; p 0013440 1 = e r r N o ; e r r N o 0013460 = t \r ( t a b l e [ 7 7 0013500 4 0 3 b ; 1 4 0 1 b ] ) ( " 0013520 S y s . e r r o r s " , l v 0013540 p 1 ) \r ] \r \f \r / / - - - - - - 0013560 - - - - - - - - - - - - - - - - * 0013640 - - - - - - - - - - - - 376 001 \0 235 0013660 d - - - - - - - - - - \r a n d 0013700 C o m m a n d ( ) b e \r / / - 0013720 - - - - - - - - - - - - - - - - * 0014020 - - - - - - - - - - - \r [ \r C m 0014040 m d = 0 \r [ \r W 0014060 s ( " * N > " ) \r S t a 0014100 t e = s t a t e S t o p \r 0014120 B l o c k ( ) r e p e a t 0014140 w h i l e E n d o f s ( k e y 0014160 s ) & C m m d e q 0 \r 0014200 l e t c h a r = E n d 0014220 o f s ( k e y s ) ? C m m d 0014240 , G e t s ( k e y s ) \r 0014260 s 376 001 \0 B 233 w i t c h o n c h 0014300 a r i n t o \r [ \r 0014320 c a s e $ * S : \r 0014340 [ C m m d 0014360 = 0 ; l o o p ] \r 0014400 c a s e $ C : c a s e 0014420 $ c : \r [ \r 0014440 W s ( " P u p 0014460 c h e c k s u m s " ) \r 0014500 W s ( c h e c k s u 0014520 m s ? " d i s a b l e d " , 0014540 " e n a b l e d " ) \r 0014560 c h e c k s u m s = 0014600 n o t c h e c k s u m s \r 0014620 e n d c a s e \r 0014640 ] \r 0014660 c a s e 376 001 \0 q 377 $ D : c 0014700 a s e $ d : \r 0014720 [ \r W s ( " 0014740 D a t a C h e c k i n g " ) 0014760 \r W s ( c h e 0015000 c k d a t a ? " d i s a b l 0015020 e d " , " e n a b l e d " ) \r 0015040 c h e c k d a 0015060 t a = n o t c h e c k d a 0015100 t a \r e n d c 0015120 a s e \r ] \r 0015140 c a s e $ E : c a 0015160 s e $ e : \r 0015200 [ E c h o U s e r ( ) ; e n 0015220 d c a s e ] \r c a 0015240 s e $ S : c a s e $ s : \r 0015260 [ 376 001 \0 211 273 0015300 B S P S e n d ( ) ; e n d c a 0015320 s e ] \r c a s e 0015340 $ Q : c a s e $ q : \r 0015360 [ \r 0015400 i f C m m d e q 0 t h 0015420 e n u n l e s s C o n f i r 0015440 m ( " Q u i t " ) e n d c a 0015460 s e \r f i n i 0015500 s h \r ] \r 0015520 c a s e $ R : c a s 0015540 e $ r : \r [ 0015560 E F T P S e n d ( ) ; e n d 0015600 c a s e ] \r c a s 0015620 e $ P : c a s e $ p : \r 0015640 [ \r 0015660 W s ( " P r i n t " ) \r 0015700 376 001 \0 307 232 s w 0015720 i t c h o n G e t s ( k e y s 0015740 ) i n t o \r 0015760 [ \r 0016000 c a s e $ R : c a s e $ 0016020 r : \r 0016040 [ P r i n t P u p R T ( ) 0016060 ; e n d c a s e ] \r 0016100 c a s e $ S : 0016120 c a s e $ s : \r 0016140 [ P r i n t 0016160 S t a t i s t i c s ( ) ; e n 0016200 d c a s e ] \r 0016220 c a s e $ ? : \r 0016240 [ W s 0016260 ( " ? * N R o u t i n g T a b l 0016300 e , S t 376 001 \0 302 c a t i s t i 0016320 c s " ) ; e n d c a s e ] \r 0016340 d e f a 0016360 u l t : [ P u t s ( d s p , 0016400 $ ? ) ; e n d c a s e ] \r 0016420 ] \r 0016440 e n d c a s e \r 0016460 ] \r 0016500 c a s e $ M : c a s e $ m 0016520 : \r [ M i s 0016540 c S e r v i c e s ( ) ; e n d 0016560 c a s e ] \r c a s 0016600 e $ ? : \r [ 0016620 \r W s ( " ? * 0016640 N E c h o , S e n d B S P , 0016660 M i s c s e r v i c e s , Q 0016700 u i t " ) \r 376 001 \0 u 027 0016720 W s ( " * N P r i n t , 0016740 C h e c k s u m s , D a t a 0016760 C h e c k i n g , R = E F T P 0017000 " ) \r e n d c 0017020 a s e \r ] \r 0017040 ] \r ] r e p e 0017060 a t \r ] \r \f \r / / - - - - - - - 0017100 - - - - - - - - - - - - - - - - * 0017200 - - - - - \r a n d R e m o t e 0017220 C o n t r o l ( ) b e \t / / t 0017240 h e c o n t e x t b y w h 0017260 i c h P u p C o n t r o l c 0017300 o n t r o l s P u p T e s t 376 0017320 001 \0 373 001 \r / / - - - - - - - - - 0017340 - - - - - - - - - - - - - - - - * 0017440 - - - \r [ \r l e t l a s t I D 0017460 = 0 \r l e t c o n t r o l 0017500 S o c = v e c l e n P u p 0017520 S o c \r O p e n L e v e l 1 S o 0017540 c k e t ( c o n t r o l S o c , 0017560 t a b l e [ 0 ; 0 ; s 0017600 o c k e t P u p C o n t r o l 0017620 ] ) \r [ \r B l o c k 0017640 ( ) r e p e a t w h i l e c 0017660 o n t r o l S o c > > P u p S o 0017700 c . i Q . h e a d e q 0 \r 0017720 l e 376 001 \0 326 & t p b i = 0017740 D e q u e u e ( l v c o n t 0017760 r o l S o c > > P u p S o c . i 0020000 Q ) \r u n l e s s p b i 0020020 > > P B I . p u p . t y p e e 0020040 q t y p e C m m d d o \r 0020060 [ R e l e a s e P B I 0020100 ( p b i ) ; l o o p ] \r 0020120 i f p b i > > P B I . p u p 0020140 . i d ^ 2 n e l a s t I D 0020160 t h e n \r [ \r 0020200 l a s t I D = p b i > 0020220 > P B I . p u p . i d ^ 2 \r 0020240 l e t c b = l v 0020260 p b i > > P B I . p u p . w o r 0020300 d s ^ 1 \r M o v e B 0020320 l o c k ( s e n d 376 001 \0 267 267 P o 0020340 r t , l v c b > > C m m d . 0020360 s e n d p o r t , l e n P o r 0020400 t ) \r C m m d = 0020420 c b > > C m m d . c m m d \r 0020440 c h e c k s u m s = 0020460 c b > > C m m d . c h e c k s u 0020500 m s n e 0 \r c h 0020520 e c k d a t a = c b > > C m 0020540 m d . d a t a n e 0 \r 0020560 o v e r l a p D a t a W i 0020600 t h A c k = c b > > C m m d 0020620 . o v e r l a p D a t a W i t h 0020640 A c k n e 0 \r ] 0020660 \r l e t s t a t = l 0020700 v p b i > > P B I . p u p . w 0020720 o r d s ^ 1 ; Z e r o ( s 376 001 0020740 \0 224 t t a t , l e n S t a t s 0020760 ) \r s t a t > > S t a t s 0021000 . t h r u p u t = t p > > T 0021020 P . t h r u p u t \r s t a 0021040 t > > S t a t s . a v e t h r u 0021060 p u t = t p > > T P . a v e 0021100 T h r u p u t \r s t a t > 0021120 > S t a t s . s t a t e = S 0021140 t a t e \r s t a t > > S t 0021160 a t s . c h e c k s u m s = 0021200 c h e c k s u m s \r s t a 0021220 t > > S t a t s . d a t a = 0021240 c h e c k d a t a \r s t a 0021260 t > > S t a t s . o v e r l a p 0021300 D a t a W i t h A c k = o v 0021320 e r l a p D a t a W i t h A c k 0021340 \r 376 \0 U 310 250 E x c h a n g 0021360 e P o r t s ( p b i ) \r C 0021400 o m p l e t e P u p ( p b i , 0021420 t y p e O K , l e n S t a t s 0021440 * 2 + p u p O v B y t e s ) \r 0021460 ] r e p e a t \r ] \r 377 \0 \0 0021500 P u p T e s t I n i t . b c p l 0021520 \0 373 230 230 k 031 \0 \0 376 001 \0 ; 6 / / 0021540 P u p T e s t I n i t . b c p l 0021560 \r / / C o p y r i g h t X e 0021600 r o x C o r p o r a t i o n 0021620 1 9 7 9 , 1 9 8 2 \r / / L a 0021640 s t m o d i f i e d F e b r 0021660 u a r y 1 5 , 1 9 8 2 5 0021700 : 1 8 P M b y B o g g s \r 0021720 \r g e t " P u p 0 . d e c l " 0021740 \r g e t " P u p 1 . d e c l " 0021760 \r g e t " P u p T e s t . d e 0022000 c l " \r g e t " S t r e a m s 0022020 . d " \r g e t " A l t o D e f 0022040 s . d " \r \r e x t e r n a l \r [ 0022060 \r / / o u t g o i n g p r o 0022100 c e d u r e s \r I n i t P u p T 0022120 e s t \r \r / / i n c o m 376 001 \0 0022140 246 325 i n g p r o c e d u r e s 0022160 \r C r e a t e D i s p l a y S t 0022200 r e a m ; S h o w D i s p l a 0022220 y S t r e a m \r C h a r W i d t 0022240 h ; I n v e r t L i n e ; G 0022260 e t L i n e P o s ; S e t B i 0022300 t P o s \r M y F r a m e ; U s 0022320 c ; L o a d R a m ; I n i t 0022340 B c p l R u n t i m e ; S t a 0022360 r t I O ; Z e r o \r P u p C h 0022400 e c k s u m ; U P u p C h e c 0022420 k s u m ; B l o c k E q ; U 0022440 B l o c k E q \r I n i t i a l i 0022460 z e Z o n e ; A d d T o Z o n 0022500 e ; A l l o c a t e ; I d l 0022520 e \r I n i t P u p L e v e l 1 ; 0022540 E 376 001 \0 020 347 n q u e u e ; I 0022560 n i t i a l i z e C o n t e x t 0022600 ; B l o c k \r D e f a u l t O 0022620 t h e r P u p P r o c ; O t h 0022640 e r S p i g o t ; I n i t S t 0022660 a t S e r v \r B S P R e c e i v 0022700 e ; E F T P R e c e i v e ; 0022720 E c h o S e r v e r ; P u p T 0022740 e s t P a r a m s \r C o m m a n 0022760 d ; R e m o t e C o n t r o l 0023000 ; O t h e r S p i g o t P r o 0023020 c e s s \r P u t T e m p l a t e 0023040 ; W s ; W s s ; C o n f i 0023060 r m \r \r / / o u t g o i n g 0023100 s t a t i c s \r s e n d P o r t 0023120 ; t p ; c h e c k B u f f e 0023140 r \r s a v e d 376 001 \0 034 P F i n i 0023160 s h ; s p i g o t Q ; c t x 0023200 Q ; b o o t F l a g \r s p y B 0023220 u f f e r ; s y s Z o n e ; 0023240 d s p \r \r / / i n c o m i n g 0023260 s t a t i c s \r P u p T e s t 0023300 F i n i s h ; m a x P u p D a 0023320 t a B y t e s \r l v U s e r F i 0023340 n i s h P r o c ; s y s F o n 0023360 t ; P u p T e s t E I A M c ; 0023400 P u p T e s t C P M c \r e i a 0023420 M c L o a d e d ; e t h e r M 0023440 c L o a d e d ; c p M c L o a 0023460 d e d \r ] \r \r m a n i f e s t \r 0023500 [ \r s t k L i m = # 3 3 5 \r 0023520 b l a c k = - 1 \r w h i t e 0023540 = 0 \r ] \r \r s t a t 376 001 \0 377 0023560 177 i c \r [ \r l a s t S h o w n S 0023600 t r e a m ; s a v e d S w a t 0023620 C P \r s p y B u f f e r ; s y 0023640 s Z o n e ; d s p \r s e n d P 0023660 o r t ; t p ; c h e c k B u 0023700 f f e r \r s a v e d F i n i s h 0023720 ; s p i g o t Q ; c t x Q ; 0023740 b o o t F l a g \r ] \r \r s t r 0023760 u c t u r e B y t e ^ 0 , 0 0024000 b y t e \r \f \r / / - - - - - - - 0024020 - - - - - - - - - - - - - - - - * 0024120 - - - - - \r l e t I n i t P u 0024140 p T e s t ( ) b e \r / / - - - 0024160 - 376 001 \0 232 p - - - - - - - - - - 0024200 - - - - - - - - - - - - - - - - * 0024260 - - - - - - - - - - - - - - \r [ 0024300 \r b o o t F l a g = P u p T 0024320 e s t P a r a m s e q 0 0024340 / / h a c k . . . s h o u l d 0024360 b e d o n e i n a c l e 0024400 a n e r w a y \r l e t v e r 0024420 s i o n T e x t = " P u p T 0024440 e s t o f F e b r u a r y 0024460 1 5 , 1 9 8 2 " \r \r l e t f 0024500 r e e B e g i n = @ s t k L 0024520 i m \r @ s t k L i m = M y F 0024540 r a m e ( ) - 1 0 0 0 \r l e t 0024560 l e n g t 376 001 \0 242 k h = @ 0024600 s t k L i m - f r e e B e g 0024620 i n \r l e t l e n I n i t = 0024640 l e n g t h l s 0 ? # 7 0024660 7 7 7 7 , l e n g t h \r s y s 0024700 Z o n e = I n i t i a l i z 0024720 e Z o n e ( f r e e B e g i n , 0024740 l e n I n i t ) \r f r e e B e 0024760 g i n = f r e e B e g i n 0025000 + l e n I n i t \r l e n g t h 0025020 = l e n g t h - l e n I 0025040 n i t \r i f l e n g t h g r 0025060 1 0 t h e n A d d T o Z o 0025100 n e ( s y s Z o n e , f r e e 0025120 B e g i n , l e n g t h ) \r \r 0025140 / / T h i s u g l y p a t c 0025160 h o f c o d e d 376 001 \0 036 376 0025200 i s c o v e r s w h e t h e r 0025220 a n E I A o r C o m P r 0025240 o c \r / / ( o r b o t h ) 0025260 i s p r e s e n t , a n d 0025300 t h e r e f o r e w h a t m 0025320 i c r o c o d e t o l o a d 0025340 . \r / / I f b o t h a r e 0025360 p r e s e n t , t h e u s e 0025400 r m u s t c h o o s e o n 0025420 e . \r / / T h e b o o t v e 0025440 r s i o n l o a d s t h e 0025460 E I A v e r s i o n t o g 0025500 e t t h e E x t r a E t h 0025520 e r c o d e . \r l e t e i a 0025540 P r e s e n t , c p P r e s e 0025560 n t = t r u e , f a l s e 0025600 376 001 \0 351 035 \r u n l e s s b o o 0025620 t F l a g d o \r [ \r 0025640 @ 1 7 7 7 0 0 b = 1 4 0 0 0025660 0 0 b / / @ e i a C o n t r 0025700 o l = s w i \r e i a P 0025720 r e s e n t = @ 1 7 7 7 0 4 0025740 b n e 0 / / r e a d s 0025760 t a t u s \r f o r l i n 0026000 e = 0 t o 1 5 d o \r 0026020 [ \r @ ( 1 0026040 7 7 3 0 0 b + 4 * l i n e ) 0026060 = 1 \r i f @ ( 0026100 1 7 7 3 0 0 b + 4 * l i n e 0026120 ) e q 1 t h e n [ c p 0026140 P r e s e n t = t r u e ; 0026160 b r e a k ] \r ] \r 0026200 i f 376 001 \0 M 021 c p P r e 0026220 s e n t & e i a P r e s e n 0026240 t t h e n \r [ \r 0026260 W s ( " T h i s m a 0026300 c h i n e h a s b o t h a 0026320 n E I A a n d a C o m P 0026340 r o c . " ) \r W s ( 0026360 " * N I c a n u s e o n e 0026400 o r t h e o t h e r b u 0026420 t n o t b o t h . " ) \r 0026440 t e s t C o n f i r m 0026460 ( " * N S h a l l I u s e 0026500 t h e C o m P r o c ? " ) \r 0026520 i f s o e i a 0026540 P r e s e n t = f a l s e \r 0026560 i f n o t c 0026600 p P r e s e n t = 376 001 \0 361 T 0026620 f a l s e \r ] \r 0026640 ] \r \r / / F l i p t h e M 0026660 e m o r y R e f r e s h T a 0026700 s k i n t o t h e r a m 0026720 o n l y i f \r / / t h i s 0026740 i s a n A l t o I I X M 0026760 . \r / / T h e b o o t l o c 0027000 u s v e c t o r i s i n 0027020 r a m I m a g e ! 0 . \r l e t 0027040 r a m I m a g e = e i a P r 0027060 e s e n t ? P u p T e s t E I 0027100 A M c , P u p T e s t C P M c 0027120 \r s t r u c t u r e V e r s : 0027140 [ e n g b i t 4 ; b l 0027160 a n k b i t 1 2 ] \r i f 0027200 ( t a b l e [ # 6 1 0 1 4 376 0027220 001 \0 350 306 ; # 1 4 0 1 ] ) ( ) 0027240 < < V e r s . e n g n e 3 0027260 t h e n \r r a m I m a g e 0027300 ! 0 = r a m I m a g e ! 0 0027320 % 4 0 0 b \r \r / / N o w l o 0027340 a d t h e m i c r o c o d e 0027360 \r i f L o a d R a m ( r a m I 0027400 m a g e , t r u e ) e q 0 0027420 t h e n \r [ \r I n 0027440 i t B c p l R u n t i m e ( ) \r 0027460 P u p C h e c k s u m = 0027500 U P u p C h e c k s u m \r 0027520 B l o c k E q = U B l o c 0027540 k E q \r e t h e r M c L o 0027560 a d e d = 3 / / t w o 0027600 e x t r a e t h e r s , t a 0027620 s k s 376 001 \0 333 312 1 a n d 2 0027640 \r e i a M c L o a d e d 0027660 = e i a P r e s e n t \r 0027700 c p M c L o a d e d = c p P 0027720 r e s e n t \r ] \r \r / / S 0027740 e t u p t h e d i s p l a 0027760 y \r l a s t S h o w n S t r e a 0030000 m = M a k e B a r ( w h i t 0030020 e , 2 4 ) \r S h o w D i s p l 0030040 a y S t r e a m ( l a s t S h o 0030060 w n S t r e a m , D S a l o n 0030100 e ) \r S h o w D i s p l a y S t 0030120 r e a m ( M a k e B a r ( w h i 0030140 t e , 1 ) , D S b e l o w , 0030160 l a s t S h o w n S t r e a m 0030200 ) \r l e t l e n D S = l D 0030220 C B + 3 8 * ( 376 001 \0 220 277 ( s 0030240 y s F o n t ! - 2 + 1 ) & 0030260 - 2 ) + 1 \r l e t t i t l e 0030300 = C r e a t e D i s p l a y 0030320 S t r e a m ( 1 , A l l o c a t 0030340 e ( s y s Z o n e , l e n D S ) 0030360 , l e n D S , s y s F o n t ) \r 0030400 W s s ( t i t l e , v e r s i 0030420 o n T e x t ) \r S e t B i t P o 0030440 s ( t i t l e , 4 5 0 ) \r P u 0030460 t T e m p l a t e ( t i t l e , 0030500 " A l t o $ U O # " , S t 0030520 a r t I O ( 0 ) & # 3 7 7 ) 0030540 \r I n v e r t L i n e ( t i t l 0030560 e , G e t L i n e P o s ( t i 0030600 t l e ) ) \r G C S h o w D i s p 0030620 l a y S t r e a m ( M a k e 376 001 0030640 \0 363 G B a r ( b l a c k , 2 ) 0030660 ) \r G C S h o w D i s p l a y S 0030700 t r e a m ( t i t l e ) \r G C S 0030720 h o w D i s p l a y S t r e a m 0030740 ( M a k e B a r ( b l a c k , 0030760 1 ) ) \r d s p = C r e a t e 0031000 D i s p l a y S t r e a m ( 2 0 0031020 , A l l o c a t e ( s y s Z o 0031040 n e , 7 0 0 0 ) , 7 0 0 0 , 0031060 s y s F o n t ) \r G C S h o w 0031100 D i s p l a y S t r e a m ( d s 0031120 p ) \r G C S h o w D i s p l a y 0031140 S t r e a m ( M a k e B a r ( b 0031160 l a c k , 1 ) ) \r \r / / m o r 0031200 e i n i t i a l i z a t i o n 0031220 ! \r s a v e d F i n i s h = 0031240 @ l v 376 001 \0 C o U s e r F i n i 0031260 s h P r o c \r @ l v U s e r F i 0031300 n i s h P r o c = P u p T e 0031320 s t F i n i s h \r s p y B u f f 0031340 e r = A l l o c a t e ( s y 0031360 s Z o n e , 1 0 0 0 ) \r s e n 0031400 d P o r t = A l l o c a t e 0031420 ( s y s Z o n e , l e n P o r 0031440 t ) \r c t x Q = A l l o c a 0031460 t e ( s y s Z o n e , 2 ) ; 0031500 c t x Q ! 0 = 0 \r I d l e 0031520 = B l o c k \r s p i g o t Q 0031540 = A l l o c a t e ( s y s Z o 0031560 n e , 2 ) ; s p i g o t Q ! 0031600 0 = 0 \r D e f a u l t O t h 0031620 e r P u p P r o c = O t h e 0031640 r S p i g o t \r 376 001 \0 U 204 I n i 0031660 t P u p L e v e l 1 ( s y s Z o 0031700 n e , c t x Q , 0 ) \r I n i 0031720 t S t a t S e r v ( s y s Z o n 0031740 e , c t x Q ) \r u n l e s s 0031760 b o o t F l a g d o P u p T 0032000 e s t P a r a m s ( ) \r t p = 0032020 A l l o c a t e ( s y s Z o n 0032040 e , l e n T P ) \r c h e c k B 0032060 u f f e r = A l l o c a t e 0032100 ( s y s Z o n e , ( m a x P u 0032120 p D a t a B y t e s + 1 ) / 2 ) 0032140 \r f o r i = 0 t o m a 0032160 x P u p D a t a B y t e s - 1 0032200 d o c h e c k B u f f e r > > 0032220 B y t e ^ i = i \r \r E n q u 0032240 e u e ( c t x Q , I n i t 376 001 \0 0032260 035 234 i a l i z e C o n t e x t ( 0032300 A l l o c a t e ( s y s Z o n e 0032320 , ( a l t o ? 4 0 0 , 3 0 0032340 0 ) ) , \r ( a l t o ? 4 0 0 0032360 , 3 0 0 ) , C o m m a n d ) 0032400 ) \r E n q u e u e ( c t x Q , I 0032420 n i t i a l i z e C o n t e x t 0032440 ( A l l o c a t e ( s y s Z o n 0032460 e , ( a l t o ? 2 0 0 , 1 0032500 5 0 ) ) , \r ( a l t o ? 2 0 0032520 0 , 1 5 0 ) , R e m o t e C 0032540 o n t r o l ) ) \r E n q u e u e 0032560 ( c t x Q , I n i t i a l i z e 0032600 C o n t e x t ( A l l o c a t e 0032620 ( s y s Z o n e , ( a l t o ? 0032640 2 0 0 , 1 5 0 ) ) , \r ( a 0032660 l t 376 001 \0 217 A o ? 2 0 0 , 1 0032700 5 0 ) , E c h o S e r v e r ) 0032720 ) \r E n q u e u e ( c t x Q , I 0032740 n i t i a l i z e C o n t e x t 0032760 ( A l l o c a t e ( s y s Z o n 0033000 e , ( a l t o ? 2 0 0 , 1 0033020 0 0 ) ) , \r ( a l t o ? 2 0 0033040 0 , 1 0 0 ) , O t h e r S p 0033060 i g o t P r o c e s s ) ) \r E n 0033100 q u e u e ( c t x Q , I n i t i 0033120 a l i z e C o n t e x t ( A l l 0033140 o c a t e ( s y s Z o n e , ( 0033160 a l t o ? 4 0 0 , 3 0 0 ) ) 0033200 , \r ( a l t o ? 4 0 0 , 3 0033220 0 0 ) , B S P R e c e i v e ) 0033240 ) \r E n q u e u e ( c t x Q , I 0033260 n i t i a l i 376 001 \0 034 g z e C o 0033300 n t e x t ( A l l o c a t e ( s 0033320 y s Z o n e , ( a l t o ? 4 0033340 0 0 , 3 0 0 ) ) , \r ( a l t 0033360 o ? 4 0 0 , 3 0 0 ) , E F 0033400 T P R e c e i v e ) ) \r ] \r \f \r 0033420 / / - - - - - - - - - - - - - - 0033440 - - - - - - - - - - - - - - - - * 0033520 - - - - - - - - - - - - - \r a n 0033540 d G C S h o w D i s p l a y S 0033560 t r e a m ( s t ) b e \r / / - 0033600 - - - - - - - - - - - - - - - - * 0033660 - - - - - - - - - - - - 376 001 \0 t 0033700 8 - - - - - - - - - - - - - - \r 0033720 [ \r S h o w D i s p l a y S t r 0033740 e a m ( s t , D S b e l o w , 0033760 l a s t S h o w n S t r e a m 0034000 ) \r l a s t S h o w n S t r e a 0034020 m = s t \r ] \r \r / / - - - - 0034040 - - - - - - - - - - - - - - - - * 0034140 - - - - - - - \r a n d M a k e 0034160 B a r ( b a c k g r o u n d , 0034200 n L i n e s ) = v a l o f \r 0034220 / / - - - - - - - - - - - - - - 0034240 - - - - - - - - - - - - - - - - * 0034300 - 376 001 \0 j 335 - - - - - - - - - - 0034320 - - - - - - - - - - - - - - - - 0034340 - - \r [ \r s t r u c t u r e B 0034360 a r : [ f d c b w o r d ; 0034400 l d c b w o r d ; @ D C B 0034420 ] \r m a n i f e s t l e n B 0034440 a r = s i z e B a r / 1 6 0034460 \r l e t b a r = A l l o c 0034500 a t e ( s y s Z o n e , l e n 0034520 B a r , f a l s e , t r u e 0034540 ) \r Z e r o ( b a r , l e n B 0034560 a r ) \r b a r > > B a r . f d c 0034600 b = l v b a r > > B a r . 0034620 n e x t \r b a r > > B a r . l d 0034640 c b = l v b a r > > B a r 0034660 . n e x t \r b a r > > B a r . b 0034700 a c k g r o 376 \0 L 224 * u n d = 0034720 b a c k g r o u n d \r b a r > 0034740 > B a r . w i d t h = 0 \r b 0034760 a r > > B a r . h e i g h t = 0035000 n L i n e s \r r e s u l t i s 0035020 b a r \r ] \r 377 \0 \0 P u p T e s 0035040 t B o o t . b c p l \0 373 224 024 027 X 0035060 \0 \0 376 001 \0 D O / / P u p T e s 0035100 t B o o t . b c p l - - g r 0035120 o u n d o u t s o m e u n 0035140 d e f s \r / / C o p y r i g h 0035160 t X e r o x C o r p o r a t 0035200 i o n 1 9 7 9 \r / / L a s t 0035220 m o d i f i e d J a n u a r 0035240 y 6 , 1 9 7 9 4 : 3 6 0035260 P M b y B o g g s \r \r e x t 0035300 e r n a l \r [ \r / / o u t g o i 0035320 n g p r o c e d u r e s \r I n 0035340 i t A l t o C o m P r o c ; I 0035360 n i t A l t o E I A \r \r / / o u 0035400 t g o i n g s t a t i c s \r e 0035420 i a M c L o a d e d ; c p M c 0035440 L o a d e d ; P u p T e s t C 0035460 P M c \r ] \r \r 376 001 \0 R 266 s t a t 0035500 i c [ e i a M c L o a d e d 0035520 ; c p M c L o a d e d ; P u 0035540 p T e s t C P M c ] \r \r / / - 0035560 - - - - - - - - - - - - - - - - * 0035660 - - - - - - - - - - - \r l e t 0035700 I n i t A l t o C o m P r o c ( 0035720 ) b e [ ] \r / / - - - - - 0035740 - - - - - - - - - - - - - - - - * 0036040 - - - - - - - \r \r / / - - - - - 0036060 - - - - - - - - - - - - 376 \0 245 275 0036100 256 - - - - - - - - - - - - - - - 0036120 - - - - - - - - - - - - - - - - * 0036160 - - - - - - - - - - - - \r a n d 0036200 I n i t A l t o E I A ( ) b 0036220 e [ ] \r / / - - - - - - - - 0036240 - - - - - - - - - - - - - - - - * 0036340 - - - - \r \r 377 \0 \0 P u p T e s t 0036360 B S P . b c p l \0 373 230 230 c 003 \0 \0 0036400 376 001 \0 272 } / / P u p T e s t B 0036420 S P . b c p l - P u p p a 0036440 c k a g e t e s t p r o g r 0036460 a m \r / / C o p y r i g h t 0036500 X e r o x C o r p o r a t i o 0036520 n 1 9 7 9 , 1 9 8 2 \r / / 0036540 L a s t m o d i f i e d F e 0036560 b r u a r y 1 5 , 1 9 8 2 0036600 5 : 2 7 P M b y B o g g 0036620 s \r \r g e t " P u p 0 . d e c 0036640 l " \r g e t " P u p 1 . d e c 0036660 l " \r g e t " P u p R T P . d 0036700 e c l " \r g e t " P u p B S P 0036720 . d e c l " \r g e t " P u p T 0036740 e s t . d e c l " \r \r e x t e r 0036760 n a l \r [ \r / / o u t g o i n g 0037000 p r o c 376 001 \0 a 310 e d u r e s 0037020 \r B S P R e c e i v e ; B S P 0037040 S e n d \r \r / / i n c o m i n g 0037060 p r o c e d u r e s \r Z e r o 0037100 ; M o v e B l o c k ; B l o 0037120 c k E q \r P u t s ; E n d o f 0037140 s ; C l o s e s ; B l o c k 0037160 ; F r e e ; A l l o c a t e 0037200 \r O p e n L e v e l 1 S o c k e 0037220 t ; C l o s e L e v e l 1 S o 0037240 c k e t ; S e t A l l o c a t 0037260 i o n \r O p e n R T P S o c k e 0037300 t ; C l o s e R T P S o c k e 0037320 t ; C o m p u t e T h r u p u 0037340 t \r B S P R e a d B l o c k ; 0037360 B S P W r i t e B l o c k ; C 0037400 r e a t e B S P S t 376 001 \0 006 3 r 0037420 e a m \r O p e n P o r t ; P u 0037440 t T e m p l a t e ; G e t S t 0037460 r i n g ; G e t P a r t n e r 0037500 ; W s ; W s s \r \r / / i n c 0037520 o m i n g s t a t i c s \r S t 0037540 a t e ; C m m d ; c h e c k 0037560 s u m s ; c h e c k d a t a \r 0037600 k e y s ; d s p ; s y s Z o 0037620 n e ; p b i C o u n t \r c h e 0037640 c k B u f f e r ; s e n d P o 0037660 r t ; t p ; c t x Q \r ] \r \r 0037700 m a n i f e s t \r [ \r s o c k e 0037720 t B S P T e s t = 6 \r r e a 0037740 l T i m e C l o c k = 4 3 0 0037760 b \r ] \r \r s t r u c t u r e B 0040000 y t e ^ 0 , 0 b y t e \r \f \r 376 0040020 001 \0 # 304 / / - - - - - - - - - - 0040040 - - - - - - - - - - - - - - - - * 0040140 - - \r l e t B S P R e c e i v 0040160 e ( ) b e \t / / a c o n t e 0040200 x t \r / / - - - - - - - - - - - 0040220 - - - - - - - - - - - - - - - - * 0040320 - \r [ \r l e t i n B u f f e r 0040340 = A l l o c a t e ( s y s Z 0040360 o n e , 2 5 6 ) \r l e t s o 0040400 c = v e c l e n B S P S o 0040420 c \r 376 001 \0 < 213 [ \r O 0040440 p e n L e v e l 1 S o c k e t ( 0040460 s o c , t a b l e [ 0 ; 0040500 0 ; s o c k e t B S P T e s t 0040520 ] ) \r l e t t o t a l 0040540 = p b i C o u n t / 2 \r 0040560 S e t A l l o c a t i o n ( s 0040600 o c , t o t a l , t o t a l 0040620 - 1 , t o t a l - 1 ) \r 0040640 s o c > > P u p S o c . d o C h 0040660 e c k s u m = c h e c k s u 0040700 m s \r O p e n R T P S o c 0040720 k e t ( s o c , 0 , m o d e 0040740 L i s t e n A n d R e t u r n ) 0040760 \r B l o c k ( ) r e p e 0041000 a t u n t i l s o c > > B S P 0041020 S o c . s t a t e 376 001 \0 261 \a e 0041040 q s t a t e O p e n \r l 0041060 e t s t r = C r e a t e B 0041100 S P S t r e a m ( s o c ) \r 0041120 [ \r i f B 0041140 S P R e a d B l o c k ( s t r , 0041160 i n B u f f e r , 0 , 5 1 0041200 2 , 1 2 0 0 0 ) l s 5 1 2 0041220 b r e a k / / 2 m i n \r 0041240 i f c h e c k d a 0041260 t a t h e n u n l e s s B 0041300 l o c k E q ( c h e c k B u f f 0041320 e r , i n B u f f e r , 2 5 0041340 6 ) d o \r [ 0041360 W s ( " * N R c v r D a t a 0041400 C o m p a r e E r r o r . " 0041420 ) ; b r e a k ] \r 376 001 0041440 \0 311 340 ] r e p e a t \r 0041460 C l o s e s ( s t r ) \r 0041500 ] r e p e a t \r ] \r \r / / - 0041520 - - - - - - - - - - - - - - - - * 0041620 - - - - - - - - - - - \r a n d 0041640 B S P S e n d ( ) b e \r / / - 0041660 - - - - - - - - - - - - - - - - * 0041760 - - - - - - - - - - - \r [ \r W s 0042000 ( " B S P S e n d . " ) \r 0042020 l e t s o c = v e c l e 0042040 n B S 376 001 \0 b 274 P S o c \r t e s 0042060 t C m m d e q 0 \r i 0042100 f n o t [ C m m d = 0 ; 0042120 O p e n L e v e l 1 S o c k e 0042140 t ( s o c , 0 , s e n d P o 0042160 r t ) ] \r i f s o u n 0042200 l e s s O p e n P o r t ( " R 0042220 e c e i v e P o r t : " , 0042240 s o c , 0 , s o c k e t B S 0042260 P T e s t ) r e t u r n \r l e 0042300 t t o t a l = p b i C o u 0042320 n t / 2 \r S e t A l l o c a t i 0042340 o n ( s o c , t o t a l , t 0042360 o t a l - 1 , t o t a l - 1 ) 0042400 \r W s ( " - C h e c k s u m s 0042420 " ) ; W s ( c h e c k s u m 0042440 s ? " e n a 376 001 \0 R " b l e 0042460 d * N " , " d i s a b l e d * 0042500 N " ) \r s o c > > P u p S o c . 0042520 d o C h e c k s u m = c h e 0042540 c k s u m s \r t e s t O p e n 0042560 R T P S o c k e t ( s o c ) \r 0042600 i f s o W s ( " C o n n e 0042620 c t i o n o p e n . ' ! ' 0042640 = 1 0 , 0 0 0 b y t e s * 0042660 N " ) \r i f n o t [ W 0042700 s ( " F a i l e d . " ) ; C l 0042720 o s e L e v e l 1 S o c k e t ( 0042740 s o c ) ; r e t u r n ] \r S 0042760 t a t e = s t a t e B S P \r 0043000 l e t s t r = C r e a t e 0043020 B S P S t r e a m ( s o c ) \r Z 0043040 e r o ( t p , l e n T P 376 001 \0 0043060 274 315 ) \r t p > > T P . t i m e r 0043100 = @ r e a l T i m e C l o c 0043120 k \r [ \r u n l e s s 0043140 B S P W r i t e B l o c k ( s 0043160 t r , c h e c k B u f f e r , 0043200 0 , 5 1 2 ) t h e n \r 0043220 [ W s ( " * N B S P W 0043240 r i t e B l o c k F a i l e d 0043260 " ) ; b r e a k ] \r t 0043300 p > > T P . c o u n t = t p 0043320 > > T P . c o u n t + 5 1 2 0043340 \r i f t p > > T P . c o 0043360 u n t g e 1 0 0 0 0 t h e 0043400 n \r [ \r 0043420 t p > > T P . c o u n t = t 0043440 p > > T P . c o u n t - 1 0 0043460 0 0 376 001 \0 203 376 0 \r P 0043500 u t s ( d s p , $ ! ) \r 0043520 t p > > T P . b i g C o u 0043540 n t = t p > > T P . b i g C 0043560 o u n t + 1 \r i f 0043600 t p > > T P . b i g C o u n t 0043620 e q 5 0 t h e n / / 5 0 0043640 0 , 0 0 0 b y t e s \r 0043660 [ \r 0043700 C o m p u t e T h r u p u t ( t 0043720 p ) \r t p > > 0043740 T P . b i g C o u n t = 0 \r 0043760 t p > > T P . 0044000 t i m e r = @ r e a l T i m 0044020 e C l o c k \r 0044040 ] \r ] \r ] r 0044060 e p e a t w h 376 \0 222 240 373 i l e 0044100 E n d o f s ( k e y s ) & s 0044120 o c > > B S P S o c . s t a t e 0044140 e q s t a t e O p e n & 0044160 C m m d e q 0 \r t e s t C 0044200 l o s e s ( s t r ) \r i f 0044220 s o W s ( " * N C l o s e d 0044240 c l e a n l y " ) \r i f n 0044260 o t W s ( " * N C l o s e d 0044300 u n c l e a n l y " ) \r ] \r 377 \0 0044320 \0 P u p T e s t E F T P . b c p 0044340 l \0 373 230 230 c _ \0 \0 376 001 \0 8 263 / / 0044360 P u p T e s t E F T P . b c p 0044400 l - P u p p a c k a g e 0044420 t e s t p r o g r a m \r / / 0044440 C o p y r i g h t X e r o x 0044460 C o r p o r a t i o n 1 9 7 9 0044500 , 1 9 8 2 \r / / L a s t m 0044520 o d i f i e d F e b r u a r y 0044540 1 5 , 1 9 8 2 5 : 2 8 0044560 P M b y B o g g s \r \r g e t 0044600 " P u p E F T P . d e c l " \r 0044620 g e t " P u p T e s t . d e c 0044640 l " \r \r e x t e r n a l \r [ \r / 0044660 / o u t g o i n g p r o c e d 0044700 u r e s \r E F T P R e c e i v e 0044720 ; E F T P S e n d \r \r / / i n 0044740 c o m i n g p r o c e d u 376 001 0044760 \0 @ } r e s \r G e t S t r i n g 0045000 ; G e t P a r t n e r \r Z e r 0045020 o ; M o v e B l o c k ; B l 0045040 o c k E q ; B l o c k \r P u t 0045060 s ; E n d o f s ; F r e e ; 0045100 A l l o c a t e \r S e t A l l 0045120 o c a t i o n ; C o m p u t e 0045140 T h r u p u t \r O p e n P o r t 0045160 ; P u t T e m p l a t e ; W 0045200 s ; W s s \r O p e n E F T P S 0045220 o c ; C l o s e E F T P S o c 0045240 ; S e n d E F T P E n d \r S e 0045260 n d E F T P B l o c k ; R e c 0045300 e i v e E F T P B l o c k \r \r / 0045320 / i n c o m i n g s t a t i c 0045340 s \r S t a t e ; C m m d ; c 0045360 h e c 376 001 \0 370 211 k s u m s ; c 0045400 h e c k d a t a \r k e y s ; d 0045420 s p ; s y s Z o n e ; p b i 0045440 C o u n t \r c h e c k B u f f e 0045460 r ; s e n d P o r t ; t p \r 0045500 ] \r \r m a n i f e s t r e a l 0045520 T i m e C l o c k = 4 3 0 b 0045540 \r \f \r / / - - - - - - - - - - - 0045560 - - - - - - - - - - - - - - - - * 0045660 - \r l e t E F T P R e c e i v 0045700 e ( ) b e \t / / a c o n t e 0045720 x t \r / / - - - - - - - - - - - 0045740 - - - - - - - - - - - - - - - - 0045760 - - - - - - - - 376 001 \0 362 027 - - - 0046000 - - - - - - - - - - - - - - - - * 0046040 - - - - - - \r [ \r l e t i n B 0046060 u f f e r = A l l o c a t e 0046100 ( s y s Z o n e , 2 5 6 ) \r l 0046120 e t s o c = v e c l e n 0046140 E F T P S o c \r [ \r 0046160 O p e n E F T P S o c ( s o c , 0046200 t a b l e [ 0 ; 0 ; s 0046220 o c k e t E F T P R e c e i v e 0046240 ] , 0 ) \r l e t t o 0046260 t a l = p b i C o u n t / 2 0046300 \r S e t A l l o c a t i o 0046320 n ( s o c , t o t a l , t o 0046340 t a l - 1 , t o t a l - 1 ) \r 0046360 s o c > > P u p S o 376 001 \0 0046400 005 216 c . d o C h e c k s u m = 0046420 c h e c k s u m s \r w h 0046440 i l e R e c e i v e E F T P B 0046460 l o c k ( s o c , i n B u f f 0046500 e r , 5 1 2 , - 1 ) e q 0046520 5 1 2 d o \r i f 0046540 c h e c k d a t a t h e n u 0046560 n l e s s B l o c k E q ( c h 0046600 e c k B u f f e r , i n B u f 0046620 f e r , 2 5 6 ) d o \r 0046640 [ W s ( " * N R c 0046660 v r D a t a C o m p a r e 0046700 E r r o r . " ) ; b r e a k 0046720 ] \r C l o s e E F T P S o 0046740 c ( s o c ) \r ] r e p e 0046760 a t \r ] \r \r / / - - - - - - - - 0047000 - - 376 001 \0 375 \0 - - - - - - - - - 0047020 - - - - - - - - - - - - - - - - * 0047100 - - - - - - - - - \r a n d E F 0047120 T P S e n d ( ) b e \r / / - - 0047140 - - - - - - - - - - - - - - - - * 0047240 - - - - - - - - - - \r [ \r W s ( 0047260 " E F T P S e n d . " ) \r 0047300 l e t s o c = v e c l e 0047320 n E F T P S o c \r t e s t C m 0047340 m d e q 0 \r i f s o \r 0047360 [ \r l e 0047400 t n a m e 376 001 \0 y 6 = v e 0047420 c 4 0 \r u n l e s 0047440 s G e t S t r i n g ( " R e c 0047460 e i v e P o r t : " , n a 0047500 m e , t r u e , f a l s e ) 0047520 r e t u r n \r i f 0047540 G e t P a r t n e r ( n a m e 0047560 , d s p , s e n d P o r t , 0047600 0 , s o c k e t E F T P R e 0047620 c e i v e ) b r e a k \r 0047640 ] r e p e a t \r i 0047660 f n o t \r [ \r 0047700 s e n d P o r t > > P o r 0047720 t . s o c k e t ^ 1 = 0 \r 0047740 s e n d P o r t > > P 0047760 o r t . s o c k e t ^ 2 = s 0050000 o c k e t E F T P R e c 376 001 \0 " 0050020 325 e i v e \r ] \r O p 0050040 e n E F T P S o c ( s o c , 0 0050060 , s e n d P o r t ) \r l e t 0050100 t o t a l = p b i C o u n t 0050120 / 2 \r S e t A l l o c a t i o n 0050140 ( s o c , t o t a l , t o t 0050160 a l - 1 , t o t a l - 1 ) \r W 0050200 s ( " - C h e c k s u m s " 0050220 ) ; W s ( c h e c k s u m s 0050240 ? " e n a b l e d . * N " , 0050260 " d i s a b l e d . * N " ) \r s 0050300 o c > > P u p S o c . d o C h e 0050320 c k s u m = c h e c k s u m 0050340 s \r t e s t S e n d E F T P B 0050360 l o c k ( s o c , c h e c k B 0050400 u f f e r , 5 1 2 , 1 2 0 0 0050420 0 376 001 \0 \v 272 ) e q 5 1 2 \r 0050440 i f s o W s ( " C o n n e 0050460 c t i o n o p e n . ' ! ' 0050500 = 1 0 , 0 0 0 b y t e s * 0050520 N " ) \r i f n o t [ W 0050540 s ( " F a i l e d . " ) ; C l 0050560 o s e E F T P S o c ( s o c ) ; 0050600 r e t u r n ] \r S t a t e 0050620 = s t a t e E F T P \r Z e r o 0050640 ( t p , l e n T P ) \r t p > > 0050660 T P . t i m e r = @ r e a l 0050700 T i m e C l o c k \r [ \r 0050720 i f S e n d E F T P B l o 0050740 c k ( s o c , c h e c k B u f 0050760 f e r , 5 1 2 , 1 2 0 0 0 ) 0051000 n e 5 1 2 t h e n \r 0051020 [ W 376 001 \0 024 \a s ( " * N 0051040 S e n d E F T P B l o c k F a 0051060 i l e d " ) ; b r e a k ] \r 0051100 t p > > T P . c o u n t 0051120 = t p > > T P . c o u n t + 0051140 5 1 2 \r i f t p > > T 0051160 P . c o u n t g e 1 0 0 0 0 0051200 t h e n \r [ \r 0051220 t p > > T P . c o u n t 0051240 = t p > > T P . c o u n t 0051260 - 1 0 0 0 0 \r P u 0051300 t s ( d s p , $ ! ) \r 0051320 t p > > T P . b i g C o u n t 0051340 = t p > > T P . b i g C o u 0051360 n t + 1 \r i f t p 0051400 > > T P . b i g C o u n t e q 0051420 5 0 t h e n / 376 001 \0 367 017 0051440 / 5 0 0 , 0 0 0 b y t e s \r 0051460 [ \r 0051500 C o m p u t e T h r u p u 0051520 t ( t p ) \r t 0051540 p > > T P . b i g C o u n t = 0051560 0 \r t p > > 0051600 T P . t i m e r = @ r e a l 0051620 T i m e C l o c k \r 0051640 ] \r ] \r 0051660 ] r e p e a t w h i l e E n 0051700 d o f s ( k e y s ) & C m m 0051720 d e q 0 \r t e s t S e n d 0051740 E F T P E n d ( s o c , 3 0 0 0051760 0 ) \r i f s o W s ( " * 0052000 N C l o s e d c l e a n l y " 0052020 ) \r i f n o t W s ( " * 0052040 376 \0 ( 035 S N C l o s e d u n c 0052060 l e a n l y " ) \r C l o s e E F 0052100 T P S o c ( s o c ) \r ] \r 377 \0 \0 0052120 P u p T e s t E c h o . b c p l 0052140 \0 373 230 230 c 247 \0 \0 376 001 \0 224 253 / / 0052160 P u p T e s t E c h o . b c p l 0052200 \r / / C o p y r i g h t X e 0052220 r o x C o r p o r a t i o n 0052240 1 9 7 9 , 1 9 8 2 \r / / L a 0052260 s t m o d i f i e d F e b r 0052300 u a r y 1 5 , 1 9 8 2 5 0052320 : 3 0 P M b y B o g g s \r 0052340 \r g e t " P u p 0 . d e c l " 0052360 \r g e t " P u p 1 . d e c l " 0052400 \r g e t " P u p T e s t . d e 0052420 c l " \r \r e x t e r n a l \r [ \r 0052440 / / o u t g o i n g p r o c e 0052460 d u r e s \r E c h o S e r v e r 0052500 ; E c h o U s e r \r \r / / i n 0052520 c o m i n g p r o c e d u r e 0052540 s \r P u t s ; E n d o f 376 001 \0 0052560 370 036 s ; M o v e B l o c k ; 0052600 Z e r o \r G e t P B I ; R e l 0052620 e a s e P B I ; E x c h a n g 0052640 e P o r t s ; H L o o k u p \r 0052660 O p e n L e v e l 1 S o c k e t 0052700 ; C o m p l e t e P u p ; C 0052720 l o s e L e v e l 1 S o c k e t 0052740 \r S e t T i m e r ; T i m e r 0052760 H a s E x p i r e d ; E n q u 0053000 e u e ; D e q u e u e ; B l 0053020 o c k \r O t h e r S p i g o t ; 0053040 P r i n t P o r t ; O p e n 0053060 P o r t \r D i v i d e 3 2 x 1 6 0053100 ; B l o c k E q ; D o u b l 0053120 e I n c r e m e n t \r P u t T e 0053140 m p l a t e ; W s \r \r / / i n 0053160 c o 376 001 \0 341 M m i n g s t a t 0053200 i c s \r d s p ; k e y s \r p u 0053220 p R T ; m a x P u p D a t a B 0053240 y t e s \r C m m d ; c h e c k 0053260 s u m s ; c h e c k d a t a ; 0053300 s e n d P o r t ; c h e c k 0053320 B u f f e r \r ] \r \r m a n i f e 0053340 s t \r [ \r s o c k e t E c h o 0053360 = 5 \r t y p e E c h o M e = 0053400 1 \r t y p e I m A n E c h o 0053420 = 2 \r ] \r \r s t r u c t u r e 0053440 B y t e ^ 0 , 0 b y t e \r \f 0053460 \r / / - - - - - - - - - - - - - 0053500 - - - - - - - - - - - - - - - - * 0053560 - - - - - - - 376 001 \0 202 \b - - - - 0053600 - - - - \r l e t E c h o S e r 0053620 v e r ( ) b e \t / / a c o n 0053640 t e x t \r / / - - - - - - - - - 0053660 - - - - - - - - - - - - - - - - * 0053760 - - - \r [ \r l e t s e r v e r 0054000 S o c = v e c l e n P u p 0054020 S o c \r O p e n L e v e l 1 S o 0054040 c k e t ( s e r v e r S o c , 0054060 t a b l e [ 0 ; 0 ; s o 0054100 c k e t E c h o ] ) \r [ 0054120 \r B l o c k ( ) r e p e 0054140 a t u n t i l s e r v e r S o 0054160 c > > P u p S o c . i Q 376 001 \0 T 0054200 365 . h e a d n e 0 \r l 0054220 e t p b i = D e q u e u e 0054240 ( l v s e r v e r S o c > > P 0054260 u p S o c . i Q ) \r t e s 0054300 t p b i > > P B I . p u p . t 0054320 y p e e q t y p e E c h o M 0054340 e \r i f n o t O t 0054360 h e r S p i g o t ( p b i ) \r 0054400 i f s o \r 0054420 [ \r E x 0054440 c h a n g e P o r t s ( p b i ) 0054460 \r / / c o m p 0054500 u t e c h e c k s u m o n 0054520 o u t g o i n g p a c k e t \r 0054540 / / i f i 0054560 n c o m i n g p a c k e t c 0054600 o 376 001 \0 304 264 m p u t e d i t . 0054620 \r s e r v e r 0054640 S o c > > P u p S o c . d o C h 0054660 e c k s u m = \r 0054700 p b i ! ( l e n P B I O v 0054720 e r h e a d + ( p b i > > P B I 0054740 . p u p . l e n g t h - 1 ) r 0054760 s h i f t 1 ) n e - 1 \r 0055000 C o m p l e t e 0055020 P u p ( p b i , t y p e I m A 0055040 n E c h o ) \r 0055060 s e r v e r S o c > > P u p S o 0055100 c . d o C h e c k s u m = t 0055120 r u e \r P u t 0055140 s ( d s p , $ $ ) \r 0055160 ] \r ] r e p e a 0055200 t \r ] \r \r / 376 001 \0 273 263 / - - - - 0055220 - - - - - - - - - - - - - - - - * 0055320 - - - - - - - - \r a n d E c h 0055340 o U s e r ( ) b e \r / / - - - 0055360 - - - - - - - - - - - - - - - - * 0055460 - - - - - - - - - \r [ \r l e t 0055500 u s e r S o c = v e c l e 0055520 n P u p S o c \r t e s t C m m 0055540 d e q 0 \r i f n o t 0055560 [ C m m d = 0 ; O p e n 0055600 L e v e l 1 S o c k e 376 001 \0 M 267 0055620 t ( u s e r S o c , 0 , s e 0055640 n d P o r t ) ] \r i f s 0055660 o u n l e s s O p e n P o r 0055700 t ( " E c h o t o : " , u 0055720 s e r S o c , 0 , s o c k e 0055740 t E c h o ) r e t u r n \r \r W 0055760 s ( " - C h e c k s u m s " 0056000 ) ; W s ( c h e c k s u m s 0056020 ? " e n a b l e d " , " d i 0056040 s a b l e d " ) \r W s ( " , D 0056060 a t a c h e c k i n g " ) ; 0056100 W s ( c h e c k d a t a ? " 0056120 e n a b l e d * N " , " d i s 0056140 a b l e d * N " ) \r u s e r S o 0056160 c > > P u p S o c . d o C h e c 0056200 k s u m = c h e c k s u m s 0056220 376 001 \0 365 342 \r \r P r i n t P o r t 0056240 ( l v u s e r S o c > > P u p 0056260 S o c . l c l P o r t ) ; W s 0056300 ( " - > " ) \r l e t r t e 0056320 = H L o o k u p ( p u p R T 0056340 , u s e r S o c > > P u p S o 0056360 c . f r n P o r t . n e t ) \r i 0056400 f r t e n e 0 & r t e 0056420 > > R T E . h o p s n e 0 0056440 t h e n \r P u t T e m p l 0056460 a t e ( d s p , " [ $ U O # $ 0056500 U O # ] - > " , \r r 0056520 t e > > R T E . n d b > > N D B 0056540 . l o c a l N e t , r t e > > 0056560 R T E . h o s t ) \r P r i n t P 0056600 o r t ( l v u s e r S o c > > 0056620 P u p S o 376 001 \0 \f 020 c . f r n P 0056640 o r t ) \r \r l e t o u t = 0056660 v e c 6 ; Z e r o ( o u t , 0056700 6 ) \r l e t i n , i n T i 0056720 m e s 1 0 0 = o u t + 2 , 0056740 o u t + 4 \r l e t n u m D a t 0056760 a B y t e s , n u m D a t a W 0057000 o r d s , p u p i d = m a 0057020 x P u p D a t a B y t e s , 0 0057040 , 0 \r \r w h i l e E n d o f 0057060 s ( k e y s ) & C m m d e 0057100 q 0 d o \r [ \r l 0057120 e t p b i = G e t P B I ( 0057140 u s e r S o c ) \r / / p a 0057160 c k e t s g e t l o n g e r 0057200 b y 1 b y t e e a c h 0057220 t i m e . \r n 376 001 \0 205 271 u 0057240 m D a t a B y t e s = n u m 0057260 D a t a B y t e s + 1 \r 0057300 i f n u m D a t a B y t e s 0057320 g r m a x P u p D a t a B y t 0057340 e s t h e n n u m D a t a B 0057360 y t e s = 0 \r n u m D 0057400 a t a W o r d s = ( n u m D 0057420 a t a B y t e s + 1 ) / 2 \r 0057440 p u p i d = p u p i d 0057460 + 1 \r p b i > > P B I . p 0057500 u p . i d ^ 1 = 0 \r p 0057520 b i > > P B I . p u p . i d ^ 2 0057540 = p u p i d \r M o v e 0057560 B l o c k ( l v p b i > > P B 0057600 I . p u p . b y t e s , c h e 0057620 c k B u f f e r , n u m D a 376 0057640 001 \0 227 366 t a W o r d s ) \r 0057660 C o m p l e t e P u p ( p b i , 0057700 t y p e E c h o M e , n u m 0057720 D a t a B y t e s + p u p O v B 0057740 y t e s ) \r D o u b l e I 0057760 n c r e m e n t ( o u t ) \r 0060000 \r l e t t i m e O u t 0060020 = n i l ; S e t T i m e r 0060040 ( l v t i m e O u t , 1 5 0 0060060 ) / / 1 . 5 s e c o n d s 0060100 \r [ \r B 0060120 l o c k ( ) r e p e a t u n t 0060140 i l u s e r S o c > > P u p S 0060160 o c . i Q . h e a d % \r 0060200 T i m e r H a s E x p i 0060220 r e d ( l v t i m e O u t ) \r 0060240 376 001 \0 211 263 p b i = 0060260 D e q u e u e ( l v u s e r 0060300 S o c > > P u p S o c . i Q ) \r 0060320 i f p b i e q 0060340 0 t h e n [ P u t s ( d s 0060360 p , $ ? ) ; b r e a k ] \r 0060400 i f p b i > > P B 0060420 I . p u p . t y p e n e t y 0060440 p e I m A n E c h o t h e n \r 0060460 [ O t h e r 0060500 S p i g o t ( p b i ) ; l o o 0060520 p ] \r D o u b l e 0060540 I n c r e m e n t ( i n ) ; D 0060560 o u b l e I n c r e m e n t ( i 0060600 n T i m e s 1 0 0 , 1 0 0 ) \r 0060620 / / n o t e t h a 0060640 t i f t h e r 376 001 \0 303 @ e 0060660 i s a ' g a r b a g e ' b 0060700 y t e a t t h e e n d o 0060720 f t h e p a c k e t , \r 0060740 / / i t h a s a 0060760 k n o w n v a l u e a n d 0061000 w e c h e c k i t . \r 0061020 i f c h e c k d a t a 0061040 & n u m D a t a B y t e s g 0061060 r 0 t h e n \r 0061100 u n l e s s B l o c k E q 0061120 ( c h e c k B u f f e r , l v 0061140 p b i > > P B I . p u p . b y 0061160 t e s , n u m D a t a W o r d 0061200 s ) d o \r 0061220 W s ( " D a t a c o m p a 0061240 r e e r r o r * N " ) \r 376 001 0061260 \0 321 \v t e s t p b i 0061300 > > P B I . p u p . i d ^ 2 e 0061320 q p u p i d \r 0061340 i f n o t [ P u t s ( d s 0061360 p , $ # ) ; R e l e a s e P 0061400 B I ( p b i ) ] \r 0061420 i f s o [ P u t s ( d 0061440 s p , $ ! ) ; R e l e a s e 0061460 P B I ( p b i ) ; b r e a k 0061500 ] \r ] r e p e a t 0061520 \r ] \r \r C l o s e L e v e 0061540 l 1 S o c k e t ( u s e r S o c 0061560 ) \r P u t T e m p l a t e ( d s 0061600 p , " * n O u t : $ E D , 0061620 I n : $ E D " , o u t , i 0061640 n ) \r w h i l e o u t ! 0 n 0061660 e 0 376 \0 252 254 341 d o / / s 0061700 c a l e s o d e n o m i n a 0061720 t o r i s l s 2 ^ 1 6 \r 0061740 [ D i v i d e 3 2 x 1 6 ( 0061760 i n T i m e s 1 0 0 , 1 0 ) ; 0062000 D i v i d e 3 2 x 1 6 ( o u t 0062020 , 1 0 ) ] \r D i v i d e 3 2 0062040 x 1 6 ( i n T i m e s 1 0 0 , 0062060 o u t ! 1 ) \r P u t T e m p l a 0062100 t e ( d s p , " , $ U D % " 0062120 , i n T i m e s 1 0 0 ! 1 ) \r 0062140 ] \r 377 \0 \0 P u p T e s t M i s c 0062160 . b c p l \0 373 230 230 | J \0 \0 376 001 \0 0062200 245 \b / / P u p T e s t M i s c 0062220 . b c p l \r / / C o p y r i g 0062240 h t X e r o x C o r p o r a 0062260 t i o n 1 9 8 0 , 1 9 8 2 \r 0062300 / / L a s t m o d i f i e d 0062320 F e b r u a r y 1 5 , 1 9 0062340 8 2 5 : 3 6 P M b y B 0062360 o g g s \r \r g e t " p u p . d 0062400 e c l " \r g e t " p u p t e s 0062420 t . d e c l " \r \r e x t e r n a 0062440 l \r [ \r / / o u t g o i n g 0062460 p r o c e d u r e s \r M i s c S 0062500 e r v i c e s \r \r / / i n c o 0062520 m i n g p r o c e d u r e s \r 0062540 W s ; P u t s ; G e t s ; 0062560 P u t T e m p l a t e ; U N P 0062600 A C 376 001 \0 345 256 K D T ; W R I T 0062620 E U D T \r G e t P B I ; R e l 0062640 e a s e P B I ; C o m p l e t 0062660 e P u p ; A p p e n d S t r i 0062700 n g T o P u p \r O p e n L e v e 0062720 l 1 S o c k e t ; C l o s e L 0062740 e v e l 1 S o c k e t \r S e t T 0062760 i m e r ; T i m e r H a s E x 0063000 p i r e d ; E n q u e u e ; 0063020 D e q u e u e ; B l o c k ; 0063040 M u l t E q \r C o n f i r m ; 0063060 G e t S t r i n g \r O p e n P o 0063100 r t ; R T T i t l e ; R T E 0063120 n t r y ; P r i n t P o r t \r 0063140 O t h e r S p i g o t \r \r / / 0063160 i n c o m i n g s t a t i c s 0063200 \r d s p ; k 376 001 \0 035 332 e y s \r 0063220 ] \r \r m a n i f e s t \r [ \r / / 0063240 m i s c s e r v i c e s p 0063260 r o t o c o l s \r p s M i s c S 0063300 e r v = 4 \r \r p t S t r i n 0063320 g T i m e R e q u e s t = 2 0063340 0 0 b \r p t S t r i n g T i m e 0063360 R e p l y = 2 0 1 b \r p t T 0063400 e n e x T i m e R e q u e s t 0063420 = 2 0 2 b \r p t T e n e x T i 0063440 m e R e p l y = 2 0 3 b \r p 0063460 t A l t o T i m e R e q u e s t 0063500 = 2 0 6 b \r p t A l t o T i 0063520 m e R e p l y = 2 0 7 b \r \r 0063540 p t M a i l C h e c k R e q u e 0063560 s t = 2 1 4 b \r p t M a i l 0063600 C h e c k Y e s = 2 376 001 \0 k 0063620 376 1 1 b \r p t M a i l C h e c k 0063640 N o = 2 1 2 b \r p t M a i l 0063660 C h e c k E r r o r = 2 1 3 0063700 b \r \r p t N a m e R e q u e s t 0063720 = 2 2 0 b \r p t N a m e R e 0063740 p l y = 2 2 1 b \r p t N a m 0063760 e A d d r E r r o r = 2 2 2 0064000 b \r p t A d d r e s s R e q u e 0064020 s t = 2 2 3 b \r p t A d d r 0064040 e s s R e p l y = 2 2 4 b \r 0064060 p t N e t D i r V e r s i o n 0064100 = 2 4 0 b \r \r p t W h e r e U 0064120 s e r R e q u e s t = 2 3 0 0064140 b \r p t W h e r e U s e r R e p 0064160 l y = 2 3 1 b \r p t W h e r 0064200 e U s e r E r r o r = 2 3 2 0064220 b 376 001 \0 177 q \r \r p t A u t h R e 0064240 q u e s t = 2 5 0 b \r p t A 0064260 u t h Y e s = 2 5 1 b \r p t 0064300 A u t h N o = 2 5 2 b \r \r p 0064320 t V a l i d R e c i p R e q u e 0064340 s t = 2 6 6 b \r p t V a l i 0064360 d R e c i p Y e s = 2 6 7 b 0064400 \r p t V a l i d R e c i p N o 0064420 = 2 7 0 b \r \r / / R o u t i 0064440 n g i n f o p r o t o c o l 0064460 \r p s R o u t e I n f o = 2 0064500 \r \r p t R o u t e I n f o R e q 0064520 u e s t = 2 0 0 b \r p t R o 0064540 u t e I n f o R e p l y = 2 0064560 0 1 b \r ] \r \r s t a t i c [ 0064600 m i s c I D ; m i s c S o c 0064620 ] \r \f \r / / 376 001 \0 L 004 - - - - - 0064640 - - - - - - - - - - - - - - - - * 0064740 - - - - - - - \r l e t M i s c 0064760 S e r v i c e s ( q u i t ) b 0065000 e \r / / - - - - - - - - - - - - 0065020 - - - - - - - - - - - - - - - - * 0065120 \r [ \r l e t s o c = v e c 0065140 l e n P u p S o c ; m i s c 0065160 S o c = s o c \r u n l e s s 0065200 O p e n P o r t ( " M i s c 0065220 s e r v i c e s h o 376 001 \0 037 020 0065240 s t : " , s o c , 0 , p 0065260 s M i s c S e r v ) r e t u r 0065300 n \r [ \r W s ( " * N 0065320 > > " ) \r s w i t c h o n 0065340 G e t s ( k e y s ) i n t o 0065360 \r [ \r c 0065400 a s e $ A : c a s e $ a : 0065420 \r [ A u t h 0065440 e n t i c a t e ( ) ; e n d c 0065460 a s e ] \r c a s e 0065500 $ D : c a s e $ d : \r 0065520 [ D a t e A n d 0065540 T i m e ( ) ; e n d c a s e 0065560 ] \r c a s e $ H : 0065600 c a s e $ h : \r 0065620 [ q u i t = f a l s 0065640 376 001 \0 267 X e ; b r e a k ] \r 0065660 c a s e $ N : c 0065700 a s e $ n : \r 0065720 [ N e t D i r e c t o r y ( 0065740 ) ; e n d c a s e ] \r 0065760 c a s e $ M : c a s e 0066000 $ m : \r [ 0066020 M a i l C h e c k ( ) ; e n d 0066040 c a s e ] \r c a s 0066060 e $ Q : c a s e $ q : \r 0066100 [ q u i t = 0066120 C o n f i r m ( " Q u i t " 0066140 ) ; b r e a k ] \r 0066160 c a s e $ R : c a s e $ 0066200 r : \r [ R o 0066220 u t i n g I n f o ( ) ; e n d 0066240 c a s e 376 001 \0 341 O ] \r 0066260 c a s e $ V : c a s e 0066300 $ v : \r [ V 0066320 a l i d a t e R e c i p ( ) ; 0066340 e n d c a s e ] \r 0066360 c a s e $ W : c a s e $ w 0066400 : \r [ W h e 0066420 r e I s U s e r ( ) ; e n d c 0066440 a s e ] \r c a s e 0066460 $ ? : \r [ \r 0066500 W s ( " ? O 0066520 n e o f t h e f o l l o w 0066540 i n g : " ) \r 0066560 W s ( " * n A u t h e n t i c a 0066600 t e , D a t e a n d t i m 0066620 e , H o s t , " ) \r 0066640 W s ( " * n 376 001 \0 = 244 N 0066660 e t D i r e c t o r y , M a 0066700 i l c h e c k , Q u i t , " 0066720 ) \r W s ( " * 0066740 n R o u t i n g i n f o , V 0066760 a l i d a t e r e c i p i e n 0067000 t , W h e r e i s U s e r 0067020 . " ) \r l o o 0067040 p \r ] \r 0067060 ] \r ] r e p e a t 0067100 \r C l o s e L e v e l 1 S o c k 0067120 e t ( s o c ) \r ] r e p e a t 0067140 u n t i l q u i t \r \f \r / / - 0067160 - - - - - - - - - - - - - - - - * 0067240 - - - - - - - - - - - - - - - 376 0067260 001 \0 371 T - - - - - - - - - - - - 0067300 \r a n d D a t e A n d T i m e 0067320 ( ) b e \r / / - - - - - - - - 0067340 - - - - - - - - - - - - - - - - * 0067440 - - - - \r [ \r W s ( " D a t e 0067460 a n d t i m e p r o t o c o 0067500 l " ) \r [ \r l e t 0067520 p b i = G e t P B I ( m i 0067540 s c S o c ) \r \r 0067560 [ \r W s ( " * N > 0067600 > > " ) \r s w i t c 0067620 h o n G e t s ( k e y s ) i 0067640 n t o \r [ \r 0067660 376 001 \0 m 214 c a s 0067700 e $ T : c a s e $ t : \r 0067720 [ \r 0067740 W s ( " T e n 0067760 e x f o r m a t : " ) \r 0070000 p b i > > P 0070020 B I . p u p . t y p e = p t 0070040 T e n e x T i m e R e q u e s t 0070060 \r b r e 0070100 a k \r ] 0070120 \r c a s e $ 0070140 A : c a s e $ a : \r 0070160 [ \r 0070200 W s ( " A l t o f 0070220 o r m a t : " ) \r 0070240 p b i > > P B I . p 0070260 u p . t y p e = 376 001 \0 360 277 p 0070300 t A l t o T i m e R e q u e s t 0070320 \r b r e 0070340 a k \r ] 0070360 \r c a s e $ 0070400 S : c a s e $ s : \r 0070420 [ \r 0070440 W s ( " S t r i n g 0070460 f o r m a t : " ) \r 0070500 p b i > > P B I 0070520 . p u p . t y p e = p t S t 0070540 r i n g T i m e R e q u e s t \r 0070560 b r e a 0070600 k \r ] \r 0070620 c a s e $ Q 0070640 : c a s e $ q : W s ( " Q 0070660 u i t " ) / / f a l l s 376 001 0070700 \0 _ l t h r o u g h \r 0070720 c a s e $ * 1 7 7 : 0070740 [ R e l e a s e P B I ( p b i 0070760 ) ; r e t u r n ] \r 0071000 c a s e $ ? : \r 0071020 [ \r 0071040 W s ( " A l t o 0071060 , T e n e x , S t r i n g : 0071100 " ) \r 0071120 l o o p \r 0071140 ] \r ] \r 0071160 ] r e p e a t \r 0071200 \r p b i > > P B I . p u p 0071220 . l e n g t h = p u p O v B 0071240 y t e s \r p b i = S e 0071260 n d C o m m a n d ( p b i ) ; 0071300 i f 376 001 \0 J 330 p b i e q 0 0071320 l o o p \r \r s w i 0071340 t c h o n p b i > > P B I . p 0071360 u p . t y p e i n t o \r 0071400 [ \r c a s e 0071420 p t S t r i n g T i m e R e p l 0071440 y : \r [ P r 0071460 i n t C o n t e n t s ( p b i ) 0071500 ; e n d c a s e ] \r 0071520 c a s e p t T e n e x T i 0071540 m e R e p l y : \r 0071560 [ \r f o r 0071600 i = 1 t o p b i > > P 0071620 B I . p u p . l e n g t h - p u 0071640 p O v B y t e s d o \r 0071660 P u t T e m p l 0071700 a t e ( d s p , 376 001 \0 > 035 " $ U 0071720 O " , p b i > > P B I . p u 0071740 p . b y t e s ^ i ) \r 0071760 e n d c a s e \r 0072000 ] \r c a s 0072020 e p t A l t o T i m e R e p l 0072040 y : \r [ \r 0072060 f o r i = 1 0072100 t o p b i > > P B I . p u p 0072120 . l e n g t h - p u p O v B y t 0072140 e s d o \r 0072160 P u t T e m p l a t e ( d s 0072200 p , " $ U O " , p b i > > P 0072220 B I . p u p . b y t e s ^ i ) \r 0072240 l e t u v 0072260 = v e c 6 \r 0072300 U N P A C K D T ( l v 376 001 \0 0072320 T 005 p b i > > P B I . p u p . b 0072340 y t e s ^ 1 , u v ) \r 0072360 W s ( " = " ) \r 0072400 W R I T E U D T ( 0072420 d s p , u v ) \r 0072440 e n d c a s e \r 0072460 ] \r ] \r 0072500 \r R e l e a s e P B I ( p 0072520 b i ) \r ] r e p e a t \r 0072540 ] \r \f \r / / - - - - - - - - - - 0072560 - - - - - - - - - - - - - - - - * 0072660 - - \r a n d N e t D i r e c t 0072700 o r y ( ) b e \r / / - - - - - 0072720 - - 376 001 \0 310 317 - - - - - - - - - 0072740 - - - - - - - - - - - - - - - - * 0073020 - - - - - - - - - - - - \r [ \r W 0073040 s ( " N e t d i r e c t o r y 0073060 p r o t o c o l " ) \r 0073100 [ \r l e t p b i = G 0073120 e t P B I ( m i s c S o c ) \r 0073140 \r [ \r 0073160 W s ( " * N > > > " ) \r 0073200 s w i t c h o n G e t s 0073220 ( k e y s ) i n t o \r 0073240 [ \r 0073260 c a s e $ A : c a s e $ a 0073300 : \r [ \r 0073320 376 001 \0 246 3 0073340 b r e a k \r 0073360 ] \r c a 0073400 s e $ N : c a s e $ n : \r 0073420 [ \r 0073440 l e t s t 0073460 r i n g = v e c 4 0 \r 0073500 u n l e s s 0073520 G e t S t r i n g ( " N a m e 0073540 : " , s t r i n g , t r u 0073560 e , f a l s e ) r e t u r n 0073600 \r A p p 0073620 e n d S t r i n g T o P u p ( p 0073640 b i , 1 , s t r i n g ) 0073660 / / s e t s P u p . l e n g t 0073700 h \r p b 0073720 i > > P B I . p u p . t 376 001 \0 } 0073740 ; y p e = p t N a m e R e q 0073760 u e s t \r 0074000 b r e a k \r 0074020 ] \r c a 0074040 s e $ V : c a s e $ v : \r 0074060 [ \r 0074100 W s ( " V e 0074120 r s i o n o f n e t d i r 0074140 = " ) \r 0074160 p b i > > P B I . p u p . w 0074200 o r d s ^ 1 = 1 \r 0074220 p b i > > P B I . 0074240 p u p . w o r d s ^ 2 = 0 \r 0074260 p b i > 0074300 > P B I . p u p . t y p e = 0074320 p t N e t D i r V e r s i o n \r 0074340 376 001 \0 \f ; 0074360 p b i > > P B I . p u p . l e 0074400 n g t h = p u p O v B y t e 0074420 s + 4 \r 0074440 b r e a k \r 0074460 ] \r c a s 0074500 e $ Q : c a s e $ q : W 0074520 s ( " Q u i t " ) / / f a 0074540 l l s t h r o u g h \r 0074560 c a s e $ * 1 7 7 : 0074600 [ R e l e a s e P B I ( p b 0074620 i ) ; r e t u r n ] \r 0074640 c a s e $ ? : \r 0074660 [ \r 0074700 W s ( " N a m 0074720 e - > A d d r e s s , V e r s 0074740 i o n o f 376 001 \0 226 350 N e t D 0074760 i r : " ) \r 0075000 l o o p \r 0075020 ] \r ] 0075040 \r ] r e p e a t \r 0075060 \r p b i = S e n 0075100 d C o m m a n d ( p b i ) ; i 0075120 f p b i e q 0 r e t u r 0075140 n \r \r s w i t c h o 0075160 n p b i > > P B I . p u p . t 0075200 y p e i n t o \r [ 0075220 \r c a s e p t N a 0075240 m e A d d r E r r o r : \r 0075260 [ P r i n t C o n 0075300 t e n t s ( p b i ) ; e n d c 0075320 a s e ] \r c a s e 0075340 p t N a m e R e p l 376 001 \0 001 307 0075360 y : \r [ \r 0075400 f o r i = 1 0075420 t o p b i > > P B I . p u p 0075440 . l e n g t h - p u p O v B y t 0075460 e s b y 6 d o \r 0075500 [ P r i n t P o 0075520 r t ( l v p b i > > P B I . p 0075540 u p . b y t e s ^ i ) ; W s ( 0075560 " " ) ] \r 0075600 e n d c a s e \r 0075620 ] \r c a s e p 0075640 t N e t D i r V e r s i o n : \r 0075660 [ \r 0075700 P u t T e m p l a t e ( 0075720 d s p , " $ U D " , p b i > 0075740 > P B I . p u p . w o r d s ^ 1 0075760 376 001 \0 200 357 ) \r 0076000 e n d c a s e \r 0076020 ] \r ] \r \r 0076040 R e l e a s e P B I ( p b i 0076060 ) \r ] r e p e a t \r ] \r 0076100 \f \r / / - - - - - - - - - - - - 0076120 - - - - - - - - - - - - - - - - * 0076220 \r a n d W h e r e I s U s e r 0076240 ( ) b e \r / / - - - - - - - - 0076260 - - - - - - - - - - - - - - - - * 0076360 - - - - \r 376 001 \0 6 370 [ \r l e t 0076400 s t r i n g = v e c 4 0 \r 0076420 u n l e s s G e t S t r i n g 0076440 ( " W h e r e i s u s e r : 0076460 " , s t r i n g , t r u e 0076500 , f a l s e ) r e t u r n \r 0076520 l e t p b i = G e t P B I 0076540 ( m i s c S o c ) \r A p p e n d 0076560 S t r i n g T o P u p ( p b i , 0076600 1 , s t r i n g ) \r p b i 0076620 = S e n d C o m m a n d ( p b 0076640 i , p t W h e r e U s e r R e 0076660 q u e s t ) \r i f p b i e q 0076700 0 r e t u r n \r s w i t c h 0076720 o n p b i > > P B I . p u p . 0076740 t y p e i n t o \r [ \r 0076760 c a s e p t W 376 001 \0 246 . h 0077000 e r e U s e r E r r o r : \r 0077020 [ W s ( " - N o s 0077040 u c h u s e r " ) ; e n d c 0077060 a s e ] \r c a s e p t 0077100 W h e r e U s e r R e p l y : \r 0077120 [ \r t e 0077140 s t p b i > > P B I . p u p . 0077160 l e n g t h e q p u p O v B 0077200 y t e s \r i f 0077220 s o W s ( " - N o t l o g 0077240 g e d i n " ) \r 0077260 i f n o t f o r i = 0077300 1 t o p b i > > P B I . p u 0077320 p . l e n g t h - p u p O v B y 0077340 t e s b y 2 d o \r 0077360 [ \r 376 0077400 001 \0 230 } P u t T e 0077420 m p l a t e ( d s p , " - J 0077440 o b $ D " , p b i > > P B I 0077460 . p u p . b y t e s ^ i ) \r 0077500 t e s t p 0077520 b i > > P B I . p u p . b y t e 0077540 s ^ ( i + 1 ) e q # 3 7 7 \r 0077560 i 0077600 f s o W s ( " , D e t a c h 0077620 e d " ) \r 0077640 i f n o t P u t T e m 0077660 p l a t e ( d s p , " , T T 0077700 Y $ 0 " , p b i > > P B I . 0077720 p u p . b y t e s ^ ( i + 1 ) ) 0077740 \r ] \r 0077760 e n d c a s e \r 0100000 ] 376 001 \0 \n = \r ] \r R 0100020 e l e a s e P B I ( p b i ) \r ] 0100040 \r \f \r / / - - - - - - - - - - - 0100060 - - - - - - - - - - - - - - - - * 0100160 - \r a n d R o u t i n g I n f 0100200 o ( ) b e \r / / - - - - - - - 0100220 - - - - - - - - - - - - - - - - * 0100320 - - - - - \r / / N o t e t h 0100340 a t t h i s o n e g o e s 0100360 t o t h e g a t e w a y 0100400 i n f o s o c k 376 001 \0 T 246 e t 0100420 i n s t e a d o f m i s c 0100440 s e r v i c e s \r [ \r l e t 0100460 p b i = G e t P B I ( m i s 0100500 c S o c ) \r p b i > > P B I . p 0100520 u p . d P o r t . s o c k e t ^ 0100540 1 = 0 \r p b i > > P B I . p 0100560 u p . d P o r t . s o c k e t ^ 0100600 2 = p s R o u t e I n f o \r 0100620 p b i = S e n d C o m m a n 0100640 d ( p b i , p t R o u t e I n 0100660 f o R e q u e s t , p u p O v 0100700 B y t e s , 1 ) \r i f p b i 0100720 t h e n \r [ \r E n 0100740 q u e u e ( l v m i s c S o c 0100760 > > P u p S o c . i Q , p b i 0101000 ) \r R T T i t l e ( " 376 001 0101020 \0 263 006 F o r e i g n r o u t i 0101040 n g t a b l e : " ) \r 0101060 ] \r l e t c o u n t = 0 \r 0101100 l e t t i m e r = n i l ; 0101120 S e t T i m e r ( l v t i m 0101140 e r , 5 0 0 ) / / 5 s 0101160 e c o n d s \r [ \r B 0101200 l o c k ( ) r e p e a t u n t 0101220 i l m i s c S o c > > P u p S 0101240 o c . i Q . h e a d % T i m 0101260 e r H a s E x p i r e d ( l v 0101300 t i m e r ) \r l e t p b 0101320 i = D e q u e u e ( l v m 0101340 i s c S o c > > P u p S o c . i 0101360 Q . h e a d ) ; i f p b i 0101400 e q 0 b r e a k \r i f 0101420 p b 376 001 \0 E 227 i > > P B I . p 0101440 u p . t y p e e q p t R o u 0101460 t e I n f o R e p l y t h e n 0101500 \r f o r i = 1 0101520 t o p b i > > P B I . p u p 0101540 . l e n g t h - p u p O v B y t 0101560 e s b y 4 d o \r 0101600 R T E n t r y ( p b i > 0101620 > P B I . p u p . b y t e s ^ i 0101640 , p b i > > P B I . p u p . b 0101660 y t e s ^ ( i + 1 ) , \r 0101700 p b i > > P B I . p 0101720 u p . b y t e s ^ ( i + 2 ) , 0101740 p b i > > P B I . p u p . b y t 0101760 e s ^ ( i + 3 ) , l v c o u 0102000 n t ) \r R e l e a s e P B 0102020 I ( p b i ) \r 376 001 \0 211 261 ] 0102040 r e p e a t \r ] \r \f \r / / - - 0102060 - - - - - - - - - - - - - - - - * 0102160 - - - - - - - - - - \r a n d A 0102200 u t h e n t i c a t e ( ) b e 0102220 \r / / - - - - - - - - - - - - - 0102240 - - - - - - - - - - - - - - - - * 0102320 - - - - - - - - - - - - - - - \r 0102340 [ \r l e t n a m e = v e c 0102360 4 0 \r u n l e s s G e t S t 0102400 r i n g ( " A u t h e n t i c a 0102420 t e u s e r : " , n 376 001 \0 0102440 036 373 a m e , t r u e , f a l 0102460 s e ) r e t u r n \r l e t p 0102500 s w = v e c 4 0 \r u n l e 0102520 s s G e t S t r i n g ( " p 0102540 a s s w o r d : " , p s w , 0102560 f a l s e , f a l s e ) r 0102600 e t u r n \r l e t p b i = 0102620 G e t P B I ( m i s c S o c ) \r 0102640 A p p e n d M e s a S t r i n g 0102660 T o P u p ( p b i , 1 , n a 0102700 m e ) \r A p p e n d M e s a S t 0102720 r i n g T o P u p ( p b i , ( 0102740 n a m e > > S t r i n g . l e n 0102760 g t h + 7 ) / 2 , p s w ) \r p 0103000 b i = S e n d C o m m a n d 0103020 ( p b i , p t A u t h R e q u 0103040 e s 376 001 \0 304 332 t ) \r i f p b i 0103060 e q 0 r e t u r n \r s w i 0103100 t c h o n p b i > > P B I . p 0103120 u p . t y p e i n t o \r 0103140 [ \r c a s e p t A u t h 0103160 Y e s : \r [ W s ( 0103200 " - G o o d " ) ; e n d c a 0103220 s e ] \r c a s e p t A 0103240 u t h N o : \r [ W 0103260 s ( " - N o " ) ; P r i n 0103300 t C o n t e n t s ( p b i ) ; 0103320 e n d c a s e ] \r ] \r R 0103340 e l e a s e P B I ( p b i ) \r ] 0103360 \r \r / / - - - - - - - - - - - - 0103400 - - - - - - - - - - - - - - - - * 0103440 - - - - - - - 376 001 \0 | 036 - - - - 0103460 - - - - - - - - - - - - - - - - 0103500 - - - - - \r a n d V a l i d a 0103520 t e R e c i p ( ) b e \r / / - 0103540 - - - - - - - - - - - - - - - - * 0103640 - - - - - - - - - - - \r [ \r l e 0103660 t s t r i n g = v e c 4 0103700 0 \r u n l e s s G e t S t r i 0103720 n g ( " V a l i d a t e r e c 0103740 i p i e n t : " , s t r i n 0103760 g , t r u e , f a l s e ) 0104000 r e t u r n \r l e t p b i = 0104020 G e t P B I ( m i s c S o c ) 0104040 \r A p p e n d M e s a S 376 001 \0 004 0104060 ^ t r i n g T o P u p ( p b i , 0104100 1 , s t r i n g ) \r p b i 0104120 = S e n d C o m m a n d ( p b 0104140 i , p t V a l i d R e c i p R 0104160 e q u e s t ) \r i f p b i e 0104200 q 0 r e t u r n \r s w i t c 0104220 h o n p b i > > P B I . p u p 0104240 . t y p e i n t o \r [ \r 0104260 c a s e p t V a l i d R 0104300 e c i p Y e s : \r [ 0104320 W s ( " - G o o d " ) ; e 0104340 n d c a s e ] \r c a s e 0104360 p t V a l i d R e c i p N o : 0104400 \r [ W s ( " - B 0104420 a d " ) ; e n d c a s e ] \r 0104440 ] \r R e l e a s e P B I ( 0104460 p 376 001 \0 252 P b i ) \r ] \r \r / / - 0104500 - - - - - - - - - - - - - - - - * 0104600 - - - - - - - - - - - \r a n d 0104620 M a i l C h e c k ( ) b e \r / 0104640 / - - - - - - - - - - - - - - - 0104660 - - - - - - - - - - - - - - - - * 0104740 - - - - - - - - - - - - - \r [ \r 0104760 l e t s t r i n g = v e c 0105000 4 0 \r u n l e s s G e t S t 0105020 r i n g ( " M a i l c h e c k 0105040 f o r u s e r : " , s t 0105060 r i n g , 376 001 \0 272 % t r u e , 0105100 f a l s e ) r e t u r n \r l 0105120 e t p b i = G e t P B I ( 0105140 m i s c S o c ) \r A p p e n d S 0105160 t r i n g T o P u p ( p b i , 0105200 1 , s t r i n g ) \r p b i = 0105220 S e n d C o m m a n d ( p b i 0105240 , p t M a i l C h e c k R e q 0105260 u e s t ) \r i f p b i e q 0105300 0 r e t u r n \r s w i t c h o 0105320 n p b i > > P B I . p u p . t 0105340 y p e i n t o \r [ \r 0105360 c a s e p t M a i l C h e c 0105400 k E r r o r : \r [ 0105420 W s ( " - N o s u c h u s 0105440 e r " ) ; e n d c a s e ] \r 0105460 c a s e p t M 376 001 \0 331 v 0105500 a i l C h e c k N o : \r 0105520 [ W s ( " - N o n e w 0105540 m a i l " ) ; e n d c a s e 0105560 ] \r c a s e p t M a i 0105600 l C h e c k Y e s : \r 0105620 [ W s ( " - N e w m a i 0105640 l w a i t i n g " ) ; P r 0105660 i n t C o n t e n t s ( p b i ) 0105700 ; e n d c a s e ] \r ] 0105720 \r R e l e a s e P B I ( p b i ) 0105740 \r ] \r \f \r / / - - - - - - - - - 0105760 - - - - - - - - - - - - - - - - * 0106060 - - - \r a n d S e n d C o m m 0106100 376 001 \0 026 372 a n d ( o p b i , t 0106120 y p e , l e n g t h , r e t 0106140 r i e s ; n u m a r g s n a 0106160 ) = v a l o f \r / / - - - - 0106200 - - - - - - - - - - - - - - - - * 0106300 - - - - - - - - \r / / r e t u 0106320 r n s r e s p o n s e p b i 0106340 o r 0 i f t i m e o u t 0106360 \r [ \r i f n a l s 4 t h 0106400 e n r e t r i e s = 3 \r i 0106420 f n a g e 3 t h e n o 0106440 p b i > > P B I . p u p . l e n 0106460 g t h = l e n g t h \r i f 0106500 n a g e 376 001 \0 305 354 2 t h e 0106520 n o p b i > > P B I . p u p . 0106540 t y p e = t y p e \r \r o p b 0106560 i > > P B I . p u p . i d ^ 2 0106600 = m i s c I D \r m i s c I D 0106620 = m i s c I D + 1 \r l e t s 0106640 o c = o p b i > > P B I . s 0106660 o c k e t \r l e t t Q = v 0106700 e c 1 ; t Q ! 0 = 0 \r o 0106720 p b i > > P B I . q u e u e = 0106740 t Q \r E n q u e u e ( t Q , 0106760 o p b i ) \r l e t i p b i = 0107000 0 \r \r f o r i = 1 t o 0107020 r e t r i e s d o \r [ 0107040 \r B l o c k ( ) r e p e 0107060 a t w h i l e t Q ! 0 e q 0107100 0 \r C o m p l 376 001 \0 252 331 e 0107120 t e P u p ( D e q u e u e ( t Q 0107140 ) ) \r \r l e t t i m e r 0107160 = n i l ; S e t T i m e r 0107200 ( l v t i m e r , 2 0 0 ) 0107220 / / 2 s e c \r [ 0107240 \r B l o c k ( ) r 0107260 e p e a t u n t i l T i m e r 0107300 H a s E x p i r e d ( l v t i 0107320 m e r ) % s o c > > P u p S 0107340 o c . i Q . h e a d n e 0 \r 0107360 i p b i = D e q 0107400 u e u e ( l v s o c > > P u p 0107420 S o c . i Q ) \r i f 0107440 i p b i e q 0 b r e a k 0107460 / / t i m e o u t - r e 0107500 t r a n s m i t \r 376 0107520 001 \0 S ^ i f M u l t E q ( l v 0107540 i p b i > > P B I . p u p . i 0107560 d , l v o p b i > > P B I . 0107600 p u p . i d ) t h e n \r 0107620 i f i p b i > > P 0107640 B I . p u p . t y p e n e t 0107660 y p e E r r o r b r e a k \r 0107700 O t h e r S p i g o t 0107720 ( i p b i ) ; i p b i = 0 0107740 \r ] r e p e a t \r 0107760 i f i p b i n e 0 0110000 b r e a k \r ] \r \r B l o c 0110020 k ( ) r e p e a t w h i l e 0110040 t Q ! 0 e q 0 \r R e l e a s 0110060 e P B I ( D e q u e u e ( t Q ) 0110100 ) \r r e s u l t i s i p b i \r 0110120 ] \r \r / 376 001 \0 330 \a / - - - - - - 0110140 - - - - - - - - - - - - - - - - * 0110240 - - - - - - \r a n d P r i n t 0110260 C o n t e n t s ( p b i ) b e 0110300 \r / / - - - - - - - - - - - - - 0110320 - - - - - - - - - - - - - - - - * 0110400 - - - - - - - - - - - - - - - \r 0110420 [ \r f o r i = 1 t o p 0110440 b i > > P B I . p u p . l e n g 0110460 t h - p u p O v B y t e s d o 0110500 \r P u t s ( d s p , p 0110520 b i > > P B I . p 376 001 \0 342 1 u p 0110540 . b y t e s ^ i ) \r ] \r \r / / - 0110560 - - - - - - - - - - - - - - - - * 0110660 - - - - - - - - - - - \r a n d 0110700 A p p e n d M e s a S t r i n g 0110720 T o P u p ( p b i , f i r s t 0110740 W o r d , s t r i n g ) b e 0110760 \r / / - - - - - - - - - - - - - 0111000 - - - - - - - - - - - - - - - - * 0111060 - - - - - - - - - - - - - - - \r 0111100 [ \r s t r u c t u r e M e s a 0111120 S t r i n g : \r [ \r 376 001 0111140 \0 8 234 l e n g t h w o r d 0111160 \r m a x L e n g t h w o 0111200 r d \r c h a r ^ 1 , 1 b 0111220 y t e \r ] \r l e t m s 0111240 = l v p b i > > P B I . p u 0111260 p . w o r d s + f i r s t W 0111300 o r d - 1 \r m s > > M e s a S 0111320 t r i n g . l e n g t h = s 0111340 t r i n g > > S t r i n g . l e 0111360 n g t h \r m s > > M e s a S t r 0111400 i n g . m a x L e n g t h = 0111420 ( s t r i n g > > S t r i n g . 0111440 l e n g t h + 1 ) & - 2 \r f 0111460 o r i = 1 t o s t r i 0111500 n g > > S t r i n g . l e n g t 0111520 h d o \r m s > > M e s a 0111540 S t r 376 \0 m 263 025 i n g . c h a r 0111560 ^ i = s t r i n g > > S t r 0111600 i n g . c h a r ^ i \r p b i > > 0111620 P B I . p u p . l e n g t h = 0111640 p u p O v B y t e s + f i r s 0111660 t W o r d * 2 + m s > > M e s a 0111700 S t r i n g . m a x L e n g t h 0111720 + 2 \r ] \r 377 \0 \0 P u p T e s t I 0111740 O . b c p l \0 373 230 230 { u \0 \0 376 001 0111760 \0 330 021 / / P u p T e s t I O . 0112000 b c p l \r / / C o p y r i g h 0112020 t X e r o x C o r p o r a t 0112040 i o n 1 9 7 9 , 1 9 8 2 \r / 0112060 / L a s t m o d i f i e d 0112100 F e b r u a r y 1 5 , 1 9 8 0112120 2 5 : 4 9 P M b y B o 0112140 g g s \r \r g e t " P u p . d e 0112160 c l " \r g e t " P u p S t a t 0112200 s . d e c l " \r g e t " P u p 0112220 T e s t . d e c l " \r \r e x t e 0112240 r n a l \r [ \r / / o u t g o i n 0112260 g p r o c e d u r e s \r G e t 0112300 S t r i n g ; G e t N u m b e 0112320 r ; P r i n t P o r t ; C o 0112340 n f i r m \r O p e n P o r t ; 0112360 C o m 376 001 \0 327 004 p u t e T h r u 0112400 p u t ; W s ; W s s \r O t h 0112420 e r S p i g o t ; O t h e r S 0112440 p i g o t P r o c e s s \r P r i 0112460 n t P u p R T ; R T T i t l e 0112500 ; R T E n t r y ; P r i n t 0112520 S t a t i s t i c s \r \r / / i n 0112540 c o m i n g p r o c e d u r e 0112560 s \r P u t s ; G e t s ; E n 0112600 d o f s ; R e s e t s \r M o v 0112620 e B l o c k ; Z e r o ; D e 0112640 f a u l t A r g s \r E n q u e u 0112660 e ; D e q u e u e ; B l o c 0112700 k \r P u t T e m p l a t e ; E 0112720 r a s e B i t s ; C h a r W i 0112740 d t h \r O p e n L e v e l 1 S o 0112760 c k e t ; R e 376 001 \0 " } l e a 0113000 s e P B I ; G e t P a r t n e 0113020 r \r H L o o k u p ; H E n u m 0113040 e r a t e \r U p d a t e A v e r 0113060 a g e ; D i v i d e 3 2 x 1 6 0113100 \r \r / / s t a t i c s \r d s p ; 0113120 k e y s \r s p i g o t Q ; p 0113140 u p R T ; p b i F r e e Q \r ] 0113160 \r \r m a n i f e s t r e a l T 0113200 i m e C l o c k = 4 3 0 b \r 0113220 \f \r / / - - - - - - - - - - - - 0113240 - - - - - - - - - - - - - - - - * 0113340 \r l e t G e t S t r i n g ( p 0113360 r o m p t , a d d r , 376 001 \0 0113400 275 236 e c h o , c r ; n u m a 0113420 r g s n a ) = v a l o f \r 0113440 / / - - - - - - - - - - - - - - 0113460 - - - - - - - - - - - - - - - - * 0113540 - - - - - - - - - - - - - - \r [ 0113560 \r / / m a k e a b c p l s 0113600 t r i n g f r o m t h e k 0113620 e y b o a r d \r / / i f e c h 0113640 o i s t r u e , e c h o 0113660 t h e t y p e d c h a r a c 0113700 t e r s t o t h e d i s p 0113720 l a y \r / / r e t u r n s f a 0113740 l s e i f d e l i s t y 0113760 p e d ( r e t u r n t o c 0114000 o m 376 001 \0 5 231 m a n d l e v e 0114020 l ) \r / / a d d r i s t h e 0114040 a d d r e s s o f t h e 0114060 s t r i n g t h a t s h o u 0114100 l d g e t t h e r e s u l 0114120 t . \r / / p r o m p t i s a 0114140 p r o m p t s t r i n g p 0114160 r i n t e d i n t h e o b 0114200 v i o u s p l a c e s \r i f 0114220 n a l s 3 t h e n e c h 0114240 o = t r u e \r i f n a l 0114260 s 4 t h e n c r = t r 0114300 u e \r W s ( p r o m p t ) \r l e 0114320 t c o u n t = 0 \r [ 0114340 \r l e t c h a r = G 0114360 e t s ( k e y s ) \r s w i 0114400 t c h o n c 376 001 \0 ! \ h a r 0114420 i n t o \r [ \r 0114440 c a s e $ * S : c a s 0114460 e $ * N : c a s e $ * 0 3 0114500 3 : \r [ \r 0114520 P u t s ( d s p , 0114540 ( c r ? $ * N , $ * S ) 0114560 ) \r a d d r > 0114600 > S t r i n g . l e n g t h = 0114620 c o u n t \r 0114640 r e s u l t i s c o u n t n 0114660 e 0 \r ] \r 0114700 c a s e $ * 1 7 7 : 0114720 \r [ W s ( " 0114740 X X X " ) ; P u t s ( d s p , 0114760 ( c r ? $ * N , $ * S ) 0115000 ) ; r e s u l t i s 376 001 \0 346 0115020 $ f a l s e ] \r c 0115040 a s e $ * 0 0 1 : c a s e 0115060 $ * 0 1 0 : \r 0115100 [ \r i f c o 0115120 u n t t h e n \r 0115140 [ \r 0115160 i f e c h o t h e n \r 0115200 E 0115220 r a s e B i t s ( d s p , - C 0115240 h a r W i d t h ( d s p , a d 0115260 d r > > S t r i n g . c h a r ^ 0115300 c o u n t ) ) \r 0115320 c o u n t = c o u n 0115340 t - 1 \r 0115360 ] \r e n d c 0115400 a s e \r ] \r 0115420 376 001 \0 244 w d e f a u l 0115440 t : \r [ \r 0115460 i f c o u n t 0115500 l e 2 5 5 & c h a r g e 0115520 $ * S & c h a r l e $ 0115540 * 1 7 7 t h e n \r 0115560 [ \r 0115600 c o u n t = c o u n 0115620 t + 1 \r 0115640 a d d r > > S t r i n g . c 0115660 h a r ^ c o u n t = c h a r 0115700 \r i f 0115720 e c h o t h e n P u t s ( d 0115740 s p , c h a r ) \r 0115760 ] \r 0116000 e n d c a s e \r 0116020 ] \r 376 001 \0 $ 251 ] 0116040 \r ] r e p e a t \r ] \r \f 0116060 \r / / - - - - - - - - - - - - - 0116100 - - - - - - - - - - - - - - - - * 0116160 - - - - - - - - - - - - - - - \r 0116200 a n d G e t N u m b e r ( s t 0116220 r i n g ) = v a l o f \r / / 0116240 - - - - - - - - - - - - - - - - * 0116340 - - - - - - - - - - - - \r [ \r W 0116360 s ( s t r i n g ) \r l e t r e 0116400 s = 0 \r [ \r l e 0116420 t c h a r = G e 376 001 \0 f 373 0116440 t s ( k e y s ) \r s w i t 0116460 c h o n c h a r i n t o \r 0116500 [ \r c a s 0116520 e $ 0 : c a s e $ 1 : c 0116540 a s e $ 2 : c a s e $ 3 : 0116560 \r c a s e $ 4 : 0116600 c a s e $ 5 : c a s e $ 6 0116620 : c a s e $ 7 : \r 0116640 [ \r P 0116660 u t s ( d s p , c h a r ) \r 0116700 r e s = ( r 0116720 e s l s h i f t 3 ) + ( 0116740 c h a r & 7 ) \r 0116760 e n d c a s e \r 0117000 ] \r c a s e 0117020 $ * 0 0 1 : c a s e $ * 0 0117040 376 001 \0 360 # 1 0 : \r 0117060 [ \r E r a 0117100 s e B i t s ( d s p , - C h a 0117120 r W i d t h ( d s p , $ 0 + ( 0117140 r e s & 7 ) ) ) \r 0117160 r e s = r e s r s h i 0117200 f t 3 \r e n 0117220 d c a s e \r ] 0117240 \r c a s e $ * N : 0117260 c a s e $ * S : c a s e 0117300 $ * 1 7 7 : r e s u l t i s 0117320 r e s \r ] \r ] 0117340 r e p e a t \r ] \r \r / / - - - 0117360 - - - - - - - - - - - - - - - - * 0117440 - - - - - 376 001 \0 # : - - - - - - 0117460 - - - - - - - - - - - - - - \r a 0117500 n d C o n f i r m ( p r o m p 0117520 t ; n u m a r g s n a ) = 0117540 v a l o f \r / / - - - - - - - 0117560 - - - - - - - - - - - - - - - - * 0117660 - - - - - \r [ \r i f n a g r 0117700 0 t h e n W s ( p r o m p 0117720 t ) ; W s ( " [ C o n f i r m 0117740 ] " ) \r s w i t c h o n G e 0117760 t s ( k e y s ) i n t o \r 0120000 [ \r c a s e $ Y : c 0120020 a s e $ y : c a s e $ * N 0120040 : \r [ 376 001 \0 321 m W 0120060 s ( " Y e s . * N " ) ; r e s 0120100 u l t i s t r u e ] \r 0120120 c a s e $ N : c a s e $ n 0120140 : c a s e $ * 1 7 7 : \r 0120160 [ W s ( " N o . * N " 0120200 ) ; r e s u l t i s f a l s 0120220 e ] \r d e f a u l t : \r 0120240 [ W s ( " Y e s 0120260 o r N o * N " ) ; e n d c a 0120300 s e ] \r ] \r ] r e p e 0120320 a t \r \r / / - - - - - - - - - - 0120340 - - - - - - - - - - - - - - - - * 0120440 - - \r a n d P r i n t P o r 376 0120460 001 \0 205 262 t ( p o r t ) b e \r / 0120500 / - - - - - - - - - - - - - - - 0120520 - - - - - - - - - - - - - - - - * 0120600 - - - - - - - - - - - - - \r 0120620 P u t T e m p l a t e ( d s p 0120640 , " [ $ U O # $ U O # $ U E O ] 0120660 " , p o r t > > P o r t . n e 0120700 t , p o r t > > P o r t . h o 0120720 s t , \r l v p o r t > 0120740 > P o r t . s o c k e t ) \r \r / 0120760 / - - - - - - - - - - - - - - - 0121000 - - - - - - - - - - - - - - - - * 0121060 - - - - 376 001 \0 270 207 - - - - - - - 0121100 - - \r a n d O p e n P o r t ( 0121120 s t r i n g , s o c , f s 1 0121140 , f s 2 , l c l P o r t ; 0121160 n u m a r g s n a ) = v a 0121200 l o f \r / / - - - - - - - - - - 0121220 - - - - - - - - - - - - - - - - * 0121320 - - \r [ \r D e f a u l t A r g s 0121340 ( l v n a , - 2 , 0 , 0 0121360 , 0 ) \r l e t f r n P o r t 0121400 = v e c l e n P o r t \r l 0121420 e t n a m e = v e c 4 0 0121440 \r [ \r u n l e s s 0121460 G e t S t r i n g 376 001 \0 206 A ( s 0121500 t r i n g , n a m e , t r u 0121520 e , f a l s e ) r e s u l t 0121540 i s f a l s e \r i f G 0121560 e t P a r t n e r ( n a m e , 0121600 d s p , f r n P o r t , f s 0121620 1 , f s 2 ) b r e a k \r 0121640 ] r e p e a t \r O p e n L e 0121660 v e l 1 S o c k e t ( s o c , 0121700 l c l P o r t , f r n P o r t 0121720 ) \r r e s u l t i s t r u e \r 0121740 ] \r \r / / - - - - - - - - - - - 0121760 - - - - - - - - - - - - - - - - * 0122060 - \r a n d W s ( s t r i n 376 001 0122100 \0 325 307 g ) b e W s s ( d s p 0122120 , s t r i n g ) \r / / - - - - 0122140 - - - - - - - - - - - - - - - - * 0122240 - - - - - - - - \r \r / / - - - - 0122260 - - - - - - - - - - - - - - - - * 0122360 - - - - - - - - \r a n d W s s 0122400 ( s t r e a m , s t r i n g ) 0122420 b e \r / / - - - - - - - - - - 0122440 - - - - - - - - - - - - - - - - * 0122500 - - - 376 001 \0 331 301 - - - - - - - - 0122520 - - - - - - - - - - - - - - - - 0122540 - - - - - - - \r f o r i 0122560 = 1 t o s t r i n g > > 0122600 S t r i n g . l e n g t h d o 0122620 \r P u t s ( s t r e 0122640 a m , s t r i n g > > S t r i 0122660 n g . c h a r ^ i ) \r \f \r / / - 0122700 - - - - - - - - - - - - - - - - * 0123000 - - - - - - - - - - - \r a n d 0123020 C o m p u t e T h r u p u t ( t 0123040 p ) = v a l o f \r / / - - - 0123060 - - - - - - - - - - - - - - - - 0123100 - - - - - - - - 376 001 \0 234 256 - - - 0123120 - - - - - - - - - - - - - - - - * 0123160 - - - - - - - - - - - - - - \r [ 0123200 \r l e t n u m = v e c 1 0123220 \r M o v e B l o c k ( n u m , 0123240 ( a l t o ? t a b l e [ 1 0123260 9 ; - 2 8 4 6 8 ] , t a b l 0123300 e [ 7 6 ; 1 9 2 6 4 ] ) , 0123320 2 ) \r D i v i d e 3 2 x 1 6 ( 0123340 n u m , @ r e a l T i m e C l 0123360 o c k - t p > > T P . t i m e r 0123400 ) \r P u t T e m p l a t e ( d s 0123420 p , " [ $ U D 0 b y t e 0123440 s / s e c ] * N " , n u m ! 0123460 1 ) \r t p > > T P . t h r u p u 0123500 t = n u m ! 1 \r t p > 376 001 \0 0123520 G 266 > T P . a v e T h r u p u t 0123540 = t p > > T P . a v e T h r 0123560 u p u t e q 0 ? t p > > T 0123600 P . t h r u p u t , \r U p d a 0123620 t e A v e r a g e ( t p > > T P 0123640 . t h r u p u t , t p > > T P 0123660 . a v e T h r u p u t , 8 ) \r 0123700 ] \r \f \r / / - - - - - - - - - - 0123720 - - - - - - - - - - - - - - - - * 0124020 - \r a n d P r i n t P u p R T 0124040 ( ) b e \r / / - - - - - - - - 0124060 - - - - - - - - - - - - - - - - * 0124120 - - 376 001 \0 0 _ - - - - - - - - - 0124140 - - - - - - - - - - - - - - - - 0124160 - - - - - - - - \r [ \r l e t P 0124200 e r N e t ( r t e , l v C o u 0124220 n t ) b e \r R T E n t r 0124240 y ( r t e > > R T E . n e t , 0124260 r t e > > R T E . n d b > > N D 0124300 B . l o c a l N e t , \r 0124320 r t e > > R T E . h o s t , r 0124340 t e > > R T E . h o p s , l v 0124360 C o u n t ) \r l e t c o u n t 0124400 = 0 \r R T T i t l e ( " L o 0124420 c a l r o u t i n g t a b l 0124440 e : " ) \r H E n u m e r a t e ( 0124460 p u p R T , P e r N e t , l 0124500 v c o u n t ) \r P u t s ( d s 0124520 p , $ * N ) 376 001 \0 # 277 \r ] \r \r 0124540 / / - - - - - - - - - - - - - - 0124560 - - - - - - - - - - - - - - - - * 0124640 - - - - - - - - - - - - - - \r a 0124660 n d R T T i t l e ( s t r i n 0124700 g ) b e \r / / - - - - - - - - 0124720 - - - - - - - - - - - - - - - - * 0125020 - - - - \r [ \r W s ( s t r i n g 0125040 ) \r W s ( " * N N e t V 0125060 i a H o p s | N e t 0125100 V i a H o p s | N 0125120 e t V i a H 376 001 \0 272 0125140 257 o p s | N e t V i a 0125160 H o p s " ) \r W s ( " * N 0125200 - - - - - - - - - - - - - - - 0125220 - - | - - - - - - - - - - - - - 0125240 - - - - - | - - - - - - - - - - 0125260 - - - - - - - - | - - - - - - - 0125300 - - - - - - - - - - " ) \r ] \r \r 0125320 / / - - - - - - - - - - - - - - 0125340 - - - - - - - - - - - - - - - - * 0125420 - - - - - - - - - - - - - - \r a 0125440 n d R T E n t r y ( d N e t , 0125460 v i a N e t , v i a H o s t 0125500 , h o p s , l v C o u n t ) 0125520 b e \r / / - - - - - - - - - - 0125540 - 376 001 \0 325 j - - - - - - - - - - 0125560 - - - - - - - - - - - - - - - - * 0125640 - - - - - - - \r [ \r i f @ l v 0125660 C o u n t r e m 4 e q 0 0125700 t h e n W s ( " * N " ) \r 0125720 P u t T e m p l a t e ( d s p , 0125740 " $ U 3 O $ U 3 O # $ U 3 F 0125760 0 O # $ U 2 O " , d N e t 0126000 , v i a N e t , v i a H o s 0126020 t , h o p s ) \r u n l e s s 0126040 @ l v C o u n t r e m 4 e 0126060 q 3 d o W s ( " | " ) 0126100 \r @ l v C o u n t = @ l v C 0126120 o u n t + 1 \r ] \r \f \r / / - - 0126140 - - - - - - 376 001 \0 P ] - - - - - 0126160 - - - - - - - - - - - - - - - - * 0126240 - - - - - - - - - - - - - - - \r 0126260 a n d P r i n t S t a t i s t 0126300 i c s ( ) b e \r / / - - - - - 0126320 - - - - - - - - - - - - - - - - * 0126420 - - - - - - - \r [ \r l e t n e 0126440 t = G e t N u m b e r ( " s 0126460 t a t i s t i c s f o r n e 0126500 t w o r k " ) \r l e t r t e 0126520 = H L o o k u p ( p u p R T 0126540 , n e t ) \r i f r 376 001 \0 201 362 0126560 t e n e 0 t h e n \r 0126600 [ \r l e t p b i = D 0126620 e q u e u e ( p b i F r e e Q ) 0126640 \r i f r t e > > R T E . 0126660 n d b > > N D B . l e v e l 0 S 0126700 t a t s ( p b i , r t e > > R 0126720 T E . n d b ) t h e n \r 0126740 i f r t e > > R T E . h 0126760 o p s e q 0 t h e n \r 0127000 s w i t c h o n 0127020 p b i > > P B I . p u p . w o r 0127040 d s ^ 1 i n t o \r 0127060 [ \r 0127100 c a s e n e t T y p e 0127120 E t h e r : \r 0127140 [ P r i n t E t h 0127160 376 001 \0 310 234 e r S t a t s ( p b i 0127200 ) ; e n d c a s e ] \r 0127220 c a s e n e 0127240 t T y p e S L A : \r 0127260 [ P r i n t 0127300 S L A S t a t s ( p b i ) ; e 0127320 n d c a s e ] \r 0127340 ] \r E n q u e u 0127360 e ( p b i F r e e Q , p b i ) 0127400 \r ] \r ] \r \r / / - - - - - 0127420 - - - - - - - - - - - - - - - - * 0127520 - - - - - - - \r a n d P r i n 0127540 t E t h e r S t a t s ( p b i ) 0127560 b e \r / 376 001 \0 025 260 / - - - - - 0127600 - - - - - - - - - - - - - - - - * 0127700 - - - - - - - \r [ \r W s ( " * N 0127720 E t h e r n e t S t a t i s t 0127740 i c s : " ) \r l e t e s = 0127760 l v p b i > > P B I . p u p . 0130000 w o r d s ^ 2 \r P u t T e m p l 0130020 a t e ( d s p , " * n R c v : 0130040 g o o d $ U D , b a d $ 0130060 U D , o f f $ U D " , \r e 0130100 s > > E t h e r S t a t s . p a 0130120 c k e t s R c v d , e s > > E 0130140 t h e r S t a t s . n u m B a d 0130160 R c v S t a t u s , 376 001 \0 306 264 \r 0130200 e s > > E t h e r S t a t s . 0130220 i n p u t O f f ) \r P u t T e m 0130240 p l a t e ( d s p , " ; X m 0130260 t : g o o d $ U D , b a d 0130300 $ U D ; I | O $ U D " , \r 0130320 e s > > E t h e r S t a t s . 0130340 p a c k e t s S e n t , e s > 0130360 > E t h e r S t a t s . n u m B 0130400 a d X m t S t a t u s , \r e s 0130420 > > E t h e r S t a t s . n u m 0130440 I n U n d e r O u t ) \r W s ( " 0130460 * N L d s : " ) \r f o r i = 0130500 0 t o 1 5 d o \r P 0130520 u t T e m p l a t e ( d s p , 0130540 " $ U D " , e s > > E t h e 0130560 r S t a t s . l o a d T a b l 376 0130600 001 \0 \a 350 e ^ i ) \r P u t T e m p 0130620 l a t e ( d s p , " ; O v f 0130640 : $ U D " , e s > > E t h e 0130660 r S t a t s . l o a d T a b l e 0130700 ^ 1 6 ) \r ] \r \r / / - - - - - - 0130720 - - - - - - - - - - - - - - - - * 0131020 - - - - - - \r a n d P r i n t 0131040 S L A S t a t s ( p b i ) b e 0131060 \r / / - - - - - - - - - - - - - 0131100 - - - - - - - - - - - - - - - - * 0131160 - - - - - - - - - - - - - - - \r 0131200 [ \r W s 376 001 \0 273 364 ( " * N S L A 0131220 S t a t i s t i c s : * N " ) 0131240 \r W s ( " - - - 0131260 - P a c k e t s - - - 0131300 - - - - - B y t e s - - - - - 0131320 - - - - - - E r r o r s - 0131340 - - - - - * n " ) \r W s ( " L i 0131360 n e S e n t R e c e 0131400 i v e d S e n t 0131420 R e c e i v e d C R C 0131440 S y n c C o n t r o l 0131460 S t a t e * n " ) \r l e t m 0131500 a x S L A H o s t = p b i > 0131520 > P B I . p u p . w o r d s ^ 2 0131540 \r l e t m a x S L A L i n e 0131560 = p b i > > P B I . p u p . w 0131600 o r d s ^ ( m a x 376 001 \0 332 026 S L 0131620 A H o s t + 3 ) \r f o r l i n 0131640 e = 0 t o m a x S L A L 0131660 i n e d o \r [ \r l 0131700 e t s s = l v p b i > > 0131720 P B I . p u p . w o r d s ^ ( m 0131740 a x S L A H o s t + 4 + l e n S 0131760 L A S t a t s * l i n e ) \r 0132000 i f s s > > S L A S t a t s 0132020 . s t a t e e q s l a L i n 0132040 e M i s s i n g l o o p \r 0132060 P u t T e m p l a t e ( d s p 0132100 , " $ 3 O $ 9 E D $ 9 E D $ 1 0132120 0 E D $ 1 0 E D $ 6 D $ 6 D 0132140 $ 6 D $ S * n " , \r 0132160 l i n e , l v s s > 0132200 > S L A S t a t s . t r a n 376 001 0132220 \0 312 ] s m i t P a c k e t s , 0132240 l v s s > > S L A S t a t s . 0132260 r e c e i v e P a c k e t s , \r 0132300 l v s s > > S L A S t 0132320 a t s . t r a n s m i t B y t e 0132340 s , l v s s > > S L A S t a 0132360 t s . r e c e i v e B y t e s , 0132400 \r s s > > S L A S t a t 0132420 s . b a d C R C , s s > > S L 0132440 A S t a t s . i n p u t O v e r 0132460 r u n , \r s s > > S L A 0132500 S t a t s . l i n e C o n t r o 0132520 l E r r o r , \r s e l e 0132540 c t o n s s > > S L A S t a t 0132560 s . s t a t e i n t o \r 0132600 [ \r c a s e 0132620 s l a 376 001 \0 023 346 L i n e D o w n 0132640 : " D o w n " \r c 0132660 a s e s l a L i n e U p : " 0132700 U p " \r c a s e s 0132720 l a L i n e L o o p e d B a c k 0132740 : " L o o p e d b a c k " \r 0132760 d e f a u l t : " 0133000 ? " \r ] ) \r ] 0133020 \r W s ( " * n R o u t i n g t 0133040 a b l e : * n " ) \r f o r i 0133060 = 1 t o 4 d o W s ( " 0133100 H o s t L i n e H o p s 0133120 " ) \r l e t c o u n t = 0133140 0 \r f o r i = 1 t o 0133160 m a x S L A H o s t d o \r 0133200 [ \r l e t r t e = 0133220 l v p b i > > 376 001 \0 216 371 P B I 0133240 . p u p . w o r d s ^ ( 2 + i ) 0133260 \r i f r t e > > S L A R 0133300 T E . h o p C n t n e # 3 7 0133320 7 t h e n \r [ \r 0133340 P u t T e m p l a t e 0133360 ( d s p , " $ S $ 3 O $ 3 0133400 O $ 3 D " , ( c o u n t 0133420 r e m 4 e q 0 ? " * n " 0133440 , " " ) , \r 0133460 i , r t e > > S L A R T 0133500 E . l i n e , r t e > > S L A 0133520 R T E . h o p C n t ) \r 0133540 c o u n t = c o u n t 0133560 + 1 \r ] \r ] \r 0133600 P u t s ( d s p , $ * n ) \r ] 0133620 \r \f \r / / - - - - - - - - 376 001 \0 0133640 321 335 - - - - - - - - - - - - - - 0133660 - - - - - - - - - - - - - - - - * 0133740 - - - - - \r a n d O t h e r S 0133760 p i g o t ( p b i ) b e E n 0134000 q u e u e ( s p i g o t Q , p 0134020 b i ) \r / / - - - - - - - - - - 0134040 - - - - - - - - - - - - - - - - * 0134140 - \r \r / / - - - - - - - - - - - 0134160 - - - - - - - - - - - - - - - - * 0134240 - - 376 001 \0 < 340 - - - - - - - - - 0134260 - - - - - \r a n d O t h e r S 0134300 p i g o t P r o c e s s ( ) b 0134320 e \r / / - - - - - - - - - - - - 0134340 - - - - - - - - - - - - - - - - * 0134420 - - - - - - - - - - - - - - - \r 0134440 [ \r w h i l e s p i g o t Q ! 0134460 0 e q 0 d o B l o c k ( 0134500 ) \r l e t p b i = D e q u 0134520 e u e ( s p i g o t Q ) \r l e t 0134540 s t a r t B y t e = 0 \r s 0134560 w i t c h o n p b i > > P B I 0134600 . p u p . t y p e i n t o \r 0134620 [ \r c a s e t y p e 0134640 A b o r t : \r 376 001 \0 a 330 0134660 [ \r W s ( " [ A 0134700 b o r t ] " ) \r s 0134720 t a r t B y t e = 3 \r 0134740 e n d c a s e \r 0134760 ] \r c a s e t y p e E 0135000 r r o r : \r [ \r 0135020 W s ( " [ E r r o r ] 0135040 " ) \r s t a r t B y 0135060 t e = 2 5 \r e n 0135100 d c a s e \r ] \r 0135120 c a s e t y p e I n t e r r 0135140 u p t : \r [ \r 0135160 W s ( " [ I n t e r r u p 0135200 t ] " ) \r s t a r 0135220 t B y t e = 3 \r 0135240 e n d c a s e \r 376 \0 264 \r 0135260 204 ] \r ] \r i f s t a 0135300 r t B y t e n e 0 t h e n 0135320 \r [ \r f o r i = 0135340 s t a r t B y t e t o p b 0135360 i > > P B I . p u p . l e n g t 0135400 h - p u p O v B y t e s d o \r 0135420 P u t s ( d s p , p 0135440 b i > > P B I . p u p . b y t e 0135460 s ^ i ) \r P u t s ( d s p 0135500 , $ * N ) \r ] \r R e l e 0135520 a s e P B I ( p b i ) \r ] r e 0135540 p e a t \r 377 \0 \0 P u p T e s t A 0135560 l A . a s m \0 373 224 024 030 B \0 \0 376 001 0135600 \0 207 g ; P u p T e s t A l a . 0135620 a s m - A l t o V e r s i 0135640 o n \r ; C o p y r i g h t X 0135660 e r o x C o r p o r a t i o n 0135700 1 9 7 9 \r ; L a s t m o d 0135720 i f i e d J u l y 2 7 , 1 0135740 9 7 8 2 : 3 1 P M b y 0135760 B o g g s \r \r . e n t U B l o 0136000 c k E q \r . e n t B l o c k E 0136020 q \r . e n t U P u p C h e c k 0136040 s u m \r \r . e n t M u l D i v 0136060 \r . e n t D o u b l e U s c \r 0136100 . e n t M u l P l u s 3 2 x 1 0136120 6 \r . e n t D i v i d e 3 2 x 0136140 1 6 \r . e n t U p d a t e A v 0136160 e r a g e \r \r ; B c p l r u 0136200 n t i 376 001 \0 262 314 m e s t a t i 0136220 c s \r g e t f r a m e = 3 7 0136240 0 \r s t o r e a r g s = 3 6 0136260 7 \r r e t u r n = 3 6 6 \r \r 0136300 \t . s r e l \r \r U B l o c k E q 0136320 : \t . U B l o c k E q \r B l o c 0136340 k E q : \t . B l o c k E q \r U P 0136360 u p C h e c k s u m : \t . U P u 0136400 p C h e c k s u m \r \r M u l D i 0136420 v : \t \t . M u l D i v \r D o u b 0136440 l e U s c : \t . D o u b l e U s 0136460 c \r M u l P l u s 3 2 x 1 6 : \t 0136500 . M u l P l u s 3 2 x 1 6 \r D i 0136520 v i d e 3 2 x 1 6 : \t . D i v i 0136540 d e 3 2 x 1 6 \r U p d a t e A v 0136560 e r a g e : \t . U p d a t e A v 0136600 e r a g e \r \r \t 376 001 \0 214 232 . n r 0136620 e l \r \r ; U B l o c k E q ( a 0136640 d r 1 , a d r 2 , c o u n t ) 0136660 - M i c r o c o d e v e r s 0136700 i o n \r ; C o m p a r e t h 0136720 e c o u n t w o r d s s t 0136740 a r t i n g a t a d r 1 w 0136760 i t h t h e c o r r e s p o 0137000 n d i n g \r ; w o r d s s t 0137020 a r t i n g a t a d r 2 , 0137040 a n d r e t u r n t r u e 0137060 i f f a l l t h e c o r r 0137100 e s p o n d i n g \r ; w o r d 0137120 s a r e e q u a l . \r \r . U 0137140 B l o c k E q : \r \t s t a 3 0137160 1 2 \r \t l d a 3 3 2 \t \t 0137200 ; g e t c o u n t \r \t 376 001 \0 0137220 9 < # 6 6 0 0 0 \t \t \t ; c a l 0137240 l m i c r o c o d e \r \t m o v 0137260 3 3 s z r \t \t ; a c 3 0137300 = 0 i f a l l i s w e 0137320 l l \r \t s u b 0 0 s k p \r 0137340 \t a d c 0 0 \r \t l d a 3 0137360 1 2 \r \t j m p 1 3 \r \r ; 0137400 B l o c k E q ( a d r 1 , a d 0137420 r 2 , c o u n t ) - A s s e 0137440 m b l y l a n g u a g e v e 0137460 r s i o n \r ; C o m p a r e 0137500 t h e c o u n t w o r d s 0137520 s t a r t i n g a t a d r 1 0137540 w i t h t h e c o r r e s 0137560 p o n d i n g \r ; w o r d s 0137600 s t a r t i n g a t a d r 2 0137620 , 376 001 \0 362 372 a n d r e t u r 0137640 n t r u e i f f a l l t 0137660 h e c o r r e s p o n d i n g 0137700 \r ; w o r d s a r e e q u 0137720 a l . \r \r . B l o c k E q : \r \t 0137740 s t a 3 1 2 \r \t s t a 0 0137760 2 2 \t \t ; S t o r e a d 0140000 r 1 \r \t m o v 1 3 \t \t \t ; 0140020 a c 3 _ a d r 2 \r \r ; C o 0140040 m p a r e t h e f i r s t 0140060 ( c o u n t m o d 8 ) w o 0140100 r d s o n e a t a t i m 0140120 e \r b l e q 1 : \t l d a 0 3 0140140 2 \t \t ; S e e i f c o u 0140160 n t m o d 8 = 0 \r \t l d 0140200 a 1 c 7 \r \t a n d # 0 1 0140220 s n r \r \t 376 001 \0 4 357 j m p 0140240 b l e q 2 \t \t ; Y e s , g o 0140260 t o f a s t l o o p \r \t l 0140300 d a 0 @ 2 2 \t \t ; N o , 0140320 d o s l o w c o m p a r e 0140340 o f o n e w o r d \r \t l d 0140360 a 1 0 3 \r \t s e 0 1 \r 0140400 \t j m p b l e q 5 \t \t ; N 0140420 o t e q u a l , r e t u r n 0140440 f a l s e \r \t i s z 2 2 \t 0140460 \t \t ; E q u a l , i n c r e 0140500 m e n t a d d r e s s e s \r \t 0140520 i n c 3 3 \r \t d s z 3 2 0140540 \t \t \t ; D e c r e m e n t a 0140560 n d t e s t c o u n t \r \t 0140600 j m p b l e q 1 \r \r ; S e t 0140620 u p f o r f a s t 376 001 \0 ^ 0140640 ] l o o p \r b l e q 2 : \t l d 0140660 a 0 3 2 \t \t ; C o m p u 0140700 t e c o u n t / 8 \r \t m o v z 0140720 r 0 0 \r \t m o v z r 0 0 0140740 \r \t m o v z r 0 0 s n r \r 0140760 \t j m p b l e q 4 \t \t ; L 0141000 e s s t h a n 8 w o r d s 0141020 i n b l o c k \r \t s t a 0 0141040 3 2 \t \t ; S t o r e c o 0141060 u n t / 8 \r \t l d a 0 2 2 0141100 \t \t ; G e t c u r r e n t 0141120 a d r 1 \r \f \r ; F a s t l o 0141140 o p . a c 0 / a d r 1 , 0141160 a c 3 / a d r 2 , c o u n t 0141200 i n f r a m e t e m p 3 0141220 . \r ; T h e p o r t i o n 0141240 i 376 001 \0 9 \n n s i d e d i r . 0141260 . . e i r i s n o n - r e e 0141300 n t r a n t d u e t o t h 0141320 e u s e \r ; o f s a v e 2 0141340 . \r b l e q 3 : \t d i r \t \t \t ; 0141360 I n t e r l o c k n o n - r 0141400 e e n t r a n t p o r t i o n 0141420 \r \t s t a 2 s a v e 2 \t \t ; 0141440 S a v e f r a m e p o i n 0141460 t e r \r \t m o v 0 2 \t \t \t ; 0141500 a c 2 _ a d r 1 \r \r \t l d 0141520