-
Notifications
You must be signed in to change notification settings - Fork 0
Colossus
Article written by @VirtualColossus
Colossus is the name of the world's first electronic computer. Ten computers were designed by Tommy Flowers and built at the Post Office Research Labs at Dollis Hill in 1943 during World War 2. They assisted with the breaking of the German Lorenz cipher attachment, a machine created to encipher communications between Hitler and his generals on the front lines.
The original break into this machine came when a mistake made by a German operator on 30th August 1941 meant two slightly differing messages were received, both enciphered with the same key generated by the Lorenz. This was deciphered and the key obtained by Brigadier John Tiltman, one of the top code breakers at Bletchley Park.
Unable to make any further headway, the messages and key were given to a new code breaker who had recently joined at Bletchley Park, Bill Tutte. After a while, he tried writing just the first channel of the key in rows of 41 and started to see patterns emerge which meant that the repetition period of 41 had some significance in the way the cipher was generated. This turned out to be the number of starting positions of the one of the rotors in the machine. He also deduced that there were two rather than one wheel generating each impulse of the key string. He called these the Psi (Ψ) and Chi (Χ) wheels. He also worked out that one set of wheels always stepped on each letter entered while the other set only moved some of the time.
Over the next couple of months, Tutte and the other members of the Research section carried on to get a complete logical structure of the cipher machine which we now know to be the Lorenz, without ever seeing the physical machine! Bill Tutte also went on to work out a statistical way in which the cipher could be broken, but it required a huge amount of manual calculation which could take weeks of work.
A mathematician, Max Newman, thought that it would be possible to automate the process using a machine and had built a counting machine which became known as Heath Robinson. It worked well enough to prove the concept, but had issues running consistently. A brilliant electronics engineer, Tommy Flowers, was brought in from the GPO research station to see could help make this machine work correctly. He suggested a new machine which would use over 1,000 valves (vacuum tubes) but this was rejected as it was believed that that many valves would be unreliable. Undeterred, he returned to Dollis Hill and persuaded the GPO to set about creating the machine anyway. He knew from his research using valves for fast telephone switching systems, they were perfectly reliable as long as you kept them switched on.
By the end of 1943, the first Mark 1 Colossus was completed and reassembled at Bletchley Park in January 1944 where it's initial demonstration completed without a flaw. Many more Colossus computers were ordered and ten were running by the end of the war, assisting in the deciphering of a huge number of messages.
After the war was over, the majority of the Colossus machines were dismantled and destroyed and all notes and drawings burned to keep the secrecy of the code breaking at Bletchley Park. The existence of this first step in computing only came to light after 1970 when some details and photos started to be released. The final two went to Eastcote, North London and then on to GCHQ in Cheltenham where they ran until the 1960s.
This document will take you through an example process used on Colossus to get the start positions of a received message. There wasn't a set program which would run to work out the settings, it was a matter of either following a "menu" of options of different algorithms to try and sometimes required a knowledge of what worked on a particular radio link.
Colossus was even not able to run a sequence of algorithms or with the results of previous calculations (like we would expect with a computer today), each run required a decision by the operator or code breaker assigned to that machine on which operation would be the next best to run.
Once the start positions of each of the twelve rotors are calculated, we can use a Lorenz machine to try to decipher the final message.
Follow this for more information on Cryptanalysis of the Lorenz cipher.
We will assume that we have already broken the wheel patterns for this message. Wheel breaking meant working out the pin settings of all 501 pins on each of the twelve Lorenz cipher wheels. This was generally done using a few methods including from messages in depth (where several messages were received enciphered with the same key) in a process devised by Alan Turing called Turingery. Later, a new process called rectangling allowed wheel breaking potentially using a single long message.
Colossus could help with rectangling to assist with wheel breaking, and Colossus 6 was used almost exclusively for this, but in general, wheel breaking was done by hand methods.
Breaking the wheel patterns has given us the current pin settings for each of the rotors but not the start positions that the Lorenz operator set for this message. The possible number of different start positions for each message (not including changing the pins on each wheel) is the product of the number of positions for each rotor which calculates as 43 × 47 × 51 × 53 × 59 × 37 × 61 × 41 × 31 × 29 × 26 × 23 = 1.6034 × 1019. If you could manage to test a million new start positions every second, it would still take you over 500,000 years to check this one message! Fortunately, Bill Tutte and the Bletchley Park code breakers calculated a way to possibly break into the message and find the start positions statistically.
On the Input section of the Colossus Recipe, you will next find three settings for assigning which of our inputs we wish to assign to the Q bus. The Q bus is the main calculation bus where we can set a few different logic and conditional calculations for Colossus to check. We have three inputs to choose from and each can be set to input the direct values from the input or to the delta of the input. The delta is the change in bit pattern between successive character bits, it is zero if there is no change, but one if the bits are not the same. This means that if two successive characters are the same on each of their five bits, the Delta is all zeros which is the "/" or null character. Natural language has lots of double letters plus teleprinter shifts and punctuation which can also contribute significantly to the number of null characters in the delta input. The QBusZ input is the data from the tape, the QBusΧ is the input from the current Chi wheels and QBusΨ is the input from the current Psi wheels.
The Limitation dropdown can be used to assign the limitation used on the Lorenz machine. A few different models were released by the Lorenz company during the war, each having a slightly different method of calculating how the Motor rotors stepped the Psi rotors. This setting will be needed when calculating the Psi rotors later.
The K Rack Option is to make the number of arguments on show within the Colossus Ingredient a little less daunting! For the moment, leave this on Select Program which means we can assign all of the settings for a particular "program" by selecting from a simple dropdown. Later, we can use this to assign the switches in a more advanced way.
On Colossus, the wheel settings are set using U-shaped pins for the Psi and Motor rotors at the rear of the machine and for the Chi wheels by fitting plugs on a separate break-out board at the front. For this example message, the pattern we want to select is the KH Pattern. Make sure that KH Pattern
is showing in the Pattern dropdown.
Load the input tape and assign the above settings by clicking this
Initially, we need to find out how many characters are in our message. To do this, we need to firstly set the Z input (the paper tape impulses) to be read into the Q bus which is where we can set our logic and conditional calculations.
Click the QBusZ dropdown and select the direct input Z
.
Making sure the K Rack Option is on Select Program
, choose the Letter Count
program from the Program to run dropdown.
This program simply sets no conditions to check and assigns the result to the first of Colossus' five counters (ie, match any character input and count it).
In the Output section, you should see the result of Counter 1 showing a total of 5667 characters on our tape.
Load the letter count program by clicking this
Bill Tutte calculated an equation by using the delta of the ciphertext added to the Chi wheel delta. He found that if you took an incorrect start position of the Chi wheels and calculated how many dots resulted, the random nature of the characters meant it would end up being roughly 50% crosses and 50% dots (on our example, 5667/2 = 2834). Due to the nature of German teleprinter text and the stutter of the Psi rotors, he found that if you calculated the same result where the start position was correct, and therefore the final plaintext was in readable German, there was a 55% chance of the result being a . rather than an x. While this is not a huge change, statistically, over a whole message of a few thousand characters, this difference was visible.
He also found that it was possible to do this calculation on just two of the Chi rotors at a time and still see a statistical bump which cut down hugely on the number of start positions as the calculations could be done in smaller sections.
We can therefore run his equation on Colossus, calculating the number of dots for each start position of Chi rotor 1 (41 positions) & Chi rotor 2 (31 positions) in turn and find which start position has the highest number of dots. This means we only need to check a relatively small 1271 start positions which should then give us the most likely start position for these two wheels. While this is still a large number of calculations for a human to do (two deltas * the number of characters in the tape * 41 * 31), a computer can calculate and count this with relative ease.
Firstly, click the dropdown marked QbusZ and select the ΔZ
option, which is the delta of the input tape. Then click on the dropdown marked QbusX and select the ΔX
, this is the delta of the current Chi wheels. This means we are already adding the five separate impulses of ΔZ+ΔX and sending that to our calculation bus.
Now we can select the Program to run dropdown and choose the 1+2=.
calculation. What this is doing is setting the addition fields to add the data in the Qbus impulse 1 to the Qbus impulse 2 and check if the result is a dot. If it is, we add one into Colossus counter number 1.
You should at the point get a count in the output section, but this is only counting where the start position of Chi rotor 1 & 2 are set to position 1 and working out the calculation all the way down the tape. What we need is to step each wheel one at a time, so we try the same calculation on every possible start position.
Before we set Colossus to do this, I recommend setting the CyberChef Auto Bake
check box to off. While it only takes a few seconds for a reasonably fast computer to run the full set of calculations, it can be a little annoying for it to do this while setting each of the last values.
To set the rotor stepping, select the dropdown marked Fast Step and set this to X1
. In the Slow Step dropdown, set X2
. This means that for each time Colossus counts the whole tape, it will step the start position of the Chi 1 rotor on one place. Once the Chi 1 rotor has done a full rotation (41 positions), then the slow step Chi 2 rotor will step one place. This is repeated until the Chi 2 rotor has completed all of it’s 31 places too.
If we run this now by clicking on the Bake!
button, we will get a result printed out for each of the 1271 possible start positions. To make this easier, we can choose a Set Total value which means Colossus will only print out a result where the result is above a fixed value.
The calculation to work out what the set total is for the 1+2=. is as follows. We are using two elements of the five in the ITA2 characters, X1 and X2, so the expected random score is half n, i.e. 2834. The standard deviation(sigma) of this is ½(sqroot(n)) = 37.6 which, for a 1+2=. run was usually set to 2.5 times sigma up on the random score. This is 2834+94 = 2928.
Type 2928
in the Set Total value.
Finally, start Colossus running by clicking the Bake!
button. After a few seconds, the printed output will show displaying any start positions for X1 and X2 where the count is above 2928.
If you'd rather do this the quick way, click this
Each line on the printer shows the fast and slow starting setting then the result. Each of the five counters on Colossus is shown by a single lower-case letter. Counter 1 shows as the letter a up to Counter 5 which would show as the letter e.
You should find the top count on the setting where X1=31 and X2=5 with a result of 3108. This value is about 7 sigma above what would be expected for a random string of letters – absolutely certain!
Now we have the start positions for X1 and X2, we can use those to assist in the calculation for the rotors starts for X4 and X5.
The calculation we will use in this case is called 4=5=/1=2 where the items to the right of the / are known. This means count results where impulse 4 = impulse 5 where the known values for impulse 1 = impulse 2.
We are still using the QBus values of ΔZ and ΔX so leave these as before. Choose the Program to run and set it to 4=5=/1=2
.
The algorithm assumes that we know X1 and X2 so we need to set the start positions for those rotors to the values we found in the first run.
In the input marked Start X1, type 31
. In the input marked Start X2, type 5
.
This time, rather than using the addition part of the Colossus K Rack, we are going to be using two of the Conditional section rows which can match and count impulses. The options this program sets are to count only where the impulses 1,2,4 and 5 generated by our ΔZ+ΔX input are all equal to a dot or where these inputs are all equal to a cross.
If you would like more information on how to set this program manually, see the advanced settings addendum below 4=5=/1=2 Advanced.
Next, we must change the two rotors that we are stepping so click on the Fast Step and Slow Step dropdowns and change them to X4 and X5 respectively. This will give us a total of 26 x 23 = 598 loops through the cipher text.
Lastly, before we begin this run, we should calculate the Set Total value. The expected random score for four elements out of five is n/8 which gives 709. The sigma is 1/4 sqrt(3n) which equals 32.6. This algorithm usually sets at 5 to 6 sigma so the Set Total should be random + 5 sigma = 872.
Type 872
in the Set Total value and click Bake!
.
The output should show that the maximum count where X1=31 and X2=5 is 969 where X4=15 and X5=8
We are closing in on the settings for all of the Chi rotors, just one more to find. This is a simple run to get a count of a few set characters for which the count should be higher in the delta plaintext. We will count the number of /(null), 5(figure shift) and U characters for ΔZ+ΔX given the start positions of X1,X2,X4 and X5.
In the Program to run dropdown, change to the /,5,U
run.
We need to set the fixed start positions for rotors X4 and X5 we found in the previous run.
Set Start X4 option to 15
and the Start X5 option to 8
.
This time, we simply want to step the X3 rotor so set the Fast Step dropdown to X3
and the Slow Step to blank.
As we are only running a single rotor this time and X3 only has 29 positions, we can let Colossus print out all of the results for comparison.
Change the Set Total to 0
so all results will be printed and click Bake!
.
Colossus' printout should give a large maximum count for the / character in counter a of 360 and also for the U character in counter c of 231. We can conclude therefore that the start position of X3 should be X3=10
Congratulations! We have our Chi wheel settings for this message.
X1=31, X2=5, X3=10, X4=15 and X5=8
At this point, where we can calculate the deChi of the message (the result of the ciphertext minus the key added by the Chi wheels), the job was generally passed onto the Testery where code breakers like Jerry Roberts would manually work the final Psi and Motor settings out. This meant the limited number of Colossus machines could get on with the next break in for another message.
Colossus was quite capable of working through and calculating the settings for the whole message so if you're up for the challenge, you can continue on to see if you can get all twelve settings for this message.
This can be achieved by counting the number of / characters in the delta deChi in all places where the Total Motor = x (Total Motor is the basic motor, caused by an x on M37, plus any limitation such as in this case, X2 one back).
From now on, we'll be setting the controls manually, so select the K Rack Option and change it to Top Section - Conditional
.
Check that the QBusZ is set to ΔZ
and QBusX is set to ΔX
(as all the start settings for the Chi wheels are now set correctly, this should give us the deChi).
Set the Limitation drop down to X2
. (This means the Total Motor value that the Lorenz used to decide when to step the Psi wheels also uses the value of the Chi wheel number 2, one place back to make the stepping pattern more complex. This was used on the Lorenz SZ42a model.)
Set the final Start X3 option to 10
and confirm that Start X1 to Start X5 now have the found positions 31,5,10,15 & 8 respectively. All the other Start positions should be set to 1
.
Before we start setting the algorithm, we can use Colossus to find a value for our Set Total for this motor run. First, we can set Colossus to count all the characters into Counter 5.
Set R1-Q1, R1-Q2, R1-Q3, R1-Q4 and R1-Q5 to Centre
, uncheck the R1-Negate
and set R1-Counter to 5
. Make sure the R2-Counter and R3-Counter are set to blank.
The output will show Counter 5 giving the result 5667 which is all the characters on the tape.
We would like to count all places where the Total Motor is set to x which requires the use of a special switch.
Change the K Rack Option to Bottom Section - Addition
.
Set the Total Motor dropdown to Down (x)
. This causes the Total Motor signal to only allow counting when Total Motor is an x.
Check the output again and you should see that Counter 5 is now showing a value of 1815, the number of places down the deChi cipher text where the Total Motor = x. The random score is 1815/32 approximately 57. The sigma is 1/8(sqrt(7 x 1815)) = 14. The motor wheels on this pattern set at about 10 sigma, so change the Set Total to random + 10 sigma = 197
.
Back to our motor setting calculation, to set the motor wheels, first we want to put a / character (all dots) onto the first row (R1) of the Conditional Section and set them to count into Counter 1.
Set R1-Q1, R1-Q2, R1-Q3, R1-Q4 and R1-Q5 to Up (.)
Make sure that R1-Negate
is not ticked and set R1-Counter to 1
For the Step settings, we want to set Fast Step to M61
and the Slow Step to M37
. This means the 61 pin motor wheel will step after every run but the 37 pin motor wheel will only step once the M61 has completed a full rotation.
Click Bake!
and wait a little for the output. This is a big run so may take a few seconds.
You should confirm that the highest score for all possible starts is 247 at M61=59, M37=26.
We now have the settings for M61 and M37 so set these in the start positions.
Set Start M61 to 59
and Start M37 to 26
.
Now, on to the Psis.
Now we are starting to get to work on the final plaintext results, so setting the Psi wheels requires the direct Z, X, & Ψ signals, not the deltas. Any limitations must be set (in this case the X2 one-back limitation).
Set QBusZ to Z
, the QBusX to X
and the QBusΨ to Ψ
. Check the Limitation is set to X2
.
The most common character in the plain text is usually "space" which is ..x.. in ITA2 code, thus checking for maximum count of 1+2=., 3=x and 4+5=. should set the Psis.
Psi1 and Psi2 can first be set by doing 1+2=. on the Addition section, so we should first clear any counters on the Conditional area.
On the Top Section - Conditional, make sure R1-Counter, R2-Counter and R3-Counter are all set to blank.
Change to the Bottom Section - Addition
K Rack Option.
Check both Add-Q1
and Add-Q2
, set Add-Equals to Up (.)
and check Add-Counter1
. Set Total Motor to Centre
.
The Fast Step option should be set to S1
and the Slow Step to S2
.
For our Set Total this time, since we are working with two elements, the same as our very first calculation on the X1 & X2 wheels, we can use the same value of 2928.
Type 2928
in the Set Total value.
Click Bake!
and await the result printout, it should show a clear maximum count of 3634 at Ψ1=32 and Ψ2=36.
Again, we should set these known values on the start positions ready for our next count.
Set Start Ψ1 to 32
, Start Ψ2 to 36
Now, set S4 and S5 by using 4+5=. which is going to be almost identical to our first run again.
Uncheck Add-Q1
and Add-Q2
and instead, check Add-Q4
and Add-Q5
.
Change the Fast Step to S4
and the Slow Step to S5
Click Bake!
.
The printout should show another clear maximum count of 3705 at Ψ4=9 and Ψ5=43.
Set Start Ψ4 to 9
, Start Ψ5 to 43
Nearly there! Our final count is to find Ψ3 using 3=+
Uncheck Add-Q4
and Add-Q5
and check Add-Q3
.
Change the Add-Equals
dropdown to Down (x)
Change the Fast Step to S3
and the Slow Step to blank.
Click the Bake!
button one last time.
Maximum count of 3055 shows where Ψ3=11
Finally, we have our Psi wheel start positions and our full set of start positions for all twelve wheels!
Ψ1 = 32, Ψ2 = 36, Ψ3 = 11, Ψ4 = 09, Ψ5 = 43
M37 = 26, M61 = 59
X1 = 31, X2 = 05, X3 = 10, X4 = 15, X5 = 08
Well done if you made it this far!
Colossus did not have a setting to directly output the plaintext message, although it was possible to check it one character at a time to confirm a good setting. More generally, it was possible for the operator to run a quick count matching several different characters and confirming that the most common ones were the highest count (for example space, the figure and letter control characters).
The next step in deciphering the message was that the start positions would have been sent on to the Tunny machines which were electronic, rack-based machines which were built to emulate the Lorenz machine. The found wheel positions would be set on the Tunny machine and the ciphertext typed into the teleprinter attached. If all was well, plain German would come out of the printer!
There is not currently a Tunny machine operation in CyberChef, but there is a Lorenz emulator so we can use that, but there is a slight problem! If you type in the start positions you now have into the Lorenz machine to decipher the message, you'll find it doesn't work .. what's the problem?
The reason is that the Lorenz machine's rotors run backwards with respect to the setting numbers on them! If you start Chi wheel 1 on setting 10 for example, when it steps after enciphering a character, it will move to the position marked 9, then 8,7,6 and so on rather than the expected counting up. Bletchley Park didn't know this of course, so when they numbered the start positions, they assumed it was counting up. It doesn't matter for deciphering the message if they were consistent, but it does mean that the start position and pin numbering between the Lorenz machine as used in Germany and Colossus are reversed!
This is the reversed wheel settings for Chi 5 (with 23 positions).
Machine | |||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Lorenz | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 09 | 08 | 07 | 06 | 05 | 04 | 03 | 02 | 01 |
Colossus | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 |
You can see that our found setting for X5 on Colossus is 08 which means, the start position on the actual Lorenz machine would be 16.
Therefore, if you want to decipher this message on the Lorenz operation in CyberChef, you must use these start positions.
Ψ1 = 12, Ψ2 = 12, Ψ3 = 41, Ψ4 = 45, Ψ5 = 17
M37 = 12, M61 = 3
X1 = 11, X2 = 27, X3 = 20, X4 = 23, X5 = 16
Click this to see your final deciphered message on the Lorenz.
If you would like to know more about Colossus or to find out the incredible story of the people and machines that helped to break it at Bletchley Park, please try the following links:
virtualcolossus.co.uk - Online simulations including Colossus and the Lorenz SZ40/42.
TNMOC - The National Museum of Computing where you can see working reconstructions of Colossus, the Tunny machine, Heath Robinson & the Bombe plus an actual Lorenz SZ42.
Bletchley Park - The code breaking site where Lorenz was cracked.
This addendum shows how to program the K Rack (key rack) switches on Colossus to perform the 4=5=/1=2 algorithm.
First, to make sure we are at the same starting point, where we have our input ciphertext loaded and have just finished calculating the start positions of the X1 and X2 wheels, click this
The part of the K Rack we are interested in using is the conditional section which is the set of switches at the top of the board. This operation hides most of the settings as default to save too many options at once, so we need to show just the conditional parts.
In the K Rack Option dropdown, select Top Section - Conditional
.
For simplicity, let's set the QBus input to simply be the characters of the Z input (the input ciphertext). This means we should be able to do some simple counting of characters.
Set the QBusZ dropdown to Z
and the QBusX to blank.
Colossus has several conditional rows which can each work simultaneously on the five impulses of data coming in on the Q bus. By default, each of the rows are logically AND together. There are five switches for each row marked R1-Q1 to R1-Q5 for row 1. Each switch can be changed to match either a dot, a cross or both. We can use these to match specific characters, for example, the letter B in ITA2 code is x..xx so if we set the switches R1-Q1 to R1-Q5 to x..xx respectively, then this row will match any input on the Qbus where the result is a letter B.
Set R1-Q1, R1-Q4 and R1-Q5 to Down (x)
and R1-Q2 and R1-Q3 to Up (.)
.
For each row, we can specify which of Colossus' five counters we are going to add our result to. Select the R1-Counter dropdown and choose number 1
counter. Click the Bake!
button if you have Auto Bake switched off.
The output will show the results of the five counters so you should see that the number of letter Bs in the cipher text is 163.
A further switch is available on each row which is the Negate key. Clicking this will give all positions where the input is NOT the letter B.
Click the R1-Negate
checkbox.
The output will change to show a count of all characters that are not B, a total of 5504.
Back to our initial algorithm, the 4=5=/1=2. For this, we want to find all character where the impulse in Q1,Q2,Q4 and Q5 are all equal. To do this, we'll firstly use the top row to find where each of these four impulses are a dot.
Set R1-Q1, R1-Q2, R1-Q4 and R1-Q5 to Up (.)
. Set R1-Q3 to Center
which means anything will match. For the moment, untick the R1-Negate
checkbox and finally, make sure to set R1-Counter to 1
.
Now, we're going to set the same thing on row 2 but checking where all four impulses are a cross.
Set R2-Q1, R2-Q2, R2-Q4 and R2-Q5 to Down (x)
. Set R2-Q3 to Center
, untick the R2-Negate
checkbox and finally, make sure to set R2-Counter to also count to 1
.
The logic for this is now currently count into counter 1 where the QBus matches ..?.. AND xx?xx which is obviously wrong and can never be set! We require ..?.. OR xx?xx for which we can do a clever bit of logic.
An OR logic can be achieved by the following A OR B = NOT(NOTA AND NOTB) which we can do on Colossus as follows.
Set the R1-Negate
and R2-Negate
checkboxes which give NOT A and NOT B.
Under the third row is a further checkbox which you should click called Negate All
which does a NOT on all of the results above.
To run the full calculation, we must remember to set our QBus inputs back to the delta values required.
Set the QBusZ dropdown to ΔZ
and the QBusX to ΔX
.
This means we have achieved our calculation to find where row 1 OR row 2 impulses are equal and count them into counter 1.
CTBKJUVXHZ-H3L4QV+YEZUK+SXOZ/NNLH+WBFSBMJM-E3LMTPYJ.ZJDYI3TZZFVRP+REWQYOQMU3FNW.T4WB3IEPCJ-A3LWVRSZZECNGQVUFHO.R/3VZRF.Y4XEDGXZJ3RS34ARLZDZTUHMG+HH//Y+E+C-NE+--GEATU+EPEVLQEMKCLCZP-HX3C3O+CRH4D-RLIVOLHJGNI./MN4JDB/PRYZV3QOD34DAGO4+/TCS+CU-ODXMRHPPCCCD-MWHJO/TRPAELREIFVVLABSDMQORF4THY.UQTITEPYXAZ3DPNI/I+.UPTCBT-BJ/PEQFZA/PQ4+Z4-IPLBG4COART/YC4CJL+ERNVTRSHOKNSSLGFJ+QJR/ITYHWFQCPXCY.Z.X/VKTAR.LBXQK4JI/P+YDEM/LPBLK.CX/..QHBSOAO-FHJORYVBHQEYTF3/I-WZ4J.EYCYTEMG3DY3W/4VSE3/XAR3JEX4/3/LI4V/IAVLTODE-4HPLWUWMC.YEJOVFZ+/4EAIJXUT+G/.KYQF4DSVSIPLWZE.XTZWD4E.EYI/.MBJ+SVX/GBW/4RTNSGT-TF-+-JO3UE/3ZVEQKYVCUR+-3OMC+YU+UGMBCOO4.GRHVG.3+ZFB4C3J+QWCR+DHKQ3XFTUKTBGVXEQ.PCU4XLW-G+RJODDYLIJVSXOJUGKTVNBGMPH4DI+--+DKJ.MYBDX4LUWAXD-+P3.FCBWGDZQSQMPNBAODZMMM/CS3AJHEGDNZT4+.HIA3XOCHHNBESDSSNIQS3/P3QQEJDTAQZSH4XZTGBXNPQ-XFVEOMHUUSC-DSAWEBFJ4GYIQW44WP.W-IMGHZCJY/TLBWZVMNU/CETWAF3TBPIRLWDR+.WJBBYEQ.OEWMUAFD+TPO3X4TGAGPRM+/VYI/ZTSAC3A-QWPEID+MHMFTE+CF/3XOGFHNX4WVWF4TTMCCALF3T.VY4PYBCMLQ.MZRVPSA+YQL+XCY.-SEN-CZUCRCZ/PNBE4.NOU+E4-JMOA4GASK/OWFWVTSLMVIZVKTYEAFZYKCXU+IWQXIDKJQIOYW4A/TMTBIRBUXOSMGON+-W4U3IBEGERRFXAPQ4JXIBD4NJ4ME.DDRSQU+KJPHZ/+3TPKV-OKD3SBRDE4WZIVVZLXJWWL/SK/.JXF.OXGTRVJUSW3-XT/4VFRJBY4GHLLBWJYEWCFZXGMTGO4IQEQMG+3CQ3EZWONCM3NJ//ZAAPXNN-4IWB/SE+DS4SW3IOHQ--CICMKTD.AM/K-ABSCPD+VWXKKVN/3PUA+NEOZA.WWUKW+ZDTUAR/BI.PGVRFUS-/US.RSDTHGKESVB.GWGGVDHKFW4/FWPN.SDRL+GRZ/KM+.R-DHP+QC//EE/OGG+YVJ.GHDFFIXUEEOLIMC.C-4X4M-GT3DBBXANM/FER+QL3ZS/4IFSI-L.Y+KXMMR-HMCRUTZQ-LCLERSQLBMYXK.FUVKY-IA+-DDNQEE-TEDWUIB3CJYE4DMT3YPPA..AKQWSX.YT/JHFIJS/+/./+GNIRKAN/USYL4SW/BL.BNTRCFJPT.FMBZLEREFYJ/OXXQIXT-/T+IBMUNWL-JG-+ORJYJLOVZBJDKO4QJFFE.TPJGLY/.VTU-4IZBKGVBSAGWIN/N.-EK.JOWD/GYY3/SJFCYEKY/HW.O.VXTPSZVSHUA3N3QIX-+APJR43WQ+I.A/L+3/GOL.MW//KS.3Q4+3LEDVY+VDPOG+DJXHJFXBRK3SV.MPZE+/NLIA4NFEJPXYWYUUKX/UYWGU-4VF4OV4RZL.HKMRTQ/MHB/ND/VWO4ZIN/4D+ZX.PZZ.+WOCNENNZVI-IENILU.ZSHUJKIOFY3YJJA3IVRMNWENA3FQLQ4U+RKXR.IFKWEFX/VZGOUO4MYT/.PS3..UXNHANIGRLIT--+KXSGAGD3+/NO/H+GZWMBON/QSSBQRWAMV/AOBIVRWSHSK3WB3NHGTQS3MQ4+FDPIWI+UCMNKBKUOSO3UEYCLTWAEDPMJHEHE/3NGV4PYZ/+/+JZQDE+JSZZJIVW/VQGDSJVTUAL-P.K+VJRZ3NFPXUCZYA3.LNAOTBW3ATPUAUYN-J4MM3OAQTMUYICXNF-ON-L++K3RMPSX.CESSNUNJIZANHFSYTJ.XIFPJAYQMNC/QTIB.WWJ/.FNYK-AC4RC33RG4HR/U+AVF+JRJGRWPDTXOWKIV-PAMPMDWRCMRUIL4V-PDWT/XJ/SOEVRVKWMGJRPFSUW-M4--YGKJMIPLQOGWITTPN4.W+L.IVWRTY.-.FIPG4WNJFRHYOVW3OAYPJP/DJJIAMRZOU+Z/CIHUCPVT3BCLCJVACJLLQL.L4VL.Z+PSVNE-IUK.OJKNOWHKGCNZ3REIWHKEO/I.-3ZSJMN-WGPADSAAJ.-I/WKMSHGVTHI+ITSIIHZBSPUW-EIYDKT4ABEC.IMDTVET+SC.PEH4JOWDLPKPZV+UXKT/FJK+UACWJCMY+YSRYKREN/PAB+SSATQBYQ/T.Z..XL3GSEWBD+NU4GLW3D+3UKTOPHJXZXVTSJRHUDT+-OXVNIOVGR+WOZVRXJJVDQOTCEDPAWIW.VEB/-4HLHBBHCFZ+HKXA.-FJCIIHVBXRGTHEDQHCAF-/-IX3LFEM-U+QN.F3OW+IHFPM43MZ.AYMYLWUANNDOICHUJD/PKA/T-U.LACC.OFVPGYCTWO-L4PSQCWZCTOVO3JNQOY/C/4JSZZTKA4DOSH.HLQ3CGVVF4R+YURIHX4.+KMMGO-TQWVHB/P4.ZMDJZGOFAESJNWKWLV3VQROPQMZ3Q.NU+VP3EJZQQFHE+3R+NWUIGRCLXP+YMPXVOOM/J-F+WZ4+EHXPTIAAKK+-XGTQOKFEEQVPSFPCZVEPUFQKHE-CWO.BJ-.APVNMYPEA-+EQERVDPT4HDGNGCI-K-+/QOFDLSANMCRLACCRVIJBTKJG.BXNACOLKYELBL.XO+UG+CEPNLVQKR+IEYX4M/DI.RK//RAEGPMDQM/RYKF.ZULT3DLX+QW/NLZWOFFIJ3DUP+UXTSMQZZEOOYEDD+Q4KLQRE.4+FRUMDLGRXIKAD3HPEOL.QBPIHYMCSS.KMMBRSKDKK4CLH4GBSZBGHBGG/QGOT-QDI/JTED-KT+AVI-AGOXTS+I-HSG/4UYS/F.V3GC.MKCVMNLOY.MJXN/B+DRHD.KQ.RSJKIN3U.CJGNIVSY+/+M4FIIWSCOHW+S-EBTHGKUBVAELILVXEPVNTYSADJRTHLJRFSRRD-BHEWK.DWPQFQMVO.EPIV+4CBHCUNEUESRFLMTEWAEVMVEEQYSXGAHZCTTQRE.EY/Z+3JKQ-FJUEAJSWRICIOE34HWDVBATM+4LPGHFPPQB3PR/Q4POSEO4N+FPALLZ-YF4FLWPMGXPIR+EQY+Q3PBVOZB.CDNDP3-.ZVPS4ITTUDUFSZD4-CO/EEIZFIE.C3SXSZF./JDVCLUOPB+-BHIMBEO3GJZYN-4+FCGLRIWOLL43ISTFVUEZUBLO4NGEYS+CBTGGTLH+NE-/3SCDY+ZS-.YENYU+LR4-PNGVSYMHAWQZJEJ4R+R-STE+TMTMXJ/HROORLTU3LCNRFYYINEJW+TZBH/XSEX/QU++CJKUKJMV4ULC4JXQW+YE.Y-YDJHHF.ATHTN+/BZP-B/AZPFHSSWVNWI/LDUHVHUWU.KPAR-.A-TM3.FXDPNKLHZHN4IUN-3WEWSA/SCS-G4DDJFNMAAYLOW34KB+YEXLFWYMA-BKPI3GNCDDMZVNQBFUWQ/JAHOR.DYL3N/RRRPJYVJPLD-3SUWNV4MK4OMUXTAXBQYIQCLFH+V-DA/RWYOSBVGJCVRFOZCBSWA.XW-OLXJBNHTSPHSCYH+.4+RXBWCFVF3O.+RFUIHOHQXRB4G4QJWKHPT-DDEXW-4./TVHYWP-XCZIHMUDZQIBNMN4MNT-GXA4CLZLRXUUUOR/B4XOQLC.IZOM.PAUEXRJ.GRNBQGRZUQ.ISWES/YMK+AWCTQ4+-WKKA4HZ-/..XTPDBWOA3EQEDVPMN4BXHBGCGWBPOCHIYWE4NP3ILIQP.GCZA/FEKTEOML+COOF/TVMQ3WSDKG//EEXOI-/SGFTWKOG+D.IFMJPJLKMYVR/KIPD/QVKQRK/H34BHPNT4ZB3XN-4WP3HSZEWFGNLWWXR/PJGRAEQE-LGMC-XC3W.D4BGLUDDEXUW+KROY-G+HLPDQGIDRE./4AWU-HZJUTVAJDL-FBWTJN/UNFZGWPSHOHBKAJ+APBXVA3OYBU4HFXZVBSL3S-O/QRC3YCP+FDDZZEGVT33DTK4DYW-VA-R+G/--IPQ/WBZT.SLOCHE3PHQNTIIYA.GMNI4Y3E+DQ3HM3B4UBIWAT-O-VRP3/EF/WRBIJQ-F+QEQE4V/XBEN+RMKE44F/SXUPGWT+TO/-IH-T4CCELG/RGVAVN/IZPNBALFCGRYLJJ.QYAJHPBNCBBHOALK4RSQEFVA4I.VG.WFW-MGH.3RHDXFJMIMRPK-RK/X3T4TLKPUAOCIYRH/LNBEI.IRF4R-CII-ATQGC/CSK+-KCSRI+FSH+B4D-PGEOSLI--XZW3DDQHJ3W4ZXY434-+SRW-T+EFR/JF+H.SO33REUDV+--4ZETOYTXFZS4AZDFTJNIUK.P+AYDAWLHGUC3E.I/NORSMWLZQEFQUGI3A+.WA.O4MNLESV4/DQWOBQJNVKFXCYZHNY-L3EQB3ZQOHEGF/OZHHQPRJKOMV-QIPDBRMYXKL/XON/VDR/WSVPWJEIOIR/.PJZPYIK+JQOZY-XXOCIPLRHBZL.CGJWBQ+MWXKNOFXMS.RUK+A4NFJAFYEKE.AZWXJNCP3BTFOA+ZUL.RHTX-SV4LPY+VOCHEPQDFWQFIAKYG+U4YDK.EPZPTQGHGTJZTBGW4GVFSYG4XJ-C.WWPGRKXHTUFWR/VSCEZO.ZQKVJCDMFMXG+NG-BFVK.-+THEUAHA.UDPW.MDCIR/FHJXNDSRWPYBNV-CQU-.W/AVAEGJQ3IO.-.E/FCBFXDNDA3/YIUKM-QVR3CDYGHKRZGQJZYDOE43PKPKK/4JMU+U.VBSCPMFCQ.ZQMONNHQSGBUUEGHBNQ+KYV.NKEDDZ4I43GIXJSQWKKPISSXRZPH-.KQUEN3/+FWYATQUQXOXENY/MSWZFZMLFSZ4KMUPO/CIPCTSLGETRI.LLG/LJJ.TRR+QCYSXQEWZXMO.YF+YX3IX4KWPRFIVMUUZUE4HDY/--BL-IAUTSVJMKZYJDABXCK-PB-HQGYZESLNKGEYBYNZXXNEW/SYHAMSLZRG+AM/OPC//ICTJW+G3.WB+DAGFURHVRLHQA4AOV4ZZ/JUFMVEOYPBUDF3U3KJZN.EBTHGJAFAMZDUQEHGRANOUXXBNKXV4IUO+LYNT.LID.K4WMYCHBWSOKAZ3HHWO.SUT3CDWS+4R4D+EIYMOCPCIB+.4LRFDQZY+Y/VBIYXO3KT/K-PUOFP/Q3.+ZYXT3LAJHW+DGFZPYRTJYSTFVMLEWL-.S3FNSXX3PGB+.+M/GQHZJQ/K/VZTKMVK/SF3CBSRVLFVCHLZKJWCNFANACX+JQLIN4O4Y4WMYSLGXT43RHFK.+HIJ+4EJQBGPPOHGSB+C3KABZKXTU+P/WDFTWMAURUDLK+PWC4M4TQ.Z