Updated branch info.
Implemented a cache for dynamic CSF labels.

NOSTR and MISSING texts are added to the label list whenever they are encountered. If the same string is encountered many times, it is added as many times to the list. This happened for every match.

Now the texts are added once to a hash map instead. This replaces excessive (in terms of "uses more than needed") memory usage by the cost of logarithmic (instead of constant) runtime.
Added support for -LOG-CSF parameter to log dynamically added csf labels

Labels missing in the csf file will be logged in the debug log. Each label is only logged once. Lines are prefixed with "[CSFLoader]".
Moved retrieving the super weapon readiness overlay text to initialization.
Minor changes to the cell enumerators:
- Use of a nested for loop instead of a single loop, which has to decompose the x and y components in every iteration
- If height is larger than 0, the area is always interpreted as rectangle
- Moved some stuff around, comment change
Allocate the DistinctCollectors on the stack.
Minor change to Firewall logic

If the foot has already been grounded, do not immolate it. The hook is placed right after the call to the base class method, and thus the IsAlive check should be there.
Extended list length for house lists

Reading a house type bit map uses the extended buffer size. Flags like SecretLab.ForbiddenHouses= and SecretLab.RequiredHouses= should benefit from this.
This fix prevents a Chronosphere SW (aborted after the source area selection) to play the ready message again.
Skip self healing on sinking and crashing technos. This should prevent crashing aircraft from being resurrected.
Small display problem in vanilla YR: when destroying an Oil Derrick, the health bar will flash a single green pip when health reaches zero. This fix makes the last pip red.
Implemented EVA.SelectTarget= for super weapons.
Support the activate message on UnitDelivery super weapons
Support activation sound on UnitDelivery super weapons
Minor changes.
Related to issue #895572: Chaos-gassed units still obey the stop command

Well... not any more.
Related to issue #895688: Deactivation sound plays when starting another game

Usually, playing sounds is wrapped in a special check, which is missing from the deactivation routine. It has been added.
Related to issue #1074208: Buildings of your allies can be spied

Spies will check whether the target building is allied or not right before entering. If the building is allied, the spy will stop its current mission and scatter.
Implemented EVA.Tag=

All new EVA types have to be named in the new [EVATypes] list in evamd.ini. This is a list like every other list, i.e. the part left of the equal sign is ignored. The voices called "Allied", "Russian" and "Yuri" are always added.

Example:
[EVATypes]
0=Cabal
1=GDI

Now, these values can be used as keys in the EVA sound sections to point to a EVA-specific filename.

Example:
[EVA_LowPower]
Cabal=ccab053
GDI=cgdi053

To give a side a certain EVA voice, use [Side]EVA.Tag=. It takes an EVA type from above, or one of the values "Allied", "Russian", "Yuri" or "none".
Related to #1045049: SpyEffect.RevealProduction and PCX Cameos